diff --git a/lime/gl/native/GL.hx b/lime/gl/native/GL.hx index d5c0ff1b4..d9f6c9e5c 100644 --- a/lime/gl/native/GL.hx +++ b/lime/gl/native/GL.hx @@ -593,6 +593,7 @@ class GL { public static function cullFace(mode:Int):Void { + lime_gl_cull_face(mode); } public static function deleteBuffer(buffer:GLBuffer):Void @@ -603,6 +604,8 @@ class GL { public static function deleteFramebuffer(framebuffer:GLFramebuffer):Void { + lime_gl_delete_framebuffer(framebuffer.id); + framebuffer.invalidate(); } public static function deleteProgram(program:GLProgram):Void @@ -613,6 +616,8 @@ class GL { public static function deleteRenderbuffer(renderbuffer:GLRenderbuffer):Void { + lime_gl_delete_render_buffer(renderbuffer.id); + renderbuffer.invalidate(); } public static function deleteShader(shader:GLShader):Void @@ -1191,8 +1196,11 @@ class GL { private static var lime_gl_create_render_buffer = load("lime_gl_create_render_buffer", 0); private static var lime_gl_create_shader = load("lime_gl_create_shader", 1); private static var lime_gl_create_texture = load("lime_gl_create_texture", 0); + private static var lime_gl_cull_face = load("lime_gl_cull_face", 1); private static var lime_gl_delete_buffer = load("lime_gl_delete_buffer", 1); + private static var lime_gl_delete_framebuffer = load("lime_gl_delete_framebuffer", 1); private static var lime_gl_delete_program = load("lime_gl_delete_program", 1); + private static var lime_gl_delete_render_buffer = load("lime_gl_delete_render_buffer", 1); private static var lime_gl_delete_shader = load("lime_gl_delete_shader", 1); private static var lime_gl_delete_texture = load("lime_gl_delete_texture", 1); private static var lime_gl_depth_func = load("lime_gl_depth_func", 1); diff --git a/project/include/renderer/opengl/OGL.h b/project/include/renderer/opengl/OGL.h index 842d5dea1..f3486c9f9 100644 --- a/project/include/renderer/opengl/OGL.h +++ b/project/include/renderer/opengl/OGL.h @@ -70,7 +70,9 @@ using namespace Tizen::Graphics::Opengl; #define glBindFramebuffer glBindFramebufferEXT #define glBindRenderbuffer glBindRenderbufferEXT #define glGenFramebuffers glGenFramebuffersEXT + #define glDeleteFramebuffers glDeleteFramebuffersEXT #define glGenRenderbuffers glGenRenderbuffersEXT + #define glDeleteRenderbuffers glDeleteRenderbuffersEXT #define glFramebufferRenderbuffer glFramebufferRenderbufferEXT #define glFramebufferTexture2D glFramebufferTexture2DEXT #define glRenderbufferStorage glRenderbufferStorageEXT diff --git a/project/include/renderer/opengl/OGLExtensions.h b/project/include/renderer/opengl/OGLExtensions.h index d7d32c0ee..13eaa04e6 100644 --- a/project/include/renderer/opengl/OGLExtensions.h +++ b/project/include/renderer/opengl/OGLExtensions.h @@ -75,6 +75,7 @@ OGL_EXT(glBufferSubData,void,(GLenum, GLintptr, GLsizeiptr, const GLvoid *)); OGL_EXT(glGetBufferParameteriv,void,(GLenum, GLenum, GLint *)); OGL_EXT(glBindFramebuffer,void,(GLenum, GLuint)); OGL_EXT(glGenFramebuffers,void,(GLsizei, GLuint *)); +OGL_EXT(glDeleteFramebuffers,void,(GLsizei, const GLuint *)); OGL_EXT(glBindRenderbuffer,void,(GLenum, GLuint)); OGL_EXT(glFramebufferRenderbuffer,void,(GLenum, GLenum, GLenum, GLuint)); OGL_EXT(glFramebufferTexture2D,void,(GLenum, GLenum, GLenum, GLuint, GLint)); @@ -85,6 +86,7 @@ OGL_EXT(glCompressedTexSubImage2D,void,(GLenum, GLint, GLint, GLint, GLsizei, GL OGL_EXT(glCompressedTexImage2D,void,(GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *)); OGL_EXT(glGenerateMipmap,void,(GLenum)); OGL_EXT(glGenRenderbuffers,void,(GLsizei, GLuint *)); +OGL_EXT(glDeleteRenderbuffers,void,(GLsizei, const GLuint *)); OGL_EXT(glGetFramebufferAttachmentParameteriv,void,(GLenum, GLenum, GLenum, GLint *)); OGL_EXT(glGetRenderbufferParameteriv,void,(GLenum, GLenum, GLint *)); diff --git a/project/src/renderer/opengl/OGLExport.cpp b/project/src/renderer/opengl/OGLExport.cpp index a81469d73..49fbcd189 100644 --- a/project/src/renderer/opengl/OGLExport.cpp +++ b/project/src/renderer/opengl/OGLExport.cpp @@ -222,7 +222,7 @@ value lime_gl_get_parameter(value pname_val) //case GL_MAX_VARYING_VECTORS: case GL_MAX_VERTEX_ATTRIBS: case GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS: - //case GL_MAX_VERTEX_UNIFORM_VECTORS: + case GL_MAX_VERTEX_UNIFORM_VECTORS: case GL_NUM_COMPRESSED_TEXTURE_FORMATS: case GL_PACK_ALIGNMENT: case GL_RED_BITS: @@ -1284,6 +1284,16 @@ value lime_gl_create_framebuffer( ) } DEFINE_PRIM(lime_gl_create_framebuffer,0); +value lime_gl_delete_framebuffer(value target) +{ + #ifndef HX_LINUX + GLuint id = val_int(target); + if (&glDeleteFramebuffers) glDeleteFramebuffers(1, &id); + #endif + return alloc_null(); +} +DEFINE_PRIM(lime_gl_delete_framebuffer,1); + value lime_gl_create_render_buffer( ) { GLuint id = 0; @@ -1294,6 +1304,16 @@ value lime_gl_create_render_buffer( ) } DEFINE_PRIM(lime_gl_create_render_buffer,0); +value lime_gl_delete_render_buffer(value target) +{ + #ifndef HX_LINUX + GLuint id = val_int(target); + if (&glDeleteRenderbuffers) glDeleteRenderbuffers(1, &id); + #endif + return alloc_null(); +} +DEFINE_PRIM(lime_gl_delete_render_buffer,1); + value lime_gl_framebuffer_renderbuffer(value target, value attachment, value renderbuffertarget, value renderbuffer) { #ifndef HX_LINUX @@ -1462,6 +1482,13 @@ value lime_gl_depth_range(value inNear, value inFar) DEFINE_PRIM(lime_gl_depth_range,2); +value lime_gl_cull_face(value mode) +{ + glCullFace(val_int(mode)); + return alloc_null(); +} +DEFINE_PRIM(lime_gl_cull_face,1); + value lime_gl_polygon_offset(value factor, value units) {