local ffi = require 'ffi' ffi.cdef [[ // gl.h typedef int GLint; typedef unsigned int GLuint; typedef unsigned int GLenum; // texture_share_ipc.h typedef enum ImgFormat { R8G8B8A8, R8G8B8, B8G8R8A8, B8G8R8, Undefined, } ImgFormat; // texture_share_gl_client.h typedef enum ImageLookupResult { Error = -1, NotFound = 0, Found = 1, RequiresUpdate = 2, } ImageLookupResult; typedef struct ClientImageDataGuard ClientImageDataGuard; typedef struct GlClient GlClient; typedef struct GlImageExtent { GLint top_left[2]; GLint bottom_right[2]; } GlImageExtent; bool gl_client_initialize_external_gl(void); struct GlClient *gl_client_new(const char *socket_path, uint64_t timeout_in_millis); void gl_client_destroy(struct GlClient *gl_client); enum ImageLookupResult gl_client_init_image(struct GlClient *gl_client, const char *image_name, uint32_t width, uint32_t height, ImgFormat format, bool overwrite_existing); int gl_client_send_image(struct GlClient *gl_client, const char *image_name, void*, // GLuint src_texture_id, GLenum src_texture_target, bool invert, GLuint prev_fbo, const struct GlImageExtent *extents); ]] local tvs = ffi.load("texture_share_gl_client") local width, height local canvas local client, image function love.load() width, height = love.graphics.getDimensions() canvas = love.graphics.newCanvas(width, height) assert(tvs.gl_client_initialize_external_gl(), "no init") client = assert(tvs.gl_client_new("/tmp/vk_server/vk_server.sock", 1000)) image = assert(tvs.gl_client_init_image(client, "love2d", width, height, ffi.C.R8G8B8A8, true) > 0) end local angle = 0 function love.update(dt) angle = angle + 5 * dt end function love.draw() love.graphics.setCanvas(canvas) love.graphics.clear(0, 0, 0, 0) love.graphics.translate(width/2, height/2) love.graphics.rotate(angle) love.graphics.setColor(1, 0, 0, 1) love.graphics.rectangle("fill", -150,-150, 300,300) love.graphics.setCanvas() tvs.gl_client_send_image( client, "love2d", canvas:getHandle(), 0x0DE1, -- GL_TEXTURE_2D false, 0, nil ) love.graphics.reset() love.graphics.setBlendMode("alpha", "premultiplied") love.graphics.draw(canvas) end