Program Listing for File PoolPrimitives.cpp

Return to documentation for file (Source\Azura\RenderSystem\Src\Generic\PoolPrimitives.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<VertexWithUV> quadVertexData = Vector<VertexWithUV>({
    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<U32> quadIndexData = Vector<U32>({
    0, 1, 2,
    2, 3, 0
  }, allocatorTemporary);

  const auto quadBufferStart = reinterpret_cast<U8*>(quadVertexData.Data()); // NOLINT
  const auto quadIndexStart  = reinterpret_cast<U8*>(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