d3drm: Minor cleanup and improvments (#145)

This commit is contained in:
Anders Jenbo 2025-05-22 00:46:42 +02:00 committed by GitHub
parent 046cd0c7e9
commit 92ee03ec4d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 30 additions and 25 deletions

View File

@ -195,7 +195,7 @@ struct IDirect3DRMMesh : public IDirect3DRMVisual {
virtual HRESULT GetGroupTexture(int groupIndex, LPDIRECT3DRMTEXTURE* texture) = 0; virtual HRESULT GetGroupTexture(int groupIndex, LPDIRECT3DRMTEXTURE* texture) = 0;
virtual D3DRMMAPPING GetGroupMapping(int groupIndex) = 0; virtual D3DRMMAPPING GetGroupMapping(int groupIndex) = 0;
virtual D3DRMRENDERQUALITY GetGroupQuality(int groupIndex) = 0; virtual D3DRMRENDERQUALITY GetGroupQuality(int groupIndex) = 0;
virtual HRESULT GetGroupColor(D3DRMGROUPINDEX index) = 0; virtual D3DCOLOR GetGroupColor(D3DRMGROUPINDEX index) = 0;
virtual HRESULT GetVertices(int groupIndex, int startIndex, int count, D3DRMVERTEX* vertices) = 0; virtual HRESULT GetVertices(int groupIndex, int startIndex, int count, D3DRMVERTEX* vertices) = 0;
}; };
@ -308,13 +308,13 @@ struct IDirect3DRMDevice : virtual public IDirect3DRMObject {
virtual DWORD GetWidth() = 0; virtual DWORD GetWidth() = 0;
virtual DWORD GetHeight() = 0; virtual DWORD GetHeight() = 0;
virtual HRESULT SetBufferCount(int count) = 0; virtual HRESULT SetBufferCount(int count) = 0;
virtual HRESULT GetBufferCount() = 0; virtual DWORD GetBufferCount() = 0;
virtual HRESULT SetShades(DWORD shadeCount) = 0; virtual HRESULT SetShades(DWORD shadeCount) = 0;
virtual HRESULT GetShades() = 0; virtual HRESULT GetShades() = 0;
virtual HRESULT SetQuality(D3DRMRENDERQUALITY quality) = 0; virtual HRESULT SetQuality(D3DRMRENDERQUALITY quality) = 0;
virtual D3DRMRENDERQUALITY GetQuality() = 0; virtual D3DRMRENDERQUALITY GetQuality() = 0;
virtual HRESULT SetDither(int dither) = 0; virtual HRESULT SetDither(int dither) = 0;
virtual HRESULT GetDither() = 0; virtual BOOL GetDither() = 0;
virtual HRESULT SetTextureQuality(D3DRMTEXTUREQUALITY quality) = 0; virtual HRESULT SetTextureQuality(D3DRMTEXTUREQUALITY quality) = 0;
virtual D3DRMTEXTUREQUALITY GetTextureQuality() = 0; virtual D3DRMTEXTUREQUALITY GetTextureQuality() = 0;
virtual HRESULT SetRenderMode(D3DRMRENDERMODE mode) = 0; virtual HRESULT SetRenderMode(D3DRMRENDERMODE mode) = 0;

View File

@ -11,13 +11,13 @@ struct Direct3DRMDevice2Impl : public Direct3DRMObjectBase<IDirect3DRMDevice2> {
DWORD GetWidth() override; DWORD GetWidth() override;
DWORD GetHeight() override; DWORD GetHeight() override;
HRESULT SetBufferCount(int count) override; HRESULT SetBufferCount(int count) override;
HRESULT GetBufferCount() override; DWORD GetBufferCount() override;
HRESULT SetShades(DWORD shadeCount) override; HRESULT SetShades(DWORD shadeCount) override;
HRESULT GetShades() override; HRESULT GetShades() override;
HRESULT SetQuality(D3DRMRENDERQUALITY quality) override; HRESULT SetQuality(D3DRMRENDERQUALITY quality) override;
D3DRMRENDERQUALITY GetQuality() override; D3DRMRENDERQUALITY GetQuality() override;
HRESULT SetDither(int dither) override; HRESULT SetDither(int dither) override;
HRESULT GetDither() override; BOOL GetDither() override;
HRESULT SetTextureQuality(D3DRMTEXTUREQUALITY quality) override; HRESULT SetTextureQuality(D3DRMTEXTUREQUALITY quality) override;
D3DRMTEXTUREQUALITY GetTextureQuality() override; D3DRMTEXTUREQUALITY GetTextureQuality() override;
HRESULT SetRenderMode(D3DRMRENDERMODE mode) override; HRESULT SetRenderMode(D3DRMRENDERMODE mode) override;

View File

@ -42,6 +42,7 @@ struct Direct3DRMViewportImpl : public Direct3DRMObjectBase<IDirect3DRMViewport>
private: private:
void FreeDeviceResources(); void FreeDeviceResources();
int m_vertexBufferCount = 0;
int m_vertexCount; int m_vertexCount;
bool m_updated = false; bool m_updated = false;
DWORD m_width; DWORD m_width;
@ -51,6 +52,6 @@ private:
SDL_GPUGraphicsPipeline* m_pipeline; SDL_GPUGraphicsPipeline* m_pipeline;
SDL_GPUTexture* m_transferTexture; SDL_GPUTexture* m_transferTexture;
SDL_GPUTransferBuffer* m_downloadTransferBuffer; SDL_GPUTransferBuffer* m_downloadTransferBuffer;
SDL_GPUBuffer* m_vertexBuffer; SDL_GPUBuffer* m_vertexBuffer = nullptr;
SDL_Surface* m_renderedImage = nullptr; SDL_Surface* m_renderedImage = nullptr;
}; };

View File

@ -28,7 +28,3 @@
do { \ do { \
SDL_LogTrace(LOG_CATEGORY_MINIWIN, __VA_ARGS__); \ SDL_LogTrace(LOG_CATEGORY_MINIWIN, __VA_ARGS__); \
} while (0) } while (0)
static SDL_Rect ConvertRect(const RECT* r)
{
return {r->left, r->top, r->right - r->left, r->bottom - r->top};
}

View File

@ -266,7 +266,7 @@ struct Direct3DRMImpl : virtual public IDirect3DRM2 {
textureInfo.num_levels = 1; textureInfo.num_levels = 1;
textureInfo.usage = SDL_GPU_TEXTUREUSAGE_COLOR_TARGET; textureInfo.usage = SDL_GPU_TEXTUREUSAGE_COLOR_TARGET;
SDL_GPUTexture* transferTexture = SDL_CreateGPUTexture(device->m_device, &textureInfo); SDL_GPUTexture* transferTexture = SDL_CreateGPUTexture(device->m_device, &textureInfo);
if (transferTexture == NULL) { if (!transferTexture) {
return DDERR_GENERIC; return DDERR_GENERIC;
} }

View File

@ -41,10 +41,10 @@ HRESULT Direct3DRMDevice2Impl::SetBufferCount(int count)
return DD_OK; return DD_OK;
} }
HRESULT Direct3DRMDevice2Impl::GetBufferCount() DWORD Direct3DRMDevice2Impl::GetBufferCount()
{ {
MINIWIN_NOT_IMPLEMENTED(); MINIWIN_NOT_IMPLEMENTED();
return DD_OK; return 2;
} }
HRESULT Direct3DRMDevice2Impl::SetShades(DWORD shadeCount) HRESULT Direct3DRMDevice2Impl::SetShades(DWORD shadeCount)
@ -77,10 +77,10 @@ HRESULT Direct3DRMDevice2Impl::SetDither(int dither)
return DD_OK; return DD_OK;
} }
HRESULT Direct3DRMDevice2Impl::GetDither() BOOL Direct3DRMDevice2Impl::GetDither()
{ {
MINIWIN_NOT_IMPLEMENTED(); MINIWIN_NOT_IMPLEMENTED();
return DD_OK; return false;
} }
HRESULT Direct3DRMDevice2Impl::SetTextureQuality(D3DRMTEXTUREQUALITY quality) HRESULT Direct3DRMDevice2Impl::SetTextureQuality(D3DRMTEXTUREQUALITY quality)

View File

@ -30,19 +30,25 @@ Direct3DRMViewportImpl::~Direct3DRMViewportImpl()
void Direct3DRMViewportImpl::Update() void Direct3DRMViewportImpl::Update()
{ {
m_vertexCount = 3; int newVertexCount = 3;
SDL_GPUBufferCreateInfo bufferCreateInfo = {}; if (newVertexCount > m_vertexBufferCount) {
bufferCreateInfo.usage = SDL_GPU_BUFFERUSAGE_VERTEX; if (m_vertexBuffer) {
bufferCreateInfo.size = static_cast<Uint32>(sizeof(PositionColorVertex) * m_vertexCount); SDL_ReleaseGPUBuffer(m_device, m_vertexBuffer);
}
SDL_GPUBufferCreateInfo bufferCreateInfo = {};
bufferCreateInfo.usage = SDL_GPU_BUFFERUSAGE_VERTEX;
bufferCreateInfo.size = static_cast<Uint32>(sizeof(PositionColorVertex) * newVertexCount);
m_vertexBuffer = SDL_CreateGPUBuffer(m_device, &bufferCreateInfo);
m_vertexBufferCount = newVertexCount;
}
m_vertexBuffer = SDL_CreateGPUBuffer(m_device, &bufferCreateInfo); m_vertexCount = newVertexCount;
MINIWIN_NOT_IMPLEMENTED(); MINIWIN_NOT_IMPLEMENTED();
SDL_GPUTransferBufferCreateInfo transferCreateInfo = {}; SDL_GPUTransferBufferCreateInfo transferCreateInfo = {};
transferCreateInfo.usage = SDL_GPU_TRANSFERBUFFERUSAGE_UPLOAD; transferCreateInfo.usage = SDL_GPU_TRANSFERBUFFERUSAGE_UPLOAD;
transferCreateInfo.size = static_cast<Uint32>(sizeof(PositionColorVertex) * m_vertexCount); transferCreateInfo.size = static_cast<Uint32>(sizeof(PositionColorVertex) * m_vertexCount);
SDL_GPUTransferBuffer* transferBuffer = SDL_CreateGPUTransferBuffer(m_device, &transferCreateInfo); SDL_GPUTransferBuffer* transferBuffer = SDL_CreateGPUTransferBuffer(m_device, &transferCreateInfo);
PositionColorVertex* transferData = PositionColorVertex* transferData =
@ -118,7 +124,7 @@ HRESULT Direct3DRMViewportImpl::Render(IDirect3DRMFrame* group)
SDL_DownloadFromGPUTexture(copyPass, &region, &transferInfo); SDL_DownloadFromGPUTexture(copyPass, &region, &transferInfo);
SDL_EndGPUCopyPass(copyPass); SDL_EndGPUCopyPass(copyPass);
SDL_GPUFence* fence = SDL_SubmitGPUCommandBufferAndAcquireFence(cmdbuf); SDL_GPUFence* fence = SDL_SubmitGPUCommandBufferAndAcquireFence(cmdbuf);
if (!cmdbuf || !SDL_WaitForGPUFences(m_device, true, &fence, 1)) { if (!SDL_WaitForGPUFences(m_device, true, &fence, 1)) {
return DDERR_GENERIC; return DDERR_GENERIC;
} }
SDL_ReleaseGPUFence(m_device, fence); SDL_ReleaseGPUFence(m_device, fence);

View File

@ -50,6 +50,11 @@ void DirectDrawSurfaceImpl::SetAutoFlip(bool enabled)
m_autoFlip = enabled; m_autoFlip = enabled;
} }
static SDL_Rect ConvertRect(const RECT* r)
{
return {r->left, r->top, r->right - r->left, r->bottom - r->top};
}
HRESULT DirectDrawSurfaceImpl::Blt( HRESULT DirectDrawSurfaceImpl::Blt(
LPRECT lpDestRect, LPRECT lpDestRect,
LPDIRECTDRAWSURFACE lpDDSrcSurface, LPDIRECTDRAWSURFACE lpDDSrcSurface,
@ -243,9 +248,6 @@ HRESULT DirectDrawSurfaceImpl::SetClipper(LPDIRECTDRAWCLIPPER lpDDClipper)
HRESULT DirectDrawSurfaceImpl::SetColorKey(DDColorKeyFlags dwFlags, LPDDCOLORKEY lpDDColorKey) HRESULT DirectDrawSurfaceImpl::SetColorKey(DDColorKeyFlags dwFlags, LPDDCOLORKEY lpDDColorKey)
{ {
if (!lpDDColorKey) {
return DDERR_INVALIDPARAMS;
}
if (lpDDColorKey->dwColorSpaceLowValue != lpDDColorKey->dwColorSpaceHighValue) { if (lpDDColorKey->dwColorSpaceLowValue != lpDDColorKey->dwColorSpaceHighValue) {
MINIWIN_NOT_IMPLEMENTED(); MINIWIN_NOT_IMPLEMENTED();
} }