diff --git a/IDEAS.md b/IDEAS.md index f768237..a629ada 100644 --- a/IDEAS.md +++ b/IDEAS.md @@ -1,9 +1,9 @@ more ideas on what to try out -- [ ] post processing +- [x] post processing - [x] UI rendering - [ ] DirectX -- [ ] compute shaders +- [x] compute shaders - [ ] mini game - [ ] ImGui? - [ ] extending SDL_gpu? diff --git a/assets/shaders/glsl/post_process.comp b/assets/shaders/glsl/post_process.comp new file mode 100644 index 0000000..1f105cb --- /dev/null +++ b/assets/shaders/glsl/post_process.comp @@ -0,0 +1,19 @@ +#version 460 + +layout(local_size_x = 16, local_size_y = 16, local_size_x = 1) in; + +layout(set = 0, binding = 0, rgba8) uniform readonly image2D u_sourceImage; +layout(set = 1, binding = 0, rgba8) uniform writeonly image2D u_targetImage; + +float luma(vec4 color) +{ + return dot(color.rgb, vec3(0.299, 0.587, 0.114)); +} + +void main() +{ + const ivec2 uv = ivec2(gl_GlobalInvocationID.xy); + const vec4 pixel = imageLoad(u_sourceImage, uv); + const float lum = luma(pixel); + imageStore(u_targetImage, uv, vec4(lum, lum, lum, 1.0)); +} diff --git a/private/sdl_gpu_test/5_input/app.cpp b/private/sdl_gpu_test/5_input/app.cpp index 8d93a60..6e82aca 100644 --- a/private/sdl_gpu_test/5_input/app.cpp +++ b/private/sdl_gpu_test/5_input/app.cpp @@ -121,11 +121,7 @@ void InputApp::init(const AppInitArgs& args) mSampler.create(mDevice, {}); // open gamepad - const std::vector gamepads = sdlpp::getGamepads(); - if (!gamepads.empty()) - { - mGamepad.open(gamepads[0]); - } + mGamepad = openFirstGamepad(); } void InputApp::update(const AppUpdateArgs& args) diff --git a/private/sdl_gpu_test/6_ui/app.cpp b/private/sdl_gpu_test/6_ui/app.cpp index 23098a0..a3a3848 100644 --- a/private/sdl_gpu_test/6_ui/app.cpp +++ b/private/sdl_gpu_test/6_ui/app.cpp @@ -64,11 +64,7 @@ void UIApp::init(const AppInitArgs& args) mSampler.create(mDevice, {}); // open gamepad - const std::vector gamepads = sdlpp::getGamepads(); - if (!gamepads.empty()) - { - mGamepad.open(gamepads[0]); - } + mGamepad = openFirstGamepad(); // init the UI mWidgetTree.init({.renderer = &mUIRenderer}); diff --git a/private/sdl_gpu_test/7_3d_scene/app.cpp b/private/sdl_gpu_test/7_3d_scene/app.cpp index 7139269..59cf3a4 100644 --- a/private/sdl_gpu_test/7_3d_scene/app.cpp +++ b/private/sdl_gpu_test/7_3d_scene/app.cpp @@ -43,10 +43,7 @@ void ThreeDSceneApp::init(const AppInitArgs& args) // open gamepad const std::vector gamepads = sdlpp::getGamepads(); - if (!gamepads.empty()) - { - mGamepad.open(gamepads[0]); - } + mGamepad = openFirstGamepad(); // init the UI mWidgetTree.init({.renderer = &mUIRenderer}); @@ -57,21 +54,10 @@ void ThreeDSceneApp::init(const AppInitArgs& args) .posY = 100, .textHeight = 20 }); - mButton = mWidgetTree.getRootWidget().emplaceChild