88#include < GL/gl.h>
99#include < gmodule.h>
1010
11+ struct {
12+ bool valid;
13+ void (*genTextures)(GLsizei n, GLuint* textures);
14+ void (*bindTexture)(GLenum target, GLuint texture);
15+ void (*texParameteri)(GLenum target, GLenum pname, GLenum param);
16+ void (*texImage2D)(GLenum target,
17+ GLint level,
18+ GLint internalformat,
19+ GLsizei width,
20+ GLsizei height,
21+ GLint border,
22+ GLenum format,
23+ GLenum type,
24+ const void * data);
25+ void (*deleteTextures)(GLsizei n, const GLuint* textures);
26+ } gl;
27+
1128struct _FlExternalTextureGl {
1229 GLuint gl_texture_id;
1330 FlTextureCallback callback;
14- struct {
15- bool valid;
16- void (*genTextures)(GLsizei n, GLuint* textures);
17- void (*bindTexture)(GLenum target, GLuint texture);
18- void (*texParameteri)(GLenum target, GLenum pname, GLenum param);
19- void (*texImage2D)(GLenum target,
20- GLint level,
21- GLint internalformat,
22- GLsizei width,
23- GLsizei height,
24- GLint border,
25- GLenum format,
26- GLenum type,
27- const void * data);
28- void (*deleteTextures)(GLsizei n, const GLuint* textures);
29- } gl;
3031 void * user_data;
3132};
3233
3334G_DEFINE_TYPE (FlExternalTextureGl, fl_external_texture_gl, G_TYPE_OBJECT)
3435
3536static void fl_external_texture_gl_dispose(GObject* object) {
3637 FlExternalTextureGl* self = FL_EXTERNAL_TEXTURE_GL (object);
37- if (self-> gl .valid ) {
38- self-> gl .deleteTextures (1 , &self->gl_texture_id );
38+ if (gl.valid ) {
39+ gl.deleteTextures (1 , &self->gl_texture_id );
3940 }
4041
4142 G_OBJECT_CLASS (fl_external_texture_gl_parent_class)->dispose (object);
@@ -66,27 +67,27 @@ bool fl_external_texture_gl_populate_texture(
6667 opengl_texture->name = self->gl_texture_id ;
6768 opengl_texture->format = GL_RGBA8;
6869 opengl_texture->destruction_callback = nullptr ;
69- opengl_texture->user_data = static_cast < void *>(self) ;
70+ opengl_texture->user_data = nullptr ;
7071 opengl_texture->width = real_width;
7172 opengl_texture->height = real_height;
7273
7374 return true ;
7475}
7576
7677void fl_external_texture_gl_load_funcs (FlExternalTextureGl* self) {
77- self-> gl .genTextures = reinterpret_cast <void (*)(GLsizei, GLuint*)>(
78+ gl.genTextures = reinterpret_cast <void (*)(GLsizei, GLuint*)>(
7879 eglGetProcAddress (" glGenTextures" ));
79- self-> gl .bindTexture = reinterpret_cast <void (*)(GLenum, GLuint)>(
80+ gl.bindTexture = reinterpret_cast <void (*)(GLenum, GLuint)>(
8081 eglGetProcAddress (" glBindTexture" ));
81- self-> gl .texParameteri = reinterpret_cast <void (*)(GLenum, GLenum, GLenum)>(
82+ gl.texParameteri = reinterpret_cast <void (*)(GLenum, GLenum, GLenum)>(
8283 eglGetProcAddress (" glTexParameteri" ));
83- self-> gl .texImage2D =
84+ gl.texImage2D =
8485 reinterpret_cast <void (*)(GLenum, GLint, GLint, GLsizei, GLsizei, GLint,
8586 GLenum, GLenum, const void *)>(
8687 eglGetProcAddress (" glTexImage2D" ));
87- self-> gl .deleteTextures = reinterpret_cast <void (*)(GLsizei, const GLuint*)>(
88+ gl.deleteTextures = reinterpret_cast <void (*)(GLsizei, const GLuint*)>(
8889 eglGetProcAddress (" glDeleteTextures" ));
89- self-> gl .valid = true ;
90+ gl.valid = true ;
9091}
9192
9293bool fl_external_texture_gl_copy_pixel_buffer (FlExternalTextureGl* self,
@@ -100,24 +101,22 @@ bool fl_external_texture_gl_copy_pixel_buffer(FlExternalTextureGl* self,
100101 *width = pixel_buffer->width ;
101102 *height = pixel_buffer->height ;
102103
103- if (!self-> gl .valid ) {
104+ if (!gl.valid ) {
104105 fl_external_texture_gl_load_funcs (self);
105106 }
106107 if (self->gl_texture_id == 0 ) {
107- self->gl .genTextures (1 , &self->gl_texture_id );
108- self->gl .bindTexture (GL_TEXTURE_2D, self->gl_texture_id );
109- self->gl .texParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,
110- GL_CLAMP_TO_BORDER);
111- self->gl .texParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,
112- GL_CLAMP_TO_BORDER);
113- self->gl .texParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
114- self->gl .texParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
108+ gl.genTextures (1 , &self->gl_texture_id );
109+ gl.bindTexture (GL_TEXTURE_2D, self->gl_texture_id );
110+ gl.texParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
111+ gl.texParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
112+ gl.texParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
113+ gl.texParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
115114 } else {
116- self-> gl .bindTexture (GL_TEXTURE_2D, self->gl_texture_id );
115+ gl.bindTexture (GL_TEXTURE_2D, self->gl_texture_id );
117116 }
118- self-> gl .texImage2D (GL_TEXTURE_2D, 0 , GL_RGBA, pixel_buffer->width ,
119- pixel_buffer->height , 0 , GL_RGBA, GL_UNSIGNED_BYTE,
120- pixel_buffer->buffer );
117+ gl.texImage2D (GL_TEXTURE_2D, 0 , GL_RGBA, pixel_buffer->width ,
118+ pixel_buffer->height , 0 , GL_RGBA, GL_UNSIGNED_BYTE,
119+ pixel_buffer->buffer );
121120 return true ;
122121}
123122
0 commit comments