diff --git a/application/testing/tests.features.cmake b/application/testing/tests.features.cmake index 2d50d5aa39..5ee46b7f57 100644 --- a/application/testing/tests.features.cmake +++ b/application/testing/tests.features.cmake @@ -449,6 +449,7 @@ f3d_test(NAME TestFinalShaderNegative DATA cow.vtp ARGS --final-shader "vec4 pix f3d_test(NAME TestFinalShaderNegativeFileName DATA cow.vtp ARGS --filename --final-shader "vec4 pixel(vec2 uv){return vec4(vec3(1.0) - texture(source, uv).rgb, 1.0)\\\\\\\;}" UI) f3d_test(NAME TestFinalShaderUndefined DATA cow.vtp ARGS --final-shader "undefined" REGEXP "Final shader must define a function" NO_BASELINE) f3d_test(NAME TestFinalShaderCompilationFailure DATA cow.vtp ARGS --final-shader "vec4 pixel(vec2 uv){}" --verbose REGEXP " build the shader program" NO_BASELINE) +f3d_test(NAME TestFinalShaderTimeUniform DATA cow.vtp ARGS --final-shader "vec4 pixel(vec2 uv){return vec4(texture(source, uv).rgb * (0.5 + 0.5*cos(time+uv.xyx+vec3(0,2,4))), 1.0)\\\\\\\;}") ## Command Script f3d_test(NAME TestCommandScriptBasic SCRIPT DATA dragon.vtu) # roll_camera 90;toggle ui.scalar_bar;print_scene_info;increase_light_intensity diff --git a/testing/baselines/TestFinalShaderTimeUniform.png b/testing/baselines/TestFinalShaderTimeUniform.png new file mode 100644 index 0000000000..6de6b656c9 --- /dev/null +++ b/testing/baselines/TestFinalShaderTimeUniform.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:03a9800edd7101ca63f3052a73563648f99712ed0d44fb4ac6db411e3ffa6ac7 +size 19607 diff --git a/vtkext/private/module/vtkF3DUserRenderPass.cxx b/vtkext/private/module/vtkF3DUserRenderPass.cxx index 52bab9afc6..bef567aeeb 100644 --- a/vtkext/private/module/vtkF3DUserRenderPass.cxx +++ b/vtkext/private/module/vtkF3DUserRenderPass.cxx @@ -1,5 +1,6 @@ #include "vtkF3DUserRenderPass.h" +#include "vtkF3DRenderer.h" #include "vtkObjectFactory.h" #include "vtkOpenGLError.h" #include "vtkOpenGLFramebufferObject.h" @@ -25,6 +26,7 @@ void vtkF3DUserRenderPass::Render(const vtkRenderState* s) vtkRenderer* r = s->GetRenderer(); vtkOpenGLRenderWindow* renWin = static_cast(r->GetRenderWindow()); vtkOpenGLState* ostate = renWin->GetState(); + vtkF3DRenderer* ren = vtkF3DRenderer::SafeDownCast(r); vtkOpenGLState::ScopedglEnableDisable bsaver(ostate, GL_BLEND); vtkOpenGLState::ScopedglEnableDisable dsaver(ostate, GL_DEPTH_TEST); @@ -71,6 +73,7 @@ void vtkF3DUserRenderPass::Render(const vtkRenderState* s) vtkShaderProgram::Substitute(FSSource, "//VTK::FSQ::Decl", "uniform sampler2D source;\n" "uniform ivec2 resolution;\n" + "uniform float time;\n" "//VTK::FSQ::Decl"); vtkShaderProgram::Substitute(FSSource, "//VTK::FSQ::Decl", this->UserShader); @@ -97,6 +100,15 @@ void vtkF3DUserRenderPass::Render(const vtkRenderState* s) this->QuadHelper->Program->SetUniformi("source", this->ColorTexture->GetTextureUnit()); this->QuadHelper->Program->SetUniform2i("resolution", size); + if (!ren) + { + this->QuadHelper->Program->SetUniformf("time", 0); + } + else + { + this->QuadHelper->Program->SetUniformf("time", ren->GetTotalTime()); + } + ostate->vtkglDisable(GL_BLEND); ostate->vtkglDisable(GL_DEPTH_TEST); ostate->vtkglClear(GL_DEPTH_BUFFER_BIT);