RefCounted GraphicsContext

This commit is contained in:
Simon Lübeß
2021-02-07 13:04:18 +01:00
parent c1fc1c3fd8
commit 54f2c0fcec
11 changed files with 36 additions and 32 deletions
@@ -31,7 +31,7 @@ namespace GlitchyEngine
private bool _isVSync = true; private bool _isVSync = true;
private GraphicsContext _graphicsContext ~ delete _; private GraphicsContext _graphicsContext ~ _?.ReleaseRef();
public override GraphicsContext Context => _graphicsContext; public override GraphicsContext Context => _graphicsContext;
+2 -2
View File
@@ -122,7 +122,7 @@ namespace GlitchyEngine.Renderer
/// Represents a buffer containing binary data on the GPU. /// Represents a buffer containing binary data on the GPU.
public class Buffer : RefCounted public class Buffer : RefCounted
{ {
internal GraphicsContext _context; internal GraphicsContext _context ~ _?.ReleaseRef();
protected BufferDescription _description; protected BufferDescription _description;
@@ -132,7 +132,7 @@ namespace GlitchyEngine.Renderer
protected this(GraphicsContext context) protected this(GraphicsContext context)
{ {
_context = context; _context = context..AddRef();
} }
/** /**
+1 -1
View File
@@ -4,7 +4,7 @@ namespace GlitchyEngine.Renderer
{ {
public class Effect : RefCounted public class Effect : RefCounted
{ {
protected GraphicsContext _context; protected GraphicsContext _context; // Todo:???
internal VertexShader _vs ~ _?.ReleaseRef(); internal VertexShader _vs ~ _?.ReleaseRef();
internal PixelShader _ps ~ _?.ReleaseRef(); internal PixelShader _ps ~ _?.ReleaseRef();
@@ -5,7 +5,7 @@ namespace GlitchyEngine.Renderer
{ {
public class GeometryBinding public class GeometryBinding
{ {
internal GraphicsContext _context; internal GraphicsContext _context ~ _?.ReleaseRef();
internal List<VertexBufferBinding> _vertexBuffers = new .() ~ delete _; internal List<VertexBufferBinding> _vertexBuffers = new .() ~ delete _;
internal IndexBuffer _indexBuffer; internal IndexBuffer _indexBuffer;
@@ -16,7 +16,7 @@ namespace GlitchyEngine.Renderer
public this(GraphicsContext context) public this(GraphicsContext context)
{ {
_context = context; _context = context..AddRef();
} }
public VertexBufferBinding GetVertexBuffer(uint32 slot) public VertexBufferBinding GetVertexBuffer(uint32 slot)
@@ -5,7 +5,7 @@ namespace GlitchyEngine.Renderer
{ {
public class RenderTarget; public class RenderTarget;
public class GraphicsContext public class GraphicsContext : RefCounted
{ {
private RasterizerState _currentRasterizerState; private RasterizerState _currentRasterizerState;
+1 -1
View File
@@ -9,7 +9,7 @@ namespace GlitchyEngine.Renderer
public this(Effect effect) public this(Effect effect)
{ {
_effect = effect; _effect = effect..AddRef();
} }
// public void Set(String name, VALUE)... // public void Set(String name, VALUE)...
@@ -51,7 +51,7 @@ namespace GlitchyEngine.Renderer
public class RasterizerState public class RasterizerState
{ {
internal GraphicsContext _context; internal GraphicsContext _context ~ _?.ReleaseRef();
private RasterizerStateDescription _description; private RasterizerStateDescription _description;
public GraphicsContext Context => _context; public GraphicsContext Context => _context;
@@ -59,7 +59,7 @@ namespace GlitchyEngine.Renderer
protected this(GraphicsContext context) protected this(GraphicsContext context)
{ {
_context = context; _context = context..AddRef();
} }
public extern this(GraphicsContext context, RasterizerStateDescription description); public extern this(GraphicsContext context, RasterizerStateDescription description);
+2 -2
View File
@@ -14,7 +14,7 @@ namespace GlitchyEngine.Renderer
public Matrix Transform; public Matrix Transform;
} }
static GraphicsContext _context; static GraphicsContext _context ~ _?.ReleaseRef();
static Buffer<SceneConstants> _sceneConstants ~ _?.ReleaseRef(); static Buffer<SceneConstants> _sceneConstants ~ _?.ReleaseRef();
@@ -22,7 +22,7 @@ namespace GlitchyEngine.Renderer
public static void Init(GraphicsContext context) public static void Init(GraphicsContext context)
{ {
_context = context; _context = context..AddRef();
_sceneConstants = new Buffer<SceneConstants>(_context, .(0, .Constant, .Dynamic, .Write)); _sceneConstants = new Buffer<SceneConstants>(_context, .(0, .Constant, .Dynamic, .Write));
_sceneConstants.Update(); _sceneConstants.Update();
+2 -2
View File
@@ -20,7 +20,7 @@ namespace GlitchyEngine.Renderer
public abstract class Shader : RefCounted public abstract class Shader : RefCounted
{ {
protected GraphicsContext _context; protected GraphicsContext _context ~ _?.ReleaseRef();
protected BufferCollection _buffers ~ delete _;//:append _; protected BufferCollection _buffers ~ delete _;//:append _;
@@ -35,7 +35,7 @@ namespace GlitchyEngine.Renderer
//let buffers = new BufferCollection(); //let buffers = new BufferCollection();
_buffers = new BufferCollection(); _buffers = new BufferCollection();
_context = context; _context = context..AddRef();
CompileFromSource(source, entryPoint); CompileFromSource(source, entryPoint);
} }
+2 -2
View File
@@ -75,7 +75,7 @@ namespace GlitchyEngine.Renderer
public class VertexLayout public class VertexLayout
{ {
private GraphicsContext _context; private GraphicsContext _context ~ _?.ReleaseRef();
private VertexElement[] _elements ~ delete _; private VertexElement[] _elements ~ delete _;
@@ -87,7 +87,7 @@ namespace GlitchyEngine.Renderer
/// Takes ownership of ownElements! /// Takes ownership of ownElements!
public this(GraphicsContext context, VertexElement[] ownElements, VertexShader vertexShader) public this(GraphicsContext context, VertexElement[] ownElements, VertexShader vertexShader)
{ {
_context = context; _context = context..AddRef();
_elements = ownElements; _elements = ownElements;
CreateNativeLayout(); CreateNativeLayout();
+20 -16
View File
@@ -55,6 +55,8 @@ namespace Sandbox
ConstantBuffer _cBuffer ~ _?.ReleaseRef(); ConstantBuffer _cBuffer ~ _?.ReleaseRef();
GraphicsContext _context ~ _?.ReleaseRef();
private Vector3 CircleCoord(float angle) private Vector3 CircleCoord(float angle)
{ {
return .(Math.Cos(angle), Math.Sin(angle), 0); return .(Math.Cos(angle), Math.Sin(angle), 0);
@@ -63,21 +65,23 @@ namespace Sandbox
[AllowAppend] [AllowAppend]
public this() : base("Example") public this() : base("Example")
{ {
_context = Application.Get().Window.Context..AddRef();
{ {
_effect = new Effect(); _effect = new Effect();
let vs = Shader.FromFile!<VertexShader>(Application.Get().Window.Context, "content\\basicShader.hlsl", "VS"); let vs = Shader.FromFile!<VertexShader>(_context, "content\\basicShader.hlsl", "VS");
_effect.VertexShader = vs; _effect.VertexShader = vs;
vs.ReleaseRef(); vs.ReleaseRef();
let ps = Shader.FromFile!<PixelShader>(Application.Get().Window.Context, "content\\basicShader.hlsl", "PS"); let ps = Shader.FromFile!<PixelShader>(_context, "content\\basicShader.hlsl", "PS");
_effect.PixelShader = ps; _effect.PixelShader = ps;
ps.ReleaseRef(); ps.ReleaseRef();
} }
// Create Input Layout // Create Input Layout
_vertexLayout = new VertexLayout(Application.Get().Window.Context, new .( _vertexLayout = new VertexLayout(_context, new .(
VertexElement(.R32G32B32_Float, "POSITION"), VertexElement(.R32G32B32_Float, "POSITION"),
VertexElement(.R8G8B8A8_UNorm, "COLOR"), VertexElement(.R8G8B8A8_UNorm, "COLOR"),
), _effect.VertexShader); ), _effect.VertexShader);
@@ -88,7 +92,7 @@ namespace Sandbox
// Create hexagon // Create hexagon
{ {
_geometryBinding = new GeometryBinding(Application.Get().Window.Context); _geometryBinding = new GeometryBinding(_context);
_geometryBinding.SetPrimitiveTopology(.TriangleList); _geometryBinding.SetPrimitiveTopology(.TriangleList);
_geometryBinding.SetVertexLayout(_vertexLayout); _geometryBinding.SetVertexLayout(_vertexLayout);
@@ -103,7 +107,7 @@ namespace Sandbox
VertexColor(CircleCoord(-pO3), Color(255, 0,255)), VertexColor(CircleCoord(-pO3), Color(255, 0,255)),
); );
_vertexBuffer = new VertexBuffer(Application.Get().Window.Context, typeof(VertexColor), (.)vertices.Count, .Immutable); _vertexBuffer = new VertexBuffer(_context, typeof(VertexColor), (.)vertices.Count, .Immutable);
_vertexBuffer.SetData(vertices); _vertexBuffer.SetData(vertices);
_geometryBinding.SetVertexBufferSlot(_vertexBuffer, 0); _geometryBinding.SetVertexBufferSlot(_vertexBuffer, 0);
@@ -115,14 +119,14 @@ namespace Sandbox
0, 5, 6, 0, 5, 6,
0, 6, 1); 0, 6, 1);
_indexBuffer = new IndexBuffer(Application.Get().Window.Context, (.)indices.Count, .Immutable); _indexBuffer = new IndexBuffer(_context, (.)indices.Count, .Immutable);
_indexBuffer.SetData(indices); _indexBuffer.SetData(indices);
_geometryBinding.SetIndexBuffer(_indexBuffer); _geometryBinding.SetIndexBuffer(_indexBuffer);
} }
// Create Quad // Create Quad
{ {
_quadGeometryBinding = new GeometryBinding(Application.Get().Window.Context); _quadGeometryBinding = new GeometryBinding(_context);
_quadGeometryBinding.SetPrimitiveTopology(.TriangleList); _quadGeometryBinding.SetPrimitiveTopology(.TriangleList);
_quadGeometryBinding.SetVertexLayout(_vertexLayout); _quadGeometryBinding.SetVertexLayout(_vertexLayout);
@@ -133,7 +137,7 @@ namespace Sandbox
VertexColor(Vector3(0.75f, 0.75f, 0), Color.White), VertexColor(Vector3(0.75f, 0.75f, 0), Color.White),
); );
_quadVertexBuffer = new VertexBuffer(Application.Get().Window.Context, typeof(VertexColor), (.)vertices.Count, .Immutable); _quadVertexBuffer = new VertexBuffer(_context, typeof(VertexColor), (.)vertices.Count, .Immutable);
_quadVertexBuffer.SetData(vertices); _quadVertexBuffer.SetData(vertices);
_quadGeometryBinding.SetVertexBufferSlot(_quadVertexBuffer, 0); _quadGeometryBinding.SetVertexBufferSlot(_quadVertexBuffer, 0);
@@ -141,14 +145,14 @@ namespace Sandbox
0, 1, 2, 0, 1, 2,
2, 3, 0); 2, 3, 0);
_quadIndexBuffer = new IndexBuffer(Application.Get().Window.Context, (.)indices.Count, .Immutable); _quadIndexBuffer = new IndexBuffer(_context, (.)indices.Count, .Immutable);
_quadIndexBuffer.SetData(indices); _quadIndexBuffer.SetData(indices);
_quadGeometryBinding.SetIndexBuffer(_quadIndexBuffer); _quadGeometryBinding.SetIndexBuffer(_quadIndexBuffer);
} }
// Create rasterizer state // Create rasterizer state
GlitchyEngine.Renderer.RasterizerStateDescription rsDesc = .(.Solid, .Back, true); GlitchyEngine.Renderer.RasterizerStateDescription rsDesc = .(.Solid, .Back, true);
_rasterizerState = new RasterizerState(Application.Get().Window.Context, rsDesc); _rasterizerState = new RasterizerState(_context, rsDesc);
// Camera // Camera
_camera = new OrthographicCamera(); _camera = new OrthographicCamera();
@@ -192,8 +196,8 @@ namespace Sandbox
_camera.Position += .(movement, 0); _camera.Position += .(movement, 0);
_camera.Width = Application.Get().Window.Context.SwapChain.BackbufferViewport.Width / 256; _camera.Width = _context.SwapChain.BackbufferViewport.Width / 256;
_camera.Height = Application.Get().Window.Context.SwapChain.BackbufferViewport.Height / 256; _camera.Height = _context.SwapChain.BackbufferViewport.Height / 256;
//_camera.AspectRatio = Application.Get().Window.Context.SwapChain.BackbufferViewport.Width / //_camera.AspectRatio = Application.Get().Window.Context.SwapChain.BackbufferViewport.Width /
// Application.Get().Window.Context.SwapChain.BackbufferViewport.Height; // Application.Get().Window.Context.SwapChain.BackbufferViewport.Height;
@@ -203,12 +207,12 @@ namespace Sandbox
RenderCommand.Clear(null, .(0.2f, 0.2f, 0.2f)); RenderCommand.Clear(null, .(0.2f, 0.2f, 0.2f));
// Draw test geometry // Draw test geometry
Application.Get().Window.Context.SetRenderTarget(null); _context.SetRenderTarget(null);
Application.Get().Window.Context.BindRenderTargets(); _context.BindRenderTargets();
Application.Get().Window.Context.SetRasterizerState(_rasterizerState); _context.SetRasterizerState(_rasterizerState);
Application.Get().Window.Context.SetViewport(Application.Get().Window.Context.SwapChain.BackbufferViewport); _context.SetViewport(_context.SwapChain.BackbufferViewport);
Renderer.BeginScene(_camera); Renderer.BeginScene(_camera);