mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-14 10:05:44 -04:00
Make screens use Lock/Unlock dynamic vb too
Also try to ensure code still compiles as C++
This commit is contained in:
parent
c013d3952e
commit
e686f0b403
@ -74,7 +74,7 @@ struct ScreenVTABLE {
|
|||||||
cc_bool blocksWorld; /* Whether this screen completely and opaquely covers the game world behind it. */ \
|
cc_bool blocksWorld; /* Whether this screen completely and opaquely covers the game world behind it. */ \
|
||||||
cc_bool closable; /* Whether this screen is automatically closed when pressing Escape */ \
|
cc_bool closable; /* Whether this screen is automatically closed when pressing Escape */ \
|
||||||
cc_bool dirty; /* Whether this screens needs to have its mesh rebuilt. */ \
|
cc_bool dirty; /* Whether this screens needs to have its mesh rebuilt. */ \
|
||||||
GfxResourceID vb; struct Widget** widgets; int numWidgets;
|
int maxVertices; GfxResourceID vb; struct Widget** widgets; int numWidgets;
|
||||||
|
|
||||||
/* Represents a container of widgets and other 2D elements. May cover entire window. */
|
/* Represents a container of widgets and other 2D elements. May cover entire window. */
|
||||||
struct Screen { Screen_Body };
|
struct Screen { Screen_Body };
|
||||||
|
89
src/Menus.c
89
src/Menus.c
@ -376,6 +376,7 @@ static void ListScreen_Init(void* screen) {
|
|||||||
s->numWidgets = Array_Elems(list_widgets);
|
s->numWidgets = Array_Elems(list_widgets);
|
||||||
s->wheelAcc = 0.0f;
|
s->wheelAcc = 0.0f;
|
||||||
s->currentIndex = 0;
|
s->currentIndex = 0;
|
||||||
|
s->maxVertices = LIST_MAX_VERTICES;
|
||||||
|
|
||||||
for (i = 0; i < LIST_SCREEN_ITEMS; i++) {
|
for (i = 0; i < LIST_SCREEN_ITEMS; i++) {
|
||||||
ButtonWidget_Make(&s->btns[i], 300, s->EntryClick,
|
ButtonWidget_Make(&s->btns[i], 300, s->EntryClick,
|
||||||
@ -414,7 +415,7 @@ static void ListScreen_ContextLost(void* screen) {
|
|||||||
|
|
||||||
static void ListScreen_ContextRecreated(void* screen) {
|
static void ListScreen_ContextRecreated(void* screen) {
|
||||||
struct ListScreen* s = (struct ListScreen*)screen;
|
struct ListScreen* s = (struct ListScreen*)screen;
|
||||||
s->vb = Gfx_CreateDynamicVb(VERTEX_FORMAT_P3FT2FC4B, LIST_MAX_VERTICES);
|
Screen_CreateVb(screen);
|
||||||
Menu_MakeTitleFont(&s->font);
|
Menu_MakeTitleFont(&s->font);
|
||||||
ListScreen_RedrawEntries(s);
|
ListScreen_RedrawEntries(s);
|
||||||
|
|
||||||
@ -425,26 +426,18 @@ static void ListScreen_ContextRecreated(void* screen) {
|
|||||||
ListScreen_UpdatePage(s);
|
ListScreen_UpdatePage(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ListScreen_BuildMesh(void* screen) {
|
|
||||||
struct Screen* s = (struct Screen*)screen;
|
|
||||||
VertexP3fT2fC4b vertices[LIST_MAX_VERTICES];
|
|
||||||
|
|
||||||
Screen_BuildMesh(screen, vertices);
|
|
||||||
Gfx_SetDynamicVbData(s->vb, vertices, LIST_MAX_VERTICES);
|
|
||||||
}
|
|
||||||
|
|
||||||
static const struct ScreenVTABLE ListScreen_VTABLE = {
|
static const struct ScreenVTABLE ListScreen_VTABLE = {
|
||||||
ListScreen_Init, Screen_NullUpdate, ListScreen_Free,
|
ListScreen_Init, Screen_NullUpdate, ListScreen_Free,
|
||||||
ListScreen_Render, ListScreen_BuildMesh,
|
ListScreen_Render, Screen_BuildMesh,
|
||||||
ListScreen_KeyDown, Screen_TInput, Screen_TKeyPress, Screen_TText,
|
ListScreen_KeyDown, Screen_TInput, Screen_TKeyPress, Screen_TText,
|
||||||
Menu_PointerDown, Screen_TPointer, Menu_PointerMove, ListScreen_MouseScroll,
|
Menu_PointerDown, Screen_TPointer, Menu_PointerMove, ListScreen_MouseScroll,
|
||||||
Screen_Layout, ListScreen_ContextLost, ListScreen_ContextRecreated
|
Screen_Layout, ListScreen_ContextLost, ListScreen_ContextRecreated
|
||||||
};
|
};
|
||||||
void ListScreen_Show(void) {
|
void ListScreen_Show(void) {
|
||||||
struct ListScreen* s = &ListScreen;
|
struct ListScreen* s = &ListScreen;
|
||||||
s->grabsInput = true;
|
s->grabsInput = true;
|
||||||
s->closable = true;
|
s->closable = true;
|
||||||
s->VTABLE = &ListScreen_VTABLE;
|
s->VTABLE = &ListScreen_VTABLE;
|
||||||
Gui_Replace((struct Screen*)s, GUI_PRIORITY_MENU);
|
Gui_Replace((struct Screen*)s, GUI_PRIORITY_MENU);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -627,7 +620,7 @@ static void OptionsGroupScreen_ContextLost(void* screen) {
|
|||||||
static void OptionsGroupScreen_ContextRecreated(void* screen) {
|
static void OptionsGroupScreen_ContextRecreated(void* screen) {
|
||||||
struct OptionsGroupScreen* s = (struct OptionsGroupScreen*)screen;
|
struct OptionsGroupScreen* s = (struct OptionsGroupScreen*)screen;
|
||||||
struct FontDesc titleFont;
|
struct FontDesc titleFont;
|
||||||
s->vb = Gfx_CreateDynamicVb(VERTEX_FORMAT_P3FT2FC4B, OPTGROUPS_MAX_VERTICES);
|
Screen_CreateVb(screen);
|
||||||
|
|
||||||
Menu_MakeTitleFont(&titleFont);
|
Menu_MakeTitleFont(&titleFont);
|
||||||
Menu_MakeBodyFont(&s->textFont);
|
Menu_MakeBodyFont(&s->textFont);
|
||||||
@ -640,21 +633,14 @@ static void OptionsGroupScreen_ContextRecreated(void* screen) {
|
|||||||
Font_Free(&titleFont);
|
Font_Free(&titleFont);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OptionsGroupScreen_BuildMesh(void* screen) {
|
|
||||||
struct Screen* s = (struct Screen*)screen;
|
|
||||||
VertexP3fT2fC4b vertices[OPTGROUPS_MAX_VERTICES];
|
|
||||||
|
|
||||||
Screen_BuildMesh(screen, vertices);
|
|
||||||
Gfx_SetDynamicVbData(s->vb, vertices, OPTGROUPS_MAX_VERTICES);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void OptionsGroupScreen_Init(void* screen) {
|
static void OptionsGroupScreen_Init(void* screen) {
|
||||||
struct OptionsGroupScreen* s = (struct OptionsGroupScreen*)screen;
|
struct OptionsGroupScreen* s = (struct OptionsGroupScreen*)screen;
|
||||||
|
|
||||||
Event_RegisterVoid(&UserEvents.HackPermissionsChanged, s, OptionsGroupScreen_CheckHacksAllowed);
|
Event_RegisterVoid(&UserEvents.HackPermissionsChanged, s, OptionsGroupScreen_CheckHacksAllowed);
|
||||||
s->widgets = optGroups_widgets;
|
s->widgets = optGroups_widgets;
|
||||||
s->numWidgets = Array_Elems(optGroups_widgets);
|
s->numWidgets = Array_Elems(optGroups_widgets);
|
||||||
s->selectedI = -1;
|
s->selectedI = -1;
|
||||||
|
s->maxVertices = OPTGROUPS_MAX_VERTICES;
|
||||||
|
|
||||||
Menu_Buttons(s, s->btns, 300, optsGroup_btns, 7);
|
Menu_Buttons(s, s->btns, 300, optsGroup_btns, 7);
|
||||||
TextWidget_Make(&s->desc, ANCHOR_CENTRE, ANCHOR_CENTRE, 0, 100);
|
TextWidget_Make(&s->desc, ANCHOR_CENTRE, ANCHOR_CENTRE, 0, 100);
|
||||||
@ -679,7 +665,7 @@ static int OptionsGroupScreen_PointerMove(void* screen, int id, int x, int y) {
|
|||||||
|
|
||||||
static const struct ScreenVTABLE OptionsGroupScreen_VTABLE = {
|
static const struct ScreenVTABLE OptionsGroupScreen_VTABLE = {
|
||||||
OptionsGroupScreen_Init, Screen_NullUpdate, OptionsGroupScreen_Free,
|
OptionsGroupScreen_Init, Screen_NullUpdate, OptionsGroupScreen_Free,
|
||||||
MenuScreen_Render2, OptionsGroupScreen_BuildMesh,
|
MenuScreen_Render2, Screen_BuildMesh,
|
||||||
Screen_InputDown, Screen_TInput, Screen_TKeyPress, Screen_TText,
|
Screen_InputDown, Screen_TInput, Screen_TKeyPress, Screen_TText,
|
||||||
Menu_PointerDown, Screen_TPointer, OptionsGroupScreen_PointerMove, Screen_TMouseScroll,
|
Menu_PointerDown, Screen_TPointer, OptionsGroupScreen_PointerMove, Screen_TMouseScroll,
|
||||||
Screen_Layout, OptionsGroupScreen_ContextLost, OptionsGroupScreen_ContextRecreated
|
Screen_Layout, OptionsGroupScreen_ContextLost, OptionsGroupScreen_ContextRecreated
|
||||||
@ -1139,7 +1125,7 @@ static void ClassicGenScreen_Huge(void* a, void* b) { ClassicGenScreen_Gen(512
|
|||||||
static void ClassicGenScreen_ContextRecreated(void* screen) {
|
static void ClassicGenScreen_ContextRecreated(void* screen) {
|
||||||
struct ClassicGenScreen* s = (struct ClassicGenScreen*)screen;
|
struct ClassicGenScreen* s = (struct ClassicGenScreen*)screen;
|
||||||
struct FontDesc titleFont;
|
struct FontDesc titleFont;
|
||||||
s->vb = Gfx_CreateDynamicVb(VERTEX_FORMAT_P3FT2FC4B, CLASSICGEN_MAX_VERTICES);
|
Screen_CreateVb(screen);
|
||||||
|
|
||||||
Menu_MakeTitleFont(&titleFont);
|
Menu_MakeTitleFont(&titleFont);
|
||||||
ButtonWidget_SetConst(&s->btns[0], "Small", &titleFont);
|
ButtonWidget_SetConst(&s->btns[0], "Small", &titleFont);
|
||||||
@ -1149,22 +1135,15 @@ static void ClassicGenScreen_ContextRecreated(void* screen) {
|
|||||||
Font_Free(&titleFont);
|
Font_Free(&titleFont);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ClassicGenScreen_BuildMesh(void* screen) {
|
|
||||||
struct Screen* s = (struct Screen*)screen;
|
|
||||||
VertexP3fT2fC4b vertices[CLASSICGEN_MAX_VERTICES];
|
|
||||||
|
|
||||||
Screen_BuildMesh(screen, vertices);
|
|
||||||
Gfx_SetDynamicVbData(s->vb, vertices, CLASSICGEN_MAX_VERTICES);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ClassicGenScreen_Make(struct ClassicGenScreen* s, int i, int y, Widget_LeftClick onClick) {
|
static void ClassicGenScreen_Make(struct ClassicGenScreen* s, int i, int y, Widget_LeftClick onClick) {
|
||||||
ButtonWidget_Make(&s->btns[i], 400, onClick, ANCHOR_CENTRE, ANCHOR_CENTRE, 0, y);
|
ButtonWidget_Make(&s->btns[i], 400, onClick, ANCHOR_CENTRE, ANCHOR_CENTRE, 0, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ClassicGenScreen_Init(void* screen) {
|
static void ClassicGenScreen_Init(void* screen) {
|
||||||
struct ClassicGenScreen* s = (struct ClassicGenScreen*)screen;
|
struct ClassicGenScreen* s = (struct ClassicGenScreen*)screen;
|
||||||
s->widgets = classicgen_widgets;
|
s->widgets = classicgen_widgets;
|
||||||
s->numWidgets = Array_Elems(classicgen_widgets);
|
s->numWidgets = Array_Elems(classicgen_widgets);
|
||||||
|
s->maxVertices = CLASSICGEN_MAX_VERTICES;
|
||||||
|
|
||||||
ClassicGenScreen_Make(s, 0, -100, ClassicGenScreen_Small);
|
ClassicGenScreen_Make(s, 0, -100, ClassicGenScreen_Small);
|
||||||
ClassicGenScreen_Make(s, 1, -50, ClassicGenScreen_Medium);
|
ClassicGenScreen_Make(s, 1, -50, ClassicGenScreen_Medium);
|
||||||
@ -1175,7 +1154,7 @@ static void ClassicGenScreen_Init(void* screen) {
|
|||||||
|
|
||||||
static const struct ScreenVTABLE ClassicGenScreen_VTABLE = {
|
static const struct ScreenVTABLE ClassicGenScreen_VTABLE = {
|
||||||
ClassicGenScreen_Init, Screen_NullUpdate, Screen_NullFunc,
|
ClassicGenScreen_Init, Screen_NullUpdate, Screen_NullFunc,
|
||||||
MenuScreen_Render2, ClassicGenScreen_BuildMesh,
|
MenuScreen_Render2, Screen_BuildMesh,
|
||||||
Screen_InputDown, Screen_TInput, Screen_TKeyPress, Screen_TText,
|
Screen_InputDown, Screen_TInput, Screen_TKeyPress, Screen_TText,
|
||||||
Menu_PointerDown, Screen_TPointer, Menu_PointerMove, Screen_TMouseScroll,
|
Menu_PointerDown, Screen_TPointer, Menu_PointerMove, Screen_TMouseScroll,
|
||||||
Screen_Layout, Screen_ContextLost, ClassicGenScreen_ContextRecreated
|
Screen_Layout, Screen_ContextLost, ClassicGenScreen_ContextRecreated
|
||||||
@ -3139,7 +3118,7 @@ static void UrlWarningOverlay_AppendUrl(void* screen, void* b) {
|
|||||||
static void UrlWarningOverlay_ContextRecreated(void* screen) {
|
static void UrlWarningOverlay_ContextRecreated(void* screen) {
|
||||||
struct UrlWarningOverlay* s = (struct UrlWarningOverlay*)screen;
|
struct UrlWarningOverlay* s = (struct UrlWarningOverlay*)screen;
|
||||||
struct FontDesc titleFont, textFont;
|
struct FontDesc titleFont, textFont;
|
||||||
s->vb = Gfx_CreateDynamicVb(VERTEX_FORMAT_P3FT2FC4B, URLWARNING_MAX_VERTICES);
|
Screen_CreateVb(screen);
|
||||||
|
|
||||||
Menu_MakeTitleFont(&titleFont);
|
Menu_MakeTitleFont(&titleFont);
|
||||||
Menu_MakeBodyFont(&textFont);
|
Menu_MakeBodyFont(&textFont);
|
||||||
@ -3155,18 +3134,11 @@ static void UrlWarningOverlay_ContextRecreated(void* screen) {
|
|||||||
Font_Free(&textFont);
|
Font_Free(&textFont);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void UrlWarningOverlay_BuildMesh(void* screen) {
|
|
||||||
struct Screen* s = (struct Screen*)screen;
|
|
||||||
VertexP3fT2fC4b vertices[URLWARNING_MAX_VERTICES];
|
|
||||||
|
|
||||||
Screen_BuildMesh(screen, vertices);
|
|
||||||
Gfx_SetDynamicVbData(s->vb, vertices, URLWARNING_MAX_VERTICES);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void UrlWarningOverlay_Init(void* screen) {
|
static void UrlWarningOverlay_Init(void* screen) {
|
||||||
struct UrlWarningOverlay* s = (struct UrlWarningOverlay*)screen;
|
struct UrlWarningOverlay* s = (struct UrlWarningOverlay*)screen;
|
||||||
s->widgets = urlwarning_widgets;
|
s->widgets = urlwarning_widgets;
|
||||||
s->numWidgets = Array_Elems(urlwarning_widgets);
|
s->numWidgets = Array_Elems(urlwarning_widgets);
|
||||||
|
s->maxVertices = URLWARNING_MAX_VERTICES;
|
||||||
|
|
||||||
Overlay_MakeLabels(s->lbls);
|
Overlay_MakeLabels(s->lbls);
|
||||||
Overlay_MakeMainButtons(s->btns);
|
Overlay_MakeMainButtons(s->btns);
|
||||||
@ -3176,7 +3148,7 @@ static void UrlWarningOverlay_Init(void* screen) {
|
|||||||
|
|
||||||
static const struct ScreenVTABLE UrlWarningOverlay_VTABLE = {
|
static const struct ScreenVTABLE UrlWarningOverlay_VTABLE = {
|
||||||
UrlWarningOverlay_Init, Screen_NullUpdate, Screen_NullFunc,
|
UrlWarningOverlay_Init, Screen_NullUpdate, Screen_NullFunc,
|
||||||
MenuScreen_Render2, UrlWarningOverlay_BuildMesh,
|
MenuScreen_Render2, Screen_BuildMesh,
|
||||||
Screen_InputDown, Screen_TInput, Screen_TKeyPress, Screen_TText,
|
Screen_InputDown, Screen_TInput, Screen_TKeyPress, Screen_TText,
|
||||||
Menu_PointerDown, Screen_TPointer, Menu_PointerMove, Screen_TMouseScroll,
|
Menu_PointerDown, Screen_TPointer, Menu_PointerMove, Screen_TMouseScroll,
|
||||||
Screen_Layout, Screen_ContextLost, UrlWarningOverlay_ContextRecreated
|
Screen_Layout, Screen_ContextLost, UrlWarningOverlay_ContextRecreated
|
||||||
@ -3295,7 +3267,7 @@ static void TexPackOverlay_ContextLost(void* screen) {
|
|||||||
static void TexPackOverlay_ContextRecreated(void* screen) {
|
static void TexPackOverlay_ContextRecreated(void* screen) {
|
||||||
struct TexPackOverlay* s = (struct TexPackOverlay*)screen;
|
struct TexPackOverlay* s = (struct TexPackOverlay*)screen;
|
||||||
struct FontDesc titleFont;
|
struct FontDesc titleFont;
|
||||||
s->vb = Gfx_CreateDynamicVb(VERTEX_FORMAT_P3FT2FC4B, TEXPACK_MAX_VERTICES);
|
Screen_CreateVb(screen);
|
||||||
|
|
||||||
Menu_MakeTitleFont(&titleFont);
|
Menu_MakeTitleFont(&titleFont);
|
||||||
Menu_MakeBodyFont(&s->textFont);
|
Menu_MakeBodyFont(&s->textFont);
|
||||||
@ -3323,18 +3295,11 @@ static void TexPackOverlay_ContextRecreated(void* screen) {
|
|||||||
Font_Free(&titleFont);
|
Font_Free(&titleFont);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void TexPackOverlay_BuildMesh(void* screen) {
|
|
||||||
struct Screen* s = (struct Screen*)screen;
|
|
||||||
VertexP3fT2fC4b vertices[TEXPACK_MAX_VERTICES];
|
|
||||||
|
|
||||||
Screen_BuildMesh(screen, vertices);
|
|
||||||
Gfx_SetDynamicVbData(s->vb, vertices, TEXPACK_MAX_VERTICES);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void TexPackOverlay_Init(void* screen) {
|
static void TexPackOverlay_Init(void* screen) {
|
||||||
struct TexPackOverlay* s = (struct TexPackOverlay*)screen;
|
struct TexPackOverlay* s = (struct TexPackOverlay*)screen;
|
||||||
s->widgets = texpack_widgets;
|
s->widgets = texpack_widgets;
|
||||||
s->numWidgets = Array_Elems(texpack_widgets);
|
s->numWidgets = Array_Elems(texpack_widgets);
|
||||||
|
s->maxVertices = TEXPACK_MAX_VERTICES;
|
||||||
|
|
||||||
s->contentLength = 0;
|
s->contentLength = 0;
|
||||||
s->deny = false;
|
s->deny = false;
|
||||||
@ -3349,7 +3314,7 @@ static void TexPackOverlay_Init(void* screen) {
|
|||||||
|
|
||||||
static const struct ScreenVTABLE TexPackOverlay_VTABLE = {
|
static const struct ScreenVTABLE TexPackOverlay_VTABLE = {
|
||||||
TexPackOverlay_Init, TexPackOverlay_Update, Screen_NullFunc,
|
TexPackOverlay_Init, TexPackOverlay_Update, Screen_NullFunc,
|
||||||
MenuScreen_Render2, TexPackOverlay_BuildMesh,
|
MenuScreen_Render2, Screen_BuildMesh,
|
||||||
Screen_InputDown, Screen_TInput, Screen_TKeyPress, Screen_TText,
|
Screen_InputDown, Screen_TInput, Screen_TKeyPress, Screen_TText,
|
||||||
Menu_PointerDown, Screen_TPointer, Menu_PointerMove, Screen_TMouseScroll,
|
Menu_PointerDown, Screen_TPointer, Menu_PointerMove, Screen_TMouseScroll,
|
||||||
Screen_Layout, TexPackOverlay_ContextLost, TexPackOverlay_ContextRecreated
|
Screen_Layout, TexPackOverlay_ContextLost, TexPackOverlay_ContextRecreated
|
||||||
|
@ -168,7 +168,7 @@ static void Rain_Render(float t) {
|
|||||||
int i;
|
int i;
|
||||||
if (!rain_count) return;
|
if (!rain_count) return;
|
||||||
|
|
||||||
data = Gfx_LockDynamicVb(Particles_VB, VERTEX_FORMAT_P3FT2FC4B, rain_count * 4);
|
data = (VertexP3fT2fC4b*)Gfx_LockDynamicVb(Particles_VB, VERTEX_FORMAT_P3FT2FC4B, rain_count * 4);
|
||||||
for (i = 0; i < rain_count; i++) {
|
for (i = 0; i < rain_count; i++) {
|
||||||
RainParticle_Render(&rain_Particles[i], t, data);
|
RainParticle_Render(&rain_Particles[i], t, data);
|
||||||
data += 4;
|
data += 4;
|
||||||
@ -260,7 +260,7 @@ static void Terrain_Render(float t) {
|
|||||||
int i, index;
|
int i, index;
|
||||||
if (!terrain_count) return;
|
if (!terrain_count) return;
|
||||||
|
|
||||||
data = Gfx_LockDynamicVb(Particles_VB, VERTEX_FORMAT_P3FT2FC4B, terrain_count * 4);
|
data = (VertexP3fT2fC4b*)Gfx_LockDynamicVb(Particles_VB, VERTEX_FORMAT_P3FT2FC4B, terrain_count * 4);
|
||||||
Terrain_Update1DCounts();
|
Terrain_Update1DCounts();
|
||||||
for (i = 0; i < terrain_count; i++) {
|
for (i = 0; i < terrain_count; i++) {
|
||||||
index = Atlas1D_Index(terrain_particles[i].texLoc);
|
index = Atlas1D_Index(terrain_particles[i].texLoc);
|
||||||
|
@ -99,16 +99,26 @@ void Screen_ContextLost(void* screen) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Screen_BuildMesh(void* screen, VertexP3fT2fC4b* vertices) {
|
void Screen_CreateVb(void* screen) {
|
||||||
|
struct Screen* s = (struct Screen*)screen;
|
||||||
|
s->vb = Gfx_CreateDynamicVb(VERTEX_FORMAT_P3FT2FC4B, s->maxVertices);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Screen_BuildMesh(void* screen) {
|
||||||
struct Screen* s = (struct Screen*)screen;
|
struct Screen* s = (struct Screen*)screen;
|
||||||
struct Widget** widgets = s->widgets;
|
struct Widget** widgets = s->widgets;
|
||||||
VertexP3fT2fC4b** ptr = &vertices;
|
VertexP3fT2fC4b* data;
|
||||||
|
VertexP3fT2fC4b** ptr;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
data = (VertexP3fT2fC4b*)Gfx_LockDynamicVb(s->vb, VERTEX_FORMAT_P3FT2FC4B, s->maxVertices);
|
||||||
|
ptr = &data;
|
||||||
|
|
||||||
for (i = 0; i < s->numWidgets; i++) {
|
for (i = 0; i < s->numWidgets; i++) {
|
||||||
if (!widgets[i]) continue;
|
if (!widgets[i]) continue;
|
||||||
Widget_BuildMesh(widgets[i], ptr);
|
Widget_BuildMesh(widgets[i], ptr);
|
||||||
}
|
}
|
||||||
|
Gfx_UnlockDynamicVb(s->vb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1468,7 +1478,7 @@ static void DisconnectScreen_ContextLost(void* screen) {
|
|||||||
static void DisconnectScreen_ContextRecreated(void* screen) {
|
static void DisconnectScreen_ContextRecreated(void* screen) {
|
||||||
String msg; char msgBuffer[STRING_SIZE];
|
String msg; char msgBuffer[STRING_SIZE];
|
||||||
struct DisconnectScreen* s = (struct DisconnectScreen*)screen;
|
struct DisconnectScreen* s = (struct DisconnectScreen*)screen;
|
||||||
s->vb = Gfx_CreateDynamicVb(VERTEX_FORMAT_P3FT2FC4B, DISCONNECT_MAX_VERTICES);
|
Screen_CreateVb(screen);
|
||||||
|
|
||||||
Drawer2D_MakeFont(&s->titleFont, 16, FONT_STYLE_BOLD);
|
Drawer2D_MakeFont(&s->titleFont, 16, FONT_STYLE_BOLD);
|
||||||
Drawer2D_MakeFont(&s->messageFont, 16, FONT_STYLE_NORMAL);
|
Drawer2D_MakeFont(&s->messageFont, 16, FONT_STYLE_NORMAL);
|
||||||
@ -1480,14 +1490,6 @@ static void DisconnectScreen_ContextRecreated(void* screen) {
|
|||||||
ButtonWidget_Set(&s->reconnect, &msg, &s->titleFont);
|
ButtonWidget_Set(&s->reconnect, &msg, &s->titleFont);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void DisconnectScreen_BuildMesh(void* screen) {
|
|
||||||
struct Screen* s = (struct Screen*)screen;
|
|
||||||
VertexP3fT2fC4b vertices[DISCONNECT_MAX_VERTICES];
|
|
||||||
|
|
||||||
Screen_BuildMesh(screen, vertices);
|
|
||||||
Gfx_SetDynamicVbData(s->vb, vertices, DISCONNECT_MAX_VERTICES);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void DisconnectScreen_Init(void* screen) {
|
static void DisconnectScreen_Init(void* screen) {
|
||||||
struct DisconnectScreen* s = (struct DisconnectScreen*)screen;
|
struct DisconnectScreen* s = (struct DisconnectScreen*)screen;
|
||||||
|
|
||||||
@ -1497,6 +1499,7 @@ static void DisconnectScreen_Init(void* screen) {
|
|||||||
ButtonWidget_Make(&s->reconnect, 300, NULL,
|
ButtonWidget_Make(&s->reconnect, 300, NULL,
|
||||||
ANCHOR_CENTRE, ANCHOR_CENTRE, 0, 80);
|
ANCHOR_CENTRE, ANCHOR_CENTRE, 0, 80);
|
||||||
s->reconnect.disabled = !s->canReconnect;
|
s->reconnect.disabled = !s->canReconnect;
|
||||||
|
s->maxVertices = DISCONNECT_MAX_VERTICES;
|
||||||
|
|
||||||
/* NOTE: changing VSync can't be done within frame, causes crash on some GPUs */
|
/* NOTE: changing VSync can't be done within frame, causes crash on some GPUs */
|
||||||
Gfx_SetFpsLimit(Game_FpsLimit == FPS_LIMIT_VSYNC, 1000 / 5.0f);
|
Gfx_SetFpsLimit(Game_FpsLimit == FPS_LIMIT_VSYNC, 1000 / 5.0f);
|
||||||
@ -1546,7 +1549,7 @@ static int DisconnectScreen_PointerMove(void* screen, int idx, int x, int y) {
|
|||||||
|
|
||||||
static const struct ScreenVTABLE DisconnectScreen_VTABLE = {
|
static const struct ScreenVTABLE DisconnectScreen_VTABLE = {
|
||||||
DisconnectScreen_Init, DisconnectScreen_Update, DisconnectScreen_Free,
|
DisconnectScreen_Init, DisconnectScreen_Update, DisconnectScreen_Free,
|
||||||
DisconnectScreen_Render, DisconnectScreen_BuildMesh,
|
DisconnectScreen_Render, Screen_BuildMesh,
|
||||||
Screen_InputDown, Screen_TInput, Screen_TKeyPress, Screen_TText,
|
Screen_InputDown, Screen_TInput, Screen_TKeyPress, Screen_TText,
|
||||||
DisconnectScreen_PointerDown, Screen_TPointer, DisconnectScreen_PointerMove, Screen_TMouseScroll,
|
DisconnectScreen_PointerDown, Screen_TPointer, DisconnectScreen_PointerMove, Screen_TMouseScroll,
|
||||||
Screen_Layout, DisconnectScreen_ContextLost, DisconnectScreen_ContextRecreated
|
Screen_Layout, DisconnectScreen_ContextLost, DisconnectScreen_ContextRecreated
|
||||||
@ -1631,9 +1634,8 @@ static void TouchScreen_ContextRecreated(void* screen) {
|
|||||||
struct TouchScreen* s = (struct TouchScreen*)screen;
|
struct TouchScreen* s = (struct TouchScreen*)screen;
|
||||||
const struct TouchBindDesc* desc;
|
const struct TouchBindDesc* desc;
|
||||||
int i;
|
int i;
|
||||||
|
Screen_CreateVb(screen);
|
||||||
Drawer2D_MakeFont(&s->font, 16, FONT_STYLE_BOLD);
|
Drawer2D_MakeFont(&s->font, 16, FONT_STYLE_BOLD);
|
||||||
s->vb = Gfx_CreateDynamicVb(VERTEX_FORMAT_P3FT2FC4B, TOUCH_MAX_VERTICES);
|
|
||||||
|
|
||||||
for (i = 0; i < s->numWidgets; i++) {
|
for (i = 0; i < s->numWidgets; i++) {
|
||||||
desc = &touchDescs[i];
|
desc = &touchDescs[i];
|
||||||
@ -1689,21 +1691,14 @@ static int TouchScreen_PointerUp(void* screen, int id, int x, int y) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void TouchScreen_BuildMesh(void* screen) {
|
|
||||||
struct Screen* s = (struct Screen*)screen;
|
|
||||||
VertexP3fT2fC4b vertices[TOUCH_MAX_VERTICES];
|
|
||||||
|
|
||||||
Screen_BuildMesh(screen, vertices);
|
|
||||||
Gfx_SetDynamicVbData(s->vb, vertices, TOUCH_MAX_VERTICES);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void TouchScreen_Init(void* screen) {
|
static void TouchScreen_Init(void* screen) {
|
||||||
struct TouchScreen* s = (struct TouchScreen*)screen;
|
struct TouchScreen* s = (struct TouchScreen*)screen;
|
||||||
const struct TouchBindDesc* desc;
|
const struct TouchBindDesc* desc;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
s->widgets = touch_widgets;
|
s->widgets = touch_widgets;
|
||||||
s->numWidgets = Array_Elems(touch_widgets);
|
s->numWidgets = Array_Elems(touch_widgets);
|
||||||
|
s->maxVertices = TOUCH_MAX_VERTICES;
|
||||||
|
|
||||||
for (i = 0; i < s->numWidgets; i++) {
|
for (i = 0; i < s->numWidgets; i++) {
|
||||||
desc = &touchDescs[i];
|
desc = &touchDescs[i];
|
||||||
@ -1718,7 +1713,7 @@ static void TouchScreen_Init(void* screen) {
|
|||||||
|
|
||||||
static const struct ScreenVTABLE TouchScreen_VTABLE = {
|
static const struct ScreenVTABLE TouchScreen_VTABLE = {
|
||||||
TouchScreen_Init, Screen_NullUpdate, Screen_NullFunc,
|
TouchScreen_Init, Screen_NullUpdate, Screen_NullFunc,
|
||||||
TouchScreen_Render, TouchScreen_BuildMesh,
|
TouchScreen_Render, Screen_BuildMesh,
|
||||||
Screen_FInput, Screen_FInput, Screen_FKeyPress, Screen_FText,
|
Screen_FInput, Screen_FInput, Screen_FKeyPress, Screen_FText,
|
||||||
TouchScreen_PointerDown, TouchScreen_PointerUp, Screen_FPointer, Screen_FMouseScroll,
|
TouchScreen_PointerDown, TouchScreen_PointerUp, Screen_FPointer, Screen_FMouseScroll,
|
||||||
Screen_Layout, TouchScreen_ContextLost, TouchScreen_ContextRecreated
|
Screen_Layout, TouchScreen_ContextLost, TouchScreen_ContextRecreated
|
||||||
|
@ -34,8 +34,8 @@ void Screen_Layout(void* screen);
|
|||||||
/* Calls Widget_Free on each widget in the screen. */
|
/* Calls Widget_Free on each widget in the screen. */
|
||||||
/* Also deletes the screen's vb. */
|
/* Also deletes the screen's vb. */
|
||||||
void Screen_ContextLost(void* screen);
|
void Screen_ContextLost(void* screen);
|
||||||
/* Calls Widget_BuildMesh on each widget in the screen. */
|
void Screen_CreateVb(void* screen);
|
||||||
void Screen_BuildMesh(void* screen, VertexP3fT2fC4b* vertices);
|
void Screen_BuildMesh(void* screen);
|
||||||
|
|
||||||
void InventoryScreen_Show(void);
|
void InventoryScreen_Show(void);
|
||||||
void HUDScreen_Show(void);
|
void HUDScreen_Show(void);
|
||||||
|
@ -189,14 +189,14 @@ void Selections_Render(void) {
|
|||||||
count = selections_count * SELECTIONS_VERTICES;
|
count = selections_count * SELECTIONS_VERTICES;
|
||||||
Gfx_SetVertexFormat(VERTEX_FORMAT_P3FC4B);
|
Gfx_SetVertexFormat(VERTEX_FORMAT_P3FC4B);
|
||||||
|
|
||||||
data = Gfx_LockDynamicVb(selections_LineVB, VERTEX_FORMAT_P3FC4B, count);
|
data = (VertexP3fC4b*)Gfx_LockDynamicVb(selections_LineVB, VERTEX_FORMAT_P3FC4B, count);
|
||||||
for (i = 0; i < selections_count; i++, data += SELECTIONS_VERTICES) {
|
for (i = 0; i < selections_count; i++, data += SELECTIONS_VERTICES) {
|
||||||
SelectionBox_RenderEdges(&selections_list[i], data);
|
SelectionBox_RenderEdges(&selections_list[i], data);
|
||||||
}
|
}
|
||||||
Gfx_UnlockDynamicVb(selections_LineVB);
|
Gfx_UnlockDynamicVb(selections_LineVB);
|
||||||
Gfx_DrawVb_Lines(count);
|
Gfx_DrawVb_Lines(count);
|
||||||
|
|
||||||
data = Gfx_LockDynamicVb(selections_VB, VERTEX_FORMAT_P3FC4B, count);
|
data = (VertexP3fC4b*)Gfx_LockDynamicVb(selections_VB, VERTEX_FORMAT_P3FC4B, count);
|
||||||
for (i = 0; i < selections_count; i++, data += SELECTIONS_VERTICES) {
|
for (i = 0; i < selections_count; i++, data += SELECTIONS_VERTICES) {
|
||||||
SelectionBox_RenderFaces(&selections_list[i], data);
|
SelectionBox_RenderFaces(&selections_list[i], data);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user