Skip to content

Commit

Permalink
Implement 2D instance shader parameters
Browse files Browse the repository at this point in the history
  • Loading branch information
huwpascoe committed Sep 15, 2024
1 parent 3d14bda commit d0113a4
Show file tree
Hide file tree
Showing 6 changed files with 12 additions and 1 deletion.
3 changes: 3 additions & 0 deletions scene/main/canvas_item.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1315,6 +1315,9 @@ void CanvasItem::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_material", "material"), &CanvasItem::set_material);
ClassDB::bind_method(D_METHOD("get_material"), &CanvasItem::get_material);

ClassDB::bind_method(D_METHOD("set_instance_shader_parameter", "name", "value"), &CanvasItem::set_instance_shader_parameter);
ClassDB::bind_method(D_METHOD("get_instance_shader_parameter", "name"), &CanvasItem::get_instance_shader_parameter);

ClassDB::bind_method(D_METHOD("set_use_parent_material", "enable"), &CanvasItem::set_use_parent_material);
ClassDB::bind_method(D_METHOD("get_use_parent_material"), &CanvasItem::get_use_parent_material);

Expand Down
1 change: 0 additions & 1 deletion servers/rendering/renderer_canvas_cull.h
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,6 @@ class RendererCanvasCull {

HashMap<StringName, InstanceShaderParameter> instance_shader_uniforms;
bool instance_allocated_shader_uniforms = false;
int32_t instance_allocated_shader_uniforms_offset = -1;
SelfList<Item> update_item;

Item() :
Expand Down
2 changes: 2 additions & 0 deletions servers/rendering/renderer_canvas_render.h
Original file line number Diff line number Diff line change
Expand Up @@ -343,6 +343,8 @@ class RendererCanvasRender {
RID material;
RID skeleton;

int32_t instance_allocated_shader_uniforms_offset = -1;

Item *next = nullptr;

struct CopyBackBuffer {
Expand Down
3 changes: 3 additions & 0 deletions servers/rendering/renderer_rd/renderer_canvas_render_rd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1828,6 +1828,7 @@ RendererCanvasRenderRD::RendererCanvasRenderRD() {
actions.base_varying_index = 5;

actions.global_buffer_array_variable = "global_shader_uniforms.data";
actions.instance_uniform_index_variable = "draw_data.instance_uniforms_ofs";

shader.compiler.initialize(actions);
}
Expand Down Expand Up @@ -2343,6 +2344,8 @@ void RendererCanvasRenderRD::_record_item_commands(const Item *p_item, RenderTar
instance_data->color_texture_pixel_size[1] = r_current_batch->tex_texpixel_size.height;
instance_data->specular_shininess = r_current_batch->tex_specular_shininess;

instance_data->instance_uniforms_ofs = uint32_t(p_item->instance_allocated_shader_uniforms_offset);

return instance_data;
};

Expand Down
2 changes: 2 additions & 0 deletions servers/rendering/renderer_rd/renderer_canvas_render_rd.h
Original file line number Diff line number Diff line change
Expand Up @@ -361,6 +361,8 @@ class RendererCanvasRenderRD : public RendererCanvasRender {
};
float color_texture_pixel_size[2];
uint32_t lights[4];
uint32_t instance_uniforms_ofs;
uint32_t pad2[3];
};

struct PushConstant {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,8 @@ struct InstanceData {
#endif
vec2 color_texture_pixel_size;
uint lights[4];
uint instance_uniforms_ofs;
uint pad2[3];
};

layout(set = 4, binding = 0, std430) restrict readonly buffer DrawData {
Expand Down

0 comments on commit d0113a4

Please sign in to comment.