Updated.
[wine] / dlls / ddraw / dsurface / dibtexture.c
1 /*              DIB Section Texture DirectDrawSurface Driver
2  *
3  * Copyright 2000 TransGaming Technologies Inc.
4  */
5
6 #include "config.h"
7 #include "winerror.h"
8
9 #include <assert.h>
10 #include <stdlib.h>
11
12 #include "debugtools.h"
13 #include "ddraw_private.h"
14 #include "dsurface/main.h"
15 #include "dsurface/dib.h"
16 #include "dsurface/dibtexture.h"
17
18 DEFAULT_DEBUG_CHANNEL(ddraw);
19
20 static ICOM_VTABLE(IDirectDrawSurface7) DIBTexture_IDirectDrawSurface7_VTable;
21
22 HRESULT
23 DIBTexture_DirectDrawSurface_Construct(IDirectDrawSurfaceImpl* This,
24                                        IDirectDrawImpl* pDD,
25                                        const DDSURFACEDESC2* pDDSD)
26 {
27     HRESULT hr;
28
29     hr = DIB_DirectDrawSurface_Construct(This, pDD, pDDSD);
30     if (FAILED(hr)) return hr;
31
32     ICOM_INIT_INTERFACE(This, IDirectDrawSurface7,
33                         DIBTexture_IDirectDrawSurface7_VTable);
34
35     This->final_release = DIBTexture_DirectDrawSurface_final_release;
36     This->duplicate_surface = DIBTexture_DirectDrawSurface_duplicate_surface;
37
38     return S_OK;
39 }
40
41 HRESULT
42 DIBTexture_DirectDrawSurface_Create(IDirectDrawImpl *pDD,
43                                     const DDSURFACEDESC2 *pDDSD,
44                                     LPDIRECTDRAWSURFACE7 *ppSurf,
45                                     IUnknown *pUnkOuter)
46 {
47     IDirectDrawSurfaceImpl* This;
48     HRESULT hr;
49
50     assert(pUnkOuter == NULL);
51     assert(pDDSD->ddsCaps.dwCaps & DDSCAPS_TEXTURE);
52
53     This = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
54                      sizeof(*This) + sizeof(DIBTexture_DirectDrawSurfaceImpl));
55     if (This == NULL) return E_OUTOFMEMORY;
56
57     This->private = (DIBTexture_DirectDrawSurfaceImpl*)(This+1);
58
59     hr = DIBTexture_DirectDrawSurface_Construct(This, pDD, pDDSD);
60     if (FAILED(hr))
61         HeapFree(GetProcessHeap(), 0, This);
62     else
63         *ppSurf = ICOM_INTERFACE(This, IDirectDrawSurface7);
64
65     return hr;
66 }
67
68 void DIBTexture_DirectDrawSurface_final_release(IDirectDrawSurfaceImpl* This)
69 {
70     DIB_DirectDrawSurface_final_release(This);
71 }
72
73 HRESULT
74 DIBTexture_DirectDrawSurface_duplicate_surface(IDirectDrawSurfaceImpl* This,
75                                                LPDIRECTDRAWSURFACE7* ppDup)
76 {
77     return DIBTexture_DirectDrawSurface_Create(This->ddraw_owner,
78                                                &This->surface_desc, ppDup,
79                                                NULL);
80 }
81
82 static ICOM_VTABLE(IDirectDrawSurface7) DIBTexture_IDirectDrawSurface7_VTable =
83 {
84     Main_DirectDrawSurface_QueryInterface,
85     Main_DirectDrawSurface_AddRef,
86     Main_DirectDrawSurface_Release,
87     Main_DirectDrawSurface_AddAttachedSurface,
88     Main_DirectDrawSurface_AddOverlayDirtyRect,
89     DIB_DirectDrawSurface_Blt,
90     Main_DirectDrawSurface_BltBatch,
91     DIB_DirectDrawSurface_BltFast,
92     Main_DirectDrawSurface_DeleteAttachedSurface,
93     Main_DirectDrawSurface_EnumAttachedSurfaces,
94     Main_DirectDrawSurface_EnumOverlayZOrders,
95     Main_DirectDrawSurface_Flip,
96     Main_DirectDrawSurface_GetAttachedSurface,
97     Main_DirectDrawSurface_GetBltStatus,
98     Main_DirectDrawSurface_GetCaps,
99     Main_DirectDrawSurface_GetClipper,
100     Main_DirectDrawSurface_GetColorKey,
101     Main_DirectDrawSurface_GetDC,
102     Main_DirectDrawSurface_GetFlipStatus,
103     Main_DirectDrawSurface_GetOverlayPosition,
104     Main_DirectDrawSurface_GetPalette,
105     Main_DirectDrawSurface_GetPixelFormat,
106     Main_DirectDrawSurface_GetSurfaceDesc,
107     Main_DirectDrawSurface_Initialize,
108     Main_DirectDrawSurface_IsLost,
109     Main_DirectDrawSurface_Lock,
110     Main_DirectDrawSurface_ReleaseDC,
111     DIB_DirectDrawSurface_Restore,
112     Main_DirectDrawSurface_SetClipper,
113     Main_DirectDrawSurface_SetColorKey,
114     Main_DirectDrawSurface_SetOverlayPosition,
115     Main_DirectDrawSurface_SetPalette,
116     Main_DirectDrawSurface_Unlock,
117     Main_DirectDrawSurface_UpdateOverlay,
118     Main_DirectDrawSurface_UpdateOverlayDisplay,
119     Main_DirectDrawSurface_UpdateOverlayZOrder,
120     Main_DirectDrawSurface_GetDDInterface,
121     Main_DirectDrawSurface_PageLock,
122     Main_DirectDrawSurface_PageUnlock,
123     DIB_DirectDrawSurface_SetSurfaceDesc,
124     Main_DirectDrawSurface_SetPrivateData,
125     Main_DirectDrawSurface_GetPrivateData,
126     Main_DirectDrawSurface_FreePrivateData,
127     Main_DirectDrawSurface_GetUniquenessValue,
128     Main_DirectDrawSurface_ChangeUniquenessValue,
129     Main_DirectDrawSurface_SetPriority,
130     Main_DirectDrawSurface_GetPriority,
131     Main_DirectDrawSurface_SetLOD,
132     Main_DirectDrawSurface_GetLOD
133 };