src/gl/basicshaderprogram.h

Wed, 22 Jun 2022 20:10:57 +0300

author
Teemu Piippo <teemu.s.piippo@gmail.com>
date
Wed, 22 Jun 2022 20:10:57 +0300
changeset 251
94b0a30a1886
parent 250
2837b549e616
child 259
c27612f0eac0
permissions
-rw-r--r--

Add object editor into main

#pragma once
#include "common.h"

struct GLAttributeSpec
{
	GLenum type;
	int offset;
	int tuplesize;
	int stride;
};

//! @brief A collection of a single VAO with a single VBO,
//! a vertex shader and a fragment shader.
class BasicShader final : protected QOpenGLFunctions
{
	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(
		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();
};

mercurial