mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-09-16 16:28:13 +00:00
Organize the GPU renderer draw code
This commit is contained in:
@@ -468,7 +468,7 @@ static SDL_GPURenderPass *RestartRenderPass(GPU_RenderData *data)
|
|||||||
return data->state.render_pass;
|
return data->state.render_pass;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void PushUniforms(GPU_RenderData *data, SDL_RenderCommand *cmd)
|
static void PushVertexUniforms(GPU_RenderData *data, SDL_RenderCommand *cmd)
|
||||||
{
|
{
|
||||||
GPU_ShaderUniformData uniforms;
|
GPU_ShaderUniformData uniforms;
|
||||||
SDL_zero(uniforms);
|
SDL_zero(uniforms);
|
||||||
@@ -522,19 +522,19 @@ static void Draw(
|
|||||||
RestartRenderPass(data);
|
RestartRenderPass(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SDL_GPURenderPass *pass = data->state.render_pass;
|
||||||
GPU_VertexShaderID v_shader;
|
GPU_VertexShaderID v_shader;
|
||||||
GPU_FragmentShaderID f_shader;
|
GPU_FragmentShaderID f_shader;
|
||||||
SDL_GPURenderPass *pass = data->state.render_pass;
|
|
||||||
GPU_TextureData *tdata = NULL;
|
|
||||||
|
|
||||||
if (cmd->data.draw.texture) {
|
|
||||||
tdata = (GPU_TextureData *)cmd->data.draw.texture->internal;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (prim == SDL_GPU_PRIMITIVETYPE_TRIANGLELIST) {
|
if (prim == SDL_GPU_PRIMITIVETYPE_TRIANGLELIST) {
|
||||||
if (cmd->data.draw.texture) {
|
SDL_Texture *texture = cmd->data.draw.texture;
|
||||||
|
if (texture) {
|
||||||
v_shader = VERT_SHADER_TRI_TEXTURE;
|
v_shader = VERT_SHADER_TRI_TEXTURE;
|
||||||
f_shader = tdata->shader;
|
if (texture->format == SDL_PIXELFORMAT_RGBA32 || texture->format == SDL_PIXELFORMAT_BGRA32) {
|
||||||
|
f_shader = FRAG_SHADER_TEXTURE_RGBA;
|
||||||
|
} else {
|
||||||
|
f_shader = FRAG_SHADER_TEXTURE_RGB;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
v_shader = VERT_SHADER_TRI_COLOR;
|
v_shader = VERT_SHADER_TRI_COLOR;
|
||||||
f_shader = FRAG_SHADER_COLOR;
|
f_shader = FRAG_SHADER_COLOR;
|
||||||
@@ -558,15 +558,14 @@ static void Draw(
|
|||||||
}
|
}
|
||||||
|
|
||||||
SDL_GPUGraphicsPipeline *pipe = GPU_GetPipeline(&data->pipeline_cache, &data->shaders, data->device, &pipe_params);
|
SDL_GPUGraphicsPipeline *pipe = GPU_GetPipeline(&data->pipeline_cache, &data->shaders, data->device, &pipe_params);
|
||||||
|
|
||||||
if (!pipe) {
|
if (!pipe) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
SetViewportAndScissor(data);
|
SDL_BindGPUGraphicsPipeline(pass, pipe);
|
||||||
SDL_BindGPUGraphicsPipeline(data->state.render_pass, pipe);
|
|
||||||
|
|
||||||
if (tdata) {
|
if (cmd->data.draw.texture) {
|
||||||
|
GPU_TextureData *tdata = (GPU_TextureData *)cmd->data.draw.texture->internal;
|
||||||
SDL_GPUTextureSamplerBinding sampler_bind;
|
SDL_GPUTextureSamplerBinding sampler_bind;
|
||||||
SDL_zero(sampler_bind);
|
SDL_zero(sampler_bind);
|
||||||
sampler_bind.sampler = *SamplerPointer(data, cmd->data.draw.texture_address_mode, cmd->data.draw.texture_scale_mode);
|
sampler_bind.sampler = *SamplerPointer(data, cmd->data.draw.texture_address_mode, cmd->data.draw.texture_scale_mode);
|
||||||
@@ -578,10 +577,12 @@ static void Draw(
|
|||||||
SDL_zero(buffer_bind);
|
SDL_zero(buffer_bind);
|
||||||
buffer_bind.buffer = data->vertices.buffer;
|
buffer_bind.buffer = data->vertices.buffer;
|
||||||
buffer_bind.offset = offset;
|
buffer_bind.offset = offset;
|
||||||
|
|
||||||
SDL_BindGPUVertexBuffers(pass, 0, &buffer_bind, 1);
|
SDL_BindGPUVertexBuffers(pass, 0, &buffer_bind, 1);
|
||||||
PushUniforms(data, cmd);
|
PushVertexUniforms(data, cmd);
|
||||||
SDL_DrawGPUPrimitives(data->state.render_pass, num_verts, 1, 0, 0);
|
|
||||||
|
SetViewportAndScissor(data);
|
||||||
|
|
||||||
|
SDL_DrawGPUPrimitives(pass, num_verts, 1, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ReleaseVertexBuffer(GPU_RenderData *data)
|
static void ReleaseVertexBuffer(GPU_RenderData *data)
|
||||||
|
Reference in New Issue
Block a user