aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics/Gal/OpenGL/OglRenderer.cs
blob: 1ff8c7ad5d6337633ae5c85bbfb312acbd1e865f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
using System;
using System.Collections.Concurrent;

namespace Ryujinx.Graphics.Gal.OpenGL
{
    public class OglRenderer : IGalRenderer
    {
        public IGalConstBuffer Buffer { get; private set; }

        public IGalRenderTarget RenderTarget { get; private set; }

        public IGalRasterizer Rasterizer { get; private set; }

        public IGalShader Shader { get; private set; }

        public IGalPipeline Pipeline { get; private set; }

        public IGalTexture Texture { get; private set; }

        private ConcurrentQueue<Action> _actionsQueue;

        public OglRenderer()
        {
            Buffer = new OglConstBuffer();

            Texture = new OglTexture();

            RenderTarget = new OglRenderTarget(Texture as OglTexture);

            Rasterizer = new OglRasterizer();

            Shader = new OglShader(Buffer as OglConstBuffer);

            Pipeline = new OglPipeline(
                Buffer       as OglConstBuffer,
                RenderTarget as OglRenderTarget,
                Rasterizer   as OglRasterizer,
                Shader       as OglShader);

            _actionsQueue = new ConcurrentQueue<Action>();
        }

        public void QueueAction(Action actionMthd)
        {
            _actionsQueue.Enqueue(actionMthd);
        }

        public void RunActions()
        {
            int count = _actionsQueue.Count;

            while (count-- > 0 && _actionsQueue.TryDequeue(out Action renderAction))
            {
                renderAction();
            }
        }
    }
}