Cleanup 1/2
This commit is contained in:
@ -85,6 +85,28 @@ namespace ia::iae
|
||||
glm::orthoLH(0.0f, (FLOAT32) s_viewportExtent.x, (FLOAT32) s_viewportExtent.y, 0.0f, -1.0f, 1.0f);
|
||||
}
|
||||
|
||||
VOID RDC::Render(IN SDL_GPURenderPass* renderPass, IN SDL_GPUCommandBuffer* commandBuffer)
|
||||
{
|
||||
s_dynamicSpritePipeline->Bind(renderPass);
|
||||
SDL_PushGPUVertexUniformData(commandBuffer, 0, &s_projectionMatrix, sizeof(Mat4));
|
||||
SDL_PushGPUVertexUniformData(commandBuffer, 1, &s_viewMatrix, sizeof(Mat4));
|
||||
SDL_GPUTextureSamplerBinding textureBinding{.texture = s_dynamicSpriteAtlas
|
||||
? s_dynamicSpriteAtlas->GetTexture()->GetHandle()
|
||||
: s_defaultTexture->GetHandle(),
|
||||
.sampler = s_linearRepeatSampler};
|
||||
SDL_BindGPUFragmentSamplers(renderPass, 0, &textureBinding, 1);
|
||||
RDC_Device::BindGeometry(renderPass, s_quadGeometry);
|
||||
if (s_spriteInstanceCount)
|
||||
{
|
||||
const auto spriteInstanceBuffer = s_dynamicSpriteInstanceBuffer->GetHandle();
|
||||
s_dynamicSpriteInstanceBuffer->CopyFrom(s_spriteInstances,
|
||||
sizeof(RDC_SpriteInstanceData) * s_spriteInstanceCount);
|
||||
SDL_BindGPUVertexStorageBuffers(renderPass, 0, &spriteInstanceBuffer, 1);
|
||||
SDL_DrawGPUIndexedPrimitives(renderPass, 6, s_spriteInstanceCount, 0, 0, 0);
|
||||
}
|
||||
s_spriteInstanceCount = 0;
|
||||
}
|
||||
|
||||
VOID RDC::RenderToWindow()
|
||||
{
|
||||
STATIC SDL_GPURenderPass *ActiveRenderPass{};
|
||||
@ -105,31 +127,34 @@ namespace ia::iae
|
||||
return;
|
||||
|
||||
ActiveColorTargetInfo.texture = swapChainTexture;
|
||||
ActiveColorTargetInfo.clear_color = SDL_FColor{0.3f, 0.3f, 0.3f, 1.0f};
|
||||
ActiveRenderPass = SDL_BeginGPURenderPass(ActiveCommandBuffer, &ActiveColorTargetInfo, 1, nullptr);
|
||||
|
||||
s_dynamicSpritePipeline->Bind(ActiveRenderPass);
|
||||
SDL_PushGPUVertexUniformData(ActiveCommandBuffer, 0, &s_projectionMatrix, sizeof(Mat4));
|
||||
SDL_PushGPUVertexUniformData(ActiveCommandBuffer, 1, &s_viewMatrix, sizeof(Mat4));
|
||||
SDL_GPUTextureSamplerBinding textureBinding{.texture = s_dynamicSpriteAtlas
|
||||
? s_dynamicSpriteAtlas->GetTexture()->GetHandle()
|
||||
: s_defaultTexture->GetHandle(),
|
||||
.sampler = s_linearRepeatSampler};
|
||||
SDL_BindGPUFragmentSamplers(ActiveRenderPass, 0, &textureBinding, 1);
|
||||
RDC_Device::BindGeometry(ActiveRenderPass, s_quadGeometry);
|
||||
if (s_spriteInstanceCount)
|
||||
{
|
||||
const auto spriteInstanceBuffer = s_dynamicSpriteInstanceBuffer->GetHandle();
|
||||
s_dynamicSpriteInstanceBuffer->CopyFrom(s_spriteInstances,
|
||||
sizeof(RDC_SpriteInstanceData) * s_spriteInstanceCount);
|
||||
SDL_BindGPUVertexStorageBuffers(ActiveRenderPass, 0, &spriteInstanceBuffer, 1);
|
||||
SDL_DrawGPUIndexedPrimitives(ActiveRenderPass, 6, s_spriteInstanceCount, 0, 0, 0);
|
||||
}
|
||||
s_spriteInstanceCount = 0;
|
||||
|
||||
Render(ActiveRenderPass, ActiveCommandBuffer);
|
||||
SDL_EndGPURenderPass(ActiveRenderPass);
|
||||
|
||||
SDL_SubmitGPUCommandBuffer(ActiveCommandBuffer);
|
||||
|
||||
RDC_Device::WaitForIdle();
|
||||
}
|
||||
|
||||
VOID RDC::RenderToTexture(IN SDL_GPUTexture *texture)
|
||||
{
|
||||
STATIC SDL_GPURenderPass *ActiveRenderPass{};
|
||||
STATIC SDL_GPUCommandBuffer *ActiveCommandBuffer{};
|
||||
STATIC SDL_GPUColorTargetInfo ActiveColorTargetInfo{.clear_color = SDL_FColor{0.0f, 0.0f, 0.0f, 1.0f},
|
||||
.load_op = SDL_GPU_LOADOP_CLEAR,
|
||||
.store_op = SDL_GPU_STOREOP_STORE};
|
||||
|
||||
if (!(ActiveCommandBuffer = SDL_AcquireGPUCommandBuffer(RDC_Device::GetHandle())))
|
||||
THROW_UNKNOWN("Failed to acquire SDL GPU command buffer: ", SDL_GetError());
|
||||
|
||||
ActiveColorTargetInfo.texture = texture;
|
||||
ActiveRenderPass = SDL_BeginGPURenderPass(ActiveCommandBuffer, &ActiveColorTargetInfo, 1, nullptr);
|
||||
Render(ActiveRenderPass, ActiveCommandBuffer);
|
||||
SDL_EndGPURenderPass(ActiveRenderPass);
|
||||
|
||||
SDL_SubmitGPUCommandBuffer(ActiveCommandBuffer);
|
||||
|
||||
RDC_Device::WaitForIdle();
|
||||
}
|
||||
|
||||
Vec2 RDC::DrawSpriteTopLeft(IN Handle _image, IN INT32 tileIndexX, IN INT32 tileIndexY, IN Vec2 position,
|
||||
|
||||
@ -36,10 +36,6 @@ namespace ia::iae
|
||||
case EType::SAMPLED:
|
||||
createInfo.usage = SDL_GPU_TEXTUREUSAGE_COLOR_TARGET | SDL_GPU_TEXTUREUSAGE_SAMPLER;
|
||||
break;
|
||||
|
||||
case EType::RENDER_TARGET:
|
||||
createInfo.usage = SDL_GPU_TEXTUREUSAGE_COLOR_TARGET;
|
||||
break;
|
||||
}
|
||||
|
||||
m_handle = SDL_CreateGPUTexture(RDC_Device::GetHandle(), &createInfo);
|
||||
|
||||
Reference in New Issue
Block a user