Mesen2/Core/Shared/Interfaces/IRenderingDevice.h

50 lines
No EOL
1,000 B
C++

#pragma once
#include "pch.h"
#include "Shared/SettingTypes.h"
struct RenderedFrame;
struct RenderSurfaceInfo
{
uint32_t* Buffer = nullptr;
uint32_t Width = 0;
uint32_t Height = 0;
bool IsDirty = true;
bool UpdateSize(uint32_t width, uint32_t height)
{
if(Width != width || Height != height) {
delete[] Buffer;
Buffer = new uint32_t[height * width];
Width = width;
Height = height;
Clear();
return true;
}
return false;
}
void Clear()
{
memset(Buffer, 0, Width * Height * sizeof(uint32_t));
IsDirty = true;
}
~RenderSurfaceInfo()
{
delete[] Buffer;
}
};
class IRenderingDevice
{
public:
virtual ~IRenderingDevice() {}
virtual void UpdateFrame(RenderedFrame& frame) = 0;
virtual void ClearFrame() = 0;
virtual void Render(RenderSurfaceInfo& emuHud, RenderSurfaceInfo& scriptHud) = 0;
virtual void Reset() = 0;
virtual void OnRendererThreadStarted() {}
virtual void SetExclusiveFullscreenMode(bool fullscreen, void* windowHandle) = 0;
};