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