Native OpenGL GC fix
This commit is contained in:
@@ -520,6 +520,7 @@ class NativeCFFI {
|
|||||||
@:cffi private static function lime_gl_is_texture (texture:Int):Bool;
|
@:cffi private static function lime_gl_is_texture (texture:Int):Bool;
|
||||||
@:cffi private static function lime_gl_line_width (width:Float32):Void;
|
@:cffi private static function lime_gl_line_width (width:Float32):Void;
|
||||||
@:cffi private static function lime_gl_link_program (program:Int):Void;
|
@:cffi private static function lime_gl_link_program (program:Int):Void;
|
||||||
|
@:cffi private static function lime_gl_object_deregister (object:Dynamic):Void;
|
||||||
@:cffi private static function lime_gl_object_from_id (id:Int):Dynamic;
|
@:cffi private static function lime_gl_object_from_id (id:Int):Dynamic;
|
||||||
@:cffi private static function lime_gl_object_register (type:Int, id:Int, object:Dynamic):Void;
|
@:cffi private static function lime_gl_object_register (type:Int, id:Int, object:Dynamic):Void;
|
||||||
@:cffi private static function lime_gl_pixel_storei (pname:Int, param:Int):Void;
|
@:cffi private static function lime_gl_pixel_storei (pname:Int, param:Int):Void;
|
||||||
|
|||||||
@@ -1208,6 +1208,7 @@ class NativeGLRenderContext {
|
|||||||
public function deleteBuffer (buffer:GLBuffer):Void {
|
public function deleteBuffer (buffer:GLBuffer):Void {
|
||||||
|
|
||||||
#if (lime_cffi && lime_opengl && !macro)
|
#if (lime_cffi && lime_opengl && !macro)
|
||||||
|
if (buffer != null) NativeCFFI.lime_gl_object_deregister (buffer);
|
||||||
NativeCFFI.lime_gl_delete_buffer (__getObjectID (buffer));
|
NativeCFFI.lime_gl_delete_buffer (__getObjectID (buffer));
|
||||||
#end
|
#end
|
||||||
|
|
||||||
@@ -1217,6 +1218,7 @@ class NativeGLRenderContext {
|
|||||||
public function deleteFramebuffer (framebuffer:GLFramebuffer):Void {
|
public function deleteFramebuffer (framebuffer:GLFramebuffer):Void {
|
||||||
|
|
||||||
#if (lime_cffi && lime_opengl && !macro)
|
#if (lime_cffi && lime_opengl && !macro)
|
||||||
|
if (framebuffer != null) NativeCFFI.lime_gl_object_deregister (framebuffer);
|
||||||
NativeCFFI.lime_gl_delete_framebuffer (__getObjectID (framebuffer));
|
NativeCFFI.lime_gl_delete_framebuffer (__getObjectID (framebuffer));
|
||||||
#end
|
#end
|
||||||
|
|
||||||
@@ -1226,6 +1228,7 @@ class NativeGLRenderContext {
|
|||||||
public function deleteProgram (program:GLProgram):Void {
|
public function deleteProgram (program:GLProgram):Void {
|
||||||
|
|
||||||
#if (lime_cffi && lime_opengl && !macro)
|
#if (lime_cffi && lime_opengl && !macro)
|
||||||
|
if (program != null) NativeCFFI.lime_gl_object_deregister (program);
|
||||||
NativeCFFI.lime_gl_delete_program (__getObjectID (program));
|
NativeCFFI.lime_gl_delete_program (__getObjectID (program));
|
||||||
#end
|
#end
|
||||||
|
|
||||||
@@ -1241,6 +1244,7 @@ class NativeGLRenderContext {
|
|||||||
public function deleteRenderbuffer (renderbuffer:GLRenderbuffer):Void {
|
public function deleteRenderbuffer (renderbuffer:GLRenderbuffer):Void {
|
||||||
|
|
||||||
#if (lime_cffi && lime_opengl && !macro)
|
#if (lime_cffi && lime_opengl && !macro)
|
||||||
|
if (renderbuffer != null) NativeCFFI.lime_gl_object_deregister (renderbuffer);
|
||||||
NativeCFFI.lime_gl_delete_renderbuffer (__getObjectID (renderbuffer));
|
NativeCFFI.lime_gl_delete_renderbuffer (__getObjectID (renderbuffer));
|
||||||
#end
|
#end
|
||||||
|
|
||||||
@@ -1256,6 +1260,7 @@ class NativeGLRenderContext {
|
|||||||
public function deleteShader (shader:GLShader):Void {
|
public function deleteShader (shader:GLShader):Void {
|
||||||
|
|
||||||
#if (lime_cffi && lime_opengl && !macro)
|
#if (lime_cffi && lime_opengl && !macro)
|
||||||
|
if (shader != null) NativeCFFI.lime_gl_object_deregister (shader);
|
||||||
NativeCFFI.lime_gl_delete_shader (__getObjectID (shader));
|
NativeCFFI.lime_gl_delete_shader (__getObjectID (shader));
|
||||||
#end
|
#end
|
||||||
|
|
||||||
@@ -1271,6 +1276,7 @@ class NativeGLRenderContext {
|
|||||||
public function deleteTexture (texture:GLTexture):Void {
|
public function deleteTexture (texture:GLTexture):Void {
|
||||||
|
|
||||||
#if (lime_cffi && lime_opengl && !macro)
|
#if (lime_cffi && lime_opengl && !macro)
|
||||||
|
if (texture != null) NativeCFFI.lime_gl_object_deregister (texture);
|
||||||
NativeCFFI.lime_gl_delete_texture (__getObjectID (texture));
|
NativeCFFI.lime_gl_delete_texture (__getObjectID (texture));
|
||||||
#end
|
#end
|
||||||
|
|
||||||
|
|||||||
@@ -1060,6 +1060,27 @@ namespace lime {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void lime_gl_object_deregister (value object) {
|
||||||
|
|
||||||
|
val_gc (object, 0);
|
||||||
|
|
||||||
|
if (glObjectIDs.find (object) != glObjectIDs.end ()) {
|
||||||
|
|
||||||
|
int id = glObjectIDs[object];
|
||||||
|
glObjectTypes.erase (object);
|
||||||
|
glObjectIDs.erase (object);
|
||||||
|
|
||||||
|
if (glObjects[id] == object) {
|
||||||
|
|
||||||
|
glObjects.erase (id);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
value lime_gl_object_from_id (int id) {
|
value lime_gl_object_from_id (int id) {
|
||||||
|
|
||||||
if (glObjects.find (id) != glObjects.end ()) {
|
if (glObjects.find (id) != glObjects.end ()) {
|
||||||
@@ -1566,6 +1587,7 @@ namespace lime {
|
|||||||
DEFINE_PRIME1 (lime_gl_is_texture);
|
DEFINE_PRIME1 (lime_gl_is_texture);
|
||||||
DEFINE_PRIME1v (lime_gl_line_width);
|
DEFINE_PRIME1v (lime_gl_line_width);
|
||||||
DEFINE_PRIME1v (lime_gl_link_program);
|
DEFINE_PRIME1v (lime_gl_link_program);
|
||||||
|
DEFINE_PRIME1v (lime_gl_object_deregister);
|
||||||
DEFINE_PRIME1 (lime_gl_object_from_id);
|
DEFINE_PRIME1 (lime_gl_object_from_id);
|
||||||
DEFINE_PRIME3v (lime_gl_object_register);
|
DEFINE_PRIME3v (lime_gl_object_register);
|
||||||
DEFINE_PRIME2v (lime_gl_pixel_storei);
|
DEFINE_PRIME2v (lime_gl_pixel_storei);
|
||||||
|
|||||||
Reference in New Issue
Block a user