From a5dfd2ef8b4fa14724f6879873a7748e9193f6f8 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Thu, 16 May 2024 21:28:10 +1000 Subject: [PATCH] All graphics backends can now see if in 2D mode or not --- misc/dreamcast/Makefile | 2 +- src/Graphics_PS1.c | 9 ++++----- src/Graphics_Saturn.c | 35 +++++++++++++++++++++++++++++++---- src/_GraphicsBase.h | 5 +++++ 4 files changed, 41 insertions(+), 10 deletions(-) diff --git a/misc/dreamcast/Makefile b/misc/dreamcast/Makefile index 3d23e2600..4fe05ff29 100644 --- a/misc/dreamcast/Makefile +++ b/misc/dreamcast/Makefile @@ -11,7 +11,7 @@ LDFLAGS=-g LIBS=-lm $(GLDC_LIB) -lppp -lkosfat TARGET := ClassiCube-dc -CC_TEXTURES = classicube.zip +CC_TEXTURES = misc/dreamcast/classicube.zip ifeq ($(strip $(KOS_BASE)),) $(error "Please set KOS variables in your environment.") diff --git a/src/Graphics_PS1.c b/src/Graphics_PS1.c index 14ffbfacc..5355b5836 100644 --- a/src/Graphics_PS1.c +++ b/src/Graphics_PS1.c @@ -36,7 +36,6 @@ static RenderBuffer buffers[2]; static cc_uint8* next_packet; static int active_buffer; static RenderBuffer* buffer; -static cc_bool rendering2D; static void* lastPoly; static cc_bool cullingEnabled; @@ -805,9 +804,9 @@ static void DrawTexturedQuads3D(int verticesCount, int startVertex) { }*/ static void DrawQuads(int verticesCount, int startVertex) { - if (rendering2D && gfx_format == VERTEX_FORMAT_TEXTURED) { + if (gfx_rendering2D && gfx_format == VERTEX_FORMAT_TEXTURED) { DrawTexturedQuads2D(verticesCount, startVertex); - } else if (rendering2D) { + } else if (gfx_rendering2D) { DrawColouredQuads2D(verticesCount, startVertex); } else if (gfx_format == VERTEX_FORMAT_TEXTURED) { DrawTexturedQuads3D(verticesCount, startVertex); @@ -869,12 +868,12 @@ void Gfx_GetApiInfo(cc_string* info) { cc_bool Gfx_TryRestoreContext(void) { return true; } void Gfx_Begin2D(int width, int height) { - rendering2D = true; + gfx_rendering2D = true; Gfx_SetAlphaBlending(true); } void Gfx_End2D(void) { - rendering2D = false; + gfx_rendering2D = false; Gfx_SetAlphaBlending(false); } #endif diff --git a/src/Graphics_Saturn.c b/src/Graphics_Saturn.c index 96670d2b2..61d65fe42 100644 --- a/src/Graphics_Saturn.c +++ b/src/Graphics_Saturn.c @@ -99,6 +99,8 @@ void Gfx_Create(void) { _primitive_init(); } + Gfx.MinTexWidth = 8; + Gfx.MinTexHeight = 8; Gfx.MaxTexWidth = 128; Gfx.MaxTexHeight = 128; Gfx.Created = true; @@ -314,7 +316,32 @@ static void Transform(Vec3* result, struct VertexTextured* a, const struct Matri #define IsPointCulled(vec) vec.x < -10000 || vec.x > 10000 || vec.y < -10000 || vec.y > 10000 || vec.z < 0 || vec.z > 1024 -static void DrawTexturedQuads(int verticesCount, int startVertex) { +static void DrawTexturedQuads2D(int verticesCount, int startVertex) { + for (int i = 0; i < verticesCount; i += 4) + { + struct VertexTextured* v = (struct VertexTextured*)gfx_vertices + startVertex + i; + + int16_vec2_t points[4]; + points[0].x = v[0].X; points[0].y = v[0].Y; + points[1].x = v[1].X; points[1].y = v[1].Y; + points[2].x = v[2].X; points[2].y = v[2].Y; + points[3].x = v[3].X; points[3].y = v[3].Y; + + int R = PackedCol_R(v->Col); + int G = PackedCol_G(v->Col); + int B = PackedCol_B(v->Col); + + vdp1_cmdt_t* cmd; + + cmd = NextPrimitive(); + vdp1_cmdt_polygon_set(cmd); + vdp1_cmdt_color_set(cmd, RGB1555(1, R >> 3, G >> 3, B >> 3)); + vdp1_cmdt_draw_mode_set(cmd, _primitive_draw_mode); + vdp1_cmdt_vtx_set(cmd, points); + } +} + +static void DrawTexturedQuads3D(int verticesCount, int startVertex) { for (int i = 0; i < verticesCount; i += 4) { struct VertexTextured* v = (struct VertexTextured*)gfx_vertices + startVertex + i; @@ -352,18 +379,18 @@ static void DrawTexturedQuads(int verticesCount, int startVertex) { void Gfx_DrawVb_IndexedTris_Range(int verticesCount, int startVertex) { if (gfx_format == VERTEX_FORMAT_TEXTURED) { - DrawTexturedQuads(verticesCount, startVertex); + DrawTexturedQuads3D(verticesCount, startVertex); } } void Gfx_DrawVb_IndexedTris(int verticesCount) { if (gfx_format == VERTEX_FORMAT_TEXTURED) { - DrawTexturedQuads(verticesCount, 0); + DrawTexturedQuads3D(verticesCount, 0); } } void Gfx_DrawIndexedTris_T2fC4b(int verticesCount, int startVertex) { - DrawTexturedQuads(verticesCount, startVertex); + DrawTexturedQuads3D(verticesCount, startVertex); } diff --git a/src/_GraphicsBase.h b/src/_GraphicsBase.h index b1e9a7e1c..ca1bc9bec 100644 --- a/src/_GraphicsBase.h +++ b/src/_GraphicsBase.h @@ -24,6 +24,7 @@ static int gfx_stride, gfx_format = -1; static cc_bool gfx_vsync, gfx_fogEnabled; static float gfx_minFrameMs; +static cc_bool gfx_rendering2D; /*########################################################################################################################* @@ -284,14 +285,18 @@ void Gfx_Begin2D(int width, int height) { Gfx_SetDepthTest(false); Gfx_SetAlphaBlending(true); + gfx_hadFog = Gfx_GetFog(); if (gfx_hadFog) Gfx_SetFog(false); + gfx_rendering2D = true; } void Gfx_End2D(void) { Gfx_SetDepthTest(true); Gfx_SetAlphaBlending(false); + if (gfx_hadFog) Gfx_SetFog(true); + gfx_rendering2D = false; } #endif