| 79 | } |
| 80 | |
| 81 | void TexturedCubeApp::Init() |
| 82 | { |
| 83 | UserInterfaceApp::Init(); |
| 84 | |
| 85 | const rhi::CommandQueue render_cmd_queue = GetRenderContext().GetRenderCommandKit().GetQueue(); |
| 86 | m_camera.Resize(GetRenderContext().GetSettings().frame_size); |
| 87 | |
| 88 | // Create vertex buffer for cube mesh |
| 89 | const gfx::CubeMesh<CubeVertex> cube_mesh(CubeVertex::layout); |
| 90 | const Data::Size vertex_data_size = cube_mesh.GetVertexDataSize(); |
| 91 | const Data::Size vertex_size = cube_mesh.GetVertexSize(); |
| 92 | rhi::Buffer vertex_buffer = GetRenderContext().CreateBuffer(rhi::BufferSettings::ForVertexBuffer(vertex_data_size, vertex_size)); |
| 93 | vertex_buffer.SetName("Cube Vertex Buffer"); |
| 94 | vertex_buffer.SetData(render_cmd_queue, { |
| 95 | reinterpret_cast<Data::ConstRawPtr>(cube_mesh.GetVertices().data()), // NOSONAR |
| 96 | vertex_data_size |
| 97 | }); |
| 98 | m_vertex_buffer_set = rhi::BufferSet(rhi::BufferType::Vertex, { vertex_buffer }); |
| 99 | |
| 100 | // Create index buffer for cube mesh |
| 101 | const Data::Size index_data_size = cube_mesh.GetIndexDataSize(); |
| 102 | const gfx::PixelFormat index_format = gfx::GetIndexFormat(cube_mesh.GetIndex(0)); |
| 103 | m_index_buffer = GetRenderContext().CreateBuffer(rhi::BufferSettings::ForIndexBuffer(index_data_size, index_format)); |
| 104 | m_index_buffer.SetName("Cube Index Buffer"); |
| 105 | m_index_buffer.SetData(render_cmd_queue, { |
| 106 | reinterpret_cast<Data::ConstRawPtr>(cube_mesh.GetIndices().data()), // NOSONAR |
| 107 | index_data_size |
| 108 | }); |
| 109 | |
| 110 | // Create render state with program |
| 111 | m_render_state = GetRenderContext().CreateRenderState( |
| 112 | rhi::RenderState::Settings |
| 113 | { |
| 114 | .program = GetRenderContext().CreateProgram( |
| 115 | rhi::Program::Settings |
| 116 | { |
| 117 | .shader_set = rhi::Program::ShaderSet |
| 118 | { |
| 119 | { rhi::ShaderType::Vertex, { Data::ShaderProvider::Get(), { "TexturedCube", "CubeVS" } } }, |
| 120 | { rhi::ShaderType::Pixel, { Data::ShaderProvider::Get(), { "TexturedCube", "CubePS" } } }, |
| 121 | }, |
| 122 | .input_buffer_layouts = rhi::ProgramInputBufferLayouts |
| 123 | { |
| 124 | rhi::Program::InputBufferLayout |
| 125 | { |
| 126 | rhi::Program::InputBufferLayout::ArgumentSemantics { cube_mesh.GetVertexLayout().GetSemantics() } |
| 127 | } |
| 128 | }, |
| 129 | .argument_accessors = rhi::ProgramArgumentAccessors |
| 130 | { |
| 131 | META_PROGRAM_ARG_ROOT_BUFFER_CONSTANT(rhi::ShaderType::Pixel, "g_constants"), |
| 132 | META_PROGRAM_ARG_ROOT_BUFFER_FRAME_CONSTANT(rhi::ShaderType::All, "g_uniforms") |
| 133 | }, |
| 134 | .attachment_formats = GetScreenRenderPattern().GetAttachmentFormats() |
| 135 | } |
| 136 | ), |
| 137 | .render_pattern = GetScreenRenderPattern() |
| 138 | } |
nothing calls this directly
no test coverage detected