|
|
|
@ -3,15 +3,7 @@
|
|
|
|
|
|
|
|
|
|
#include <flutter_linux/flutter_linux.h> |
|
|
|
|
#include <flutter_linux/fl_view.h> |
|
|
|
|
#include <gtk/gtk.h> |
|
|
|
|
#include <gdk/gdkx.h> |
|
|
|
|
#include <sys/utsname.h> |
|
|
|
|
#include <glib.h> |
|
|
|
|
#include <GL/glew.h> |
|
|
|
|
|
|
|
|
|
#include <thread> |
|
|
|
|
#include <chrono> |
|
|
|
|
#include <vector> |
|
|
|
|
#include <GLES2/gl2.h> |
|
|
|
|
|
|
|
|
|
#include "embedder_texture_plugin_private.h" |
|
|
|
|
|
|
|
|
@ -30,8 +22,6 @@ struct _LinuxOpenglPlugin
|
|
|
|
|
FlTexture *texture = nullptr; |
|
|
|
|
FlTextureRegistrar *texture_registrar = nullptr; |
|
|
|
|
|
|
|
|
|
GdkGLContext *context = nullptr; |
|
|
|
|
GdkWindow *window = nullptr; |
|
|
|
|
FlMyTextureGL *myTexture = nullptr; |
|
|
|
|
FlView *fl_view = nullptr; |
|
|
|
|
}; |
|
|
|
@ -64,23 +54,6 @@ static void embedder_texture_plugin_handle_method_call(
|
|
|
|
|
fl_method_call_respond(method_call, response, nullptr); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void set_color(LinuxOpenglPlugin *self) |
|
|
|
|
{ |
|
|
|
|
gdk_gl_context_make_current(self->context); |
|
|
|
|
|
|
|
|
|
static GLfloat pixels[] = |
|
|
|
|
{ |
|
|
|
|
1, 0, 0, |
|
|
|
|
0, 1, 0, |
|
|
|
|
0, 0, 1, |
|
|
|
|
1, 1, 1 |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 2, 2, 0, GL_RGB, GL_FLOAT, pixels); |
|
|
|
|
|
|
|
|
|
fl_texture_registrar_mark_texture_frame_available(self->texture_registrar, self->texture); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
FlMethodResponse *create( |
|
|
|
|
LinuxOpenglPlugin *self, |
|
|
|
|
FlMethodCall *method_call) |
|
|
|
@ -102,23 +75,33 @@ FlMethodResponse *create(
|
|
|
|
|
|
|
|
|
|
if (self->width != 0 && self->height != 0) |
|
|
|
|
{ |
|
|
|
|
self->window = gtk_widget_get_parent_window(GTK_WIDGET(self->fl_view)); |
|
|
|
|
self->context = gdk_window_create_gl_context(self->window, &error); |
|
|
|
|
|
|
|
|
|
gdk_gl_context_make_current(self->context); |
|
|
|
|
|
|
|
|
|
static GLfloat pixels[] = |
|
|
|
|
{ |
|
|
|
|
1, 0, 0, |
|
|
|
|
0, 1, 0, |
|
|
|
|
0, 0, 1, |
|
|
|
|
1, 1, 1 |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
// create in open gl
|
|
|
|
|
glGenTextures(1, &self->texture_id); |
|
|
|
|
glBindTexture(GL_TEXTURE_2D, self->texture_id); |
|
|
|
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); |
|
|
|
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); |
|
|
|
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); |
|
|
|
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); |
|
|
|
|
|
|
|
|
|
// drawing on the texture
|
|
|
|
|
set_color(self); |
|
|
|
|
|
|
|
|
|
// create
|
|
|
|
|
self->myTexture = fl_my_texture_gl_new(GL_TEXTURE_2D, self->texture_id, self->width, self->height); |
|
|
|
|
self->texture = FL_TEXTURE(self->myTexture); |
|
|
|
|
|
|
|
|
|
// reg
|
|
|
|
|
fl_texture_registrar_register_texture(self->texture_registrar, self->texture); |
|
|
|
|
gdk_gl_context_clear_current(); |
|
|
|
|
|
|
|
|
|
// draw
|
|
|
|
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 2, 2, 0, GL_RGB, GL_FLOAT, pixels); |
|
|
|
|
|
|
|
|
|
// send id
|
|
|
|
|
g_autoptr(FlValue) result = fl_value_new_int(reinterpret_cast<int64_t>(self->texture)); |
|
|
|
|
return FL_METHOD_RESPONSE(fl_method_success_response_new(result)); |
|
|
|
|
} |
|
|
|
@ -186,13 +169,5 @@ void embedder_texture_plugin_register_with_registrar(FlPluginRegistrar *registra
|
|
|
|
|
g_object_ref(plugin), |
|
|
|
|
g_object_unref); |
|
|
|
|
|
|
|
|
|
GLenum err = glewInit(); |
|
|
|
|
if (GLEW_OK != err) |
|
|
|
|
{ |
|
|
|
|
printf("%s", "Error!"); |
|
|
|
|
printf("%s", glewGetErrorString(err)); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
g_object_unref(plugin); |
|
|
|
|
} |
|
|
|
|