Tiny refactor

This commit is contained in:
2024-10-18 16:12:24 +02:00
parent 8ee000ab74
commit 1d5b4499a4
38 changed files with 645 additions and 637 deletions

132
ui/ui.jai
View File

@@ -259,14 +259,14 @@ ui_init :: () {
init(*ui_state.boxes, 1024);
ui_state.sampler = create_sampler(renderer);
ui_state.fonts.regular = create_font(renderer, "../assets/fonts/roboto/Roboto-Regular.ttf", 12);
ui_state.fonts.button = create_font(renderer, "../assets/fonts/roboto/Roboto-Regular.ttf", 12);
ui_state.sampler = create_sampler(engine.renderer);
ui_state.fonts.regular = create_font(engine.renderer, "../assets/fonts/roboto/Roboto-Regular.ttf", 12);
ui_state.fonts.button = create_font(engine.renderer, "../assets/fonts/roboto/Roboto-Regular.ttf", 12);
// ui_rect
{
vs := create_vertex_shader(renderer, "../assets/shaders/ui_rect.hlsl", "VS");
ps := create_pixel_shader(renderer, "../assets/shaders/ui_rect.hlsl", "PS");
vs := create_vertex_shader(engine.renderer, "../assets/shaders/ui_rect.hlsl", "VS");
ps := create_pixel_shader(engine.renderer, "../assets/shaders/ui_rect.hlsl", "PS");
layout : [2] Vertex_Data_Info;
layout[0] = .{0,.POSITION2D, 0};
@@ -284,13 +284,13 @@ ui_init :: () {
params[1].name = "tex";
params[1].slot = 1;
ui_state.shaders.ui_rect = create_pipeline_state(renderer, vs, ps, layout, params, blend_type=.TRANSPARENT);
ui_state.shaders.ui_rect = create_pipeline_state(engine.renderer, vs, ps, layout, params, blend_type=.TRANSPARENT);
}
// ui_rect
{
vs := create_vertex_shader(renderer, "../assets/shaders/ui.hlsl", "VS_Main");
ps := create_pixel_shader(renderer, "../assets/shaders/ui.hlsl", "PS_Main");
vs := create_vertex_shader(engine.renderer, "../assets/shaders/ui.hlsl", "VS_Main");
ps := create_pixel_shader(engine.renderer, "../assets/shaders/ui.hlsl", "PS_Main");
layout : [0] Vertex_Data_Info;
@@ -306,12 +306,12 @@ ui_init :: () {
params[1].name = "tex";
params[1].slot = 1;
ui_state.shaders.ui = create_pipeline_state(renderer, vs, ps, layout, params, blend_type=.TRANSPARENT);
ui_state.shaders.ui = create_pipeline_state(engine.renderer, vs, ps, layout, params, blend_type=.TRANSPARENT);
}
{
vs := create_vertex_shader(renderer, "../assets/shaders/font.hlsl", "VS");
ps := create_pixel_shader(renderer, "../assets/shaders/font.hlsl", "PS");
vs := create_vertex_shader(engine.renderer, "../assets/shaders/font.hlsl", "VS");
ps := create_pixel_shader(engine.renderer, "../assets/shaders/font.hlsl", "PS");
layout : [3] Vertex_Data_Info;
layout[0] = .{0,.POSITION2D, 0};
@@ -330,14 +330,14 @@ ui_init :: () {
params[1].name = "tex";
params[1].slot = 1;
ui_state.shaders.text = create_pipeline_state(renderer, vs, ps, layout, params, blend_type=.TRANSPARENT);
ui_state.shaders.text = create_pipeline_state(engine.renderer, vs, ps, layout, params, blend_type=.TRANSPARENT);
}
// Make into one shader....
// ui_rect textured
{
vs := create_vertex_shader(renderer, "../assets/shaders/ui_rect.hlsl", "VS", string.["USE_TEXTURE"]);
ps := create_pixel_shader(renderer, "../assets/shaders/ui_rect.hlsl", "PS", string.["USE_TEXTURE"]);
vs := create_vertex_shader(engine.renderer, "../assets/shaders/ui_rect.hlsl", "VS", string.["USE_TEXTURE"]);
ps := create_pixel_shader(engine.renderer, "../assets/shaders/ui_rect.hlsl", "PS", string.["USE_TEXTURE"]);
layout : [2] Vertex_Data_Info;
layout[0] = .{0,.POSITION2D, 0};
@@ -355,20 +355,20 @@ ui_init :: () {
params[1].name = "tex";
params[1].slot = 1;
ui_state.shaders.ui_rect_textured = create_pipeline_state(renderer, vs, ps, layout, params, blend_type=.TRANSPARENT);
ui_state.shaders.ui_rect_textured = create_pipeline_state(engine.renderer, vs, ps, layout, params, blend_type=.TRANSPARENT);
}
ui_state.max_verts = 4096;
{
dynamic_buffer_size := size_of(Colored_Vert) * ui_state.max_verts;
ui_state.rect_vb = create_vertex_buffer(renderer, null, dynamic_buffer_size, stride=size_of(Colored_Vert), mappable=true);
ui_state.rect_vb = create_vertex_buffer(engine.renderer, null, dynamic_buffer_size, stride=size_of(Colored_Vert), mappable=true);
for 0..MAX_VERT_BUFFERS-1 {
{
buffer : Textured_Vert_Buffer;
dynamic_buffer_size := size_of(Textured_Vert) * ui_state.max_verts;
buffer.vb = create_vertex_buffer(renderer, null, dynamic_buffer_size, stride=size_of(Textured_Vert), mappable=true);
buffer.vb = create_vertex_buffer(engine.renderer, null, dynamic_buffer_size, stride=size_of(Textured_Vert), mappable=true);
ui_state.texture_vert_buffers[it] = buffer;
}
@@ -377,7 +377,7 @@ ui_init :: () {
{
dynamic_buffer_size := size_of(Rect_Instance_Data) * ui_state.max_verts;
ui_state.instance_rect_sb = create_structured_buffer(renderer, null, dynamic_buffer_size, stride=size_of(Rect_Instance_Data), mappable=true);
ui_state.instance_rect_sb = create_structured_buffer(engine.renderer, null, dynamic_buffer_size, stride=size_of(Rect_Instance_Data), mappable=true);
}
}
@@ -390,7 +390,7 @@ ui_figure_out_sizes :: () {
box.size.x = box.semantic_size[0].value + box.padding_left + box.padding_right;
}
case .TEXT_DIM; {
text_size := get_text_size(renderer, box.text, ui_state.fonts.button);
text_size := get_text_size(engine.renderer, box.text, ui_state.fonts.button);
box.size.x = text_size.x + box.padding_left + box.padding_right;
}
}
@@ -400,7 +400,7 @@ ui_figure_out_sizes :: () {
box.size.y = box.semantic_size[1].value + box.padding_top + box.padding_bottom;
}
case .TEXT_DIM; {
text_size := get_text_size(renderer, box.text, ui_state.fonts.button);
text_size := get_text_size(engine.renderer, box.text, ui_state.fonts.button);
box.size.y = text_size.y + box.padding_top + box.padding_bottom;
}
}
@@ -473,7 +473,7 @@ ui_figure_out_sizes :: () {
for *box : ui_state.boxes {
if box.style.texture != 0 {
w, h := get_texture_size(renderer, box.style.texture);
w, h := get_texture_size(engine.renderer, box.style.texture);
aspect := cast(float)w/cast(float)h;
current_aspect := cast(float)box.rect.w/cast(float)box.rect.h;
rect := box.rect;
@@ -496,14 +496,14 @@ ui_figure_out_sizes :: () {
}
//if box.semantic_size[0].size_kind == .KEEP_ASPECT {
// assert(box.style.texture != 0);
// w, h := get_texture_size(renderer, box.style.texture);
// w, h := get_texture_size(engine.renderer, box.style.texture);
// aspect := cast(float)w/cast(float)h;
// box.size.x = box.size.y * aspect;
//}
//
//if box.semantic_size[1].size_kind == .KEEP_ASPECT {
// assert(box.style.texture != 0);
// w, h := get_texture_size(renderer, box.style.texture);
// w, h := get_texture_size(engine.renderer, box.style.texture);
// aspect := cast(float)h/cast(float)w;
// box.size.y = box.size.x * aspect;
//}
@@ -649,27 +649,27 @@ ui_render :: () {
}
if ui_state.colored_verts.count > 0 {
//upload_data_to_buffer(renderer, ui_state.rect_vb, ui_state.colored_verts.data, cast(s32)ui_state.colored_verts.count * size_of(Colored_Vert));
//upload_data_to_buffer(engine.renderer, ui_state.rect_vb, ui_state.colored_verts.data, cast(s32)ui_state.colored_verts.count * size_of(Colored_Vert));
//push_cmd_set_draw_mode(renderer, .FILL);
//push_cmd_set_depth_write(renderer, false);
//push_cmd_set_pipeline_state(renderer, ui_state.shaders.ui_rect);
//push_cmd_set_draw_mode(engine.renderer, .FILL);
//push_cmd_set_depth_write(engine.renderer, false);
//push_cmd_set_pipeline_state(engine.renderer, ui_state.shaders.ui_rect);
//push_cmd_set_vertex_buffer(renderer, ui_state.rect_vb);
//push_cmd_draw(renderer, ui_state.colored_verts.count);
//push_cmd_set_vertex_buffer(engine.renderer, ui_state.rect_vb);
//push_cmd_draw(engine.renderer, ui_state.colored_verts.count);
}
// NEW DRAW TIME
if ui_state.instanced_rects.count > 0 {
upload_data_to_buffer(renderer, ui_state.instance_rect_sb, ui_state.instanced_rects.data, cast(s32)ui_state.instanced_rects.count * size_of(Rect_Instance_Data));
upload_data_to_buffer(engine.renderer, ui_state.instance_rect_sb, ui_state.instanced_rects.data, cast(s32)ui_state.instanced_rects.count * size_of(Rect_Instance_Data));
push_cmd_set_draw_mode(renderer, .FILL);
push_cmd_set_depth_write(renderer, false);
push_cmd_set_pipeline_state(renderer, ui_state.shaders.ui);
push_cmd_set_draw_mode(engine.renderer, .FILL);
push_cmd_set_depth_write(engine.renderer, false);
push_cmd_set_pipeline_state(engine.renderer, ui_state.shaders.ui);
push_cmd_set_constant_buffer(renderer, 0, screen_data_buffer, .PIXEL);
push_cmd_set_structured_buffer(renderer, 0, ui_state.instance_rect_sb, .VERTEX);
push_cmd_draw_instanced(renderer, 4, ui_state.instanced_rects.count, topology=.TRIANGLE_STRIP);
push_cmd_set_constant_buffer(engine.renderer, 0, engine.screen_data_buffer, .PIXEL);
push_cmd_set_structured_buffer(engine.renderer, 0, ui_state.instance_rect_sb, .VERTEX);
push_cmd_draw_instanced(engine.renderer, 4, ui_state.instanced_rects.count, topology=.TRIANGLE_STRIP);
}
@@ -682,7 +682,7 @@ ui_render :: () {
}
// Render text
push_cmd_set_pipeline_state(renderer, ui_state.shaders.text);
push_cmd_set_pipeline_state(engine.renderer, ui_state.shaders.text);
for * ui_state.boxes {
if it.parent == null {
@@ -768,12 +768,12 @@ instance_data_from_rect :: (x: float, y: float, w: float, h: float, corner_radiu
}
ui_render_background_recursively :: (box: *UI_Box) {
inv_w := 1.0 / cast(float)renderer.render_target_width;
inv_h := 1.0 / cast(float)renderer.render_target_height;
inv_w := 1.0 / cast(float)engine.renderer.render_target_width;
inv_h := 1.0 / cast(float)engine.renderer.render_target_height;
if box.flags & .DRAW_BACKGROUND && box.style.texture == 0 {
x : float = box.rect.x * inv_w * 2.0 - 1.0;
y : float = (cast(float)renderer.render_target_height - box.rect.y) * inv_h * 2.0 - 1.0;
y : float = (cast(float)engine.renderer.render_target_height - box.rect.y) * inv_h * 2.0 - 1.0;
w : float = box.rect.w * inv_w * 2.0;
h : float = box.rect.h * inv_h * 2.0;
@@ -792,7 +792,7 @@ ui_render_background_recursively :: (box: *UI_Box) {
if box.flags & .DRAW_BORDER {
x : float = box.rect.x * inv_w * 2.0 - 1.0;
y : float = (cast(float)renderer.render_target_height - box.rect.y) * inv_h * 2.0 - 1.0;
y : float = (cast(float)engine.renderer.render_target_height - box.rect.y) * inv_h * 2.0 - 1.0;
w : float = box.rect.w * inv_w * 2.0;
h : float = box.rect.h * inv_h * 2.0;
@@ -803,7 +803,7 @@ ui_render_background_recursively :: (box: *UI_Box) {
if should_draw_hover_animation(box) {
x : float = box.rect.x * inv_w * 2.0 - 1.0;
y : float = (cast(float)renderer.render_target_height - box.rect.y) * inv_h * 2.0 - 1.0;
y : float = (cast(float)engine.renderer.render_target_height - box.rect.y) * inv_h * 2.0 - 1.0;
w : float = box.rect.w * inv_w * 2.0;
h : float = box.rect.h * inv_h * 2.0;
@@ -830,17 +830,17 @@ get_next_available_texture_vert_buffer :: () -> *Textured_Vert_Buffer {
}
ui_render_texture_background_recursively :: (box: *UI_Box) {
inv_w := 1.0 / cast(float)renderer.render_target_width;
inv_h := 1.0 / cast(float)renderer.render_target_height;
inv_w := 1.0 / cast(float)engine.renderer.render_target_width;
inv_h := 1.0 / cast(float)engine.renderer.render_target_height;
if box.flags & .DRAW_BACKGROUND && box.style.texture != 0 {
buffer := get_next_available_texture_vert_buffer();
rect := box.rect;
inv_w := 1.0 / cast(float)renderer.render_target_width;
inv_h := 1.0 / cast(float)renderer.render_target_height;
inv_w := 1.0 / cast(float)engine.renderer.render_target_width;
inv_h := 1.0 / cast(float)engine.renderer.render_target_height;
x : float = rect.x * inv_w * 2.0 - 1.0;
y : float = (cast(float)renderer.render_target_height - rect.y) * inv_h * 2.0 - 1.0;
y : float = (cast(float)engine.renderer.render_target_height - rect.y) * inv_h * 2.0 - 1.0;
w : float = rect.w * inv_w * 2.0;
h : float = rect.h * inv_h * 2.0;
@@ -852,17 +852,17 @@ ui_render_texture_background_recursively :: (box: *UI_Box) {
buffer.verts[4] = make_vert_textured(x, y, 0.0, 0.0);
buffer.verts[5] = make_vert_textured(x + w, y, 1.0, 0.0);
upload_data_to_buffer(renderer, buffer.vb, buffer.verts.data, 6 * size_of(Textured_Vert));
upload_data_to_buffer(engine.renderer, buffer.vb, buffer.verts.data, 6 * size_of(Textured_Vert));
push_cmd_set_draw_mode(renderer, .FILL);
push_cmd_set_depth_write(renderer, false);
push_cmd_set_pipeline_state(renderer, ui_state.shaders.ui_rect_textured);
push_cmd_set_draw_mode(engine.renderer, .FILL);
push_cmd_set_depth_write(engine.renderer, false);
push_cmd_set_pipeline_state(engine.renderer, ui_state.shaders.ui_rect_textured);
push_cmd_set_sampler(renderer, 0, ui_state.sampler);
push_cmd_set_texture(renderer, 0, box.style.texture);
push_cmd_set_sampler(engine.renderer, 0, ui_state.sampler);
push_cmd_set_texture(engine.renderer, 0, box.style.texture);
push_cmd_set_vertex_buffer(renderer, buffer.vb);
push_cmd_draw(renderer, 6);
push_cmd_set_vertex_buffer(engine.renderer, buffer.vb);
push_cmd_draw(engine.renderer, 6);
}
child := box.first_child;
@@ -873,17 +873,17 @@ ui_render_texture_background_recursively :: (box: *UI_Box) {
}
ui_render_text_recursively :: (box: *UI_Box) {
inv_w := 1.0 / cast(float)renderer.render_target_width;
inv_h := 1.0 / cast(float)renderer.render_target_height;
inv_w := 1.0 / cast(float)engine.renderer.render_target_width;
inv_h := 1.0 / cast(float)engine.renderer.render_target_height;
if box.flags & .DRAW_TEXT {
font_handle := ui_state.fonts.regular;
text_size := get_text_size(renderer, box.text, font_handle);
text_size := get_text_size(engine.renderer, box.text, font_handle);
x := box.rect.x + box.padding_left;
y := cast(float)renderer.render_target_height - box.rect.y - box.rect.h + box.padding_bottom;
y := cast(float)engine.renderer.render_target_height - box.rect.y - box.rect.h + box.padding_bottom;
if box.alignment_flags & .CENTER_HORIZONTALLY {
x += box.rect.w * 0.5 - text_size.x * 0.5;
}
@@ -896,12 +896,12 @@ ui_render_text_recursively :: (box: *UI_Box) {
x += box.rect.w - text_size.x;
}
render_data := bake_text(renderer, x, y, box.text, font_handle, box.style.text_color);
font := *renderer.fonts[font_handle - 1];
render_data := bake_text(engine.renderer, x, y, box.text, font_handle, box.style.text_color);
font := *engine.renderer.fonts[font_handle - 1];
push_cmd_set_texture(renderer, 0, font.texture);
push_cmd_set_vertex_buffer(renderer, render_data.vb);
push_cmd_draw(renderer, render_data.vert_count);
push_cmd_set_texture(engine.renderer, 0, font.texture);
push_cmd_set_vertex_buffer(engine.renderer, render_data.vb);
push_cmd_draw(engine.renderer, render_data.vert_count);
}
child := box.first_child;
@@ -918,8 +918,8 @@ is_mouse_inside :: (x: float, y: float, rect: Rect) -> bool {
}
ui_update_input :: () {
mouse_x := input.mouse.x;
mouse_y := input.mouse.y;
mouse_x := engine.input.mouse.x;
mouse_y := engine.input.mouse.y;
for *box: ui_state.boxes {
if box.flags & .CLICKABLE {

View File

@@ -1,6 +1,6 @@
ui_full_size_background :: (identifier: s64 = 0, loc := #caller_location) {
ui_set_next_size_x(.PIXELS, xx renderer.render_target_width);
ui_set_next_size_y(.PIXELS, xx renderer.render_target_height);
ui_set_next_size_x(.PIXELS, xx engine.renderer.render_target_width);
ui_set_next_size_y(.PIXELS, xx engine.renderer.render_target_height);
ui_set_next_background_color(.{0.0, 0.0, 0.0, 1.0});
@@ -117,7 +117,7 @@ ui_clickable_label :: (text: string, selected: bool = false, identifier: s64 = 0
ui_toolbar :: (identifier: s64 = 0, loc := #caller_location) {
ui_set_next_background_color(.{0.2,0.2,0.2,1});
ui_set_next_size_x(.PIXELS, xx renderer.render_target_width);
ui_set_next_size_x(.PIXELS, xx engine.renderer.render_target_width);
ui_set_next_size_y(.CHILDREN_SUM);
box := ui_box_make(.DRAW_BACKGROUND | .DRAW_BORDER, get_hash(loc, identifier));
}
@@ -182,7 +182,7 @@ ui_slider :: (value: *float, min: float = 0.0, max: float = 1.0, identifier: s64
ui_set_next_background_color(.{0.5,0.5,0.5,1});
draggable := ui_box(.DRAW_BACKGROUND | .CLICKABLE | .ANIMATE_ON_HOVER);
mouse_delta_x := input.mouse.delta_x;
mouse_delta_x := engine.input.mouse.delta_x;
if draggable.interaction.left_mouse_pressed {
increment := (max - min) / box.rect.w;
<<value = clamp(<<value + mouse_delta_x * increment, min, max);