@@ -384,10 +384,22 @@ void Shader::set_buffer_divisor(const std::string &name, size_t divisor)
384
384
{
385
385
auto it = m_buffers.find (name);
386
386
if (it == m_buffers.end ())
387
- throw std::runtime_error (" Shader::set_buffer (): could not find argument named \" " + name + " \" " );
387
+ throw std::runtime_error (" Shader::set_buffer_divisor (): could not find argument named \" " + name + " \" " );
388
388
389
389
Buffer &buf = m_buffers[name];
390
390
buf.instance_divisor = divisor;
391
+ buf.dirty = true ;
392
+ }
393
+
394
+ void Shader::set_buffer_pointer_offset (const std::string &name, size_t offset)
395
+ {
396
+ auto it = m_buffers.find (name);
397
+ if (it == m_buffers.end ())
398
+ throw std::runtime_error (" Shader::set_buffer_pointer_offset(): could not find argument named \" " + name + " \" " );
399
+
400
+ Buffer &buf = m_buffers[name];
401
+ buf.pointer_offset = offset;
402
+ buf.dirty = true ;
391
403
}
392
404
393
405
// void Shader::set_texture(const std::string &name, Texture *texture)
@@ -461,7 +473,8 @@ void Shader::begin()
461
473
" \" has an invalid shapeension (expected ndim=2, got " +
462
474
std::to_string (buf.ndim ) + " )" );
463
475
464
- CHK (glVertexAttribPointer (buf.index , (GLint)buf.shape [1 ], gl_type, GL_FALSE, 0 , nullptr ));
476
+ CHK (glVertexAttribPointer (buf.index , (GLint)buf.shape [1 ], gl_type, GL_FALSE, 0 ,
477
+ (const void *)buf.pointer_offset ));
465
478
CHK (glVertexAttribDivisor (buf.index , (GLuint)buf.instance_divisor ));
466
479
break ;
467
480
0 commit comments