Simplified querying of uniforms
parent
cf59f6b6ae
commit
7bf244be37
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
layout(location = 0) out vec3 outColor;
|
layout(location = 0) out vec3 outColor;
|
||||||
|
|
||||||
|
uniform vec4 uColor;
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
outColor = vec3(1, 0, 0);
|
outColor = uColor.rgb;
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,10 +8,11 @@ uniform sampler2D uTexture;
|
||||||
uniform float uTime;
|
uniform float uTime;
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
outColor = texture(uTexture, ioUV
|
outColor = texture(uTexture,
|
||||||
+ 0.00 * vec2(
|
ioUV
|
||||||
sin(uTime + 1024.0 * ioUV.x),
|
+ 0.01 * vec2(
|
||||||
cos(uTime + 768.0 * ioUV.y)
|
sin(uTime + 1024.0 * ioUV.x),
|
||||||
)
|
cos(uTime + 768.0 * ioUV.y)
|
||||||
).xyz;
|
)
|
||||||
|
).xyz;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
in vec3 inVertex;
|
in vec3 inVertex;
|
||||||
uniform mat4 uModelViewProj;
|
uniform mat4 uModelViewProj;
|
||||||
|
uniform float uTime;
|
||||||
|
|
||||||
out vec2 ioUV;
|
out vec2 ioUV;
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
#version 150 core
|
#version 150 core
|
||||||
#extension GL_ARB_explicit_uniform_location : require
|
#extension GL_ARB_explicit_uniform_location : require
|
||||||
|
|
||||||
in vec3 vertexPosition_modelspace;
|
in vec3 inVertex;
|
||||||
|
|
||||||
|
uniform mat4 uModelViewProj;
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
gl_Position.xyz = vertexPosition_modelspace;
|
gl_Position = uModelViewProj * vec4(inVertex, 1);
|
||||||
gl_Position.w = 1.0;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -131,10 +131,12 @@ void Renderer::Initialize(int width, int height) {
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, mMesh.mVertexBuffer);
|
glBindBuffer(GL_ARRAY_BUFFER, mMesh.mVertexBuffer);
|
||||||
glBufferData(GL_ARRAY_BUFFER, sizeof(g_vertex_buffer_data), g_vertex_buffer_data, GL_STATIC_DRAW);
|
glBufferData(GL_ARRAY_BUFFER, sizeof(g_vertex_buffer_data), g_vertex_buffer_data, GL_STATIC_DRAW);
|
||||||
|
|
||||||
// Shaders
|
// Simple Shader
|
||||||
mProgram = RenderProgram("data/shaders/vs_simple.glsl", "data/shaders/fs_simple.glsl");
|
mDefaultProgram = RenderProgram("data/shaders/vs_simple.glsl", "data/shaders/fs_simple.glsl");
|
||||||
bool load_result = mProgram.Load();
|
bool load_result = mDefaultProgram.Load();
|
||||||
assert(load_result);
|
assert(load_result);
|
||||||
|
muDefaultModelViewProjection = mDefaultProgram.GetUniformLocation("uModelViewProj");
|
||||||
|
muDefaultColor = mDefaultProgram.GetUniformLocation("uColor");
|
||||||
|
|
||||||
// Render Target
|
// Render Target
|
||||||
mRenderTarget = RenderTarget (width, height, RenderTarget::EnableColor | RenderTarget::EnableDepthTexture);
|
mRenderTarget = RenderTarget (width, height, RenderTarget::EnableColor | RenderTarget::EnableDepthTexture);
|
||||||
|
@ -151,23 +153,18 @@ glBufferData(GL_ARRAY_BUFFER, sizeof(g_vertex_buffer_data), g_vertex_buffer_data
|
||||||
mRenderQuadProgramColor = RenderProgram("data/shaders/vs_passthrough.glsl", "data/shaders/fs_simpletexture.glsl");
|
mRenderQuadProgramColor = RenderProgram("data/shaders/vs_passthrough.glsl", "data/shaders/fs_simpletexture.glsl");
|
||||||
load_result = mRenderQuadProgramColor.Load();
|
load_result = mRenderQuadProgramColor.Load();
|
||||||
assert(load_result);
|
assert(load_result);
|
||||||
muRenderQuadModelViewProj = glGetUniformLocation(mRenderQuadProgramColor.mProgramId, "uModelViewProj");
|
muRenderQuadModelViewProj = mRenderQuadProgramColor.GetUniformLocation("uModelViewProj");
|
||||||
gLog("muRenderQuadModelViewProj %d", muRenderQuadModelViewProj);
|
|
||||||
muRenderQuadTexture = glGetUniformLocation(mRenderQuadProgramColor.mProgramId, "uTexture");
|
muRenderQuadTexture = mRenderQuadProgramColor.GetUniformLocation("uTexture");
|
||||||
gLog("muRenderQuadTexture %d", muRenderQuadTexture );
|
muRenderQuadTime = mRenderQuadProgramColor.GetUniformLocation("uTime");
|
||||||
muRenderQuadTime = glGetUniformLocation(mRenderQuadProgramColor.mProgramId, "uTime");
|
|
||||||
gLog("muRenderQuadTime %d", muRenderQuadTime);
|
|
||||||
|
|
||||||
// Program for depth texture rendering
|
// Program for depth texture rendering
|
||||||
mRenderQuadProgramDepth = RenderProgram("data/shaders/vs_passthrough.glsl", "data/shaders/fs_depthbuffer.glsl");
|
mRenderQuadProgramDepth = RenderProgram("data/shaders/vs_passthrough.glsl", "data/shaders/fs_depthbuffer.glsl");
|
||||||
load_result = mRenderQuadProgramDepth.Load();
|
load_result = mRenderQuadProgramDepth.Load();
|
||||||
assert(load_result);
|
assert(load_result);
|
||||||
muRenderQuadDepthModelViewProj = glGetUniformLocation(mRenderQuadProgramDepth.mProgramId, "uModelViewProj");
|
muRenderQuadDepthModelViewProj = mRenderQuadProgramDepth.GetUniformLocation( "uModelViewProj");
|
||||||
gLog("muModelViewProj %d", muRenderQuadDepthModelViewProj);
|
muRenderQuadDepthNear = mRenderQuadProgramDepth.GetUniformLocation("uNear");
|
||||||
muRenderQuadDepthNear = glGetUniformLocation(mRenderQuadProgramDepth.mProgramId, "uNear");
|
muRenderQuadDepthFar = mRenderQuadProgramDepth.GetUniformLocation("uFar");
|
||||||
gLog("muRenderQuadDepthNear %d", muRenderQuadDepthNear);
|
|
||||||
muRenderQuadDepthFar = glGetUniformLocation(mRenderQuadProgramDepth.mProgramId, "uFar");
|
|
||||||
gLog("muRenderQuadDepthFar %d", muRenderQuadDepthFar);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Renderer::Shutdown() {
|
void Renderer::Shutdown() {
|
||||||
|
@ -181,6 +178,10 @@ void Renderer::RenderGl() {
|
||||||
if (width != mWidth || height != mHeight)
|
if (width != mWidth || height != mHeight)
|
||||||
Resize(width, height);
|
Resize(width, height);
|
||||||
|
|
||||||
|
mCamera.mtxProj = Ortho(-1.0f, 1.0f, -1.0f, 1.0f, 1.0f, -1.0f);
|
||||||
|
|
||||||
|
Matrix44f model_view_projection = mCamera.mtxProj * mCamera.mtxView;
|
||||||
|
|
||||||
// enable the render target
|
// enable the render target
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, mRenderTarget.mFrameBufferId);
|
glBindFramebuffer(GL_FRAMEBUFFER, mRenderTarget.mFrameBufferId);
|
||||||
GLenum DrawBuffers[1] = { GL_COLOR_ATTACHMENT0 };
|
GLenum DrawBuffers[1] = { GL_COLOR_ATTACHMENT0 };
|
||||||
|
@ -194,7 +195,10 @@ void Renderer::RenderGl() {
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
glEnable(GL_DEPTH_TEST);
|
glEnable(GL_DEPTH_TEST);
|
||||||
|
|
||||||
glUseProgram(mProgram.mProgramId);
|
glUseProgram(mDefaultProgram.mProgramId);
|
||||||
|
glUniformMatrix4fv(muDefaultModelViewProjection, 1, GL_FALSE, model_view_projection.data());
|
||||||
|
glUniform4fv(muDefaultColor, 1, Vector4f(1.0f, 0.0f, 0.0f, 1.0f).data());
|
||||||
|
glUniformMatrix4fv(muDefaultModelViewProjection, 1, GL_FALSE, model_view_projection.data());
|
||||||
|
|
||||||
glEnableVertexAttribArray(0);
|
glEnableVertexAttribArray(0);
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, mMesh.mVertexBuffer);
|
glBindBuffer(GL_ARRAY_BUFFER, mMesh.mVertexBuffer);
|
||||||
|
|
|
@ -113,7 +113,11 @@ struct Renderer {
|
||||||
|
|
||||||
Camera mCamera;
|
Camera mCamera;
|
||||||
Mesh mMesh;
|
Mesh mMesh;
|
||||||
RenderProgram mProgram;
|
|
||||||
|
RenderProgram mDefaultProgram;
|
||||||
|
GLuint muDefaultModelViewProjection;
|
||||||
|
GLuint muDefaultColor;
|
||||||
|
|
||||||
RenderTarget mRenderTarget;
|
RenderTarget mRenderTarget;
|
||||||
|
|
||||||
GLuint mRenderQuadVertexArrayId;
|
GLuint mRenderQuadVertexArrayId;
|
||||||
|
|
|
@ -102,7 +102,6 @@ bool RenderProgram::Load() {
|
||||||
gLog("%s", &ProgramErrorMessage[0]);
|
gLog("%s", &ProgramErrorMessage[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
glDetachShader(ProgramID, VertexShaderID);
|
glDetachShader(ProgramID, VertexShaderID);
|
||||||
glDetachShader(ProgramID, FragmentShaderID);
|
glDetachShader(ProgramID, FragmentShaderID);
|
||||||
|
|
||||||
|
@ -113,6 +112,30 @@ bool RenderProgram::Load() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GLuint RenderProgram::GetUniformLocation(const std::string& name) {
|
||||||
|
if (mProgramId == -1) {
|
||||||
|
gLog("Cannot get uniform '%s' for program '%s' and '%s': shader not valid.",
|
||||||
|
name.c_str(),
|
||||||
|
mVertexShaderFilename.c_str(),
|
||||||
|
mFragmentShaderFilename.c_str()
|
||||||
|
);
|
||||||
|
assert(mProgramId != -1);
|
||||||
|
}
|
||||||
|
GLuint result = glGetUniformLocation(mProgramId, name.c_str());
|
||||||
|
if (result == -1) {
|
||||||
|
gLog ("Error loading uniform '%s' from shaders '%s' and '%s': uniform not found.",
|
||||||
|
name.c_str(),
|
||||||
|
mVertexShaderFilename.c_str(),
|
||||||
|
mFragmentShaderFilename.c_str()
|
||||||
|
);
|
||||||
|
assert(false);
|
||||||
|
} else {
|
||||||
|
gLog ("Uniform '%s': %d", name.c_str(), result);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// RenderTarget
|
// RenderTarget
|
||||||
//
|
//
|
||||||
|
|
|
@ -139,6 +139,8 @@ struct RenderProgram {
|
||||||
mFragmentShaderFilename(fs)
|
mFragmentShaderFilename(fs)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
GLuint GetUniformLocation(const std::string& name);
|
||||||
|
|
||||||
~RenderProgram();
|
~RenderProgram();
|
||||||
|
|
||||||
bool Load();
|
bool Load();
|
||||||
|
|
Loading…
Reference in New Issue