Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions application/testing/tests.features.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -421,6 +421,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
Expand Down
1 change: 1 addition & 0 deletions library/src/interactor_impl.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -620,6 +620,7 @@ class interactor_impl::internals
vtkRenderWindow* renWin = this->Window.GetRenderWindow();
vtkF3DRenderer* ren = vtkF3DRenderer::SafeDownCast(renWin->GetRenderers()->GetFirstRenderer());
ren->SetUIDeltaTime(deltaTime);
ren->SetTotalTime(ren->GetTotalTime() + deltaTime);

// Determine if we need a full render or just a UI render
// At the moment, only TAA requires a full render each frame
Expand Down
3 changes: 3 additions & 0 deletions testing/baselines/TestFinalShaderTimeUniform.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
7 changes: 7 additions & 0 deletions vtkext/private/module/vtkF3DRenderer.h
Original file line number Diff line number Diff line change
Expand Up @@ -493,6 +493,12 @@ class vtkF3DRenderer : public vtkOpenGLRenderer
*/
void SetUIDeltaTime(double time);

/**
* Set/Get the total animation time (cumulative time of each frame being rendered) in seconds
*/
vtkSetMacro(TotalTime, double);
vtkGetMacro(TotalTime, double);

/**
* Set console badge enabled status
*/
Expand Down Expand Up @@ -632,6 +638,7 @@ class vtkF3DRenderer : public vtkOpenGLRenderer
vtkSmartPointer<vtkCameraOrientationRepresentation> ModernAxisRepresentation;
vtkSmartPointer<vtkCallbackCommand> ModernAxisWidgetResizeCallback;
double ModernAxisBackdropOpacity = 0.0;
double TotalTime = 0.0;

// Does vtk version support GridAxesActor
#if VTK_VERSION_NUMBER >= VTK_VERSION_CHECK(9, 4, 20250513)
Expand Down
5 changes: 5 additions & 0 deletions vtkext/private/module/vtkF3DUserRenderPass.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
#include "vtkRenderer.h"
#include "vtkShaderProgram.h"
#include "vtkTextureObject.h"
#include "vtkF3DRenderer.h"
#include <vtkRendererCollection.h>

vtkStandardNewMacro(vtkF3DUserRenderPass);

Expand All @@ -25,6 +27,7 @@ void vtkF3DUserRenderPass::Render(const vtkRenderState* s)
vtkRenderer* r = s->GetRenderer();
vtkOpenGLRenderWindow* renWin = static_cast<vtkOpenGLRenderWindow*>(r->GetRenderWindow());
vtkOpenGLState* ostate = renWin->GetState();
vtkF3DRenderer* ren = vtkF3DRenderer::SafeDownCast(renWin->GetRenderers()->GetFirstRenderer());

vtkOpenGLState::ScopedglEnableDisable bsaver(ostate, GL_BLEND);
vtkOpenGLState::ScopedglEnableDisable dsaver(ostate, GL_DEPTH_TEST);
Expand Down Expand Up @@ -71,6 +74,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);
Expand All @@ -96,6 +100,7 @@ void vtkF3DUserRenderPass::Render(const vtkRenderState* s)
this->ColorTexture->Activate();
this->QuadHelper->Program->SetUniformi("source", this->ColorTexture->GetTextureUnit());
this->QuadHelper->Program->SetUniform2i("resolution", size);
this->QuadHelper->Program->SetUniformf("time", ren->GetTotalTime());

ostate->vtkglDisable(GL_BLEND);
ostate->vtkglDisable(GL_DEPTH_TEST);
Expand Down