Dreamcast: Simplify a bit more

This commit is contained in:
UnknownShadow200 2024-06-25 18:13:20 +10:00
parent 8a01581945
commit 4c2a077751
7 changed files with 80 additions and 104 deletions

3
.gitignore vendored
View File

@ -126,6 +126,9 @@ dlldata.c
# Mac classic
retro68scripts/
# PS2
openvcl/
*_i.c
*_p.c
*_i.h

View File

@ -37,15 +37,15 @@ static void InitGLState(void) {
pvr_set_zclip(0.0f);
PVR_SET(PT_ALPHA_REF, 127); // define missing from KOS
ALPHA_TEST_ENABLED = GL_FALSE;
CULLING_ENABLED = GL_FALSE;
BLEND_ENABLED = GL_FALSE;
DEPTH_TEST_ENABLED = GL_FALSE;
DEPTH_MASK_ENABLED = GL_TRUE;
TEXTURES_ENABLED = GL_FALSE;
FOG_ENABLED = GL_FALSE;
ALPHA_TEST_ENABLED = false;
CULLING_ENABLED = false;
BLEND_ENABLED = false;
DEPTH_TEST_ENABLED = false;
DEPTH_MASK_ENABLED = true;
TEXTURES_ENABLED = false;
FOG_ENABLED = false;
STATE_DIRTY = GL_TRUE;
STATE_DIRTY = true;
}
void Gfx_Create(void) {
@ -80,12 +80,12 @@ static PackedCol gfx_clearColor;
void Gfx_SetFaceCulling(cc_bool enabled) {
CULLING_ENABLED = enabled;
STATE_DIRTY = GL_TRUE;
STATE_DIRTY = true;
}
static void SetAlphaBlend(cc_bool enabled) {
BLEND_ENABLED = enabled;
STATE_DIRTY = GL_TRUE;
STATE_DIRTY = true;
}
void Gfx_SetAlphaArgBlend(cc_bool enabled) { }
@ -107,19 +107,19 @@ void Gfx_SetDepthWrite(cc_bool enabled) {
if (DEPTH_MASK_ENABLED == enabled) return;
DEPTH_MASK_ENABLED = enabled;
STATE_DIRTY = GL_TRUE;
STATE_DIRTY = true;
}
void Gfx_SetDepthTest(cc_bool enabled) {
if (DEPTH_TEST_ENABLED == enabled) return;
DEPTH_TEST_ENABLED = enabled;
STATE_DIRTY = GL_TRUE;
STATE_DIRTY = true;
}
static void SetAlphaTest(cc_bool enabled) {
ALPHA_TEST_ENABLED = enabled;
STATE_DIRTY = GL_TRUE;
STATE_DIRTY = true;
}
void Gfx_DepthOnlyRendering(cc_bool depthOnly) {
@ -228,6 +228,7 @@ void Gfx_DeleteDynamicVb(GfxResourceID* vb) { Gfx_DeleteVb(vb); }
*#########################################################################################################################*/
void Gfx_BindTexture(GfxResourceID texId) {
gldcBindTexture((GLuint)texId);
STATE_DIRTY = true;
}
void Gfx_DeleteTexture(GfxResourceID* texId) {
@ -395,7 +396,7 @@ void Gfx_SetFog(cc_bool enabled) {
if (FOG_ENABLED == enabled) return;
FOG_ENABLED = enabled;
STATE_DIRTY = GL_TRUE;
STATE_DIRTY = true;
}
void Gfx_SetFogCol(PackedCol color) {
@ -521,7 +522,7 @@ void DrawQuads(int count, void* src) {
if (header_required) {
apply_poly_header((pvr_poly_hdr_t*)beg, output->list_type);
STATE_DIRTY = GL_FALSE;
STATE_DIRTY = false;
beg++;
vec->size += 1;
}
@ -541,7 +542,7 @@ void Gfx_SetVertexFormat(VertexFormat fmt) {
gfx_stride = strideSizes[fmt];
TEXTURES_ENABLED = fmt == VERTEX_FORMAT_TEXTURED;
STATE_DIRTY = GL_TRUE;
STATE_DIRTY = true;
}
void Gfx_DrawVb_Lines(int verticesCount) {
@ -620,19 +621,40 @@ extern float VP_COL_HHEIGHT, VP_TEX_HHEIGHT;
extern float VP_COL_X_PLUS_HWIDTH, VP_TEX_X_PLUS_HWIDTH;
extern float VP_COL_Y_PLUS_HHEIGHT, VP_TEX_Y_PLUS_HHEIGHT;
void Gfx_SetViewport(int x, int y, int w, int h) {
glViewport(x, y, w, h);
static void PushCommand(void* cmd) {
aligned_vector_push_back(&OP_LIST.vector, cmd, 1);
aligned_vector_push_back(&PT_LIST.vector, cmd, 1);
aligned_vector_push_back(&TR_LIST.vector, cmd, 1);
}
void Gfx_SetViewport(int x, int y, int w, int h) {
VP_COL_HWIDTH = VP_TEX_HWIDTH = w * 0.5f;
VP_COL_HHEIGHT = VP_TEX_HHEIGHT = h * -0.5f;
VP_COL_X_PLUS_HWIDTH = VP_TEX_X_PLUS_HWIDTH = x + w * 0.5f;
VP_COL_Y_PLUS_HHEIGHT = VP_TEX_Y_PLUS_HHEIGHT = y + h * 0.5f;
Vertex c;
c.flags = PVR_CMD_USERCLIP | 0x23;
c.x = w * 0.5f; // hwidth
c.y = h * -0.5f; // hheight
c.z = x + w * 0.5f; // x_plus_hwidth
c.w = y + h * 0.5f; // y_plus_hheight
PushCommand(&c);
}
void Gfx_SetScissor(int x, int y, int w, int h) {
SCISSOR_TEST_ENABLED = x != 0 || y != 0 || w != Game.Width || h != Game.Height;
STATE_DIRTY = GL_TRUE;
glScissor(x, y, w, h);
STATE_DIRTY = true;
pvr_poly_hdr_t c;
c.cmd = PVR_CMD_USERCLIP;
c.mode1 = c.mode2 = c.mode3 = 0;
c.d1 = x >> 5;
c.d2 = y >> 5;
c.d3 = ((x + w) >> 5) - 1;
c.d4 = ((y + h) >> 5) - 1;
PushCommand(&c);
}
#endif

View File

@ -157,13 +157,18 @@ static void Menu_CycleSelected(struct Screen* s, int dir) {
}
}
static void Menu_ClickSelected(struct Screen* s) {
static void Menu_InputSelected(struct Screen* s, int key) {
struct Widget* w;
if (s->selectedI < 0) return;
w = s->widgets[s->selectedI];
w = s->widgets[s->selectedI];
if (!Menu_IsSelectable(w)) return;
if (w->MenuClick) w->MenuClick(s, w);
if (w->MenuClick && Input_IsEnterButton(key)) {
w->MenuClick(s, w);
} else {
Elem_HandlesKeyDown(w, key);
}
}
int Menu_InputDown(void* screen, int key) {
@ -173,8 +178,8 @@ int Menu_InputDown(void* screen, int key) {
Menu_CycleSelected(s, -1);
} else if (Input_IsDownButton(key)) {
Menu_CycleSelected(s, +1);
} else if (Input_IsEnterButton(key)) {
Menu_ClickSelected(s);
} else {
Menu_InputSelected(s, key);
}
return Screen_InputDown(screen, key);
}
@ -1116,20 +1121,6 @@ static struct TextInputWidget* GenLevelScreen_SelectedInput(struct GenLevelScree
return NULL;
}
static int GenLevelScreen_KeyDown(void* screen, int key) {
struct GenLevelScreen* s = (struct GenLevelScreen*)screen;
struct TextInputWidget* selected = GenLevelScreen_SelectedInput(s);
struct MenuInputDesc* desc;
if (selected) {
if (Elem_HandlesKeyDown(&selected->base, key)) return true;
desc = &selected->desc;
if (desc->VTABLE->ProcessInput(desc, &selected->base.text, key)) return true;
}
return Menu_InputDown(s, key);
}
static int GenLevelScreen_KeyPress(void* screen, char keyChar) {
struct GenLevelScreen* s = (struct GenLevelScreen*)screen;
struct TextInputWidget* selected = GenLevelScreen_SelectedInput(s);
@ -1236,7 +1227,7 @@ static void GenLevelScreen_Init(void* screen) {
static const struct ScreenVTABLE GenLevelScreen_VTABLE = {
GenLevelScreen_Init, GenLevelScreen_Update, Menu_CloseKeyboard,
MenuScreen_Render2, Screen_BuildMesh,
GenLevelScreen_KeyDown, Screen_InputUp, GenLevelScreen_KeyPress, GenLevelScreen_TextChanged,
Menu_InputDown, Screen_InputUp, GenLevelScreen_KeyPress, GenLevelScreen_TextChanged,
GenLevelScreen_PointerDown, Screen_PointerUp, Menu_PointerMove, Screen_TMouseScroll,
GenLevelScreen_Layout, GenLevelScreen_ContextLost, GenLevelScreen_ContextRecreated
};
@ -1462,10 +1453,7 @@ static int SaveLevelScreen_TextChanged(void* screen, const cc_string* str) {
static int SaveLevelScreen_KeyDown(void* screen, int key) {
struct SaveLevelScreen* s = (struct SaveLevelScreen*)screen;
if (Elem_HandlesKeyDown(&s->input.base, key)) {
SaveLevelScreen_RemoveOverwrites(s);
return true;
}
SaveLevelScreen_RemoveOverwrites(s);
return Menu_InputDown(s, key);
}
@ -1495,6 +1483,8 @@ static void SaveLevelScreen_ContextRecreated(void* screen) {
static void SaveLevelScreen_Update(void* screen, float delta) {
struct SaveLevelScreen* s = (struct SaveLevelScreen*)screen;
if (!s->input.base.active) return;
s->input.base.caretAccumulator += delta;
}
@ -1521,7 +1511,9 @@ static void SaveLevelScreen_Init(void* screen) {
ButtonWidget_Add(s, &s->file, 400, SaveLevelScreen_File);
ButtonWidget_Add(s, &s->cancel, 400, Menu_SwitchPause);
TextInputWidget_Add(s, &s->input, 400, &World.Name, &desc);
TextInputWidget_Add(s, &s->input, 400, &World.Name, &desc);
Menu_SelectWidget((struct Screen*)s, 3); /* s->input */
TextWidget_Add(s, &s->desc);
s->input.onscreenPlaceholder = "Map name";
@ -2285,7 +2277,6 @@ static int MenuInputOverlay_TextChanged(void* screen, const cc_string* str) {
static int MenuInputOverlay_KeyDown(void* screen, int key) {
struct MenuInputOverlay* s = (struct MenuInputOverlay*)screen;
if (Elem_HandlesKeyDown(&s->input.base, key)) return true;
if (Input_IsEnterButton(key)) {
MenuInputOverlay_EnterInput(s); return true;
@ -2326,6 +2317,7 @@ static void MenuInputOverlay_Init(void* screen) {
ButtonWidget_Add(s, &s->ok, Input_TouchMode ? 200 : 40, MenuInputOverlay_OK);
ButtonWidget_Add(s, &s->Default, 200, MenuInputOverlay_Default);
TextInputWidget_Add(s, &s->input, 400, &s->value, s->desc);
Menu_SelectWidget((struct Screen*)s, 2); /* s->input */
if (s->desc->VTABLE == &IntInput_VTABLE) {
s->input.onscreenType = KEYBOARD_TYPE_INTEGER;

View File

@ -1686,12 +1686,15 @@ void TextInputWidget_OpenKeyboard(struct TextInputWidget* w) {
}
static int TextInputWidget_KeyDown(void* widget, int key) {
struct InputWidget* w = (struct InputWidget*)widget;
struct TextInputWidget* w = (struct TextInputWidget*)widget;
struct MenuInputDesc* desc = &w->desc;
if (Window_Main.SoftKeyboard && !DisplayInfo.ShowingSoftKeyboard && Input_IsEnterButton(key)) {
TextInputWidget_OpenKeyboard(widget); return true;
TextInputWidget_OpenKeyboard(w); return true;
}
return InputWidget_KeyDown(w, key);
if (InputWidget_KeyDown(&w->base, key)) return true;
return desc->VTABLE->ProcessInput(desc, &w->base.text, key);
}
static int TextInputWidget_PointerDown(void* widget, int id, int x, int y) {

View File

@ -16,9 +16,6 @@
#define GLubyte unsigned char
#define GLboolean unsigned char
#define GL_FALSE 0
#define GL_TRUE 1
GLuint gldcGenTexture(void);
void gldcDeleteTexture(GLuint texture);
@ -28,9 +25,6 @@ void gldcBindTexture(GLuint texture);
int gldcAllocTexture(int w, int h, int format);
void gldcGetTexture(void** data, int* width, int* height);
void glScissor( int x, int y, int width, int height);
void glViewport(int x, int y, int width, int height);
void glKosInit();
void glKosSwapBuffers();

View File

@ -5,25 +5,23 @@
#include <dc/pvr.h>
#include "gldc.h"
#define CLAMP( X, MAX ) ( (X) < 0 ? 0 : ((X)>(_MAX) ? (_MAX) : (X)) )
GLboolean STATE_DIRTY;
GLboolean STATE_DIRTY = GL_TRUE;
GLboolean DEPTH_TEST_ENABLED;
GLboolean DEPTH_MASK_ENABLED;
GLboolean DEPTH_TEST_ENABLED = GL_FALSE;
GLboolean DEPTH_MASK_ENABLED = GL_FALSE;
GLboolean CULLING_ENABLED;
GLboolean CULLING_ENABLED = GL_FALSE;
GLboolean FOG_ENABLED;
GLboolean ALPHA_TEST_ENABLED;
GLboolean FOG_ENABLED = GL_FALSE;
GLboolean ALPHA_TEST_ENABLED = GL_FALSE;
GLboolean SCISSOR_TEST_ENABLED = GL_FALSE;
GLboolean SCISSOR_TEST_ENABLED;
GLenum SHADE_MODEL = PVR_SHADE_GOURAUD;
GLboolean BLEND_ENABLED = GL_FALSE;
GLboolean BLEND_ENABLED;
GLboolean TEXTURES_ENABLED = GL_FALSE;
GLboolean AUTOSORT_ENABLED = GL_FALSE;
GLboolean TEXTURES_ENABLED;
GLboolean AUTOSORT_ENABLED;
PolyList OP_LIST;
PolyList PT_LIST;
@ -67,40 +65,6 @@ void glKosSwapBuffers() {
pvr_scene_finish();
}
void glScissor(int x, int y, int width, int height) {
pvr_poly_hdr_t c;
int sx = x, ex = x + width;
int sy = y, ey = y + height;
c.cmd = PVR_CMD_USERCLIP;
c.mode1 = c.mode2 = c.mode3 = 0;
int vw = vid_mode->width >> 5;
int vh = vid_mode->height >> 5;
c.d1 = CLAMP(sx >> 5, vw);
c.d2 = CLAMP(sy >> 5, vh);
c.d3 = CLAMP((ex >> 5) - 1, vw);
c.d4 = CLAMP((ey >> 5) - 1, vh);
aligned_vector_push_back(&OP_LIST.vector, &c, 1);
aligned_vector_push_back(&PT_LIST.vector, &c, 1);
aligned_vector_push_back(&TR_LIST.vector, &c, 1);
}
void glViewport(int x, int y, int w, int h) {
Vertex c;
c.flags = PVR_CMD_USERCLIP | 0x23;
c.x = w * 0.5f; // hwidth
c.y = h * -0.5f; // hheight
c.z = x + w * 0.5f; // x_plus_hwidth
c.w = y + h * 0.5f; // y_plus_hheight
aligned_vector_push_back(&OP_LIST.vector, &c, 1);
aligned_vector_push_back(&PT_LIST.vector, &c, 1);
aligned_vector_push_back(&TR_LIST.vector, &c, 1);
}
void apply_poly_header(pvr_poly_hdr_t* dst, int list_type) {
TextureObject* tx1 = TEXTURE_ACTIVE;
@ -175,7 +139,7 @@ void apply_poly_header(pvr_poly_hdr_t* dst, int list_type) {
dst->mode2 |= (DimensionFlag(tx1->width) << PVR_TA_PM2_USIZE_SHIFT) & PVR_TA_PM2_USIZE_MASK;
dst->mode2 |= (DimensionFlag(tx1->height) << PVR_TA_PM2_VSIZE_SHIFT) & PVR_TA_PM2_VSIZE_MASK;
dst->mode3 = (GL_FALSE << PVR_TA_PM3_MIPMAP_SHIFT) & PVR_TA_PM3_MIPMAP_MASK;
dst->mode3 = (0 << PVR_TA_PM3_MIPMAP_SHIFT) & PVR_TA_PM3_MIPMAP_MASK;
dst->mode3 |= (tx1->color << PVR_TA_PM3_TXRFMT_SHIFT) & PVR_TA_PM3_TXRFMT_MASK;
dst->mode3 |= ((uint32_t)tx1->data & 0x00fffff8) >> 3;
}

View File

@ -158,8 +158,6 @@ void gldcBindTexture(GLuint id) {
TEXTURE_ACTIVE = txr;
gl_assert(TEXTURE_ACTIVE->index == id);
STATE_DIRTY = GL_TRUE;
}
int gldcAllocTexture(int w, int h, int format) {