From 39c1bce62d9a8d7d314aa96044ca7ecb10d91362 Mon Sep 17 00:00:00 2001 From: Kai Ninomiya Date: Thu, 8 Jun 2017 19:03:59 -0700 Subject: [PATCH] Update glTFViewer for render passes and depth stencil state (#39) --- examples/glTFViewer/glTFViewer.cpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/examples/glTFViewer/glTFViewer.cpp b/examples/glTFViewer/glTFViewer.cpp index 18dc37a606..818f467d61 100644 --- a/examples/glTFViewer/glTFViewer.cpp +++ b/examples/glTFViewer/glTFViewer.cpp @@ -71,6 +71,8 @@ struct u_transform_block { nxt::Device device; nxt::Queue queue; +nxt::RenderPass renderpass; +nxt::Framebuffer framebuffer; nxt::Buffer defaultBuffer; std::map buffers; @@ -252,14 +254,21 @@ namespace { .SetBindingsType(nxt::ShaderStageBit::Fragment, nxt::BindingType::SampledTexture, 2, 1) .GetResult(); + auto depthStencilState = device.CreateDepthStencilStateBuilder() + .SetDepthCompareFunction(nxt::CompareFunction::Less) + .SetDepthWriteEnabled(true) + .GetResult(); + auto pipelineLayout = device.CreatePipelineLayoutBuilder() .SetBindGroupLayout(0, bindGroupLayout) .GetResult(); auto pipeline = device.CreatePipelineBuilder() + .SetSubpass(renderpass, 0) .SetLayout(pipelineLayout) .SetStage(nxt::ShaderStage::Vertex, oVSModule, "main") .SetStage(nxt::ShaderStage::Fragment, oFSModule, "main") .SetInputState(inputState) + .SetDepthStencilState(depthStencilState) .GetResult(); auto uniformBuffer = device.CreateBufferBuilder() @@ -458,6 +467,18 @@ namespace { device = CreateCppNXTDevice(); queue = device.CreateQueueBuilder().GetResult(); + renderpass = device.CreateRenderPassBuilder() + .SetAttachmentCount(1) + .AttachmentSetFormat(0, nxt::TextureFormat::R8G8B8A8Unorm) + .SetSubpassCount(1) + .SubpassSetColorAttachment(0, 0, 0) + .GetResult(); + framebuffer = device.CreateFramebufferBuilder() + .SetRenderPass(renderpass) + // attachment 0 -> back buffer + // (implicit) // TODO(kainino@chromium.org): use the texture provided by WSI + .SetDimensions(640, 480) + .GetResult(); initBuffers(); initSamplers(); @@ -496,6 +517,7 @@ namespace { material.uniformBuffer.SetSubData(0, sizeof(u_transform_block) / sizeof(uint32_t), reinterpret_cast(&transforms)); + cmd.BeginRenderPass(renderpass, framebuffer); cmd.SetPipeline(material.pipeline); cmd.TransitionBufferUsage(material.uniformBuffer, nxt::BufferUsageBit::Uniform); cmd.SetBindGroup(0, material.bindGroup0); @@ -539,6 +561,7 @@ namespace { // DrawArrays cmd.DrawArrays(vertexCount, 1, 0, 0); } + cmd.EndRenderPass(); } auto commands = cmd.GetResult(); queue.Submit(1, &commands);