mirror of
https://github.com/projectM-visualizer/projectm.git
synced 2026-02-05 13:15:53 +00:00
Pack transition shaders into a resource header.
Also added a "sweep" transition.
This commit is contained in:
@ -0,0 +1,5 @@
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
|
||||
@STATIC_SHADER_CONTENTS@
|
||||
@ -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}"
|
||||
)
|
||||
|
||||
@ -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)
|
||||
@ -1,4 +1,4 @@
|
||||
|
||||
// Simple crossfade effect from old to new
|
||||
void mainImage( out vec4 fragColor, in vec2 fragCoord )
|
||||
{
|
||||
vec2 uv = fragCoord / iResolution.xy;
|
||||
|
||||
@ -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);
|
||||
}
|
||||
Reference in New Issue
Block a user