Fix OpenGL 1.1 build not drawing rewritten menus at all

This commit is contained in:
UnknownShadow200 2019-12-15 11:13:40 +11:00
parent 05a0a6500b
commit 27a62b9ab1
11 changed files with 41 additions and 18 deletions

View File

@ -62,7 +62,7 @@ void AxisLinesRenderer_Render(double delta) {
*-----------------------------------------------AxisLinesRenderer component-----------------------------------------------* *-----------------------------------------------AxisLinesRenderer component-----------------------------------------------*
*#########################################################################################################################*/ *#########################################################################################################################*/
static void OnContextLost(void* obj) { static void OnContextLost(void* obj) {
Gfx_DeleteVb(&axisLines_vb); Gfx_DeleteDynamicVb(&axisLines_vb);
} }
static void AxisLinesRenderer_Init(void) { static void AxisLinesRenderer_Init(void) {

View File

@ -790,7 +790,7 @@ static void DeleteVbs(void) {
Gfx_DeleteVb(&skybox_vb); Gfx_DeleteVb(&skybox_vb);
Gfx_DeleteVb(&sides_vb); Gfx_DeleteVb(&sides_vb);
Gfx_DeleteVb(&edges_vb); Gfx_DeleteVb(&edges_vb);
Gfx_DeleteVb(&weather_vb); Gfx_DeleteDynamicVb(&weather_vb);
} }
static void OnContextLost(void* obj) { static void OnContextLost(void* obj) {

View File

@ -49,8 +49,8 @@ static void Gfx_InitDefaultResources(void) {
} }
static void Gfx_FreeDefaultResources(void) { static void Gfx_FreeDefaultResources(void) {
Gfx_DeleteVb(&Gfx_quadVb); Gfx_DeleteDynamicVb(&Gfx_quadVb);
Gfx_DeleteVb(&Gfx_texVb); Gfx_DeleteDynamicVb(&Gfx_texVb);
Gfx_DeleteIb(&Gfx_defaultIb); Gfx_DeleteIb(&Gfx_defaultIb);
} }
@ -1880,7 +1880,6 @@ static void GL_CheckSupport(void) {
Gfx.CustomMipmapsLevels = true; Gfx.CustomMipmapsLevels = true;
} }
#else #else
GfxResourceID Gfx_CreateDynamicVb(VertexFormat fmt, int maxVertices) { return gl_DYNAMICLISTID; }
GfxResourceID Gfx_CreateVb(void* vertices, VertexFormat fmt, int count) { GfxResourceID Gfx_CreateVb(void* vertices, VertexFormat fmt, int count) {
/* Need to get rid of the 1 extra element, see comment in chunk mesh builder for why */ /* Need to get rid of the 1 extra element, see comment in chunk mesh builder for why */
count &= ~0x01; count &= ~0x01;
@ -1909,14 +1908,28 @@ void Gfx_DeleteIb(GfxResourceID* ib) { }
void Gfx_DeleteVb(GfxResourceID* vb) { void Gfx_DeleteVb(GfxResourceID* vb) {
GLuint id = (GLuint)(*vb); GLuint id = (GLuint)(*vb);
if (!id) return; if (id) glDeleteLists(id, 1);
if (id != gl_DYNAMICLISTID) glDeleteLists(id, 1); *vb = 0;
}
GfxResourceID Gfx_CreateDynamicVb(VertexFormat fmt, int maxVertices) {
return (GfxResourceID)Mem_Alloc(maxVertices, gfx_strideSizes[fmt], "creating dynamic vb");
}
void Gfx_BindDynamicVb(GfxResourceID vb) {
gfx_activeList = gl_DYNAMICLISTID;
gfx_dynamicListData = (void*)vb;
}
void Gfx_DeleteDynamicVb(GfxResourceID* vb) {
cc_uintptr id = (cc_uintptr)(*vb);
if (id) Mem_Free((void*)id);
*vb = 0; *vb = 0;
} }
void Gfx_SetDynamicVbData(GfxResourceID vb, void* vertices, int vCount) { void Gfx_SetDynamicVbData(GfxResourceID vb, void* vertices, int vCount) {
gfx_activeList = gl_DYNAMICLISTID; Gfx_BindDynamicVb(vb);
gfx_dynamicListData = vertices; Mem_Copy((void*)vb, vertices, vCount * gfx_batchStride);
} }
static GLuint gl_lastPartialList; static GLuint gl_lastPartialList;

View File

@ -114,6 +114,16 @@ CC_API void Gfx_DeleteVb(GfxResourceID* vb);
/* Deletes the given index buffer, then sets it to 0. */ /* Deletes the given index buffer, then sets it to 0. */
CC_API void Gfx_DeleteIb(GfxResourceID* ib); CC_API void Gfx_DeleteIb(GfxResourceID* ib);
#ifndef CC_BUILD_GL11
/* Static and dynamic vertex buffers are drawn in the same way */
#define Gfx_BindDynamicVb Gfx_BindVb
#define Gfx_DeleteDynamicVb Gfx_DeleteVb
#else
/* OpenGL 1.1 draws static vertex buffers completely differently. */
void Gfx_BindDynamicVb(GfxResourceID vb);
void Gfx_DeleteDynamicVb(GfxResourceID* vb);
#endif
/* Sets the format of the rendered vertices. */ /* Sets the format of the rendered vertices. */
CC_API void Gfx_SetVertexFormat(VertexFormat fmt); CC_API void Gfx_SetVertexFormat(VertexFormat fmt);
/* Updates the data of a dynamic vertex buffer. */ /* Updates the data of a dynamic vertex buffer. */

View File

@ -2961,7 +2961,7 @@ static struct TexIdsOverlay {
static void TexIdsOverlay_ContextLost(void* screen) { static void TexIdsOverlay_ContextLost(void* screen) {
struct TexIdsOverlay* s = (struct TexIdsOverlay*)screen; struct TexIdsOverlay* s = (struct TexIdsOverlay*)screen;
Screen_ContextLost(s); Screen_ContextLost(s);
Gfx_DeleteVb(&s->dynamicVb); Gfx_DeleteDynamicVb(&s->dynamicVb);
TextAtlas_Free(&s->idAtlas); TextAtlas_Free(&s->idAtlas);
} }

View File

@ -372,7 +372,7 @@ static struct ModelTex* textures_tail;
#define Model_RetAABB(x1,y1,z1, x2,y2,z2) static struct AABB BB = { (x1)/16.0f,(y1)/16.0f,(z1)/16.0f, (x2)/16.0f,(y2)/16.0f,(z2)/16.0f }; e->ModelAABB = BB; #define Model_RetAABB(x1,y1,z1, x2,y2,z2) static struct AABB BB = { (x1)/16.0f,(y1)/16.0f,(z1)/16.0f, (x2)/16.0f,(y2)/16.0f,(z2)/16.0f }; e->ModelAABB = BB;
static void Models_ContextLost(void* obj) { static void Models_ContextLost(void* obj) {
Gfx_DeleteVb(&Models.Vb); Gfx_DeleteDynamicVb(&Models.Vb);
} }
static void Models_ContextRecreated(void* obj) { static void Models_ContextRecreated(void* obj) {

View File

@ -440,7 +440,7 @@ void Particles_RainSnowEffect(Vec3 pos) {
*---------------------------------------------------Particles component---------------------------------------------------* *---------------------------------------------------Particles component---------------------------------------------------*
*#########################################################################################################################*/ *#########################################################################################################################*/
static void OnContextLost(void* obj) { static void OnContextLost(void* obj) {
Gfx_DeleteVb(&Particles_VB); Gfx_DeleteDynamicVb(&Particles_VB);
} }
static void OnContextRecreated(void* obj) { static void OnContextRecreated(void* obj) {
Particles_VB = Gfx_CreateDynamicVb(VERTEX_FORMAT_P3FT2FC4B, PARTICLES_MAX * 4); Particles_VB = Gfx_CreateDynamicVb(VERTEX_FORMAT_P3FT2FC4B, PARTICLES_MAX * 4);

View File

@ -102,7 +102,7 @@ void PickedPosRenderer_Update(struct PickedPos* selected) {
*-----------------------------------------------PickedPosRenderer component-----------------------------------------------* *-----------------------------------------------PickedPosRenderer component-----------------------------------------------*
*#########################################################################################################################*/ *#########################################################################################################################*/
static void OnContextLost(void* obj) { static void OnContextLost(void* obj) {
Gfx_DeleteVb(&pickedPos_vb); Gfx_DeleteDynamicVb(&pickedPos_vb);
} }
static void OnContextRecreated(void* obj) { static void OnContextRecreated(void* obj) {

View File

@ -68,7 +68,7 @@ void Screen_Render2Widgets(void* screen, double delta) {
int i, offset = 0; int i, offset = 0;
Gfx_SetVertexFormat(VERTEX_FORMAT_P3FT2FC4B); Gfx_SetVertexFormat(VERTEX_FORMAT_P3FT2FC4B);
Gfx_BindVb(s->vb); Gfx_BindDynamicVb(s->vb);
for (i = 0; i < s->numWidgets; i++) { for (i = 0; i < s->numWidgets; i++) {
if (!widgets[i]) continue; if (!widgets[i]) continue;
@ -91,7 +91,7 @@ void Screen_ContextLost(void* screen) {
struct Screen* s = (struct Screen*)screen; struct Screen* s = (struct Screen*)screen;
struct Widget** widgets = s->widgets; struct Widget** widgets = s->widgets;
int i; int i;
Gfx_DeleteVb(&s->vb); Gfx_DeleteDynamicVb(&s->vb);
for (i = 0; i < s->numWidgets; i++) { for (i = 0; i < s->numWidgets; i++) {
if (!widgets[i]) continue; if (!widgets[i]) continue;

View File

@ -132,8 +132,8 @@ void Selections_Remove(cc_uint8 id) {
} }
static void Selections_ContextLost(void* obj) { static void Selections_ContextLost(void* obj) {
Gfx_DeleteVb(&selections_VB); Gfx_DeleteDynamicVb(&selections_VB);
Gfx_DeleteVb(&selections_LineVB); Gfx_DeleteDynamicVb(&selections_LineVB);
} }
static void Selections_ContextRecreated(void* obj) { static void Selections_ContextRecreated(void* obj) {

View File

@ -718,7 +718,7 @@ static void TableWidget_Render(void* widget, double delta) {
static void TableWidget_Free(void* widget) { static void TableWidget_Free(void* widget) {
struct TableWidget* w = (struct TableWidget*)widget; struct TableWidget* w = (struct TableWidget*)widget;
Gfx_DeleteVb(&w->vb); Gfx_DeleteDynamicVb(&w->vb);
Gfx_DeleteTexture(&w->descTex.ID); Gfx_DeleteTexture(&w->descTex.ID);
w->lastCreatedIndex = -1000; w->lastCreatedIndex = -1000;
} }