Introduce cgl::Buffer::put<E> for Eigen matrices and other containers.

Make put(std::vector<T>) more generic by specializing the new put<E> method.
This commit is contained in:
2020-10-13 10:56:55 -04:00
parent 6b34694784
commit 49927568e4
2 changed files with 12 additions and 6 deletions

View File

@@ -53,14 +53,20 @@ namespace cgl {
glNamedBufferData(id, sizeof(T), &data, usage); glNamedBufferData(id, sizeof(T), &data, usage);
} }
void put(const std::vector<T> &data, GLenum usage = GL_STATIC_DRAW) {
put(&data[0], data.size(), usage);
}
void put(const T *data, const size_t &size, GLenum usage = GL_STATIC_DRAW) { void put(const T *data, const size_t &size, GLenum usage = GL_STATIC_DRAW) {
glNamedBufferData(id, sizeof(T) * size, data, usage); glNamedBufferData(id, sizeof(T) * size, data, usage);
} }
template<class E>
void put(const E &data, GLenum usage = GL_STATIC_DRAW) {
put(data.data(), data.size(), usage);
}
template<>
void put<std::vector<T>>(const std::vector<T> &data, GLenum usage = GL_STATIC_DRAW) {
put(data.data, data.size(), usage);
}
void bound(GLenum target, const std::function<void()> &action) const { void bound(GLenum target, const std::function<void()> &action) const {
glBindBuffer(target, id); glBindBuffer(target, id);
action(); action();

View File

@@ -44,8 +44,8 @@ public:
template<class T> template<class T>
Slice(const tc::Group &g, T all_sg_gens, const std::vector<std::vector<int>> &exclude) : group(g) { Slice(const tc::Group &g, T all_sg_gens, const std::vector<std::vector<int>> &exclude) : group(g) {
const Prims<N> &data = merge<N>(hull<N>(g, all_sg_gens, exclude)); const auto &data = merge<N>(hull<N>(g, all_sg_gens, exclude));
ibo.put(data.data(), data.size()); ibo.put(data);
vao.ipointer(0, ibo, 4, GL_UNSIGNED_INT); vao.ipointer(0, ibo, 4, GL_UNSIGNED_INT);
} }