Godot Version
Windows 10, v4.3.stable.official [77dcf97d8]
Question
Does anyone know how the Compositor works?
I’m trying to read a Texture2D in a Compositor shader, a simple noise texture, but this data size error keeps happening.
E 0:00:01:0598 effect_compositor.gd:118 @ create_channel_texture(): Data for slice index 0 (mapped to layer 0) differs in size (supplied: 1398100) than what is required by the format (1048576).
<C++ Error> Condition "(uint32_t)p_data[i].size() != required_size" is true. Returning: RID()
<C++ Source> servers/rendering/rendering_device.cpp:722 @ texture_create()
<Stack Trace> effect_compositor.gd:118 @ create_channel_texture()
effect_compositor.gd:208 @ _render_callback()
Based in some tutorials on the matter, I am correctly converting the texture to the right format, but looks like it’s not working. My function for creating the RID textures:
...
var device: RenderingDevice
func create_channel_texture(texture: Texture2D) -> RID:
if not device:
return RID()
var image: Image = texture.get_image()
image.convert(Image.FORMAT_RF)
var format: RDTextureFormat = RDTextureFormat.new()
format.width = image.get_width()
format.height = image.get_height()
format.format = RenderingDevice.DATA_FORMAT_R32_SFLOAT
format.usage_bits = RenderingDevice.TEXTURE_USAGE_SAMPLING_BIT
return device.texture_create(format, RDTextureView.new(), [image.get_data()])
...
I need help so bad, documentation simply do not exist on this.