-----------------------------------LOADER.h---------------------------------------------
class Loader
{
public:
Loader();
~Loader();
public:
std::shared_ptr<RawModel> loadToVAO(const void *position, const void *color);
template <typename _Tp, std::size_t _Nm>
std::shared_ptr<RawModel> loadToVAO(std::array<_Tp, _Nm> & position, const void *)
{
VertexArray *vao = new VertexArray();
vao->Bind();
VertexBuffer *vbo = new VertexBuffer(position._M_elems, sizeof(_Tp) * position.size());
VertexBufferLayout layout;
layout.Push<_Tp>(2);
vao->AddBuffer(vbo, layout);
std::shared_ptr<RawModel> rawModel(new RawModel());
rawModel->addVAO(vao);
return rawModel;
}
private:
VertexArray createVAO(const void *position, const void *color);
};
template <typename V, typename... T>
constexpr auto array_of(T &&... t)
-> std::array<V, sizeof...(T)>
{
return {{std::forward<T>(t)...}};
}
-------------------------------------Loader.cpp-------------------------------------------------
#include "Loader.h"
std::shared_ptr<RawModel> Loader::loadToVAO(const void *position, const void *color)
{
VertexArray *vao = new VertexArray();
vao->Bind();
VertexBuffer *vbo = new VertexBuffer(position, sizeof(float) * 2 * 4);
VertexBufferLayout layout;
layout.Push<float>(2);
vao->AddBuffer(vbo, layout);
std::shared_ptr<RawModel> rawModel(new RawModel());
rawModel->addVAO(vao);
return rawModel;
}
Loader::Loader()
{
}
Loader::~Loader()
{
}
----------------------------------------main.cpp----------------------------------------------
auto arr = array_of<float>(
-0.5f, //v0
0.5f,
-0.5f, //v1
-0.5f,
0.5f, //v2
-0.5f,
0.5f,
0.5f //v3
);
Loader loader;
std::shared_ptr<RawModel> rawModel = loader.loadToVAO<float>(arr, color);
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1MT0FERVIuaC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKY2xhc3MgTG9hZGVyCnsKICBwdWJsaWM6CiAgICBMb2FkZXIoKTsKICAgIH5Mb2FkZXIoKTsKCiAgcHVibGljOgogICAgc3RkOjpzaGFyZWRfcHRyPFJhd01vZGVsPiBsb2FkVG9WQU8oY29uc3Qgdm9pZCAqcG9zaXRpb24sIGNvbnN0IHZvaWQgKmNvbG9yKTsKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9UcCwgc3RkOjpzaXplX3QgX05tPgogICAgc3RkOjpzaGFyZWRfcHRyPFJhd01vZGVsPiBsb2FkVG9WQU8oc3RkOjphcnJheTxfVHAsIF9ObT4gJiBwb3NpdGlvbiwgY29uc3Qgdm9pZCAqKQogICAgewogICAgICAgIFZlcnRleEFycmF5ICp2YW8gPSBuZXcgVmVydGV4QXJyYXkoKTsKICAgICAgICB2YW8tPkJpbmQoKTsKICAgICAgICBWZXJ0ZXhCdWZmZXIgKnZibyA9IG5ldyBWZXJ0ZXhCdWZmZXIocG9zaXRpb24uX01fZWxlbXMsIHNpemVvZihfVHApICogcG9zaXRpb24uc2l6ZSgpKTsKICAgICAgICBWZXJ0ZXhCdWZmZXJMYXlvdXQgbGF5b3V0OwogICAgICAgIGxheW91dC5QdXNoPF9UcD4oMik7CiAgICAgICAgdmFvLT5BZGRCdWZmZXIodmJvLCBsYXlvdXQpOwogICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxSYXdNb2RlbD4gcmF3TW9kZWwobmV3IFJhd01vZGVsKCkpOwogICAgICAgIHJhd01vZGVsLT5hZGRWQU8odmFvKTsKICAgICAgICByZXR1cm4gcmF3TW9kZWw7CiAgICB9CgogIHByaXZhdGU6CiAgICBWZXJ0ZXhBcnJheSBjcmVhdGVWQU8oY29uc3Qgdm9pZCAqcG9zaXRpb24sIGNvbnN0IHZvaWQgKmNvbG9yKTsKfTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBWLCB0eXBlbmFtZS4uLiBUPgpjb25zdGV4cHIgYXV0byBhcnJheV9vZihUICYmLi4uIHQpCiAgICAtPiBzdGQ6OmFycmF5PFYsIHNpemVvZi4uLihUKT4KewogICAgcmV0dXJuIHt7c3RkOjpmb3J3YXJkPFQ+KHQpLi4ufX07Cn0KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1Mb2FkZXIuY3BwLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojaW5jbHVkZSAiTG9hZGVyLmgiCgpzdGQ6OnNoYXJlZF9wdHI8UmF3TW9kZWw+IExvYWRlcjo6bG9hZFRvVkFPKGNvbnN0IHZvaWQgKnBvc2l0aW9uLCBjb25zdCB2b2lkICpjb2xvcikKewogICAgVmVydGV4QXJyYXkgKnZhbyA9IG5ldyBWZXJ0ZXhBcnJheSgpOwogICAgdmFvLT5CaW5kKCk7CiAgICBWZXJ0ZXhCdWZmZXIgKnZibyA9IG5ldyBWZXJ0ZXhCdWZmZXIocG9zaXRpb24sIHNpemVvZihmbG9hdCkgKiAyICogNCk7CiAgICBWZXJ0ZXhCdWZmZXJMYXlvdXQgbGF5b3V0OwogICAgbGF5b3V0LlB1c2g8ZmxvYXQ+KDIpOwogICAgdmFvLT5BZGRCdWZmZXIodmJvLCBsYXlvdXQpOwogICAgc3RkOjpzaGFyZWRfcHRyPFJhd01vZGVsPiByYXdNb2RlbChuZXcgUmF3TW9kZWwoKSk7CiAgICByYXdNb2RlbC0+YWRkVkFPKHZhbyk7CiAgICByZXR1cm4gcmF3TW9kZWw7Cn0KCkxvYWRlcjo6TG9hZGVyKCkKewp9CgpMb2FkZXI6On5Mb2FkZXIoKQp7Cn0KCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tbWFpbi5jcHAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgphdXRvIGFyciA9IGFycmF5X29mPGZsb2F0PigKICAgICAgICAtMC41ZiwgLy92MAogICAgICAgIDAuNWYsCgogICAgICAgIC0wLjVmLCAvL3YxCiAgICAgICAgLTAuNWYsCgogICAgICAgIDAuNWYsIC8vdjIKICAgICAgICAtMC41ZiwKCiAgICAgICAgMC41ZiwKICAgICAgICAwLjVmIC8vdjMKICAgICk7CiAgICAKIExvYWRlciBsb2FkZXI7CiAgICBzdGQ6OnNoYXJlZF9wdHI8UmF3TW9kZWw+IHJhd01vZGVsID0gbG9hZGVyLmxvYWRUb1ZBTzxmbG9hdD4oYXJyLCBjb2xvcik7