diff --git a/core/entity.jai b/core/entity.jai index 892bc12..a80e3fe 100644 --- a/core/entity.jai +++ b/core/entity.jai @@ -81,6 +81,7 @@ MAX_CHILDREN :: 16; dynamic_friction: float; restitution: float; + render_collider: bool; collider_color: Color; lock: Physics_Lock; diff --git a/core/math.jai b/core/math.jai index 008f585..fc4fc2f 100644 --- a/core/math.jai +++ b/core/math.jai @@ -42,13 +42,6 @@ Vector3i :: struct { z: int; } -Color :: #type,isa Vector4; - -Colored_Vert :: struct { - position: Vector2; - color : Color; -} - AABB :: struct { min: Vector3 = .{FLOAT32_INFINITY, FLOAT32_INFINITY, FLOAT32_INFINITY}; max: Vector3 = .{-FLOAT32_INFINITY, -FLOAT32_INFINITY, -FLOAT32_INFINITY}; @@ -423,6 +416,60 @@ ease_in_out_sine :: (x: float) -> float { return -(cos(PI * x) - 1.0) * 0.5; } +// Color +Color :: #type,isa Vector4; + +Colored_Vert :: struct { + position: Vector2; + color : Color; +} + +linear_to_srgb :: (c: float) -> float { + if (c <= 0.0031308) + return 12.92 * c; + else + return 1.055 * pow(c, 1.0 / 2.4) - 0.055; +} + +linear_to_srgb :: (c: Vector3) -> Vector3 { + return Vector3.{ + linear_to_srgb(c.x), + linear_to_srgb(c.y), + linear_to_srgb(c.z) + }; +} + +linear_to_srgb :: (c: $T) -> T { + srgb_color := c; + srgb_color.x = linear_to_srgb(c.x); + srgb_color.y = linear_to_srgb(c.y); + srgb_color.z = linear_to_srgb(c.z); + return srgb_color; +} + +srgb_to_linear :: (c: float) -> float { + if c <= 0.04045 + return c / 12.92; + else + return pow((c + 0.055) / 1.055, 2.4); +} + +srgb_to_linear :: (c: Vector3) -> Vector3 { + return float3( + srgbToLinear(c.r), + srgbToLinear(c.g), + srgbToLinear(c.b) + ); +} + +srgb_to_linear :: (c: $T) -> T { + linear_color := c; + linear_color.x = srgb_to_linear(c.x); + linear_color.y = srgb_to_linear(c.y); + linear_color.z = srgb_to_linear(c.z); + return linear_color; +} + #import "PCG"; #import "Math"; #load "frustum.jai"; diff --git a/metaprogram.jai b/metaprogram.jai index e68a7b9..c286802 100644 --- a/metaprogram.jai +++ b/metaprogram.jai @@ -228,7 +228,9 @@ generate_member_ui_imgui :: (type: *Type_Info_Struct, builder: *String_Builder, } else if info_struct.name == "Vector3" { print_to_builder(builder, "\tImGui.DragFloat3(tprint_c(\"%\"), *e.%.component);\n", new_path, new_path); } else if info_struct.name == "Color" || info_struct.name == "Vector4" { - print_to_builder(builder, "\tImGui.ColorEdit4(tprint_c(\"%\"), *e.%.component);\n", new_path, new_path); + print_to_builder(builder, "\tsrgb_color := linear_to_srgb(e.%);\n", new_path); + print_to_builder(builder, "\tImGui.ColorEdit4(tprint_c(\"%\"), *srgb_color.component);\n", new_path); + print_to_builder(builder, "\te.% = srgb_to_linear(srgb_color);\n", new_path); } else { generate_member_ui_imgui(info_struct, builder, new_path); } diff --git a/renderer/dx11_renderer.jai b/renderer/dx11_renderer.jai index ff3c31c..cbf2c95 100644 --- a/renderer/dx11_renderer.jai +++ b/renderer/dx11_renderer.jai @@ -1115,7 +1115,7 @@ create_backend_render_target :: (using backend: *D3D11_Backend, width: u32, heig texture_desc.Height = height; texture_desc.MipLevels = 1; texture_desc.ArraySize = 1; - texture_desc.Format = .DXGI_FORMAT_R32G32B32A32_FLOAT; // @Incomplete + texture_desc.Format = .DXGI_FORMAT_R16G16B16A16_FLOAT; // @Incomplete texture_desc.SampleDesc.Count = 1; texture_desc.Usage = .D3D11_USAGE_DEFAULT; texture_desc.BindFlags = D3D11_BIND_FLAG.RENDER_TARGET | D3D11_BIND_FLAG.SHADER_RESOURCE; diff --git a/renderer/trigger_rendering.jai b/renderer/trigger_rendering.jai index d965475..360c1ef 100644 --- a/renderer/trigger_rendering.jai +++ b/renderer/trigger_rendering.jai @@ -64,6 +64,8 @@ render_trigger_lines :: () { #if PHYSICS { for e: engine.current_scene.entities { if e.physics.type == .BOX { + if !e.physics.render_collider continue; + color := Color.{0,0,1,1};//e.collider.aabb_color; aabb := AABB.{-e.physics.box.half_extent, e.physics.box.half_extent};