mirror of
https://github.com/Orama-Interactive/Pixelorama.git
synced 2025-01-18 17:19:50 +00:00
40 lines
1.6 KiB
GDScript3
40 lines
1.6 KiB
GDScript3
|
extends Node
|
||
|
|
||
|
|
||
|
func setup(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 shader = preload("./lookup_similar.shader")
|
||
|
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.lock()
|
||
|
for i in 256:
|
||
|
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))
|
||
|
image.convert(Image.FORMAT_R8)
|
||
|
return image.get_data()
|