Bit of cleanup.

This commit is contained in:
2023-11-01 23:08:20 -05:00
parent d530210bed
commit c4032b4a84
32 changed files with 212 additions and 162 deletions

View File

@ -30,8 +30,7 @@ void Shader::compileShader(
if(!isSuccess) {
glGetShaderiv(this->shaderVertex, GL_INFO_LOG_LENGTH, &maxLength);
glGetShaderInfoLog(this->shaderVertex, maxLength, &maxLength, error);
debugMessage("Error compiling vert shader");
debugMessage(error);
assertUnreachable("Error compiling vert shader %s", error);
throw error;
}
assertNoGLError();
@ -46,16 +45,15 @@ void Shader::compileShader(
glGetShaderiv(this->shaderFrag, GL_INFO_LOG_LENGTH, &maxLength);
glGetShaderInfoLog(this->shaderFrag, maxLength, &maxLength, error);
glDeleteShader(this->shaderVertex);
debugMessage("Error compiling frag shader");
debugMessage(error);
assertUnreachable("Error compiling frag shader %s", error);
throw error;
}
assertNoGLError();
// Now create the shader program.
this->shaderProgram = glCreateProgram();
glAttachShader(this->shaderProgram, this->shaderVertex);
glAttachShader(this->shaderProgram, this->shaderFrag);
shaderProgram = glCreateProgram();
glAttachShader(shaderProgram, shaderVertex);
glAttachShader(shaderProgram, shaderFrag);
assertNoGLError();
// Now parse out the variables.
@ -75,8 +73,7 @@ void Shader::compileShader(
glGetProgramInfoLog(this->shaderProgram, maxLength, &maxLength, error);
glDeleteShader(this->shaderVertex);
glDeleteShader(this->shaderFrag);
debugMessage("Error compiling shader program");
debugMessage(error);
assertUnreachable("Error compiling shader program %s", error);
throw error;
}
assertNoGLError();
@ -101,7 +98,10 @@ shaderbufferlocation_t Shader::getBufferLocationByName(std::string name) {
return glGetUniformBlockIndex(this->shaderProgram, name.c_str());
}
void Shader::setParameterBuffer(shaderbufferlocation_t location, shaderbufferslot_t slot) {
void Shader::setParameterBuffer(
shaderbufferlocation_t location,
shaderbufferslot_t slot
) {
glUniformBlockBinding(this->shaderProgram, location, slot);
assertNoGLError();
}
@ -132,13 +132,13 @@ void Shader::setFloat(shaderparameter_t param, float_t value) {
}
void Shader::bind() {
assertTrue(this->shaderProgram != -1, "Shader::bind: Cannot bind a program that is not ready");
glUseProgram(this->shaderProgram);
assertTrue(shaderProgram != -1, "Cannot bind a program that is not ready");
glUseProgram(shaderProgram);
assertNoGLError();
}
Shader::~Shader() {
if(this->shaderProgram != -1) glDeleteProgram(this->shaderProgram);
if(this->shaderVertex != -1) glDeleteShader(this->shaderVertex);
if(this->shaderFrag != -1) glDeleteShader(this->shaderFrag);
if(shaderProgram != -1) glDeleteProgram(shaderProgram);
if(shaderVertex != -1) glDeleteShader(shaderVertex);
if(shaderFrag != -1) glDeleteShader(shaderFrag);
}

View File

@ -4,10 +4,8 @@
// https://opensource.org/licenses/MIT
#pragma once
#include "display/shader/_Shader.hpp"
#include "display/shader/IShader.hpp"
#include "dawnopengl.hpp"
#include "display/Color.hpp"
#include "debug/debug.hpp"
typedef GLuint shaderparameter_t;
@ -66,12 +64,18 @@ namespace Dawn {
virtual void compile() override = 0;
void bind() override;
void setParameterBuffer(shaderbufferlocation_t location, shaderbufferslot_t slot);
void setParameterBuffer(
shaderbufferlocation_t location,
shaderbufferslot_t slot
);
void setMatrix(shaderparameter_t parameter, glm::mat4 matrix) override;
void setBoolean(shaderparameter_t parameter, bool_t value) override;
void setColor(shaderparameter_t parameter, struct Color color) override;
void setVector3(shaderparameter_t parameter, glm::vec3 vector) override;
void setTexture(shaderparameter_t parameter, textureslot_t texture) override;
void setTexture(
shaderparameter_t parameter,
textureslot_t texture
) override;
void setFloat(shaderparameter_t parameter, float_t value) override;
/**

View File

@ -5,7 +5,7 @@
#pragma once
#include "dawnopengl.hpp"
#include "display/shader/_ShaderParameterBuffer.hpp"
#include "display/shader/IShaderParameterBuffer.hpp"
#include "ShaderParameterBufferTypes.hpp"
namespace Dawn {
@ -13,14 +13,19 @@ namespace Dawn {
typedef GLuint shaderbufferlocation_t;
template<typename T>
class ShaderParameterBuffer : public IShaderParameterBuffer<shaderbufferslot_t> {
class ShaderParameterBuffer :
public IShaderParameterBuffer<shaderbufferslot_t>
{
protected:
shaderbufferlocation_t id = -1;
size_t size;
public:
void init() {
assertTrue(this->id == -1, "ShaderParameterBuffer::init: ShaderParameterBuffer is already initialized!");
assertTrue(
this->id == -1,
"ShaderParameterBuffer is already initialized!"
);
this->size = sizeof(T);
glGenBuffers(1, &this->id);
assertNoGLError();
@ -46,7 +51,7 @@ namespace Dawn {
}
void bind(shaderbufferslot_t location) override {
assertTrue(this->isReady(), "ShaderParameterBuffer::bind: ShaderParameterBuffer is not ready!");
assertTrue(this->isReady(), "ShaderParameterBuffer is not ready!");
glBindBuffer(GL_UNIFORM_BUFFER, this->id);
assertNoGLError();
glBindBufferBase(GL_UNIFORM_BUFFER, location, this->id);
@ -71,10 +76,12 @@ namespace Dawn {
* @param length Length of the data to buffer.
*/
void bufferRaw(void *data, size_t start, size_t length) {
assertTrue(this->isReady(), "ShaderParameterBuffer::bufferRaw: ShaderParameterBuffer is not ready!");
assertTrue(this->isReady(), "ShaderParameterBuffer is not ready!");
glBindBuffer(GL_UNIFORM_BUFFER, this->id);
assertNoGLError();
glBufferSubData(GL_UNIFORM_BUFFER, start, length, (void*)((size_t)data + start));
glBufferSubData(
GL_UNIFORM_BUFFER, start, length, (void*)((size_t)data + start)
);
assertNoGLError();
}

View File

@ -63,7 +63,9 @@ void SimpleTexturedShader::compile() {
"float4 out gl_Position : POSITION\n"
") {\n"
"o_TextCoord = aTexCoord;\n"
"gl_Position = mul(mul(mul(float4(aPos, 1.0), u_Model), u_View), u_Proj);\n"
"gl_Position = mul(\n"
"mul(mul(float4(aPos, 1.0), u_Model), u_View), u_Proj\n"
");\n"
"}",
// Fragment Shader
@ -91,5 +93,7 @@ void SimpleTexturedShader::compile() {
this->paramColor = this->getParameterByName("u_Color");
this->paramTexture = this->getParameterByName("u_Text");
this->paramHasTexture = this->getParameterByName("u_HasTexture");
this->bufferRenderPipeline = this->getBufferLocationByName(RenderPipelineShaderBuffer::getShaderUniformName());
this->bufferRenderPipeline = this->getBufferLocationByName(
RenderPipelineShaderBuffer::getShaderUniformName()
);
}