aboutsummaryrefslogtreecommitdiff
path: root/KaplaDemo/samples/sampleViewer3/FXAAHelper.cpp
diff options
context:
space:
mode:
authorgit perforce import user <a@b>2016-10-25 12:29:14 -0600
committerSheikh Dawood Abdul Ajees <Sheikh Dawood Abdul Ajees>2016-10-25 18:56:37 -0500
commit3dfe2108cfab31ba3ee5527e217d0d8e99a51162 (patch)
treefa6485c169e50d7415a651bf838f5bcd0fd3bfbd /KaplaDemo/samples/sampleViewer3/FXAAHelper.cpp
downloadphysx-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.cpp148
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