@@ -64,13 +64,19 @@ int main()
6464 EOS::Holder<EOS::ShaderModuleHandle> shaderHandleVert = EOS::LoadShader (context, shaderCompiler, " triangleVert" );
6565 EOS::Holder<EOS::ShaderModuleHandle> shaderHandleFrag = EOS::LoadShader (context, shaderCompiler, " triangleFrag" );
6666
67-
6867 constexpr EOS::VertexInputData vdesc
6968 {
7069 .Attributes = { { .Location = 0 , .Format = EOS::VertexFormat::Float3, .Offset = 0 } },
7170 .InputBindings = { { .Stride = sizeof (glm::vec3) } },
7271 };
7372
73+ EOS::Holder<EOS::TextureHandle> depthTexture = context->CreateTexture ({
74+ .Type = EOS::ImageType::Image_2D,
75+ .TextureFormat = EOS::Format::Z_F32,
76+ .TextureDimensions = {static_cast <uint32_t >(window->Width ), static_cast <uint32_t >(window->Height )},
77+ .Usage = EOS::TextureUsageFlags::Attachment,
78+ .DebugName = " Depth Buffer" ,
79+ });
7480
7581 // It would be nice if these pipeline descriptions would be stored as JSON/XML into the material system
7682 EOS::RenderPipelineDescription renderPipelineDescription
@@ -79,19 +85,16 @@ int main()
7985 .VertexShader = shaderHandleVert,
8086 .FragmentShader = shaderHandleFrag,
8187 .ColorAttachments = {{ .ColorFormat = context->GetSwapchainFormat ()}},
82-
88+ .DepthFormat = EOS::Format::Z_F32, // TODO depthTexture->Format
89+ .PipelineCullMode = EOS::CullMode::Back,
90+ .DebugName = " Basic Render Pipeline"
8391 };
84-
8592 EOS::Holder<EOS::RenderPipelineHandle> renderPipelineHandle = context->CreateRenderPipeline (renderPipelineDescription);
8693
8794 std::vector<glm::vec3> positions;
8895 std::vector<uint32_t > indices;
89-
90- // TODO: Copy over data to bin
9196 LoadModel (" ../data/rubber_duck/scene.gltf" , positions, indices);
9297
93-
94-
9598 EOS::Holder<EOS::BufferHandle> vertexBuffer = context->CreateBuffer (
9699 {
97100 .Usage = EOS::BufferUsageFlags::Vertex,
@@ -101,7 +104,6 @@ int main()
101104 .DebugName = " Buffer: vertex"
102105 });
103106
104-
105107 EOS::Holder<EOS::BufferHandle> indexBuffer = context->CreateBuffer (
106108 {
107109 .Usage = EOS::BufferUsageFlags::Index,
@@ -118,31 +120,54 @@ int main()
118120 {
119121 continue ; // Or sleep
120122 }
121-
122123 const float aspectRatio = static_cast <float >(window->Width ) / static_cast <float >(window->Height );
123124
124- // TODO: There is no depth texture available in the vertex stage to handle Depth Comparrison
125+ // glm::mat4 model = glm::rotate(glm::mat4(1.0f), glm::radians( static_cast<float>(glfwGetTime() * 20.0f) ), glm::vec3(1, 0, 0));
126+ // constexpr glm::mat4 view = glm::translate(glm::mat4(1.0f), glm::vec3(0.0f, -0.5f, -1.5f));
127+ // const glm::mat4 projection = glm::perspective(glm::radians(65.0f), aspectRatio, 0.1f, 1000.0f);
128+
129+ using glm::mat4;
130+ using glm::vec3;
125131
126- glm:: mat4 model = glm::rotate (glm:: mat4 (1 .0f ), glm::radians ( static_cast < float >( glfwGetTime () * 10 .0f ) ), glm:: vec3 (1 , 0 , 0 ));
127- constexpr glm:: mat4 view = glm::translate (glm::mat4 (1 .0f ), glm:: vec3 (0 .0f , -0 .5f , -1 .5f ));
128- const glm:: mat4 projection = glm::perspective (glm::radians ( 65 .0f ) , aspectRatio, 0 .1f , 1000 .0f );
129- const glm::mat4 mvp = projection * view * model ;
132+ const mat4 m = glm::rotate (mat4 (1 .0f ), glm::radians (- 90 .0f ), vec3 (1 , 0 , 0 ));
133+ const mat4 v = glm::rotate (glm::translate ( mat4 (1 .0f ), vec3 (0 .0f , -0 .5f , -1 .5f )), ( float ) glfwGetTime (), vec3 ( 0 . 0f , 1 . 0f , 0 . 0f ));
134+ const mat4 p = glm::perspective (45 .0f , aspectRatio, 0 .1f , 1000 .0f );
135+ const glm::mat4 mvp = p * v * m ;
130136
131137 EOS::ICommandBuffer& cmdBuffer = context->AcquireCommandBuffer ();
132138 cmdPipelineBarrier (cmdBuffer, {}, {{context->GetSwapChainTexture (), EOS::ResourceState::Undefined, EOS::ResourceState::Present}});
133139
134- EOS::Framebuffer framebuffer = {.Color = {{.Texture = context->GetSwapChainTexture ()}}};
135- EOS::RenderPass renderPass{ .Color = { { .LoadOpState = EOS::LoadOp::Clear, .ClearColor = { 0 .36f , 0 .4f , 1 .0f , 0 .28f } } }};
140+ EOS::Framebuffer framebuffer
141+ {
142+ .Color = {{.Texture = context->GetSwapChainTexture ()}},
143+ .DepthStencil = { .Texture = depthTexture },
144+ .DebugName = " Basic Color Depth Framebuffer"
145+ };
146+
147+ EOS::RenderPass renderPass
148+ {
149+ .Color { { .LoadOpState = EOS::LoadOp::Clear, .ClearColor = { 0 .36f , 0 .4f , 1 .0f , 0 .28f } } },
150+ .Depth { .LoadOpState = EOS::LoadOp::Clear, .ClearDepth = 1 .0f }
151+ };
152+
153+ EOS::DepthState depthState
154+ {
155+ .CompareOpState = EOS::CompareOp::Less,
156+ .IsDepthWriteEnabled = true ,
157+ };
158+
136159 cmdBeginRendering (cmdBuffer, renderPass, framebuffer);
160+ {
137161 cmdPushMarker (cmdBuffer, " Render Duck" , 0xff0000ff );
138- cmdBindVertexBuffer (cmdBuffer, 0 , vertexBuffer);
139- cmdBindIndexBuffer (cmdBuffer, indexBuffer, EOS::IndexFormat::UI32);
140- cmdBindRenderPipeline (cmdBuffer, renderPipelineHandle);
141- cmdPushConstants (cmdBuffer, mvp);
142- cmdDrawIndexed (cmdBuffer, indices.size ());
162+ cmdBindVertexBuffer (cmdBuffer, 0 , vertexBuffer);
163+ cmdBindIndexBuffer (cmdBuffer, indexBuffer, EOS::IndexFormat::UI32);
164+ cmdBindRenderPipeline (cmdBuffer, renderPipelineHandle);
165+ cmdPushConstants (cmdBuffer, mvp);
166+ cmdSetDepthState (cmdBuffer, depthState);
167+ cmdDrawIndexed (cmdBuffer, indices.size ());
143168 cmdPopMarker (cmdBuffer);
169+ }
144170 cmdEndRendering (cmdBuffer);
145-
146171 context->Submit (cmdBuffer, context->GetSwapChainTexture ());
147172 }
148173
0 commit comments