src/gl/basicshaderprogram.h

Sun, 12 Jun 2022 23:59:37 +0300

author
Teemu Piippo <teemu.s.piippo@gmail.com>
date
Sun, 12 Jun 2022 23:59:37 +0300
changeset 215
34c6e7bc4ee1
parent 118
8e1c9f18ae15
child 216
c7241f504117
permissions
-rw-r--r--

Reimplement the axes program as a layer that can be added to PartRenderer

#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;
	std::size_t 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 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