src/gl/basicshaderprogram.h

changeset 377
e1c5e4310f8b
parent 264
76a025db4948
child 378
01537fbe096e
--- 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<gl::ShaderProgram> 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<GLAttributeSpec>& 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<gl::ShaderProgram> program = nullptr;
+	QOpenGLVertexArrayObject vertexArrayObject;
+	int vertexCount = 0;
 };

mercurial