7fea26e97e
* Introduce new IGALCommand<T> interface and use it * Remove use of reflection on GAL multithreading * Unmanaged constraint
28 lines
1 KiB
C#
28 lines
1 KiB
C#
using Ryujinx.Graphics.GAL.Multithreading.Model;
|
|
using Ryujinx.Graphics.GAL.Multithreading.Resources;
|
|
using System;
|
|
|
|
namespace Ryujinx.Graphics.GAL.Multithreading.Commands.Window
|
|
{
|
|
struct WindowPresentCommand : IGALCommand, IGALCommand<WindowPresentCommand>
|
|
{
|
|
public CommandType CommandType => CommandType.WindowPresent;
|
|
private TableRef<ThreadedTexture> _texture;
|
|
private ImageCrop _crop;
|
|
private TableRef<Action> _swapBuffersCallback;
|
|
|
|
public void Set(TableRef<ThreadedTexture> texture, ImageCrop crop, TableRef<Action> swapBuffersCallback)
|
|
{
|
|
_texture = texture;
|
|
_crop = crop;
|
|
_swapBuffersCallback = swapBuffersCallback;
|
|
}
|
|
|
|
public static void Run(ref WindowPresentCommand command, ThreadedRenderer threaded, IRenderer renderer)
|
|
{
|
|
threaded.SignalFrame();
|
|
renderer.Window.Present(command._texture.Get(threaded)?.Base, command._crop, command._swapBuffersCallback.Get(threaded));
|
|
}
|
|
}
|
|
}
|