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