67 lines
2.1 KiB
C++
67 lines
2.1 KiB
C++
#include <flutter_linux/flutter_linux.h>
|
|
#include <flutter_linux/fl_texture_registrar.h>
|
|
#include <flutter_linux/fl_texture.h>
|
|
#include <flutter_linux/fl_pixel_buffer_texture.h>
|
|
#include <flutter_linux/fl_texture_gl.h>
|
|
#include <gtk/gtk.h>
|
|
#include <sys/utsname.h>
|
|
|
|
#include <epoxy/gl.h>
|
|
#include "include/polyvox_filament/filament_pb_texture.h"
|
|
|
|
#include <iostream>
|
|
#include <vector>
|
|
|
|
|
|
G_DEFINE_TYPE(FilamentPBTexture,
|
|
filament_pb_texture,
|
|
fl_pixel_buffer_texture_get_type())
|
|
|
|
|
|
static gboolean video_texture_copy_pixels (FlPixelBufferTexture* texture,
|
|
const uint8_t** out_buffer,
|
|
uint32_t* width,
|
|
uint32_t* height,
|
|
GError** error) {
|
|
|
|
auto buffer = new std::vector<uint8_t>(400*200*4);
|
|
for (int i = 0; i < 400*200*4; i++)
|
|
{
|
|
if(i%4 == 1 || i % 4 == 3) {
|
|
buffer->at(i) = (uint8_t)255;
|
|
} else {
|
|
buffer->at(i) = (uint8_t)0;
|
|
}
|
|
}
|
|
*width = 400;
|
|
*height = 200;
|
|
*out_buffer = buffer->data();
|
|
std::cout << "COPY" << std::endl;
|
|
return TRUE;
|
|
}
|
|
|
|
void filament_pb_texture_dispose(GObject* object) {
|
|
G_OBJECT_CLASS(filament_pb_texture_parent_class)->dispose(object);
|
|
}
|
|
|
|
void filament_pb_texture_class_init(FilamentPBTextureClass* klass) {
|
|
G_OBJECT_CLASS(klass)->dispose = filament_pb_texture_dispose;
|
|
FL_PIXEL_BUFFER_TEXTURE_CLASS(klass)->copy_pixels = video_texture_copy_pixels;
|
|
}
|
|
|
|
void filament_pb_texture_init(FilamentPBTexture* self) { }
|
|
|
|
FLUTTER_PLUGIN_EXPORT FlTexture* create_filament_pb_texture(uint32_t width, uint32_t height, FlTextureRegistrar* registrar) {
|
|
|
|
auto pbTexture = FILAMENT_PB_TEXTURE(g_object_new(filament_pb_texture_get_type(), nullptr));
|
|
|
|
g_autoptr(FlTexture) texture = FL_TEXTURE(pbTexture);
|
|
|
|
if(fl_texture_registrar_register_texture(registrar, texture) == TRUE) {
|
|
if(fl_texture_registrar_mark_texture_frame_available(registrar,
|
|
texture) != TRUE) {
|
|
std::cout << "FAILED" << std::endl;
|
|
}
|
|
}
|
|
return texture;
|
|
} |