mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-08 14:56:12 -04:00
Dreamcast: Simplify a bit more
This commit is contained in:
parent
8a01581945
commit
4c2a077751
3
.gitignore
vendored
3
.gitignore
vendored
@ -126,6 +126,9 @@ dlldata.c
|
||||
# Mac classic
|
||||
retro68scripts/
|
||||
|
||||
# PS2
|
||||
openvcl/
|
||||
|
||||
*_i.c
|
||||
*_p.c
|
||||
*_i.h
|
||||
|
@ -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
|
||||
|
44
src/Menus.c
44
src/Menus.c
@ -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;
|
||||
|
@ -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) {
|
||||
|
6
third_party/gldc/src/gldc.h
vendored
6
third_party/gldc/src/gldc.h
vendored
@ -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();
|
||||
|
||||
|
58
third_party/gldc/src/state.c
vendored
58
third_party/gldc/src/state.c
vendored
@ -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;
|
||||
}
|
||||
|
2
third_party/gldc/src/texture.c
vendored
2
third_party/gldc/src/texture.c
vendored
@ -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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user