Properly populating vertex buffers.

This commit is contained in:
Rinnegatamante
2020-10-20 15:19:32 +02:00
parent e16a46bdd9
commit 296987f9eb
5 changed files with 14 additions and 33 deletions
+4 -4
View File
@@ -15,12 +15,10 @@
#include "rwgl3impl.h" #include "rwgl3impl.h"
#include "rwgl3shader.h" #include "rwgl3shader.h"
extern float *gVertexBuffer;
extern float *gVertexBufferIm2D; extern float *gVertexBufferIm2D;
extern uint16_t *gIndicesIm2D; extern uint16_t *gIndicesIm2D;
extern float *gVertexBufferIm3D; extern float *gVertexBufferIm3D;
extern uint16_t *gIndicesIm3D; extern uint16_t *gIndicesIm3D;
extern uint16_t *gIndices;
extern uint16_t *gConstIndices; extern uint16_t *gConstIndices;
namespace rw { namespace rw {
@@ -218,8 +216,6 @@ im3DTransform(void *vertices, int32 numVertices, Matrix *world, uint32 flags)
SetRenderStatePtr(TEXTURERASTER, nil); SetRenderStatePtr(TEXTURERASTER, nil);
memcpy_neon(gVertexBufferIm3D, vertices, numVertices*sizeof(Im3DVertex)); memcpy_neon(gVertexBufferIm3D, vertices, numVertices*sizeof(Im3DVertex));
vglVertexAttribPointerMapped(0, gVertexBufferIm3D);
gVertexBufferIm3D += numVertices*(sizeof(Im3DVertex)/sizeof(float));
#ifndef RW_GL_USE_VAOS #ifndef RW_GL_USE_VAOS
//setAttribPointers(im3dattribDesc, 3); //setAttribPointers(im3dattribDesc, 3);
@@ -232,6 +228,8 @@ im3DRenderPrimitive(PrimitiveType primType)
{ {
flushCache(); flushCache();
vglIndexPointerMapped(gConstIndices); vglIndexPointerMapped(gConstIndices);
vglVertexAttribPointerMapped(0, gVertexBufferIm3D);
gVertexBufferIm3D += num3DVertices*(sizeof(Im3DVertex)/sizeof(float));
vglDrawObjects(primTypeMap[primType], num3DVertices, GL_FALSE); vglDrawObjects(primTypeMap[primType], num3DVertices, GL_FALSE);
} }
@@ -240,6 +238,8 @@ im3DRenderIndexedPrimitive(PrimitiveType primType, void *indices, int32 numIndic
{ {
memcpy_neon(gIndicesIm3D, indices, numIndices * 2); memcpy_neon(gIndicesIm3D, indices, numIndices * 2);
vglIndexPointerMapped(gIndicesIm3D); vglIndexPointerMapped(gIndicesIm3D);
vglVertexAttribPointerMapped(0, gVertexBufferIm3D);
gVertexBufferIm3D += num3DVertices*(sizeof(Im3DVertex)/sizeof(float));
gIndicesIm3D += numIndices; gIndicesIm3D += numIndices;
flushCache(); flushCache();
+3 -6
View File
@@ -32,7 +32,7 @@ freeInstanceData(Geometry *geometry)
geometry->instData = nil; geometry->instData = nil;
rwFree(header->indexBuffer); rwFree(header->indexBuffer);
//rwFree(header->vertexBuffer); rwFree(header->vertexBuffer);
rwFree(header->attribDesc); rwFree(header->attribDesc);
rwFree(header); rwFree(header);
} }
@@ -226,7 +226,7 @@ defaultInstanceCB(Geometry *geo, InstanceDataHeader *header, bool32 reinstance)
// //
// Allocate vertex buffer // Allocate vertex buffer
// //
//header->vertexBuffer = rwNewT(uint8, header->totalNumVertex*stride, MEMDUR_EVENT | ID_GEOMETRY); header->vertexBuffer = rwNewT(uint8, header->totalNumVertex*stride, MEMDUR_EVENT | ID_GEOMETRY);
//assert(header->vbo == 0); //assert(header->vbo == 0);
//glGenBuffers(1, &header->vbo); //glGenBuffers(1, &header->vbo);
} }
@@ -237,7 +237,7 @@ defaultInstanceCB(Geometry *geo, InstanceDataHeader *header, bool32 reinstance)
// Fill vertex buffer // Fill vertex buffer
// //
uint8 *verts = (uint8*)gVertexBuffer; uint8 *verts = (uint8*)header->vertexBuffer;
// Positions // Positions
if(!reinstance || geo->lockedSinceInst&Geometry::LOCKVERTICES){ if(!reinstance || geo->lockedSinceInst&Geometry::LOCKVERTICES){
@@ -283,9 +283,6 @@ defaultInstanceCB(Geometry *geo, InstanceDataHeader *header, bool32 reinstance)
header->totalNumVertex, a->stride); header->totalNumVertex, a->stride);
} }
} }
vglVertexAttribPointerMapped(0, gVertexBuffer);
gVertexBuffer += (header->totalNumVertex*attribs[0].stride) / sizeof(float);
} }
void void
+5 -2
View File
@@ -30,8 +30,11 @@ drawInst_simple(InstanceDataHeader *header, InstanceData *inst)
{ {
flushCache(); flushCache();
memcpy_neon(gIndices, (uint8_t*)header->indexBuffer + inst->offset, inst->numIndex * 2); memcpy_neon(gIndices, (uint8_t*)header->indexBuffer + inst->offset, inst->numIndex * 2);
vglIndexPointerMapped(gIndices + inst->offset); vglIndexPointerMapped(gIndices);
gIndices += inst->numIndex; gIndices += inst->numIndex;
memcpy_neon(gVertexBuffer, (uint8_t*)header->vertexBuffer, inst->numVertices * header->attribDesc[0].stride);
vglVertexAttribPointerMapped(0, gVertexBuffer);
gVertexBuffer += (inst->numVertices * header->attribDesc[0].stride) / sizeof(float);
vglDrawObjects(header->primType, inst->numIndex, GL_FALSE); vglDrawObjects(header->primType, inst->numIndex, GL_FALSE);
} }
@@ -81,7 +84,7 @@ drawInst(InstanceDataHeader *header, InstanceData *inst)
void void
setAttribPointers(AttribDesc *attribDescs, int32 numAttribs) setAttribPointers(AttribDesc *attribDescs, int32 numAttribs)
{ {
vglVertexAttribPointerMapped(0, gVertexBuffer); //vglVertexAttribPointerMapped(0, gVertexBuffer);
} }
void void
+2 -5
View File
@@ -119,7 +119,7 @@ skinInstanceCB(Geometry *geo, InstanceDataHeader *header, bool32 reinstance)
// //
// Allocate vertex buffer // Allocate vertex buffer
// //
//header->vertexBuffer = rwNewT(uint8, header->totalNumVertex*stride, MEMDUR_EVENT | ID_GEOMETRY); header->vertexBuffer = rwNewT(uint8, header->totalNumVertex*stride, MEMDUR_EVENT | ID_GEOMETRY);
//assert(header->vbo == 0); //assert(header->vbo == 0);
//glGenBuffers(1, &header->vbo); //glGenBuffers(1, &header->vbo);
} }
@@ -131,7 +131,7 @@ skinInstanceCB(Geometry *geo, InstanceDataHeader *header, bool32 reinstance)
// Fill vertex buffer // Fill vertex buffer
// //
uint8 *verts = (uint8*)gVertexBuffer; uint8 *verts = (uint8*)header->vertexBuffer;
// Positions // Positions
if(!reinstance || geo->lockedSinceInst&Geometry::LOCKVERTICES){ if(!reinstance || geo->lockedSinceInst&Geometry::LOCKVERTICES){
@@ -190,9 +190,6 @@ skinInstanceCB(Geometry *geo, InstanceDataHeader *header, bool32 reinstance)
(RGBA*)skin->indices, (RGBA*)skin->indices,
header->totalNumVertex, a->stride); header->totalNumVertex, a->stride);
} }
vglVertexAttribPointerMapped(0, gVertexBuffer);
gVertexBuffer += (header->totalNumVertex*attribs[0].stride) / sizeof(float);
} }
void void
-16
View File
@@ -91,22 +91,6 @@ printAttribInfo(AttribDesc *attribs, int n)
} }
*/ */
#ifdef RW_OPENGL
void
setAttribPointers(InstanceDataHeader *inst)
{
static GLenum attribType[] = {
GL_FLOAT,
GL_BYTE, GL_UNSIGNED_BYTE,
GL_SHORT, GL_UNSIGNED_SHORT
};
for(int32 i = 0; i < inst->numAttribs; i++){
AttribDesc *a = &inst->attribs[i];
vglVertexAttribPointerMapped(a->index, (void*)(uint64)a->offset);
}
}
#endif
void void
packattrib(uint8 *dst, float32 *src, AttribDesc *a, float32 scale=1.0f) packattrib(uint8 *dst, float32 *src, AttribDesc *a, float32 scale=1.0f)
{ {