diff --git a/.build/.added_strings_w3.jai b/.build/.added_strings_w3.jai index b153b7e..d8d3cd0 100644 --- a/.build/.added_strings_w3.jai +++ b/.build/.added_strings_w3.jai @@ -58,15 +58,15 @@ deserialize_entity :: (scene: *Scene, path: string) -> *Entity { // new_block :: (scene: *Scene = null) -> *Block { _scene := scene; if _scene == null { -_scene = current_scene; } +_scene = engine.current_scene; } p, locator := find_and_occupy_empty_slot(*_scene.by_type._Block); p._locator = locator; register_entity(_scene, p); p.transform = create_identity_transform(); init_entity(p); return p; } new_character :: (scene: *Scene = null) -> *Character { _scene := scene; if _scene == null { -_scene = current_scene; } +_scene = engine.current_scene; } p, locator := find_and_occupy_empty_slot(*_scene.by_type._Character); p._locator = locator; register_entity(_scene, p); p.transform = create_identity_transform(); init_entity(p); return p; } new_item :: (scene: *Scene = null) -> *Item { _scene := scene; if _scene == null { -_scene = current_scene; } +_scene = engine.current_scene; } p, locator := find_and_occupy_empty_slot(*_scene.by_type._Item); p._locator = locator; register_entity(_scene, p); p.transform = create_identity_transform(); init_entity(p); return p; } // diff --git a/core/camera.jai b/core/camera.jai index 7a58079..3dd4a31 100644 --- a/core/camera.jai +++ b/core/camera.jai @@ -127,16 +127,16 @@ world_to_screen :: (camera: Camera, world_position: Vector3) -> Vector3 { position.z /= position.w; screen_position : Vector3; - screen_position.x = (position.x + 1.0) * 0.5 * cast(float)renderer.render_target_width; - screen_position.y = (position.y + 1.0) * 0.5 * cast(float)renderer.render_target_height; + screen_position.x = (position.x + 1.0) * 0.5 * cast(float)engine.renderer.render_target_width; + screen_position.y = (position.y + 1.0) * 0.5 * cast(float)engine.renderer.render_target_height; screen_position.z = position.z; return screen_position; } screen_to_world :: (camera: Camera, screen_position: Vector2) -> Vector3 { pos : Vector4; - pos.x = (screen_position.x / cast(float)renderer.render_target_width) * 2.0 - 1.0; - pos.y = (screen_position.y / cast(float)renderer.render_target_height) * 2.0 - 1.0; + pos.x = (screen_position.x / cast(float)engine.renderer.render_target_width) * 2.0 - 1.0; + pos.y = (screen_position.y / cast(float)engine.renderer.render_target_height) * 2.0 - 1.0; pos.z = 0.0; pos.w = 1.0; diff --git a/core/console.jai b/core/console.jai index 1eacdbd..b9a6e8c 100644 --- a/core/console.jai +++ b/core/console.jai @@ -42,24 +42,24 @@ init_console :: () { console = New(Console); console.verts.allocator = temp; buffer_size := size_of(Colored_Vert) * 12; - console.vb = create_vertex_buffer(renderer, null, xx buffer_size, stride=size_of(Colored_Vert), mappable=true); - console.cursor_vb = create_vertex_buffer(renderer, null, xx buffer_size, stride=size_of(Colored_Vert), mappable=true); + console.vb = create_vertex_buffer(engine.renderer, null, xx buffer_size, stride=size_of(Colored_Vert), mappable=true); + console.cursor_vb = create_vertex_buffer(engine.renderer, null, xx buffer_size, stride=size_of(Colored_Vert), mappable=true); { - 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}; layout[1] = .{0, .COLOR_WITH_ALPHA, 0}; params : [0] Shader_Parameter; - console.rect_pipeline = create_pipeline_state(renderer, vs, ps, layout, params, blend_type=.TRANSPARENT); + console.rect_pipeline = 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}; @@ -67,10 +67,10 @@ init_console :: () { layout[2] = .{0,.COLOR_WITH_ALPHA, 0}; params : [0] Shader_Parameter; - console.text_pipeline = create_pipeline_state(renderer, vs, ps, layout, params, blend_type=.TRANSPARENT); + console.text_pipeline = create_pipeline_state(engine.renderer, vs, ps, layout, params, blend_type=.TRANSPARENT); } - console.font = create_font(renderer, "../assets/fonts/Inconsolata-Regular.ttf", 18); + console.font = create_font(engine.renderer, "../assets/fonts/Inconsolata-Regular.ttf", 18); console.current_string = alloc_string(256); console.current_string.count = 0; @@ -96,7 +96,7 @@ find_command :: (console: *Console, cmd_str: string) -> Command_Proc, bool { update_console :: () { if key_down(.TILDE) { console.active = !console.active; - input.has_char = false; // Make sure that the tilde is not used as the first input character in the console + engine.input.has_char = false; // Make sure that the tilde is not used as the first input character in the console } if console.active { @@ -140,15 +140,15 @@ update_console :: () { } } - if input.has_char { + if engine.input.has_char { if console.current_string.count < 256 { - console.current_string.data[console.current_string.count] = xx input.current_char; + console.current_string.data[console.current_string.count] = xx engine.input.current_char; console.current_string.count += 1; - input.has_char = false; + engine.input.has_char = false; } } - eat_all_input(*input); + eat_all_input(*engine.input); } } @@ -161,11 +161,11 @@ make_vert :: (x: float, y: float, color: Color) -> Colored_Vert { } add_rect :: (renderer: *Renderer, x: float, y: float, width: float, height: float, color: Color, verts: *[..] Colored_Vert) { - 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 = x * inv_w * 2.0 - 1.0; - y = (cast(float)renderer.render_target_height - y) * inv_h * 2.0 - 1.0; + y = (cast(float)engine.renderer.render_target_height - y) * inv_h * 2.0 - 1.0; w : float = width * inv_w * 2.0; h : float = height * inv_h * 2.0; @@ -199,34 +199,34 @@ render_console :: () { console_color : Color = .{48.0/255.0, 64.0/255.0, 36.0/255.0, 0.7}; console_line_color : Color = .{18.0/255.0, 34.0/255.0, 6.0/255.0, 0.7}; - add_rect(renderer, 0.0, cast(float)renderer.render_target_height - 200 + offset_y, cast(float)renderer.render_target_width, 200.0, console_color, *console.verts); - add_rect(renderer, 0.0, cast(float)renderer.render_target_height - 30 + offset_y, cast(float)renderer.render_target_width, 30.0, console_line_color , *console.verts); + add_rect(engine.renderer, 0.0, cast(float)engine.renderer.render_target_height - 200 + offset_y, cast(float)engine.renderer.render_target_width, 200.0, console_color, *console.verts); + add_rect(engine.renderer, 0.0, cast(float)engine.renderer.render_target_height - 30 + offset_y, cast(float)engine.renderer.render_target_width, 30.0, console_line_color , *console.verts); - upload_data_to_buffer(renderer, console.vb, console.verts.data, cast(s32)console.verts.count * size_of(Colored_Vert)); + upload_data_to_buffer(engine.renderer, console.vb, console.verts.data, cast(s32)console.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, console.rect_pipeline); + push_cmd_set_draw_mode(engine.renderer, .FILL); + push_cmd_set_depth_write(engine.renderer, false); + push_cmd_set_pipeline_state(engine.renderer, console.rect_pipeline); - push_cmd_set_vertex_buffer(renderer, console.vb); - push_cmd_draw(renderer, console.verts.count); + push_cmd_set_vertex_buffer(engine.renderer, console.vb); + push_cmd_draw(engine.renderer, console.verts.count); - push_cmd_set_pipeline_state(renderer, console.text_pipeline); - font := *renderer.fonts[console.font - 1]; - push_cmd_set_texture(renderer, 0, font.texture); + push_cmd_set_pipeline_state(engine.renderer, console.text_pipeline); + font := *engine.renderer.fonts[console.font - 1]; + push_cmd_set_texture(engine.renderer, 0, font.texture); - size := get_text_size(renderer, ">", console.font); + size := get_text_size(engine.renderer, ">", console.font); - render_data := bake_text(renderer, 5.0, size.y - offset_y, ">", console.font, .{1,1,1,1}); - push_cmd_set_vertex_buffer(renderer, render_data.vb); - push_cmd_draw(renderer, render_data.vert_count); + render_data := bake_text(engine.renderer, 5.0, size.y - offset_y, ">", console.font, .{1,1,1,1}); + push_cmd_set_vertex_buffer(engine.renderer, render_data.vb); + push_cmd_draw(engine.renderer, render_data.vert_count); x := 15.0; if console.current_string.count > 0 { - render_data := bake_text(renderer, x, size.y - offset_y, console.current_string, console.font, .{1,1,1,1}); - push_cmd_set_vertex_buffer(renderer, render_data.vb); - push_cmd_draw(renderer, render_data.vert_count); + render_data := bake_text(engine.renderer, x, size.y - offset_y, console.current_string, console.font, .{1,1,1,1}); + push_cmd_set_vertex_buffer(engine.renderer, render_data.vb); + push_cmd_draw(engine.renderer, render_data.vert_count); x = 10 + render_data.size.x + 2.0; } @@ -241,9 +241,9 @@ render_console :: () { entry := console.buffer[i]; - render_data := bake_text(renderer, 15.0, y - offset_y, entry.text, console.font, entry.color); - push_cmd_set_vertex_buffer(renderer, render_data.vb); - push_cmd_draw(renderer, render_data.vert_count); + render_data := bake_text(engine.renderer, 15.0, y - offset_y, entry.text, console.font, entry.color); + push_cmd_set_vertex_buffer(engine.renderer, render_data.vb); + push_cmd_draw(engine.renderer, render_data.vert_count); y += 20.0; } @@ -251,16 +251,16 @@ render_console :: () { console.verts.count = 0; //#if !NEW_UI { - add_rect(renderer, x, cast(float)renderer.render_target_height - 25 + offset_y, 10, 20.0, .{1,1,1,1}, *console.verts); + add_rect(engine.renderer, x, cast(float)engine.renderer.render_target_height - 25 + offset_y, 10, 20.0, .{1,1,1,1}, *console.verts); //} - upload_data_to_buffer(renderer, console.cursor_vb, console.verts.data, cast(s32)console.verts.count * size_of(Colored_Vert)); + upload_data_to_buffer(engine.renderer, console.cursor_vb, console.verts.data, cast(s32)console.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, console.rect_pipeline); - push_cmd_set_vertex_buffer(renderer, console.cursor_vb); - push_cmd_draw(renderer, console.verts.count); + push_cmd_set_draw_mode(engine.renderer, .FILL); + push_cmd_set_depth_write(engine.renderer, false); + push_cmd_set_pipeline_state(engine.renderer, console.rect_pipeline); + push_cmd_set_vertex_buffer(engine.renderer, console.cursor_vb); + push_cmd_draw(engine.renderer, console.verts.count); } push_entry :: (buffer: *[..] Buffer_Entry, text: string, color: Color) { diff --git a/core/entity.jai b/core/entity.jai index 055e576..4e776d4 100644 --- a/core/entity.jai +++ b/core/entity.jai @@ -111,7 +111,7 @@ set_base_color :: (e: *Entity, color: Vector4, node_name: string = "") { if data.material_buffer > 0 { material : Entity_Material = ---; material.base_color = color; - upload_data_to_buffer(renderer, data.material_buffer, *material, size_of(Entity_Material)); + upload_data_to_buffer(engine.renderer, data.material_buffer, *material, size_of(Entity_Material)); } } } @@ -148,13 +148,13 @@ load_model_into_entity :: (e: *Entity, model: *Model) { material.base_color = it.material_defaults[0].base_color; // @Incomplete: What if there are multiple meshes? data.material = material; - data.transform_buffer = create_constant_buffer(renderer, null, size_of(Matrix4), mappable=true); - data.material_buffer = create_constant_buffer(renderer, *material, size_of(Entity_Material), mappable=true); + data.transform_buffer = create_constant_buffer(engine.renderer, null, size_of(Matrix4), mappable=true); + data.material_buffer = create_constant_buffer(engine.renderer, *material, size_of(Entity_Material), mappable=true); data.num_bones = it.num_bones; if it.num_bones > 0 { for bone_index: 0..it.num_bones-1 { - data.bone_buffers[bone_index] = create_constant_buffer(renderer, null, size_of(Matrix4) * MAX_BONES, mappable=true); + data.bone_buffers[bone_index] = create_constant_buffer(engine.renderer, null, size_of(Matrix4) * MAX_BONES, mappable=true); } } } @@ -169,22 +169,22 @@ destroy_entity :: (e: *Entity, remove_from_scene: bool = true) { node_data := e.renderable.nodes[it]; if node_data.transform_buffer > 0 { - destroy_buffer(renderer, node_data.transform_buffer); + destroy_buffer(engine.renderer, node_data.transform_buffer); } if node_data.material_buffer > 0 { - destroy_buffer(renderer, node_data.material_buffer); + destroy_buffer(engine.renderer, node_data.material_buffer); } for bi: 0..node_data.num_bones-1 { - destroy_buffer(renderer, node_data.bone_buffers[bi]); + destroy_buffer(engine.renderer, node_data.bone_buffers[bi]); } } if remove_from_scene { - array_unordered_remove_by_value(*game_state.current_scene.entities, e); + array_unordered_remove_by_value(*game_state.engine.current_scene.entities, e); if e.type == { - case Block; bucket_array_remove(*game_state.current_scene.by_type._Block, e._locator); + case Block; bucket_array_remove(*game_state.engine.current_scene.by_type._Block, e._locator); } } } diff --git a/core/particles.jai b/core/particles.jai index cfb9673..857e15f 100644 --- a/core/particles.jai +++ b/core/particles.jai @@ -36,10 +36,10 @@ Particle_System :: struct { } create_particle_system :: (pipeline: Pipeline_State_Handle, update_func: (*Particle_System, float), owning_entity: *Entity = null, scene: *Scene = null) -> *Particle_System { - lvl := ifx scene == null then current_scene else scene; + lvl := ifx scene == null then engine.current_scene else scene; particle_system, locator := find_and_occupy_empty_slot(*scene.particle_systems); particle_system._locator = locator; - particle_system.vertex_buffer = create_vertex_buffer(renderer, null, size_of(Particle_Vertex) * MAX_PARTICLES, stride=size_of(Particle_Vertex), mappable=true); + particle_system.vertex_buffer = create_vertex_buffer(engine.renderer, null, size_of(Particle_Vertex) * MAX_PARTICLES, stride=size_of(Particle_Vertex), mappable=true); particle_system.pipeline = pipeline; particle_system.on_particle_update = update_func; particle_system.owning_entity = owning_entity; @@ -60,7 +60,7 @@ spawn_particle :: (system: *Particle_System, position: Vector3, velocity: Vector } update_particle_systems :: (dt: float) { - for *system: current_scene.particle_systems { + for *system: engine.current_scene.particle_systems { if system.on_particle_update != null { system.on_particle_update(system, dt); } @@ -71,9 +71,9 @@ update_particle_system :: (system: *Particle_System, dt: float) { } prepare_particle_system_for_rendering :: (system: Particle_System) { - up := current_scene.camera.up; - right := current_scene.camera.right; - forward := current_scene.camera.forward; + up := engine.current_scene.camera.up; + right := engine.current_scene.camera.right; + forward := engine.current_scene.camera.forward; rendering_data : [..] Particle_Vertex; rendering_data.allocator = temp; @@ -135,25 +135,25 @@ prepare_particle_system_for_rendering :: (system: Particle_System) { } if rendering_data.count > 0 { - upload_data_to_buffer(renderer, system.vertex_buffer, rendering_data.data, size_of(Particle_Vertex) * rendering_data.count); + upload_data_to_buffer(engine.renderer, system.vertex_buffer, rendering_data.data, size_of(Particle_Vertex) * rendering_data.count); } } render_particle_systems :: () { - for system: current_scene.particle_systems { + for system: engine.current_scene.particle_systems { prepare_particle_system_for_rendering(system); if system.particles.count > 0 { - push_cmd_set_draw_mode(renderer, .FILL); - push_cmd_set_depth_write(renderer, true); - push_cmd_set_cull_face(renderer, .BACK); - push_cmd_set_pipeline_state(renderer, system.pipeline); + push_cmd_set_draw_mode(engine.renderer, .FILL); + push_cmd_set_depth_write(engine.renderer, true); + push_cmd_set_cull_face(engine.renderer, .BACK); + push_cmd_set_pipeline_state(engine.renderer, system.pipeline); - push_cmd_set_constant_buffer(renderer, 0, camera_buffer, .VERTEX); + push_cmd_set_constant_buffer(engine.renderer, 0, engine.camera_buffer, .VERTEX); - push_cmd_set_vertex_buffer(renderer, system.vertex_buffer); + push_cmd_set_vertex_buffer(engine.renderer, system.vertex_buffer); - push_cmd_draw(renderer, system.particles.count * 6); + push_cmd_draw(engine.renderer, system.particles.count * 6); } } } diff --git a/core/ray.jai b/core/ray.jai index 91b07a9..29fec28 100644 --- a/core/ray.jai +++ b/core/ray.jai @@ -197,7 +197,7 @@ ray_entity_intersect :: (ray: Ray, e: *Entity) -> bool, float, Vector3 { for n: e.renderable.model.nodes { render_node := e.renderable.nodes[it_index]; for handle: n.meshes { - m := parray_get(*renderer.meshes, handle); + m := parray_get(*engine.renderer.meshes, handle); index := 0; diff --git a/core/scene.jai b/core/scene.jai index 7a7d189..3d9b85a 100644 --- a/core/scene.jai +++ b/core/scene.jai @@ -107,7 +107,7 @@ create_scene :: (name: string, max_entities: s64 = 256) -> *Scene { dir_light_data : Directional_Light_Buffer_Data; dir_light_data.color_and_intensity = scene.directional_light.color_and_intensity; dir_light_data.direction = scene.directional_light.direction; - upload_data_to_buffer(renderer, directional_light_buffer, *dir_light_data, size_of(Directional_Light_Buffer_Data)); + upload_data_to_buffer(engine.renderer, engine.directional_light_buffer, *dir_light_data, size_of(Directional_Light_Buffer_Data)); return scene; } @@ -133,7 +133,7 @@ unregister_entity :: (scene: *Scene, entity: *Entity) { } update_animators :: (dt: float) { - for e: current_scene.entities { + for e: engine.current_scene.entities { if e.flags & .ANIMATED { update_animator(e, *e.animator, dt); } @@ -141,7 +141,7 @@ update_animators :: (dt: float) { } update_transforms :: () { - for e: current_scene.entities { + for e: engine.current_scene.entities { if e.parent == null { update_entity_transform(e, Matrix4_Identity); } diff --git a/editor/editor.jai b/editor/editor.jai index 1da44a3..3c75fc9 100644 --- a/editor/editor.jai +++ b/editor/editor.jai @@ -64,7 +64,7 @@ Editor :: struct { should_check_entities: bool; camera: Camera; transform_gizmo: Transform_Gizmo; - selected_entity: *Entity; + selected_entities: [..] *Entity; mouse_viewport_state: Interaction_State; last_right_mouse_click_time: float; @@ -262,12 +262,12 @@ update_transform_gizmo :: (ray: Ray, mouse_position: Vector2) -> bool { // r1.direction = rotate(axis_vec, engine.editor.transform_gizmo.transform.orientation); // // Shoot a ray from screen to world // mouse_position : Vector2; -// mouse_position.x = xx engine.input.mouse.x; -// mouse_position.y = xx engine.input.mouse.y; +// mouse_position.x = xx engine.engine.input.mouse.x; +// mouse_position.y = xx engine.engine.input.mouse.y; // // screen_size : Vector2; -// screen_size.x = cast(float)engine.window.width; -// screen_size.y = cast(float)engine.window.height; +// screen_size.x = cast(float)engine.engine.window.width; +// screen_size.y = cast(float)engine.engine.window.height; // // r2 := screen_to_ray_v2(*engine.editor.camera, mouse_position, screen_size); // diff --git a/editor/editor_ui.jai b/editor/editor_ui.jai index 94e7cbe..cc7f3ad 100644 --- a/editor/editor_ui.jai +++ b/editor/editor_ui.jai @@ -1,13 +1,13 @@ #load "../ui/widgets.jai"; pick_scene_view_at :: (coordinates: Vector2) { - ray := normalized_screen_to_ray_v2(*current_scene.camera, coordinates); + ray := normalized_screen_to_ray_v2(*engine.current_scene.camera, coordinates); if editor.should_check_entities { hit_entity : *Entity; closest : float = 100000000; - for current_scene.entities { + for engine.current_scene.entities { if !(it.flags & .RENDERABLE) continue; //if it.flags & Entity_Flags.DELETED || !it.selectable || it.parent != null continue; @@ -19,11 +19,14 @@ pick_scene_view_at :: (coordinates: Vector2) { } if hit_entity != null { - if cast(*Entity)hit_entity != editor.selected_entity { - editor.selected_entity = hit_entity; + if !array_find(editor.selected_entities, hit_entity) { + if !key_pressed(.CTRL) { + editor.selected_entities.count = 0; + } + array_add(*editor.selected_entities, hit_entity); } - } else if editor.selected_entity != null { - editor.selected_entity = null; + } else { + editor.selected_entities.count = 0; } } } @@ -55,16 +58,16 @@ editor_ui :: () { // case .PLAYING; { // ui_set_next_background_color(.{0,0.6,0,1}); // if ui_button_with_texture(editor.icons.stop) { - // edit_current_scene(); + // edit_engine.current_scene(); // } - // ui_label(tprint("Playing '%'", current_scene.name), .{0,0.7,0,1}); + // ui_label(tprint("Playing '%'", engine.current_scene.name), .{0,0.7,0,1}); // } // case .EDITING; { ui_set_next_background_color(.{0.6,0,0,1}); //if ui_button_with_texture(editor.icons.play) { // play_current_editor_scene(); //} - ui_label(tprint("Editing '%'", current_scene.name), .{1,1,1,1}); + ui_label(tprint("Editing '%'", engine.current_scene.name), .{1,1,1,1}); //} //} } @@ -93,17 +96,18 @@ editor_ui :: () { ui_set_next_size_x(.PCT, 1.0); ui_tab_title_bar("ENTITIES"); - for current_scene.entities { + for engine.current_scene.entities { ui_set_next_padding(20); clicked := false; + selected := array_find(editor.selected_entities, it); if it.name.count == 0 { - clicked = ui_clickable_label(tprint("%", it.type), it == editor.selected_entity, it_index); + clicked = ui_clickable_label(tprint("%", it.type), selected, it_index); } else { - clicked = ui_clickable_label(it.name, it == editor.selected_entity, it_index); + clicked = ui_clickable_label(it.name, selected, it_index); } - if clicked { - editor.selected_entity = it; + if clicked && !selected { + array_add(*editor.selected_entities, it); } //ui_space(0, 5); } @@ -149,14 +153,14 @@ editor_ui :: () { ui_set_next_size_x(.PCT, 1.0); ui_tab_title_bar("PROPERTIES"); - if editor.selected_entity != null { - ui_slider(*slider_value, 0.0, 1.0); - ui_label(tprint("Name: %", editor.selected_entity.name)); - ui_label(tprint("Id: %", editor.selected_entity.id)); - ui_label(tprint("Position: % % %", editor.selected_entity.transform.position.x, editor.selected_entity.transform.position.y, editor.selected_entity.transform.position.z)); - ui_label(tprint("Rotation: % % % %", editor.selected_entity.transform.orientation.x, editor.selected_entity.transform.orientation.y, editor.selected_entity.transform.orientation.z, editor.selected_entity.transform.orientation.w)); - ui_label(tprint("Scale: % % %", editor.selected_entity.transform.scale.x, editor.selected_entity.transform.scale.y, editor.selected_entity.transform.scale.z)); - } + //if editor.selected_entity != null { + // ui_slider(*slider_value, 0.0, 1.0); + // ui_label(tprint("Name: %", editor.selected_entity.name)); + // ui_label(tprint("Id: %", editor.selected_entity.id)); + // ui_label(tprint("Position: % % %", editor.selected_entity.transform.position.x, editor.selected_entity.transform.position.y, editor.selected_entity.transform.position.z)); + // ui_label(tprint("Rotation: % % % %", editor.selected_entity.transform.orientation.x, editor.selected_entity.transform.orientation.y, editor.selected_entity.transform.orientation.z, editor.selected_entity.transform.orientation.w)); + // ui_label(tprint("Scale: % % %", editor.selected_entity.transform.scale.x, editor.selected_entity.transform.scale.y, editor.selected_entity.transform.scale.z)); + //} } ui_pop_parent(); @@ -178,18 +182,18 @@ base_editor_update :: () { // @Incomplete: MOVE THIS editor.should_check_entities = true; - if editor.selected_entity != null { - gizmo_scale := distance(editor.selected_entity.transform.position, editor.camera.position) * 0.1 * 0.5; - editor.transform_gizmo.uniform_gizmo_scale = gizmo_scale; - set_scale(*editor.transform_gizmo.transform, .{gizmo_scale, gizmo_scale, gizmo_scale}); + //if editor.selected_entity != null { + // gizmo_scale := distance(editor.selected_entity.transform.position, editor.camera.position) * 0.1 * 0.5; + // editor.transform_gizmo.uniform_gizmo_scale = gizmo_scale; + // set_scale(*editor.transform_gizmo.transform, .{gizmo_scale, gizmo_scale, gizmo_scale}); - coordinates := Vector2.{editor.mouse_viewport_state.normalized_local_mouse_coordinates.x, 1.0 - editor.mouse_viewport_state.normalized_local_mouse_coordinates.y}; - ray := normalized_screen_to_ray_v2(*editor.camera, coordinates); + // coordinates := Vector2.{editor.mouse_viewport_state.normalized_local_mouse_coordinates.x, 1.0 - editor.mouse_viewport_state.normalized_local_mouse_coordinates.y}; + // ray := normalized_screen_to_ray_v2(*editor.camera, coordinates); - if update_transform_gizmo(ray, coordinates) { - editor.should_check_entities = false; - } - } + // if update_transform_gizmo(ray, coordinates) { + // editor.should_check_entities = false; + // } + //} editor_ui(); @@ -206,27 +210,27 @@ base_editor_update :: () { camera := *editor.camera; if key_pressed(.CTRL) && key_down(.S) { - save_scene(current_scene, "../assets/scenes/"); + save_scene(engine.current_scene, "../assets/scenes/"); //show_message("Saved scene"); } - if editor.selected_entity != null { - // @Incomplete:@Incomplete: Duplicate - //if key_pressed(.CTRL) && key_down(.D) { - // make_directory_if_it_does_not_exist("../temp"); - // save_entity(editor.selected_entity, "../temp/", "temp"); - // duplicated := load_entity(editor_scene, "../temp/temp.ent"); - // editor.selected_entity = duplicated; - //} + //if editor.selected_entity != null { + // // @Incomplete:@Incomplete: Duplicate + // //if key_pressed(.CTRL) && key_down(.D) { + // // make_directory_if_it_does_not_exist("../temp"); + // // save_entity(editor.selected_entity, "../temp/", "temp"); + // // duplicated := load_entity(editor_scene, "../temp/temp.ent"); + // // editor.selected_entity = duplicated; + // //} - // DELETE - // DELETE - //if key_down(.DELETE) || key_down(.BACKSPACE) { - // delete_entity(editor.selected_entity); - // editor.selected_entity = null; - // editor.transform_gizmo.selected_axis = .NONE; - //} - } + // // DELETE + // // DELETE + // //if key_down(.DELETE) || key_down(.BACKSPACE) { + // // delete_entity(editor.selected_entity); + // // editor.selected_entity = null; + // // editor.transform_gizmo.selected_axis = .NONE; + // //} + //} //if key_pressed(.CTRL) && key_down(.Z) { // editor_undo(); @@ -266,8 +270,8 @@ base_editor_update :: () { } MOUSE_SENSITIVITY :: 0.06; - camera.rotation.yaw -= input.mouse.delta_x * MOUSE_SENSITIVITY; - camera.rotation.pitch += -input.mouse.delta_y * MOUSE_SENSITIVITY; + camera.rotation.yaw -= engine.input.mouse.delta_x * MOUSE_SENSITIVITY; + camera.rotation.pitch += -engine.input.mouse.delta_y * MOUSE_SENSITIVITY; if key_down(.MOUSE_RIGHT) { editor.last_right_mouse_click_time = time; @@ -277,11 +281,11 @@ base_editor_update :: () { if time - editor.last_right_mouse_click_time < 0.2 { mouse_position : Vector2; - mouse_position.x = xx input.mouse.x; - mouse_position.y = xx input.mouse.y; + mouse_position.x = xx engine.input.mouse.x; + mouse_position.y = xx engine.input.mouse.y; editor.show_menu = true; editor.menu_position.x = mouse_position.x; - editor.menu_position.y = cast(float)renderer.render_target_height - mouse_position.y; + editor.menu_position.y = cast(float)engine.renderer.render_target_height - mouse_position.y; } if key_down(.W) { @@ -300,11 +304,11 @@ base_editor_update :: () { update_view_matrix(camera); } - if editor.selected_entity != null { - e := editor.selected_entity; - set_position(*editor.transform_gizmo.transform, e.transform.position); - update_gizmo_buffers(); - } + //if editor.selected_entity != null { + // e := editor.selected_entity; + // set_position(*editor.transform_gizmo.transform, e.transform.position); + // update_gizmo_buffers(); + //} - //edit_scene_settings(*game_state.current_scene.settings); + //edit_scene_settings(*game_state.engine.current_scene.settings); } diff --git a/input/input.jai b/input/input.jai index 74e0d3c..0e2e2c6 100644 --- a/input/input.jai +++ b/input/input.jai @@ -167,14 +167,14 @@ Input_State :: struct { } init_input :: () { - input = .{}; - input.has_char = false; + engine.input = .{}; + engine.input.has_char = false; init_sdl_input(); } update_key_state :: (key: Key_Code, down: bool) { - using input; + using engine.input; flags := keys[key]; if down { @@ -187,7 +187,7 @@ update_key_state :: (key: Key_Code, down: bool) { keys[key] = flags; - input.last_touched = .KEYBOARD_AND_MOUSE; + engine.input.last_touched = .KEYBOARD_AND_MOUSE; } update_gamepad_state :: (gamepad: *Gamepad, button: Gamepad_Button, down: bool) { @@ -196,7 +196,7 @@ update_gamepad_state :: (gamepad: *Gamepad, button: Gamepad_Button, down: bool) if down { if !(flags & Key_Flags.DOWN) { flags = Key_Flags.DOWN | Key_Flags.START; - input.last_touched = .GAMEPAD; + engine.input.last_touched = .GAMEPAD; } } else if flags & Key_Flags.DOWN { flags = Key_Flags.END; @@ -207,11 +207,11 @@ update_gamepad_state :: (gamepad: *Gamepad, button: Gamepad_Button, down: bool) } update_input :: () { - input.mouse.delta_x = 0.0; - input.mouse.delta_y = 0.0; - input.mouse.wheel = 0.0; - input.has_char = false; - remove_all_temp_key_flags(*input); + engine.input.mouse.delta_x = 0.0; + engine.input.mouse.delta_y = 0.0; + engine.input.mouse.wheel = 0.0; + engine.input.has_char = false; + remove_all_temp_key_flags(*engine.input); update_sdl_input(); @@ -245,11 +245,11 @@ eat_mouse_input :: (using input_state: *Input_State) { } eat_key :: (key: Key_Code) { - input.keys[key] |= Key_Flags.EATEN; + engine.input.keys[key] |= Key_Flags.EATEN; } action_down :: (action: Action) -> bool { - mapping := input.action_mappings[action]; + mapping := engine.input.action_mappings[action]; for 0..mapping.key_mapping_count-1 { if key_down(mapping.keys[it]) { return true; @@ -266,7 +266,7 @@ action_down :: (action: Action) -> bool { } action_pressed :: (action: Action) -> bool { - mapping := input.action_mappings[action]; + mapping := engine.input.action_mappings[action]; for 0..mapping.key_mapping_count-1 { if key_pressed(mapping.keys[it]) { return true; @@ -283,7 +283,7 @@ action_pressed :: (action: Action) -> bool { } action_up :: (action: Action) -> bool { - mapping := input.action_mappings[action]; + mapping := engine.input.action_mappings[action]; for 0..mapping.key_mapping_count-1 { if key_up(mapping.keys[it]) { return true; @@ -300,11 +300,11 @@ action_up :: (action: Action) -> bool { } get_mouse_delta_x :: inline () -> float { - return input.mouse.delta_x; + return engine.input.mouse.delta_x; } get_mouse_delta_y :: inline () -> float { - return input.mouse.delta_y; + return engine.input.mouse.delta_y; } get_mouse_delta :: () -> float, float { @@ -312,11 +312,11 @@ get_mouse_delta :: () -> float, float { } get_mouse_wheel_input :: () -> float { - return input.mouse.wheel; + return engine.input.mouse.wheel; } get_horizontal_axis :: () -> float { - if #complete input.last_touched == { + if #complete engine.input.last_touched == { case .KEYBOARD_AND_MOUSE; if key_pressed(.A) || key_pressed(.LEFT) return -1.0; else if key_pressed(.D) || key_pressed(.RIGHT) return 1.0; @@ -324,12 +324,12 @@ get_horizontal_axis :: () -> float { case .GAMEPAD; if gamepad_pressed(0, .DPAD_LEFT) return -1.0; else if gamepad_pressed(0, .DPAD_RIGHT) return 1.0; - return input.gamepads[0].left_stick_x; + return engine.input.gamepads[0].left_stick_x; } } get_vertical_axis :: () -> float { - if #complete input.last_touched == { + if #complete engine.input.last_touched == { case .KEYBOARD_AND_MOUSE; if key_pressed(.S) || key_pressed(.DOWN) return -1.0; else if key_pressed(.W) || key_pressed(.UP) return 1.0; @@ -337,51 +337,51 @@ get_vertical_axis :: () -> float { case .GAMEPAD; if gamepad_pressed(0, .DPAD_DOWN) return -1.0; else if gamepad_pressed(0, .DPAD_UP) return 1.0; - return -input.gamepads[0].left_stick_y; + return -engine.input.gamepads[0].left_stick_y; } } get_right_horizontal_axis :: () -> float { - if #complete input.last_touched == { + if #complete engine.input.last_touched == { case .KEYBOARD_AND_MOUSE; - return input.mouse.delta_x; + return engine.input.mouse.delta_x; case .GAMEPAD; - return input.gamepads[0].right_stick_x; + return engine.input.gamepads[0].right_stick_x; } } get_right_vertical_axis :: () -> float { - if #complete input.last_touched == { + if #complete engine.input.last_touched == { case .KEYBOARD_AND_MOUSE; - return input.mouse.delta_y; + return engine.input.mouse.delta_y; case .GAMEPAD; - return -input.gamepads[0].right_stick_y; + return -engine.input.gamepads[0].right_stick_y; } } key_down :: (key: Key_Code) -> bool { - flags := input.keys[key]; + flags := engine.input.keys[key]; return flags & .START && !(flags & .EATEN); } key_pressed :: (key: Key_Code) -> bool { - flags := input.keys[key]; + flags := engine.input.keys[key]; return flags & .DOWN && !(flags & .EATEN); } key_up :: (key: Key_Code) -> bool { - flags := input.keys[key]; + flags := engine.input.keys[key]; return flags & .END && !(flags & .EATEN); } gamepad_down :: (index: s32, button: Gamepad_Button) -> bool { - return cast(bool)(input.gamepads[index].buttons[button] & .START); + return cast(bool)(engine.input.gamepads[index].buttons[button] & .START); } gamepad_pressed :: (index: s32, button: Gamepad_Button) -> bool { - return cast(bool)(input.gamepads[index].buttons[button] & .DOWN); + return cast(bool)(engine.input.gamepads[index].buttons[button] & .DOWN); } gamepad_up :: (index: s32, button: Gamepad_Button) -> bool { - return cast(bool)(input.gamepads[index].buttons[button] & .END); + return cast(bool)(engine.input.gamepads[index].buttons[button] & .END); } diff --git a/input/sdl_input.jai b/input/sdl_input.jai index 877ab8c..7f2e342 100644 --- a/input/sdl_input.jai +++ b/input/sdl_input.jai @@ -80,7 +80,7 @@ update_sdl_input :: () { while SDL_PollEvent(*event) { if event.type == { case SDL_QUIT; { - input.exit = true; + engine.input.exit = true; } case SDL_KEYDOWN; { keycode, success := table_find(*key_mappings, event.key.keysym.sym); @@ -97,17 +97,17 @@ update_sdl_input :: () { } } case SDL_TEXTINPUT; { - input.current_char = event.text.text[0]; - input.has_char = true; + engine.input.current_char = event.text.text[0]; + engine.input.has_char = true; } case .SDL_MOUSEMOTION; { - input.mouse.delta_x += xx event.motion.xrel; - input.mouse.delta_y += xx event.motion.yrel; - input.mouse.x = xx event.motion.x; - input.mouse.y = xx event.motion.y; + engine.input.mouse.delta_x += xx event.motion.xrel; + engine.input.mouse.delta_y += xx event.motion.yrel; + engine.input.mouse.x = xx event.motion.x; + engine.input.mouse.y = xx event.motion.y; } case .SDL_MOUSEWHEEL; { - input.mouse.wheel += event.wheel.y; + engine.input.mouse.wheel += event.wheel.y; } case .SDL_CONTROLLERAXISMOTION; { sdl_gamepad_axis_update(event.caxis); @@ -143,27 +143,27 @@ update_sdl_input :: () { //mouse_x, mouse_y : s32; //SDL_GetRelativeMouseState(*mouse_x, *mouse_y); - //input.mouse.delta_x = xx mouse_x; - //input.mouse.delta_y = xx mouse_y; + //engine.input.mouse.delta_x = xx mouse_x; + //engine.input.mouse.delta_y = xx mouse_y; } sdl_connect_gamepad :: (input : *Input_State, id : SDL_JoystickID) { if !SDL_IsGameController(id) { return; - } else if input.num_gamepads >= MAX_GAMEPADS { + } else if engine.input.num_gamepads >= MAX_GAMEPADS { return; } // @Incomplete: Is this necessary? - //if input.gamepads[id].controller != null { + //if engine.input.gamepads[id].controller != null { // print("Already connected gamepad with id %\n", id); // return; //} gamepad : Gamepad; controller := xx SDL_GameControllerOpen(id); - input.gamepads[id] = gamepad; - input.num_gamepads += 1; + engine.input.gamepads[id] = gamepad; + engine.input.num_gamepads += 1; } sdl_disconnect_gamepad :: (input : *Input_State, id : SDL_JoystickID) { @@ -171,18 +171,18 @@ update_sdl_input :: () { return; } - gamepad := input.gamepads[id]; + gamepad := engine.input.gamepads[id]; //if !gamepad.controller { // return; //} - //input.gamepads[id].controller = null; + //engine.input.gamepads[id].controller = null; } update_gamepad_input :: () { // Deadzone checks - for 0..input.num_gamepads-1 { - gamepad := *input.gamepads[it]; + for 0..engine.input.num_gamepads-1 { + gamepad := *engine.input.gamepads[it]; if abs(gamepad.left_stick_x) + abs(gamepad.left_stick_y) < LEFT_STICK_DEADZONE { gamepad.left_stick_x = 0.0; @@ -197,10 +197,10 @@ update_gamepad_input :: () { } sdl_gamepad_axis_update :: (using event : SDL_ControllerAxisEvent) { - if which < 0 || which >= input.num_gamepads { + if which < 0 || which >= engine.input.num_gamepads { return; } - gamepad := *input.gamepads[which]; + gamepad := *engine.input.gamepads[which]; if cast(SDL_GameControllerAxis) axis == { case SDL_CONTROLLER_AXIS_LEFTX; { @@ -233,13 +233,13 @@ sdl_gamepad_axis_update :: (using event : SDL_ControllerAxisEvent) { } sdl_gamepad_button_update :: (using event : SDL_ControllerButtonEvent) { - if which < 0 || which >= input.num_gamepads { + if which < 0 || which >= engine.input.num_gamepads { return; } down := state == SDL_PRESSED; gamepad_button := sdl_button_map[button]; - gamepad := *input.gamepads[which]; + gamepad := *engine.input.gamepads[which]; update_gamepad_state(gamepad, gamepad_button, down); } @@ -251,10 +251,10 @@ sdl_gamepad_device_event :: (using event : SDL_ControllerDeviceEvent) { if type == { case SDL_CONTROLLERDEVICEADDED; { - sdl_connect_gamepad(*input, which); + sdl_connect_gamepad(*engine.input, which); } case SDL_CONTROLLERDEVICEREMOVED; { - sdl_disconnect_gamepad(*input, which); + sdl_disconnect_gamepad(*engine.input, which); } } } diff --git a/metaprogram.jai b/metaprogram.jai index 322e422..4503ced 100644 --- a/metaprogram.jai +++ b/metaprogram.jai @@ -262,7 +262,7 @@ generate_code :: (w: Workspace) { builder: String_Builder; for entity_type_names { - print_to_builder(*builder, "new_%1 :: (scene: *Scene = null) -> *%2 { _scene := scene;\nif _scene == null { \n_scene = current_scene; }\np, locator := find_and_occupy_empty_slot(*_scene.by_type._%2); p._locator = locator; register_entity(_scene, p); p.transform = create_identity_transform(); init_entity(p); return p; }\n", to_lower_copy_new(it,, allocator=temp), it); + print_to_builder(*builder, "new_%1 :: (scene: *Scene = null) -> *%2 { _scene := scene;\nif _scene == null { \n_scene = engine.current_scene; }\np, locator := find_and_occupy_empty_slot(*_scene.by_type._%2); p._locator = locator; register_entity(_scene, p); p.transform = create_identity_transform(); init_entity(p); return p; }\n", to_lower_copy_new(it,, allocator=temp), it); } add_build_string(builder_to_string(*builder), w); diff --git a/module.jai b/module.jai index fa659e0..ae2920a 100644 --- a/module.jai +++ b/module.jai @@ -18,15 +18,19 @@ Engine_Mode :: enum { } mode: Engine_Mode; -window: *Window; -renderer: *Renderer; -input : Input_State; -current_scene: *Scene; +Engine_Core :: struct { + window: *Window; + renderer: *Renderer; + input : Input_State; + current_scene: *Scene; -camera_buffer : Buffer_Handle; -time_buffer : Buffer_Handle; -screen_data_buffer : Buffer_Handle; -directional_light_buffer : Buffer_Handle; + camera_buffer : Buffer_Handle; + time_buffer : Buffer_Handle; + screen_data_buffer : Buffer_Handle; + directional_light_buffer : Buffer_Handle; +} + +engine: Engine_Core; time: float; dt: float; @@ -45,9 +49,9 @@ Shader_Time :: struct { } coven_init :: (window_title: string, window_width: u32, window_height: u32, fullscreen: bool) { - window = create_window(window_title, window_width, window_height, fullscreen); - renderer = create_renderer(window); - renderer.vsync = true; + engine.window = create_window(window_title, window_width, window_height, fullscreen); + engine.renderer = create_renderer(engine.window); + engine.renderer.vsync = true; init_input(); init_audio_system(); @@ -85,7 +89,7 @@ coven_run :: (game_update_proc: (float), game_update_post_physics_proc: (float)) update_animators(dt); - update_physics(current_scene, dt); + update_physics(engine.current_scene, dt); update_transforms(); game_update_post_physics_proc(dt); sync_engine_buffers(); @@ -99,7 +103,7 @@ coven_run :: (game_update_proc: (float), game_update_post_physics_proc: (float)) render(); } - SDL_DestroyWindow(window); + SDL_DestroyWindow(engine.window); SDL_Quit(); } diff --git a/modules/fmod/inc/fmod.cs b/modules/fmod/inc/fmod.cs index c3bc548..a65984b 100644 --- a/modules/fmod/inc/fmod.cs +++ b/modules/fmod/inc/fmod.cs @@ -3265,11 +3265,11 @@ namespace FMOD // Connection / disconnection / input and output enumeration. public RESULT addInput(DSP input) { - return FMOD5_DSP_AddInput(this.handle, input.handle, IntPtr.Zero, DSPCONNECTION_TYPE.STANDARD); + return FMOD5_DSP_AddInput(this.handle, engine.input.handle, IntPtr.Zero, DSPCONNECTION_TYPE.STANDARD); } public RESULT addInput(DSP input, out DSPConnection connection, DSPCONNECTION_TYPE type = DSPCONNECTION_TYPE.STANDARD) { - return FMOD5_DSP_AddInput(this.handle, input.handle, out connection.handle, type); + return FMOD5_DSP_AddInput(this.handle, engine.input.handle, out connection.handle, type); } public RESULT disconnectFrom(DSP target, DSPConnection connection) { @@ -3289,7 +3289,7 @@ namespace FMOD } public RESULT getInput(int index, out DSP input, out DSPConnection inputconnection) { - return FMOD5_DSP_GetInput(this.handle, index, out input.handle, out inputconnection.handle); + return FMOD5_DSP_GetInput(this.handle, index, out engine.input.handle, out inputconnection.handle); } public RESULT getOutput(int index, out DSP output, out DSPConnection outputconnection) { @@ -3568,7 +3568,7 @@ namespace FMOD { public RESULT getInput(out DSP input) { - return FMOD5_DSPConnection_GetInput(this.handle, out input.handle); + return FMOD5_DSPConnection_GetInput(this.handle, out engine.input.handle); } public RESULT getOutput(out DSP output) { diff --git a/modules/ufbx/examples/picort/picort.cpp b/modules/ufbx/examples/picort/picort.cpp index 8fa0b81..c703b1a 100644 --- a/modules/ufbx/examples/picort/picort.cpp +++ b/modules/ufbx/examples/picort/picort.cpp @@ -533,9 +533,9 @@ Image read_png(const void *data, size_t size) retain.initialized = false; ufbx_inflate_input input = { 0 }; - input.total_size = deflate_data.size(); - input.data_size = deflate_data.size(); - input.data = deflate_data.data(); + engine.input.total_size = deflate_data.size(); + engine.input.data_size = deflate_data.size(); + engine.input.data = deflate_data.data(); ptrdiff_t res = ufbx_inflate(src.data(), src.size(), &input, &retain); if (res < 0) return { "deflate error" }; @@ -3309,7 +3309,7 @@ void render_frame(ufbx_scene *original_scene, const Opts &opts, int frame_offset void render_file(const Opts &opts) { - verbosef("Loading scene: %s\n", opts.input.value.c_str()); + verbosef("Loading scene: %s\n", opts.engine.input.value.c_str()); ProgressState progress_state = { }; @@ -3371,9 +3371,9 @@ void parse_args(Opts &opts, int argc, char **argv, bool ignore_input) } } else { if (!ignore_input) { - opts.input.value = arg; - opts.input.defined = true; - opts.input.from_arg = true; + opts.engine.input.value = arg; + opts.engine.input.defined = true; + opts.engine.input.from_arg = true; } } } @@ -3489,7 +3489,7 @@ int main(int argc, char **argv) parse_args(opts, argc, argv, false); if (opts.help.value) { - fprintf(stderr, "Usage: picort input.fbx (--help)\n"); + fprintf(stderr, "Usage: picort engine.input.fbx (--help)\n"); for (OptBase &opt : opts) { char name[64]; if (opt.alias) { @@ -3511,13 +3511,13 @@ int main(int argc, char **argv) return 0; } - if (!opts.input.defined) { - fprintf(stderr, "Usage: picort input.fbx/.picort.txt (--help)\n"); + if (!opts.engine.input.defined) { + fprintf(stderr, "Usage: picort engine.input.fbx/.picort.txt (--help)\n"); return 0; } - if (ends_with(opts.input.value, ".txt")) { - std::string path = std::move(opts.input.value); + if (ends_with(opts.engine.input.value, ".txt")) { + std::string path = std::move(opts.engine.input.value); opts = Opts{}; parse_file(opts, path.c_str()); parse_args(opts, argc, argv, true); diff --git a/modules/ufbx/examples/viewer/external/dummy_sokol_app.h b/modules/ufbx/examples/viewer/external/dummy_sokol_app.h index acdec32..09fb4e2 100644 --- a/modules/ufbx/examples/viewer/external/dummy_sokol_app.h +++ b/modules/ufbx/examples/viewer/external/dummy_sokol_app.h @@ -532,7 +532,7 @@ When drag'n'drop is enabled, the event callback will be invoked with an event of type SAPP_EVENTTYPE_FILES_DROPPED whenever the user drops files on - the application window. + the application engine.window. After the SAPP_EVENTTYPE_FILES_DROPPED is received, you can query the number of dropped files, and their absolute paths by calling separate @@ -884,7 +884,7 @@ ================= On some platforms which don't provide a physical keyboard, sokol-app can display the platform's integrated onscreen keyboard for text - input. To request that the onscreen keyboard is shown, call + engine.input. To request that the onscreen keyboard is shown, call sapp_show_keyboard(true); @@ -949,7 +949,7 @@ sapp_desc.win32_console_create (default: false) When set to true, a new console window will be created and - stdout/stderr will be redirected to that console window. It + stdout/stderr will be redirected to that console engine.window. It doesn't matter if the application is started from the command line or via double-click. diff --git a/modules/ufbx/examples/viewer/external/sokol_app.h b/modules/ufbx/examples/viewer/external/sokol_app.h index 5455015..e1b31a8 100644 --- a/modules/ufbx/examples/viewer/external/sokol_app.h +++ b/modules/ufbx/examples/viewer/external/sokol_app.h @@ -532,7 +532,7 @@ When drag'n'drop is enabled, the event callback will be invoked with an event of type SAPP_EVENTTYPE_FILES_DROPPED whenever the user drops files on - the application window. + the application engine.window. After the SAPP_EVENTTYPE_FILES_DROPPED is received, you can query the number of dropped files, and their absolute paths by calling separate @@ -884,7 +884,7 @@ ================= On some platforms which don't provide a physical keyboard, sokol-app can display the platform's integrated onscreen keyboard for text - input. To request that the onscreen keyboard is shown, call + engine.input. To request that the onscreen keyboard is shown, call sapp_show_keyboard(true); @@ -949,7 +949,7 @@ sapp_desc.win32_console_create (default: false) When set to true, a new console window will be created and - stdout/stderr will be redirected to that console window. It + stdout/stderr will be redirected to that console engine.window. It doesn't matter if the application is started from the command line or via double-click. @@ -1750,7 +1750,7 @@ inline void sapp_run(const sapp_desc& desc) { return sapp_run(&desc); } #include #include #include - #include + #include #include #include #include @@ -3096,13 +3096,13 @@ _SOKOL_PRIVATE void _sapp_macos_frame(void) { styleMask:style backing:NSBackingStoreBuffered defer:NO]; - _sapp.macos.window.releasedWhenClosed = NO; // this is necessary for proper cleanup in applicationWillTerminate - _sapp.macos.window.title = [NSString stringWithUTF8String:_sapp.window_title]; - _sapp.macos.window.acceptsMouseMovedEvents = YES; - _sapp.macos.window.restorable = YES; + _sapp.macos.engine.window.releasedWhenClosed = NO; // this is necessary for proper cleanup in applicationWillTerminate + _sapp.macos.engine.window.title = [NSString stringWithUTF8String:_sapp.window_title]; + _sapp.macos.engine.window.acceptsMouseMovedEvents = YES; + _sapp.macos.engine.window.restorable = YES; _sapp.macos.win_dlg = [[_sapp_macos_window_delegate alloc] init]; - _sapp.macos.window.delegate = _sapp.macos.win_dlg; + _sapp.macos.engine.window.delegate = _sapp.macos.win_dlg; #if defined(SOKOL_METAL) _sapp.macos.mtl_device = MTLCreateSystemDefaultDevice(); _sapp.macos.view = [[_sapp_macos_view alloc] init]; @@ -3113,7 +3113,7 @@ _SOKOL_PRIVATE void _sapp_macos_frame(void) { _sapp.macos.view.depthStencilPixelFormat = MTLPixelFormatDepth32Float_Stencil8; _sapp.macos.view.sampleCount = (NSUInteger) _sapp.sample_count; _sapp.macos.view.autoResizeDrawable = false; - _sapp.macos.window.contentView = _sapp.macos.view; + _sapp.macos.engine.window.contentView = _sapp.macos.view; [_sapp.macos.window makeFirstResponder:_sapp.macos.view]; _sapp.macos.view.layer.magnificationFilter = kCAFilterNearest; #elif defined(SOKOL_GLCORE33) @@ -3150,7 +3150,7 @@ _SOKOL_PRIVATE void _sapp_macos_frame(void) { [_sapp.macos.view setWantsBestResolutionOpenGLSurface:NO]; } - _sapp.macos.window.contentView = _sapp.macos.view; + _sapp.macos.engine.window.contentView = _sapp.macos.view; [_sapp.macos.window makeFirstResponder:_sapp.macos.view]; NSTimer* timer_obj = [NSTimer timerWithTimeInterval:0.001 @@ -3754,7 +3754,7 @@ _SOKOL_PRIVATE void _sapp_ios_show_keyboard(bool shown) { _sapp.ios.view_ctrl = [[UIViewController alloc] init]; _sapp.ios.view_ctrl.modalPresentationStyle = UIModalPresentationFullScreen; _sapp.ios.view_ctrl.view = _sapp.ios.view; - _sapp.ios.window.rootViewController = _sapp.ios.view_ctrl; + _sapp.ios.engine.window.rootViewController = _sapp.ios.view_ctrl; #else if (_sapp.desc.gl_force_gles2) { _sapp.ios.eagl_ctx = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]; @@ -3787,7 +3787,7 @@ _SOKOL_PRIVATE void _sapp_ios_show_keyboard(bool shown) { _sapp.ios.view_ctrl = [[GLKViewController alloc] init]; _sapp.ios.view_ctrl.view = _sapp.ios.view; _sapp.ios.view_ctrl.preferredFramesPerSecond = 60 / _sapp.swap_interval; - _sapp.ios.window.rootViewController = _sapp.ios.view_ctrl; + _sapp.ios.engine.window.rootViewController = _sapp.ios.view_ctrl; #endif [_sapp.ios.window makeKeyAndVisible]; @@ -4050,11 +4050,11 @@ EM_JS(void, sapp_js_add_beforeunload_listener, (void), { event.returnValue = ' '; } }; - window.addEventListener('beforeunload', Module.sokol_beforeunload); + engine.window.addEventListener('beforeunload', Module.sokol_beforeunload); }); EM_JS(void, sapp_js_remove_beforeunload_listener, (void), { - window.removeEventListener('beforeunload', Module.sokol_beforeunload); + engine.window.removeEventListener('beforeunload', Module.sokol_beforeunload); }); EM_JS(void, sapp_js_add_clipboard_listener, (void), { @@ -4062,11 +4062,11 @@ EM_JS(void, sapp_js_add_clipboard_listener, (void), { var pasted_str = event.clipboardData.getData('text'); ccall('_sapp_emsc_onpaste', 'void', ['string'], [pasted_str]); }; - window.addEventListener('paste', Module.sokol_paste); + engine.window.addEventListener('paste', Module.sokol_paste); }); EM_JS(void, sapp_js_remove_clipboard_listener, (void), { - window.removeEventListener('paste', Module.sokol_paste); + engine.window.removeEventListener('paste', Module.sokol_paste); }); EM_JS(void, sapp_js_write_clipboard, (const char* c_str), { @@ -6781,17 +6781,17 @@ _SOKOL_PRIVATE uint32_t _sapp_uwp_mods(winrt::Windows::UI::Core::CoreWindow cons using namespace winrt::Windows::UI::Core; uint32_t mods = 0; - if ((sender_window.GetKeyState(VirtualKey::Shift) & CoreVirtualKeyStates::Down) == CoreVirtualKeyStates::Down) { + if ((sender_engine.window.GetKeyState(VirtualKey::Shift) & CoreVirtualKeyStates::Down) == CoreVirtualKeyStates::Down) { mods |= SAPP_MODIFIER_SHIFT; } - if ((sender_window.GetKeyState(VirtualKey::Control) & CoreVirtualKeyStates::Down) == CoreVirtualKeyStates::Down) { + if ((sender_engine.window.GetKeyState(VirtualKey::Control) & CoreVirtualKeyStates::Down) == CoreVirtualKeyStates::Down) { mods |= SAPP_MODIFIER_CTRL; } - if ((sender_window.GetKeyState(VirtualKey::Menu) & CoreVirtualKeyStates::Down) == CoreVirtualKeyStates::Down) { + if ((sender_engine.window.GetKeyState(VirtualKey::Menu) & CoreVirtualKeyStates::Down) == CoreVirtualKeyStates::Down) { mods |= SAPP_MODIFIER_ALT; } - if (((sender_window.GetKeyState(VirtualKey::LeftWindows) & CoreVirtualKeyStates::Down) == CoreVirtualKeyStates::Down) || - ((sender_window.GetKeyState(VirtualKey::RightWindows) & CoreVirtualKeyStates::Down) == CoreVirtualKeyStates::Down)) + if (((sender_engine.window.GetKeyState(VirtualKey::LeftWindows) & CoreVirtualKeyStates::Down) == CoreVirtualKeyStates::Down) || + ((sender_engine.window.GetKeyState(VirtualKey::RightWindows) & CoreVirtualKeyStates::Down) == CoreVirtualKeyStates::Down)) { mods |= SAPP_MODIFIER_SUPER; } @@ -6985,7 +6985,7 @@ private: winrt::com_ptr m_d3dDepthStencilView; D3D11_VIEWPORT m_screenViewport = { }; - // Cached reference to the Window. + // Cached reference to the engine.window. winrt::agile_ref< winrt::Windows::UI::Core::CoreWindow> m_window; // Cached device properties. @@ -7196,7 +7196,7 @@ void DeviceResources::CreateWindowSizeDependentResources() { DXGI_SCALING scaling = (_sapp.uwp.dpi.content_scale == _sapp.uwp.dpi.window_scale) ? DXGI_SCALING_NONE : DXGI_SCALING_STRETCH; DXGI_SWAP_CHAIN_DESC1 swapChainDesc = { 0 }; - swapChainDesc.Width = lround(m_d3dRenderTargetSize.Width); // Match the size of the window. + swapChainDesc.Width = lround(m_d3dRenderTargetSize.Width); // Match the size of the engine.window. swapChainDesc.Height = lround(m_d3dRenderTargetSize.Height); swapChainDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM; // This is the most common swap chain format. swapChainDesc.Stereo = false; @@ -7216,7 +7216,7 @@ void DeviceResources::CreateWindowSizeDependentResources() { winrt::com_ptr dxgiFactory; winrt::check_hresult(dxgiAdapter->GetParent(__uuidof(IDXGIFactory4), dxgiFactory.put_void())); winrt::com_ptr swapChain; - winrt::check_hresult(dxgiFactory->CreateSwapChainForCoreWindow(m_d3dDevice.get(), m_window.get().as<::IUnknown>().get(), &swapChainDesc, nullptr, swapChain.put())); + winrt::check_hresult(dxgiFactory->CreateSwapChainForCoreWindow(m_d3dDevice.get(), m_engine.window.get().as<::IUnknown>().get(), &swapChainDesc, nullptr, swapChain.put())); m_swapChain = swapChain.as(); // Ensure that DXGI does not queue more than one frame at a time. This both reduces latency and @@ -7327,7 +7327,7 @@ void DeviceResources::UpdateRenderTargetSize() { void DeviceResources::SetWindow(winrt::Windows::UI::Core::CoreWindow const& window) { auto currentDisplayInformation = winrt::Windows::Graphics::Display::DisplayInformation::GetForCurrentView(); m_window = window; - m_logicalSize = winrt::Windows::Foundation::Size(window.Bounds().Width, window.Bounds().Height); + m_logicalSize = winrt::Windows::Foundation::Size(engine.window.Bounds().Width, engine.window.Bounds().Height); m_nativeOrientation = currentDisplayInformation.NativeOrientation(); m_currentOrientation = currentDisplayInformation.CurrentOrientation(); m_dpi = currentDisplayInformation.LogicalDpi(); @@ -7349,8 +7349,8 @@ void DeviceResources::SetDpi(float dpi) { m_dpi = dpi; _sapp_uwp_configure_dpi(m_dpi); // When the display DPI changes, the logical size of the window (measured in Dips) also changes and needs to be updated. - auto window = m_window.get(); - m_logicalSize = winrt::Windows::Foundation::Size(window.Bounds().Width, window.Bounds().Height); + auto window = m_engine.window.get(); + m_logicalSize = winrt::Windows::Foundation::Size(engine.window.Bounds().Width, engine.window.Bounds().Height); CreateWindowSizeDependentResources(); } } @@ -7536,7 +7536,7 @@ bool DeviceResources::SdkLayersAvailable() { // The first method called when the IFrameworkView is being created. void App::Initialize(winrt::Windows::ApplicationModel::Core::CoreApplicationView const& applicationView) { // Register event handlers for app lifecycle. This example includes Activated, so that we - // can make the CoreWindow active and start rendering on the window. + // can make the CoreWindow active and start rendering on the engine.window. applicationView.Activated({ this, &App::OnActivated }); winrt::Windows::ApplicationModel::Core::CoreApplication::Suspending({ this, &App::OnSuspending }); @@ -7549,19 +7549,19 @@ void App::Initialize(winrt::Windows::ApplicationModel::Core::CoreApplicationView // Called when the CoreWindow object is created (or re-created). void App::SetWindow(winrt::Windows::UI::Core::CoreWindow const& window) { - window.SizeChanged({ this, &App::OnWindowSizeChanged }); - window.VisibilityChanged({ this, &App::OnVisibilityChanged }); + engine.window.SizeChanged({ this, &App::OnWindowSizeChanged }); + engine.window.VisibilityChanged({ this, &App::OnVisibilityChanged }); - window.KeyDown({ this, &App::OnKeyDown }); - window.KeyUp({ this, &App::OnKeyUp }); - window.CharacterReceived({ this, &App::OnCharacterReceived }); + engine.window.KeyDown({ this, &App::OnKeyDown }); + engine.window.KeyUp({ this, &App::OnKeyUp }); + engine.window.CharacterReceived({ this, &App::OnCharacterReceived }); - window.PointerEntered({ this, &App::OnPointerEntered }); - window.PointerExited({ this, &App::OnPointerExited }); - window.PointerPressed({ this, &App::OnPointerPressed }); - window.PointerReleased({ this, &App::OnPointerReleased }); - window.PointerMoved({ this, &App::OnPointerMoved }); - window.PointerWheelChanged({ this, &App::OnPointerWheelChanged }); + engine.window.PointerEntered({ this, &App::OnPointerEntered }); + engine.window.PointerExited({ this, &App::OnPointerExited }); + engine.window.PointerPressed({ this, &App::OnPointerPressed }); + engine.window.PointerReleased({ this, &App::OnPointerReleased }); + engine.window.PointerMoved({ this, &App::OnPointerMoved }); + engine.window.PointerWheelChanged({ this, &App::OnPointerWheelChanged }); auto currentDisplayInformation = winrt::Windows::Graphics::Display::DisplayInformation::GetForCurrentView(); diff --git a/modules/ufbx/examples/viewer/shaders/mesh.h b/modules/ufbx/examples/viewer/shaders/mesh.h index b0f7ea7..8715c37 100644 --- a/modules/ufbx/examples/viewer/shaders/mesh.h +++ b/modules/ufbx/examples/viewer/shaders/mesh.h @@ -575,10 +575,10 @@ static const char lit_pixel_source_glsl330[275] = { SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) { - a_position = stage_input.a_position; - a_vertex_index = stage_input.a_vertex_index; - a_normal = stage_input.a_normal; - a_uv = stage_input.a_uv; + a_position = stage_engine.input.a_position; + a_vertex_index = stage_engine.input.a_vertex_index; + a_normal = stage_engine.input.a_normal; + a_uv = stage_engine.input.a_uv; vert_main(); SPIRV_Cross_Output stage_output; stage_output.gl_Position = gl_Position; @@ -835,12 +835,12 @@ static const uint8_t static_vertex_bytecode_hlsl5[2276] = { SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) { - a_bone_indices = stage_input.a_bone_indices; - a_bone_weights = stage_input.a_bone_weights; - a_position = stage_input.a_position; - a_vertex_index = stage_input.a_vertex_index; - a_normal = stage_input.a_normal; - a_uv = stage_input.a_uv; + a_bone_indices = stage_engine.input.a_bone_indices; + a_bone_weights = stage_engine.input.a_bone_weights; + a_position = stage_engine.input.a_position; + a_vertex_index = stage_engine.input.a_vertex_index; + a_normal = stage_engine.input.a_normal; + a_uv = stage_engine.input.a_uv; vert_main(); SPIRV_Cross_Output stage_output; stage_output.gl_Position = gl_Position; @@ -1084,8 +1084,8 @@ static const uint8_t skinned_vertex_bytecode_hlsl5[3256] = { SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) { - v_normal = stage_input.v_normal; - v_uv = stage_input.v_uv; + v_normal = stage_engine.input.v_normal; + v_uv = stage_engine.input.v_uv; frag_main(); SPIRV_Cross_Output stage_output; stage_output.o_color = o_color; diff --git a/modules/ufbx/misc/deflate_benchmark/deflate_benchmark.cpp b/modules/ufbx/misc/deflate_benchmark/deflate_benchmark.cpp index 1a2b140..ab9aae8 100644 --- a/modules/ufbx/misc/deflate_benchmark/deflate_benchmark.cpp +++ b/modules/ufbx/misc/deflate_benchmark/deflate_benchmark.cpp @@ -135,8 +135,8 @@ int main(int argc, char **argv) #endif ufbx_inflate_input input = { }; - input.data_size = input.total_size = stream.compressed_size; - input.data = stream.data; + engine.input.data_size = engine.input.total_size = stream.compressed_size; + engine.input.data = stream.data; ptrdiff_t ret = ufbx_inflate(dst_buf.data(), stream.decompressed_size, &input, &retain); assert(ret == stream.decompressed_size); diff --git a/modules/ufbx/misc/fuzz_deflate.c b/modules/ufbx/misc/fuzz_deflate.c index d2dd67c..3009bc9 100644 --- a/modules/ufbx/misc/fuzz_deflate.c +++ b/modules/ufbx/misc/fuzz_deflate.c @@ -47,9 +47,9 @@ int main(int argc, char **argv) ufbx_inflate_retain retain; retain.initialized = false; ufbx_inflate_input input = { 0 }; - input.data = src; - input.data_size = src_size; - input.total_size = src_size; + engine.input.data = src; + engine.input.data_size = src_size; + engine.input.total_size = src_size; ptrdiff_t result = ufbx_inflate(dst, dst_size, &input, &retain); free(src); diff --git a/modules/ufbx/misc/test_deflate.c b/modules/ufbx/misc/test_deflate.c index 17a2cc0..3825e06 100644 --- a/modules/ufbx/misc/test_deflate.c +++ b/modules/ufbx/misc/test_deflate.c @@ -38,9 +38,9 @@ int main(int argc, char **argv) ufbx_inflate_retain retain; retain.initialized = false; ufbx_inflate_input input = { 0 }; - input.data = src; - input.data_size = src_size; - input.total_size = src_size; + engine.input.data = src; + engine.input.data_size = src_size; + engine.input.total_size = src_size; ptrdiff_t result = ufbx_inflate(dst, dst_size, &input, &retain); if (result != dst_size) { diff --git a/modules/ufbx/module.jai b/modules/ufbx/module.jai index f92feb5..cc9a990 100644 --- a/modules/ufbx/module.jai +++ b/modules/ufbx/module.jai @@ -3005,10 +3005,10 @@ anon_enum_31 :: enum s32 { } ufbx_shader_texture_input :: struct { - // Name of the input. + // Name of the engine.input. name: ufbx_string; - // Constant value of the input. + // Constant value of the engine.input. union { value_real: ufbx_real; value_vec2: ufbx_vec2; @@ -3020,7 +3020,7 @@ ufbx_shader_texture_input :: struct { value_str: ufbx_string; value_blob: ufbx_blob; - // Texture connected to this input. + // Texture connected to this engine.input. texture: *ufbx_texture; // Index of the output to use if `texture` is a multi-output shader node. @@ -3030,7 +3030,7 @@ ufbx_shader_texture_input :: struct { // NOTE: Some shading models allow this to be `true` even if `texture == NULL`. texture_enabled: bool; - // Property representing this input. + // Property representing this engine.input. prop: *ufbx_prop; // Property representing `texture`. @@ -3056,7 +3056,7 @@ ufbx_shader_texture :: struct { shader_type_id: u64; // Input values/textures (possibly further shader textures) to the shader. - // Sorted by `ufbx_shader_texture_input.name`. + // Sorted by `ufbx_shader_texture_engine.input.name`. inputs: ufbx_shader_texture_input_list; // Shader source code if found. diff --git a/modules/ufbx/test/test_deflate.h b/modules/ufbx/test/test_deflate.h index 80cedb5..81353fd 100644 --- a/modules/ufbx/test/test_deflate.h +++ b/modules/ufbx/test/test_deflate.h @@ -9,10 +9,10 @@ static ptrdiff_t ufbxt_inflate_no_fuzz(void *dst, size_t dst_size, const void *s retain.initialized = false; ufbx_inflate_input input = { 0 }; - input.data = src; - input.data_size = src_size; - input.total_size = src_size; - input.internal_fast_bits = opts->fast_bits; + engine.input.data = src; + engine.input.data_size = src_size; + engine.input.total_size = src_size; + engine.input.internal_fast_bits = opts->fast_bits; if (opts->force_fast) { size_t padding = 512; @@ -24,10 +24,10 @@ static ptrdiff_t ufbxt_inflate_no_fuzz(void *dst, size_t dst_size, const void *s memcpy(large_src, src, src_size); memset(large_src + src_size, 0, padding); - input.data = large_src; - input.data_size += padding; - input.total_size += padding; - input.internal_fast_bits = 10; + engine.input.data = large_src; + engine.input.data_size += padding; + engine.input.total_size += padding; + engine.input.internal_fast_bits = 10; ptrdiff_t result = ufbx_inflate(large_dst, dst_size + padding, &input, &retain); if (result >= 0) { @@ -47,9 +47,9 @@ static ptrdiff_t ufbxt_inflate(void *dst, size_t dst_size, const void *src, size { if (opts->primary && ufbxt_begin_fuzz()) { ufbx_inflate_input input = { 0 }; - input.data = src; - input.data_size = src_size; - input.total_size = src_size; + engine.input.data = src; + engine.input.data_size = src_size; + engine.input.total_size = src_size; int i; @@ -1846,9 +1846,9 @@ UFBXT_TEST(deflate_byte_stream) ufbxt_deflate_byte_stream_init(&stream, prefix, sizeof(prefix) - 1, 0x8000, suffix, sizeof(suffix) - 1); ufbx_inflate_input input = { 0 }; - input.total_size = stream.total_size; - input.read_fn = &ufbxt_deflate_byte_stream_read; - input.read_user = &stream; + engine.input.total_size = stream.total_size; + engine.input.read_fn = &ufbxt_deflate_byte_stream_read; + engine.input.read_user = &stream; ufbx_inflate_retain retain; retain.initialized = false; @@ -1873,11 +1873,11 @@ UFBXT_TEST(deflate_byte_stream_prefix) ufbxt_deflate_byte_stream_init(&stream, NULL, 0, 0x8000, suffix, sizeof(suffix) - 1); ufbx_inflate_input input = { 0 }; - input.total_size = stream.total_size + (sizeof(prefix) - 1); - input.data = prefix; - input.data_size = sizeof(prefix) - 1; - input.read_fn = &ufbxt_deflate_byte_stream_read; - input.read_user = &stream; + engine.input.total_size = stream.total_size + (sizeof(prefix) - 1); + engine.input.data = prefix; + engine.input.data_size = sizeof(prefix) - 1; + engine.input.read_fn = &ufbxt_deflate_byte_stream_read; + engine.input.read_user = &stream; ufbx_inflate_retain retain; retain.initialized = false; @@ -1902,9 +1902,9 @@ UFBXT_TEST(deflate_byte_stream_truncated) ufbxt_deflate_byte_stream_init(&stream, prefix, sizeof(prefix) - 1, 0x4000, suffix, sizeof(suffix) - 1); ufbx_inflate_input input = { 0 }; - input.total_size = stream.total_size; - input.read_fn = &ufbxt_deflate_byte_stream_read; - input.read_user = &stream; + engine.input.total_size = stream.total_size; + engine.input.read_fn = &ufbxt_deflate_byte_stream_read; + engine.input.read_user = &stream; ufbx_inflate_retain retain; retain.initialized = false; @@ -1926,9 +1926,9 @@ UFBXT_TEST(deflate_byte_stream_no_adler) ufbxt_deflate_byte_stream_init(&stream, prefix, sizeof(prefix) - 1, 0x8000, NULL, 0); ufbx_inflate_input input = { 0 }; - input.total_size = stream.total_size; - input.read_fn = &ufbxt_deflate_byte_stream_read; - input.read_user = &stream; + engine.input.total_size = stream.total_size; + engine.input.read_fn = &ufbxt_deflate_byte_stream_read; + engine.input.read_user = &stream; ufbx_inflate_retain retain; retain.initialized = false; diff --git a/modules/ufbx/test/testing_utils.h b/modules/ufbx/test/testing_utils.h index fddcc1b..ca09023 100644 --- a/modules/ufbx/test/testing_utils.h +++ b/modules/ufbx/test/testing_utils.h @@ -237,13 +237,13 @@ static ufbxt_noinline void *ufbxt_decompress_gzip(const void *gz_data, size_t gz ufbx_inflate_input input = { 0 }; - input.data = gz + offset; - input.data_size = gz_size - offset; + engine.input.data = gz + offset; + engine.input.data_size = gz_size - offset; - input.total_size = input.data_size; + engine.input.total_size = engine.input.data_size; - input.no_header = true; - input.no_checksum = true; + engine.input.no_header = true; + engine.input.no_checksum = true; ptrdiff_t result = ufbx_inflate(dst, isize, &input, &retain); if (result != isize) { diff --git a/modules/ufbx/ufbx.c b/modules/ufbx/ufbx.c index 25d4f21..9eb3ea4 100644 --- a/modules/ufbx/ufbx.c +++ b/modules/ufbx/ufbx.c @@ -2476,7 +2476,7 @@ ufbxi_inflate_block_fast(ufbxi_deflate_context *dc, ufbxi_trees *trees) // -16 - -21: Litlen Huffman: Overfull / Underfull / Repeat 16/17/18 overflow / Bad length code // -22 - -27: Distance Huffman: Overfull / Underfull / Repeat 16/17/18 overflow / Bad length code // -28: Cancelled -// -29: Invalid ufbx_inflate_input.internal_fast_bits value +// -29: Invalid ufbx_inflate_engine.input.internal_fast_bits value ufbxi_extern_c ptrdiff_t ufbx_inflate(void *dst, size_t dst_size, const ufbx_inflate_input *input, ufbx_inflate_retain *retain) { ufbxi_inflate_retain_imp *ret_imp = (ufbxi_inflate_retain_imp*)retain; @@ -7779,24 +7779,24 @@ ufbxi_nodiscard ufbxi_noinline static int ufbxi_binary_parse_node(ufbxi_context // Inflate the data from the user-provided IO buffer / read callbacks ufbx_inflate_input input; - input.total_size = encoded_size; - input.data = uc->data; - input.data_size = uc->data_size; - input.no_header = false; - input.no_checksum = false; - input.internal_fast_bits = 0; + engine.input.total_size = encoded_size; + engine.input.data = uc->data; + engine.input.data_size = uc->data_size; + engine.input.no_header = false; + engine.input.no_checksum = false; + engine.input.internal_fast_bits = 0; if (uc->opts.progress_cb.fn) { - input.progress_cb = uc->opts.progress_cb; - input.progress_size_before = arr_begin; - input.progress_size_after = uc->progress_bytes_total - arr_end; - input.progress_interval_hint = uc->progress_interval; + engine.input.progress_cb = uc->opts.progress_cb; + engine.input.progress_size_before = arr_begin; + engine.input.progress_size_after = uc->progress_bytes_total - arr_end; + engine.input.progress_interval_hint = uc->progress_interval; } else { - input.progress_cb.fn = NULL; - input.progress_cb.user = NULL; - input.progress_size_before = 0; - input.progress_size_after = 0; - input.progress_interval_hint = 0; + engine.input.progress_cb.fn = NULL; + engine.input.progress_cb.user = NULL; + engine.input.progress_size_before = 0; + engine.input.progress_size_after = 0; + engine.input.progress_interval_hint = 0; } // If the encoded array is larger than the data we have currently buffered @@ -7807,19 +7807,19 @@ ufbxi_nodiscard ufbxi_noinline static int ufbxi_binary_parse_node(ufbxi_context // usual (given that we clear the `uc->data/_size` buffer below). // NOTE: We _cannot_ share `read_buffer` if we plan to read later from it // as `ufbx_inflate()` overwrites parts of it with zeroes. - if (encoded_size > input.data_size) { - input.buffer = uc->read_buffer; - input.buffer_size = uc->read_buffer_size; - input.read_fn = uc->read_fn; - input.read_user = uc->read_user; - uc->data_offset += encoded_size - input.data_size; - uc->data += input.data_size; + if (encoded_size > engine.input.data_size) { + engine.input.buffer = uc->read_buffer; + engine.input.buffer_size = uc->read_buffer_size; + engine.input.read_fn = uc->read_fn; + engine.input.read_user = uc->read_user; + uc->data_offset += encoded_size - engine.input.data_size; + uc->data += engine.input.data_size; uc->data_size = 0; } else { - input.buffer = NULL; - input.buffer_size = 0; - input.read_fn = NULL; - input.read_user = 0; + engine.input.buffer = NULL; + engine.input.buffer_size = 0; + engine.input.read_fn = NULL; + engine.input.read_user = 0; uc->data += encoded_size; uc->data_size -= encoded_size; ufbxi_check(ufbxi_resume_progress(uc)); @@ -17347,7 +17347,7 @@ ufbxi_nodiscard ufbxi_noinline static int ufbxi_finalize_shader_texture(ufbxi_co ufbx_string name = prop->name; if (!ufbxi_remove_prefix_str(&name, shader->prop_prefix)) continue; - // Check if this property is a modifier to an existing input. + // Check if this property is a modifier to an existing engine.input. ufbx_string base_name = name; if (ufbxi_remove_suffix_c(&base_name, "_map") || ufbxi_remove_suffix_c(&base_name, ".shader")) { ufbx_shader_texture_input *base = ufbx_find_shader_texture_input_len(shader, base_name.data, base_name.length); @@ -24251,14 +24251,14 @@ static ufbxi_noinline int ufbxi_subdivide_attrib(ufbxi_subdivide_context *sc, uf ufbx_assert(attrib->value_reals >= 1 && attrib->value_reals <= 4); ufbxi_subdivide_layer_input input; - input.sum_fn = ufbxi_real_sum_fns[attrib->value_reals - 1]; - input.sum_user = NULL; - input.values = attrib->values.data; - input.indices = attrib->indices.data; - input.stride = attrib->value_reals * sizeof(ufbx_real); - input.boundary = boundary; - input.check_split_data = check_split_data; - input.ignore_indices = false; + engine.input.sum_fn = ufbxi_real_sum_fns[attrib->value_reals - 1]; + engine.input.sum_user = NULL; + engine.input.values = attrib->values.data; + engine.input.indices = attrib->indices.data; + engine.input.stride = attrib->value_reals * sizeof(ufbx_real); + engine.input.boundary = boundary; + engine.input.check_split_data = check_split_data; + engine.input.ignore_indices = false; ufbxi_subdivide_layer_output output; ufbxi_check_err(&sc->error, ufbxi_subdivide_layer(sc, &output, &input)); @@ -24334,14 +24334,14 @@ static ufbxi_noinline int ufbxi_subdivide_weights(ufbxi_subdivide_context *sc, u ufbxi_check_err(&sc->error, src); ufbxi_subdivide_layer_input input; - input.sum_fn = ufbxi_subdivide_sum_vertex_weights; - input.sum_user = sc; - input.values = src; - input.indices = sc->src_mesh.vertex_indices.data; - input.stride = sizeof(ufbxi_subdivision_vertex_weights); - input.boundary = sc->opts.boundary; - input.check_split_data = false; - input.ignore_indices = true; + engine.input.sum_fn = ufbxi_subdivide_sum_vertex_weights; + engine.input.sum_user = sc; + engine.input.values = src; + engine.input.indices = sc->src_mesh.vertex_indices.data; + engine.input.stride = sizeof(ufbxi_subdivision_vertex_weights); + engine.input.boundary = sc->opts.boundary; + engine.input.check_split_data = false; + engine.input.ignore_indices = true; sc->total_weights = 0; diff --git a/modules/ufbx/ufbx.h b/modules/ufbx/ufbx.h index 9030478..beb4bcf 100644 --- a/modules/ufbx/ufbx.h +++ b/modules/ufbx/ufbx.h @@ -2089,7 +2089,7 @@ typedef enum ufbx_shader_type UFBX_ENUM_REPR { // https://github.com/Autodesk/standard-surface UFBX_SHADER_OSL_STANDARD_SURFACE, // Arnold standard surface - // https://docs.arnoldrenderer.com/display/A5AFMUG/Standard+Surface + // https://docs.arnoldengine.renderer.com/display/A5AFMUG/Standard+Surface UFBX_SHADER_ARNOLD_STANDARD_SURFACE, // 3ds Max Physical Material // https://knowledge.autodesk.com/support/3ds-max/learn-explore/caas/CloudHelp/cloudhelp/2022/ENU/3DSMax-Lighting-Shading/files/GUID-C1328905-7783-4917-AB86-FC3CC19E8972-htm.html @@ -2501,10 +2501,10 @@ UFBX_ENUM_TYPE(ufbx_shader_texture_type, UFBX_SHADER_TEXTURE_TYPE, UFBX_SHADER_T typedef struct ufbx_shader_texture_input { - // Name of the input. + // Name of the engine.input. ufbx_string name; - // Constant value of the input. + // Constant value of the engine.input. union { ufbx_real value_real; ufbx_vec2 value_vec2; @@ -2515,7 +2515,7 @@ typedef struct ufbx_shader_texture_input { ufbx_string value_str; ufbx_blob value_blob; - // Texture connected to this input. + // Texture connected to this engine.input. ufbx_nullable ufbx_texture *texture; // Index of the output to use if `texture` is a multi-output shader node. @@ -2525,7 +2525,7 @@ typedef struct ufbx_shader_texture_input { // NOTE: Some shading models allow this to be `true` even if `texture == NULL`. bool texture_enabled; - // Property representing this input. + // Property representing this engine.input. ufbx_prop *prop; // Property representing `texture`. @@ -2550,7 +2550,7 @@ typedef struct ufbx_shader_texture { uint64_t shader_type_id; // Input values/textures (possibly further shader textures) to the shader. - // Sorted by `ufbx_shader_texture_input.name`. + // Sorted by `ufbx_shader_texture_engine.input.name`. ufbx_shader_texture_input_list inputs; // Shader source code if found. diff --git a/physics/physics.jai b/physics/physics.jai index f59ce90..ba1648a 100644 --- a/physics/physics.jai +++ b/physics/physics.jai @@ -379,7 +379,7 @@ bake_aabb :: (aabb: *AABB, parent_matrix: Matrix4, e: *Entity, n: Node) { for handle : n.meshes { index := 0; - m := parray_get(*renderer.meshes, handle); + m := parray_get(*engine.renderer.meshes, handle); if m.indices.count > 0 { while index < m.indices.count { i1 := m.indices[index]; diff --git a/renderer/dx11_renderer.jai b/renderer/dx11_renderer.jai index 1c17705..7f8e3c7 100644 --- a/renderer/dx11_renderer.jai +++ b/renderer/dx11_renderer.jai @@ -1432,15 +1432,15 @@ render :: (backend: *D3D11_Backend, command_buffer: *Render_Command_Buffer) { now := seconds_since_init(); - renderer.last_render_time_cpu = cast(float)(now - time) * 1000.0; + engine.renderer.last_render_time_cpu = cast(float)(now - time) * 1000.0; time = now; // Present the information rendered to the back buffer to the front buffer (the screen) before_swap := seconds_since_init(); - hr := IDXGISwapChain_Present(swap_chain, xx ifx renderer.vsync then 1 else 0, 0); + hr := IDXGISwapChain_Present(swap_chain, xx ifx engine.renderer.vsync then 1 else 0, 0); after_swap := seconds_since_init(); //print("RENDERING: It took % sec to present the final image\n", after_swap - before_swap); - renderer.last_render_time_gpu = cast(float)(now - time) * 1000.0; + engine.renderer.last_render_time_gpu = cast(float)(now - time) * 1000.0; if FAILED(hr) { log_error("Present failed: %", hr); diff --git a/renderer/engine_buffers.jai b/renderer/engine_buffers.jai index 8e50b42..aa7c32f 100644 --- a/renderer/engine_buffers.jai +++ b/renderer/engine_buffers.jai @@ -1,6 +1,6 @@ calc_tight_light_projection :: (camera: Camera, light_direction: Vector3) -> Matrix4 { // View space camera frustum - aspect_ratio := cast(float)renderer.render_target_height / cast(float)renderer.render_target_width; + aspect_ratio := cast(float)engine.renderer.render_target_height / cast(float)engine.renderer.render_target_width; frustum := get_frustum(camera.fov, aspect_ratio, camera.z_near, camera.z_far); // View frustum back to world space @@ -46,7 +46,7 @@ calc_tight_light_projection :: (camera: Camera, light_direction: Vector3) -> Mat } update_light_buffer :: () { - scene := current_scene; + scene := engine.current_scene; camera := scene.camera; light_data : Directional_Light_Buffer_Data; @@ -56,44 +56,44 @@ update_light_buffer :: () { light_matrix := calc_tight_light_projection(camera, scene.directional_light.direction.xyz); light_data.light_matrix = light_matrix; - upload_data_to_buffer(renderer, directional_light_buffer, *light_data, size_of(Directional_Light_Buffer_Data)); + upload_data_to_buffer(engine.renderer, engine.directional_light_buffer, *light_data, size_of(Directional_Light_Buffer_Data)); } sync_engine_buffers :: () { update_light_buffer(); // Camera buffer - camera := *current_scene.camera; + camera := *engine.current_scene.camera; camera_data : Camera_Data; camera_data.projection_matrix = camera.projection_matrix; camera_data.view_matrix = camera.view_matrix; camera_data.position = to_v4(camera.position); - upload_data_to_buffer(renderer, camera_buffer, *camera_data, size_of(Camera_Data)); + upload_data_to_buffer(engine.renderer, engine.camera_buffer, *camera_data, size_of(Camera_Data)); shader_time : Shader_Time; shader_time.time = time; - upload_data_to_buffer(renderer, time_buffer, *shader_time, size_of(Shader_Time)); + upload_data_to_buffer(engine.renderer, engine.time_buffer, *shader_time, size_of(Shader_Time)); // Sync entity transforms - for current_scene.entities { + for engine.current_scene.entities { if it.flags & .RENDERABLE { if it.renderable.type == { case .MODEL; { for n, i: it.renderable.model.nodes { if n.meshes.count > 0 { node_data := *it.renderable.nodes[i]; - upload_data_to_buffer(renderer, node_data.transform_buffer, *node_data.transform.world_matrix, size_of(Matrix4)); + upload_data_to_buffer(engine.renderer, node_data.transform_buffer, *node_data.transform.world_matrix, size_of(Matrix4)); if node_data.num_bones > 0 { for handle, mesh_index: n.meshes { - m := parray_get(*renderer.meshes, handle); + m := parray_get(*engine.renderer.meshes, handle); bones : [MAX_BONES] Matrix4; for bone_index: 0..m.num_bones-1 { bone := *it.renderable.nodes[m.bone_indices[bone_index]]; bones[bone_index] = bone.transform.world_matrix * m.bone_matrices[bone_index]; } - upload_data_to_buffer(renderer, node_data.bone_buffers[mesh_index], bones.data, size_of(Matrix4) * m.num_bones); + upload_data_to_buffer(engine.renderer, node_data.bone_buffers[mesh_index], bones.data, size_of(Matrix4) * m.num_bones); } } } diff --git a/renderer/font.jai b/renderer/font.jai index 8c02516..fe4b617 100644 --- a/renderer/font.jai +++ b/renderer/font.jai @@ -95,8 +95,8 @@ create_font :: (renderer: *Renderer, path: string, pixel_size: u32) -> Font_Hand x += g.bitmap.width + 1; } - array_add(*renderer.fonts, font); - return xx renderer.fonts.count; + array_add(*engine.renderer.fonts, font); + return xx engine.renderer.fonts.count; } return 0; diff --git a/renderer/material.jai b/renderer/material.jai index c4d9823..220c912 100644 --- a/renderer/material.jai +++ b/renderer/material.jai @@ -217,7 +217,7 @@ create_material_for_passes :: (name: string, material_pass_infos: [] Material_Pa push_context new_context { for info: material_pass_infos { - pipeline_state := *renderer.pipeline_states[info.pipeline - 1]; + pipeline_state := *engine.renderer.pipeline_states[info.pipeline - 1]; vs := get_shader(pipeline_state.vs); ps := get_shader(pipeline_state.ps); @@ -366,23 +366,23 @@ set_material_pass_parameters :: (material: *Material, pass_index: s64, render_pa param.buffer_info.buffer = transform_buffer; } case .CAMERA_DATA; { - //param.buffer_info.buffer = renderer.engine_buffers.camera; // @Incomplete + //param.buffer_info.buffer = engine.renderer.engine_buffers.camera; // @Incomplete } case .MATERIAL; { param.buffer_info.buffer = material_buffer; } case .DIRECTIONAL_LIGHT; { - //param.buffer_info.buffer = renderer.engine_buffers.directional_light; // @Incomplete + //param.buffer_info.buffer = engine.renderer.engine_buffers.directional_light; // @Incomplete } case .POINT_LIGHTS; { - //param.buffer_info.buffer = renderer.engine_buffers.point_lights; // @Incomplete + //param.buffer_info.buffer = engine.renderer.engine_buffers.point_lights; // @Incomplete } case .BONE_MATRICES; { param.buffer_info.buffer = bone_buffer; } case .CUSTOM; { - if renderer.callbacks.get_custom_material_parameter_mapping != null { - success, mapping_info := renderer.callbacks.get_custom_material_parameter_mapping(param.mapping_str); + if engine.renderer.callbacks.get_custom_material_parameter_mapping != null { + success, mapping_info := engine.renderer.callbacks.get_custom_material_parameter_mapping(param.mapping_str); if success { param.buffer_info.buffer = mapping_info.buffer; } @@ -397,10 +397,10 @@ set_material_pass_parameters :: (material: *Material, pass_index: s64, render_pa case .SAMPLER; if param.mapping == { case .REPEAT_SAMPLER; { - param.sampler = renderer.default_samplers.repeat; + param.sampler = engine.renderer.default_samplers.repeat; } case .CLAMP_SAMPLER; { - param.sampler = renderer.default_samplers.clamp; + param.sampler = engine.renderer.default_samplers.clamp; } } if param.sampler != 0 { @@ -435,8 +435,8 @@ set_material_pass_parameters :: (material: *Material, pass_index: s64, render_pa input_index = 3; } case .CUSTOM; { - if renderer.callbacks.get_custom_material_parameter_mapping != null { - success, mapping_info := renderer.callbacks.get_custom_material_parameter_mapping(param.mapping_str); + if engine.renderer.callbacks.get_custom_material_parameter_mapping != null { + success, mapping_info := engine.renderer.callbacks.get_custom_material_parameter_mapping(param.mapping_str); if success { param.texture = mapping_info.texture; } @@ -446,12 +446,12 @@ set_material_pass_parameters :: (material: *Material, pass_index: s64, render_pa if is_texture_input { input := render_pass.inputs[input_index]; - owning_pass := parray_get(*renderer.render_graph.render_passes, input.pass_handle); + owning_pass := parray_get(*engine.renderer.render_graph.render_passes, engine.input.pass_handle); - if input.rt_index == DEPTH_STENCIL_SLOT { + if engine.input.rt_index == DEPTH_STENCIL_SLOT { push_cmd_set_texture(renderer, param.slot, owning_pass.depth_stencil); } else { - push_cmd_set_texture(renderer, param.slot, owning_pass.render_targets[input.rt_index]); + push_cmd_set_texture(renderer, param.slot, owning_pass.render_targets[engine.input.rt_index]); } } else { if param.texture > 0 { diff --git a/renderer/mesh.jai b/renderer/mesh.jai index 746568c..c529ab6 100644 --- a/renderer/mesh.jai +++ b/renderer/mesh.jai @@ -39,9 +39,9 @@ Mesh :: struct { } get_mesh_vb :: (mesh: *Mesh, pipeline_handle: Pipeline_State_Handle = 0) -> Buffer_Handle { - handle := ifx pipeline_handle == 0 then renderer.current_state.last_set_pipeline else pipeline_handle; + handle := ifx pipeline_handle == 0 then engine.renderer.current_state.last_set_pipeline else pipeline_handle; - pipeline_state := *renderer.pipeline_states[handle-1]; + pipeline_state := *engine.renderer.pipeline_states[handle-1]; return get_mesh_vb(mesh, pipeline_state.mesh_data_types); } @@ -171,7 +171,7 @@ get_mesh_vb :: (mesh: *Mesh, input: [] Mesh_Vertex_Data_Type) -> Buffer_Handle { } vb_size := size_of(float)*stride*mesh.positions.count; - vb := create_vertex_buffer(renderer, final_vertices.data, xx vb_size, stride=size_of(float)*stride); + vb := create_vertex_buffer(engine.renderer, final_vertices.data, xx vb_size, stride=size_of(float)*stride); table_add(*mesh.vbs, hash, vb); } @@ -180,12 +180,12 @@ get_mesh_vb :: (mesh: *Mesh, input: [] Mesh_Vertex_Data_Type) -> Buffer_Handle { } delete_mesh :: (handle: Mesh_Handle) { - mesh := parray_get(*renderer.meshes, handle); + mesh := parray_get(*engine.renderer.meshes, handle); for mesh.vbs { - destroy_buffer(renderer, it); + destroy_buffer(engine.renderer, it); } deinit(*mesh.vbs); - parray_remove(*renderer.meshes, handle); + parray_remove(*engine.renderer.meshes, handle); } diff --git a/renderer/model.jai b/renderer/model.jai index d40bd1e..abe876c 100644 --- a/renderer/model.jai +++ b/renderer/model.jai @@ -79,7 +79,7 @@ get_first_mesh_from_model :: (model: Model) -> Mesh_Handle, bool { get_mesh_by_name :: (model: Model, name: string) -> Mesh_Handle, bool { for model.nodes { for m: it.meshes { - mesh := parray_get(*renderer.meshes, m); + mesh := parray_get(*engine.renderer.meshes, m); if mesh.name == name { return m, true; } @@ -360,7 +360,7 @@ parse_fbx_node :: (model: *Model, fbx_node: *ufbx_node) { } ib_size := size_of(u32)*mesh.indices.count; - mesh.ib = create_index_buffer(renderer, mesh.indices.data, xx ib_size); + mesh.ib = create_index_buffer(engine.renderer, mesh.indices.data, xx ib_size); //material : Base_Material; @@ -377,7 +377,7 @@ parse_fbx_node :: (model: *Model, fbx_node: *ufbx_node) { // } //} - array_add(*node.meshes, parray_add(*renderer.meshes, mesh)); + array_add(*node.meshes, parray_add(*engine.renderer.meshes, mesh)); array_add(*node.material_defaults, model.materials[mesh_mat.material.typed_id]); // @Incomplete } } @@ -563,7 +563,7 @@ load_fbx_animations_into_existing_model :: (path: string, model: *Model) { } get_model_by_path :: (path: string) -> *Model { - for * renderer.model_lib { + for * engine.renderer.model_lib { if it.path == path { return it; } @@ -574,7 +574,7 @@ get_model_by_path :: (path: string) -> *Model { load_fbx_texture :: (map: ufbx_material_map, format: Format) -> Texture_Handle { if map.texture != null && map.texture.content.size > 0 { - return load_texture_from_data(renderer, map.texture.content.data, map.texture.content.size, format=format); + return load_texture_from_data(engine.renderer, map.texture.content.data, map.texture.content.size, format=format); } return 0; @@ -598,7 +598,7 @@ load_fbx :: (path: string) -> *Model, bool { return null, false; } - model, locator := find_and_occupy_empty_slot(*renderer.model_lib); + model, locator := find_and_occupy_empty_slot(*engine.renderer.model_lib); model.path = copy_string(path); model.name = copy_string(path); @@ -656,7 +656,7 @@ load_fbx :: (path: string) -> *Model, bool { } get_or_load_model :: (path: string) -> *Model { - for * renderer.model_lib { + for * engine.renderer.model_lib { if it.path == path { return it; } diff --git a/renderer/render_graph.jai b/renderer/render_graph.jai index 4335e3e..7e99e01 100644 --- a/renderer/render_graph.jai +++ b/renderer/render_graph.jai @@ -52,12 +52,12 @@ push_material_pass_properties :: (render_pass: Render_Pass, mat_pass: Material_P if is_texture_input { input := render_pass.inputs[input_index]; - owning_pass := parray_get(*renderer.render_graph.render_passes, input.pass_handle); + owning_pass := parray_get(*engine.renderer.render_graph.render_passes, engine.input.pass_handle); - if input.rt_index == DEPTH_STENCIL_SLOT { + if engine.input.rt_index == DEPTH_STENCIL_SLOT { push_cmd_set_texture(renderer, it.parameter.slot, owning_pass.depth_stencil); } else { - push_cmd_set_texture(renderer, it.parameter.slot, owning_pass.render_targets[input.rt_index]); + push_cmd_set_texture(renderer, it.parameter.slot, owning_pass.render_targets[engine.input.rt_index]); } } else { if it.texture > 0 { @@ -72,40 +72,40 @@ push_material_pass_properties :: (render_pass: Render_Pass, mat_pass: Material_P setup_pass_inputs :: (render_pass: Render_Pass) { for input: render_pass.inputs { - owning_pass := parray_get(*renderer.render_graph.render_passes, input.pass_handle); + owning_pass := parray_get(*engine.renderer.render_graph.render_passes, input.pass_handle); if input.rt_index == DEPTH_STENCIL_SLOT { - push_cmd_set_texture(renderer, xx it_index, owning_pass.depth_stencil); + push_cmd_set_texture(engine.renderer, xx it_index, owning_pass.depth_stencil); } else { - push_cmd_set_texture(renderer, xx it_index, owning_pass.render_targets[input.rt_index]); + push_cmd_set_texture(engine.renderer, xx it_index, owning_pass.render_targets[input.rt_index]); } } } set_render_pass_clear_color :: (rp: Render_Pass_Handle, input_index: s32, color: Color) { - pass := parray_get(*renderer.render_graph.render_passes, rp); + pass := parray_get(*engine.renderer.render_graph.render_passes, rp); pass.clear_colors[input_index] = color; } execute_render_pass :: (render_pass: Render_Pass) { // @Incomplete: Add command buffer as parameter if render_pass.render_targets.count == 0 { if render_pass.has_depth_stencil { - push_cmd_set_render_targets(renderer, depth_stencil_enabled=render_pass.has_depth_stencil, depth_stencil_buffer=render_pass.depth_stencil); - push_cmd_clear_depth_stencil(renderer, render_pass.depth_stencil, 1.0); - width := ifx render_pass.width == SWAPCHAIN_SIZE then renderer.render_target_width else render_pass.width; - height := ifx render_pass.height == SWAPCHAIN_SIZE then renderer.render_target_height else render_pass.height; - push_cmd_set_viewport(renderer, width, height); + push_cmd_set_render_targets(engine.renderer, depth_stencil_enabled=render_pass.has_depth_stencil, depth_stencil_buffer=render_pass.depth_stencil); + push_cmd_clear_depth_stencil(engine.renderer, render_pass.depth_stencil, 1.0); + width := ifx render_pass.width == SWAPCHAIN_SIZE then engine.renderer.render_target_width else render_pass.width; + height := ifx render_pass.height == SWAPCHAIN_SIZE then engine.renderer.render_target_height else render_pass.height; + push_cmd_set_viewport(engine.renderer, width, height); } else { assert(render_pass.uses_backbuffer); - push_cmd_set_backbuffer(renderer); + push_cmd_set_backbuffer(engine.renderer); color: Vector4; color.x = 0.0; color.y = 0.0; color.z = 0.0; color.w = 1.0; - push_cmd_clear_backbuffer(renderer, color); - push_cmd_set_viewport(renderer, xx renderer.render_target_width, xx renderer.render_target_height); + push_cmd_clear_backbuffer(engine.renderer, color); + push_cmd_set_viewport(engine.renderer, xx engine.renderer.render_target_width, xx engine.renderer.render_target_height); } } else { @@ -113,21 +113,21 @@ execute_render_pass :: (render_pass: Render_Pass) { // @Incomplete: Add command height := render_pass.height; if render_pass.width == SWAPCHAIN_SIZE { - width = renderer.render_target_width; + width = engine.renderer.render_target_width; } if render_pass.height == SWAPCHAIN_SIZE { - height = renderer.render_target_height; + height = engine.renderer.render_target_height; } - push_cmd_set_render_targets(renderer, ..render_pass.render_targets, render_pass.has_depth_stencil, render_pass.depth_stencil); - push_cmd_set_viewport(renderer, width, height); + push_cmd_set_render_targets(engine.renderer, ..render_pass.render_targets, render_pass.has_depth_stencil, render_pass.depth_stencil); + push_cmd_set_viewport(engine.renderer, width, height); for render_pass.render_targets { - push_cmd_clear_render_target(renderer, it, render_pass.clear_colors[it_index]); + push_cmd_clear_render_target(engine.renderer, it, render_pass.clear_colors[it_index]); } if render_pass.has_depth_stencil { - push_cmd_clear_depth_stencil(renderer, render_pass.depth_stencil, 1.0); + push_cmd_clear_depth_stencil(engine.renderer, render_pass.depth_stencil, 1.0); } } diff --git a/renderer/render_pass.jai b/renderer/render_pass.jai index ecf389f..9c10e96 100644 --- a/renderer/render_pass.jai +++ b/renderer/render_pass.jai @@ -86,9 +86,9 @@ add_render_pass_input :: (graph: *Render_Graph, to_pass: Render_Pass_Handle, fro } get_texture_from_pass :: (name: string) -> Texture_Handle { - for renderer.render_graph.render_passes { + for engine.renderer.render_graph.render_passes { if it.name == name { - rt := parray_get(renderer.render_targets, it.render_targets[0]); + rt := parray_get(engine.renderer.render_targets, it.render_targets[0]); return rt.texture; } } diff --git a/renderer/renderer.jai b/renderer/renderer.jai index 160a3d1..c52a8c9 100644 --- a/renderer/renderer.jai +++ b/renderer/renderer.jai @@ -622,54 +622,54 @@ Renderer :: struct { } create_renderer :: (window: *Window) -> *Renderer { - renderer = New(Renderer); - renderer.pool = .{}; + engine.renderer = New(Renderer); + engine.renderer.pool = .{}; a : Allocator; a.proc = flat_pool_allocator_proc; - a.data = *renderer.pool; - renderer.allocator = a; + a.data = *engine.renderer.pool; + engine.renderer.allocator = a; - if !init(*renderer.watcher, file_change_callback, *"Cowabunga", events_to_watch = .MODIFIED) { + if !init(*engine.renderer.watcher, file_change_callback, *"Cowabunga", events_to_watch = .MODIFIED) { log_error("Could not initialize watcher"); } // @Incomplete - //if !add_directories(*renderer.watcher, "../assets/shaders") { + //if !add_directories(*engine.renderer.watcher, "../assets/shaders") { // exit(4); //} - renderer.backend = create_backend(window); - renderer.render_target_width = window.width; - renderer.render_target_height = window.height; + engine.renderer.backend = create_backend(window); + engine.renderer.render_target_width = engine.window.width; + engine.renderer.render_target_height = engine.window.height; - renderer.pipeline_states.allocator = renderer.allocator; - renderer.fonts.allocator = renderer.allocator; - renderer.textures.data.allocator = renderer.allocator; - renderer.textures.indices.allocator = renderer.allocator; - renderer.buffers.data.allocator = renderer.allocator; - renderer.buffers.indices.allocator = renderer.allocator; - renderer.shaders.allocator = renderer.allocator; - renderer.command_buffer.commands.allocator = renderer.allocator; - renderer.text_render_buffers.allocator = renderer.allocator; - renderer.render_targets.data.allocator = renderer.allocator; - renderer.render_targets.indices.allocator = renderer.allocator; - renderer.depth_stencil_buffers.data.allocator = renderer.allocator; - renderer.depth_stencil_buffers.indices.allocator = renderer.allocator; + engine.renderer.pipeline_states.allocator = engine.renderer.allocator; + engine.renderer.fonts.allocator = engine.renderer.allocator; + engine.renderer.textures.data.allocator = engine.renderer.allocator; + engine.renderer.textures.indices.allocator = engine.renderer.allocator; + engine.renderer.buffers.data.allocator = engine.renderer.allocator; + engine.renderer.buffers.indices.allocator = engine.renderer.allocator; + engine.renderer.shaders.allocator = engine.renderer.allocator; + engine.renderer.command_buffer.commands.allocator = engine.renderer.allocator; + engine.renderer.text_render_buffers.allocator = engine.renderer.allocator; + engine.renderer.render_targets.data.allocator = engine.renderer.allocator; + engine.renderer.render_targets.indices.allocator = engine.renderer.allocator; + engine.renderer.depth_stencil_buffers.data.allocator = engine.renderer.allocator; + engine.renderer.depth_stencil_buffers.indices.allocator = engine.renderer.allocator; for 0..1024 { - buffer := create_vertex_buffer(renderer, null, size_of(Point) * 6 * renderer.max_characters_per_buffer, stride=size_of(Point), mappable=true); - array_add(*renderer.text_render_buffers, buffer); + buffer := create_vertex_buffer(engine.renderer, null, size_of(Point) * 6 * engine.renderer.max_characters_per_buffer, stride=size_of(Point), mappable=true); + array_add(*engine.renderer.text_render_buffers, buffer); } init_freetype(); init_default_meshes(); - array_reserve(*renderer.command_buffer.commands, 4096); + array_reserve(*engine.renderer.command_buffer.commands, 4096); - renderer.render_graph = new_render_graph(); + engine.renderer.render_graph = new_render_graph(); - return renderer; + return engine.renderer; } init_default_pipelines :: () { @@ -694,7 +694,7 @@ init_default_pipelines :: () { params[1].name = "tex"; params[1].slot = 1; - renderer.default_pipelines.message_text = create_pipeline_state(renderer, vs, ps, layout, params, blend_type=.TRANSPARENT); + engine.renderer.default_pipelines.message_text = create_pipeline_state(renderer, vs, ps, layout, params, blend_type=.TRANSPARENT); } } @@ -732,9 +732,9 @@ init_default_meshes :: () { ib_size := size_of(u32)*mesh.indices.count; //mesh.vb = create_vertex_buffer(renderer, vertices.data, xx vb_size, stride=xx stride); - mesh.ib = create_index_buffer(renderer, mesh.indices.data, xx ib_size); + mesh.ib = create_index_buffer(engine.renderer, mesh.indices.data, xx ib_size); - renderer.default_meshes.plane = parray_add(*renderer.meshes, mesh); + engine.renderer.default_meshes.plane = parray_add(*engine.renderer.meshes, mesh); } { // Fullscreeboat_n plane @@ -759,9 +759,9 @@ init_default_meshes :: () { ib_size := size_of(u32)*mesh.indices.count; - mesh.ib = create_index_buffer(renderer, mesh.indices.data, xx ib_size); + mesh.ib = create_index_buffer(engine.renderer, mesh.indices.data, xx ib_size); - renderer.default_meshes.fullscreen_plane = parray_add(*renderer.meshes, mesh); + engine.renderer.default_meshes.fullscreen_plane = parray_add(*engine.renderer.meshes, mesh); } { @@ -787,49 +787,49 @@ init_default_meshes :: () { ib_size := size_of(u32)*mesh.indices.count; - mesh.ib = create_index_buffer(renderer, mesh.indices.data, xx ib_size); + mesh.ib = create_index_buffer(engine.renderer, mesh.indices.data, xx ib_size); - renderer.default_meshes.textured_quad = parray_add(*renderer.meshes, mesh); + engine.renderer.default_meshes.textured_quad = parray_add(*engine.renderer.meshes, mesh); } - renderer.default_samplers.repeat = create_sampler(renderer, wrap_mode = .REPEAT); - renderer.default_samplers.clamp = create_sampler(renderer, wrap_mode = .CLAMP); + engine.renderer.default_samplers.repeat = create_sampler(engine.renderer, wrap_mode = .REPEAT); + engine.renderer.default_samplers.clamp = create_sampler(engine.renderer, wrap_mode = .CLAMP); //sphere_model := load_fbx("../modules/Coven/models/sphere.fbx"); //sphere_mesh, success := get_first_mesh_from_model(sphere_model); //assert(success); - //renderer.default_meshes.sphere = sphere_mesh; + //engine.renderer.default_meshes.sphere = sphere_mesh; cube_model := load_fbx("../assets/models/cube.fbx"); cube_mesh, success := get_first_mesh_from_model(cube_model); assert(success); - renderer.default_meshes.cube = cube_mesh; + engine.renderer.default_meshes.cube = cube_mesh; //translation_arrow_model := load_fbx("../modules/Coven/models/translation_arrow.fbx"); //translation_arrow_mesh :, success = get_first_mesh_from_model(translation_arrow_model); //assert(success); - //renderer.default_meshes.translation_gizmo = translation_arrow_mesh; + //engine.renderer.default_meshes.translation_gizmo = translation_arrow_mesh; //scale_gizmo_model := load_fbx("../modules/Coven/models/scale_gizmo.fbx"); //scale_gizmo_mesh :, success = get_first_mesh_from_model(scale_gizmo_model); //assert(success); - //renderer.default_meshes.scale_gizmo = scale_gizmo_mesh; + //engine.renderer.default_meshes.scale_gizmo = scale_gizmo_mesh; //rotation_gizmo_model := load_fbx("../modules/Coven/models/rotation_gizmo.fbx"); //rotation_gizmo_mesh :, success = get_first_mesh_from_model(rotation_gizmo_model); //assert(success); - //renderer.default_meshes.rotation_gizmo = rotation_gizmo_mesh; + //engine.renderer.default_meshes.rotation_gizmo = rotation_gizmo_mesh; } deinit_renderer :: (renderer: *Renderer) { - deinit_backend(renderer.backend); + deinit_backend(engine.renderer.backend); } get_shader :: (handle: Shader_Handle) -> Shader { - assert(handle - 1 < xx renderer.shaders.count); - return renderer.shaders[handle-1]; + assert(handle - 1 < xx engine.renderer.shaders.count); + return engine.renderer.shaders[handle-1]; } create_shader :: (using renderer: *Renderer, path: string, entry_point: string, shader_type: Shader_Type, defines: [] string = .[], mesh_data_types: [] Mesh_Vertex_Data_Type = .[.POSITION, .NORMAL, .TEXCOORD]) -> Shader_Handle { @@ -850,7 +850,7 @@ create_shader :: (using renderer: *Renderer, path: string, entry_point: string, } } - backend_shader, info, success := create_backend_shader(renderer.backend, path, entry_point, shader_type, defines); + backend_shader, info, success := create_backend_shader(engine.renderer.backend, path, entry_point, shader_type, defines); if success { shader.info = info; @@ -863,7 +863,7 @@ create_shader :: (using renderer: *Renderer, path: string, entry_point: string, } reload_shader :: (using renderer: *Renderer, shader: *Shader) { - backend_shader, success := reload_backend_shader(renderer.backend, shader.path, shader.entry_point, shader.type, shader.defines); + backend_shader, success := reload_backend_shader(engine.renderer.backend, shader.path, shader.entry_point, shader.type, shader.defines); if success { destroy_shader(shader.*); @@ -893,7 +893,7 @@ create_shader_from_source :: (using renderer: *Renderer, source: string, entry_p } } - backend_shader, info, success := create_backend_shader_from_source(renderer.backend, source, entry_point, shader_type, defines); + backend_shader, info, success := create_backend_shader_from_source(engine.renderer.backend, source, entry_point, shader_type, defines); if success { shader.info = info; @@ -919,7 +919,7 @@ create_buffer :: (using renderer: *Renderer, data: *void, size: u32, type: Buffe assert(stride > 0); } - backend_buffer, success := create_backend_buffer(renderer.backend, data, size, stride, type, mappable); + backend_buffer, success := create_backend_buffer(engine.renderer.backend, data, size, stride, type, mappable); if success { buffer.backend_buffer = backend_buffer; @@ -938,7 +938,7 @@ destroy_buffer :: (using renderer: *Renderer, handle: Buffer_Handle) { assert(handle > 0); buffer := parray_get(*buffers, handle); - destroy_backend_buffer(renderer.backend, buffer.backend_buffer); + destroy_backend_buffer(engine.renderer.backend, buffer.backend_buffer); parray_remove(*buffers, handle); } @@ -967,7 +967,7 @@ create_texture :: (using renderer: *Renderer, data: *void, width: u32, height: u texture.width = width; texture.height = height; texture.format = format; - backend_texture, success := create_backend_texture(renderer.backend, data, width, height, channels, generate_mips, format); + backend_texture, success := create_backend_texture(engine.renderer.backend, data, width, height, channels, generate_mips, format); if success { texture.backend_texture = backend_texture; @@ -998,7 +998,7 @@ destroy_texture :: (using renderer: *Renderer, handle: Texture_Handle) { assert(handle > 0); texture := parray_get(*textures, handle); - destroy_backend_texture(renderer.backend, texture.backend_texture); + destroy_backend_texture(engine.renderer.backend, texture.backend_texture); parray_remove(*textures, handle); } @@ -1018,7 +1018,7 @@ get_texture_path :: (using renderer: *Renderer, handle: Texture_Handle) -> strin update_texture_region :: (using renderer: *Renderer, handle: Texture_Handle, xoffset: u32, yoffset: u32, width: u32, height: u32, pitch: u32, data: *void) { assert(handle > 0); texture := parray_get(*textures, handle); - update_backend_texture_region(renderer.backend, texture.backend_texture, xoffset, yoffset, width, height, pitch, data); + update_backend_texture_region(engine.renderer.backend, texture.backend_texture, xoffset, yoffset, width, height, pitch, data); } create_sampler :: (using renderer: *Renderer, filter: Sampling_Filter = .LINEAR, wrap_mode: Wrap_Mode = .CLAMP) -> Sampler_Handle { @@ -1026,7 +1026,7 @@ create_sampler :: (using renderer: *Renderer, filter: Sampling_Filter = .LINEAR, sampler.filter = filter; sampler.wrap_mode = wrap_mode; - backend_sampler, success := create_backend_sampler(renderer.backend, filter, wrap_mode); + backend_sampler, success := create_backend_sampler(engine.renderer.backend, filter, wrap_mode); if success { sampler.backend_sampler = backend_sampler; @@ -1046,12 +1046,12 @@ create_pipeline_state2 :: (using renderer: *Renderer, vs: Shader_Handle, ps: Sha pipeline_state.blend_type = blend_type; if pipeline_state.blend_type == .TRANSPARENT { - pipeline_state.blend_state = create_backend_blend_state(renderer.backend, .TRANSPARENT); + pipeline_state.blend_state = create_backend_blend_state(engine.renderer.backend, .TRANSPARENT); } shader := *shaders[vs - 1]; - pipeline_state.vertex_layout = create_backend_input_layout2(renderer.backend, shader.info.input, shader.backend_shader); + pipeline_state.vertex_layout = create_backend_input_layout2(engine.renderer.backend, shader.info.input, shader.backend_shader); array_reserve(*pipeline_state.mesh_data_types, shader.mesh_data_types.count); for type: shader.mesh_data_types { array_add(*pipeline_state.mesh_data_types, type); @@ -1075,12 +1075,12 @@ create_pipeline_state :: (using renderer: *Renderer, vs: Shader_Handle, ps: Shad pipeline_state.blend_type = blend_type; if pipeline_state.blend_type == .TRANSPARENT { - pipeline_state.blend_state = create_backend_blend_state(renderer.backend, .TRANSPARENT); + pipeline_state.blend_state = create_backend_blend_state(engine.renderer.backend, .TRANSPARENT); } shader := *shaders[vs - 1]; if layout.count > 0 { - pipeline_state.vertex_layout = create_backend_input_layout(renderer.backend, layout, shader.backend_shader); + pipeline_state.vertex_layout = create_backend_input_layout(engine.renderer.backend, layout, shader.backend_shader); } array_reserve(*pipeline_state.mesh_data_types, shader.mesh_data_types.count); @@ -1096,7 +1096,7 @@ create_pipeline_state :: (using renderer: *Renderer, vs: Shader_Handle, ps: Shad push_cmd_set_pipeline_state :: (using renderer: *Renderer, handle: Pipeline_State_Handle) { assert(handle > 0); - renderer.current_state.last_set_pipeline = handle; + engine.renderer.current_state.last_set_pipeline = handle; state := *pipeline_states[handle - 1]; vs := *shaders[state.vs - 1]; @@ -1110,7 +1110,7 @@ push_cmd_set_pipeline_state :: (using renderer: *Renderer, handle: Pipeline_Stat command.set_pipeline_state.blend_type = state.blend_type; command.set_pipeline_state.blend_state = state.blend_state; - array_add(*renderer.command_buffer.commands, command); + array_add(*engine.renderer.command_buffer.commands, command); } push_cmd_set_vertex_buffer :: (using renderer: *Renderer, handle: Buffer_Handle, start_slot: u32 = 0) { @@ -1124,7 +1124,7 @@ push_cmd_set_vertex_buffer :: (using renderer: *Renderer, handle: Buffer_Handle, command.set_vertex_buffer.stride = buffer.stride; command.set_vertex_buffer.start_slot = start_slot; - array_add(*renderer.command_buffer.commands, command); + array_add(*engine.renderer.command_buffer.commands, command); } push_cmd_set_index_buffer :: (using renderer: *Renderer, handle: Buffer_Handle) { @@ -1136,7 +1136,7 @@ push_cmd_set_index_buffer :: (using renderer: *Renderer, handle: Buffer_Handle) command.type = .SET_INDEX_BUFFER; command.set_index_buffer.buffer = buffer.backend_buffer; - array_add(*renderer.command_buffer.commands, command); + array_add(*engine.renderer.command_buffer.commands, command); } push_cmd_set_constant_buffer :: (using renderer: *Renderer, slot: u32, handle: Buffer_Handle, shader_type: Shader_Type) { @@ -1150,7 +1150,7 @@ push_cmd_set_constant_buffer :: (using renderer: *Renderer, slot: u32, handle: B command.set_constant_buffer.shader_type = shader_type; command.set_constant_buffer.slot = slot; - array_add(*renderer.command_buffer.commands, command); + array_add(*engine.renderer.command_buffer.commands, command); } push_cmd_set_structured_buffer :: (using renderer: *Renderer, slot: u32, handle: Buffer_Handle, shader_type: Shader_Type) { @@ -1164,7 +1164,7 @@ push_cmd_set_structured_buffer :: (using renderer: *Renderer, slot: u32, handle: command.set_structured_buffer.shader_type = shader_type; command.set_structured_buffer.slot = slot; - array_add(*renderer.command_buffer.commands, command); + array_add(*engine.renderer.command_buffer.commands, command); } push_cmd_set_texture :: (using renderer: *Renderer, slot: u32, handle: Texture_Handle) { @@ -1177,7 +1177,7 @@ push_cmd_set_texture :: (using renderer: *Renderer, slot: u32, handle: Texture_H command.set_texture.texture = texture.backend_texture; command.set_texture.slot = slot; - array_add(*renderer.command_buffer.commands, command); + array_add(*engine.renderer.command_buffer.commands, command); } push_cmd_set_texture :: (using renderer: *Renderer, slot: u32, handle: Render_Target_Handle) { @@ -1190,7 +1190,7 @@ push_cmd_set_texture :: (using renderer: *Renderer, slot: u32, handle: Render_Ta command.set_texture_from_rt.rt = rt.backend_render_target; command.set_texture_from_rt.slot = slot; - array_add(*renderer.command_buffer.commands, command); + array_add(*engine.renderer.command_buffer.commands, command); } push_cmd_set_texture :: (using renderer: *Renderer, slot: u32, handle: Depth_Stencil_Buffer_Handle) { @@ -1203,7 +1203,7 @@ push_cmd_set_texture :: (using renderer: *Renderer, slot: u32, handle: Depth_Ste command.set_texture_from_ds.ds = ds.backend_depth_stencil_buffer; command.set_texture_from_ds.slot = slot; - array_add(*renderer.command_buffer.commands, command); + array_add(*engine.renderer.command_buffer.commands, command); } push_cmd_set_render_targets :: (renderer: *Renderer, render_targets: ..Render_Target_Handle = .[], depth_stencil_enabled: bool = false, depth_stencil_buffer: Depth_Stencil_Buffer_Handle = 0) { @@ -1215,23 +1215,23 @@ push_cmd_set_render_targets :: (renderer: *Renderer, render_targets: ..Render_Ta command.set_render_targets.num_render_targets = xx render_targets.count; for render_targets { - rt := parray_get(*renderer.render_targets, it); + rt := parray_get(*engine.renderer.render_targets, it); command.set_render_targets.render_targets[it_index] = rt.backend_render_target; } command.set_render_targets.depth_stencil_enabled = depth_stencil_enabled; if depth_stencil_enabled { - ds := parray_get(*renderer.depth_stencil_buffers, depth_stencil_buffer); + ds := parray_get(*engine.renderer.depth_stencil_buffers, depth_stencil_buffer); command.set_render_targets.depth_stencil_buffer = ds.backend_depth_stencil_buffer; } - array_add(*renderer.command_buffer.commands, command); + array_add(*engine.renderer.command_buffer.commands, command); } push_cmd_set_backbuffer :: (renderer: *Renderer) { command : Render_Command; command.type = .SET_BACKBUFFER; - array_add(*renderer.command_buffer.commands, command); + array_add(*engine.renderer.command_buffer.commands, command); } push_cmd_set_sampler :: (using renderer: *Renderer, slot: u32, handle: Sampler_Handle) { @@ -1244,7 +1244,7 @@ push_cmd_set_sampler :: (using renderer: *Renderer, slot: u32, handle: Sampler_H command.set_sampler.sampler = sampler.backend_sampler; command.set_sampler.slot = slot; - array_add(*renderer.command_buffer.commands, command); + array_add(*engine.renderer.command_buffer.commands, command); } push_cmd_set_viewport :: (using renderer: *Renderer, width: u32, height: u32, x: u32 = 0, y: u32 = 0, min_depth: float = 0.0, max_depth: float = 1.0) { @@ -1257,29 +1257,29 @@ push_cmd_set_viewport :: (using renderer: *Renderer, width: u32, height: u32, x: command.set_viewport.min_depth = min_depth; command.set_viewport.max_depth = max_depth; - array_add(*renderer.command_buffer.commands, command); + array_add(*engine.renderer.command_buffer.commands, command); } push_cmd_clear_render_target :: (using renderer: *Renderer, rt: Render_Target_Handle, color: Vector4) { command : Render_Command; command.type = .CLEAR_RENDER_TARGET; - render_target := parray_get(*renderer.render_targets, rt); + render_target := parray_get(*engine.renderer.render_targets, rt); command.clear_render_target.rt = render_target.backend_render_target; command.clear_render_target.color = color; - array_add(*renderer.command_buffer.commands, command); + array_add(*engine.renderer.command_buffer.commands, command); } push_cmd_clear_depth_stencil :: (using renderer: *Renderer, handle: Depth_Stencil_Buffer_Handle, depth: float) { command : Render_Command; command.type = .CLEAR_DEPTH_STENCIL; - ds := parray_get(*renderer.depth_stencil_buffers, handle); + ds := parray_get(*engine.renderer.depth_stencil_buffers, handle); command.clear_depth_stencil.ds = ds.backend_depth_stencil_buffer; command.clear_depth_stencil.depth = depth; - array_add(*renderer.command_buffer.commands, command); + array_add(*engine.renderer.command_buffer.commands, command); } push_cmd_clear_backbuffer :: (using renderer: *Renderer, color: Vector4) { @@ -1288,11 +1288,11 @@ push_cmd_clear_backbuffer :: (using renderer: *Renderer, color: Vector4) { command.clear_backbuffer.color = color; - array_add(*renderer.command_buffer.commands, command); + array_add(*engine.renderer.command_buffer.commands, command); } push_cmd_draw :: (using renderer: *Renderer, vertex_count: s64, start_vertex_index: s64 = 0, topology: Primitive_Topology = .TRIANGLE_LIST) { - renderer.draw_call_count += 1; + engine.renderer.draw_call_count += 1; command : Render_Command; command.type = .DRAW; @@ -1300,11 +1300,11 @@ push_cmd_draw :: (using renderer: *Renderer, vertex_count: s64, start_vertex_ind command.draw.vertex_count = vertex_count; command.draw.start_vertex_index = start_vertex_index; - array_add(*renderer.command_buffer.commands, command); + array_add(*engine.renderer.command_buffer.commands, command); } push_cmd_draw_instanced :: (using renderer: *Renderer, vertex_count: s64, instance_count: s64, start_vertex_index: s64 = 0, start_instance_index: s64 = 0, topology: Primitive_Topology = .TRIANGLE_LIST) { - renderer.draw_call_count += 1; + engine.renderer.draw_call_count += 1; command : Render_Command; command.type = .DRAW_INSTANCED; @@ -1314,11 +1314,11 @@ push_cmd_draw_instanced :: (using renderer: *Renderer, vertex_count: s64, instan command.draw_instanced.start_vertex_index = start_vertex_index; command.draw_instanced.start_instance_index = start_instance_index; - array_add(*renderer.command_buffer.commands, command); + array_add(*engine.renderer.command_buffer.commands, command); } push_cmd_draw_indexed :: (using renderer: *Renderer, index_count: s64, start_index: s64 = 0, base_vertex: s64 = 0, topology: Primitive_Topology = .TRIANGLE_LIST) { - renderer.draw_call_count += 1; + engine.renderer.draw_call_count += 1; command : Render_Command; command.type = .DRAW_INDEXED; @@ -1327,11 +1327,11 @@ push_cmd_draw_indexed :: (using renderer: *Renderer, index_count: s64, start_ind command.draw_indexed.start_index = start_index; command.draw_indexed.base_vertex = base_vertex; - array_add(*renderer.command_buffer.commands, command); + array_add(*engine.renderer.command_buffer.commands, command); } push_cmd_draw_indexed_instanced :: (using renderer: *Renderer, index_count: s64, instance_count: u32, start_index: s64 = 0, base_vertex: s64 = 0, topology: Primitive_Topology = .TRIANGLE_LIST) { - renderer.draw_call_count += 1; + engine.renderer.draw_call_count += 1; command : Render_Command; command.type = .DRAW_INDEXED_INSTANCED; @@ -1341,7 +1341,7 @@ push_cmd_draw_indexed_instanced :: (using renderer: *Renderer, index_count: s64, command.draw_indexed_instanced.start_index = start_index; command.draw_indexed_instanced.base_vertex = base_vertex; - array_add(*renderer.command_buffer.commands, command); + array_add(*engine.renderer.command_buffer.commands, command); } push_cmd_set_draw_mode :: (using renderer: *Renderer, draw_mode: Draw_Mode) { @@ -1349,7 +1349,7 @@ push_cmd_set_draw_mode :: (using renderer: *Renderer, draw_mode: Draw_Mode) { command.type = .SET_DRAW_MODE; command.set_draw_mode.draw_mode = draw_mode; - array_add(*renderer.command_buffer.commands, command); + array_add(*engine.renderer.command_buffer.commands, command); } push_cmd_set_cull_face :: (using renderer: *Renderer, cull_face: Cull_Face) { @@ -1357,7 +1357,7 @@ push_cmd_set_cull_face :: (using renderer: *Renderer, cull_face: Cull_Face) { command.type = .SET_CULL_FACE; command.set_cull_face.cull_face = cull_face; - array_add(*renderer.command_buffer.commands, command); + array_add(*engine.renderer.command_buffer.commands, command); } push_cmd_set_depth_write :: (using renderer: *Renderer, enabled: bool) { @@ -1365,7 +1365,7 @@ push_cmd_set_depth_write :: (using renderer: *Renderer, enabled: bool) { command.type = .SET_DEPTH_WRITE; command.set_depth_write.enabled = enabled; - array_add(*renderer.command_buffer.commands, command); + array_add(*engine.renderer.command_buffer.commands, command); } map_buffer :: (using renderer: *Renderer, handle: Buffer_Handle) -> *void #must { @@ -1411,7 +1411,7 @@ make_point :: (x: float, y: float, s: float, t: float, color: Vector4) -> Point get_text_size :: (using renderer: *Renderer, text: string, font_handle: Font_Handle) -> Vector2 { size : Vector2; - font := *renderer.fonts[font_handle - 1]; + font := *engine.renderer.fonts[font_handle - 1]; characters := font.glyphs; has_character := false; @@ -1441,21 +1441,21 @@ get_text_size :: (using renderer: *Renderer, text: string, font_handle: Font_Han } bake_text :: (using renderer: *Renderer, x: float, y: float, text: string, font_handle: Font_Handle, color: Vector4 = .{1, 1, 1, 1}) -> Text_Render_Data { - buffer := renderer.text_render_buffers[renderer.used_text_buffers_count]; - renderer.used_text_buffers_count += 1; + buffer := engine.renderer.text_render_buffers[engine.renderer.used_text_buffers_count]; + engine.renderer.used_text_buffers_count += 1; - x -= (cast(float)renderer.render_target_width) * 0.5; - y -= (cast(float)renderer.render_target_height) * 0.5; + x -= (cast(float)engine.renderer.render_target_width) * 0.5; + y -= (cast(float)engine.renderer.render_target_height) * 0.5; - sx := 2.0 / cast(float)renderer.render_target_width; - sy := 2.0 / cast(float)renderer.render_target_height; + sx := 2.0 / cast(float)engine.renderer.render_target_width; + sy := 2.0 / cast(float)engine.renderer.render_target_height; render_x := x * sx; render_y := y * sy; coords : [..] Point; coords.allocator = temp; - font := *renderer.fonts[font_handle - 1]; + font := *engine.renderer.fonts[font_handle - 1]; characters := font.glyphs; atlas_width := cast(float)font.atlas_width; atlas_height := cast(float)font.atlas_height; @@ -1502,11 +1502,11 @@ bake_text :: (using renderer: *Renderer, x: float, y: float, text: string, font_ } draw_fullscreen_quad :: () { - plane := parray_get(*renderer.meshes, renderer.default_meshes.fullscreen_plane); + plane := parray_get(*engine.renderer.meshes, engine.renderer.default_meshes.fullscreen_plane); vb := get_mesh_vb(plane); - push_cmd_set_vertex_buffer(renderer, vb); - push_cmd_set_index_buffer(renderer, plane.ib); - push_cmd_draw_indexed(renderer, plane.indices.count); + push_cmd_set_vertex_buffer(engine.renderer, vb); + push_cmd_set_index_buffer(engine.renderer, plane.ib); + push_cmd_draw_indexed(engine.renderer, plane.indices.count); } create_render_target :: (width: u32, height: u32, format: Format) -> Render_Target_Handle { @@ -1515,8 +1515,8 @@ create_render_target :: (width: u32, height: u32, format: Format) -> Render_Targ if width == SWAPCHAIN_SIZE || height == SWAPCHAIN_SIZE { render_target.width = width; render_target.height = height; - render_target.actual_width = renderer.render_target_width; - render_target.actual_height = renderer.render_target_height; + render_target.actual_width = engine.renderer.render_target_width; + render_target.actual_height = engine.renderer.render_target_height; } else { render_target.width = width; render_target.height = height; @@ -1525,16 +1525,16 @@ create_render_target :: (width: u32, height: u32, format: Format) -> Render_Targ } render_target.format = format; - render_target.backend_render_target = create_backend_render_target(renderer.backend, render_target.actual_width, render_target.actual_height, format); + render_target.backend_render_target = create_backend_render_target(engine.renderer.backend, render_target.actual_width, render_target.actual_height, format); texture : Texture; texture.width = render_target.actual_width; texture.height = render_target.actual_height; - texture.backend_texture = get_backend_texture_from_render_target(renderer.backend, render_target.backend_render_target); + texture.backend_texture = get_backend_texture_from_render_target(engine.renderer.backend, render_target.backend_render_target); - render_target.texture = parray_add(*renderer.textures, texture); + render_target.texture = parray_add(*engine.renderer.textures, texture); - return parray_add(*renderer.render_targets, render_target); + return parray_add(*engine.renderer.render_targets, render_target); } create_depth_stencil_buffer :: (width: u32, height: u32, format: Format) -> Depth_Stencil_Buffer_Handle { @@ -1543,8 +1543,8 @@ create_depth_stencil_buffer :: (width: u32, height: u32, format: Format) -> Dept if width == SWAPCHAIN_SIZE || height == SWAPCHAIN_SIZE { depth_stencil_buffer.width = width; depth_stencil_buffer.height = height; - depth_stencil_buffer.actual_width = renderer.render_target_width; - depth_stencil_buffer.actual_height = renderer.render_target_height; + depth_stencil_buffer.actual_width = engine.renderer.render_target_width; + depth_stencil_buffer.actual_height = engine.renderer.render_target_height; } else { depth_stencil_buffer.width = width; depth_stencil_buffer.height = height; @@ -1553,9 +1553,9 @@ create_depth_stencil_buffer :: (width: u32, height: u32, format: Format) -> Dept } //depth_stencil_buffer.format = format; - depth_stencil_buffer.backend_depth_stencil_buffer = create_backend_depth_stencil_buffer(renderer.backend, depth_stencil_buffer.actual_width, depth_stencil_buffer.actual_height); + depth_stencil_buffer.backend_depth_stencil_buffer = create_backend_depth_stencil_buffer(engine.renderer.backend, depth_stencil_buffer.actual_width, depth_stencil_buffer.actual_height); - return parray_add(*renderer.depth_stencil_buffers, depth_stencil_buffer); + return parray_add(*engine.renderer.depth_stencil_buffers, depth_stencil_buffer); } create_material_from_pipeline :: (pipeline: Pipeline_State_Handle) -> Material_Old { @@ -1563,15 +1563,15 @@ create_material_from_pipeline :: (pipeline: Pipeline_State_Handle) -> Material_O pass : Material_Pass_Old; pass.pipeline = pipeline; - pipeline_state := *renderer.pipeline_states[pipeline-1]; + pipeline_state := *engine.renderer.pipeline_states[pipeline-1]; for pipeline_state.shader_parameters { prop : Material_Property_Old; prop.parameter = it; if it.mapping == { case .REPEAT_SAMPLER; - prop.sampler = renderer.default_samplers.repeat; + prop.sampler = engine.renderer.default_samplers.repeat; case .CLAMP_SAMPLER; - prop.sampler = renderer.default_samplers.clamp; + prop.sampler = engine.renderer.default_samplers.clamp; case .TIME; //prop.buffer = engine.time_buffer; // @Incomplete } @@ -1584,16 +1584,16 @@ create_material_from_pipeline :: (pipeline: Pipeline_State_Handle) -> Material_O } check_for_shader_modifications :: () { - changed, needs_wait, wait_seconds := process_changes(*renderer.watcher); + changed, needs_wait, wait_seconds := process_changes(*engine.renderer.watcher); } render :: () { - renderer.command_buffer.commands.count = 0; - renderer.last_draw_call_count = renderer.draw_call_count; - renderer.draw_call_count = 0; - execute_render_graph(renderer.render_graph); - render(renderer.backend, *renderer.command_buffer); - renderer.used_text_buffers_count = 0; + engine.renderer.command_buffer.commands.count = 0; + engine.renderer.last_draw_call_count = engine.renderer.draw_call_count; + engine.renderer.draw_call_count = 0; + execute_render_graph(engine.renderer.render_graph); + render(engine.renderer.backend, *engine.renderer.command_buffer); + engine.renderer.used_text_buffers_count = 0; } #load "render_graph.jai"; @@ -1620,9 +1620,9 @@ render :: () { #import "File_Watcher"; file_change_callback :: (watcher: *File_Watcher(string), change: *File_Change, user_data: *string) { - for *shader: renderer.shaders { + for *shader: engine.renderer.shaders { if shader.path == change.full_path { - reload_shader(renderer, shader); + reload_shader(engine.renderer, shader); } } } diff --git a/ui/ui.jai b/ui/ui.jai index 24e7943..9b732c9 100644 --- a/ui/ui.jai +++ b/ui/ui.jai @@ -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 { diff --git a/ui/widgets.jai b/ui/widgets.jai index 518d958..96539b1 100644 --- a/ui/widgets.jai +++ b/ui/widgets.jai @@ -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; <