| 122 | } |
| 123 | |
| 124 | void ParallelRenderingApp::Init() |
| 125 | { |
| 126 | META_FUNCTION_TASK(); |
| 127 | UserInterfaceApp::Init(); |
| 128 | |
| 129 | const rhi::CommandQueue render_cmd_queue = GetRenderContext().GetRenderCommandKit().GetQueue(); |
| 130 | m_camera.Resize(GetRenderContext().GetSettings().frame_size); |
| 131 | |
| 132 | // Create cube mesh |
| 133 | gfx::CubeMesh<CubeVertex> cube_mesh(CubeVertex::layout); |
| 134 | |
| 135 | // Create render state with program |
| 136 | rhi::RenderState::Settings render_state_settings |
| 137 | { |
| 138 | .program = GetRenderContext().CreateProgram( |
| 139 | rhi::Program::Settings |
| 140 | { |
| 141 | .shader_set = rhi::Program::ShaderSet |
| 142 | { |
| 143 | { rhi::ShaderType::Vertex, { Data::ShaderProvider::Get(), { "ParallelRendering", "CubeVS" } } }, |
| 144 | { rhi::ShaderType::Pixel, { Data::ShaderProvider::Get(), { "ParallelRendering", "CubePS" } } }, |
| 145 | }, |
| 146 | .input_buffer_layouts = rhi::ProgramInputBufferLayouts |
| 147 | { |
| 148 | rhi::Program::InputBufferLayout |
| 149 | { |
| 150 | rhi::Program::InputBufferLayout::ArgumentSemantics { cube_mesh.GetVertexLayout().GetSemantics() } |
| 151 | } |
| 152 | }, |
| 153 | .argument_accessors = rhi::ProgramArgumentAccessors |
| 154 | { |
| 155 | // Addressable argument is manually defined |
| 156 | #ifdef ROOT_CONSTANTS_ENABLED |
| 157 | META_PROGRAM_ARG_ROOT_BUFFER_MUTABLE(rhi::ShaderType::All, "g_uniforms") |
| 158 | #else |
| 159 | META_PROGRAM_ARG_BUFFER_ADDRESS_MUTABLE(rhi::ShaderType::All, "g_uniforms") |
| 160 | #endif |
| 161 | // Other arguments are defined in shader register spaces |
| 162 | }, |
| 163 | .attachment_formats = GetScreenRenderPattern().GetAttachmentFormats() |
| 164 | } |
| 165 | ), |
| 166 | .render_pattern = GetScreenRenderPattern() |
| 167 | }; |
| 168 | render_state_settings.program.SetName("Render Pipeline State"); |
| 169 | render_state_settings.depth.enabled = true; |
| 170 | m_render_state = GetRenderContext().CreateRenderState( render_state_settings); |
| 171 | |
| 172 | // Create cube mesh buffer resources |
| 173 | const uint32_t cubes_count = m_settings.GetTotalCubesCount(); |
| 174 | const gfx::Mesh::Subsets mesh_subsets(cubes_count, |
| 175 | gfx::Mesh::Subset(gfx::Mesh::Type::Cube, |
| 176 | gfx::Mesh::Subset::Slice(0U, cube_mesh.GetVertexCount()), |
| 177 | gfx::Mesh::Subset::Slice(0U, cube_mesh.GetIndexCount()), |
| 178 | false)); |
| 179 | m_cube_array_buffers_ptr = std::make_unique<MeshBuffers>(render_cmd_queue, std::move(cube_mesh), "Cube", mesh_subsets); |
| 180 | |
| 181 | // Create cube-map render target texture |
nothing calls this directly
no test coverage detected