Bit of cleanup.
This commit is contained in:
@ -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);
|
||||
}
|
@ -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;
|
||||
|
||||
/**
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
|
@ -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()
|
||||
);
|
||||
}
|
Reference in New Issue
Block a user