------------------------------------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>&, const void*);
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;
}
template<typename _Tp, std::size_t _Nm>
std::shared_ptr<RawModel> Loader::loadToVAO(std::array<_Tp ,_Nm> &position, const void *color)
{
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;
}
Loader::Loader()
{
}
Loader::~Loader()
{
}
------------------------------------main-------------------------------
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);
^^^^^ Ta linijka zglasz bląd : undefined reference to `std::shared_ptr<RawModel> Loader::loadToVAO<float, 8ull>(std::array<float, 8ull>&, void const*)'
Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLUxPQURFUi5oLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpjbGFzcyBMb2FkZXIKewogIHB1YmxpYzoKICAgIExvYWRlcigpOwogICAgfkxvYWRlcigpOwoKICBwdWJsaWM6CiAgICBzdGQ6OnNoYXJlZF9wdHI8UmF3TW9kZWw+IGxvYWRUb1ZBTyhjb25zdCB2b2lkICpwb3NpdGlvbiwgY29uc3Qgdm9pZCAqY29sb3IpOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgc3RkOjpzaXplX3QgX05tPgogICAgc3RkOjpzaGFyZWRfcHRyPFJhd01vZGVsPiBsb2FkVG9WQU8oc3RkOjphcnJheTxfVHAsIF9ObT4mLCBjb25zdCB2b2lkKik7CgogIHByaXZhdGU6CiAgICBWZXJ0ZXhBcnJheSBjcmVhdGVWQU8oY29uc3Qgdm9pZCAqcG9zaXRpb24sIGNvbnN0IHZvaWQgKmNvbG9yKTsKfTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBWLCB0eXBlbmFtZS4uLiBUPgpjb25zdGV4cHIgYXV0byBhcnJheV9vZihUICYmLi4uIHQpCiAgICAtPiBzdGQ6OmFycmF5PFYsIHNpemVvZi4uLihUKT4KewogICAgcmV0dXJuIHt7c3RkOjpmb3J3YXJkPFQ+KHQpLi4ufX07Cn0KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tTE9BREVSLmNwcC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKI2luY2x1ZGUgIkxvYWRlci5oIgoKc3RkOjpzaGFyZWRfcHRyPFJhd01vZGVsPiBMb2FkZXI6OmxvYWRUb1ZBTyhjb25zdCB2b2lkICpwb3NpdGlvbiwgY29uc3Qgdm9pZCAqY29sb3IpCnsKICAgIFZlcnRleEFycmF5ICp2YW8gPSBuZXcgVmVydGV4QXJyYXkoKTsKICAgIHZhby0+QmluZCgpOwogICAgVmVydGV4QnVmZmVyICp2Ym8gPSBuZXcgVmVydGV4QnVmZmVyKHBvc2l0aW9uLCBzaXplb2YoZmxvYXQpICogMiAqIDQpOwogICAgVmVydGV4QnVmZmVyTGF5b3V0IGxheW91dDsKICAgIGxheW91dC5QdXNoPGZsb2F0PigyKTsKICAgIHZhby0+QWRkQnVmZmVyKHZibywgbGF5b3V0KTsKICAgIHN0ZDo6c2hhcmVkX3B0cjxSYXdNb2RlbD4gcmF3TW9kZWwobmV3IFJhd01vZGVsKCkpOwogICAgcmF3TW9kZWwtPmFkZFZBTyh2YW8pOwogICAgcmV0dXJuIHJhd01vZGVsOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHN0ZDo6c2l6ZV90IF9ObT4Kc3RkOjpzaGFyZWRfcHRyPFJhd01vZGVsPiBMb2FkZXI6OmxvYWRUb1ZBTyhzdGQ6OmFycmF5PF9UcCAsX05tPiAmcG9zaXRpb24sIGNvbnN0IHZvaWQgKmNvbG9yKQp7CiAgICBWZXJ0ZXhBcnJheSAqdmFvID0gbmV3IFZlcnRleEFycmF5KCk7CiAgICB2YW8tPkJpbmQoKTsKICAgIFZlcnRleEJ1ZmZlciAqdmJvID0gbmV3IFZlcnRleEJ1ZmZlcihwb3NpdGlvbi5fTV9lbGVtcywgc2l6ZW9mKF9UcCkgKiBwb3NpdGlvbi5zaXplKCkpOwogICAgVmVydGV4QnVmZmVyTGF5b3V0IGxheW91dDsKICAgIGxheW91dC5QdXNoPF9UcD4oMik7CiAgICB2YW8tPkFkZEJ1ZmZlcih2Ym8sIGxheW91dCk7CiAgICBzdGQ6OnNoYXJlZF9wdHI8UmF3TW9kZWw+IHJhd01vZGVsKG5ldyBSYXdNb2RlbCgpKTsKICAgIHJhd01vZGVsLT5hZGRWQU8odmFvKTsKICAgIHJldHVybiByYXdNb2RlbDsKfQoKTG9hZGVyOjpMb2FkZXIoKQp7Cn0KCkxvYWRlcjo6fkxvYWRlcigpCnsKfQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1tYWluLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCmF1dG8gYXJyID0gYXJyYXlfb2Y8ZmxvYXQ+KAogICAgICAgIC0wLjVmLCAvL3YwCiAgICAgICAgMC41ZiwKCiAgICAgICAgLTAuNWYsIC8vdjEKICAgICAgICAtMC41ZiwKCiAgICAgICAgMC41ZiwgLy92MgogICAgICAgIC0wLjVmLAoKICAgICAgICAwLjVmLAogICAgICAgIDAuNWYgLy92MwogICAgKTsKICAgIAogICAgKC4uLikKICAgIAogICAgTG9hZGVyIGxvYWRlcjsKICAgIHN0ZDo6c2hhcmVkX3B0cjxSYXdNb2RlbD4gcmF3TW9kZWwgPSBsb2FkZXIubG9hZFRvVkFPPGZsb2F0PihhcnIsIGNvbG9yKTsKICAgIAogICAgXl5eXl4gVGEgbGluaWprYSB6Z2xhc3ogYmzEhWQgOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBzdGQ6OnNoYXJlZF9wdHI8UmF3TW9kZWw+IExvYWRlcjo6bG9hZFRvVkFPPGZsb2F0LCA4dWxsPihzdGQ6OmFycmF5PGZsb2F0LCA4dWxsPiYsIHZvaWQgY29uc3QqKSc=