mirror of
https://github.com/aharabada/glitchy-engine-beef.git
synced 2026-09-05 21:01:52 +00:00
Editor changes
- Updated Renderer2D shaders - Fixed scene viewport having resolution - Show Grid even if no entity is selected - Explicit conversion from ImGui.VecX <-> VectorX - Simplified EditorLayer
This commit is contained in:
+1
-1
@@ -2,4 +2,4 @@ FileVersion = 1
|
|||||||
Projects = {Sandbox = {Path = "Sandbox"}, GlitchyEngine = {Path = "GlitchyEngine"}, GlitchLog = {Path = "GlitchLog"}, DirectX = {Path = "GlitchyEngine/vendor/directx/DirectX"}, DirectXTK = {Path = "GlitchyEngine/vendor/DirectXTK/DirectXTK-beef"}, LodePng = {Path = "vendor/lodepng-beef/lodepng-beef"}, FreeType = {Path = "GlitchyEngine/vendor/freetype"}, cgltf-beef = {Path = "GlitchyEngine/vendor/gltf/cgltf-beef"}, GlitchyEditor = {Path = "GlitchyEditor"}, msdfgen-beef = {Path = "GlitchyEngine/vendor/msdfgen/msdfgen-beef"}, ImGui = {Path = "GlitchyEngine/vendor/imgui/ImGui"}, ImGuiImplDX11 = {Path = "GlitchyEngine/vendor/imgui/ImGuiImplDX11"}, ImGuiImplWin32 = {Path = "GlitchyEngine/vendor/imgui/ImGuiImplWin32"}, ImGuizmo = {Path = "GlitchyEngine/vendor/imgui/ImGuizmo"}}
|
Projects = {Sandbox = {Path = "Sandbox"}, GlitchyEngine = {Path = "GlitchyEngine"}, GlitchLog = {Path = "GlitchLog"}, DirectX = {Path = "GlitchyEngine/vendor/directx/DirectX"}, DirectXTK = {Path = "GlitchyEngine/vendor/DirectXTK/DirectXTK-beef"}, LodePng = {Path = "vendor/lodepng-beef/lodepng-beef"}, FreeType = {Path = "GlitchyEngine/vendor/freetype"}, cgltf-beef = {Path = "GlitchyEngine/vendor/gltf/cgltf-beef"}, GlitchyEditor = {Path = "GlitchyEditor"}, msdfgen-beef = {Path = "GlitchyEngine/vendor/msdfgen/msdfgen-beef"}, ImGui = {Path = "GlitchyEngine/vendor/imgui/ImGui"}, ImGuiImplDX11 = {Path = "GlitchyEngine/vendor/imgui/ImGuiImplDX11"}, ImGuiImplWin32 = {Path = "GlitchyEngine/vendor/imgui/ImGuiImplWin32"}, ImGuizmo = {Path = "GlitchyEngine/vendor/imgui/ImGuizmo"}}
|
||||||
|
|
||||||
[Workspace]
|
[Workspace]
|
||||||
StartupProject = "Sandbox"
|
StartupProject = "GlitchyEditor"
|
||||||
|
|||||||
@@ -0,0 +1,62 @@
|
|||||||
|
Texture2D Texture : register(t0);
|
||||||
|
SamplerState Sampler : register(s0);
|
||||||
|
|
||||||
|
cbuffer Constants : register(b0)
|
||||||
|
{
|
||||||
|
float4x4 ViewProjection;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct VS_Input
|
||||||
|
{
|
||||||
|
float2 Position : POSITION;
|
||||||
|
float2 Texcoord : TEXCOORD0;
|
||||||
|
float4x4 Transform : TRANSFORM;
|
||||||
|
float4 Color : COLOR;
|
||||||
|
float4 UVTransform : TEXCOORD1;
|
||||||
|
float InnerRadius : TEXCOORD2;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct PS_Input
|
||||||
|
{
|
||||||
|
float4 Position : SV_Position;
|
||||||
|
float2 RawPos : TEXCOORD0;
|
||||||
|
float2 Texcoord : TEXCOORD1;
|
||||||
|
float4 Color : COLOR;
|
||||||
|
float InnerRadius : TEXCOORD2;
|
||||||
|
};
|
||||||
|
|
||||||
|
PS_Input VS(VS_Input input)
|
||||||
|
{
|
||||||
|
PS_Input output;
|
||||||
|
|
||||||
|
output.Position = mul(ViewProjection, mul(input.Transform, float4(input.Position, 0.0f, 1.0f)));
|
||||||
|
output.Texcoord = input.UVTransform.xy + input.UVTransform.zw * input.Texcoord;
|
||||||
|
output.RawPos = input.Position;
|
||||||
|
output.Color = input.Color;
|
||||||
|
output.InnerRadius = input.InnerRadius;
|
||||||
|
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
|
||||||
|
float4 PS(PS_Input input) : SV_Target0
|
||||||
|
{
|
||||||
|
float2 uv = input.RawPos * 2;
|
||||||
|
|
||||||
|
float distance = 1.0f - length(uv);
|
||||||
|
|
||||||
|
// Smoothing edges based on derivative (not sure if RawPos is the best value for this)
|
||||||
|
float f = fwidth(input.RawPos.x) + fwidth(input.RawPos.y);
|
||||||
|
|
||||||
|
float amount = smoothstep(0.0f, f, distance);
|
||||||
|
amount *= smoothstep(input.InnerRadius + f, input.InnerRadius, distance);
|
||||||
|
|
||||||
|
// Discard invisible pixels
|
||||||
|
clip(amount - 0.5f);
|
||||||
|
|
||||||
|
float4 color = Texture.Sample(Sampler, input.Texcoord) * input.Color;
|
||||||
|
color.a *= amount;
|
||||||
|
|
||||||
|
return color;
|
||||||
|
}
|
||||||
|
|
||||||
|
#effect[VS=VS, PS=PS]
|
||||||
@@ -0,0 +1,93 @@
|
|||||||
|
Texture2D<float3> Texture : register(t0);
|
||||||
|
SamplerState Sampler : register(s0);
|
||||||
|
|
||||||
|
cbuffer Constants
|
||||||
|
{
|
||||||
|
float4x4 ViewProjection;
|
||||||
|
float2 UnitRange;
|
||||||
|
float screenPixelRange = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct VS_Input
|
||||||
|
{
|
||||||
|
float2 Position : POSITION;
|
||||||
|
float2 Texcoord : TEXCOORD0;
|
||||||
|
float4x4 Tranform : TRANSFORM;
|
||||||
|
float4 Color : COLOR;
|
||||||
|
float4 UVTransform : TEXCOORD1;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct PS_Input
|
||||||
|
{
|
||||||
|
float4 Position : SV_Position;
|
||||||
|
float2 TexCoord : TEXCOORD0;
|
||||||
|
float4 Color : COLOR;
|
||||||
|
};
|
||||||
|
|
||||||
|
PS_Input VS(VS_Input input)
|
||||||
|
{
|
||||||
|
PS_Input output;
|
||||||
|
|
||||||
|
output.Position = mul(ViewProjection, mul(input.Tranform, float4(input.Position, 0.0f, 1.0f)));
|
||||||
|
output.TexCoord = input.UVTransform.xy + input.UVTransform.zw * input.Texcoord;
|
||||||
|
output.Color = input.Color;
|
||||||
|
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
in vec2 texCoord;
|
||||||
|
out vec4 color;
|
||||||
|
uniform sampler2D msdf;
|
||||||
|
uniform vec4 bgColor;
|
||||||
|
uniform vec4 fgColor;
|
||||||
|
|
||||||
|
float median(float r, float g, float b) {
|
||||||
|
return max(min(r, g), min(max(r, g), b));
|
||||||
|
}
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
vec3 msd = texture(msdf, texCoord).rgb;
|
||||||
|
float sd = median(msd.r, msd.g, msd.b);
|
||||||
|
float screenPxDistance = screenPxRange()*(sd - 0.5);
|
||||||
|
float opacity = clamp(screenPxDistance + 0.5, 0.0, 1.0);
|
||||||
|
color = mix(bgColor, fgColor, opacity);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
float median(float r, float g, float b)
|
||||||
|
{
|
||||||
|
return max(min(r, g), min(max(r, g), b));
|
||||||
|
}
|
||||||
|
|
||||||
|
float ScreenPxRange(float2 texcoord)
|
||||||
|
{
|
||||||
|
float2 screenTexSize = 1.0f / fwidth(texcoord);
|
||||||
|
return max(0.5f * dot(UnitRange, screenTexSize), 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
float4 PS(PS_Input input) : SV_Target0
|
||||||
|
{
|
||||||
|
float3 msd = Texture.Sample(Sampler, input.TexCoord);
|
||||||
|
float sd = median(msd.r, msd.g, msd.b);
|
||||||
|
float screenPxDistance = ScreenPxRange(input.TexCoord) * (sd - 0.5);
|
||||||
|
float opacity = clamp(screenPxDistance + 0.5, 0.0, 1.0);
|
||||||
|
|
||||||
|
return float4(input.Color.rgb, opacity * input.Color.a);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
// 2D
|
||||||
|
float4 PS(PS_Input input) : SV_Target0
|
||||||
|
{
|
||||||
|
float3 msd = Texture.Sample(Sampler, input.TexCoord).rgb;
|
||||||
|
float sd = median(msd.r, msd.g, msd.b);
|
||||||
|
float screenPxDistance = screenPixelRange*(sd - 0.5);
|
||||||
|
float opacity = clamp(screenPxDistance + 0.5, 0.0, 1.0);
|
||||||
|
|
||||||
|
return float4(input.Color.rgb, opacity * input.Color.a);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#effect[VS=VS, PS=PS]
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
Texture2D Texture : register(t0);
|
|
||||||
SamplerState Sampler : register(s0);
|
|
||||||
|
|
||||||
struct VS_Input
|
|
||||||
{
|
|
||||||
float2 Position : POSITION;
|
|
||||||
float4x4 Tranform : TRANSFORM;
|
|
||||||
float4 Color : COLOR;
|
|
||||||
float4 UVTransform : TEXCOORD;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct PS_Input
|
|
||||||
{
|
|
||||||
float4 Position : SV_Position;
|
|
||||||
float2 TexCoord : TEXCOORD0;
|
|
||||||
float4 Color : COLOR;
|
|
||||||
};
|
|
||||||
|
|
||||||
PS_Input VS(VS_Input input)
|
|
||||||
{
|
|
||||||
PS_Input output;
|
|
||||||
|
|
||||||
output.Position = mul(float4(input.Position, 0.0f, 1.0f), input.Tranform);
|
|
||||||
output.TexCoord = input.UVTransform.xy + input.UVTransform.zw * input.Position;
|
|
||||||
output.Color = input.Color;
|
|
||||||
|
|
||||||
return output;
|
|
||||||
}
|
|
||||||
|
|
||||||
float4 PS(PS_Input input) : SV_Target0
|
|
||||||
{
|
|
||||||
float4 color = input.Color * Texture.Sample(Sampler, input.TexCoord);
|
|
||||||
|
|
||||||
return color;
|
|
||||||
}
|
|
||||||
|
|
||||||
#effect[VS=VS, PS=PS]
|
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
Texture2D Texture : register(t0);
|
||||||
|
SamplerState Sampler : register(s0);
|
||||||
|
|
||||||
|
cbuffer Constants : register(b0)
|
||||||
|
{
|
||||||
|
float4x4 ViewProjection;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct VS_Input
|
||||||
|
{
|
||||||
|
float2 Position : POSITION;
|
||||||
|
float2 Texcoord : TEXCOORD0;
|
||||||
|
float4x4 Transform : TRANSFORM;
|
||||||
|
float4 Color : COLOR;
|
||||||
|
float4 UVTransform : TEXCOORD1;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct PS_Input
|
||||||
|
{
|
||||||
|
float4 Position : SV_Position;
|
||||||
|
float2 Texcoord : TEXCOORD;
|
||||||
|
float4 Color : COLOR;
|
||||||
|
};
|
||||||
|
|
||||||
|
PS_Input VS(VS_Input input)
|
||||||
|
{
|
||||||
|
PS_Input output;
|
||||||
|
|
||||||
|
output.Position = mul(ViewProjection, mul(input.Transform, float4(input.Position, 0.0f, 1.0f)));
|
||||||
|
output.Texcoord = input.UVTransform.xy + input.UVTransform.zw * input.Texcoord;
|
||||||
|
output.Color = input.Color;
|
||||||
|
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
|
||||||
|
float4 PS(PS_Input input) : SV_Target0
|
||||||
|
{
|
||||||
|
return Texture.Sample(Sampler, input.Texcoord) * input.Color;
|
||||||
|
}
|
||||||
|
|
||||||
|
#effect[VS=VS, PS=PS]
|
||||||
@@ -1,84 +0,0 @@
|
|||||||
cbuffer SceneConstants
|
|
||||||
{
|
|
||||||
float4x4 ViewProjection = float4x4(1, 0, 0, 0,
|
|
||||||
0, 1, 0, 0,
|
|
||||||
0, 0, 1, 0,
|
|
||||||
0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
cbuffer ObjectConstants
|
|
||||||
{
|
|
||||||
float4x4 Transform;
|
|
||||||
}
|
|
||||||
|
|
||||||
cbuffer Constants
|
|
||||||
{
|
|
||||||
float4 BaseColor;
|
|
||||||
float3 LightDir;
|
|
||||||
}
|
|
||||||
|
|
||||||
cbuffer SkinningMatrices
|
|
||||||
{
|
|
||||||
matrix SkinningMatrices[255];
|
|
||||||
float3x3 InvTransSkinningMatrices[255];
|
|
||||||
}
|
|
||||||
|
|
||||||
struct VS_IN
|
|
||||||
{
|
|
||||||
float3 Position : POSITION;
|
|
||||||
float3 Normal : NORMAL;
|
|
||||||
uint4 JointIndices : JOINTS_0;
|
|
||||||
float4 JointWeights : WEIGHTS_0;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct PS_IN
|
|
||||||
{
|
|
||||||
float4 Position : SV_POSITION;
|
|
||||||
float3 Normal : NORMAL;
|
|
||||||
};
|
|
||||||
|
|
||||||
PS_IN VS(VS_IN input)
|
|
||||||
{
|
|
||||||
PS_IN output;
|
|
||||||
|
|
||||||
// Unanimated position in modelspace
|
|
||||||
float4 positionRaw = float4(input.Position, 1);
|
|
||||||
|
|
||||||
// Calculate animated position in modelspace
|
|
||||||
|
|
||||||
float4 position =
|
|
||||||
mul(SkinningMatrices[input.JointIndices.x], positionRaw) * input.JointWeights.x +
|
|
||||||
mul(SkinningMatrices[input.JointIndices.y], positionRaw) * input.JointWeights.y +
|
|
||||||
mul(SkinningMatrices[input.JointIndices.z], positionRaw) * input.JointWeights.z +
|
|
||||||
mul(SkinningMatrices[input.JointIndices.w], positionRaw) * input.JointWeights.w;
|
|
||||||
|
|
||||||
float3 normal =
|
|
||||||
mul(InvTransSkinningMatrices[input.JointIndices.x], input.Normal) * input.JointWeights.x +
|
|
||||||
mul(InvTransSkinningMatrices[input.JointIndices.y], input.Normal) * input.JointWeights.y +
|
|
||||||
mul(InvTransSkinningMatrices[input.JointIndices.z], input.Normal) * input.JointWeights.z +
|
|
||||||
mul(InvTransSkinningMatrices[input.JointIndices.w], input.Normal) * input.JointWeights.w;
|
|
||||||
|
|
||||||
//position = saturate(position - 1000) + positionRaw;
|
|
||||||
|
|
||||||
//float4 position = mul(SkinningMatrices[input.JointIndices.x], positionRaw);
|
|
||||||
|
|
||||||
float4 worldPosition = mul(Transform, position);
|
|
||||||
|
|
||||||
output.Position = mul(ViewProjection, worldPosition);
|
|
||||||
output.Normal = mul((float3x3)Transform, normal);
|
|
||||||
|
|
||||||
return output;
|
|
||||||
}
|
|
||||||
|
|
||||||
float4 PS(PS_IN input) : SV_TARGET
|
|
||||||
{
|
|
||||||
input.Normal = normalize(input.Normal);
|
|
||||||
|
|
||||||
float shading = dot(LightDir, input.Normal);
|
|
||||||
//float shading = dot(LightDir, LightDir) + 1;
|
|
||||||
shading = clamp(shading, 0.0f, 1.0f);
|
|
||||||
|
|
||||||
return BaseColor * shading;
|
|
||||||
}
|
|
||||||
|
|
||||||
#effect[VS=VS,PS=PS]
|
|
||||||
@@ -83,45 +83,41 @@ namespace GlitchyEditor.EditWindows
|
|||||||
ImGui.Image(_renderTarget, viewportSize);
|
ImGui.Image(_renderTarget, viewportSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(_editor.SelectedEntities.Count > 0)
|
|
||||||
{
|
|
||||||
ImGuizmo.SetDrawlist();
|
ImGuizmo.SetDrawlist();
|
||||||
|
|
||||||
var entity = _editor.SelectedEntities.Back;
|
var topLeft = ImGui.GetWindowPos();
|
||||||
|
var cntMin = ImGui.GetWindowContentRegionMin();
|
||||||
|
|
||||||
|
topLeft.x += cntMin.x;
|
||||||
|
topLeft.y += cntMin.y;
|
||||||
|
ImGuizmo.SetRect(topLeft.x, topLeft.y, viewportSize.x, viewportSize.y);
|
||||||
|
|
||||||
|
var view = _camera.View;
|
||||||
|
var projection = _camera.Projection;
|
||||||
|
|
||||||
|
Matrix mat = .Identity;
|
||||||
|
ImGuizmo.DrawGrid((.)&view, (.)&projection, (.)&mat, 10);
|
||||||
|
|
||||||
|
if(_editor.SelectedEntities.Count > 0)
|
||||||
|
{
|
||||||
|
var entity = _editor.SelectedEntities.Front;
|
||||||
|
|
||||||
var transformCmp = _editor.World.GetComponent<TransformComponent>(entity);
|
var transformCmp = _editor.World.GetComponent<TransformComponent>(entity);
|
||||||
|
|
||||||
var transform = transformCmp.LocalTransform;
|
var transform = transformCmp.LocalTransform;
|
||||||
|
|
||||||
var view = _camera.View;
|
ImGuizmo.SetRect(topLeft.x, topLeft.y, viewportSize.x, viewportSize.y);
|
||||||
var projection = _camera.Projection;
|
|
||||||
|
|
||||||
var v = ImGui.GetWindowPos();
|
|
||||||
var cntMin = ImGui.GetWindowContentRegionMin();
|
|
||||||
|
|
||||||
v.x += cntMin.x;
|
|
||||||
v.y += cntMin.y;
|
|
||||||
|
|
||||||
ImGuizmo.SetRect(v.x, v.y, viewportSize.x, viewportSize.y);
|
|
||||||
|
|
||||||
Color c = .(0,0,0,255);
|
|
||||||
|
|
||||||
//ImGuizmo.DrawCubes((.)&view, (.)&projection, (.)&transform, 1);
|
|
||||||
ImGuizmo.Manipulate((.)&view, (.)&projection, .TRANSLATE, .LOCAL, (.)&transform);
|
ImGuizmo.Manipulate((.)&view, (.)&projection, .TRANSLATE, .LOCAL, (.)&transform);
|
||||||
|
|
||||||
Matrix mat = .Identity;
|
|
||||||
|
|
||||||
ImGuizmo.DrawGrid((.)&view, (.)&projection, (.)&mat, 10);
|
|
||||||
|
|
||||||
transformCmp.LocalTransform = transform;
|
transformCmp.LocalTransform = transform;
|
||||||
//ImGuizmo.ViewManipulate((.)&view, , .TRANSLATE, .LOCAL, (.)&transform);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui.End();
|
ImGui.End();
|
||||||
|
|
||||||
if(oldViewportSize != viewportSize)
|
if(oldViewportSize != viewportSize)
|
||||||
{
|
{
|
||||||
ViewportSizeChangedEvent.Invoke(this, *(Vector2*)&oldViewportSize);
|
ViewportSizeChangedEvent.Invoke(this, (Vector2)viewportSize);
|
||||||
viewPortChanged = true;
|
viewPortChanged = true;
|
||||||
oldViewportSize = viewportSize;
|
oldViewportSize = viewportSize;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ namespace GlitchyEditor
|
|||||||
RasterizerState _rasterizerStateClockWise ~ _?.ReleaseRef();
|
RasterizerState _rasterizerStateClockWise ~ _?.ReleaseRef();
|
||||||
|
|
||||||
GraphicsContext _context ~ _?.ReleaseRef();
|
GraphicsContext _context ~ _?.ReleaseRef();
|
||||||
DepthStencilTarget _swapchainDepthBuffer ~ _?.ReleaseRef();
|
|
||||||
|
|
||||||
BlendState _alphaBlendState ~ _?.ReleaseRef();
|
BlendState _alphaBlendState ~ _?.ReleaseRef();
|
||||||
BlendState _opaqueBlendState ~ _?.ReleaseRef();
|
BlendState _opaqueBlendState ~ _?.ReleaseRef();
|
||||||
@@ -27,7 +26,7 @@ namespace GlitchyEditor
|
|||||||
|
|
||||||
PerspectiveCameraController _cameraController ~ delete _;
|
PerspectiveCameraController _cameraController ~ delete _;
|
||||||
|
|
||||||
RenderTarget2D _renderTarget2D ~ _?.ReleaseRef();
|
RenderTarget2D _viewportTarget ~ _?.ReleaseRef();
|
||||||
|
|
||||||
public this() : base("Example")
|
public this() : base("Example")
|
||||||
{
|
{
|
||||||
@@ -42,8 +41,6 @@ namespace GlitchyEditor
|
|||||||
{
|
{
|
||||||
_context = Application.Get().Window.Context..AddRef();
|
_context = Application.Get().Window.Context..AddRef();
|
||||||
|
|
||||||
_swapchainDepthBuffer = new DepthStencilTarget(_context.SwapChain.Width, _context.SwapChain.Height);
|
|
||||||
|
|
||||||
RasterizerStateDescription rsDesc = .(.Solid, .Back, true);
|
RasterizerStateDescription rsDesc = .(.Solid, .Back, true);
|
||||||
_rasterizerState = new RasterizerState(rsDesc);
|
_rasterizerState = new RasterizerState(rsDesc);
|
||||||
|
|
||||||
@@ -55,15 +52,8 @@ namespace GlitchyEditor
|
|||||||
_alphaBlendState = new BlendState(blendDesc);
|
_alphaBlendState = new BlendState(blendDesc);
|
||||||
_opaqueBlendState = new BlendState(.Default);
|
_opaqueBlendState = new BlendState(.Default);
|
||||||
|
|
||||||
_renderTarget2D = new RenderTarget2D(RenderTarget2DDescription(.R8G8B8A8_UNorm, 100, 100) {DepthStencilFormat = .D32_Float});
|
_viewportTarget = new RenderTarget2D(RenderTarget2DDescription(.R8G8B8A8_UNorm, 100, 100) {DepthStencilFormat = .D32_Float});
|
||||||
|
_viewportTarget.SamplerState = SamplerStateManager.LinearClamp;
|
||||||
SamplerStateDescription desc = .();
|
|
||||||
|
|
||||||
SamplerState sampler = new SamplerState(desc);
|
|
||||||
|
|
||||||
_renderTarget2D.SamplerState = sampler;
|
|
||||||
|
|
||||||
sampler.ReleaseRef();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void InitEcs()
|
private void InitEcs()
|
||||||
@@ -83,8 +73,7 @@ namespace GlitchyEditor
|
|||||||
_editor = new Editor(_world);
|
_editor = new Editor(_world);
|
||||||
_editor.SceneViewportWindow.ViewportSizeChangedEvent.Add(new (s, e) => ViewportSizeChanged(s, e));
|
_editor.SceneViewportWindow.ViewportSizeChangedEvent.Add(new (s, e) => ViewportSizeChanged(s, e));
|
||||||
|
|
||||||
_cameraController = new .(Application.Get().Window.Context.SwapChain.BackbufferViewport.Width /
|
_cameraController = new .(_context.SwapChain.AspectRatio);
|
||||||
Application.Get().Window.Context.SwapChain.BackbufferViewport.Height);
|
|
||||||
_cameraController.CameraPosition = .(0, 0, -5);
|
_cameraController.CameraPosition = .(0, 0, -5);
|
||||||
_cameraController.TranslationSpeed = 10;
|
_cameraController.TranslationSpeed = 10;
|
||||||
|
|
||||||
@@ -100,12 +89,12 @@ namespace GlitchyEditor
|
|||||||
|
|
||||||
TransformSystem.Update(_world);
|
TransformSystem.Update(_world);
|
||||||
|
|
||||||
RenderCommand.Clear(_renderTarget2D, .Color | .Depth, .(0.2f, 0.2f, 0.2f), 1.0f, 0);
|
RenderCommand.Clear(_viewportTarget, .Color | .Depth, .(0.2f, 0.2f, 0.2f), 1.0f, 0);
|
||||||
|
|
||||||
_context.SetRenderTarget(_renderTarget2D);
|
RenderCommand.SetRenderTarget(_viewportTarget);
|
||||||
_context.BindRenderTargets();
|
RenderCommand.BindRenderTargets();
|
||||||
|
|
||||||
RenderCommand.SetViewport(Viewport(0, 0, _renderTarget2D.Width, _renderTarget2D.Height));
|
RenderCommand.SetViewport(Viewport(0, 0, _viewportTarget.Width, _viewportTarget.Height));
|
||||||
|
|
||||||
RenderCommand.SetBlendState(_opaqueBlendState);
|
RenderCommand.SetBlendState(_opaqueBlendState);
|
||||||
|
|
||||||
@@ -115,12 +104,10 @@ namespace GlitchyEditor
|
|||||||
|
|
||||||
Renderer.EndScene();
|
Renderer.EndScene();
|
||||||
|
|
||||||
RenderCommand.Clear(null, .(0.2f, 0.2f, 0.2f));
|
RenderCommand.Clear(null, .Color | .Depth, .(0.2f, 0.2f, 0.2f), 1.0f, 0);
|
||||||
RenderCommand.Clear(_swapchainDepthBuffer, .Depth, 1.0f, 0);
|
|
||||||
|
|
||||||
_context.SetRenderTarget(null);
|
RenderCommand.SetRenderTarget(null);
|
||||||
_context.SetDepthStencilTarget(_swapchainDepthBuffer);
|
RenderCommand.BindRenderTargets();
|
||||||
_context.BindRenderTargets();
|
|
||||||
|
|
||||||
RenderCommand.SetViewport(_context.SwapChain.BackbufferViewport);
|
RenderCommand.SetViewport(_context.SwapChain.BackbufferViewport);
|
||||||
}
|
}
|
||||||
@@ -144,7 +131,7 @@ namespace GlitchyEditor
|
|||||||
|
|
||||||
DrawMainMenuBar();
|
DrawMainMenuBar();
|
||||||
|
|
||||||
_editor.SceneViewportWindow.RenderTarget = _renderTarget2D;
|
_editor.SceneViewportWindow.RenderTarget = _viewportTarget;
|
||||||
|
|
||||||
_editor.Update();
|
_editor.Update();
|
||||||
|
|
||||||
@@ -186,9 +173,6 @@ namespace GlitchyEditor
|
|||||||
|
|
||||||
private bool OnWindowResize(WindowResizeEvent e)
|
private bool OnWindowResize(WindowResizeEvent e)
|
||||||
{
|
{
|
||||||
_swapchainDepthBuffer.ReleaseRef();
|
|
||||||
_swapchainDepthBuffer = new DepthStencilTarget(_context.SwapChain.Width, _context.SwapChain.Height);
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -200,7 +184,7 @@ namespace GlitchyEditor
|
|||||||
if(sizeX == 0 || sizeY == 0)
|
if(sizeX == 0 || sizeY == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
_renderTarget2D.Resize(sizeX, sizeY);
|
_viewportTarget.Resize(sizeX, sizeY);
|
||||||
|
|
||||||
_cameraController.AspectRatio = (float)sizeX / (float)sizeY;
|
_cameraController.AspectRatio = (float)sizeX / (float)sizeY;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,5 +23,17 @@ namespace ImGui
|
|||||||
|
|
||||||
/// Releases references that accumulated calls like ImGui::Image
|
/// Releases references that accumulated calls like ImGui::Image
|
||||||
protected internal static extern void CleanupFrame();
|
protected internal static extern void CleanupFrame();
|
||||||
|
|
||||||
|
extension Vec2
|
||||||
|
{
|
||||||
|
public static explicit operator Vector2(Vec2 v) => .(v.x, v.y);
|
||||||
|
public static explicit operator Vec2(Vector2 v) => .(v.X, v.Y);
|
||||||
|
}
|
||||||
|
|
||||||
|
extension Vec4
|
||||||
|
{
|
||||||
|
public static explicit operator Vector4(Vec4 v) => .(v.x, v.y, v.z, v.w);
|
||||||
|
public static explicit operator Vec4(Vector4 v) => .(v.X, v.Y, v.Z, v.W);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user