12#ifndef GAMP_GLSLARRAYHANDLERINTERLEAVED_HPP_
13#define GAMP_GLSLARRAYHANDLERINTERLEAVED_HPP_
19namespace gamp::render::gl::data::impl {
20 using namespace gamp::render::gl;
21 using namespace gamp::render::gl::data;
32 template<
typename Value_type>
33 class GLSLArrayHandlerInterleaved :
public GLArrayHandler<Value_type> {
35 std::vector<GLSLSubArrayHandler> subArrays;
38 void syncSubData(
const GL& gl, ShaderState* st) {
39 for(
auto & subArray : subArrays) {
40 subArray.syncData(gl, st);
45 typedef GLArrayHandler<Value_type> glarray_t;
47 GLSLArrayHandlerInterleaved() noexcept = default;
49 void setSubArrayVBOName(GLuint vboName)
override {
50 for(
auto & subArray : subArrays) {
51 subArray.data()->setVBOName(vboName);
55 void addSubHandler(GLSLSubArrayHandler&& handler)
override {
56 subArrays.push_back(std::move(handler));
59 void enableState(
GL& gl,
bool enable, ShaderState* st)
override {
62 throw jau::InternalError(
"Interleaved handle is not VBO: "+m_ad->toString(),
E_FILE_LINE);
64 glarray_t::bindBuffer(gl,
true);
67 glarray_t::bindBuffer(gl,
false);
69 for(
auto & subArray : subArrays) {
70 subArray.enableState(gl, enable, st);