.. _program_listing_file_Source_Azura_RenderSystem_Src_Generic_PoolPrimitives.cpp: Program Listing for File PoolPrimitives.cpp =========================================== |exhale_lsh| :ref:`Return to documentation for file ` (``Source\Azura\RenderSystem\Src\Generic\PoolPrimitives.cpp``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #include "Generic/PoolPrimitives.h" #include "Generic/Renderer.h" using Azura::Containers::Vector; // NOLINT namespace Azura { namespace { struct VertexWithUV { float m_pos[4]; float m_uv[2]; }; } // namespace DrawablePool& PoolPrimitives::AddScreenQuad(Renderer& renderer, U32 renderPass, Memory::Allocator& allocatorTemporary) { DrawablePoolCreateInfo quadPoolInfo = {allocatorTemporary}; quadPoolInfo.m_byteSize = 0x400000; quadPoolInfo.m_numDrawables = 1; quadPoolInfo.m_drawType = DrawType::InstancedIndexed; quadPoolInfo.m_cullMode = CullMode::None; quadPoolInfo.m_renderPasses = {{renderPass}, allocatorTemporary}; const U32 DEFAULT_VERTEX_SLOT = quadPoolInfo.AddInputSlot({ BufferUsageRate::PerVertex, { {"POSITION", RawStorageFormat::R32G32B32A32_FLOAT}, {"UV", RawStorageFormat::R32G32_FLOAT} } }); DrawablePool& quadPool = renderer.CreateDrawablePool(quadPoolInfo); Vector quadVertexData = Vector({ VertexWithUV{{-1, -1, 0.9999f, 1}, {0, 0}}, VertexWithUV{{1, -1, 0.9999f, 1}, {1, 0}}, VertexWithUV{{1, 1, 0.9999f, 1}, {1, 1}}, VertexWithUV{{-1, 1, 0.9999f, 1}, {0, 1}} }, allocatorTemporary); Vector quadIndexData = Vector({ 0, 1, 2, 2, 3, 0 }, allocatorTemporary); const auto quadBufferStart = reinterpret_cast(quadVertexData.Data()); // NOLINT const auto quadIndexStart = reinterpret_cast(quadIndexData.Data()); // NOLINT // Create Drawable from Pool DrawableCreateInfo createInfo = {}; createInfo.m_vertexCount = quadVertexData.GetSize(); createInfo.m_indexCount = quadIndexData.GetSize(); createInfo.m_instanceCount = 1; createInfo.m_indexType = RawStorageFormat::R32_UINT; const auto quadId = quadPool.CreateDrawable(createInfo); quadPool.BindVertexData(quadId, DEFAULT_VERTEX_SLOT, quadBufferStart, quadVertexData.GetSize() * sizeof(VertexWithUV)); quadPool.SetIndexData(quadId, quadIndexStart, quadIndexData.GetSize() * sizeof(U32)); return quadPool; } } // namespace Azura