Properly populating vertex buffers.
This commit is contained in:
+4
-4
@@ -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
@@ -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
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user