Tiny refactor
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user