way of accessing and binding shared references. normal vbo now returns a shared_ptr which can be used in place of a vbo_t
parent
5bff8b675c
commit
2f9bccc348
|
@ -85,9 +85,10 @@ namespace blt::gfx
|
|||
*/
|
||||
class static_dynamic_array
|
||||
{
|
||||
public:
|
||||
using vbo_type = std::shared_ptr<vbo_t_owner>;
|
||||
private:
|
||||
static constexpr size_t DATA_SIZE = 8;
|
||||
using vbo_type = std::shared_ptr<vbo_t_owner>;
|
||||
using array_t = std::array<vbo_type, DATA_SIZE>;
|
||||
std::variant<array_t, vbo_type*> data_;
|
||||
size_t size_ = DATA_SIZE;
|
||||
|
@ -130,6 +131,8 @@ namespace blt::gfx
|
|||
static_dynamic_array VBOs;
|
||||
HASHSET<GLuint> used_attributes;
|
||||
vbo_t element;
|
||||
|
||||
void handle_vbo(const vbo_t& vbo, int attribute_number, int coordinate_size, GLenum type, int stride, long offset);
|
||||
public:
|
||||
vertex_array();
|
||||
|
||||
|
@ -150,8 +153,10 @@ namespace blt::gfx
|
|||
* @param stride how many bytes this data takes (for the entire per-vertex data structure) 0 will assume packed data
|
||||
* This is in effect how many bytes until the next block of data
|
||||
* @param offset offset into the data structure to where the data is stored
|
||||
* @return a shared pointer to the stored vbo. used for chaining VAOs with multiple shared VBOs
|
||||
*/
|
||||
void bindVBO(const vbo_t& vbo, int attribute_number, int coordinate_size, GLenum type, int stride, long offset);
|
||||
static_dynamic_array::vbo_type bindVBO(const vbo_t& vbo, int attribute_number, int coordinate_size, GLenum type, int stride, long offset);
|
||||
void bindVBO(const static_dynamic_array::vbo_type& vbo, int attribute_number, int coordinate_size, GLenum type, int stride, long offset);
|
||||
|
||||
inline void bindElement(const vbo_t& vbo)
|
||||
{
|
||||
|
|
|
@ -130,7 +130,21 @@ namespace blt::gfx
|
|||
glDeleteVertexArrays(1, &vaoID);
|
||||
}
|
||||
|
||||
void vertex_array::bindVBO(const vbo_t& vbo, int attribute_number, int coordinate_size, GLenum type, int stride, long offset)
|
||||
static_dynamic_array::vbo_type vertex_array::bindVBO(const vbo_t& vbo, int attribute_number, int coordinate_size, GLenum type, int stride,
|
||||
long offset)
|
||||
{
|
||||
handle_vbo(vbo, attribute_number, coordinate_size, type, stride, offset);
|
||||
VBOs[attribute_number] = std::make_shared<vbo_t_owner>(vbo);
|
||||
return VBOs[attribute_number];
|
||||
}
|
||||
|
||||
void vertex_array::bindVBO(const static_dynamic_array::vbo_type& vbo, int attribute_number, int coordinate_size, GLenum type, int stride, long offset)
|
||||
{
|
||||
handle_vbo(vbo->vbo, attribute_number, coordinate_size, type, stride, offset);
|
||||
VBOs[attribute_number] = vbo;
|
||||
}
|
||||
|
||||
void vertex_array::handle_vbo(const vbo_t& vbo, int attribute_number, int coordinate_size, GLenum type, int stride, long offset)
|
||||
{
|
||||
used_attributes.insert(attribute_number);
|
||||
bind();
|
||||
|
@ -138,9 +152,6 @@ namespace blt::gfx
|
|||
|
||||
glVertexAttribPointer(attribute_number, coordinate_size, type, GL_FALSE, stride < 0 ? 0 : stride, (void*) offset);
|
||||
glEnableVertexAttribArray(attribute_number);
|
||||
|
||||
VBOs[attribute_number] = std::make_shared<vbo_t_owner>(vbo);
|
||||
|
||||
unbind();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue