diff --git a/include/glcxx/Buffer.hpp b/include/glcxx/Buffer.hpp index 04e607e..9f5805f 100644 --- a/include/glcxx/Buffer.hpp +++ b/include/glcxx/Buffer.hpp @@ -3,6 +3,7 @@ #include "glcxx/gl.hpp" #include +#include namespace glcxx { @@ -15,6 +16,18 @@ namespace glcxx void set_buffer_data(GLenum target, GLenum usage, const void * ptr, size_t size); + void set_buffer_data(GLenum target, GLenum usage, std::initializer_list data) + { + set_buffer_data(target, usage, &*data.begin(), + (uintptr_t)&*data.end() - (uintptr_t)&*data.begin()); + } + + void set_buffer_data_d(GLenum target, GLenum usage, std::initializer_list data) + { + set_buffer_data(target, usage, &*data.begin(), + (uintptr_t)&*data.end() - (uintptr_t)&*data.begin()); + } + GLuint id() const { return m_id; } void bind() const { glBindBuffer(m_target, m_id); } @@ -26,6 +39,22 @@ namespace glcxx return buffer; } + static std::shared_ptr create(GLenum target, GLenum usage, + std::initializer_list data) + { + std::shared_ptr buffer = std::make_shared(); + buffer->set_buffer_data(target, usage, data); + return buffer; + } + + static std::shared_ptr create_d(GLenum target, GLenum usage, + std::initializer_list data) + { + std::shared_ptr buffer = std::make_shared(); + buffer->set_buffer_data_d(target, usage, data); + return buffer; + } + protected: GLuint m_id; diff --git a/test/test.cpp b/test/test.cpp index e36fc6f..0223447 100644 --- a/test/test.cpp +++ b/test/test.cpp @@ -35,26 +35,20 @@ bool init(void) "position", 0, "color", 1); - GLfloat coords[] = { - -0.5, -0.5, - 0.5, -0.5, - 0.5, 0.5, - -0.5, 0.5, - }; - buffer = glcxx::Buffer::create(GL_ARRAY_BUFFER, GL_STATIC_DRAW, &coords, sizeof(coords)); + buffer = glcxx::Buffer::create(GL_ARRAY_BUFFER, GL_STATIC_DRAW, + {-0.5, -0.5, + 0.5, -0.5, + 0.5, 0.5, + -0.5, 0.5}); - GLfloat coords2[] = { - 0.2, 0.2, - 0.9, 0.2, - 0.9, 0.9, - }; - buffer2 = glcxx::Buffer::create(GL_ARRAY_BUFFER, GL_STATIC_DRAW, &coords2, sizeof(coords2)); - GLfloat colors[] = { - 1.0, 0.1, 0.1, 1.0, - 0.1, 1.0, 0.1, 1.0, - 0.1, 0.1, 1.0, 1.0, - }; - buffer3 = glcxx::Buffer::create(GL_ARRAY_BUFFER, GL_STATIC_DRAW, &colors, sizeof(colors)); + buffer2 = glcxx::Buffer::create(GL_ARRAY_BUFFER, GL_STATIC_DRAW, + {0.2, 0.2, + 0.9, 0.2, + 0.9, 0.9}); + buffer3 = glcxx::Buffer::create(GL_ARRAY_BUFFER, GL_STATIC_DRAW, + {1.0, 0.1, 0.1, 1.0, + 0.1, 1.0, 0.1, 1.0, + 0.1, 0.1, 1.0, 1.0}); array1->bind(); glEnableVertexAttribArray(0);