diff options
| author | git perforce import user <a@b> | 2016-10-25 12:29:14 -0600 |
|---|---|---|
| committer | Sheikh Dawood Abdul Ajees <Sheikh Dawood Abdul Ajees> | 2016-10-25 18:56:37 -0500 |
| commit | 3dfe2108cfab31ba3ee5527e217d0d8e99a51162 (patch) | |
| tree | fa6485c169e50d7415a651bf838f5bcd0fd3bfbd /KaplaDemo/samples/sampleViewer3/FXAAHelper.cpp | |
| download | physx-3.4-3dfe2108cfab31ba3ee5527e217d0d8e99a51162.tar.xz physx-3.4-3dfe2108cfab31ba3ee5527e217d0d8e99a51162.zip | |
Initial commit:
PhysX 3.4.0 Update @ 21294896
APEX 1.4.0 Update @ 21275617
[CL 21300167]
Diffstat (limited to 'KaplaDemo/samples/sampleViewer3/FXAAHelper.cpp')
| -rw-r--r-- | KaplaDemo/samples/sampleViewer3/FXAAHelper.cpp | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/KaplaDemo/samples/sampleViewer3/FXAAHelper.cpp b/KaplaDemo/samples/sampleViewer3/FXAAHelper.cpp new file mode 100644 index 00000000..cdb3d41d --- /dev/null +++ b/KaplaDemo/samples/sampleViewer3/FXAAHelper.cpp @@ -0,0 +1,148 @@ +#include "FXAAHelper.h" +#include "foundation/PxMat44.h" +const char *computeLumaVS = STRINGIFY( + void main(void) + { + gl_TexCoord[0] = gl_MultiTexCoord0; + gl_Position = gl_Vertex * 2.0 - 1.0; + } +); + +const char *computeLumaFS = STRINGIFY( + uniform sampler2D imgTex; + + void main (void) + { + vec4 col = texture2D(imgTex,gl_TexCoord[0].xy); + gl_FragColor = vec4(col.xyz, sqrt(dot(col.rgb, vec3(0.299, 0.587, 0.114)))); + } +); + +FXAAHelper::FXAAHelper( const char* resourcePath) { + + char fxaaVSF[5000]; + char fxaaFSF[5000]; + sprintf(fxaaVSF, "%s\\fxaa.vs", resourcePath); + sprintf(fxaaFSF, "%s\\fxaa.fs", resourcePath); + computeLuma.loadShaderCode(computeLumaVS,computeLumaFS); + fxaa.loadShaders(fxaaVSF,fxaaFSF); + + + glUseProgram(computeLuma); + glUniform1i(glGetUniformLocation(computeLuma,"imgTex"),0); + glUseProgram(0); + + glUseProgram(fxaa); + glUniform1i(glGetUniformLocation(fxaa,"imgWithLumaTex"),0); + glUseProgram(0); + + glGenTextures(1,&imgTex); + glGenTextures(1,&imgWithLumaTex); + glGenTextures(1,&depthTex); + glGenFramebuffers(1,&FBO); +} + +void FXAAHelper::Resize(int w,int h) { + + Width = w; + Height = h; + + glViewport(0,0,Width,Height); + + glBindTexture(GL_TEXTURE_2D,imgTex); + glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP); + glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA8,Width,Height,0,GL_RGBA,GL_UNSIGNED_BYTE,NULL); + + glBindTexture(GL_TEXTURE_2D,imgWithLumaTex); + glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP); + glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA8,Width,Height,0,GL_RGBA,GL_UNSIGNED_BYTE,NULL); + + glBindTexture(GL_TEXTURE_2D,depthTex); + glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP); + glTexImage2D(GL_TEXTURE_2D,0,GL_DEPTH_COMPONENT32,Width,Height,0,GL_DEPTH_COMPONENT,GL_FLOAT,NULL); + + + glUseProgram(fxaa); + glUniform2f(glGetUniformLocation(fxaa,"rcpFrame"), 1.0f / ((float)Width), 1.0f / ((float)Height)); + + glUseProgram(0); + +} +void FXAAHelper::Destroy() { + + computeLuma.deleteShaders(); + fxaa.deleteShaders(); + + glDeleteTextures(1,&imgTex); + glDeleteTextures(1,&imgWithLumaTex); + glDeleteTextures(1,&depthTex); + glDeleteFramebuffers(1,&FBO); +} + +void FXAAHelper::StartFXAA() { + glBindFramebuffer(GL_FRAMEBUFFER,FBO); + + glFramebufferTexture2D(GL_FRAMEBUFFER,GL_COLOR_ATTACHMENT0,GL_TEXTURE_2D,imgTex,0); + glFramebufferTexture2D(GL_FRAMEBUFFER,GL_DEPTH_ATTACHMENT,GL_TEXTURE_2D,depthTex,0); + + glViewport(0,0,Width,Height); + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); +} + +void FXAAHelper::EndFXAA(GLuint oldFBO) { + + + glDisable(GL_CULL_FACE); + glDisable(GL_DEPTH_TEST); + glDepthMask(GL_FALSE); +// if(Blur) +// { + glBindFramebuffer(GL_FRAMEBUFFER,FBO); + glFramebufferTexture2D(GL_FRAMEBUFFER,GL_COLOR_ATTACHMENT0,GL_TEXTURE_2D,imgWithLumaTex,0); + glFramebufferTexture2D(GL_FRAMEBUFFER,GL_DEPTH_ATTACHMENT,GL_TEXTURE_2D,0,0); + + glClearColor(0.0f,0.0f,0.0f,0.0f); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D,imgTex); + + glUseProgram(computeLuma); + glBegin(GL_QUADS); + + glTexCoord2f(0.0f,0.0f); glVertex2f(0.0f,0.0f); + glTexCoord2f(1.0f,0.0f); glVertex2f(1.0f,0.0f); + glTexCoord2f(1.0f,1.0f); glVertex2f(1.0f,1.0f); + glTexCoord2f(0.0f,1.0f); glVertex2f(0.0f,1.0f); + glEnd(); + + glUseProgram(0); + + + glBindFramebuffer(GL_FRAMEBUFFER,oldFBO); + glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D,imgWithLumaTex); + glUseProgram(fxaa); + + glBegin(GL_QUADS); + glTexCoord2f(0.0f,0.0f); glVertex2f(0.0f,0.0f); + glTexCoord2f(1.0f,0.0f); glVertex2f(1.0f,0.0f); + glTexCoord2f(1.0f,1.0f); glVertex2f(1.0f,1.0f); + glTexCoord2f(0.0f,1.0f); glVertex2f(0.0f,1.0f); + glEnd(); + + glUseProgram(0); + + glBindTexture(GL_TEXTURE_2D,0); + glDepthMask(GL_TRUE); + glEnable(GL_DEPTH_TEST); + glEnable(GL_CULL_FACE); + +}
\ No newline at end of file |