From acfe6a53cc3fc433c282dacb93d283807f80e602 Mon Sep 17 00:00:00 2001 From: OV2 Date: Wed, 11 May 2011 21:39:06 +0200 Subject: [PATCH] Win32: add frame counter to cg shader vars (Themaister) --- win32/CDirect3D.cpp | 6 ++++++ win32/CDirect3D.h | 1 + win32/COpenGL.cpp | 11 +++++++++++ win32/COpenGL.h | 2 ++ win32/cgFunctions.cpp | 3 +++ win32/cgFunctions.h | 2 ++ 6 files changed, 25 insertions(+) diff --git a/win32/CDirect3D.cpp b/win32/CDirect3D.cpp index 28a6743e..b7d81afb 100644 --- a/win32/CDirect3D.cpp +++ b/win32/CDirect3D.cpp @@ -221,6 +221,7 @@ CDirect3D::CDirect3D() shaderTimer = 1.0f; shaderTimeStart = 0; shaderTimeElapsed = 0; + frameCount = 0; cgContext = NULL; cgVertexProgram = cgFragmentProgram = NULL; cgAvailable = false; @@ -649,11 +650,13 @@ void CDirect3D::SetShaderVars() D3DXVECTOR2 videoSize; D3DXVECTOR2 textureSize; D3DXVECTOR2 outputSize; + float frameCnt; videoSize.x = (float)afterRenderWidth; videoSize.y = (float)afterRenderHeight; textureSize.x = textureSize.y = (float)quadTextureSize; outputSize.x = GUI.Stretch?(float)dPresentParams.BackBufferWidth:(float)afterRenderWidth; outputSize.y = GUI.Stretch?(float)dPresentParams.BackBufferHeight:(float)afterRenderHeight; + frameCnt = (float)++frameCount; #define setProgramUniform(program,varname,floats)\ {\ @@ -665,10 +668,13 @@ void CDirect3D::SetShaderVars() setProgramUniform(cgFragmentProgram,"IN.video_size",&videoSize); setProgramUniform(cgFragmentProgram,"IN.texture_size",&textureSize); setProgramUniform(cgFragmentProgram,"IN.output_size",&outputSize); + setProgramUniform(cgFragmentProgram,"IN.frame_count",&frameCnt); setProgramUniform(cgVertexProgram,"IN.video_size",&videoSize); setProgramUniform(cgVertexProgram,"IN.texture_size",&textureSize); setProgramUniform(cgVertexProgram,"IN.output_size",&outputSize); + setProgramUniform(cgVertexProgram,"IN.frame_count",&frameCnt); + } } diff --git a/win32/CDirect3D.h b/win32/CDirect3D.h index 92b1a9ae..f4707b61 100644 --- a/win32/CDirect3D.h +++ b/win32/CDirect3D.h @@ -230,6 +230,7 @@ private: float shaderTimer; int shaderTimeStart; int shaderTimeElapsed; + int frameCount; bool BlankTexture(LPDIRECT3DTEXTURE9 texture); void CreateDrawSurface(); diff --git a/win32/COpenGL.cpp b/win32/COpenGL.cpp index 4d85f558..66597c79 100644 --- a/win32/COpenGL.cpp +++ b/win32/COpenGL.cpp @@ -210,6 +210,7 @@ COpenGL::COpenGL(void) cgContext = NULL; cgVertexProgram = cgFragmentProgram = NULL; cgAvailable = false; + frameCount = 0; } COpenGL::~COpenGL(void) @@ -452,6 +453,7 @@ void COpenGL::Render(SSurface Src) float outputSize[2] = {(float)(GUI.Stretch?windowSize.right:afterRenderWidth), (float)(GUI.Stretch?windowSize.bottom:afterRenderHeight) }; float textureSize[2] = { (float)quadTextureSize, (float)quadTextureSize }; + float frameCnt = (float)++frameCount; if(shader_type == OGL_SHADER_GLSL) { location = glGetUniformLocation (shaderProgram, "rubyInputSize"); @@ -474,12 +476,21 @@ void COpenGL::Render(SSurface Src) cgGLSetParameter2fv(cgp,floats);\ }\ +#define setProgram1f(program,varname,val)\ +{\ + CGparameter cgp = cgGetNamedParameter(program, varname);\ + if(cgp)\ + cgGLSetParameter1f(cgp,val);\ +}\ + setProgram2fv(cgFragmentProgram,"IN.video_size",inputSize); setProgram2fv(cgFragmentProgram,"IN.texture_size",textureSize); setProgram2fv(cgFragmentProgram,"IN.output_size",outputSize); + setProgram1f(cgFragmentProgram,"IN.frame_count",frameCnt); setProgram2fv(cgVertexProgram,"IN.video_size",inputSize); setProgram2fv(cgVertexProgram,"IN.texture_size",textureSize); setProgram2fv(cgVertexProgram,"IN.output_size",outputSize); + setProgram1f(cgVertexProgram,"IN.frame_count",frameCnt); } } diff --git a/win32/COpenGL.h b/win32/COpenGL.h index 4837d9bf..cd10f85b 100644 --- a/win32/COpenGL.h +++ b/win32/COpenGL.h @@ -202,6 +202,8 @@ private: GLfloat texcoords[8]; unsigned char * noPboBuffer; + int frameCount; + bool initDone; bool fullscreen; unsigned int quadTextureSize; diff --git a/win32/cgFunctions.cpp b/win32/cgFunctions.cpp index 2c88931d..7229f3e1 100644 --- a/win32/cgFunctions.cpp +++ b/win32/cgFunctions.cpp @@ -204,6 +204,7 @@ CGD3DSU cgD3D9SetUniform = NULL; //cggl.dll CGGLSSMP cgGLSetStateMatrixParameter = NULL; CGGLSP2FV cgGLSetParameter2fv = NULL; +CGGLSP1F cgGLSetParameter1f = NULL; CGGLGLP cgGLGetLatestProfile = NULL; CGGLEP cgGLEnableProfile = NULL; CGGLDP cgGLDisableProfile = NULL; @@ -248,6 +249,7 @@ bool loadCgFunctions() //cggl.dll cgGLSetStateMatrixParameter = (CGGLSSMP)GetProcAddress(hCgGLDll,"cgGLSetStateMatrixParameter"); cgGLSetParameter2fv = (CGGLSP2FV)GetProcAddress(hCgGLDll,"cgGLSetParameter2fv"); + cgGLSetParameter1f = (CGGLSP1F)GetProcAddress(hCgGLDll,"cgGLSetParameter1f"); cgGLGetLatestProfile = (CGGLGLP)GetProcAddress(hCgGLDll,"cgGLGetLatestProfile"); cgGLEnableProfile = (CGGLEP)GetProcAddress(hCgGLDll,"cgGLEnableProfile"); cgGLDisableProfile = (CGGLDP)GetProcAddress(hCgGLDll,"cgGLDisableProfile"); @@ -277,6 +279,7 @@ bool loadCgFunctions() //cggl.dll !cgGLSetStateMatrixParameter || !cgGLSetParameter2fv || + !cgGLSetParameter1f || !cgGLGetLatestProfile || !cgGLEnableProfile || !cgGLDisableProfile || diff --git a/win32/cgFunctions.h b/win32/cgFunctions.h index 2d7ea3ac..324eca32 100644 --- a/win32/cgFunctions.h +++ b/win32/cgFunctions.h @@ -227,6 +227,8 @@ extern CGD3DSU cgD3D9SetUniform; //cggl.dll typedef CGGL_API void (CGGLENTRY *CGGLSSMP)(CGparameter param, CGGLenum matrix, CGGLenum transform); extern CGGLSSMP cgGLSetStateMatrixParameter; +typedef CGGL_API void (CGGLENTRY *CGGLSP1F)(CGparameter param, float x); +extern CGGLSP1F cgGLSetParameter1f; typedef CGGL_API void (CGGLENTRY *CGGLSP2FV)(CGparameter param, const float *v); extern CGGLSP2FV cgGLSetParameter2fv; typedef CGGL_API CGprofile (CGGLENTRY *CGGLGLP)(CGGLenum profile_type);