7 int offset; |
7 int offset; |
8 int tuplesize; |
8 int tuplesize; |
9 int stride; |
9 int stride; |
10 }; |
10 }; |
11 |
11 |
12 //! @brief A collection of a single VAO with a single VBO, |
12 namespace gl |
13 //! a vertex shader and a fragment shader. |
|
14 class BasicShader final |
|
15 { |
13 { |
16 bool isInitialized = false; |
14 struct basic_shader; |
17 QOpenGLBuffer buffer; |
15 void initialize_basic_shader( |
18 QOpenGLShader vertexShader; |
16 gl::basic_shader* shader, |
19 QOpenGLShader fragmentShader; |
|
20 std::unique_ptr<gl::ShaderProgram> program = nullptr; |
|
21 QOpenGLVertexArrayObject vertexArrayObject; |
|
22 int vertexCount = 0; |
|
23 public: |
|
24 BasicShader(); |
|
25 ~BasicShader(); |
|
26 Q_DISABLE_COPY(BasicShader) |
|
27 void initialize( |
|
28 const char* vertexShaderSource, |
17 const char* vertexShaderSource, |
29 const char* fragmentShaderSource, |
18 const char* fragmentShaderSource, |
30 QOpenGLBuffer::UsagePattern usagePattern, |
19 QOpenGLBuffer::UsagePattern usagePattern, |
31 const std::vector<GLAttributeSpec>& attributeSpecs); |
20 const std::vector<GLAttributeSpec>& attributeSpecs); |
32 void setUniformMatrix(const char* name, const glm::mat4& value); |
21 void set_shader_matrix_uniform( |
33 void setUniformVector(const char* name, const glm::vec4& value); |
22 gl::basic_shader* shader, |
34 void setMvpMatrix(const glm::mat4& newMvpMatrix); |
23 const char* name, |
35 void bufferData(const void* data, std::size_t count, std::size_t size); |
24 const glm::mat4& value); |
36 void draw(GLenum drawMode); |
25 void set_shader_vector_uniform( |
37 void teardown(); |
26 gl::basic_shader* shader, |
|
27 const char* name, |
|
28 const glm::vec4& value); |
|
29 void buffer_shader_data( |
|
30 gl::basic_shader* shader, |
|
31 const void* data, |
|
32 std::size_t count, |
|
33 std::size_t size); |
|
34 void draw_shader( |
|
35 gl::basic_shader* shader, |
|
36 GLenum drawMode); |
|
37 } |
|
38 |
|
39 using BasicShader = gl::basic_shader; |
|
40 |
|
41 //! @brief A collection of a single VAO with a single VBO, |
|
42 //! a vertex shader and a fragment shader. |
|
43 struct gl::basic_shader |
|
44 { |
|
45 QOpenGLBuffer buffer{QOpenGLBuffer::VertexBuffer}; |
|
46 QOpenGLShader vertexShader{QOpenGLShader::Vertex}; |
|
47 QOpenGLShader fragmentShader{QOpenGLShader::Fragment}; |
|
48 std::unique_ptr<gl::ShaderProgram> program = nullptr; |
|
49 QOpenGLVertexArrayObject vertexArrayObject; |
|
50 int vertexCount = 0; |
38 }; |
51 }; |