You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-04 12:00:25 +00:00
Add new Parallax2D node
This commit is contained in:
@@ -634,7 +634,23 @@ void RasterizerCanvasGLES3::_render_items(RID p_to_render_target, int p_item_cou
|
||||
|
||||
GLES3::CanvasShaderData::BlendMode blend_mode = shader_data_cache ? shader_data_cache->blend_mode : GLES3::CanvasShaderData::BLEND_MODE_MIX;
|
||||
|
||||
_record_item_commands(ci, p_to_render_target, p_canvas_transform_inverse, current_clip, blend_mode, p_lights, index, batch_broken, r_sdf_used);
|
||||
if (!ci->repeat_size.x && !ci->repeat_size.y) {
|
||||
_record_item_commands(ci, p_to_render_target, p_canvas_transform_inverse, current_clip, blend_mode, p_lights, index, batch_broken, r_sdf_used, Point2());
|
||||
} else {
|
||||
Point2 start_pos = ci->repeat_size * -(ci->repeat_times / 2);
|
||||
Point2 end_pos = ci->repeat_size * ci->repeat_times + ci->repeat_size + start_pos;
|
||||
Point2 pos = start_pos;
|
||||
|
||||
do {
|
||||
do {
|
||||
_record_item_commands(ci, p_to_render_target, p_canvas_transform_inverse, current_clip, blend_mode, p_lights, index, batch_broken, r_sdf_used, pos);
|
||||
pos.y += ci->repeat_size.y;
|
||||
} while (pos.y < end_pos.y);
|
||||
|
||||
pos.x += ci->repeat_size.x;
|
||||
pos.y = start_pos.y;
|
||||
} while (pos.x < end_pos.x);
|
||||
}
|
||||
}
|
||||
|
||||
if (index == 0) {
|
||||
@@ -784,7 +800,7 @@ void RasterizerCanvasGLES3::_render_items(RID p_to_render_target, int p_item_cou
|
||||
state.last_item_index += index;
|
||||
}
|
||||
|
||||
void RasterizerCanvasGLES3::_record_item_commands(const Item *p_item, RID p_render_target, const Transform2D &p_canvas_transform_inverse, Item *¤t_clip, GLES3::CanvasShaderData::BlendMode p_blend_mode, Light *p_lights, uint32_t &r_index, bool &r_batch_broken, bool &r_sdf_used) {
|
||||
void RasterizerCanvasGLES3::_record_item_commands(const Item *p_item, RID p_render_target, const Transform2D &p_canvas_transform_inverse, Item *¤t_clip, GLES3::CanvasShaderData::BlendMode p_blend_mode, Light *p_lights, uint32_t &r_index, bool &r_batch_broken, bool &r_sdf_used, const Point2 &p_offset) {
|
||||
RenderingServer::CanvasItemTextureFilter texture_filter = p_item->texture_filter == RS::CANVAS_ITEM_TEXTURE_FILTER_DEFAULT ? state.default_filter : p_item->texture_filter;
|
||||
|
||||
if (texture_filter != state.canvas_instance_batches[state.current_batch_index].filter) {
|
||||
@@ -802,6 +818,11 @@ void RasterizerCanvasGLES3::_record_item_commands(const Item *p_item, RID p_rend
|
||||
}
|
||||
|
||||
Transform2D base_transform = p_canvas_transform_inverse * p_item->final_transform;
|
||||
|
||||
if (p_offset.x || p_offset.y) {
|
||||
base_transform *= Transform2D(0, p_offset / p_item->xform.get_scale());
|
||||
}
|
||||
|
||||
Transform2D draw_transform; // Used by transform command
|
||||
|
||||
Color base_color = p_item->final_modulate;
|
||||
|
||||
Reference in New Issue
Block a user