src/gl/basicshaderprogram.h

changeset 377
e1c5e4310f8b
parent 264
76a025db4948
child 378
01537fbe096e
equal deleted inserted replaced
376:3cef3b016330 377:e1c5e4310f8b
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 };

mercurial