From 227095a4f710ac6afd43f0a7e8b296f188cf20be Mon Sep 17 00:00:00 2001 From: David Luevano Alvarado Date: Tue, 31 May 2022 21:11:46 -0600 Subject: add working gif maker --- .../godot-gdgifexporter/gdgifexporter/converter.gd | 59 ++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 src/addons/GifMaker/godot-gdgifexporter/gdgifexporter/converter.gd (limited to 'src/addons/GifMaker/godot-gdgifexporter/gdgifexporter/converter.gd') diff --git a/src/addons/GifMaker/godot-gdgifexporter/gdgifexporter/converter.gd b/src/addons/GifMaker/godot-gdgifexporter/gdgifexporter/converter.gd new file mode 100644 index 0000000..846d93c --- /dev/null +++ b/src/addons/GifMaker/godot-gdgifexporter/gdgifexporter/converter.gd @@ -0,0 +1,59 @@ +extends Reference + +var _shader: Shader + + +func get_indexed_datas(image: Image, colors: Array) -> PoolByteArray: + _shader = preload("./lookup_color.shader") + return _convert(image, colors) + + +func get_similar_indexed_datas(image: Image, colors: Array) -> PoolByteArray: + _shader = preload("./lookup_similar.shader") + return _convert(image, colors) + + +func _convert(image: Image, colors: Array) -> PoolByteArray: + var vp = VisualServer.viewport_create() + var canvas = VisualServer.canvas_create() + VisualServer.viewport_attach_canvas(vp, canvas) + VisualServer.viewport_set_size(vp, image.get_width(), image.get_height()) + VisualServer.viewport_set_disable_3d(vp, true) + VisualServer.viewport_set_usage(vp, VisualServer.VIEWPORT_USAGE_2D) + VisualServer.viewport_set_hdr(vp, true) + VisualServer.viewport_set_active(vp, true) + + var ci_rid = VisualServer.canvas_item_create() + VisualServer.viewport_set_canvas_transform(vp, canvas, Transform()) + VisualServer.canvas_item_set_parent(ci_rid, canvas) + var texture = ImageTexture.new() + texture.create_from_image(image) + VisualServer.canvas_item_add_texture_rect( + ci_rid, Rect2(Vector2(0, 0), image.get_size()), texture + ) + + var mat_rid = VisualServer.material_create() + VisualServer.material_set_shader(mat_rid, _shader.get_rid()) + var lut = Image.new() + lut.create(256, 1, false, Image.FORMAT_RGB8) + lut.fill(Color8(colors[0][0], colors[0][1], colors[0][2])) + lut.lock() + for i in colors.size(): + lut.set_pixel(i, 0, Color8(colors[i][0], colors[i][1], colors[i][2])) + var lut_tex = ImageTexture.new() + lut_tex.create_from_image(lut) + VisualServer.material_set_param(mat_rid, "lut", lut_tex) + VisualServer.canvas_item_set_material(ci_rid, mat_rid) + + VisualServer.viewport_set_update_mode(vp, VisualServer.VIEWPORT_UPDATE_ONCE) + VisualServer.viewport_set_vflip(vp, true) + VisualServer.force_draw(false) + image = VisualServer.texture_get_data(VisualServer.viewport_get_texture(vp)) + + VisualServer.free_rid(vp) + VisualServer.free_rid(canvas) + VisualServer.free_rid(ci_rid) + VisualServer.free_rid(mat_rid) + + image.convert(Image.FORMAT_R8) + return image.get_data() -- cgit v1.2.3-54-g00ecf