Pack transition shaders into a resource header.

Also added a "sweep" transition.
This commit is contained in:
Kai Blaschke
2023-11-01 22:07:02 +01:00
parent 9191ff149e
commit b2dad28fa0
5 changed files with 78 additions and 1 deletions

View File

@ -0,0 +1,5 @@
#pragma once
#include <string>
@STATIC_SHADER_CONTENTS@

View File

@ -1,4 +1,32 @@
set(TRANSITION_SHADER_FILES
TransitionShaders/TransitionShaderBuiltInSimpleBlendGlsl330.frag
TransitionShaders/TransitionShaderBuiltInSweepGlsl330.frag
TransitionShaders/TransitionVertexShaderGlsl330.vert
TransitionShaders/TransitionShaderHeaderGlsl330.frag
TransitionShaders/TransitionShaderMainGlsl330.frag
)
string(REPLACE ";" "\\;" TRANSITION_SHADER_FILES_ARG "${TRANSITION_SHADER_FILES}")
add_custom_command(OUTPUT
${CMAKE_CURRENT_BINARY_DIR}/BuiltInTransitionsResources.hpp
COMMAND ${CMAKE_COMMAND}
ARGS
-D SHADER_FILES="${TRANSITION_SHADER_FILES_ARG}"
-D OUTPUT_DIR=${CMAKE_CURRENT_BINARY_DIR}
-P ${CMAKE_CURRENT_SOURCE_DIR}/GenerateBuiltInTransitionsResources.cmake
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
DEPENDS # Files watched for changes:
${TRANSITION_SHADER_FILES}
BuiltInTransitionsResources.hpp.in
GenerateBuiltInTransitionsResources.cmake
)
add_library(Renderer OBJECT
${CMAKE_CURRENT_BINARY_DIR}/BuiltInTransitionsResources.hpp
BuiltInTransitionsResources.hpp.in
FileScanner.cpp
FileScanner.hpp
Framebuffer.cpp
@ -23,11 +51,14 @@ add_library(Renderer OBJECT
TextureManager.hpp
TextureSamplerDescriptor.cpp
TextureSamplerDescriptor.hpp
TransitionShaderManager.cpp
TransitionShaderManager.hpp
)
target_include_directories(Renderer
PRIVATE
"${CMAKE_CURRENT_SOURCE_DIR}/.."
"${CMAKE_CURRENT_BINARY_DIR}"
PUBLIC
"${CMAKE_CURRENT_SOURCE_DIR}"
)

View File

@ -0,0 +1,19 @@
cmake_minimum_required(VERSION 3.20 FATAL_ERROR)
# Run as custom command in script mode if any shader file has changed.
# Recreates the BuiltInTransitionsResources.hpp file accordingly.
set(STATIC_SHADER_CONTENTS "")
foreach(shader_file IN LISTS SHADER_FILES)
cmake_path(GET shader_file FILENAME _shader_name)
cmake_path(GET shader_file EXTENSION _shader_type)
cmake_path(REMOVE_EXTENSION _shader_name)
file(READ "${shader_file}" _shader_contents)
string(REGEX REPLACE "Glsl([0-9]+)" "" _accessor_name ${_shader_name})
string(APPEND STATIC_SHADER_CONTENTS "static std::string k${_shader_name} = R\"(\n${_shader_contents})\";\n\n")
endforeach()
configure_file(BuiltInTransitionsResources.hpp.in ${OUTPUT_DIR}/BuiltInTransitionsResources.hpp @ONLY)

View File

@ -1,4 +1,4 @@
// Simple crossfade effect from old to new
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
vec2 uv = fragCoord / iResolution.xy;

View File

@ -0,0 +1,22 @@
// Side-to-side sweep with random angle and transition zone width
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
vec2 uv = fragCoord / iResolution.xy;
vec3 imgOld = texture(iChannel0, uv).xyz;
vec3 imgNew = texture(iChannel1, uv).xyz;
// Blending
float currentAngle = mod(float(iRandStatic.x), 360.);
float blendWidth = mod(float(iRandStatic.y), .25) + .05;
uv -= .5;
float angle = radians(90.0) - radians(currentAngle) + atan(uv.y, uv.x);
float len = length(uv) / sqrt(2.);
uv = vec2(cos(angle) * len, sin(angle) * len) + .5;
vec3 col = mix(imgOld, imgNew, smoothstep(prog, prog + blendWidth, (uv.x / (1.0 + 2. * blendWidth)) + blendWidth));
// Output to screen
fragColor = vec4(col, 1.0);
}