From 48d460c855b7b32f0dd370615a489ee763e95558 Mon Sep 17 00:00:00 2001 From: Joshua Ashton Date: Thu, 29 Sep 2022 00:01:06 -0230 Subject: [PATCH] Combine view/proj --- src/Apps/Tools/CubeTest.cpp | 6 ++-- src/Orange/Render/Shaders/common_vs.h | 31 ++++++++++++++++ src/Orange/Render/Shaders/cs_CullMeshes.comp | 4 +++ src/Orange/Render/Shaders/vs_Mesh.vert | 38 ++------------------ 4 files changed, 40 insertions(+), 39 deletions(-) create mode 100644 src/Orange/Render/Shaders/common_vs.h create mode 100644 src/Orange/Render/Shaders/cs_CullMeshes.comp diff --git a/src/Apps/Tools/CubeTest.cpp b/src/Apps/Tools/CubeTest.cpp index 2821f94..b8c3fbb 100644 --- a/src/Apps/Tools/CubeTest.cpp +++ b/src/Apps/Tools/CubeTest.cpp @@ -552,8 +552,7 @@ int main(int argc, char** argv) struct FrameData { - mat4 projection; - mat4 view; + mat4 view_projection; }; auto frameDataSlice = *pooler.AllocSlice(MaxFramesInFlight * sizeof(FrameData), 16); @@ -659,8 +658,7 @@ int main(int argc, char** argv) frameData[r_swapchain->CurrentFrame()] = FrameData { - .projection = camera.projection(), - .view = camera.view(), + .view_projection = camera.projection() * camera.view(), }; g_renderables.copy(gpuRenderables[r_swapchain->CurrentFrame()].renderables); diff --git a/src/Orange/Render/Shaders/common_vs.h b/src/Orange/Render/Shaders/common_vs.h new file mode 100644 index 0000000..ac8285d --- /dev/null +++ b/src/Orange/Render/Shaders/common_vs.h @@ -0,0 +1,31 @@ +struct UniformData +{ + mat4 view_projection; +}; + +struct Renderable +{ + mat4 world; + uint meshIdx; + vec3 color; +}; + +struct Renderables +{ + Renderable renderables[1024]; +}; + +layout(push_constant) uniform p_constants_t +{ + uint frame; +} p_constants; + +layout(binding = 0) uniform u_frame_data_t +{ + UniformData frame[4]; +} u_frame_data; + +layout(scalar, binding = 2) uniform u_renderable_t +{ + Renderables frame[4]; +} u_renderable; diff --git a/src/Orange/Render/Shaders/cs_CullMeshes.comp b/src/Orange/Render/Shaders/cs_CullMeshes.comp new file mode 100644 index 0000000..7298c81 --- /dev/null +++ b/src/Orange/Render/Shaders/cs_CullMeshes.comp @@ -0,0 +1,4 @@ +void main() +{ + +} diff --git a/src/Orange/Render/Shaders/vs_Mesh.vert b/src/Orange/Render/Shaders/vs_Mesh.vert index 6cff7b6..f33e54e 100644 --- a/src/Orange/Render/Shaders/vs_Mesh.vert +++ b/src/Orange/Render/Shaders/vs_Mesh.vert @@ -1,40 +1,9 @@ #version 450 #extension GL_EXT_scalar_block_layout : require #extension GL_ARB_shader_draw_parameters : require +#extension GL_GOOGLE_include_directive : require -struct UniformData -{ - mat4 projection; - mat4 view; -}; - -struct Renderable -{ - mat4 world; - uint meshIdx; - vec3 color; -}; - -struct Renderables -{ - Renderable renderables[1024]; -}; - -layout(push_constant) uniform p_constants_t -{ - uint frame; -} p_constants; - -layout(binding = 0) uniform u_frame_data_t -{ - UniformData frame[4]; -} u_frame_data; - -layout(scalar, binding = 2) uniform u_renderable_t -{ - Renderables frame[4]; -} u_renderable; - +#include "common_vs.h" layout(location = 0) in vec3 i_pos; layout(location = 1) in vec2 i_uv; @@ -46,8 +15,7 @@ layout(location = 1) out vec2 o_uv; void main() { gl_Position = - u_frame_data.frame[p_constants.frame].projection * - u_frame_data.frame[p_constants.frame].view * + u_frame_data.frame[p_constants.frame].view_projection * u_renderable.frame[p_constants.frame].renderables[gl_DrawIDARB].world * vec4(i_pos, 1.0); o_meshIdx = u_renderable.frame[p_constants.frame].renderables[gl_DrawIDARB].meshIdx;