mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-09-26 13:08:29 +00:00
Update for SDL3 coding style (#6717)
I updated .clang-format and ran clang-format 14 over the src and test directories to standardize the code base. In general I let clang-format have it's way, and added markup to prevent formatting of code that would break or be completely unreadable if formatted. The script I ran for the src directory is added as build-scripts/clang-format-src.sh This fixes: #6592 #6593 #6594
This commit is contained in:
@@ -50,43 +50,40 @@ typedef struct
|
||||
uint8_t vsync; /* 0 (Disabled), 1 (Enabled), 2 (Dynamic) */
|
||||
} PS2_RenderData;
|
||||
|
||||
|
||||
static int vsync_sema_id = 0;
|
||||
|
||||
/* PRIVATE METHODS */
|
||||
static int vsync_handler()
|
||||
{
|
||||
iSignalSema(vsync_sema_id);
|
||||
iSignalSema(vsync_sema_id);
|
||||
|
||||
ExitHandler();
|
||||
return 0;
|
||||
ExitHandler();
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Copy of gsKit_sync_flip, but without the 'flip' */
|
||||
static void gsKit_sync(GSGLOBAL *gsGlobal)
|
||||
{
|
||||
if (!gsGlobal->FirstFrame) {
|
||||
WaitSema(vsync_sema_id);
|
||||
}
|
||||
while (PollSema(vsync_sema_id) >= 0)
|
||||
;
|
||||
if (!gsGlobal->FirstFrame) {
|
||||
WaitSema(vsync_sema_id);
|
||||
}
|
||||
while (PollSema(vsync_sema_id) >= 0)
|
||||
;
|
||||
}
|
||||
|
||||
/* Copy of gsKit_sync_flip, but without the 'sync' */
|
||||
static void gsKit_flip(GSGLOBAL *gsGlobal)
|
||||
{
|
||||
if (!gsGlobal->FirstFrame) {
|
||||
if (gsGlobal->DoubleBuffering == GS_SETTING_ON) {
|
||||
GS_SET_DISPFB2( gsGlobal->ScreenBuffer[
|
||||
gsGlobal->ActiveBuffer & 1] / 8192,
|
||||
gsGlobal->Width / 64, gsGlobal->PSM, 0, 0 );
|
||||
if (!gsGlobal->FirstFrame) {
|
||||
if (gsGlobal->DoubleBuffering == GS_SETTING_ON) {
|
||||
GS_SET_DISPFB2(gsGlobal->ScreenBuffer[gsGlobal->ActiveBuffer & 1] / 8192,
|
||||
gsGlobal->Width / 64, gsGlobal->PSM, 0, 0);
|
||||
|
||||
gsGlobal->ActiveBuffer ^= 1;
|
||||
}
|
||||
gsGlobal->ActiveBuffer ^= 1;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
gsKit_setactive(gsGlobal);
|
||||
gsKit_setactive(gsGlobal);
|
||||
}
|
||||
|
||||
static int PixelFormatToPS2PSM(Uint32 format)
|
||||
@@ -99,16 +96,13 @@ static int PixelFormatToPS2PSM(Uint32 format)
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
PS2_WindowEvent(SDL_Renderer * renderer, const SDL_WindowEvent *event)
|
||||
static void PS2_WindowEvent(SDL_Renderer *renderer, const SDL_WindowEvent *event)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
static int
|
||||
PS2_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture)
|
||||
static int PS2_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture)
|
||||
{
|
||||
GSTEXTURE* ps2_tex = (GSTEXTURE*) SDL_calloc(1, sizeof(GSTEXTURE));
|
||||
GSTEXTURE *ps2_tex = (GSTEXTURE *)SDL_calloc(1, sizeof(GSTEXTURE));
|
||||
|
||||
if (ps2_tex == NULL) {
|
||||
return SDL_OutOfMemory();
|
||||
@@ -129,41 +123,38 @@ PS2_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
PS2_LockTexture(SDL_Renderer * renderer, SDL_Texture * texture,
|
||||
const SDL_Rect * rect, void **pixels, int *pitch)
|
||||
static int PS2_LockTexture(SDL_Renderer *renderer, SDL_Texture *texture,
|
||||
const SDL_Rect *rect, void **pixels, int *pitch)
|
||||
{
|
||||
GSTEXTURE *ps2_texture = (GSTEXTURE *) texture->driverdata;
|
||||
GSTEXTURE *ps2_texture = (GSTEXTURE *)texture->driverdata;
|
||||
|
||||
*pixels =
|
||||
(void *) ((Uint8 *) ps2_texture->Mem + rect->y * ps2_texture->Width * SDL_BYTESPERPIXEL(texture->format) +
|
||||
rect->x * SDL_BYTESPERPIXEL(texture->format));
|
||||
(void *)((Uint8 *)ps2_texture->Mem + rect->y * ps2_texture->Width * SDL_BYTESPERPIXEL(texture->format) +
|
||||
rect->x * SDL_BYTESPERPIXEL(texture->format));
|
||||
*pitch = ps2_texture->Width * SDL_BYTESPERPIXEL(texture->format);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
PS2_UnlockTexture(SDL_Renderer * renderer, SDL_Texture * texture)
|
||||
static void PS2_UnlockTexture(SDL_Renderer *renderer, SDL_Texture *texture)
|
||||
{
|
||||
GSTEXTURE *ps2_texture = (GSTEXTURE *) texture->driverdata;
|
||||
PS2_RenderData *data = (PS2_RenderData *) renderer->driverdata;
|
||||
GSTEXTURE *ps2_texture = (GSTEXTURE *)texture->driverdata;
|
||||
PS2_RenderData *data = (PS2_RenderData *)renderer->driverdata;
|
||||
|
||||
gsKit_TexManager_invalidate(data->gsGlobal, ps2_texture);
|
||||
}
|
||||
|
||||
static int
|
||||
PS2_UpdateTexture(SDL_Renderer * renderer, SDL_Texture * texture,
|
||||
const SDL_Rect * rect, const void *pixels, int pitch)
|
||||
static int PS2_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture,
|
||||
const SDL_Rect *rect, const void *pixels, int pitch)
|
||||
{
|
||||
const Uint8 *src;
|
||||
Uint8 *dst;
|
||||
int row, length,dpitch;
|
||||
int row, length, dpitch;
|
||||
src = pixels;
|
||||
|
||||
PS2_LockTexture(renderer, texture, rect, (void **)&dst, &dpitch);
|
||||
length = rect->w * SDL_BYTESPERPIXEL(texture->format);
|
||||
if (length == pitch && length == dpitch) {
|
||||
SDL_memcpy(dst, src, length*rect->h);
|
||||
SDL_memcpy(dst, src, length * rect->h);
|
||||
} else {
|
||||
for (row = 0; row < rect->h; ++row) {
|
||||
SDL_memcpy(dst, src, length);
|
||||
@@ -177,10 +168,9 @@ PS2_UpdateTexture(SDL_Renderer * renderer, SDL_Texture * texture,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
PS2_SetTextureScaleMode(SDL_Renderer * renderer, SDL_Texture * texture, SDL_ScaleMode scaleMode)
|
||||
static void PS2_SetTextureScaleMode(SDL_Renderer *renderer, SDL_Texture *texture, SDL_ScaleMode scaleMode)
|
||||
{
|
||||
GSTEXTURE *ps2_texture = (GSTEXTURE *) texture->driverdata;
|
||||
GSTEXTURE *ps2_texture = (GSTEXTURE *)texture->driverdata;
|
||||
/*
|
||||
set texture filtering according to scaleMode
|
||||
suported hint values are nearest (0, default) or linear (1)
|
||||
@@ -188,28 +178,25 @@ PS2_SetTextureScaleMode(SDL_Renderer * renderer, SDL_Texture * texture, SDL_Scal
|
||||
or GS_FILTER_LINEAR (good for scaling)
|
||||
*/
|
||||
uint32_t gsKitScaleMode = (scaleMode == SDL_ScaleModeNearest
|
||||
? GS_FILTER_NEAREST
|
||||
: GS_FILTER_LINEAR);
|
||||
? GS_FILTER_NEAREST
|
||||
: GS_FILTER_LINEAR);
|
||||
ps2_texture->Filter = gsKitScaleMode;
|
||||
}
|
||||
|
||||
static int
|
||||
PS2_SetRenderTarget(SDL_Renderer * renderer, SDL_Texture * texture)
|
||||
static int PS2_SetRenderTarget(SDL_Renderer *renderer, SDL_Texture *texture)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
PS2_QueueSetViewport(SDL_Renderer * renderer, SDL_RenderCommand *cmd)
|
||||
static int PS2_QueueSetViewport(SDL_Renderer *renderer, SDL_RenderCommand *cmd)
|
||||
{
|
||||
return 0; /* nothing to do in this backend. */
|
||||
return 0; /* nothing to do in this backend. */
|
||||
}
|
||||
|
||||
static int
|
||||
PS2_QueueDrawPoints(SDL_Renderer * renderer, SDL_RenderCommand *cmd, const SDL_FPoint * points, int count)
|
||||
static int PS2_QueueDrawPoints(SDL_Renderer *renderer, SDL_RenderCommand *cmd, const SDL_FPoint *points, int count)
|
||||
{
|
||||
PS2_RenderData *data = (PS2_RenderData *) renderer->driverdata;
|
||||
GSPRIMPOINT *vertices = (GSPRIMPOINT *) SDL_AllocateRenderVertices(renderer, count * sizeof (GSPRIMPOINT), 4, &cmd->data.draw.first);
|
||||
PS2_RenderData *data = (PS2_RenderData *)renderer->driverdata;
|
||||
GSPRIMPOINT *vertices = (GSPRIMPOINT *)SDL_AllocateRenderVertices(renderer, count * sizeof(GSPRIMPOINT), 4, &cmd->data.draw.first);
|
||||
uint8_t colorR, colorG, colorB, colorA;
|
||||
gs_rgbaq rgbaq;
|
||||
int i;
|
||||
@@ -233,11 +220,10 @@ PS2_QueueDrawPoints(SDL_Renderer * renderer, SDL_RenderCommand *cmd, const SDL_F
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
PS2_QueueGeometry(SDL_Renderer *renderer, SDL_RenderCommand *cmd, SDL_Texture *texture,
|
||||
const float *xy, int xy_stride, const SDL_Color *color, int color_stride, const float *uv, int uv_stride,
|
||||
int num_vertices, const void *indices, int num_indices, int size_indices,
|
||||
float scale_x, float scale_y)
|
||||
static int PS2_QueueGeometry(SDL_Renderer *renderer, SDL_RenderCommand *cmd, SDL_Texture *texture,
|
||||
const float *xy, int xy_stride, const SDL_Color *color, int color_stride, const float *uv, int uv_stride,
|
||||
int num_vertices, const void *indices, int num_indices, int size_indices,
|
||||
float scale_x, float scale_y)
|
||||
{
|
||||
int i;
|
||||
int count = indices ? num_indices : num_vertices;
|
||||
@@ -247,8 +233,8 @@ PS2_QueueGeometry(SDL_Renderer *renderer, SDL_RenderCommand *cmd, SDL_Texture *t
|
||||
size_indices = indices ? size_indices : 0;
|
||||
|
||||
if (texture) {
|
||||
GSPRIMSTQPOINT *vertices = (GSPRIMSTQPOINT *) SDL_AllocateRenderVertices(renderer, count * sizeof (GSPRIMSTQPOINT), 4, &cmd->data.draw.first);
|
||||
|
||||
GSPRIMSTQPOINT *vertices = (GSPRIMSTQPOINT *)SDL_AllocateRenderVertices(renderer, count * sizeof(GSPRIMSTQPOINT), 4, &cmd->data.draw.first);
|
||||
|
||||
if (vertices == NULL) {
|
||||
return -1;
|
||||
}
|
||||
@@ -268,9 +254,9 @@ PS2_QueueGeometry(SDL_Renderer *renderer, SDL_RenderCommand *cmd, SDL_Texture *t
|
||||
j = i;
|
||||
}
|
||||
|
||||
xy_ = (float *)((char*)xy + j * xy_stride);
|
||||
col_ = *(SDL_Color *)((char*)color + j * color_stride);
|
||||
uv_ = (float *)((char*)uv + j * uv_stride);
|
||||
xy_ = (float *)((char *)xy + j * xy_stride);
|
||||
col_ = *(SDL_Color *)((char *)color + j * color_stride);
|
||||
uv_ = (float *)((char *)uv + j * uv_stride);
|
||||
|
||||
vertices->xyz2 = vertex_to_XYZ2(data->gsGlobal, xy_[0] * scale_x, xy_[1] * scale_y, 0);
|
||||
vertices->stq = vertex_to_STQ(uv_[0], uv_[1]);
|
||||
@@ -278,9 +264,9 @@ PS2_QueueGeometry(SDL_Renderer *renderer, SDL_RenderCommand *cmd, SDL_Texture *t
|
||||
|
||||
vertices++;
|
||||
}
|
||||
|
||||
|
||||
} else {
|
||||
GSPRIMPOINT *vertices = (GSPRIMPOINT *) SDL_AllocateRenderVertices(renderer, count * sizeof (GSPRIMPOINT), 4, &cmd->data.draw.first);
|
||||
GSPRIMPOINT *vertices = (GSPRIMPOINT *)SDL_AllocateRenderVertices(renderer, count * sizeof(GSPRIMPOINT), 4, &cmd->data.draw.first);
|
||||
|
||||
if (vertices == NULL) {
|
||||
return -1;
|
||||
@@ -300,8 +286,8 @@ PS2_QueueGeometry(SDL_Renderer *renderer, SDL_RenderCommand *cmd, SDL_Texture *t
|
||||
j = i;
|
||||
}
|
||||
|
||||
xy_ = (float *)((char*)xy + j * xy_stride);
|
||||
col_ = *(SDL_Color *)((char*)color + j * color_stride);
|
||||
xy_ = (float *)((char *)xy + j * xy_stride);
|
||||
col_ = *(SDL_Color *)((char *)color + j * color_stride);
|
||||
|
||||
vertices->xyz2 = vertex_to_XYZ2(data->gsGlobal, xy_[0] * scale_x, xy_[1] * scale_y, 0);
|
||||
vertices->rgbaq = color_to_RGBAQ(col_.r >> 1, col_.g >> 1, col_.b >> 1, col_.a >> 1, 0.0f);
|
||||
@@ -313,8 +299,7 @@ PS2_QueueGeometry(SDL_Renderer *renderer, SDL_RenderCommand *cmd, SDL_Texture *t
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
PS2_RenderSetViewPort(SDL_Renderer *renderer, SDL_RenderCommand *cmd)
|
||||
static int PS2_RenderSetViewPort(SDL_Renderer *renderer, SDL_RenderCommand *cmd)
|
||||
{
|
||||
PS2_RenderData *data = (PS2_RenderData *)renderer->driverdata;
|
||||
const SDL_Rect *viewport = &cmd->data.viewport.rect;
|
||||
@@ -325,8 +310,7 @@ PS2_RenderSetViewPort(SDL_Renderer *renderer, SDL_RenderCommand *cmd)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
PS2_RenderSetClipRect(SDL_Renderer *renderer, SDL_RenderCommand *cmd)
|
||||
static int PS2_RenderSetClipRect(SDL_Renderer *renderer, SDL_RenderCommand *cmd)
|
||||
{
|
||||
PS2_RenderData *data = (PS2_RenderData *)renderer->driverdata;
|
||||
|
||||
@@ -341,14 +325,12 @@ PS2_RenderSetClipRect(SDL_Renderer *renderer, SDL_RenderCommand *cmd)
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
PS2_RenderSetDrawColor(SDL_Renderer *renderer, SDL_RenderCommand *cmd)
|
||||
static int PS2_RenderSetDrawColor(SDL_Renderer *renderer, SDL_RenderCommand *cmd)
|
||||
{
|
||||
int colorR, colorG, colorB, colorA;
|
||||
|
||||
PS2_RenderData *data = (PS2_RenderData *)renderer->driverdata;
|
||||
|
||||
|
||||
colorR = (cmd->data.color.r) >> 1;
|
||||
colorG = (cmd->data.color.g) >> 1;
|
||||
colorB = (cmd->data.color.b) >> 1;
|
||||
@@ -357,60 +339,60 @@ PS2_RenderSetDrawColor(SDL_Renderer *renderer, SDL_RenderCommand *cmd)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
PS2_RenderClear(SDL_Renderer *renderer, SDL_RenderCommand *cmd)
|
||||
static int PS2_RenderClear(SDL_Renderer *renderer, SDL_RenderCommand *cmd)
|
||||
{
|
||||
int colorR, colorG, colorB, colorA;
|
||||
|
||||
PS2_RenderData *data = (PS2_RenderData *)renderer->driverdata;
|
||||
|
||||
|
||||
colorR = (cmd->data.color.r) >> 1;
|
||||
colorG = (cmd->data.color.g) >> 1;
|
||||
colorB = (cmd->data.color.b) >> 1;
|
||||
colorA = (cmd->data.color.a) >> 1;
|
||||
gsKit_clear(data->gsGlobal, GS_SETREG_RGBAQ(colorR, colorG, colorB, colorA, 0x00));
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
PS2_SetBlendMode(PS2_RenderData *data, int blendMode)
|
||||
static void PS2_SetBlendMode(PS2_RenderData *data, int blendMode)
|
||||
{
|
||||
#define A_COLOR_SOURCE 0
|
||||
#define A_COLOR_DEST 1
|
||||
#define A_COLOR_NULL 2
|
||||
#define A_ALPHA_SOURCE 0
|
||||
#define A_ALPHA_DEST 1
|
||||
#define A_ALPHA_FIX 2
|
||||
#define A_COLOR_SOURCE 0
|
||||
#define A_COLOR_DEST 1
|
||||
#define A_COLOR_NULL 2
|
||||
#define A_ALPHA_SOURCE 0
|
||||
#define A_ALPHA_DEST 1
|
||||
#define A_ALPHA_FIX 2
|
||||
|
||||
switch (blendMode)
|
||||
switch (blendMode) {
|
||||
case SDL_BLENDMODE_NONE:
|
||||
{
|
||||
case SDL_BLENDMODE_NONE: {
|
||||
data->gsGlobal->PrimAlphaEnable = GS_SETTING_OFF;
|
||||
break;
|
||||
}
|
||||
case SDL_BLENDMODE_BLEND:{
|
||||
gsKit_set_primalpha(data->gsGlobal, GS_SETREG_ALPHA(A_COLOR_SOURCE, A_COLOR_DEST, A_ALPHA_SOURCE, A_COLOR_DEST, 0), 0);
|
||||
data->gsGlobal->PrimAlphaEnable = GS_SETTING_ON;
|
||||
break;
|
||||
}
|
||||
case SDL_BLENDMODE_ADD: {
|
||||
gsKit_set_primalpha(data->gsGlobal, GS_SETREG_ALPHA(A_COLOR_SOURCE, A_COLOR_NULL, A_ALPHA_FIX, A_COLOR_DEST, 0x80), 0);
|
||||
data->gsGlobal->PrimAlphaEnable = GS_SETTING_ON;
|
||||
break;
|
||||
}
|
||||
case SDL_BLENDMODE_MUL:
|
||||
case SDL_BLENDMODE_MOD: {
|
||||
/* We don't fully support MOD and MUL, however this is the best we can do */
|
||||
gsKit_set_primalpha(data->gsGlobal, GS_SETREG_ALPHA(A_COLOR_DEST, A_COLOR_NULL, A_ALPHA_SOURCE, A_COLOR_SOURCE, 0x80), 0);
|
||||
data->gsGlobal->PrimAlphaEnable = GS_SETTING_ON;
|
||||
break;
|
||||
}
|
||||
data->gsGlobal->PrimAlphaEnable = GS_SETTING_OFF;
|
||||
break;
|
||||
}
|
||||
case SDL_BLENDMODE_BLEND:
|
||||
{
|
||||
gsKit_set_primalpha(data->gsGlobal, GS_SETREG_ALPHA(A_COLOR_SOURCE, A_COLOR_DEST, A_ALPHA_SOURCE, A_COLOR_DEST, 0), 0);
|
||||
data->gsGlobal->PrimAlphaEnable = GS_SETTING_ON;
|
||||
break;
|
||||
}
|
||||
case SDL_BLENDMODE_ADD:
|
||||
{
|
||||
gsKit_set_primalpha(data->gsGlobal, GS_SETREG_ALPHA(A_COLOR_SOURCE, A_COLOR_NULL, A_ALPHA_FIX, A_COLOR_DEST, 0x80), 0);
|
||||
data->gsGlobal->PrimAlphaEnable = GS_SETTING_ON;
|
||||
break;
|
||||
}
|
||||
case SDL_BLENDMODE_MUL:
|
||||
case SDL_BLENDMODE_MOD:
|
||||
{
|
||||
/* We don't fully support MOD and MUL, however this is the best we can do */
|
||||
gsKit_set_primalpha(data->gsGlobal, GS_SETREG_ALPHA(A_COLOR_DEST, A_COLOR_NULL, A_ALPHA_SOURCE, A_COLOR_SOURCE, 0x80), 0);
|
||||
data->gsGlobal->PrimAlphaEnable = GS_SETTING_ON;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
PS2_RenderGeometry(SDL_Renderer *renderer, void *vertices, SDL_RenderCommand *cmd)
|
||||
static int PS2_RenderGeometry(SDL_Renderer *renderer, void *vertices, SDL_RenderCommand *cmd)
|
||||
{
|
||||
PS2_RenderData *data = (PS2_RenderData *)renderer->driverdata;
|
||||
const size_t count = cmd->data.draw.count;
|
||||
@@ -418,26 +400,24 @@ PS2_RenderGeometry(SDL_Renderer *renderer, void *vertices, SDL_RenderCommand *cm
|
||||
PS2_SetBlendMode(data, cmd->data.draw.blend);
|
||||
|
||||
if (cmd->data.draw.texture) {
|
||||
const GSPRIMSTQPOINT *verts = (GSPRIMSTQPOINT *) (vertices + cmd->data.draw.first);
|
||||
GSTEXTURE *ps2_tex = (GSTEXTURE *) cmd->data.draw.texture->driverdata;
|
||||
const GSPRIMSTQPOINT *verts = (GSPRIMSTQPOINT *)(vertices + cmd->data.draw.first);
|
||||
GSTEXTURE *ps2_tex = (GSTEXTURE *)cmd->data.draw.texture->driverdata;
|
||||
|
||||
gsKit_TexManager_bind(data->gsGlobal, ps2_tex);
|
||||
gsKit_prim_list_triangle_goraud_texture_stq_3d(data->gsGlobal, ps2_tex, count, verts);
|
||||
} else {
|
||||
const GSPRIMPOINT *verts = (GSPRIMPOINT *) (vertices + cmd->data.draw.first);
|
||||
const GSPRIMPOINT *verts = (GSPRIMPOINT *)(vertices + cmd->data.draw.first);
|
||||
gsKit_prim_list_triangle_gouraud_3d(data->gsGlobal, count, verts);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
PS2_RenderLines(SDL_Renderer *renderer, void *vertices, SDL_RenderCommand * cmd)
|
||||
int PS2_RenderLines(SDL_Renderer *renderer, void *vertices, SDL_RenderCommand *cmd)
|
||||
{
|
||||
PS2_RenderData *data = (PS2_RenderData *)renderer->driverdata;
|
||||
const size_t count = cmd->data.draw.count;
|
||||
const GSPRIMPOINT *verts = (GSPRIMPOINT *) (vertices + cmd->data.draw.first);
|
||||
const GSPRIMPOINT *verts = (GSPRIMPOINT *)(vertices + cmd->data.draw.first);
|
||||
|
||||
PS2_SetBlendMode(data, cmd->data.draw.blend);
|
||||
gsKit_prim_list_line_goraud_3d(data->gsGlobal, count, verts);
|
||||
@@ -446,12 +426,11 @@ PS2_RenderLines(SDL_Renderer *renderer, void *vertices, SDL_RenderCommand * cmd)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
PS2_RenderPoints(SDL_Renderer *renderer, void *vertices, SDL_RenderCommand * cmd)
|
||||
int PS2_RenderPoints(SDL_Renderer *renderer, void *vertices, SDL_RenderCommand *cmd)
|
||||
{
|
||||
PS2_RenderData *data = (PS2_RenderData *)renderer->driverdata;
|
||||
const size_t count = cmd->data.draw.count;
|
||||
const GSPRIMPOINT *verts = (GSPRIMPOINT *) (vertices + cmd->data.draw.first);
|
||||
const GSPRIMPOINT *verts = (GSPRIMPOINT *)(vertices + cmd->data.draw.first);
|
||||
|
||||
PS2_SetBlendMode(data, cmd->data.draw.blend);
|
||||
gsKit_prim_list_points(data->gsGlobal, count, verts);
|
||||
@@ -460,91 +439,94 @@ PS2_RenderPoints(SDL_Renderer *renderer, void *vertices, SDL_RenderCommand * cmd
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
PS2_RunCommandQueue(SDL_Renderer * renderer, SDL_RenderCommand *cmd, void *vertices, size_t vertsize)
|
||||
static int PS2_RunCommandQueue(SDL_Renderer *renderer, SDL_RenderCommand *cmd, void *vertices, size_t vertsize)
|
||||
{
|
||||
while (cmd) {
|
||||
switch (cmd->command) {
|
||||
case SDL_RENDERCMD_SETVIEWPORT: {
|
||||
PS2_RenderSetViewPort(renderer, cmd);
|
||||
break;
|
||||
}
|
||||
case SDL_RENDERCMD_SETCLIPRECT: {
|
||||
PS2_RenderSetClipRect(renderer, cmd);
|
||||
break;
|
||||
}
|
||||
case SDL_RENDERCMD_SETDRAWCOLOR: {
|
||||
PS2_RenderSetDrawColor(renderer, cmd);
|
||||
break;
|
||||
}
|
||||
case SDL_RENDERCMD_CLEAR: {
|
||||
PS2_RenderClear(renderer, cmd);
|
||||
break;
|
||||
}
|
||||
case SDL_RENDERCMD_DRAW_POINTS: {
|
||||
PS2_RenderPoints(renderer, vertices, cmd);
|
||||
break;
|
||||
}
|
||||
case SDL_RENDERCMD_DRAW_LINES: {
|
||||
PS2_RenderLines(renderer, vertices, cmd);
|
||||
break;
|
||||
}
|
||||
case SDL_RENDERCMD_FILL_RECTS: /* unused */
|
||||
break;
|
||||
case SDL_RENDERCMD_COPY: /* unused */
|
||||
break;
|
||||
case SDL_RENDERCMD_COPY_EX: /* unused */
|
||||
break;
|
||||
case SDL_RENDERCMD_GEOMETRY: {
|
||||
PS2_RenderGeometry(renderer, vertices, cmd);
|
||||
break;
|
||||
}
|
||||
case SDL_RENDERCMD_NO_OP:
|
||||
break;
|
||||
case SDL_RENDERCMD_SETVIEWPORT:
|
||||
{
|
||||
PS2_RenderSetViewPort(renderer, cmd);
|
||||
break;
|
||||
}
|
||||
case SDL_RENDERCMD_SETCLIPRECT:
|
||||
{
|
||||
PS2_RenderSetClipRect(renderer, cmd);
|
||||
break;
|
||||
}
|
||||
case SDL_RENDERCMD_SETDRAWCOLOR:
|
||||
{
|
||||
PS2_RenderSetDrawColor(renderer, cmd);
|
||||
break;
|
||||
}
|
||||
case SDL_RENDERCMD_CLEAR:
|
||||
{
|
||||
PS2_RenderClear(renderer, cmd);
|
||||
break;
|
||||
}
|
||||
case SDL_RENDERCMD_DRAW_POINTS:
|
||||
{
|
||||
PS2_RenderPoints(renderer, vertices, cmd);
|
||||
break;
|
||||
}
|
||||
case SDL_RENDERCMD_DRAW_LINES:
|
||||
{
|
||||
PS2_RenderLines(renderer, vertices, cmd);
|
||||
break;
|
||||
}
|
||||
case SDL_RENDERCMD_FILL_RECTS: /* unused */
|
||||
break;
|
||||
case SDL_RENDERCMD_COPY: /* unused */
|
||||
break;
|
||||
case SDL_RENDERCMD_COPY_EX: /* unused */
|
||||
break;
|
||||
case SDL_RENDERCMD_GEOMETRY:
|
||||
{
|
||||
PS2_RenderGeometry(renderer, vertices, cmd);
|
||||
break;
|
||||
}
|
||||
case SDL_RENDERCMD_NO_OP:
|
||||
break;
|
||||
}
|
||||
cmd = cmd->next;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
PS2_RenderReadPixels(SDL_Renderer * renderer, const SDL_Rect * rect,
|
||||
Uint32 format, void * pixels, int pitch)
|
||||
static int PS2_RenderReadPixels(SDL_Renderer *renderer, const SDL_Rect *rect,
|
||||
Uint32 format, void *pixels, int pitch)
|
||||
{
|
||||
return SDL_Unsupported();
|
||||
}
|
||||
|
||||
static int
|
||||
PS2_RenderPresent(SDL_Renderer * renderer)
|
||||
static int PS2_RenderPresent(SDL_Renderer *renderer)
|
||||
{
|
||||
PS2_RenderData *data = (PS2_RenderData *) renderer->driverdata;
|
||||
PS2_RenderData *data = (PS2_RenderData *)renderer->driverdata;
|
||||
|
||||
if (data->gsGlobal->DoubleBuffering == GS_SETTING_OFF) {
|
||||
if (data->vsync == 2) { // Dynamic
|
||||
if (data->vsync == 2) { // Dynamic
|
||||
gsKit_sync(data->gsGlobal);
|
||||
} else if (data->vsync == 1) {
|
||||
gsKit_vsync_wait();
|
||||
}
|
||||
gsKit_queue_exec(data->gsGlobal);
|
||||
gsKit_queue_exec(data->gsGlobal);
|
||||
} else {
|
||||
gsKit_queue_exec(data->gsGlobal);
|
||||
gsKit_finish();
|
||||
if (data->vsync == 2) { // Dynamic
|
||||
gsKit_queue_exec(data->gsGlobal);
|
||||
gsKit_finish();
|
||||
if (data->vsync == 2) { // Dynamic
|
||||
gsKit_sync(data->gsGlobal);
|
||||
} else if (data->vsync == 1) {
|
||||
gsKit_vsync_wait();
|
||||
}
|
||||
gsKit_flip(data->gsGlobal);
|
||||
}
|
||||
gsKit_TexManager_nextFrame(data->gsGlobal);
|
||||
gsKit_flip(data->gsGlobal);
|
||||
}
|
||||
gsKit_TexManager_nextFrame(data->gsGlobal);
|
||||
gsKit_clear(data->gsGlobal, GS_BLACK);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
PS2_DestroyTexture(SDL_Renderer * renderer, SDL_Texture * texture)
|
||||
static void PS2_DestroyTexture(SDL_Renderer *renderer, SDL_Texture *texture)
|
||||
{
|
||||
GSTEXTURE *ps2_texture = (GSTEXTURE *) texture->driverdata;
|
||||
GSTEXTURE *ps2_texture = (GSTEXTURE *)texture->driverdata;
|
||||
PS2_RenderData *data = (PS2_RenderData *)renderer->driverdata;
|
||||
|
||||
if (data == NULL) {
|
||||
@@ -557,14 +539,13 @@ PS2_DestroyTexture(SDL_Renderer * renderer, SDL_Texture * texture)
|
||||
|
||||
// Free from vram
|
||||
gsKit_TexManager_free(data->gsGlobal, ps2_texture);
|
||||
|
||||
|
||||
SDL_free(ps2_texture->Mem);
|
||||
SDL_free(ps2_texture);
|
||||
texture->driverdata = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
PS2_DestroyRenderer(SDL_Renderer * renderer)
|
||||
static void PS2_DestroyRenderer(SDL_Renderer *renderer)
|
||||
{
|
||||
PS2_RenderData *data = (PS2_RenderData *)renderer->driverdata;
|
||||
|
||||
@@ -584,8 +565,7 @@ PS2_DestroyRenderer(SDL_Renderer * renderer)
|
||||
SDL_free(renderer);
|
||||
}
|
||||
|
||||
static int
|
||||
PS2_SetVSync(SDL_Renderer * renderer, const int vsync)
|
||||
static int PS2_SetVSync(SDL_Renderer *renderer, const int vsync)
|
||||
{
|
||||
PS2_RenderData *data = (PS2_RenderData *)renderer->driverdata;
|
||||
SDL_bool dynamicVsync = SDL_GetHintBoolean(SDL_HINT_PS2_DYNAMIC_VSYNC, SDL_FALSE);
|
||||
@@ -593,8 +573,7 @@ PS2_SetVSync(SDL_Renderer * renderer, const int vsync)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static SDL_Renderer *
|
||||
PS2_CreateRenderer(SDL_Window * window, Uint32 flags)
|
||||
static SDL_Renderer *PS2_CreateRenderer(SDL_Window *window, Uint32 flags)
|
||||
{
|
||||
SDL_Renderer *renderer;
|
||||
PS2_RenderData *data;
|
||||
@@ -602,13 +581,13 @@ PS2_CreateRenderer(SDL_Window * window, Uint32 flags)
|
||||
ee_sema_t sema;
|
||||
SDL_bool dynamicVsync;
|
||||
|
||||
renderer = (SDL_Renderer *) SDL_calloc(1, sizeof(*renderer));
|
||||
renderer = (SDL_Renderer *)SDL_calloc(1, sizeof(*renderer));
|
||||
if (renderer == NULL) {
|
||||
SDL_OutOfMemory();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
data = (PS2_RenderData *) SDL_calloc(1, sizeof(*data));
|
||||
data = (PS2_RenderData *)SDL_calloc(1, sizeof(*data));
|
||||
if (data == NULL) {
|
||||
PS2_DestroyRenderer(renderer);
|
||||
SDL_OutOfMemory();
|
||||
@@ -620,35 +599,35 @@ PS2_CreateRenderer(SDL_Window * window, Uint32 flags)
|
||||
sema.max_count = 1;
|
||||
sema.option = 0;
|
||||
vsync_sema_id = CreateSema(&sema);
|
||||
|
||||
|
||||
gsGlobal = gsKit_init_global_custom(RENDER_QUEUE_OS_POOLSIZE, RENDER_QUEUE_PER_POOLSIZE);
|
||||
|
||||
gsGlobal->Mode = GS_MODE_NTSC;
|
||||
gsGlobal->Mode = GS_MODE_NTSC;
|
||||
gsGlobal->Height = 448;
|
||||
|
||||
gsGlobal->PSM = GS_PSM_CT24;
|
||||
gsGlobal->PSMZ = GS_PSMZ_16S;
|
||||
gsGlobal->ZBuffering = GS_SETTING_OFF;
|
||||
gsGlobal->DoubleBuffering = GS_SETTING_ON;
|
||||
gsGlobal->PrimAlphaEnable = GS_SETTING_ON;
|
||||
gsGlobal->Dithering = GS_SETTING_OFF;
|
||||
gsGlobal->PSM = GS_PSM_CT24;
|
||||
gsGlobal->PSMZ = GS_PSMZ_16S;
|
||||
gsGlobal->ZBuffering = GS_SETTING_OFF;
|
||||
gsGlobal->DoubleBuffering = GS_SETTING_ON;
|
||||
gsGlobal->PrimAlphaEnable = GS_SETTING_ON;
|
||||
gsGlobal->Dithering = GS_SETTING_OFF;
|
||||
|
||||
gsKit_set_primalpha(gsGlobal, GS_SETREG_ALPHA(0, 1, 0, 1, 0), 0);
|
||||
gsKit_set_primalpha(gsGlobal, GS_SETREG_ALPHA(0, 1, 0, 1, 0), 0);
|
||||
|
||||
dmaKit_init(D_CTRL_RELE_OFF, D_CTRL_MFD_OFF, D_CTRL_STS_UNSPEC, D_CTRL_STD_OFF, D_CTRL_RCYC_8, 1 << DMA_CHANNEL_GIF);
|
||||
dmaKit_chan_init(DMA_CHANNEL_GIF);
|
||||
dmaKit_init(D_CTRL_RELE_OFF, D_CTRL_MFD_OFF, D_CTRL_STS_UNSPEC, D_CTRL_STD_OFF, D_CTRL_RCYC_8, 1 << DMA_CHANNEL_GIF);
|
||||
dmaKit_chan_init(DMA_CHANNEL_GIF);
|
||||
|
||||
gsKit_set_clamp(gsGlobal, GS_CMODE_REPEAT);
|
||||
gsKit_set_clamp(gsGlobal, GS_CMODE_REPEAT);
|
||||
|
||||
gsKit_vram_clear(gsGlobal);
|
||||
gsKit_vram_clear(gsGlobal);
|
||||
|
||||
gsKit_init_screen(gsGlobal);
|
||||
gsKit_init_screen(gsGlobal);
|
||||
|
||||
gsKit_TexManager_init(gsGlobal);
|
||||
gsKit_TexManager_init(gsGlobal);
|
||||
|
||||
data->vsync_callback_id = gsKit_add_vsync_handler(vsync_handler);
|
||||
data->vsync_callback_id = gsKit_add_vsync_handler(vsync_handler);
|
||||
|
||||
gsKit_mode_switch(gsGlobal, GS_ONESHOT);
|
||||
gsKit_mode_switch(gsGlobal, GS_ONESHOT);
|
||||
|
||||
gsKit_clear(gsGlobal, GS_BLACK);
|
||||
|
||||
@@ -687,7 +666,7 @@ SDL_RenderDriver PS2_RenderDriver = {
|
||||
.name = "PS2 gsKit",
|
||||
.flags = SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_TARGETTEXTURE,
|
||||
.num_texture_formats = 2,
|
||||
.texture_formats = {
|
||||
.texture_formats = {
|
||||
[0] = SDL_PIXELFORMAT_ABGR1555,
|
||||
[1] = SDL_PIXELFORMAT_ABGR8888,
|
||||
},
|
||||
|
Reference in New Issue
Block a user