Stefan Dösinger : ddraw: Implement IDirectDraw7:: GetFourCCCodes.
Alexandre Julliard
julliard at winehq.org
Tue Aug 19 08:46:29 CDT 2008
Module: wine
Branch: master
Commit: e10302d95207f5a01bf3e0a2810d1671b49eed57
URL: http://source.winehq.org/git/wine.git/?a=commit;h=e10302d95207f5a01bf3e0a2810d1671b49eed57
Author: Stefan Dösinger <stefan at codeweavers.com>
Date: Wed Jul 30 15:55:20 2008 -0500
ddraw: Implement IDirectDraw7::GetFourCCCodes.
---
dlls/ddraw/ddraw.c | 37 ++++++++++++++++++++++++++++++++++---
1 files changed, 34 insertions(+), 3 deletions(-)
diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c
index 31dfd1d..8eac776 100644
--- a/dlls/ddraw/ddraw.c
+++ b/dlls/ddraw/ddraw.c
@@ -879,9 +879,40 @@ IDirectDrawImpl_GetFourCCCodes(IDirectDraw7 *iface,
DWORD *NumCodes, DWORD *Codes)
{
ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw7, iface);
- FIXME("(%p)->(%p, %p): Stub!\n", This, NumCodes, Codes);
+ WINED3DFORMAT formats[] = {
+ WINED3DFMT_YUY2, WINED3DFMT_UYVY,
+ WINED3DFMT_DXT1, WINED3DFMT_DXT2, WINED3DFMT_DXT3, WINED3DFMT_DXT4, WINED3DFMT_DXT5,
+ };
+ DWORD count = 0, i, outsize;
+ HRESULT hr;
+ WINED3DDISPLAYMODE d3ddm;
+ TRACE("(%p)->(%p, %p)\n", This, NumCodes, Codes);
+
+ IWineD3DDevice_GetDisplayMode(This->wineD3DDevice,
+ 0 /* swapchain 0 */,
+ &d3ddm);
+
+ outsize = NumCodes && Codes ? *NumCodes : 0;
- if(NumCodes) *NumCodes = 0;
+ for(i = 0; i < (sizeof(formats) / sizeof(formats[0])); i++) {
+ hr = IWineD3D_CheckDeviceFormat(This->wineD3D,
+ WINED3DADAPTER_DEFAULT,
+ WINED3DDEVTYPE_HAL,
+ d3ddm.Format /* AdapterFormat */,
+ 0 /* usage */,
+ WINED3DRTYPE_SURFACE,
+ formats[i]);
+ if(SUCCEEDED(hr)) {
+ if(count < outsize) {
+ Codes[count] = formats[i];
+ }
+ count++;
+ }
+ }
+ if(NumCodes) {
+ TRACE("Returning %u FourCC codes\n", count);
+ *NumCodes = count;
+ }
return DD_OK;
}
More information about the wine-cvs
mailing list