Skip to content

Commit

Permalink
#5893: WIP commit, creating the cube map shader, some refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
codereader committed Feb 19, 2022
1 parent c437301 commit 22b34e1
Show file tree
Hide file tree
Showing 13 changed files with 101 additions and 125 deletions.
23 changes: 15 additions & 8 deletions include/GLProgramAttributes.h
@@ -1,15 +1,22 @@
#ifndef GLPROGRAMATTRIBUTES_H_
#define GLPROGRAMATTRIBUTES_H_
#pragma once

namespace render
{

/**
* Enumeration for vertex attributes to be bound to a GLProgram, to avoid using
* magic numbers.
*/
enum GLProgramAttributes {
ATTR_TEXCOORD = 8,
ATTR_TANGENT = 9,
ATTR_BITANGENT = 10,
ATTR_NORMAL = 11
struct GLProgramAttribute
{
enum Index
{
Position = 0,
TexCoord = 8,
Tangent = 9,
Bitangent = 10,
Normal = 11,
};
};

#endif /*GLPROGRAMATTRIBUTES_H_*/
}
28 changes: 6 additions & 22 deletions install/gl/cubemap_fp.glsl
@@ -1,28 +1,12 @@
#version 120

uniform sampler2D u_diffusemap;
uniform sampler2D u_bumpmap;
uniform sampler2D u_specularmap;
uniform sampler2D u_attenuationmap_xy;
uniform sampler2D u_attenuationmap_z;
uniform vec3 u_view_origin;
uniform vec3 u_light_origin;
uniform vec3 u_light_color;
uniform float u_light_scale;
uniform vec3 u_viewOrigin;

// Invert vertex colour
uniform bool uInvertVCol;
varying vec4 var_TexCoord0;

// Activate ambient light mode (brightness unaffected by direction)
uniform bool uAmbientLight;

varying vec3 var_vertex;
varying vec4 var_tex_diffuse_bump;
varying vec2 var_tex_specular;
varying vec4 var_tex_atten_xy_z;
varying mat3 var_mat_os2ts;

void main()
void main()
{
gl_FragColor.rgb = vec3(1, 0, 1);
gl_FragColor = vec4(1,1,1,1);
//gl_FragColor.rgb = vec3(var_TexCoord0);
}

52 changes: 15 additions & 37 deletions install/gl/cubemap_vp.glsl
@@ -1,43 +1,21 @@
// vertex attributes
attribute vec4 attr_TexCoord0;
attribute vec3 attr_Tangent;
attribute vec3 attr_Bitangent;
attribute vec3 attr_Normal;

varying vec3 var_vertex;
varying vec4 var_tex_diffuse_bump;
varying vec2 var_tex_specular;
varying vec4 var_tex_atten_xy_z;
varying mat3 var_mat_os2ts;

void main()
{
// transform vertex position into homogenous clip-space
gl_Position = ftransform();

// assign position in object space
var_vertex = gl_Vertex.xyz;
#version 120

// transform texcoords into diffusemap texture space
var_tex_diffuse_bump.st = (gl_TextureMatrix[0] * attr_TexCoord0).st;

// transform texcoords into bumpmap texture space
var_tex_diffuse_bump.pq = (gl_TextureMatrix[1] * attr_TexCoord0).st;
// vertex attributes
attribute vec4 attr_Position;
attribute vec4 attr_TexCoord0;
attribute vec3 attr_Tangent;
attribute vec3 attr_Bitangent;
attribute vec3 attr_Normal;

// transform texcoords into specularmap texture space
var_tex_specular = (gl_TextureMatrix[2] * attr_TexCoord0).st;
uniform vec3 u_viewOrigin;

// calc light xy,z attenuation in light space
var_tex_atten_xy_z = gl_TextureMatrix[3] * gl_Vertex;
varying vec4 var_TexCoord0;

// construct object-space-to-tangent-space 3x3 matrix
var_mat_os2ts = mat3(
attr_Tangent.x, attr_Bitangent.x, attr_Normal.x,
attr_Tangent.y, attr_Bitangent.y, attr_Normal.y,
attr_Tangent.z, attr_Bitangent.z, attr_Normal.z
);
void main()
{
//var_TexCoord0 = attr_Position - vec4(u_viewOrigin, 1);
var_TexCoord0 = attr_TexCoord0;

// Pass through vertex colour
gl_FrontColor = gl_Color;
gl_Position = attr_Position;
gl_FrontColor = gl_Color; // Pass through vertex colour
}

8 changes: 4 additions & 4 deletions libs/render/WindingRenderer.h
Expand Up @@ -423,10 +423,10 @@ class WindingRenderer :

if (info.checkFlag(RENDER_BUMP))
{
glVertexAttribPointer(ATTR_NORMAL, 3, GL_DOUBLE, 0, sizeof(ArbitraryMeshVertex), &vertices.front().normal);
glVertexAttribPointer(ATTR_TEXCOORD, 2, GL_DOUBLE, 0, sizeof(ArbitraryMeshVertex), &vertices.front().texcoord);
glVertexAttribPointer(ATTR_TANGENT, 3, GL_DOUBLE, 0, sizeof(ArbitraryMeshVertex), &vertices.front().tangent);
glVertexAttribPointer(ATTR_BITANGENT, 3, GL_DOUBLE, 0, sizeof(ArbitraryMeshVertex), &vertices.front().bitangent);
glVertexAttribPointer(GLProgramAttribute::Normal, 3, GL_DOUBLE, 0, sizeof(ArbitraryMeshVertex), &vertices.front().normal);
glVertexAttribPointer(GLProgramAttribute::TexCoord, 2, GL_DOUBLE, 0, sizeof(ArbitraryMeshVertex), &vertices.front().texcoord);
glVertexAttribPointer(GLProgramAttribute::Tangent, 3, GL_DOUBLE, 0, sizeof(ArbitraryMeshVertex), &vertices.front().tangent);
glVertexAttribPointer(GLProgramAttribute::Bitangent, 3, GL_DOUBLE, 0, sizeof(ArbitraryMeshVertex), &vertices.front().bitangent);
}
else
{
Expand Down
8 changes: 4 additions & 4 deletions radiantcore/rendersystem/OpenGLRenderSystem.cpp
Expand Up @@ -191,10 +191,10 @@ void OpenGLRenderSystem::beginRendering(OpenGLState& state)
glDisableVertexAttribArrayARB(c_attr_Binormal);
}

glDisableVertexAttribArrayARB(ATTR_TEXCOORD);
glDisableVertexAttribArrayARB(ATTR_TANGENT);
glDisableVertexAttribArrayARB(ATTR_BITANGENT);
glDisableVertexAttribArrayARB(ATTR_NORMAL);
glDisableVertexAttribArrayARB(GLProgramAttribute::TexCoord);
glDisableVertexAttribArrayARB(GLProgramAttribute::Tangent);
glDisableVertexAttribArrayARB(GLProgramAttribute::Bitangent);
glDisableVertexAttribArrayARB(GLProgramAttribute::Normal);

glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
Expand Down
8 changes: 4 additions & 4 deletions radiantcore/rendersystem/backend/GeometryRenderer.h
Expand Up @@ -67,10 +67,10 @@ class GeometryRenderer :

if (renderBump)
{
glVertexAttribPointer(ATTR_NORMAL, 3, GL_DOUBLE, 0, sizeof(ArbitraryMeshVertex), &bufferStart->normal);
glVertexAttribPointer(ATTR_TEXCOORD, 2, GL_DOUBLE, 0, sizeof(ArbitraryMeshVertex), &bufferStart->texcoord);
glVertexAttribPointer(ATTR_TANGENT, 3, GL_DOUBLE, 0, sizeof(ArbitraryMeshVertex), &bufferStart->tangent);
glVertexAttribPointer(ATTR_BITANGENT, 3, GL_DOUBLE, 0, sizeof(ArbitraryMeshVertex), &bufferStart->bitangent);
glVertexAttribPointer(GLProgramAttribute::Normal, 3, GL_DOUBLE, 0, sizeof(ArbitraryMeshVertex), &bufferStart->normal);
glVertexAttribPointer(GLProgramAttribute::TexCoord, 2, GL_DOUBLE, 0, sizeof(ArbitraryMeshVertex), &bufferStart->texcoord);
glVertexAttribPointer(GLProgramAttribute::Tangent, 3, GL_DOUBLE, 0, sizeof(ArbitraryMeshVertex), &bufferStart->tangent);
glVertexAttribPointer(GLProgramAttribute::Bitangent, 3, GL_DOUBLE, 0, sizeof(ArbitraryMeshVertex), &bufferStart->bitangent);
}
else
{
Expand Down
11 changes: 6 additions & 5 deletions radiantcore/rendersystem/backend/LightInteractions.cpp
Expand Up @@ -29,10 +29,11 @@ inline void submitObject(IRenderableObject& object, IGeometryStore& store)

glVertexPointer(3, GL_DOUBLE, sizeof(ArbitraryMeshVertex), &renderParams.bufferStart->vertex);

glVertexAttribPointer(ATTR_NORMAL, 3, GL_DOUBLE, 0, sizeof(ArbitraryMeshVertex), &renderParams.bufferStart->normal);
glVertexAttribPointer(ATTR_TEXCOORD, 2, GL_DOUBLE, 0, sizeof(ArbitraryMeshVertex), &renderParams.bufferStart->texcoord);
glVertexAttribPointer(ATTR_TANGENT, 3, GL_DOUBLE, 0, sizeof(ArbitraryMeshVertex), &renderParams.bufferStart->tangent);
glVertexAttribPointer(ATTR_BITANGENT, 3, GL_DOUBLE, 0, sizeof(ArbitraryMeshVertex), &renderParams.bufferStart->bitangent);
glVertexAttribPointer(GLProgramAttribute::Position, 3, GL_DOUBLE, 0, sizeof(ArbitraryMeshVertex), &renderParams.bufferStart->vertex);
glVertexAttribPointer(GLProgramAttribute::Normal, 3, GL_DOUBLE, 0, sizeof(ArbitraryMeshVertex), &renderParams.bufferStart->normal);
glVertexAttribPointer(GLProgramAttribute::TexCoord, 2, GL_DOUBLE, 0, sizeof(ArbitraryMeshVertex), &renderParams.bufferStart->texcoord);
glVertexAttribPointer(GLProgramAttribute::Tangent, 3, GL_DOUBLE, 0, sizeof(ArbitraryMeshVertex), &renderParams.bufferStart->tangent);
glVertexAttribPointer(GLProgramAttribute::Bitangent, 3, GL_DOUBLE, 0, sizeof(ArbitraryMeshVertex), &renderParams.bufferStart->bitangent);

glDrawElementsBaseVertex(GL_TRIANGLES, static_cast<GLsizei>(renderParams.indexCount),
GL_UNSIGNED_INT, renderParams.firstIndex, static_cast<GLint>(renderParams.firstVertex));
Expand Down Expand Up @@ -176,7 +177,7 @@ void LightInteractions::render(OpenGLState& state, RenderStateFlags globalFlagsM

for (auto object : objectList)
{
if (state.glProgram)
if (state.glProgram && !state.testRenderFlag(RENDER_TEXTURE_CUBEMAP))
{
OpenGLShaderPass::setUpLightingCalculation(state, &_light, worldToLight,
view.getViewer(), object.get().getObjectTransform(), renderTime, state.isColourInverted());
Expand Down
2 changes: 1 addition & 1 deletion radiantcore/rendersystem/backend/OpenGLShader.cpp
Expand Up @@ -679,7 +679,7 @@ void OpenGLShader::appendBlendLayer(const IShaderLayer::Ptr& layer)
if (state.cubeMapMode == IShaderLayer::CUBE_MAP_CAMERA)
{
state.glProgram = _renderSystem.getGLProgramFactory().getBuiltInProgram(ShaderProgram::CubeMap);

state.setRenderFlag(RENDER_PROGRAM);
state.setRenderFlag(RENDER_TEXTURE_CUBEMAP);
}
else
Expand Down
8 changes: 4 additions & 4 deletions radiantcore/rendersystem/backend/SurfaceRenderer.h
Expand Up @@ -146,10 +146,10 @@ class SurfaceRenderer :

if (renderBump)
{
glVertexAttribPointer(ATTR_NORMAL, 3, GL_DOUBLE, 0, sizeof(ArbitraryMeshVertex), &renderParams.bufferStart->normal);
glVertexAttribPointer(ATTR_TEXCOORD, 2, GL_DOUBLE, 0, sizeof(ArbitraryMeshVertex), &renderParams.bufferStart->texcoord);
glVertexAttribPointer(ATTR_TANGENT, 3, GL_DOUBLE, 0, sizeof(ArbitraryMeshVertex), &renderParams.bufferStart->tangent);
glVertexAttribPointer(ATTR_BITANGENT, 3, GL_DOUBLE, 0, sizeof(ArbitraryMeshVertex), &renderParams.bufferStart->bitangent);
glVertexAttribPointer(GLProgramAttribute::Normal, 3, GL_DOUBLE, 0, sizeof(ArbitraryMeshVertex), &renderParams.bufferStart->normal);
glVertexAttribPointer(GLProgramAttribute::TexCoord, 2, GL_DOUBLE, 0, sizeof(ArbitraryMeshVertex), &renderParams.bufferStart->texcoord);
glVertexAttribPointer(GLProgramAttribute::Tangent, 3, GL_DOUBLE, 0, sizeof(ArbitraryMeshVertex), &renderParams.bufferStart->tangent);
glVertexAttribPointer(GLProgramAttribute::Bitangent, 3, GL_DOUBLE, 0, sizeof(ArbitraryMeshVertex), &renderParams.bufferStart->bitangent);
}
else
{
Expand Down
24 changes: 12 additions & 12 deletions radiantcore/rendersystem/backend/glprogram/GLSLBumpProgram.cpp
Expand Up @@ -43,10 +43,10 @@ void GLSLBumpProgram::create()
);

// Bind vertex attribute locations and link the program
glBindAttribLocation(_programObj, ATTR_TEXCOORD, "attr_TexCoord0");
glBindAttribLocation(_programObj, ATTR_TANGENT, "attr_Tangent");
glBindAttribLocation(_programObj, ATTR_BITANGENT, "attr_Bitangent");
glBindAttribLocation(_programObj, ATTR_NORMAL, "attr_Normal");
glBindAttribLocation(_programObj, GLProgramAttribute::TexCoord, "attr_TexCoord0");
glBindAttribLocation(_programObj, GLProgramAttribute::Tangent, "attr_Tangent");
glBindAttribLocation(_programObj, GLProgramAttribute::Bitangent, "attr_Bitangent");
glBindAttribLocation(_programObj, GLProgramAttribute::Normal, "attr_Normal");
glLinkProgram(_programObj);
debug::assertNoGlErrors();

Expand Down Expand Up @@ -96,10 +96,10 @@ void GLSLBumpProgram::enable()
{
GLSLProgramBase::enable();

glEnableVertexAttribArrayARB(ATTR_TEXCOORD);
glEnableVertexAttribArrayARB(ATTR_TANGENT);
glEnableVertexAttribArrayARB(ATTR_BITANGENT);
glEnableVertexAttribArrayARB(ATTR_NORMAL);
glEnableVertexAttribArrayARB(GLProgramAttribute::TexCoord);
glEnableVertexAttribArrayARB(GLProgramAttribute::Tangent);
glEnableVertexAttribArrayARB(GLProgramAttribute::Bitangent);
glEnableVertexAttribArrayARB(GLProgramAttribute::Normal);

debug::assertNoGlErrors();
}
Expand All @@ -108,10 +108,10 @@ void GLSLBumpProgram::disable()
{
GLSLProgramBase::disable();

glDisableVertexAttribArrayARB(ATTR_TEXCOORD);
glDisableVertexAttribArrayARB(ATTR_TANGENT);
glDisableVertexAttribArrayARB(ATTR_BITANGENT);
glDisableVertexAttribArrayARB(ATTR_NORMAL);
glDisableVertexAttribArrayARB(GLProgramAttribute::TexCoord);
glDisableVertexAttribArrayARB(GLProgramAttribute::Tangent);
glDisableVertexAttribArrayARB(GLProgramAttribute::Bitangent);
glDisableVertexAttribArrayARB(GLProgramAttribute::Normal);

debug::assertNoGlErrors();
}
Expand Down
38 changes: 23 additions & 15 deletions radiantcore/rendersystem/backend/glprogram/GLSLCubeMapProgram.cpp
Expand Up @@ -10,11 +10,9 @@ namespace render

namespace
{

// Filenames of shader code
const char* const VP_FILENAME = "cubemap_vp.glsl";
const char* const FP_FILENAME = "cubemap_fp.glsl";

}

void GLSLCubeMapProgram::create()
Expand All @@ -25,24 +23,33 @@ void GLSLCubeMapProgram::create()
_programObj = GLProgramFactory::createGLSLProgram(VP_FILENAME, FP_FILENAME);

// Bind vertex attribute locations and link the program
glBindAttribLocation(_programObj, ATTR_TEXCOORD, "attr_TexCoord0");
glBindAttribLocation(_programObj, ATTR_TANGENT, "attr_Tangent");
glBindAttribLocation(_programObj, ATTR_BITANGENT, "attr_Bitangent");
glBindAttribLocation(_programObj, ATTR_NORMAL, "attr_Normal");
glBindAttribLocation(_programObj, GLProgramAttribute::Position, "attr_Position");
glBindAttribLocation(_programObj, GLProgramAttribute::TexCoord, "attr_TexCoord0");
glBindAttribLocation(_programObj, GLProgramAttribute::Tangent, "attr_Tangent");
glBindAttribLocation(_programObj, GLProgramAttribute::Bitangent, "attr_Bitangent");
glBindAttribLocation(_programObj, GLProgramAttribute::Normal, "attr_Normal");

glLinkProgram(_programObj);
debug::assertNoGlErrors();


_locViewOrigin = glGetUniformLocation(_programObj, "u_viewOrigin");
}

void GLSLCubeMapProgram::enable()
{
GLSLProgramBase::enable();

glEnableVertexAttribArrayARB(ATTR_TEXCOORD);
glEnableVertexAttribArrayARB(ATTR_TANGENT);
glEnableVertexAttribArrayARB(ATTR_BITANGENT);
glEnableVertexAttribArrayARB(ATTR_NORMAL);
glEnableVertexAttribArrayARB(GLProgramAttribute::Position);
glEnableVertexAttribArrayARB(GLProgramAttribute::TexCoord);
glEnableVertexAttribArrayARB(GLProgramAttribute::Tangent);
glEnableVertexAttribArrayARB(GLProgramAttribute::Bitangent);
glEnableVertexAttribArrayARB(GLProgramAttribute::Normal);

glUniform3f(_locViewOrigin,
0,
0,
0
);

debug::assertNoGlErrors();
}
Expand All @@ -51,10 +58,11 @@ void GLSLCubeMapProgram::disable()
{
GLSLProgramBase::disable();

glDisableVertexAttribArrayARB(ATTR_TEXCOORD);
glDisableVertexAttribArrayARB(ATTR_TANGENT);
glDisableVertexAttribArrayARB(ATTR_BITANGENT);
glDisableVertexAttribArrayARB(ATTR_NORMAL);
glDisableVertexAttribArrayARB(GLProgramAttribute::Position);
glDisableVertexAttribArrayARB(GLProgramAttribute::TexCoord);
glDisableVertexAttribArrayARB(GLProgramAttribute::Tangent);
glDisableVertexAttribArrayARB(GLProgramAttribute::Bitangent);
glDisableVertexAttribArrayARB(GLProgramAttribute::Normal);

debug::assertNoGlErrors();
}
Expand Down
10 changes: 4 additions & 6 deletions radiantcore/rendersystem/backend/glprogram/GLSLCubeMapProgram.h
Expand Up @@ -11,14 +11,12 @@ class GLSLCubeMapProgram :
{
private:
// Uniform/program-local parameter IDs.
int _locLightOrigin;
int _locLightColour;
int _locViewOrigin;
int _locLightScale;
int _locAmbientLight;
int _locInvertVCol;
GLint _locViewOrigin;

public:
GLSLCubeMapProgram() :
_locViewOrigin(-1)
{}

/* GLProgram implementation */
void create() override;
Expand Down
Expand Up @@ -24,7 +24,7 @@ void GLSLDepthFillAlphaProgram::create()
DEPTHFILL_ALPHA_VP_FILENAME, DEPTHFILL_ALPHA_FP_FILENAME
);

glBindAttribLocation(_programObj, ATTR_TEXCOORD, "attr_TexCoord0");
glBindAttribLocation(_programObj, GLProgramAttribute::TexCoord, "attr_TexCoord0");

glLinkProgram(_programObj);

Expand All @@ -45,14 +45,14 @@ void GLSLDepthFillAlphaProgram::enable()
{
GLSLProgramBase::enable();

glEnableVertexAttribArrayARB(ATTR_TEXCOORD);
glEnableVertexAttribArrayARB(GLProgramAttribute::TexCoord);
}

void GLSLDepthFillAlphaProgram::disable()
{
GLSLProgramBase::disable();

glDisableVertexAttribArrayARB(ATTR_TEXCOORD);
glDisableVertexAttribArrayARB(GLProgramAttribute::TexCoord);
}

void GLSLDepthFillAlphaProgram::applyAlphaTest(float alphaTest)
Expand Down

0 comments on commit 22b34e1

Please sign in to comment.