mirror of https://github.com/libsdl-org/SDL.git
3DS: Use triangles for rendering rectangles
Co-authored-by: asiekierka <asiekierka@users.noreply.github.com>
This commit is contained in:
parent
e407b7b720
commit
39f5327333
|
|
@ -428,14 +428,14 @@ static int
|
||||||
N3DS_QueueFillRects(SDL_Renderer * renderer, SDL_RenderCommand *cmd, const SDL_FRect * rects, int count)
|
N3DS_QueueFillRects(SDL_Renderer * renderer, SDL_RenderCommand *cmd, const SDL_FRect * rects, int count)
|
||||||
{
|
{
|
||||||
SDL_Color color = *((SDL_Color*) &(cmd->data.draw.r));
|
SDL_Color color = *((SDL_Color*) &(cmd->data.draw.r));
|
||||||
VertVCT *verts = (VertVCT *) SDL_AllocateRenderVertices(renderer, count * 2 * sizeof (VertVCT), 4, &cmd->data.draw.first);
|
VertVCT *verts = (VertVCT *) SDL_AllocateRenderVertices(renderer, count * 6 * sizeof (VertVCT), 0, &cmd->data.draw.first);
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (!verts) {
|
if (!verts) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd->data.draw.count = count * 4;
|
cmd->data.draw.count = count * 6;
|
||||||
|
|
||||||
for (i = 0; i < count; i++, rects++) {
|
for (i = 0; i < count; i++, rects++) {
|
||||||
verts->x = rects->x;
|
verts->x = rects->x;
|
||||||
|
|
@ -443,6 +443,16 @@ N3DS_QueueFillRects(SDL_Renderer * renderer, SDL_RenderCommand *cmd, const SDL_F
|
||||||
verts->col = color;
|
verts->col = color;
|
||||||
verts++;
|
verts++;
|
||||||
|
|
||||||
|
verts->x = rects->x;
|
||||||
|
verts->y = rects->y + rects->h;
|
||||||
|
verts->col = color;
|
||||||
|
verts++;
|
||||||
|
|
||||||
|
verts->x = rects->x + rects->w;
|
||||||
|
verts->y = rects->y;
|
||||||
|
verts->col = color;
|
||||||
|
verts++;
|
||||||
|
|
||||||
verts->x = rects->x + rects->w;
|
verts->x = rects->x + rects->w;
|
||||||
verts->y = rects->y;
|
verts->y = rects->y;
|
||||||
verts->col = color;
|
verts->col = color;
|
||||||
|
|
@ -478,12 +488,12 @@ N3DS_QueueCopy(SDL_Renderer * renderer, SDL_RenderCommand *cmd, SDL_Texture * te
|
||||||
const float u1 = srcrect->x + srcrect->w;
|
const float u1 = srcrect->x + srcrect->w;
|
||||||
const float v1 = srcrect->y + srcrect->h;
|
const float v1 = srcrect->y + srcrect->h;
|
||||||
|
|
||||||
verts = (VertVCT *) SDL_AllocateRenderVertices(renderer, 2 * sizeof (VertVCT), 4, &cmd->data.draw.first);
|
verts = (VertVCT *) SDL_AllocateRenderVertices(renderer, 6 * sizeof (VertVCT), 0, &cmd->data.draw.first);
|
||||||
if (!verts) {
|
if (!verts) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd->data.draw.count = 4;
|
cmd->data.draw.count = 6;
|
||||||
|
|
||||||
verts->u = u0;
|
verts->u = u0;
|
||||||
verts->v = v0;
|
verts->v = v0;
|
||||||
|
|
@ -492,6 +502,20 @@ N3DS_QueueCopy(SDL_Renderer * renderer, SDL_RenderCommand *cmd, SDL_Texture * te
|
||||||
verts->col = color;
|
verts->col = color;
|
||||||
verts++;
|
verts++;
|
||||||
|
|
||||||
|
verts->u = u0;
|
||||||
|
verts->v = v1;
|
||||||
|
verts->x = x;
|
||||||
|
verts->y = y + height;
|
||||||
|
verts->col = color;
|
||||||
|
verts++;
|
||||||
|
|
||||||
|
verts->u = u1;
|
||||||
|
verts->v = v0;
|
||||||
|
verts->x = x + width;
|
||||||
|
verts->y = y;
|
||||||
|
verts->col = color;
|
||||||
|
verts++;
|
||||||
|
|
||||||
verts->u = u1;
|
verts->u = u1;
|
||||||
verts->v = v0;
|
verts->v = v0;
|
||||||
verts->x = x + width;
|
verts->x = x + width;
|
||||||
|
|
@ -502,7 +526,7 @@ N3DS_QueueCopy(SDL_Renderer * renderer, SDL_RenderCommand *cmd, SDL_Texture * te
|
||||||
verts->u = u0;
|
verts->u = u0;
|
||||||
verts->v = v1;
|
verts->v = v1;
|
||||||
verts->x = x;
|
verts->x = x;
|
||||||
verts->y = y + 1;
|
verts->y = y + height;
|
||||||
verts->col = color;
|
verts->col = color;
|
||||||
verts++;
|
verts++;
|
||||||
|
|
||||||
|
|
@ -511,7 +535,6 @@ N3DS_QueueCopy(SDL_Renderer * renderer, SDL_RenderCommand *cmd, SDL_Texture * te
|
||||||
verts->x = x + width;
|
verts->x = x + width;
|
||||||
verts->y = y + height;
|
verts->y = y + height;
|
||||||
verts->col = color;
|
verts->col = color;
|
||||||
verts++;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
@ -522,7 +545,7 @@ N3DS_QueueCopyEx(SDL_Renderer * renderer, SDL_RenderCommand *cmd, SDL_Texture *
|
||||||
const double angle, const SDL_FPoint *center, const SDL_RendererFlip flip, float scale_x, float scale_y)
|
const double angle, const SDL_FPoint *center, const SDL_RendererFlip flip, float scale_x, float scale_y)
|
||||||
{
|
{
|
||||||
SDL_Color color = *((SDL_Color*) &(cmd->data.draw.r));
|
SDL_Color color = *((SDL_Color*) &(cmd->data.draw.r));
|
||||||
VertVCT *verts = (VertVCT *) SDL_AllocateRenderVertices(renderer, 4 * sizeof (VertVCT), 4, &cmd->data.draw.first);
|
VertVCT *verts = (VertVCT *) SDL_AllocateRenderVertices(renderer, 6 * sizeof (VertVCT), 0, &cmd->data.draw.first);
|
||||||
const float centerx = center->x;
|
const float centerx = center->x;
|
||||||
const float centery = center->y;
|
const float centery = center->y;
|
||||||
const float x = dstrect->x + centerx;
|
const float x = dstrect->x + centerx;
|
||||||
|
|
@ -541,7 +564,7 @@ N3DS_QueueCopyEx(SDL_Renderer * renderer, SDL_RenderCommand *cmd, SDL_Texture *
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd->data.draw.count = 4;
|
cmd->data.draw.count = 6;
|
||||||
|
|
||||||
s = sinf(degToRad(360-angle));
|
s = sinf(degToRad(360-angle));
|
||||||
c = cosf(degToRad(360-angle));
|
c = cosf(degToRad(360-angle));
|
||||||
|
|
@ -570,6 +593,20 @@ N3DS_QueueCopyEx(SDL_Renderer * renderer, SDL_RenderCommand *cmd, SDL_Texture *
|
||||||
verts->col = color;
|
verts->col = color;
|
||||||
verts++;
|
verts++;
|
||||||
|
|
||||||
|
verts->u = u1;
|
||||||
|
verts->v = v0;
|
||||||
|
verts->x = x + cw2 + sh1;
|
||||||
|
verts->y = y - sw2 + ch1;
|
||||||
|
verts->col = color;
|
||||||
|
verts++;
|
||||||
|
|
||||||
|
verts->u = u0;
|
||||||
|
verts->v = v1;
|
||||||
|
verts->x = x + cw1 + sh2;
|
||||||
|
verts->y = y - sw1 + ch2;
|
||||||
|
verts->col = color;
|
||||||
|
verts++;
|
||||||
|
|
||||||
verts->u = u0;
|
verts->u = u0;
|
||||||
verts->v = v1;
|
verts->v = v1;
|
||||||
verts->x = x + cw1 + sh2;
|
verts->x = x + cw1 + sh2;
|
||||||
|
|
@ -602,6 +639,12 @@ N3DS_QueueCopyEx(SDL_Renderer * renderer, SDL_RenderCommand *cmd, SDL_Texture *
|
||||||
verts--;
|
verts--;
|
||||||
verts->x *= scale_x;
|
verts->x *= scale_x;
|
||||||
verts->y *= scale_y;
|
verts->y *= scale_y;
|
||||||
|
verts--;
|
||||||
|
verts->x *= scale_x;
|
||||||
|
verts->y *= scale_y;
|
||||||
|
verts--;
|
||||||
|
verts->x *= scale_x;
|
||||||
|
verts->y *= scale_y;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
@ -724,7 +767,7 @@ N3DS_RunCommandQueue(SDL_Renderer * renderer, SDL_RenderCommand *cmd, void *vert
|
||||||
.mode = cmd->data.draw.blend
|
.mode = cmd->data.draw.blend
|
||||||
};
|
};
|
||||||
N3DS_SetBlendState(data, &state);
|
N3DS_SetBlendState(data, &state);
|
||||||
C3D_DrawArrays(GPU_TRIANGLE_STRIP, first, count);
|
C3D_DrawArrays(GPU_TRIANGLES, first, count);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -737,7 +780,7 @@ N3DS_RunCommandQueue(SDL_Renderer * renderer, SDL_RenderCommand *cmd, void *vert
|
||||||
.mode = cmd->data.draw.blend
|
.mode = cmd->data.draw.blend
|
||||||
};
|
};
|
||||||
N3DS_SetBlendState(data, &state);
|
N3DS_SetBlendState(data, &state);
|
||||||
C3D_DrawArrays(GPU_TRIANGLE_STRIP, first, count);
|
C3D_DrawArrays(GPU_TRIANGLES, first, count);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -914,6 +957,7 @@ N3DS_CreateRenderer(SDL_Renderer * renderer, SDL_Window * window, Uint32 flags)
|
||||||
N3DS_SetRenderTarget(renderer, NULL);
|
N3DS_SetRenderTarget(renderer, NULL);
|
||||||
|
|
||||||
C3D_DepthTest(false, GPU_GEQUAL, GPU_WRITE_ALL);
|
C3D_DepthTest(false, GPU_GEQUAL, GPU_WRITE_ALL);
|
||||||
|
C3D_CullFace(GPU_CULL_NONE);
|
||||||
|
|
||||||
/* Scissoring */
|
/* Scissoring */
|
||||||
C3D_SetScissor(GPU_SCISSOR_NORMAL, 0, 0, width, height);
|
C3D_SetScissor(GPU_SCISSOR_NORMAL, 0, 0, width, height);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue