Use shader include for fore/background shaders

The two shaders use a lot of common logic for co-ordinate and attribute
look up, so it makes sense to use a common include shader for both.

Adds support for the inverse and blink attributes to the foreground shader.
This commit is contained in:
Leroy Hopson 2024-02-07 21:37:50 +13:00
parent a849423096
commit 8b320622f9
No known key found for this signature in database
GPG key ID: D2747312A6DB51AA
5 changed files with 95 additions and 49 deletions

View file

@ -332,14 +332,21 @@ void Terminal::update_sizes(bool force)
attr_image = Image::create(std::max(cols, 1u), std::max(rows, 1u), false, Image::FORMAT_L8);
attr_texture->set_image(attr_image);
back_material->set_shader_parameter("cols", cols);
back_material->set_shader_parameter("rows", rows);
back_material->set_shader_parameter("size", size);
back_material->set_shader_parameter("cell_size", cell_size);
update_shader_parameters(back_material);
update_shader_parameters(fore_material);
refresh();
}
void Terminal::update_shader_parameters(Ref<ShaderMaterial> material)
{
material->set_shader_parameter("cols", cols);
material->set_shader_parameter("rows", rows);
material->set_shader_parameter("size", size);
material->set_shader_parameter("cell_size", cell_size);
material->set_shader_parameter("grid_size", Vector2(cols * cell_size.x, rows * cell_size.y));
}
void Terminal::initialize_rendering() {
ResourceLoader* rl = ResourceLoader::get_singleton();
@ -354,7 +361,7 @@ void Terminal::initialize_rendering() {
back_material.instantiate();
back_material->set_shader(back_shader);
back_material->set_shader_parameter("cell_colors", back_texture);
back_material->set_shader_parameter("background_colors", back_texture);
back_material->set_shader_parameter("attributes", attr_texture);
back_canvas_item = rs->canvas_item_create();
@ -404,7 +411,7 @@ void Terminal::update_theme() {
tsm_vte_color color = static_cast<tsm_vte_color>(i);
palette[color] = get_theme_color(String(COLOR_NAMES[i]));
}
back_material->set_shader_parameter("background", palette[TSM_COLOR_BACKGROUND]);
back_material->set_shader_parameter("background_color", palette[TSM_COLOR_BACKGROUND]);
// TODO: Default to mono font and handle other styles.
font = get_theme_font("normal_font");

View file

@ -97,6 +97,7 @@ namespace godot
void initialize_rendering();
void update_theme();
void update_sizes(bool force = false);
void update_shader_parameters(Ref<ShaderMaterial> material);
void draw_screen();
void refresh();
void cleanup_rendering();