| 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 }; |