WIP on redesigning static VB code

This commit is contained in:
UnknownShadow200 2025-02-16 08:29:47 +11:00
parent 78e7887c7b
commit 55cd5bc3a0
5 changed files with 22 additions and 16 deletions

View File

@ -420,7 +420,8 @@ void Builder_MakeChunk(struct ChunkInfo* info) {
#ifndef CC_BUILD_GL11
/* add an extra element to fix crashing on some GPUs */
Builder_Vertices = (struct VertexTextured*)Gfx_RecreateAndLockVb(&info->vb,
info->vb = Gfx_CreateVb(VERTEX_FORMAT_TEXTURED, totalVerts + 1);
Builder_Vertices = (struct VertexTextured*)Gfx_LockVb(info->vb,
VERTEX_FORMAT_TEXTURED, totalVerts + 1);
#else
/* NOTE: Relies on assumption vb is ignored by GL11 Gfx_LockVb implementation */

View File

@ -173,8 +173,10 @@ static CC_NOINLINE void BuildClouds(void) {
z1 = -extent; z2 = World.Length + extent;
clouds_vertices = CalcNumVertices(x2 - x1, z2 - z1);
data = (struct VertexTextured*)Gfx_RecreateAndLockVb(&clouds_vb,
clouds_vb = Gfx_CreateVb(VERTEX_FORMAT_TEXTURED, clouds_vertices);
data = (struct VertexTextured*)Gfx_LockVb(clouds_vb,
VERTEX_FORMAT_TEXTURED, clouds_vertices);
DrawCloudsY(x1, z1, x2, z2, Env.CloudsHeight, data);
Gfx_UnlockVb(clouds_vb);
}
@ -239,8 +241,10 @@ static CC_NOINLINE void BuildSky(void) {
z1 = -extent; z2 = World.Length + extent;
sky_vertices = CalcNumVertices(x2 - x1, z2 - z1);
data = (struct VertexColoured*)Gfx_RecreateAndLockVb(&sky_vb,
sky_vb = Gfx_CreateVb(VERTEX_FORMAT_COLOURED, sky_vertices);
data = (struct VertexColoured*)Gfx_LockVb(sky_vb,
VERTEX_FORMAT_COLOURED, sky_vertices);
height = max((World.Height + 2), Env.CloudsHeight) + 6;
DrawSkyY(x1, z1, x2, z2, height, data);
Gfx_UnlockVb(sky_vb);
@ -307,8 +311,10 @@ static CC_NOINLINE void BuildSkybox(void) {
struct VertexTextured* data;
int i;
data = (struct VertexTextured*)Gfx_RecreateAndLockVb(&skybox_vb,
skybox_vb = Gfx_CreateVb(VERTEX_FORMAT_TEXTURED, SKYBOX_COUNT);
data = (struct VertexTextured*)Gfx_LockVb(skybox_vb,
VERTEX_FORMAT_TEXTURED, SKYBOX_COUNT);
Mem_Copy(data, vertices, sizeof(vertices));
for (i = 0; i < SKYBOX_COUNT; i++) { data[i].Col = Env.SkyboxCol; }
Gfx_UnlockVb(skybox_vb);
@ -703,7 +709,9 @@ static CC_NOINLINE void BuildMapSides(void) {
sides_vertices += CalcNumVertices(World.Width, World.Length); /* YQuads beneath map */
sides_vertices += 2 * CalcNumVertices(World.Width, Math_AbsI(y)); /* ZQuads */
sides_vertices += 2 * CalcNumVertices(World.Length, Math_AbsI(y)); /* XQuads */
data = (struct VertexTextured*)Gfx_RecreateAndLockVb(&sides_vb,
sides_vb = Gfx_CreateVb(VERTEX_FORMAT_TEXTURED, sides_vertices);
data = (struct VertexTextured*)Gfx_LockVb(sides_vb,
VERTEX_FORMAT_TEXTURED, sides_vertices);
sides_fullBright = Blocks.Brightness[block];
@ -748,7 +756,9 @@ static CC_NOINLINE void BuildMapEdges(void) {
r = rects[i];
edges_vertices += CalcNumVertices(r.width, r.height); /* YPlanes outside */
}
data = (struct VertexTextured*)Gfx_RecreateAndLockVb(&edges_vb,
edges_vb = Gfx_CreateVb(VERTEX_FORMAT_TEXTURED, edges_vertices);
data = (struct VertexTextured*)Gfx_LockVb(edges_vb,
VERTEX_FORMAT_TEXTURED, edges_vertices);
edges_fullBright = Blocks.Brightness[block];

View File

@ -98,8 +98,7 @@ extern const cc_string Gfx_LowPerfMessage;
#define GFX_MAX_INDICES (65536 / 4 * 6)
#define GFX_MAX_VERTICES 65536
void Gfx_RecreateTexture(GfxResourceID* tex, struct Bitmap* bmp, cc_uint8 flags, cc_bool mipmaps);
void* Gfx_RecreateAndLockVb(GfxResourceID* vb, VertexFormat fmt, int count);
void Gfx_RecreateTexture(GfxResourceID* tex, struct Bitmap* bmp, cc_uint8 flags, cc_bool mipmaps);
/*########################################################################################################################*

View File

@ -341,8 +341,10 @@ static void Init2DResources(void) {
Gfx_Create();
if (framebuffer_vb) return;
struct VertexTextured* data = (struct VertexTextured*)Gfx_RecreateAndLockVb(&framebuffer_vb,
VERTEX_FORMAT_TEXTURED, 4);
framebuffer_vb = Gfx_CreateVb(VERTEX_FORMAT_TEXTURED, 4);
struct VertexTextured* data = (struct VertexTextured*)Gfx_LockVb(framebuffer_vb,
VERTEX_FORMAT_TEXTURED, 4);
data[0].x = -1.0f; data[0].y = -1.0f; data[0].z = 0.0f; data[0].Col = PACKEDCOL_WHITE; data[0].U = 0.0f; data[0].V = 1.0f;
data[1].x = 1.0f; data[1].y = -1.0f; data[1].z = 0.0f; data[1].Col = PACKEDCOL_WHITE; data[1].U = 1.0f; data[1].V = 1.0f;
data[2].x = 1.0f; data[2].y = 1.0f; data[2].z = 0.0f; data[2].Col = PACKEDCOL_WHITE; data[2].U = 1.0f; data[2].V = 0.0f;

View File

@ -455,12 +455,6 @@ void Texture_RenderShaded(const struct Texture* tex, PackedCol shadeColor) {
/*########################################################################################################################*
*------------------------------------------------------Vertex buffers-----------------------------------------------------*
*#########################################################################################################################*/
void* Gfx_RecreateAndLockVb(GfxResourceID* vb, VertexFormat fmt, int count) {
Gfx_DeleteVb(vb);
*vb = Gfx_CreateVb(fmt, count);
return Gfx_LockVb(*vb, fmt, count);
}
static GfxResourceID Gfx_AllocStaticVb( VertexFormat fmt, int count);
static GfxResourceID Gfx_AllocDynamicVb(VertexFormat fmt, int maxVertices);