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 "rwgl3shader.h"
extern float *gVertexBuffer;
extern float *gVertexBufferIm2D;
extern uint16_t *gIndicesIm2D;
extern float *gVertexBufferIm3D;
extern uint16_t *gIndicesIm3D;
extern uint16_t *gIndices;
extern uint16_t *gConstIndices;
namespace rw {
@@ -218,8 +216,6 @@ im3DTransform(void *vertices, int32 numVertices, Matrix *world, uint32 flags)
SetRenderStatePtr(TEXTURERASTER, nil);
memcpy_neon(gVertexBufferIm3D, vertices, numVertices*sizeof(Im3DVertex));
vglVertexAttribPointerMapped(0, gVertexBufferIm3D);
gVertexBufferIm3D += numVertices*(sizeof(Im3DVertex)/sizeof(float));
#ifndef RW_GL_USE_VAOS
//setAttribPointers(im3dattribDesc, 3);
@@ -232,6 +228,8 @@ im3DRenderPrimitive(PrimitiveType primType)
{
flushCache();
vglIndexPointerMapped(gConstIndices);
vglVertexAttribPointerMapped(0, gVertexBufferIm3D);
gVertexBufferIm3D += num3DVertices*(sizeof(Im3DVertex)/sizeof(float));
vglDrawObjects(primTypeMap[primType], num3DVertices, GL_FALSE);
}
@@ -240,6 +238,8 @@ im3DRenderIndexedPrimitive(PrimitiveType primType, void *indices, int32 numIndic
{
memcpy_neon(gIndicesIm3D, indices, numIndices * 2);
vglIndexPointerMapped(gIndicesIm3D);
vglVertexAttribPointerMapped(0, gVertexBufferIm3D);
gVertexBufferIm3D += num3DVertices*(sizeof(Im3DVertex)/sizeof(float));
gIndicesIm3D += numIndices;
flushCache();
+3 -6
View File
@@ -32,7 +32,7 @@ freeInstanceData(Geometry *geometry)
geometry->instData = nil;
rwFree(header->indexBuffer);
//rwFree(header->vertexBuffer);
rwFree(header->vertexBuffer);
rwFree(header->attribDesc);
rwFree(header);
}
@@ -226,7 +226,7 @@ defaultInstanceCB(Geometry *geo, InstanceDataHeader *header, bool32 reinstance)
//
// 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);
//glGenBuffers(1, &header->vbo);
}
@@ -237,7 +237,7 @@ defaultInstanceCB(Geometry *geo, InstanceDataHeader *header, bool32 reinstance)
// Fill vertex buffer
//
uint8 *verts = (uint8*)gVertexBuffer;
uint8 *verts = (uint8*)header->vertexBuffer;
// Positions
if(!reinstance || geo->lockedSinceInst&Geometry::LOCKVERTICES){
@@ -283,9 +283,6 @@ defaultInstanceCB(Geometry *geo, InstanceDataHeader *header, bool32 reinstance)
header->totalNumVertex, a->stride);
}
}
vglVertexAttribPointerMapped(0, gVertexBuffer);
gVertexBuffer += (header->totalNumVertex*attribs[0].stride) / sizeof(float);
}
void
+5 -2
View File
@@ -30,8 +30,11 @@ drawInst_simple(InstanceDataHeader *header, InstanceData *inst)
{
flushCache();
memcpy_neon(gIndices, (uint8_t*)header->indexBuffer + inst->offset, inst->numIndex * 2);
vglIndexPointerMapped(gIndices + inst->offset);
vglIndexPointerMapped(gIndices);
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);
}
@@ -81,7 +84,7 @@ drawInst(InstanceDataHeader *header, InstanceData *inst)
void
setAttribPointers(AttribDesc *attribDescs, int32 numAttribs)
{
vglVertexAttribPointerMapped(0, gVertexBuffer);
//vglVertexAttribPointerMapped(0, gVertexBuffer);
}
void
+2 -5
View File
@@ -119,7 +119,7 @@ skinInstanceCB(Geometry *geo, InstanceDataHeader *header, bool32 reinstance)
//
// 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);
//glGenBuffers(1, &header->vbo);
}
@@ -131,7 +131,7 @@ skinInstanceCB(Geometry *geo, InstanceDataHeader *header, bool32 reinstance)
// Fill vertex buffer
//
uint8 *verts = (uint8*)gVertexBuffer;
uint8 *verts = (uint8*)header->vertexBuffer;
// Positions
if(!reinstance || geo->lockedSinceInst&Geometry::LOCKVERTICES){
@@ -190,9 +190,6 @@ skinInstanceCB(Geometry *geo, InstanceDataHeader *header, bool32 reinstance)
(RGBA*)skin->indices,
header->totalNumVertex, a->stride);
}
vglVertexAttribPointerMapped(0, gVertexBuffer);
gVertexBuffer += (header->totalNumVertex*attribs[0].stride) / sizeof(float);
}
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
packattrib(uint8 *dst, float32 *src, AttribDesc *a, float32 scale=1.0f)
{