mirror of https://github.com/bjornbytes/lovr.git
lovrRelease frees objects instead of destructor;
That way objects allocated on the stack can be destroyed.
This commit is contained in:
parent
5b52a91778
commit
086f7f4e47
|
@ -16,7 +16,6 @@ void lovrMicrophoneDestroy(void* ref) {
|
|||
Microphone* microphone = ref;
|
||||
lovrMicrophoneStopRecording(microphone);
|
||||
alcCaptureCloseDevice(microphone->device);
|
||||
free(microphone);
|
||||
}
|
||||
|
||||
int lovrMicrophoneGetBitDepth(Microphone* microphone) {
|
||||
|
|
|
@ -38,7 +38,6 @@ void lovrSourceDestroy(void* ref) {
|
|||
alDeleteBuffers(source->type == SOURCE_STATIC ? 1 : SOURCE_BUFFERS, source->buffers);
|
||||
lovrRelease(source->soundData);
|
||||
lovrRelease(source->stream);
|
||||
free(source);
|
||||
}
|
||||
|
||||
SourceType lovrSourceGetType(Source* source) {
|
||||
|
|
|
@ -27,7 +27,6 @@ void lovrAudioStreamDestroy(void* ref) {
|
|||
stb_vorbis_close(stream->decoder);
|
||||
lovrRelease(stream->blob);
|
||||
free(stream->buffer);
|
||||
free(stream);
|
||||
}
|
||||
|
||||
int lovrAudioStreamDecode(AudioStream* stream, short* destination, size_t size) {
|
||||
|
|
|
@ -10,5 +10,4 @@ Blob* lovrBlobInit(Blob* blob, void* data, size_t size, const char* name) {
|
|||
void lovrBlobDestroy(void* ref) {
|
||||
Blob* blob = ref;
|
||||
free(blob->data);
|
||||
free(blob);
|
||||
}
|
||||
|
|
|
@ -587,7 +587,6 @@ void lovrModelDataDestroy(void* ref) {
|
|||
free(modelData->animations);
|
||||
free(modelData->materials);
|
||||
free(modelData->indices.raw);
|
||||
free(modelData);
|
||||
}
|
||||
|
||||
void lovrModelDataGetAABB(ModelData* modelData, float aabb[6]) {
|
||||
|
|
|
@ -34,7 +34,6 @@ Rasterizer* lovrRasterizerInit(Rasterizer* rasterizer, Blob* blob, int size) {
|
|||
void lovrRasterizerDestroy(void* ref) {
|
||||
Rasterizer* rasterizer = ref;
|
||||
lovrRelease(rasterizer->blob);
|
||||
free(rasterizer);
|
||||
}
|
||||
|
||||
bool lovrRasterizerHasGlyph(Rasterizer* rasterizer, uint32_t character) {
|
||||
|
|
|
@ -48,4 +48,4 @@ void vertexFormatAppend(VertexFormat* format, const char* name, AttributeType ty
|
|||
|
||||
VertexData* lovrVertexDataInit(VertexData* vertexData, uint32_t count, VertexFormat* format);
|
||||
#define lovrVertexDataCreate(...) lovrVertexDataInit(lovrAlloc(VertexData), __VA_ARGS__)
|
||||
#define lovrVertexDataDestroy lovrBlobDestroy
|
||||
#define lovrVertexDataDestroy NULL
|
||||
|
|
|
@ -12,7 +12,6 @@ void lovrFileDestroy(void* ref) {
|
|||
if (file->handle) {
|
||||
PHYSFS_close(file->handle);
|
||||
}
|
||||
free(file);
|
||||
}
|
||||
|
||||
int lovrFileOpen(File* file, FileMode mode) {
|
||||
|
|
|
@ -44,7 +44,6 @@ void lovrAnimatorDestroy(void* ref) {
|
|||
lovrRelease(animator->modelData);
|
||||
map_deinit(&animator->trackMap);
|
||||
vec_deinit(&animator->trackList);
|
||||
free(animator);
|
||||
}
|
||||
|
||||
void lovrAnimatorReset(Animator* animator) {
|
||||
|
|
|
@ -62,7 +62,6 @@ void lovrFontDestroy(void* ref) {
|
|||
}
|
||||
map_deinit(&font->atlas.glyphs);
|
||||
map_deinit(&font->kerning);
|
||||
free(font);
|
||||
}
|
||||
|
||||
Rasterizer* lovrFontGetRasterizer(Font* font) {
|
||||
|
|
|
@ -25,7 +25,6 @@ void lovrMaterialDestroy(void* ref) {
|
|||
for (int i = 0; i < MAX_MATERIAL_TEXTURES; i++) {
|
||||
lovrRelease(material->textures[i]);
|
||||
}
|
||||
free(material);
|
||||
}
|
||||
|
||||
void lovrMaterialBind(Material* material, Shader* shader) {
|
||||
|
|
|
@ -144,7 +144,6 @@ void lovrModelDestroy(void* ref) {
|
|||
lovrRelease(model->modelData);
|
||||
lovrRelease(model->mesh);
|
||||
free(model->nodeTransforms);
|
||||
free(model);
|
||||
}
|
||||
|
||||
void lovrModelDraw(Model* model, mat4 transform, int instances) {
|
||||
|
|
|
@ -918,7 +918,6 @@ void lovrTextureDestroy(void* ref) {
|
|||
glDeleteTextures(1, &texture->id);
|
||||
glDeleteRenderbuffers(1, &texture->msaaId);
|
||||
lovrGpuDestroySyncResource(texture, texture->incoherent);
|
||||
free(texture);
|
||||
}
|
||||
|
||||
void lovrTextureAllocate(Texture* texture, int width, int height, int depth, TextureFormat format) {
|
||||
|
@ -1195,7 +1194,6 @@ void lovrCanvasDestroy(void* ref) {
|
|||
lovrRelease(canvas->attachments[i].texture);
|
||||
}
|
||||
lovrRelease(canvas->depth.texture);
|
||||
free(ref);
|
||||
}
|
||||
|
||||
const Attachment* lovrCanvasGetAttachments(Canvas* canvas, int* count) {
|
||||
|
@ -1420,7 +1418,6 @@ void lovrBufferDestroy(void* ref) {
|
|||
#ifndef EMSCRIPTEN
|
||||
}
|
||||
#endif
|
||||
free(ref);
|
||||
}
|
||||
|
||||
size_t lovrBufferGetSize(Buffer* buffer) {
|
||||
|
@ -1825,7 +1822,6 @@ void lovrShaderDestroy(void* ref) {
|
|||
map_deinit(&shader->attributes);
|
||||
map_deinit(&shader->uniformMap);
|
||||
map_deinit(&shader->blockMap);
|
||||
free(shader);
|
||||
}
|
||||
|
||||
ShaderType lovrShaderGetType(Shader* shader) {
|
||||
|
@ -2107,7 +2103,6 @@ void lovrShaderBlockDestroy(void* ref) {
|
|||
lovrRelease(block->buffer);
|
||||
vec_deinit(&block->uniforms);
|
||||
map_deinit(&block->uniformMap);
|
||||
free(block);
|
||||
}
|
||||
|
||||
BlockType lovrShaderBlockGetType(ShaderBlock* block) {
|
||||
|
@ -2207,7 +2202,6 @@ void lovrMeshDestroy(void* ref) {
|
|||
map_deinit(&mesh->attributes);
|
||||
lovrRelease(mesh->vbo);
|
||||
lovrRelease(mesh->ibo);
|
||||
free(mesh);
|
||||
}
|
||||
|
||||
void lovrMeshAttachAttribute(Mesh* mesh, const char* name, MeshAttribute* attribute) {
|
||||
|
|
|
@ -111,4 +111,4 @@ extern HeadsetInterface* lovrHeadsetDriver;
|
|||
|
||||
bool lovrHeadsetInit(HeadsetDriver* drivers, int count, float offset, int msaa);
|
||||
void lovrHeadsetDestroy();
|
||||
#define lovrControllerDestroy free
|
||||
#define lovrControllerDestroy NULL
|
||||
|
|
|
@ -46,7 +46,6 @@ Curve* lovrCurveInit(Curve* curve, int sizeHint) {
|
|||
void lovrCurveDestroy(void* ref) {
|
||||
Curve* curve = ref;
|
||||
vec_deinit(&curve->points);
|
||||
free(curve);
|
||||
}
|
||||
|
||||
void lovrCurveEvaluate(Curve* curve, float t, vec3 p) {
|
||||
|
|
|
@ -19,7 +19,6 @@ Pool* lovrPoolInit(Pool* pool, size_t size) {
|
|||
void lovrPoolDestroy(void* ref) {
|
||||
Pool* pool = ref;
|
||||
free(pool->data);
|
||||
free(pool);
|
||||
}
|
||||
|
||||
float* lovrPoolAllocate(Pool* pool, MathType type) {
|
||||
|
|
|
@ -22,7 +22,7 @@ typedef struct {
|
|||
|
||||
RandomGenerator* lovrRandomGeneratorInit(RandomGenerator* generator);
|
||||
#define lovrRandomGeneratorCreate() lovrRandomGeneratorInit(lovrAlloc(RandomGenerator))
|
||||
#define lovrRandomGeneratorDestroy free
|
||||
#define lovrRandomGeneratorDestroy NULL
|
||||
Seed lovrRandomGeneratorGetSeed(RandomGenerator* generator);
|
||||
void lovrRandomGeneratorSetSeed(RandomGenerator* generator, Seed seed);
|
||||
void lovrRandomGeneratorGetState(RandomGenerator* generator, char* state, size_t length);
|
||||
|
|
|
@ -68,7 +68,6 @@ void lovrWorldDestroy(void* ref) {
|
|||
lovrWorldDestroyData(world);
|
||||
vec_deinit(&world->overlaps);
|
||||
map_deinit(&world->tags);
|
||||
free(world);
|
||||
}
|
||||
|
||||
void lovrWorldDestroyData(World* world) {
|
||||
|
@ -301,7 +300,6 @@ void lovrColliderDestroy(void* ref) {
|
|||
lovrColliderDestroyData(collider);
|
||||
vec_deinit(&collider->shapes);
|
||||
vec_deinit(&collider->joints);
|
||||
free(collider);
|
||||
}
|
||||
|
||||
void lovrColliderDestroyData(Collider* collider) {
|
||||
|
@ -664,7 +662,6 @@ void lovrColliderGetAABB(Collider* collider, float aabb[6]) {
|
|||
void lovrShapeDestroy(void* ref) {
|
||||
Shape* shape = ref;
|
||||
lovrShapeDestroyData(shape);
|
||||
free(shape);
|
||||
}
|
||||
|
||||
void lovrShapeDestroyData(Shape* shape) {
|
||||
|
@ -874,7 +871,6 @@ void lovrCylinderShapeSetLength(CylinderShape* cylinder, float length) {
|
|||
void lovrJointDestroy(void* ref) {
|
||||
Joint* joint = ref;
|
||||
lovrJointDestroyData(joint);
|
||||
free(joint);
|
||||
}
|
||||
|
||||
void lovrJointDestroyData(Joint* joint) {
|
||||
|
|
|
@ -16,7 +16,6 @@ void lovrChannelDestroy(void* ref) {
|
|||
vec_deinit(&channel->messages);
|
||||
mtx_destroy(&channel->lock);
|
||||
cnd_destroy(&channel->cond);
|
||||
free(channel);
|
||||
}
|
||||
|
||||
bool lovrChannelPush(Channel* channel, Variant variant, double timeout, uint64_t* id) {
|
||||
|
|
|
@ -47,7 +47,6 @@ void lovrThreadDestroy(void* ref) {
|
|||
Thread* thread = ref;
|
||||
mtx_destroy(&thread->lock);
|
||||
thrd_detach(thread->handle);
|
||||
free(thread);
|
||||
}
|
||||
|
||||
void lovrThreadStart(Thread* thread) {
|
||||
|
|
|
@ -44,7 +44,8 @@ void lovrRetain(void* object) {
|
|||
void lovrRelease(void* object) {
|
||||
Ref* ref = object;
|
||||
if (ref && --ref->count == 0) {
|
||||
ref->destructor(object);
|
||||
if (ref->destructor) ref->destructor(object);
|
||||
free(object);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue