mirror of
https://github.com/aap/librw.git
synced 2025-12-20 17:39:49 +00:00
worked on allocation
This commit is contained in:
@@ -187,7 +187,7 @@ createIndexBuffer(uint32 length)
|
||||
d3ddevice->CreateIndexBuffer(length, D3DUSAGE_WRITEONLY, D3DFMT_INDEX16, D3DPOOL_MANAGED, &ibuf, 0);
|
||||
return ibuf;
|
||||
#else
|
||||
return new uint8[length];
|
||||
return rwNewT(uint8, length, MEMDUR_EVENT | ID_DRIVER);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -230,7 +230,7 @@ createVertexBuffer(uint32 length, uint32 fvf, int32 pool)
|
||||
#else
|
||||
(void)fvf;
|
||||
(void)pool;
|
||||
return new uint8[length];
|
||||
return rwNewT(uint8, length, MEMDUR_EVENT | ID_DRIVER);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -282,7 +282,8 @@ createTexture(int32 width, int32 height, int32 numlevels, uint32 format)
|
||||
h /= 2;
|
||||
if(h == 0) h = 1;
|
||||
}
|
||||
uint8 *data = new uint8[sizeof(RasterLevels)+sizeof(RasterLevels::Level)*(numlevels-1)+size];
|
||||
uint8 *data = (uint8*)rwNew(sizeof(RasterLevels)+sizeof(RasterLevels::Level)*(numlevels-1)+size,
|
||||
MEMDUR_EVENT | ID_DRIVER);
|
||||
RasterLevels *levels = (RasterLevels*)data;
|
||||
data += sizeof(RasterLevels)+sizeof(RasterLevels::Level)*(numlevels-1);
|
||||
levels->numlevels = numlevels;
|
||||
@@ -338,7 +339,7 @@ deleteObject(void *object)
|
||||
IUnknown *unk = (IUnknown*)object;
|
||||
unk->Release();
|
||||
#else
|
||||
delete[] (uint*)object;
|
||||
rwFree(object);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -379,7 +380,7 @@ rasterCreate(Raster *raster)
|
||||
uint32 format;
|
||||
if(raster->format & (Raster::PAL4 | Raster::PAL8)){
|
||||
format = D3DFMT_P8;
|
||||
natras->palette = new uint8[4*256];
|
||||
natras->palette = (uint8*)rwNew(4*256, MEMDUR_EVENT | ID_DRIVER);
|
||||
}else
|
||||
format = formatMap[(raster->format >> 8) & 0xF];
|
||||
natras->format = 0;
|
||||
|
||||
@@ -91,8 +91,8 @@ destroyNativeData(void *object, int32, int32)
|
||||
deleteObject(inst->vertexBuffer);
|
||||
inst++;
|
||||
}
|
||||
delete[] header->inst;
|
||||
delete header;
|
||||
rwFree(header->inst);
|
||||
rwFree(header);
|
||||
return object;
|
||||
}
|
||||
|
||||
@@ -110,17 +110,17 @@ readNativeData(Stream *stream, int32, void *object, int32, int32)
|
||||
RWERROR((ERR_PLATFORM, platform));
|
||||
return nil;
|
||||
}
|
||||
InstanceDataHeader *header = new InstanceDataHeader;
|
||||
InstanceDataHeader *header = rwNewT(InstanceDataHeader, 1, MEMDUR_EVENT | ID_GEOMETRY);
|
||||
geometry->instData = header;
|
||||
header->platform = PLATFORM_D3D8;
|
||||
|
||||
int32 size = stream->readI32();
|
||||
uint8 *data = new uint8[size];
|
||||
uint8 *data = rwNewT(uint8, size, MEMDUR_FUNCTION | ID_GEOMETRY);
|
||||
stream->read(data, size);
|
||||
uint8 *p = data;
|
||||
header->serialNumber = *(uint16*)p; p += 2;
|
||||
header->numMeshes = *(uint16*)p; p += 2;
|
||||
header->inst = new InstanceData[header->numMeshes];
|
||||
header->inst = rwNewT(InstanceData, header->numMeshes, MEMDUR_EVENT | ID_GEOMETRY);
|
||||
|
||||
InstanceData *inst = header->inst;
|
||||
for(uint32 i = 0; i < header->numMeshes; i++){
|
||||
@@ -140,7 +140,7 @@ readNativeData(Stream *stream, int32, void *object, int32, int32)
|
||||
inst->remapped = 0; p++; // TODO: really unused? and what's that anyway?
|
||||
inst++;
|
||||
}
|
||||
delete[] data;
|
||||
rwFree(data);
|
||||
|
||||
inst = header->inst;
|
||||
for(uint32 i = 0; i < header->numMeshes; i++){
|
||||
@@ -172,7 +172,7 @@ writeNativeData(Stream *stream, int32 len, void *object, int32, int32)
|
||||
InstanceDataHeader *header = (InstanceDataHeader*)geometry->instData;
|
||||
|
||||
int32 size = 4 + geometry->meshHeader->numMeshes*0x2C;
|
||||
uint8 *data = new uint8[size];
|
||||
uint8 *data = rwNewT(uint8, size, MEMDUR_FUNCTION | ID_GEOMETRY);
|
||||
stream->writeI32(size);
|
||||
uint8 *p = data;
|
||||
*(uint16*)p = header->serialNumber; p += 2;
|
||||
@@ -197,7 +197,7 @@ writeNativeData(Stream *stream, int32 len, void *object, int32, int32)
|
||||
inst++;
|
||||
}
|
||||
stream->write(data, size);
|
||||
delete[] data;
|
||||
rwFree(data);
|
||||
|
||||
inst = header->inst;
|
||||
for(uint32 i = 0; i < header->numMeshes; i++){
|
||||
@@ -251,17 +251,17 @@ instance(rw::ObjPipeline *rwpipe, Atomic *atomic)
|
||||
// TODO: allow for REINSTANCE
|
||||
if(geo->instData)
|
||||
return;
|
||||
InstanceDataHeader *header = new InstanceDataHeader;
|
||||
InstanceDataHeader *header = rwNewT(InstanceDataHeader, 1, MEMDUR_EVENT | ID_GEOMETRY);
|
||||
MeshHeader *meshh = geo->meshHeader;
|
||||
geo->instData = header;
|
||||
header->platform = PLATFORM_D3D8;
|
||||
|
||||
header->serialNumber = 0;
|
||||
header->numMeshes = meshh->numMeshes;
|
||||
header->inst = new InstanceData[header->numMeshes];
|
||||
header->inst = rwNewT(InstanceData, header->numMeshes, MEMDUR_EVENT | ID_GEOMETRY);
|
||||
|
||||
InstanceData *inst = header->inst;
|
||||
Mesh *mesh = meshh->mesh;
|
||||
Mesh *mesh = meshh->getMeshes();
|
||||
for(uint32 i = 0; i < header->numMeshes; i++){
|
||||
findMinVertAndNumVertices(mesh->indices, mesh->numIndices,
|
||||
&inst->minVert, &inst->numVertices);
|
||||
@@ -299,13 +299,13 @@ uninstance(rw::ObjPipeline *rwpipe, Atomic *atomic)
|
||||
return;
|
||||
assert(geo->instData != nil);
|
||||
assert(geo->instData->platform == PLATFORM_D3D8);
|
||||
geo->flags &= ~Geometry::NATIVE;
|
||||
geo->numTriangles = geo->meshHeader->guessNumTriangles();
|
||||
geo->allocateData();
|
||||
geo->meshHeader->allocateIndices();
|
||||
geo->allocateMeshes(geo->meshHeader->numMeshes, geo->meshHeader->totalIndices, 0);
|
||||
|
||||
InstanceDataHeader *header = (InstanceDataHeader*)geo->instData;
|
||||
InstanceData *inst = header->inst;
|
||||
Mesh *mesh = geo->meshHeader->mesh;
|
||||
Mesh *mesh = geo->meshHeader->getMeshes();
|
||||
for(uint32 i = 0; i < header->numMeshes; i++){
|
||||
uint16 *indices = lockIndices(inst->indexBuffer, 0, 0, 0);
|
||||
if(inst->minVert == 0)
|
||||
@@ -320,6 +320,7 @@ uninstance(rw::ObjPipeline *rwpipe, Atomic *atomic)
|
||||
inst++;
|
||||
}
|
||||
geo->generateTriangles();
|
||||
geo->flags &= ~Geometry::NATIVE;
|
||||
destroyNativeData(geo, 0, 0);
|
||||
}
|
||||
|
||||
@@ -448,7 +449,7 @@ readAsImage(Stream *stream, int32 width, int32 height, int32 depth, int32 format
|
||||
for(int32 i = 0; i < numLevels; i++){
|
||||
uint32 size = stream->readU32();
|
||||
if(i == 0){
|
||||
data = new uint8[size];
|
||||
data = rwNewT(uint8, size, MEMDUR_FUNCTION | ID_IMAGE);
|
||||
stream->read(data, size);
|
||||
}else
|
||||
stream->seek(size);
|
||||
@@ -471,7 +472,7 @@ readAsImage(Stream *stream, int32 width, int32 height, int32 depth, int32 format
|
||||
}
|
||||
}
|
||||
|
||||
delete[] data;
|
||||
rwFree(data);
|
||||
Raster *ras = Raster::createFromImage(img, PLATFORM_D3D8);
|
||||
img->destroy();
|
||||
return ras;
|
||||
|
||||
@@ -71,7 +71,7 @@ createVertexDeclaration(VertexElement *elements)
|
||||
VertexElement *e = (VertexElement*)elements;
|
||||
while(e[n++].stream != 0xFF)
|
||||
;
|
||||
e = (VertexElement*)new uint8[n*sizeof(VertexElement)];
|
||||
e = rwNewT(VertexElement, n, MEMDUR_EVENT | ID_DRIVER);
|
||||
memcpy(e, elements, n*sizeof(VertexElement));
|
||||
return e;
|
||||
#endif
|
||||
@@ -111,8 +111,8 @@ destroyNativeData(void *object, int32, int32)
|
||||
deleteObject(header->indexBuffer);
|
||||
deleteObject(header->vertexStream[0].vertexBuffer);
|
||||
deleteObject(header->vertexStream[1].vertexBuffer);
|
||||
delete[] header->inst;
|
||||
delete header;
|
||||
rwFree(header->inst);
|
||||
rwFree(header);
|
||||
return object;
|
||||
}
|
||||
|
||||
@@ -130,12 +130,12 @@ readNativeData(Stream *stream, int32, void *object, int32, int32)
|
||||
RWERROR((ERR_PLATFORM, platform));
|
||||
return nil;
|
||||
}
|
||||
InstanceDataHeader *header = new InstanceDataHeader;
|
||||
InstanceDataHeader *header = rwNewT(InstanceDataHeader, 1, MEMDUR_EVENT | ID_GEOMETRY);
|
||||
geometry->instData = header;
|
||||
header->platform = PLATFORM_D3D9;
|
||||
|
||||
int32 size = stream->readI32();
|
||||
uint8 *data = new uint8[size];
|
||||
uint8 *data = rwNewT(uint8, size, MEMDUR_FUNCTION | ID_GEOMETRY);
|
||||
stream->read(data, size);
|
||||
uint8 *p = data;
|
||||
header->serialNumber = *(uint32*)p; p += 4;
|
||||
@@ -147,7 +147,7 @@ readNativeData(Stream *stream, int32, void *object, int32, int32)
|
||||
header->vertexDeclaration = nil; p += 4;
|
||||
header->totalNumIndex = *(uint32*)p; p += 4;
|
||||
header->totalNumVertex = *(uint32*)p; p += 4;
|
||||
header->inst = new InstanceData[header->numMeshes];
|
||||
header->inst = rwNewT(InstanceData, header->numMeshes, MEMDUR_EVENT | ID_GEOMETRY);
|
||||
|
||||
InstanceData *inst = header->inst;
|
||||
for(uint32 i = 0; i < header->numMeshes; i++){
|
||||
@@ -203,7 +203,7 @@ readNativeData(Stream *stream, int32, void *object, int32, int32)
|
||||
inst++;
|
||||
}
|
||||
|
||||
delete[] data;
|
||||
rwFree(data);
|
||||
return stream;
|
||||
}
|
||||
|
||||
@@ -218,7 +218,7 @@ writeNativeData(Stream *stream, int32 len, void *object, int32, int32)
|
||||
stream->writeU32(PLATFORM_D3D9);
|
||||
InstanceDataHeader *header = (InstanceDataHeader*)geometry->instData;
|
||||
int32 size = 64 + geometry->meshHeader->numMeshes*36;
|
||||
uint8 *data = new uint8[size];
|
||||
uint8 *data = rwNewT(uint8, size, MEMDUR_FUNCTION | ID_GEOMETRY);
|
||||
stream->writeI32(size);
|
||||
|
||||
uint8 *p = data;
|
||||
@@ -276,7 +276,7 @@ writeNativeData(Stream *stream, int32 len, void *object, int32, int32)
|
||||
unlockVertices(s->vertexBuffer);
|
||||
}
|
||||
|
||||
delete[] data;
|
||||
rwFree(data);
|
||||
return stream;
|
||||
}
|
||||
|
||||
@@ -316,7 +316,7 @@ instance(rw::ObjPipeline *rwpipe, Atomic *atomic)
|
||||
// TODO: allow for REINSTANCE
|
||||
if(geo->instData)
|
||||
return;
|
||||
InstanceDataHeader *header = new InstanceDataHeader;
|
||||
InstanceDataHeader *header = rwNewT(InstanceDataHeader, 1, MEMDUR_EVENT | ID_GEOMETRY);
|
||||
MeshHeader *meshh = geo->meshHeader;
|
||||
geo->instData = header;
|
||||
header->platform = PLATFORM_D3D9;
|
||||
@@ -327,13 +327,13 @@ instance(rw::ObjPipeline *rwpipe, Atomic *atomic)
|
||||
header->useOffsets = 0;
|
||||
header->totalNumVertex = geo->numVertices;
|
||||
header->totalNumIndex = meshh->totalIndices;
|
||||
header->inst = new InstanceData[header->numMeshes];
|
||||
header->inst = rwNewT(InstanceData, header->numMeshes, MEMDUR_EVENT | ID_GEOMETRY);
|
||||
|
||||
header->indexBuffer = createIndexBuffer(header->totalNumIndex*2);
|
||||
|
||||
uint16 *indices = lockIndices(header->indexBuffer, 0, 0, 0);
|
||||
InstanceData *inst = header->inst;
|
||||
Mesh *mesh = meshh->mesh;
|
||||
Mesh *mesh = meshh->getMeshes();
|
||||
uint32 startindex = 0;
|
||||
for(uint32 i = 0; i < header->numMeshes; i++){
|
||||
findMinVertAndNumVertices(mesh->indices, mesh->numIndices,
|
||||
@@ -370,14 +370,14 @@ uninstance(rw::ObjPipeline *rwpipe, Atomic *atomic)
|
||||
return;
|
||||
assert(geo->instData != nil);
|
||||
assert(geo->instData->platform == PLATFORM_D3D9);
|
||||
geo->flags &= ~Geometry::NATIVE;
|
||||
geo->numTriangles = geo->meshHeader->guessNumTriangles();
|
||||
geo->allocateData();
|
||||
geo->meshHeader->allocateIndices();
|
||||
geo->allocateMeshes(geo->meshHeader->numMeshes, geo->meshHeader->totalIndices, 0);
|
||||
|
||||
InstanceDataHeader *header = (InstanceDataHeader*)geo->instData;
|
||||
uint16 *indices = lockIndices(header->indexBuffer, 0, 0, 0);
|
||||
InstanceData *inst = header->inst;
|
||||
Mesh *mesh = geo->meshHeader->mesh;
|
||||
Mesh *mesh = geo->meshHeader->getMeshes();
|
||||
for(uint32 i = 0; i < header->numMeshes; i++){
|
||||
if(inst->minVert == 0)
|
||||
memcpy(mesh->indices, &indices[inst->startIndex], inst->numIndex*2);
|
||||
@@ -391,6 +391,7 @@ uninstance(rw::ObjPipeline *rwpipe, Atomic *atomic)
|
||||
|
||||
pipe->uninstanceCB(geo, header);
|
||||
geo->generateTriangles();
|
||||
geo->flags &= ~Geometry::NATIVE;
|
||||
destroyNativeData(geo, 0, 0);
|
||||
}
|
||||
|
||||
|
||||
@@ -57,10 +57,10 @@ destroyNativeData(void *object, int32, int32)
|
||||
InstanceDataHeader *header =
|
||||
(InstanceDataHeader*)geometry->instData;
|
||||
geometry->instData = nil;
|
||||
delete[] (uint8*)header->vertexBuffer;
|
||||
delete[] header->begin;
|
||||
delete[] header->data;
|
||||
delete header;
|
||||
rwFree(header->vertexBuffer);
|
||||
rwFree(header->begin);
|
||||
rwFree(header->data);
|
||||
rwFree(header);
|
||||
return object;
|
||||
}
|
||||
|
||||
@@ -83,14 +83,14 @@ readNativeData(Stream *stream, int32, void *object, int32, int32)
|
||||
RWERROR((ERR_VERSION, vers));
|
||||
return nil;
|
||||
}
|
||||
InstanceDataHeader *header = new InstanceDataHeader;
|
||||
InstanceDataHeader *header = rwNewT(InstanceDataHeader, 1, MEMDUR_EVENT | ID_GEOMETRY);
|
||||
geometry->instData = header;
|
||||
header->platform = PLATFORM_XBOX;
|
||||
|
||||
int32 size = stream->readI32();
|
||||
// The 0x18 byte are the resentryheader.
|
||||
// We don't have it but it's used for alignment.
|
||||
header->data = new uint8[size + 0x18];
|
||||
header->data = rwNewT(uint8, size + 0x18, MEMDUR_EVENT | ID_GEOMETRY);
|
||||
uint8 *p = header->data+0x18+4;
|
||||
stream->read(p, size-4);
|
||||
|
||||
@@ -105,7 +105,7 @@ readNativeData(Stream *stream, int32, void *object, int32, int32)
|
||||
header->vertexAlpha = *(bool32*)p; p += 4;
|
||||
p += 8; // skip begin, end pointers
|
||||
|
||||
InstanceData *inst = new InstanceData[header->numMeshes];
|
||||
InstanceData *inst = rwNewT(InstanceData, header->numMeshes, MEMDUR_EVENT | ID_GEOMETRY);
|
||||
header->begin = inst;
|
||||
for(int i = 0; i < header->numMeshes; i++){
|
||||
inst->minVert = *(uint32*)p; p += 4;
|
||||
@@ -119,7 +119,7 @@ readNativeData(Stream *stream, int32, void *object, int32, int32)
|
||||
}
|
||||
header->end = inst;
|
||||
|
||||
header->vertexBuffer = new uint8[header->stride*header->numVertices];
|
||||
header->vertexBuffer = rwNewT(uint8, header->stride*header->numVertices, MEMDUR_EVENT | ID_GEOMETRY);
|
||||
stream->read(header->vertexBuffer, header->stride*header->numVertices);
|
||||
return stream;
|
||||
}
|
||||
@@ -200,18 +200,18 @@ instance(rw::ObjPipeline *rwpipe, Atomic *atomic)
|
||||
// TODO: allow for REINSTANCE (or not, xbox can't render)
|
||||
if(geo->instData)
|
||||
return;
|
||||
InstanceDataHeader *header = new InstanceDataHeader;
|
||||
InstanceDataHeader *header = rwNewT(InstanceDataHeader, 1, MEMDUR_EVENT | ID_GEOMETRY);
|
||||
MeshHeader *meshh = geo->meshHeader;
|
||||
geo->instData = header;
|
||||
header->platform = PLATFORM_XBOX;
|
||||
|
||||
header->size = 0x24 + meshh->numMeshes*0x18 + 0x10;
|
||||
Mesh *mesh = meshh->mesh;
|
||||
Mesh *mesh = meshh->getMeshes();
|
||||
for(uint32 i = 0; i < meshh->numMeshes; i++)
|
||||
header->size += (mesh++->numIndices*2 + 0xF) & ~0xF;
|
||||
// The 0x18 byte are the resentryheader.
|
||||
// We don't have it but it's used for alignment.
|
||||
header->data = new uint8[header->size + 0x18];
|
||||
header->data = rwNewT(uint8, header->size + 0x18, MEMDUR_EVENT | ID_GEOMETRY);
|
||||
header->serialNumber = 0;
|
||||
header->numMeshes = meshh->numMeshes;
|
||||
header->primType = meshh->flags == 1 ? D3DPT_TRIANGLESTRIP : D3DPT_TRIANGLELIST;
|
||||
@@ -221,9 +221,9 @@ instance(rw::ObjPipeline *rwpipe, Atomic *atomic)
|
||||
header->stride = 0;
|
||||
header->vertexBuffer = nil;
|
||||
|
||||
InstanceData *inst = new InstanceData[header->numMeshes];
|
||||
InstanceData *inst = rwNewT(InstanceData, header->numMeshes, MEMDUR_EVENT | ID_GEOMETRY);
|
||||
header->begin = inst;
|
||||
mesh = meshh->mesh;
|
||||
mesh = meshh->getMeshes();
|
||||
uint8 *indexbuf = (uint8*)header->data + ((0x18 + 0x24 + header->numMeshes*0x18 + 0xF)&~0xF);
|
||||
for(uint32 i = 0; i < header->numMeshes; i++){
|
||||
findMinVertAndNumVertices(mesh->indices, mesh->numIndices,
|
||||
@@ -251,13 +251,13 @@ uninstance(rw::ObjPipeline *rwpipe, Atomic *atomic)
|
||||
return;
|
||||
assert(geo->instData != nil);
|
||||
assert(geo->instData->platform == PLATFORM_XBOX);
|
||||
geo->flags &= ~Geometry::NATIVE;
|
||||
geo->numTriangles = geo->meshHeader->guessNumTriangles();
|
||||
geo->allocateData();
|
||||
geo->meshHeader->allocateIndices();
|
||||
geo->allocateMeshes(geo->meshHeader->numMeshes, geo->meshHeader->totalIndices, 0);
|
||||
|
||||
InstanceDataHeader *header = (InstanceDataHeader*)geo->instData;
|
||||
InstanceData *inst = header->begin;
|
||||
Mesh *mesh = geo->meshHeader->mesh;
|
||||
Mesh *mesh = geo->meshHeader->getMeshes();
|
||||
for(uint32 i = 0; i < header->numMeshes; i++){
|
||||
uint16 *indices = (uint16*)inst->indexBuffer;
|
||||
memcpy(mesh->indices, indices, inst->numIndices*2);
|
||||
@@ -267,6 +267,7 @@ uninstance(rw::ObjPipeline *rwpipe, Atomic *atomic)
|
||||
|
||||
pipe->uninstanceCB(geo, header);
|
||||
geo->generateTriangles();
|
||||
geo->flags &= ~Geometry::NATIVE;
|
||||
destroyNativeData(geo, 0, 0);
|
||||
}
|
||||
|
||||
@@ -295,7 +296,7 @@ defaultInstanceCB(Geometry *geo, InstanceDataHeader *header)
|
||||
if(*vertexFmt == 0)
|
||||
*vertexFmt = makeVertexFmt(geo->flags, geo->numTexCoordSets);
|
||||
header->stride = getVertexFmtStride(*vertexFmt);
|
||||
header->vertexBuffer = new uint8[header->stride*header->numVertices];
|
||||
header->vertexBuffer = rwNewT(uint8, header->stride*header->numVertices, MEMDUR_EVENT | ID_GEOMETRY);
|
||||
uint8 *dst = (uint8*)header->vertexBuffer;
|
||||
|
||||
uint32 fmt = *vertexFmt;
|
||||
@@ -476,7 +477,8 @@ createTexture(int32 width, int32 height, int32 numlevels, uint32 format)
|
||||
if(h == 0) h = 1;
|
||||
}
|
||||
size = (size+3)&~3;
|
||||
uint8 *data = new uint8[sizeof(RasterLevels)+sizeof(RasterLevels::Level)*(numlevels-1)+size];
|
||||
uint8 *data = (uint8*)rwNew(sizeof(RasterLevels)+sizeof(RasterLevels::Level)*(numlevels-1)+size,
|
||||
MEMDUR_EVENT | ID_DRIVER);
|
||||
RasterLevels *levels = (RasterLevels*)data;
|
||||
data += sizeof(RasterLevels)+sizeof(RasterLevels::Level)*(numlevels-1);
|
||||
levels->numlevels = numlevels;
|
||||
@@ -536,7 +538,7 @@ rasterCreate(Raster *raster)
|
||||
uint32 format;
|
||||
if(raster->format & (Raster::PAL4 | Raster::PAL8)){
|
||||
format = D3DFMT_P8;
|
||||
natras->palette = new uint8[4*256];
|
||||
natras->palette = (uint8*)rwNew(4*256, MEMDUR_EVENT | ID_DRIVER);
|
||||
}else
|
||||
format = formatMap[(raster->format >> 8) & 0xF];
|
||||
natras->format = 0;
|
||||
|
||||
@@ -48,12 +48,12 @@ readNativeSkin(Stream *stream, int32, void *object, int32 offset)
|
||||
return nil;
|
||||
}
|
||||
|
||||
Skin *skin = new Skin;
|
||||
Skin *skin = rwNewT(Skin, 1, MEMDUR_EVENT | ID_SKIN);
|
||||
*PLUGINOFFSET(Skin*, geometry, offset) = skin;
|
||||
|
||||
int32 numBones = stream->readI32();
|
||||
skin->init(numBones, 0, 0);
|
||||
NativeSkin *natskin = new NativeSkin;
|
||||
NativeSkin *natskin = rwNewT(NativeSkin, 1, MEMDUR_EVENT | ID_SKIN);
|
||||
skin->platformData = natskin;
|
||||
stream->read(natskin->table1, 256*sizeof(int32));
|
||||
stream->read(natskin->table2, 256*sizeof(int32));
|
||||
@@ -62,7 +62,7 @@ readNativeSkin(Stream *stream, int32, void *object, int32 offset)
|
||||
stream->seek(4); // skip pointer to vertexBuffer
|
||||
natskin->stride = stream->readI32();
|
||||
int32 size = geometry->numVertices*natskin->stride;
|
||||
natskin->vertexBuffer = new uint8[size];
|
||||
natskin->vertexBuffer = rwNewT(uint8, size, MEMDUR_EVENT | ID_SKIN);
|
||||
stream->read(natskin->vertexBuffer, size);
|
||||
stream->read(skin->inverseMatrices, skin->numBones*64);
|
||||
|
||||
@@ -119,7 +119,7 @@ skinInstanceCB(Geometry *geo, InstanceDataHeader *header)
|
||||
Skin *skin = Skin::get(geo);
|
||||
if(skin == nil)
|
||||
return;
|
||||
NativeSkin *natskin = new NativeSkin;
|
||||
NativeSkin *natskin = rwNewT(NativeSkin, 1, MEMDUR_EVENT | ID_SKIN);
|
||||
skin->platformData = natskin;
|
||||
|
||||
natskin->numUsedBones = skin->numUsedBones;
|
||||
@@ -131,7 +131,7 @@ skinInstanceCB(Geometry *geo, InstanceDataHeader *header)
|
||||
}
|
||||
|
||||
natskin->stride = 3*skin->numWeights;
|
||||
uint8 *vbuf = new uint8[header->numVertices*natskin->stride];
|
||||
uint8 *vbuf = rwNewT(uint8, header->numVertices*natskin->stride, MEMDUR_EVENT | ID_SKIN);
|
||||
natskin->vertexBuffer = vbuf;
|
||||
|
||||
int32 w[4];
|
||||
@@ -179,7 +179,7 @@ skinUninstanceCB(Geometry *geo, InstanceDataHeader *header)
|
||||
float *invMats = skin->inverseMatrices;
|
||||
skin->init(skin->numBones, natskin->numUsedBones, geo->numVertices);
|
||||
memcpy(skin->inverseMatrices, invMats, skin->numBones*64);
|
||||
delete[] data;
|
||||
rwFree(data);
|
||||
|
||||
for(int32 j = 0; j < skin->numUsedBones; j++)
|
||||
skin->usedBones[j] = natskin->table1[j];
|
||||
@@ -211,8 +211,8 @@ skinUninstanceCB(Geometry *geo, InstanceDataHeader *header)
|
||||
}
|
||||
}
|
||||
|
||||
delete[] (uint8*)natskin->vertexBuffer;
|
||||
delete natskin;
|
||||
rwFree(natskin->vertexBuffer);
|
||||
rwFree(natskin);
|
||||
}
|
||||
|
||||
static void*
|
||||
|
||||
Reference in New Issue
Block a user