mirror of
https://github.com/aharabada/glitchy-engine-beef.git
synced 2026-09-05 13:01:52 +00:00
Play Button
This commit is contained in:
@@ -84,7 +84,7 @@ namespace GlitchyEngine.Renderer
|
||||
return .Ok;
|
||||
}
|
||||
|
||||
protected override Result<void> PlatformSetData(void* data, uint32 byteLength, uint32 dstByteOffset, GlitchyEngine.Renderer.MapType mapType)
|
||||
protected override Result<void> PlatformSetData(void* data, uint32 byteLength, uint32 dstByteOffset, Renderer.MapType mapType)
|
||||
{
|
||||
Debug.Profiler.ProfileResourceFunction!();
|
||||
|
||||
@@ -102,7 +102,7 @@ namespace GlitchyEngine.Renderer
|
||||
Box dataBox = .(dstByteOffset, 0, 0, dstByteOffset + byteLength, 1, 1);
|
||||
NativeContext.UpdateSubresource(nativeBuffer, 0, &dataBox, data, byteLength, byteLength);
|
||||
case .Dynamic:
|
||||
Debug.Assert(mapType.CanWrite, "The map type has to have write access.");
|
||||
Log.EngineLogger.Assert(mapType == .WriteDiscard || mapType == .WriteNoOverwrite, scope $"When writing to dynamic resources the map type must be {nameof(Renderer.MapType.WriteDiscard)} or {nameof(Renderer.MapType.WriteNoOverwrite)}.");
|
||||
// Todo: DoNotWaitFlag
|
||||
MappedSubresource map = ?;
|
||||
NativeContext.Map(nativeBuffer, 0, (.)mapType, .None, &map);
|
||||
|
||||
@@ -232,7 +232,7 @@ namespace GlitchyEngine.Renderer
|
||||
_sceneConstants.CameraTarget = renderTarget;
|
||||
_sceneConstants.CompositionTarget = finalTarget;
|
||||
|
||||
_sceneBuffer.SetData<Matrix>(viewProjection);
|
||||
_sceneBuffer.SetData<Matrix>(viewProjection , 0, .WriteDiscard);
|
||||
}
|
||||
|
||||
public static void BeginScene(EditorCamera camera, RenderTargetGroup finalTarget)
|
||||
|
||||
@@ -63,8 +63,163 @@ namespace GlitchyEngine.World
|
||||
|
||||
public void UpdateRuntime(GameTime gameTime, RenderTargetGroup finalTarget)
|
||||
{
|
||||
// TODO: adapt changes from UpdateEditor!
|
||||
Runtime.NotImplemented();
|
||||
Debug.Profiler.ProfileRendererFunction!();
|
||||
|
||||
finalTarget.AddRef();
|
||||
|
||||
TransformSystem.Update(_ecsWorld);
|
||||
|
||||
// Find camera
|
||||
Camera* primaryCamera = null;
|
||||
Matrix primaryCameraTransform = default;
|
||||
RenderTargetGroup renderTarget = null;
|
||||
|
||||
for (var (entity, transform, camera) in _ecsWorld.Enumerate<TransformComponent, CameraComponent>())
|
||||
{
|
||||
if (camera.Primary)// && camera.RenderTarget != null)
|
||||
{
|
||||
primaryCamera = &camera.Camera;
|
||||
primaryCameraTransform = transform.WorldTransform;
|
||||
renderTarget = camera.RenderTarget..AddRef();
|
||||
}
|
||||
}
|
||||
|
||||
// 3D render
|
||||
Renderer.BeginScene(*primaryCamera, primaryCameraTransform, renderTarget, _compositeTarget);
|
||||
|
||||
for (var (entity, transform, mesh, meshRenderer) in _ecsWorld.Enumerate<TransformComponent, MeshComponent, MeshRendererComponent>())
|
||||
{
|
||||
Renderer.Submit(mesh.Mesh, meshRenderer.Material, entity, transform.WorldTransform);
|
||||
}
|
||||
|
||||
for (var (entity, transform, light) in _ecsWorld.Enumerate<TransformComponent, LightComponent>())
|
||||
{
|
||||
Renderer.Submit(light.SceneLight, transform.WorldTransform);
|
||||
}
|
||||
|
||||
Renderer.EndScene();
|
||||
|
||||
renderTarget.ReleaseRef();
|
||||
|
||||
// TODO: alphablending (handle in Renderer2D)
|
||||
// TODO: 2D-Postprocessing requires rendering into separate target instead of directly into compositeTarget
|
||||
|
||||
RenderCommand.SetRenderTargetGroup(_compositeTarget);
|
||||
RenderCommand.BindRenderTargets();
|
||||
|
||||
// Sprite renderer
|
||||
Renderer2D.BeginScene(*primaryCamera, primaryCameraTransform, .BackToFront);
|
||||
|
||||
for (var (entity, transform, sprite) in _ecsWorld.Enumerate<TransformComponent, SpriterRendererComponent>())
|
||||
{
|
||||
Renderer2D.DrawSprite(transform.WorldTransform, sprite, entity.Index);
|
||||
}
|
||||
|
||||
Renderer2D.EndScene();
|
||||
|
||||
// Gamma correct composit target and draw it into viewport
|
||||
{
|
||||
RenderCommand.UnbindRenderTargets();
|
||||
RenderCommand.SetRenderTargetGroup(finalTarget, false);
|
||||
RenderCommand.BindRenderTargets();
|
||||
|
||||
_gammaCorrectEffect.SetTexture("Texture", _compositeTarget, 0);
|
||||
// TODO: iiihhh
|
||||
_gammaCorrectEffect.Bind(Application.Get().Window.Context);
|
||||
|
||||
FullscreenQuad.Draw();
|
||||
}
|
||||
|
||||
finalTarget.ReleaseRef();
|
||||
|
||||
|
||||
/*Debug.Profiler.ProfileRendererFunction!();
|
||||
|
||||
finalTarget.AddRef();
|
||||
|
||||
TransformSystem.Update(_ecsWorld);
|
||||
|
||||
// Run scripts
|
||||
for (var (entity, script) in _ecsWorld.Enumerate<NativeScriptComponent>())
|
||||
{
|
||||
if (script.Instance == null)
|
||||
{
|
||||
script.Instance = script.InstantiateFunction();
|
||||
script.Instance._entity = Entity(entity, this);
|
||||
script.Instance.[Friend]OnCreate();
|
||||
}
|
||||
|
||||
script.Instance.[Friend]OnUpdate(gameTime);
|
||||
}
|
||||
|
||||
// Find camera
|
||||
Camera* primaryCamera = null;
|
||||
Matrix primaryCameraTransform = default;
|
||||
RenderTargetGroup renderTarget = null;
|
||||
|
||||
for (var (entity, transform, camera) in _ecsWorld.Enumerate<TransformComponent, CameraComponent>())
|
||||
{
|
||||
if (camera.Primary)// && camera.RenderTarget != null)
|
||||
{
|
||||
primaryCamera = &camera.Camera;
|
||||
primaryCameraTransform = transform.WorldTransform;
|
||||
//renderTarget = camera.RenderTarget..AddRef();
|
||||
}
|
||||
}
|
||||
|
||||
if (primaryCamera != null)
|
||||
{
|
||||
// 3D render
|
||||
Renderer.BeginScene(*primaryCamera, primaryCameraTransform, _compositeTarget, finalTarget);
|
||||
|
||||
for (var (entity, transform, mesh, meshRenderer) in _ecsWorld.Enumerate<TransformComponent, MeshComponent, MeshRendererComponent>())
|
||||
{
|
||||
Renderer.Submit(mesh.Mesh, meshRenderer.Material, entity, transform.WorldTransform);
|
||||
}
|
||||
|
||||
for (var (entity, transform, light) in _ecsWorld.Enumerate<TransformComponent, LightComponent>())
|
||||
{
|
||||
Renderer.Submit(light.SceneLight, transform.WorldTransform);
|
||||
}
|
||||
|
||||
Renderer.EndScene();
|
||||
|
||||
// TODO: alphablending (handle in Renderer2D)
|
||||
// TODO: 2D-Postprocessing requires rendering into separate target instead of directly into compositeTarget
|
||||
|
||||
RenderCommand.SetRenderTargetGroup(_compositeTarget);
|
||||
RenderCommand.BindRenderTargets();
|
||||
|
||||
// Sprite renderer
|
||||
Renderer2D.BeginScene(*primaryCamera, primaryCameraTransform, .BackToFront);
|
||||
|
||||
for (var (entity, transform, sprite) in _ecsWorld.Enumerate<TransformComponent, SpriterRendererComponent>())
|
||||
{
|
||||
Renderer2D.DrawSprite(transform.WorldTransform, sprite, entity.Index);
|
||||
}
|
||||
|
||||
Renderer2D.EndScene();
|
||||
|
||||
// Gamma correct composit target and draw it into viewport
|
||||
{
|
||||
RenderCommand.UnbindRenderTargets();
|
||||
RenderCommand.SetRenderTargetGroup(finalTarget, false);
|
||||
RenderCommand.BindRenderTargets();
|
||||
|
||||
_gammaCorrectEffect.SetTexture("Texture", _compositeTarget, 0);
|
||||
// TODO: iiihhh
|
||||
_gammaCorrectEffect.Bind(Application.Get().Window.Context);
|
||||
|
||||
FullscreenQuad.Draw();
|
||||
}
|
||||
}
|
||||
|
||||
finalTarget.ReleaseRef();*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
Debug.Profiler.ProfileRendererFunction!();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user