From 33b8d404a51c26902bcbb0c5ead40d16e41d62d2 Mon Sep 17 00:00:00 2001 From: Nicolas Hake Date: Thu, 31 Mar 2016 01:44:44 +0200 Subject: [PATCH] GL: Add "frameCounter" uniform Add the current frame counter as a uniform variable to the shaders, so people can use it to do time-based animation. --- src/graphics/C4DrawGL.cpp | 1 + src/graphics/C4DrawGL.h | 2 ++ src/graphics/C4DrawMeshGL.cpp | 3 +++ src/lib/StdMeshMaterial.cpp | 1 + 4 files changed, 7 insertions(+) diff --git a/src/graphics/C4DrawGL.cpp b/src/graphics/C4DrawGL.cpp index 9b7b0e17a..c6edd4334 100644 --- a/src/graphics/C4DrawGL.cpp +++ b/src/graphics/C4DrawGL.cpp @@ -227,6 +227,7 @@ bool CStdGL::PrepareSpriteShader(C4Shader& shader, const char* name, int ssc, C4 uniformNames[C4SSU_MaterialShininess] = "materialShininess"; // unused uniformNames[C4SSU_Bones] = "bones"; // unused uniformNames[C4SSU_CullMode] = "cullMode"; // unused + uniformNames[C4SSU_FrameCounter] = "frameCounter"; uniformNames[C4SSU_Count] = NULL; const char* attributeNames[C4SSA_Count + 1]; diff --git a/src/graphics/C4DrawGL.h b/src/graphics/C4DrawGL.h index 26bfd2cac..0fdd0675f 100644 --- a/src/graphics/C4DrawGL.h +++ b/src/graphics/C4DrawGL.h @@ -77,6 +77,8 @@ enum C4SS_Uniforms C4SSU_Bones, // for meshes C4SSU_CullMode, // for meshes + C4SSU_FrameCounter, // for custom shaders + C4SSU_Count }; diff --git a/src/graphics/C4DrawMeshGL.cpp b/src/graphics/C4DrawMeshGL.cpp index 6dc56b87d..c01dec4ed 100644 --- a/src/graphics/C4DrawMeshGL.cpp +++ b/src/graphics/C4DrawMeshGL.cpp @@ -538,6 +538,9 @@ namespace pFoW->getFoW()->Ambient.GetFragTransform(pFoW->getViewportRegion(), clipRect, outRect, ambientTransform); call.SetUniformMatrix2x3fv(C4SSU_AmbientTransform, 1, ambientTransform); } + + // Current frame counter + call.SetUniform1i(C4SSU_FrameCounter, ::Game.FrameCounter); } bool ResolveAutoParameter(C4ShaderCall& call, StdMeshMaterialShaderParameter& parameter, StdMeshMaterialShaderParameter::Auto value, DWORD dwModClr, DWORD dwPlayerColor, DWORD dwBlitMode, const C4FoWRegion* pFoW, const C4Rect& clipRect) diff --git a/src/lib/StdMeshMaterial.cpp b/src/lib/StdMeshMaterial.cpp index 34be6850f..decf640c3 100644 --- a/src/lib/StdMeshMaterial.cpp +++ b/src/lib/StdMeshMaterial.cpp @@ -885,6 +885,7 @@ bool StdMeshMaterialProgram::CompileShader(StdMeshMaterialLoader& loader, C4Shad uniformNames[C4SSU_MaterialShininess] = "materialShininess"; uniformNames[C4SSU_Bones] = "bones"; uniformNames[C4SSU_CullMode] = "cullMode"; + uniformNames[C4SSU_FrameCounter] = "frameCounter"; for (unsigned int i = 0; i < ParameterNames.size(); ++i) uniformNames[C4SSU_Count + i] = ParameterNames[i].getData(); uniformNames[C4SSU_Count + ParameterNames.size()] = NULL;