diff -r 3cef3b016330 -r e1c5e4310f8b src/gl/basicshaderprogram.h --- a/src/gl/basicshaderprogram.h Tue Apr 11 22:39:18 2023 +0300 +++ b/src/gl/basicshaderprogram.h Tue Apr 11 22:51:12 2023 +0300 @@ -9,30 +9,43 @@ int stride; }; -//! @brief A collection of a single VAO with a single VBO, -//! a vertex shader and a fragment shader. -class BasicShader final +namespace gl { - bool isInitialized = false; - QOpenGLBuffer buffer; - QOpenGLShader vertexShader; - QOpenGLShader fragmentShader; - std::unique_ptr program = nullptr; - QOpenGLVertexArrayObject vertexArrayObject; - int vertexCount = 0; -public: - BasicShader(); - ~BasicShader(); - Q_DISABLE_COPY(BasicShader) - void initialize( + struct basic_shader; + void initialize_basic_shader( + gl::basic_shader* shader, const char* vertexShaderSource, const char* fragmentShaderSource, QOpenGLBuffer::UsagePattern usagePattern, const std::vector& attributeSpecs); - void setUniformMatrix(const char* name, const glm::mat4& value); - void setUniformVector(const char* name, const glm::vec4& value); - void setMvpMatrix(const glm::mat4& newMvpMatrix); - void bufferData(const void* data, std::size_t count, std::size_t size); - void draw(GLenum drawMode); - void teardown(); + void set_shader_matrix_uniform( + gl::basic_shader* shader, + const char* name, + const glm::mat4& value); + void set_shader_vector_uniform( + gl::basic_shader* shader, + const char* name, + const glm::vec4& value); + void buffer_shader_data( + gl::basic_shader* shader, + const void* data, + std::size_t count, + std::size_t size); + void draw_shader( + gl::basic_shader* shader, + GLenum drawMode); +} + +using BasicShader = gl::basic_shader; + +//! @brief A collection of a single VAO with a single VBO, +//! a vertex shader and a fragment shader. +struct gl::basic_shader +{ + QOpenGLBuffer buffer{QOpenGLBuffer::VertexBuffer}; + QOpenGLShader vertexShader{QOpenGLShader::Vertex}; + QOpenGLShader fragmentShader{QOpenGLShader::Fragment}; + std::unique_ptr program = nullptr; + QOpenGLVertexArrayObject vertexArrayObject; + int vertexCount = 0; };