Make the fixed function pipeline support multiple streams for created
[wine/dcerpc.git] / dlls / d3d8 / d3d8_private.h
blob024cf66d5eda4179fdd902f1e6f429cb6f20a572
1 /*
2 * Direct3D 8 private include file
4 * Copyright 2002 Jason Edmeades
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 #ifndef __WINE_D3DX8_PRIVATE_H
22 #define __WINE_D3DX8_PRIVATE_H
24 #ifndef __WINE_CONFIG_H
25 # error You must include config.h to use this header
26 #endif
28 /* THIS FILE MUST NOT CONTAIN X11 or MESA DEFINES */
29 #define XMD_H /* This is to prevent the Xmd.h inclusion bug :-/ */
30 #include <GL/gl.h>
31 #include <GL/glx.h>
32 #ifdef HAVE_GL_GLEXT_H
33 # include <GL/glext.h>
34 #endif
35 #undef XMD_H
37 #undef APIENTRY
38 #undef CALLBACK
39 #undef WINAPI
41 /* Redefines the constants */
42 #define CALLBACK __stdcall
43 #define WINAPI __stdcall
44 #define APIENTRY WINAPI
46 /* X11 locking */
48 extern void (*wine_tsx11_lock_ptr)(void);
49 extern void (*wine_tsx11_unlock_ptr)(void);
51 /* As GLX relies on X, this is needed */
52 #define ENTER_GL() wine_tsx11_lock_ptr()
53 #define LEAVE_GL() wine_tsx11_unlock_ptr()
55 #include "d3d8.h"
57 /* Device caps */
58 #define MAX_PALETTES 256
59 #define MAX_STREAMS 16
60 #define MAX_ACTIVE_LIGHTS 8
61 #define MAX_CLIPPLANES D3DMAXUSERCLIPPLANES
62 #define MAX_LEVELS 256
64 /* Other useful values */
65 #define HIGHEST_RENDER_STATE 174
66 #define HIGHEST_TEXTURE_STATE 29
67 #define HIGHEST_TRANSFORMSTATE 512
68 #define D3DSBT_RECORDED 0xfffffffe
70 /* CreateVertexShader can return > 0xFFFF */
71 #define VS_HIGHESTFIXEDFXF 0xF0000000
72 #define VERTEX_SHADER(Handle) \
73 ((Handle <= VS_HIGHESTFIXEDFXF) ? ((Handle >= sizeof(VertexShaders) / sizeof(IDirect3DVertexShaderImpl*)) ? NULL : VertexShaders[Handle]) : VertexShaders[Handle - VS_HIGHESTFIXEDFXF])
74 #define VERTEX_SHADER_DECL(Handle) \
75 ((Handle <= VS_HIGHESTFIXEDFXF) ? ((Handle >= sizeof(VertexShaderDeclarations) / sizeof(IDirect3DVertexShaderDeclarationImpl*)) ? NULL : VertexShaderDeclarations[Handle]) : VertexShaderDeclarations[Handle - VS_HIGHESTFIXEDFXF])
76 #define PIXEL_SHADER(Handle) \
77 ((Handle <= VS_HIGHESTFIXEDFXF) ? ((Handle >= sizeof(PixelShaders) / sizeof(IDirect3DPixelShaderImpl*)) ? NULL : PixelShaders[Handle]) : PixelShaders[Handle - VS_HIGHESTFIXEDFXF])
79 /* Direct3D8 Interfaces: */
80 typedef struct IDirect3DBaseTexture8Impl IDirect3DBaseTexture8Impl;
81 typedef struct IDirect3DVolumeTexture8Impl IDirect3DVolumeTexture8Impl;
82 typedef struct IDirect3D8Impl IDirect3D8Impl;
83 typedef struct IDirect3DDevice8Impl IDirect3DDevice8Impl;
84 typedef struct IDirect3DTexture8Impl IDirect3DTexture8Impl;
85 typedef struct IDirect3DCubeTexture8Impl IDirect3DCubeTexture8Impl;
86 typedef struct IDirect3DIndexBuffer8Impl IDirect3DIndexBuffer8Impl;
87 typedef struct IDirect3DSurface8Impl IDirect3DSurface8Impl;
88 typedef struct IDirect3DSwapChain8Impl IDirect3DSwapChain8Impl;
89 typedef struct IDirect3DResource8Impl IDirect3DResource8Impl;
90 typedef struct IDirect3DVolume8Impl IDirect3DVolume8Impl;
91 typedef struct IDirect3DVertexBuffer8Impl IDirect3DVertexBuffer8Impl;
93 /** Private Interfaces: */
94 typedef struct IDirect3DStateBlockImpl IDirect3DStateBlockImpl;
95 typedef struct IDirect3DVertexShaderImpl IDirect3DVertexShaderImpl;
96 typedef struct IDirect3DPixelShaderImpl IDirect3DPixelShaderImpl;
97 typedef struct IDirect3DVertexShaderDeclarationImpl IDirect3DVertexShaderDeclarationImpl;
99 typedef struct D3DSHADERVECTOR {
100 float x;
101 float y;
102 float z;
103 float w;
104 } D3DSHADERVECTOR;
106 typedef struct D3DSHADERSCALAR {
107 float x;
108 } D3DSHADERSCALAR;
110 #define D3D8_VSHADER_MAX_CONSTANTS 96
111 typedef D3DSHADERVECTOR VSHADERCONSTANTS8[D3D8_VSHADER_MAX_CONSTANTS];
113 typedef struct VSHADERDATA8 {
114 /** Run Time Shader Function Constants */
115 /*D3DXBUFFER* constants;*/
116 VSHADERCONSTANTS8 C;
117 /** Shader Code as char ... */
118 CONST DWORD* code;
119 UINT codeLength;
120 } VSHADERDATA8;
122 /** temporary here waiting for buffer code */
123 typedef struct VSHADERINPUTDATA8 {
124 D3DSHADERVECTOR V[17];
125 } VSHADERINPUTDATA8;
127 /** temporary here waiting for buffer code */
128 typedef struct VSHADEROUTPUTDATA8 {
129 D3DSHADERVECTOR oPos;
130 D3DSHADERVECTOR oD[2];
131 D3DSHADERVECTOR oT[8];
132 D3DSHADERVECTOR oFog;
133 D3DSHADERVECTOR oPts;
134 } VSHADEROUTPUTDATA8;
137 #define D3D8_PSHADER_MAX_CONSTANTS 32
138 typedef D3DSHADERVECTOR PSHADERCONSTANTS8[D3D8_PSHADER_MAX_CONSTANTS];
140 typedef struct PSHADERDATA8 {
141 /** Run Time Shader Function Constants */
142 /*D3DXBUFFER* constants;*/
143 PSHADERCONSTANTS8 C;
144 /** Shader Code as char ... */
145 CONST DWORD* code;
146 UINT codeLength;
147 } PSHADERDATA8;
149 /** temporary here waiting for buffer code */
150 typedef struct PSHADERINPUTDATA8 {
151 D3DSHADERVECTOR V[2];
152 D3DSHADERVECTOR T[8];
153 D3DSHADERVECTOR S[16];
154 /*D3DSHADERVECTOR R[12];*/
155 } PSHADERINPUTDATA8;
157 /** temporary here waiting for buffer code */
158 typedef struct PSHADEROUTPUTDATA8 {
159 D3DSHADERVECTOR oC[4];
160 D3DSHADERVECTOR oDepth;
161 } PSHADEROUTPUTDATA8;
165 * Macros
167 #define checkGLcall(A) \
169 GLint err = glGetError(); \
170 if (err != GL_NO_ERROR) { \
171 FIXME(">>>>>>>>>>>>>>>>> %x from %s @ %s / %d\n", err, A, __FILE__, __LINE__); \
172 } else { \
173 TRACE("%s call ok %s / %d\n", A, __FILE__, __LINE__); \
176 #define vcheckGLcall(A) \
178 GLint err = glGetError(); \
179 if (err != GL_NO_ERROR) { \
180 FIXME(">>>>>>>>>>>>>>>>> %x from %s @ %s / %d\n", err, A, __FILE__, __LINE__); \
181 } else { \
182 VTRACE(("%s call ok %s / %d\n", A, __FILE__, __LINE__)); \
186 #include "d3dcore_gl.h"
188 #define USE_GL_FUNC(type, pfn) type pfn;
189 typedef struct _GL_Info {
190 /**
191 * CAPS Constants
193 UINT max_lights;
194 UINT max_textures;
195 UINT max_clipplanes;
197 GL_PSVersion ps_arb_version;
198 GL_PSVersion ps_nv_version;
200 GL_VSVersion vs_arb_version;
201 GL_VSVersion vs_nv_version;
202 GL_VSVersion vs_ati_version;
204 BOOL supported[30];
206 /** OpenGL EXT and ARB functions ptr */
207 GL_EXT_FUNCS_GEN;
208 /** OpenGL GLX functions ptr */
209 GLX_EXT_FUNCS_GEN;
210 /**/
211 } GL_Info;
212 #undef USE_GL_FUNC
214 #define GL_LIMITS(ExtName) (This->direct3d8->gl_info.max_##ExtName)
215 #define GL_SUPPORT(ExtName) (TRUE == This->direct3d8->gl_info.supported[ExtName])
216 #define GL_SUPPORT_DEV(ExtName, dev) (TRUE == (dev)->direct3d8->gl_info.supported[ExtName])
217 #define GL_EXTCALL(FuncName) (This->direct3d8->gl_info.FuncName)
220 #define D3DCOLOR_R(dw) (((float) (((dw) >> 16) & 0xFF)) / 255.0f)
221 #define D3DCOLOR_G(dw) (((float) (((dw) >> 8) & 0xFF)) / 255.0f)
222 #define D3DCOLOR_B(dw) (((float) (((dw) >> 0) & 0xFF)) / 255.0f)
223 #define D3DCOLOR_A(dw) (((float) (((dw) >> 24) & 0xFF)) / 255.0f)
225 #define D3DCOLORTOCOLORVALUE(dw, col) \
226 (col).r = D3DCOLOR_R(dw); \
227 (col).g = D3DCOLOR_G(dw); \
228 (col).b = D3DCOLOR_B(dw); \
229 (col).a = D3DCOLOR_A(dw);
231 #define D3DCOLORTOVECTOR4(dw, vec) \
232 (vec).x = D3DCOLOR_R(dw); \
233 (vec).y = D3DCOLOR_G(dw); \
234 (vec).z = D3DCOLOR_B(dw); \
235 (vec).w = D3DCOLOR_A(dw);
237 #define D3DCOLORTOGLFLOAT4(dw, vec) \
238 (vec)[0] = D3DCOLOR_R(dw); \
239 (vec)[1] = D3DCOLOR_G(dw); \
240 (vec)[2] = D3DCOLOR_B(dw); \
241 (vec)[3] = D3DCOLOR_A(dw);
243 /* ===========================================================================
244 The interfactes themselves
245 =========================================================================== */
247 /* ---------- */
248 /* IDirect3D8 */
249 /* ---------- */
251 /*****************************************************************************
252 * Predeclare the interface implementation structures
254 extern ICOM_VTABLE(IDirect3D8) Direct3D8_Vtbl;
255 extern ICOM_VTABLE(IDirect3D8) mesa_d3d8vt;
257 /*****************************************************************************
258 * IDirect3D implementation structure
260 struct IDirect3D8Impl
262 /* IUnknown fields */
263 ICOM_VFIELD(IDirect3D8);
264 DWORD ref;
266 /* IDirect3D8 fields */
267 GL_Info gl_info;
270 /* IUnknown: */
271 extern HRESULT WINAPI IDirect3D8Impl_QueryInterface(LPDIRECT3D8 iface,REFIID refiid,LPVOID *obj);
272 extern ULONG WINAPI IDirect3D8Impl_AddRef(LPDIRECT3D8 iface);
273 extern ULONG WINAPI IDirect3D8Impl_Release(LPDIRECT3D8 iface);
275 /* IDirect3d8: */
276 extern HRESULT WINAPI IDirect3D8Impl_RegisterSoftwareDevice(LPDIRECT3D8 iface, void* pInitializeFunction);
277 extern UINT WINAPI IDirect3D8Impl_GetAdapterCount(LPDIRECT3D8 iface);
278 extern HRESULT WINAPI IDirect3D8Impl_GetAdapterIdentifier(LPDIRECT3D8 iface, UINT Adapter, DWORD Flags, D3DADAPTER_IDENTIFIER8* pIdentifier);
279 extern UINT WINAPI IDirect3D8Impl_GetAdapterModeCount(LPDIRECT3D8 iface, UINT Adapter);
280 extern HRESULT WINAPI IDirect3D8Impl_EnumAdapterModes(LPDIRECT3D8 iface, UINT Adapter, UINT Mode, D3DDISPLAYMODE* pMode);
281 extern HRESULT WINAPI IDirect3D8Impl_GetAdapterDisplayMode(LPDIRECT3D8 iface, UINT Adapter, D3DDISPLAYMODE* pMode);
282 extern HRESULT WINAPI IDirect3D8Impl_CheckDeviceType(LPDIRECT3D8 iface, UINT Adapter, D3DDEVTYPE CheckType, D3DFORMAT DisplayFormat,
283 D3DFORMAT BackBufferFormat, BOOL Windowed);
284 extern HRESULT WINAPI IDirect3D8Impl_CheckDeviceFormat(LPDIRECT3D8 iface, UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat,
285 DWORD Usage, D3DRESOURCETYPE RType, D3DFORMAT CheckFormat);
286 extern HRESULT WINAPI IDirect3D8Impl_CheckDeviceMultiSampleType(LPDIRECT3D8 iface, UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT SurfaceFormat,
287 BOOL Windowed, D3DMULTISAMPLE_TYPE MultiSampleType);
288 extern HRESULT WINAPI IDirect3D8Impl_CheckDepthStencilMatch(LPDIRECT3D8 iface, UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat,
289 D3DFORMAT RenderTargetFormat, D3DFORMAT DepthStencilFormat);
290 extern HRESULT WINAPI IDirect3D8Impl_GetDeviceCaps(LPDIRECT3D8 iface, UINT Adapter, D3DDEVTYPE DeviceType, D3DCAPS8* pCaps);
291 extern HMONITOR WINAPI IDirect3D8Impl_GetAdapterMonitor(LPDIRECT3D8 iface, UINT Adapter);
292 extern HRESULT WINAPI IDirect3D8Impl_CreateDevice(LPDIRECT3D8 iface, UINT Adapter, D3DDEVTYPE DeviceType, HWND hFocusWindow,
293 DWORD BehaviorFlags, D3DPRESENT_PARAMETERS* pPresentationParameters,
294 IDirect3DDevice8** ppReturnedDeviceInterface);
296 /* ---------------- */
297 /* IDirect3DDevice8 */
298 /* ---------------- */
300 /*****************************************************************************
301 * Predeclare the interface implementation structures
303 extern ICOM_VTABLE(IDirect3DDevice8) Direct3DDevice8_Vtbl;
305 /*****************************************************************************
306 * IDirect3DDevice8 implementation structure
308 struct IDirect3DDevice8Impl
310 /* IUnknown fields */
311 ICOM_VFIELD(IDirect3DDevice8);
312 DWORD ref;
314 /* IDirect3DDevice8 fields */
315 IDirect3D8Impl *direct3d8;
317 IDirect3DSurface8Impl *frontBuffer;
318 IDirect3DSurface8Impl *backBuffer;
319 IDirect3DSurface8Impl *depthStencilBuffer;
321 IDirect3DSurface8Impl *renderTarget;
322 IDirect3DSurface8Impl *stencilBufferTarget;
324 D3DPRESENT_PARAMETERS PresentParms;
325 D3DDEVICE_CREATION_PARAMETERS CreateParms;
327 UINT adapterNo;
328 D3DDEVTYPE devType;
330 UINT srcBlend;
331 UINT dstBlend;
332 UINT alphafunc;
333 UINT stencilfunc;
335 /* State block related */
336 BOOL isRecordingState;
337 IDirect3DStateBlockImpl *StateBlock;
338 IDirect3DStateBlockImpl *UpdateStateBlock;
340 /* Other required values */
341 float lightPosn[MAX_ACTIVE_LIGHTS][4];
342 float lightDirn[MAX_ACTIVE_LIGHTS][4];
344 /* palettes texture management */
345 PALETTEENTRY palettes[MAX_PALETTES][256];
346 UINT currentPalette;
348 /* Optimization */
349 D3DMATRIX lastProj;
350 D3DMATRIX lastView;
351 D3DMATRIX lastWorld0;
352 D3DMATRIX lastTexTrans[8];
354 /* OpenGL related */
355 GLXContext glCtx;
356 XVisualInfo *visInfo;
357 Display *display;
358 HWND win_handle;
359 Window win;
360 GLXContext render_ctx;
361 Drawable drawable;
363 /* OpenGL Extension related */
365 /* Cursor management */
366 BOOL bCursorVisible;
367 UINT xHotSpot;
368 UINT yHotSpot;
369 UINT xScreenSpace;
370 UINT yScreenSpace;
371 GLint cursor;
373 UINT dummyTextureName[8];
376 /* IUnknown: */
377 extern HRESULT WINAPI IDirect3DDevice8Impl_QueryInterface(LPDIRECT3DDEVICE8 iface, REFIID refiid, LPVOID *obj);
378 extern ULONG WINAPI IDirect3DDevice8Impl_AddRef(LPDIRECT3DDEVICE8 iface);
379 extern ULONG WINAPI IDirect3DDevice8Impl_Release(LPDIRECT3DDEVICE8 iface);
381 /* IDirect3DDevice8: */
382 extern HRESULT WINAPI IDirect3DDevice8Impl_TestCooperativeLevel(LPDIRECT3DDEVICE8 iface);
383 extern UINT WINAPI IDirect3DDevice8Impl_GetAvailableTextureMem(LPDIRECT3DDEVICE8 iface);
384 extern HRESULT WINAPI IDirect3DDevice8Impl_ResourceManagerDiscardBytes(LPDIRECT3DDEVICE8 iface, DWORD Bytes);
385 extern HRESULT WINAPI IDirect3DDevice8Impl_GetDirect3D(LPDIRECT3DDEVICE8 iface, IDirect3D8** ppD3D8);
386 extern HRESULT WINAPI IDirect3DDevice8Impl_GetDeviceCaps(LPDIRECT3DDEVICE8 iface, D3DCAPS8* pCaps);
387 extern HRESULT WINAPI IDirect3DDevice8Impl_GetDisplayMode(LPDIRECT3DDEVICE8 iface, D3DDISPLAYMODE* pMode);
388 extern HRESULT WINAPI IDirect3DDevice8Impl_GetCreationParameters(LPDIRECT3DDEVICE8 iface, D3DDEVICE_CREATION_PARAMETERS* pParameters);
389 extern HRESULT WINAPI IDirect3DDevice8Impl_SetCursorProperties(LPDIRECT3DDEVICE8 iface, UINT XHotSpot, UINT YHotSpot, IDirect3DSurface8* pCursorBitmap);
390 extern void WINAPI IDirect3DDevice8Impl_SetCursorPosition(LPDIRECT3DDEVICE8 iface, UINT XScreenSpace, UINT YScreenSpace, DWORD Flags);
391 extern BOOL WINAPI IDirect3DDevice8Impl_ShowCursor(LPDIRECT3DDEVICE8 iface, BOOL bShow);
392 extern HRESULT WINAPI IDirect3DDevice8Impl_CreateAdditionalSwapChain(LPDIRECT3DDEVICE8 iface, D3DPRESENT_PARAMETERS* pPresentationParameters, IDirect3DSwapChain8** pSwapChain);
393 extern HRESULT WINAPI IDirect3DDevice8Impl_Reset(LPDIRECT3DDEVICE8 iface, D3DPRESENT_PARAMETERS* pPresentationParameters);
394 extern HRESULT WINAPI IDirect3DDevice8Impl_Present(LPDIRECT3DDEVICE8 iface, CONST RECT* pSourceRect, CONST RECT* pDestRect, HWND hDestWindowOverride, CONST RGNDATA* pDirtyRegion);
395 extern HRESULT WINAPI IDirect3DDevice8Impl_GetBackBuffer(LPDIRECT3DDEVICE8 iface, UINT BackBuffer, D3DBACKBUFFER_TYPE Type, IDirect3DSurface8** ppBackBuffer);
396 extern HRESULT WINAPI IDirect3DDevice8Impl_GetRasterStatus(LPDIRECT3DDEVICE8 iface, D3DRASTER_STATUS* pRasterStatus);
397 extern void WINAPI IDirect3DDevice8Impl_SetGammaRamp(LPDIRECT3DDEVICE8 iface, DWORD Flags, CONST D3DGAMMARAMP* pRamp);
398 extern void WINAPI IDirect3DDevice8Impl_GetGammaRamp(LPDIRECT3DDEVICE8 iface, D3DGAMMARAMP* pRamp);
399 extern HRESULT WINAPI IDirect3DDevice8Impl_CreateTexture(LPDIRECT3DDEVICE8 iface, UINT Width, UINT Height, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DTexture8** ppTexture);
400 extern HRESULT WINAPI IDirect3DDevice8Impl_CreateVolumeTexture(LPDIRECT3DDEVICE8 iface, UINT Width, UINT Height, UINT Depth, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DVolumeTexture8** ppVolumeTexture);
401 extern HRESULT WINAPI IDirect3DDevice8Impl_CreateCubeTexture(LPDIRECT3DDEVICE8 iface, UINT EdgeLength, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DCubeTexture8** ppCubeTexture);
402 extern HRESULT WINAPI IDirect3DDevice8Impl_CreateVertexBuffer(LPDIRECT3DDEVICE8 iface, UINT Length, DWORD Usage, DWORD FVF, D3DPOOL Pool, IDirect3DVertexBuffer8** ppVertexBuffer);
403 extern HRESULT WINAPI IDirect3DDevice8Impl_CreateIndexBuffer(LPDIRECT3DDEVICE8 iface, UINT Length, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DIndexBuffer8** ppIndexBuffer);
404 extern HRESULT WINAPI IDirect3DDevice8Impl_CreateRenderTarget(LPDIRECT3DDEVICE8 iface, UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, BOOL Lockable, IDirect3DSurface8** ppSurface);
405 extern HRESULT WINAPI IDirect3DDevice8Impl_CreateDepthStencilSurface(LPDIRECT3DDEVICE8 iface, UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, IDirect3DSurface8** ppSurface);
406 extern HRESULT WINAPI IDirect3DDevice8Impl_CreateImageSurface(LPDIRECT3DDEVICE8 iface, UINT Width, UINT Height, D3DFORMAT Format, IDirect3DSurface8** ppSurface);
407 extern HRESULT WINAPI IDirect3DDevice8Impl_CopyRects(LPDIRECT3DDEVICE8 iface, IDirect3DSurface8* pSourceSurface, CONST RECT* pSourceRectsArray, UINT cRects, IDirect3DSurface8* pDestinationSurface, CONST POINT* pDestPointsArray);
408 extern HRESULT WINAPI IDirect3DDevice8Impl_UpdateTexture(LPDIRECT3DDEVICE8 iface, IDirect3DBaseTexture8* pSourceTexture, IDirect3DBaseTexture8* pDestinationTexture);
409 extern HRESULT WINAPI IDirect3DDevice8Impl_GetFrontBuffer(LPDIRECT3DDEVICE8 iface, IDirect3DSurface8* pDestSurface);
410 extern HRESULT WINAPI IDirect3DDevice8Impl_SetRenderTarget(LPDIRECT3DDEVICE8 iface, IDirect3DSurface8* pRenderTarget, IDirect3DSurface8* pNewZStencil);
411 extern HRESULT WINAPI IDirect3DDevice8Impl_GetRenderTarget(LPDIRECT3DDEVICE8 iface, IDirect3DSurface8** ppRenderTarget);
412 extern HRESULT WINAPI IDirect3DDevice8Impl_GetDepthStencilSurface(LPDIRECT3DDEVICE8 iface, IDirect3DSurface8** ppZStencilSurface);
413 extern HRESULT WINAPI IDirect3DDevice8Impl_BeginScene(LPDIRECT3DDEVICE8 iface);
414 extern HRESULT WINAPI IDirect3DDevice8Impl_EndScene(LPDIRECT3DDEVICE8 iface);
415 extern HRESULT WINAPI IDirect3DDevice8Impl_Clear(LPDIRECT3DDEVICE8 iface, DWORD Count, CONST D3DRECT* pRects, DWORD Flags, D3DCOLOR Color, float Z, DWORD Stencil);
416 extern HRESULT WINAPI IDirect3DDevice8Impl_SetTransform(LPDIRECT3DDEVICE8 iface, D3DTRANSFORMSTATETYPE State, CONST D3DMATRIX* pMatrix);
417 extern HRESULT WINAPI IDirect3DDevice8Impl_GetTransform(LPDIRECT3DDEVICE8 iface, D3DTRANSFORMSTATETYPE State, D3DMATRIX* pMatrix);
418 extern HRESULT WINAPI IDirect3DDevice8Impl_MultiplyTransform(LPDIRECT3DDEVICE8 iface, D3DTRANSFORMSTATETYPE State, CONST D3DMATRIX* pMatrix);
419 extern HRESULT WINAPI IDirect3DDevice8Impl_SetViewport(LPDIRECT3DDEVICE8 iface, CONST D3DVIEWPORT8* pViewport);
420 extern HRESULT WINAPI IDirect3DDevice8Impl_GetViewport(LPDIRECT3DDEVICE8 iface, D3DVIEWPORT8* pViewport);
421 extern HRESULT WINAPI IDirect3DDevice8Impl_SetMaterial(LPDIRECT3DDEVICE8 iface, CONST D3DMATERIAL8* pMaterial);
422 extern HRESULT WINAPI IDirect3DDevice8Impl_GetMaterial(LPDIRECT3DDEVICE8 iface, D3DMATERIAL8* pMaterial);
423 extern HRESULT WINAPI IDirect3DDevice8Impl_SetLight(LPDIRECT3DDEVICE8 iface, DWORD Index, CONST D3DLIGHT8* pLight);
424 extern HRESULT WINAPI IDirect3DDevice8Impl_GetLight(LPDIRECT3DDEVICE8 iface, DWORD Index, D3DLIGHT8* pLight);
425 extern HRESULT WINAPI IDirect3DDevice8Impl_LightEnable(LPDIRECT3DDEVICE8 iface, DWORD Index, BOOL Enable);
426 extern HRESULT WINAPI IDirect3DDevice8Impl_GetLightEnable(LPDIRECT3DDEVICE8 iface, DWORD Index, BOOL* pEnable);
427 extern HRESULT WINAPI IDirect3DDevice8Impl_SetClipPlane(LPDIRECT3DDEVICE8 iface, DWORD Index, CONST float* pPlane);
428 extern HRESULT WINAPI IDirect3DDevice8Impl_GetClipPlane(LPDIRECT3DDEVICE8 iface, DWORD Index, float* pPlane);
429 extern HRESULT WINAPI IDirect3DDevice8Impl_SetRenderState(LPDIRECT3DDEVICE8 iface, D3DRENDERSTATETYPE State, DWORD Value);
430 extern HRESULT WINAPI IDirect3DDevice8Impl_GetRenderState(LPDIRECT3DDEVICE8 iface, D3DRENDERSTATETYPE State, DWORD* pValue);
431 extern HRESULT WINAPI IDirect3DDevice8Impl_BeginStateBlock(LPDIRECT3DDEVICE8 iface);
432 extern HRESULT WINAPI IDirect3DDevice8Impl_EndStateBlock(LPDIRECT3DDEVICE8 iface, DWORD* pToken);
433 extern HRESULT WINAPI IDirect3DDevice8Impl_ApplyStateBlock(LPDIRECT3DDEVICE8 iface, DWORD Token);
434 extern HRESULT WINAPI IDirect3DDevice8Impl_CaptureStateBlock(LPDIRECT3DDEVICE8 iface, DWORD Token);
435 extern HRESULT WINAPI IDirect3DDevice8Impl_DeleteStateBlock(LPDIRECT3DDEVICE8 iface, DWORD Token);
436 extern HRESULT WINAPI IDirect3DDevice8Impl_CreateStateBlock(LPDIRECT3DDEVICE8 iface, D3DSTATEBLOCKTYPE Type,DWORD* pToken);
437 extern HRESULT WINAPI IDirect3DDevice8Impl_SetClipStatus(LPDIRECT3DDEVICE8 iface, CONST D3DCLIPSTATUS8* pClipStatus);
438 extern HRESULT WINAPI IDirect3DDevice8Impl_GetClipStatus(LPDIRECT3DDEVICE8 iface, D3DCLIPSTATUS8* pClipStatus);
439 extern HRESULT WINAPI IDirect3DDevice8Impl_GetTexture(LPDIRECT3DDEVICE8 iface, DWORD Stage, IDirect3DBaseTexture8** ppTexture);
440 extern HRESULT WINAPI IDirect3DDevice8Impl_SetTexture(LPDIRECT3DDEVICE8 iface, DWORD Stage, IDirect3DBaseTexture8* pTexture);
441 extern HRESULT WINAPI IDirect3DDevice8Impl_GetTextureStageState(LPDIRECT3DDEVICE8 iface, DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD* pValue);
442 extern HRESULT WINAPI IDirect3DDevice8Impl_SetTextureStageState(LPDIRECT3DDEVICE8 iface, DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD Value);
443 extern HRESULT WINAPI IDirect3DDevice8Impl_ValidateDevice(LPDIRECT3DDEVICE8 iface, DWORD* pNumPasses);
444 extern HRESULT WINAPI IDirect3DDevice8Impl_GetInfo(LPDIRECT3DDEVICE8 iface, DWORD DevInfoID, void* pDevInfoStruct, DWORD DevInfoStructSize);
445 extern HRESULT WINAPI IDirect3DDevice8Impl_SetPaletteEntries(LPDIRECT3DDEVICE8 iface, UINT PaletteNumber, CONST PALETTEENTRY* pEntries);
446 extern HRESULT WINAPI IDirect3DDevice8Impl_GetPaletteEntries(LPDIRECT3DDEVICE8 iface, UINT PaletteNumber, PALETTEENTRY* pEntries);
447 extern HRESULT WINAPI IDirect3DDevice8Impl_SetCurrentTexturePalette(LPDIRECT3DDEVICE8 iface, UINT PaletteNumber);
448 extern HRESULT WINAPI IDirect3DDevice8Impl_GetCurrentTexturePalette(LPDIRECT3DDEVICE8 iface, UINT *PaletteNumber);
449 extern HRESULT WINAPI IDirect3DDevice8Impl_DrawPrimitive(LPDIRECT3DDEVICE8 iface, D3DPRIMITIVETYPE PrimitiveType, UINT StartVertex, UINT PrimitiveCount);
450 extern HRESULT WINAPI IDirect3DDevice8Impl_DrawIndexedPrimitive(LPDIRECT3DDEVICE8 iface, D3DPRIMITIVETYPE PrimitiveType, UINT minIndex, UINT NumVertices, UINT startIndex, UINT primCount);
451 extern HRESULT WINAPI IDirect3DDevice8Impl_DrawPrimitiveUP(LPDIRECT3DDEVICE8 iface, D3DPRIMITIVETYPE PrimitiveType, UINT PrimitiveCount, CONST void* pVertexStreamZeroData, UINT VertexStreamZeroStride);
452 extern HRESULT WINAPI IDirect3DDevice8Impl_DrawIndexedPrimitiveUP(LPDIRECT3DDEVICE8 iface, D3DPRIMITIVETYPE PrimitiveType, UINT MinVertexIndex, UINT NumVertexIndices, UINT PrimitiveCount, CONST void* pIndexData, D3DFORMAT IndexDataFormat, CONST void* pVertexStreamZeroData, UINT VertexStreamZeroStride);
453 extern HRESULT WINAPI IDirect3DDevice8Impl_ProcessVertices(LPDIRECT3DDEVICE8 iface, UINT SrcStartIndex,UINT DestIndex,UINT VertexCount,IDirect3DVertexBuffer8* pDestBuffer,DWORD Flags);
454 extern HRESULT WINAPI IDirect3DDevice8Impl_CreateVertexShader(LPDIRECT3DDEVICE8 iface, CONST DWORD* pDeclaration,CONST DWORD* pFunction,DWORD* pHandle,DWORD Usage);
455 extern HRESULT WINAPI IDirect3DDevice8Impl_SetVertexShader(LPDIRECT3DDEVICE8 iface, DWORD Handle);
456 extern HRESULT WINAPI IDirect3DDevice8Impl_GetVertexShader(LPDIRECT3DDEVICE8 iface, DWORD* pHandle);
457 extern HRESULT WINAPI IDirect3DDevice8Impl_DeleteVertexShader(LPDIRECT3DDEVICE8 iface, DWORD Handle);
458 extern HRESULT WINAPI IDirect3DDevice8Impl_SetVertexShaderConstant(LPDIRECT3DDEVICE8 iface, DWORD Register,CONST void* pConstantData,DWORD ConstantCount);
459 extern HRESULT WINAPI IDirect3DDevice8Impl_GetVertexShaderConstant(LPDIRECT3DDEVICE8 iface, DWORD Register,void* pConstantData,DWORD ConstantCount);
460 extern HRESULT WINAPI IDirect3DDevice8Impl_GetVertexShaderDeclaration(LPDIRECT3DDEVICE8 iface, DWORD Handle,void* pData,DWORD* pSizeOfData);
461 extern HRESULT WINAPI IDirect3DDevice8Impl_GetVertexShaderFunction(LPDIRECT3DDEVICE8 iface, DWORD Handle,void* pData,DWORD* pSizeOfData);
462 extern HRESULT WINAPI IDirect3DDevice8Impl_SetStreamSource(LPDIRECT3DDEVICE8 iface, UINT StreamNumber,IDirect3DVertexBuffer8* pStreamData,UINT Stride);
463 extern HRESULT WINAPI IDirect3DDevice8Impl_GetStreamSource(LPDIRECT3DDEVICE8 iface, UINT StreamNumber,IDirect3DVertexBuffer8** ppStreamData,UINT* pStride);
464 extern HRESULT WINAPI IDirect3DDevice8Impl_SetIndices(LPDIRECT3DDEVICE8 iface, IDirect3DIndexBuffer8* pIndexData,UINT BaseVertexIndex);
465 extern HRESULT WINAPI IDirect3DDevice8Impl_GetIndices(LPDIRECT3DDEVICE8 iface, IDirect3DIndexBuffer8** ppIndexData,UINT* pBaseVertexIndex);
466 extern HRESULT WINAPI IDirect3DDevice8Impl_CreatePixelShader(LPDIRECT3DDEVICE8 iface, CONST DWORD* pFunction,DWORD* pHandle);
467 extern HRESULT WINAPI IDirect3DDevice8Impl_SetPixelShader(LPDIRECT3DDEVICE8 iface, DWORD Handle);
468 extern HRESULT WINAPI IDirect3DDevice8Impl_GetPixelShader(LPDIRECT3DDEVICE8 iface, DWORD* pHandle);
469 extern HRESULT WINAPI IDirect3DDevice8Impl_DeletePixelShader(LPDIRECT3DDEVICE8 iface, DWORD Handle);
470 extern HRESULT WINAPI IDirect3DDevice8Impl_SetPixelShaderConstant(LPDIRECT3DDEVICE8 iface, DWORD Register,CONST void* pConstantData,DWORD ConstantCount);
471 extern HRESULT WINAPI IDirect3DDevice8Impl_GetPixelShaderConstant(LPDIRECT3DDEVICE8 iface, DWORD Register,void* pConstantData,DWORD ConstantCount);
472 extern HRESULT WINAPI IDirect3DDevice8Impl_GetPixelShaderFunction(LPDIRECT3DDEVICE8 iface, DWORD Handle,void* pData,DWORD* pSizeOfData);
473 extern HRESULT WINAPI IDirect3DDevice8Impl_DrawRectPatch(LPDIRECT3DDEVICE8 iface, UINT Handle,CONST float* pNumSegs,CONST D3DRECTPATCH_INFO* pRectPatchInfo);
474 extern HRESULT WINAPI IDirect3DDevice8Impl_DrawTriPatch(LPDIRECT3DDEVICE8 iface, UINT Handle,CONST float* pNumSegs,CONST D3DTRIPATCH_INFO* pTriPatchInfo);
475 extern HRESULT WINAPI IDirect3DDevice8Impl_DeletePatch(LPDIRECT3DDEVICE8 iface, UINT Handle);
477 /* internal Interfaces */
478 extern HRESULT WINAPI IDirect3DDevice8Impl_CleanRender(LPDIRECT3DDEVICE8 iface);
479 extern HRESULT WINAPI IDirect3DDevice8Impl_ActiveRender(LPDIRECT3DDEVICE8 iface, IDirect3DSurface8* RenderSurface, IDirect3DSurface8* StencilSurface);
482 /* ---------------- */
483 /* IDirect3DVolume8 */
484 /* ---------------- */
486 /*****************************************************************************
487 * Predeclare the interface implementation structures
489 extern ICOM_VTABLE(IDirect3DVolume8) Direct3DVolume8_Vtbl;
491 /*****************************************************************************
492 * IDirect3DVolume8 implementation structure
494 struct IDirect3DVolume8Impl
496 /* IUnknown fields */
497 ICOM_VFIELD(IDirect3DVolume8);
498 DWORD ref;
500 /* IDirect3DVolume8 fields */
501 IDirect3DDevice8Impl *Device;
502 D3DRESOURCETYPE ResourceType;
504 IUnknown *Container;
505 D3DVOLUME_DESC myDesc;
506 BYTE *allocatedMemory;
507 UINT textureName;
508 UINT bytesPerPixel;
510 BOOL lockable;
511 BOOL locked;
512 D3DBOX lockedBox;
513 D3DBOX dirtyBox;
514 BOOL Dirty;
517 /* IUnknown: */
518 extern HRESULT WINAPI IDirect3DVolume8Impl_QueryInterface(LPDIRECT3DVOLUME8 iface,REFIID refiid,LPVOID *obj);
519 extern ULONG WINAPI IDirect3DVolume8Impl_AddRef(LPDIRECT3DVOLUME8 iface);
520 extern ULONG WINAPI IDirect3DVolume8Impl_Release(LPDIRECT3DVOLUME8 iface);
522 /* IDirect3DVolume8: */
523 extern HRESULT WINAPI IDirect3DVolume8Impl_GetDevice(LPDIRECT3DVOLUME8 iface, IDirect3DDevice8** ppDevice);
524 extern HRESULT WINAPI IDirect3DVolume8Impl_SetPrivateData(LPDIRECT3DVOLUME8 iface, REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags);
525 extern HRESULT WINAPI IDirect3DVolume8Impl_GetPrivateData(LPDIRECT3DVOLUME8 iface, REFGUID refguid, void* pData, DWORD* pSizeOfData);
526 extern HRESULT WINAPI IDirect3DVolume8Impl_FreePrivateData(LPDIRECT3DVOLUME8 iface, REFGUID refguid);
527 extern HRESULT WINAPI IDirect3DVolume8Impl_GetContainer(LPDIRECT3DVOLUME8 iface, REFIID riid, void** ppContainer);
528 extern HRESULT WINAPI IDirect3DVolume8Impl_GetDesc(LPDIRECT3DVOLUME8 iface, D3DVOLUME_DESC* pDesc);
529 extern HRESULT WINAPI IDirect3DVolume8Impl_LockBox(LPDIRECT3DVOLUME8 iface, D3DLOCKED_BOX* pLockedVolume, CONST D3DBOX* pBox, DWORD Flags);
530 extern HRESULT WINAPI IDirect3DVolume8Impl_UnlockBox(LPDIRECT3DVOLUME8 iface);
532 /* internal Interfaces */
533 extern HRESULT WINAPI IDirect3DVolume8Impl_CleanDirtyBox(LPDIRECT3DVOLUME8 iface);
534 extern HRESULT WINAPI IDirect3DVolume8Impl_AddDirtyBox(LPDIRECT3DVOLUME8 iface, CONST D3DBOX* pDirtyBox);
536 /* ------------------- */
537 /* IDirect3DSwapChain8 */
538 /* ------------------- */
540 /*****************************************************************************
541 * Predeclare the interface implementation structures
543 extern ICOM_VTABLE(IDirect3DSwapChain8) Direct3DSwapChain8_Vtbl;
545 /*****************************************************************************
546 * IDirect3DSwapChain8 implementation structure
548 struct IDirect3DSwapChain8Impl
550 /* IUnknown fields */
551 ICOM_VFIELD(IDirect3DSwapChain8);
552 DWORD ref;
554 /* IDirect3DSwapChain8 fields */
555 IDirect3DSurface8Impl *frontBuffer;
556 IDirect3DSurface8Impl *backBuffer;
557 IDirect3DSurface8Impl *depthStencilBuffer;
558 D3DPRESENT_PARAMETERS PresentParms;
560 /* OpenGL/GLX related */
561 GLXContext swap_ctx;
562 Drawable swap_drawable;
565 /* IUnknown: */
566 extern HRESULT WINAPI IDirect3DSwapChain8Impl_QueryInterface(LPDIRECT3DSWAPCHAIN8 iface, REFIID refiid, LPVOID *obj);
567 extern ULONG WINAPI IDirect3DSwapChain8Impl_AddRef(LPDIRECT3DSWAPCHAIN8 iface);
568 extern ULONG WINAPI IDirect3DSwapChain8Impl_Release(LPDIRECT3DSWAPCHAIN8 iface);
570 /* IDirect3DSwapChain8: */
571 extern HRESULT WINAPI IDirect3DSwapChain8Impl_Present(LPDIRECT3DSWAPCHAIN8 iface, CONST RECT* pSourceRect, CONST RECT* pDestRect, HWND hDestWindowOverride,CONST RGNDATA* pDirtyRegion);
572 extern HRESULT WINAPI IDirect3DSwapChain8Impl_GetBackBuffer(LPDIRECT3DSWAPCHAIN8 iface, UINT BackBuffer, D3DBACKBUFFER_TYPE Type,IDirect3DSurface8** ppBackBuffer);
575 /* ----------------- */
576 /* IDirect3DSurface8 */
577 /* ----------------- */
579 /*****************************************************************************
580 * Predeclare the interface implementation structures
582 extern ICOM_VTABLE(IDirect3DSurface8) Direct3DSurface8_Vtbl;
584 /*****************************************************************************
585 * IDirect3DSurface8 implementation structure
587 struct IDirect3DSurface8Impl
589 /* IUnknown fields */
590 ICOM_VFIELD(IDirect3DSurface8);
591 DWORD ref;
593 /* IDirect3DSurface8 fields */
594 IDirect3DDevice8Impl *Device;
595 D3DRESOURCETYPE ResourceType;
597 IUnknown *Container;
598 D3DSURFACE_DESC myDesc;
599 BYTE *allocatedMemory;
600 UINT textureName;
601 UINT bytesPerPixel;
603 BOOL lockable;
604 BOOL locked;
605 RECT lockedRect;
606 RECT dirtyRect;
607 BOOL Dirty;
610 /* IUnknown: */
611 extern HRESULT WINAPI IDirect3DSurface8Impl_QueryInterface(LPDIRECT3DSURFACE8 iface,REFIID refiid,LPVOID *obj);
612 extern ULONG WINAPI IDirect3DSurface8Impl_AddRef(LPDIRECT3DSURFACE8 iface);
613 extern ULONG WINAPI IDirect3DSurface8Impl_Release(LPDIRECT3DSURFACE8 iface);
615 /* IDirect3DSurface8: */
616 extern HRESULT WINAPI IDirect3DSurface8Impl_GetDevice(LPDIRECT3DSURFACE8 iface, IDirect3DDevice8** ppDevice);
617 extern HRESULT WINAPI IDirect3DSurface8Impl_SetPrivateData(LPDIRECT3DSURFACE8 iface, REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags);
618 extern HRESULT WINAPI IDirect3DSurface8Impl_GetPrivateData(LPDIRECT3DSURFACE8 iface, REFGUID refguid,void* pData,DWORD* pSizeOfData);
619 extern HRESULT WINAPI IDirect3DSurface8Impl_FreePrivateData(LPDIRECT3DSURFACE8 iface, REFGUID refguid);
620 extern HRESULT WINAPI IDirect3DSurface8Impl_GetContainer(LPDIRECT3DSURFACE8 iface, REFIID riid,void** ppContainer);
621 extern HRESULT WINAPI IDirect3DSurface8Impl_GetDesc(LPDIRECT3DSURFACE8 iface, D3DSURFACE_DESC *pDesc);
622 extern HRESULT WINAPI IDirect3DSurface8Impl_LockRect(LPDIRECT3DSURFACE8 iface, D3DLOCKED_RECT* pLockedRect, CONST RECT* pRect,DWORD Flags);
623 extern HRESULT WINAPI IDirect3DSurface8Impl_UnlockRect(LPDIRECT3DSURFACE8 iface);
625 /* internal Interfaces */
626 extern HRESULT WINAPI IDirect3DSurface8Impl_LoadTexture(LPDIRECT3DSURFACE8 iface, GLenum gl_target, GLenum gl_level);
627 extern HRESULT WINAPI IDirect3DSurface8Impl_SaveSnapshot(LPDIRECT3DSURFACE8 iface, const char* filename);
628 extern HRESULT WINAPI IDirect3DSurface8Impl_CleanDirtyRect(LPDIRECT3DSURFACE8 iface);
629 extern HRESULT WINAPI IDirect3DSurface8Impl_AddDirtyRect(LPDIRECT3DSURFACE8 iface, CONST RECT* pDirtyRect);
631 /* ------------------ */
632 /* IDirect3DResource8 */
633 /* ------------------ */
635 /*****************************************************************************
636 * Predeclare the interface implementation structures
638 extern ICOM_VTABLE(IDirect3DResource8) Direct3DResource8_Vtbl;
640 /*****************************************************************************
641 * IDirect3DResource8 implementation structure
643 struct IDirect3DResource8Impl
645 /* IUnknown fields */
646 ICOM_VFIELD(IDirect3DResource8);
647 DWORD ref;
649 /* IDirect3DResource8 fields */
650 IDirect3DDevice8Impl *Device;
651 D3DRESOURCETYPE ResourceType;
654 /* IUnknown: */
655 extern HRESULT WINAPI IDirect3DResource8Impl_QueryInterface(LPDIRECT3DRESOURCE8 iface,REFIID refiid,LPVOID *obj);
656 extern ULONG WINAPI IDirect3DResource8Impl_AddRef(LPDIRECT3DRESOURCE8 iface);
657 extern ULONG WINAPI IDirect3DResource8Impl_Release(LPDIRECT3DRESOURCE8 iface);
659 /* IDirect3DResource8: */
660 extern HRESULT WINAPI IDirect3DResource8Impl_GetDevice(LPDIRECT3DRESOURCE8 iface, IDirect3DDevice8** ppDevice);
661 extern HRESULT WINAPI IDirect3DResource8Impl_SetPrivateData(LPDIRECT3DRESOURCE8 iface, REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags);
662 extern HRESULT WINAPI IDirect3DResource8Impl_GetPrivateData(LPDIRECT3DRESOURCE8 iface, REFGUID refguid, void* pData, DWORD* pSizeOfData);
663 extern HRESULT WINAPI IDirect3DResource8Impl_FreePrivateData(LPDIRECT3DRESOURCE8 iface, REFGUID refguid);
664 extern DWORD WINAPI IDirect3DResource8Impl_SetPriority(LPDIRECT3DRESOURCE8 iface, DWORD PriorityNew);
665 extern DWORD WINAPI IDirect3DResource8Impl_GetPriority(LPDIRECT3DRESOURCE8 iface);
666 extern void WINAPI IDirect3DResource8Impl_PreLoad(LPDIRECT3DRESOURCE8 iface);
667 extern D3DRESOURCETYPE WINAPI IDirect3DResource8Impl_GetType(LPDIRECT3DRESOURCE8 iface);
669 /* internal Interfaces */
670 extern D3DPOOL WINAPI IDirect3DResource8Impl_GetPool(LPDIRECT3DRESOURCE8 iface);
673 /* ---------------------- */
674 /* IDirect3DVertexBuffer8 */
675 /* ---------------------- */
677 /*****************************************************************************
678 * Predeclare the interface implementation structures
680 extern ICOM_VTABLE(IDirect3DVertexBuffer8) Direct3DVertexBuffer8_Vtbl;
682 /*****************************************************************************
683 * IDirect3DVertexBuffer8 implementation structure
685 struct IDirect3DVertexBuffer8Impl
687 /* IUnknown fields */
688 ICOM_VFIELD(IDirect3DVertexBuffer8);
689 DWORD ref;
691 /* IDirect3DResource8 fields */
692 IDirect3DDevice8Impl *Device;
693 D3DRESOURCETYPE ResourceType;
695 /* IDirect3DVertexBuffer8 fields */
696 BYTE *allocatedMemory;
697 D3DVERTEXBUFFER_DESC currentDesc;
700 /* IUnknown: */
701 extern HRESULT WINAPI IDirect3DVertexBuffer8Impl_QueryInterface(LPDIRECT3DVERTEXBUFFER8 iface,REFIID refiid,LPVOID *obj);
702 extern ULONG WINAPI IDirect3DVertexBuffer8Impl_AddRef(LPDIRECT3DVERTEXBUFFER8 iface);
703 extern ULONG WINAPI IDirect3DVertexBuffer8Impl_Release(LPDIRECT3DVERTEXBUFFER8 iface);
705 /* IDirect3DVertexBuffer8: (Inherited from IDirect3DResource8) */
706 extern HRESULT WINAPI IDirect3DVertexBuffer8Impl_GetDevice(LPDIRECT3DVERTEXBUFFER8 iface, IDirect3DDevice8** ppDevice);
707 extern HRESULT WINAPI IDirect3DVertexBuffer8Impl_SetPrivateData(LPDIRECT3DVERTEXBUFFER8 iface, REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags);
708 extern HRESULT WINAPI IDirect3DVertexBuffer8Impl_GetPrivateData(LPDIRECT3DVERTEXBUFFER8 iface, REFGUID refguid, void* pData, DWORD* pSizeOfData);
709 extern HRESULT WINAPI IDirect3DVertexBuffer8Impl_FreePrivateData(LPDIRECT3DVERTEXBUFFER8 iface, REFGUID refguid);
710 extern DWORD WINAPI IDirect3DVertexBuffer8Impl_SetPriority(LPDIRECT3DVERTEXBUFFER8 iface, DWORD PriorityNew);
711 extern DWORD WINAPI IDirect3DVertexBuffer8Impl_GetPriority(LPDIRECT3DVERTEXBUFFER8 iface);
712 extern void WINAPI IDirect3DVertexBuffer8Impl_PreLoad(LPDIRECT3DVERTEXBUFFER8 iface);
713 extern D3DRESOURCETYPE WINAPI IDirect3DVertexBuffer8Impl_GetType(LPDIRECT3DVERTEXBUFFER8 iface);
715 /* IDirect3DVertexBuffer8: */
716 extern HRESULT WINAPI IDirect3DVertexBuffer8Impl_Lock(LPDIRECT3DVERTEXBUFFER8 iface, UINT OffsetToLock, UINT SizeToLock, BYTE** ppbData, DWORD Flags);
717 extern HRESULT WINAPI IDirect3DVertexBuffer8Impl_Unlock(LPDIRECT3DVERTEXBUFFER8 iface);
718 extern HRESULT WINAPI IDirect3DVertexBuffer8Impl_GetDesc(LPDIRECT3DVERTEXBUFFER8 iface, D3DVERTEXBUFFER_DESC *pDesc);
721 /* --------------------- */
722 /* IDirect3DIndexBuffer8 */
723 /* --------------------- */
725 /*****************************************************************************
726 * Predeclare the interface implementation structures
728 extern ICOM_VTABLE(IDirect3DIndexBuffer8) Direct3DIndexBuffer8_Vtbl;
730 /*****************************************************************************
731 * IDirect3DIndexBuffer8 implementation structure
733 struct IDirect3DIndexBuffer8Impl
735 /* IUnknown fields */
736 ICOM_VFIELD(IDirect3DIndexBuffer8);
737 DWORD ref;
739 /* IDirect3DResource8 fields */
740 IDirect3DDevice8Impl *Device;
741 D3DRESOURCETYPE ResourceType;
743 /* IDirect3DIndexBuffer8 fields */
744 void *allocatedMemory;
745 D3DINDEXBUFFER_DESC currentDesc;
748 /* IUnknown: */
749 extern HRESULT WINAPI IDirect3DIndexBuffer8Impl_QueryInterface(LPDIRECT3DINDEXBUFFER8 iface,REFIID refiid,LPVOID *obj);
750 extern ULONG WINAPI IDirect3DIndexBuffer8Impl_AddRef(LPDIRECT3DINDEXBUFFER8 iface);
751 extern ULONG WINAPI IDirect3DIndexBuffer8Impl_Release(LPDIRECT3DINDEXBUFFER8 iface);
753 /* IDirect3DIndexBuffer8: (Inherited from IDirect3DResource8) */
754 extern HRESULT WINAPI IDirect3DIndexBuffer8Impl_GetDevice(LPDIRECT3DINDEXBUFFER8 iface, IDirect3DDevice8** ppDevice);
755 extern HRESULT WINAPI IDirect3DIndexBuffer8Impl_SetPrivateData(LPDIRECT3DINDEXBUFFER8 iface, REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags);
756 extern HRESULT WINAPI IDirect3DIndexBuffer8Impl_GetPrivateData(LPDIRECT3DINDEXBUFFER8 iface, REFGUID refguid, void* pData, DWORD* pSizeOfData);
757 extern HRESULT WINAPI IDirect3DIndexBuffer8Impl_FreePrivateData(LPDIRECT3DINDEXBUFFER8 iface, REFGUID refguid);
758 extern DWORD WINAPI IDirect3DIndexBuffer8Impl_SetPriority(LPDIRECT3DINDEXBUFFER8 iface, DWORD PriorityNew);
759 extern DWORD WINAPI IDirect3DIndexBuffer8Impl_GetPriority(LPDIRECT3DINDEXBUFFER8 iface);
760 extern void WINAPI IDirect3DIndexBuffer8Impl_PreLoad(LPDIRECT3DINDEXBUFFER8 iface);
761 extern D3DRESOURCETYPE WINAPI IDirect3DIndexBuffer8Impl_GetType(LPDIRECT3DINDEXBUFFER8 iface);
763 /* IDirect3DIndexBuffer8: */
764 extern HRESULT WINAPI IDirect3DIndexBuffer8Impl_Lock(LPDIRECT3DINDEXBUFFER8 iface, UINT OffsetToLock, UINT SizeToLock, BYTE** ppbData, DWORD Flags);
765 extern HRESULT WINAPI IDirect3DIndexBuffer8Impl_Unlock(LPDIRECT3DINDEXBUFFER8 iface);
766 extern HRESULT WINAPI IDirect3DIndexBuffer8Impl_GetDesc(LPDIRECT3DINDEXBUFFER8 iface, D3DINDEXBUFFER_DESC *pDesc);
769 /* --------------------- */
770 /* IDirect3DBaseTexture8 */
771 /* --------------------- */
773 /*****************************************************************************
774 * Predeclare the interface implementation structures
776 extern ICOM_VTABLE(IDirect3DBaseTexture8) Direct3DBaseTexture8_Vtbl;
778 /*****************************************************************************
779 * IDirect3DBaseTexture8 implementation structure
781 struct IDirect3DBaseTexture8Impl
783 /* IUnknown fields */
784 ICOM_VFIELD(IDirect3DBaseTexture8);
785 DWORD ref;
787 /* IDirect3DResource8 fields */
788 IDirect3DDevice8Impl *Device;
789 D3DRESOURCETYPE ResourceType;
791 /* IDirect3DBaseTexture8 fields */
792 BOOL Dirty;
793 D3DFORMAT format;
794 UINT levels;
796 *BOOL isManaged;
797 *DWORD lod;
801 /* IUnknown: */
802 extern HRESULT WINAPI IDirect3DBaseTexture8Impl_QueryInterface(LPDIRECT3DBASETEXTURE8 iface,REFIID refiid,LPVOID *obj);
803 extern ULONG WINAPI IDirect3DBaseTexture8Impl_AddRef(LPDIRECT3DBASETEXTURE8 iface);
804 extern ULONG WINAPI IDirect3DBaseTexture8Impl_Release(LPDIRECT3DBASETEXTURE8 iface);
806 /* IDirect3DBaseTexture8: (Inherited from IDirect3DResource8) */
807 extern HRESULT WINAPI IDirect3DBaseTexture8Impl_GetDevice(LPDIRECT3DBASETEXTURE8 iface, IDirect3DDevice8** ppDevice);
808 extern HRESULT WINAPI IDirect3DBaseTexture8Impl_SetPrivateData(LPDIRECT3DBASETEXTURE8 iface, REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags);
809 extern HRESULT WINAPI IDirect3DBaseTexture8Impl_GetPrivateData(LPDIRECT3DBASETEXTURE8 iface, REFGUID refguid, void* pData, DWORD* pSizeOfData);
810 extern HRESULT WINAPI IDirect3DBaseTexture8Impl_FreePrivateData(LPDIRECT3DBASETEXTURE8 iface, REFGUID refguid);
811 extern DWORD WINAPI IDirect3DBaseTexture8Impl_SetPriority(LPDIRECT3DBASETEXTURE8 iface, DWORD PriorityNew);
812 extern DWORD WINAPI IDirect3DBaseTexture8Impl_GetPriority(LPDIRECT3DBASETEXTURE8 iface);
813 extern void WINAPI IDirect3DBaseTexture8Impl_PreLoad(LPDIRECT3DBASETEXTURE8 iface);
814 extern D3DRESOURCETYPE WINAPI IDirect3DBaseTexture8Impl_GetType(LPDIRECT3DBASETEXTURE8 iface);
816 /* IDirect3DBaseTexture8: */
817 extern DWORD WINAPI IDirect3DBaseTexture8Impl_SetLOD(LPDIRECT3DBASETEXTURE8 iface, DWORD LODNew);
818 extern DWORD WINAPI IDirect3DBaseTexture8Impl_GetLOD(LPDIRECT3DBASETEXTURE8 iface);
819 extern DWORD WINAPI IDirect3DBaseTexture8Impl_GetLevelCount(LPDIRECT3DBASETEXTURE8 iface);
821 /* internal Interfaces */
822 extern BOOL WINAPI IDirect3DBaseTexture8Impl_IsDirty(LPDIRECT3DBASETEXTURE8 iface);
823 extern BOOL WINAPI IDirect3DBaseTexture8Impl_SetDirty(LPDIRECT3DBASETEXTURE8 iface, BOOL dirty);
826 /* --------------------- */
827 /* IDirect3DCubeTexture8 */
828 /* --------------------- */
830 /*****************************************************************************
831 * Predeclare the interface implementation structures
833 extern ICOM_VTABLE(IDirect3DCubeTexture8) Direct3DCubeTexture8_Vtbl;
835 /*****************************************************************************
836 * IDirect3DCubeTexture8 implementation structure
838 struct IDirect3DCubeTexture8Impl
840 /* IUnknown fields */
841 ICOM_VFIELD(IDirect3DCubeTexture8);
842 DWORD ref;
844 /* IDirect3DResource8 fields */
845 IDirect3DDevice8Impl *Device;
846 D3DRESOURCETYPE ResourceType;
848 /* IDirect3DBaseTexture8 fields */
849 BOOL Dirty;
850 D3DFORMAT format;
851 UINT levels;
853 /* IDirect3DCubeTexture8 fields */
854 UINT edgeLength;
855 DWORD usage;
857 IDirect3DSurface8Impl *surfaces[6][MAX_LEVELS];
860 /* IUnknown: */
861 extern HRESULT WINAPI IDirect3DCubeTexture8Impl_QueryInterface(LPDIRECT3DCUBETEXTURE8 iface,REFIID refiid,LPVOID *obj);
862 extern ULONG WINAPI IDirect3DCubeTexture8Impl_AddRef(LPDIRECT3DCUBETEXTURE8 iface);
863 extern ULONG WINAPI IDirect3DCubeTexture8Impl_Release(LPDIRECT3DCUBETEXTURE8 iface);
865 /* IDirect3DCubeTexture8: (Inherited from IDirect3DResource8) */
866 extern HRESULT WINAPI IDirect3DCubeTexture8Impl_GetDevice(LPDIRECT3DCUBETEXTURE8 iface, IDirect3DDevice8** ppDevice);
867 extern HRESULT WINAPI IDirect3DCubeTexture8Impl_SetPrivateData(LPDIRECT3DCUBETEXTURE8 iface, REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags);
868 extern HRESULT WINAPI IDirect3DCubeTexture8Impl_GetPrivateData(LPDIRECT3DCUBETEXTURE8 iface, REFGUID refguid, void* pData, DWORD* pSizeOfData);
869 extern HRESULT WINAPI IDirect3DCubeTexture8Impl_FreePrivateData(LPDIRECT3DCUBETEXTURE8 iface, REFGUID refguid);
870 extern DWORD WINAPI IDirect3DCubeTexture8Impl_SetPriority(LPDIRECT3DCUBETEXTURE8 iface, DWORD PriorityNew);
871 extern DWORD WINAPI IDirect3DCubeTexture8Impl_GetPriority(LPDIRECT3DCUBETEXTURE8 iface);
872 extern void WINAPI IDirect3DCubeTexture8Impl_PreLoad(LPDIRECT3DCUBETEXTURE8 iface);
873 extern D3DRESOURCETYPE WINAPI IDirect3DCubeTexture8Impl_GetType(LPDIRECT3DCUBETEXTURE8 iface);
875 /* IDirect3DCubeTexture8: (Inherited from IDirect3DBaseTexture8) */
876 extern DWORD WINAPI IDirect3DCubeTexture8Impl_SetLOD(LPDIRECT3DCUBETEXTURE8 iface, DWORD LODNew);
877 extern DWORD WINAPI IDirect3DCubeTexture8Impl_GetLOD(LPDIRECT3DCUBETEXTURE8 iface);
878 extern DWORD WINAPI IDirect3DCubeTexture8Impl_GetLevelCount(LPDIRECT3DCUBETEXTURE8 iface);
880 /* IDirect3DCubeTexture8 */
881 extern HRESULT WINAPI IDirect3DCubeTexture8Impl_GetLevelDesc(LPDIRECT3DCUBETEXTURE8 iface, UINT Level, D3DSURFACE_DESC* pDesc);
882 extern HRESULT WINAPI IDirect3DCubeTexture8Impl_GetCubeMapSurface(LPDIRECT3DCUBETEXTURE8 iface, D3DCUBEMAP_FACES FaceType, UINT Level, IDirect3DSurface8** ppCubeMapSurface);
883 extern HRESULT WINAPI IDirect3DCubeTexture8Impl_LockRect(LPDIRECT3DCUBETEXTURE8 iface, D3DCUBEMAP_FACES FaceType, UINT Level, D3DLOCKED_RECT* pLockedRect, CONST RECT* pRect, DWORD Flags);
884 extern HRESULT WINAPI IDirect3DCubeTexture8Impl_UnlockRect(LPDIRECT3DCUBETEXTURE8 iface, D3DCUBEMAP_FACES FaceType, UINT Level);
885 extern HRESULT WINAPI IDirect3DCubeTexture8Impl_AddDirtyRect(LPDIRECT3DCUBETEXTURE8 iface, D3DCUBEMAP_FACES FaceType, CONST RECT* pDirtyRect);
888 /* ----------------- */
889 /* IDirect3DTexture8 */
890 /* ----------------- */
892 /*****************************************************************************
893 * Predeclare the interface implementation structures
895 extern ICOM_VTABLE(IDirect3DTexture8) Direct3DTexture8_Vtbl;
897 /*****************************************************************************
898 * IDirect3DTexture8 implementation structure
900 struct IDirect3DTexture8Impl
902 /* IUnknown fields */
903 ICOM_VFIELD(IDirect3DTexture8);
904 DWORD ref;
906 /* IDirect3DResourc8 fields */
907 IDirect3DDevice8Impl *Device;
908 D3DRESOURCETYPE ResourceType;
910 /* IDirect3DBaseTexture8 fields */
911 BOOL Dirty;
912 D3DFORMAT format;
913 UINT levels;
915 /* IDirect3DTexture8 fields */
916 UINT width;
917 UINT height;
918 DWORD usage;
920 IDirect3DSurface8Impl *surfaces[MAX_LEVELS];
923 /* IUnknown: */
924 extern HRESULT WINAPI IDirect3DTexture8Impl_QueryInterface(LPDIRECT3DTEXTURE8 iface,REFIID refiid,LPVOID *obj);
925 extern ULONG WINAPI IDirect3DTexture8Impl_AddRef(LPDIRECT3DTEXTURE8 iface);
926 extern ULONG WINAPI IDirect3DTexture8Impl_Release(LPDIRECT3DTEXTURE8 iface);
928 /* IDirect3DTexture8: (Inherited from IDirect3DResource8) */
929 extern HRESULT WINAPI IDirect3DTexture8Impl_GetDevice(LPDIRECT3DTEXTURE8 iface, IDirect3DDevice8** ppDevice);
930 extern HRESULT WINAPI IDirect3DTexture8Impl_SetPrivateData(LPDIRECT3DTEXTURE8 iface, REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags);
931 extern HRESULT WINAPI IDirect3DTexture8Impl_GetPrivateData(LPDIRECT3DTEXTURE8 iface, REFGUID refguid, void* pData, DWORD* pSizeOfData);
932 extern HRESULT WINAPI IDirect3DTexture8Impl_FreePrivateData(LPDIRECT3DTEXTURE8 iface, REFGUID refguid);
933 extern DWORD WINAPI IDirect3DTexture8Impl_SetPriority(LPDIRECT3DTEXTURE8 iface, DWORD PriorityNew);
934 extern DWORD WINAPI IDirect3DTexture8Impl_GetPriority(LPDIRECT3DTEXTURE8 iface);
935 extern void WINAPI IDirect3DTexture8Impl_PreLoad(LPDIRECT3DTEXTURE8 iface);
936 extern D3DRESOURCETYPE WINAPI IDirect3DTexture8Impl_GetType(LPDIRECT3DTEXTURE8 iface);
938 /* IDirect3DTexture8: (Inherited from IDirect3DBaseTexture8) */
939 extern DWORD WINAPI IDirect3DTexture8Impl_SetLOD(LPDIRECT3DTEXTURE8 iface, DWORD LODNew);
940 extern DWORD WINAPI IDirect3DTexture8Impl_GetLOD(LPDIRECT3DTEXTURE8 iface);
941 extern DWORD WINAPI IDirect3DTexture8Impl_GetLevelCount(LPDIRECT3DTEXTURE8 iface);
943 /* IDirect3DTexture8: */
944 extern HRESULT WINAPI IDirect3DTexture8Impl_GetLevelDesc(LPDIRECT3DTEXTURE8 iface, UINT Level, D3DSURFACE_DESC* pDesc);
945 extern HRESULT WINAPI IDirect3DTexture8Impl_GetSurfaceLevel(LPDIRECT3DTEXTURE8 iface, UINT Level, IDirect3DSurface8** ppSurfaceLevel);
946 extern HRESULT WINAPI IDirect3DTexture8Impl_LockRect(LPDIRECT3DTEXTURE8 iface, UINT Level, D3DLOCKED_RECT* pLockedRect, CONST RECT* pRect, DWORD Flags);
947 extern HRESULT WINAPI IDirect3DTexture8Impl_UnlockRect(LPDIRECT3DTEXTURE8 iface, UINT Level);
948 extern HRESULT WINAPI IDirect3DTexture8Impl_AddDirtyRect(LPDIRECT3DTEXTURE8 iface, CONST RECT* pDirtyRect);
951 /* ----------------------- */
952 /* IDirect3DVolumeTexture8 */
953 /* ----------------------- */
955 /*****************************************************************************
956 * Predeclare the interface implementation structures
958 extern ICOM_VTABLE(IDirect3DVolumeTexture8) Direct3DVolumeTexture8_Vtbl;
960 /*****************************************************************************
961 * IDirect3DVolumeTexture8 implementation structure
963 struct IDirect3DVolumeTexture8Impl
965 /* IUnknown fields */
966 ICOM_VFIELD(IDirect3DVolumeTexture8);
967 DWORD ref;
969 /* IDirect3DResource8 fields */
970 IDirect3DDevice8Impl *Device;
971 D3DRESOURCETYPE ResourceType;
973 /* IDirect3DBaseTexture8 fields */
974 BOOL Dirty;
975 D3DFORMAT format;
976 UINT levels;
978 /* IDirect3DVolumeTexture8 fields */
979 UINT width;
980 UINT height;
981 UINT depth;
982 DWORD usage;
984 IDirect3DVolume8Impl *volumes[MAX_LEVELS];
987 /* IUnknown: */
988 extern HRESULT WINAPI IDirect3DVolumeTexture8Impl_QueryInterface(LPDIRECT3DVOLUMETEXTURE8 iface,REFIID refiid,LPVOID *obj);
989 extern ULONG WINAPI IDirect3DVolumeTexture8Impl_AddRef(LPDIRECT3DVOLUMETEXTURE8 iface);
990 extern ULONG WINAPI IDirect3DVolumeTexture8Impl_Release(LPDIRECT3DVOLUMETEXTURE8 iface);
992 /* IDirect3DVolumeTexture8: (Inherited from IDirect3DResource8) */
993 extern HRESULT WINAPI IDirect3DVolumeTexture8Impl_GetDevice(LPDIRECT3DVOLUMETEXTURE8 iface, IDirect3DDevice8** ppDevice);
994 extern HRESULT WINAPI IDirect3DVolumeTexture8Impl_SetPrivateData(LPDIRECT3DVOLUMETEXTURE8 iface, REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags);
995 extern HRESULT WINAPI IDirect3DVolumeTexture8Impl_GetPrivateData(LPDIRECT3DVOLUMETEXTURE8 iface, REFGUID refguid, void* pData, DWORD* pSizeOfData);
996 extern HRESULT WINAPI IDirect3DVolumeTexture8Impl_FreePrivateData(LPDIRECT3DVOLUMETEXTURE8 iface, REFGUID refguid);
997 extern DWORD WINAPI IDirect3DVolumeTexture8Impl_SetPriority(LPDIRECT3DVOLUMETEXTURE8 iface, DWORD PriorityNew);
998 extern DWORD WINAPI IDirect3DVolumeTexture8Impl_GetPriority(LPDIRECT3DVOLUMETEXTURE8 iface);
999 extern void WINAPI IDirect3DVolumeTexture8Impl_PreLoad(LPDIRECT3DVOLUMETEXTURE8 iface);
1000 extern D3DRESOURCETYPE WINAPI IDirect3DVolumeTexture8Impl_GetType(LPDIRECT3DVOLUMETEXTURE8 iface);
1002 /* IDirect3DVolumeTexture8: (Inherited from IDirect3DBaseTexture8) */
1003 extern DWORD WINAPI IDirect3DVolumeTexture8Impl_SetLOD(LPDIRECT3DVOLUMETEXTURE8 iface, DWORD LODNew);
1004 extern DWORD WINAPI IDirect3DVolumeTexture8Impl_GetLOD(LPDIRECT3DVOLUMETEXTURE8 iface);
1005 extern DWORD WINAPI IDirect3DVolumeTexture8Impl_GetLevelCount(LPDIRECT3DVOLUMETEXTURE8 iface);
1007 /* IDirect3DVolumeTexture8: */
1008 extern HRESULT WINAPI IDirect3DVolumeTexture8Impl_GetLevelDesc(LPDIRECT3DVOLUMETEXTURE8 iface, UINT Level, D3DVOLUME_DESC *pDesc);
1009 extern HRESULT WINAPI IDirect3DVolumeTexture8Impl_GetVolumeLevel(LPDIRECT3DVOLUMETEXTURE8 iface, UINT Level, IDirect3DVolume8** ppVolumeLevel);
1010 extern HRESULT WINAPI IDirect3DVolumeTexture8Impl_LockBox(LPDIRECT3DVOLUMETEXTURE8 iface, UINT Level, D3DLOCKED_BOX* pLockedVolume, CONST D3DBOX* pBox, DWORD Flags);
1011 extern HRESULT WINAPI IDirect3DVolumeTexture8Impl_UnlockBox(LPDIRECT3DVOLUMETEXTURE8 iface, UINT Level);
1012 extern HRESULT WINAPI IDirect3DVolumeTexture8Impl_AddDirtyBox(LPDIRECT3DVOLUMETEXTURE8 iface, CONST D3DBOX* pDirtyBox);
1015 /* ==============================================================================
1016 Private interfactes: beginning of cleaning/splitting for HAL and d3d9 support
1017 ============================================================================== */
1019 /* State Block for Begin/End/Capture/Create/Apply State Block */
1020 /* Note: Very long winded but I do not believe gl Lists will */
1021 /* resolve everything we need, so doing it manually for now */
1022 typedef struct SAVEDSTATES {
1023 BOOL lightEnable[MAX_ACTIVE_LIGHTS];
1024 BOOL Indices;
1025 BOOL lights[MAX_ACTIVE_LIGHTS];
1026 BOOL material;
1027 BOOL stream_source[MAX_STREAMS];
1028 BOOL textures[8];
1029 BOOL transform[HIGHEST_TRANSFORMSTATE];
1030 BOOL viewport;
1031 BOOL vertexShader;
1032 BOOL vertexShaderConstant;
1033 BOOL vertexShaderDecl;
1034 BOOL pixelShader;
1035 BOOL pixelShaderConstant;
1036 BOOL renderstate[HIGHEST_RENDER_STATE];
1037 BOOL texture_state[8][HIGHEST_TEXTURE_STATE];
1038 BOOL clipplane[MAX_CLIPPLANES];
1039 } SAVEDSTATES;
1042 /* ----------------------- */
1043 /* IDirect3DStateBlockImpl */
1044 /* ----------------------- */
1046 /*****************************************************************************
1047 * Predeclare the interface implementation structures
1049 /*extern ICOM_VTABLE(IDirect3DStateBlock9) Direct3DStateBlock9_Vtbl;*/
1051 /*****************************************************************************
1052 * IDirect3DStateBlock implementation structure
1054 struct IDirect3DStateBlockImpl {
1055 /* IUnknown fields */
1056 /*ICOM_VFIELD(IDirect3DStateBlock9);*/
1057 DWORD ref;
1059 /* The device, to be replaced by a IDirect3DDeviceImpl */
1060 IDirect3DDevice8Impl* device;
1062 D3DSTATEBLOCKTYPE blockType;
1064 SAVEDSTATES Changed;
1065 SAVEDSTATES Set;
1067 /* Light Enable */
1068 BOOL lightEnable[MAX_ACTIVE_LIGHTS];
1070 /* ClipPlane */
1071 double clipplane[MAX_CLIPPLANES][4];
1073 /* Stream Source */
1074 UINT stream_stride[MAX_STREAMS];
1075 IDirect3DVertexBuffer8 *stream_source[MAX_STREAMS];
1076 BOOL streamIsUP;
1078 /* Indices */
1079 IDirect3DIndexBuffer8* pIndexData;
1080 UINT baseVertexIndex;
1082 /* Texture */
1083 IDirect3DBaseTexture8 *textures[8];
1084 int textureDimensions[8];
1085 /* Texture State Stage */
1086 DWORD texture_state[8][HIGHEST_TEXTURE_STATE];
1088 /* Lights */
1089 D3DLIGHT8 lights[MAX_ACTIVE_LIGHTS];
1091 /* Material */
1092 D3DMATERIAL8 material;
1094 /* RenderState */
1095 DWORD renderstate[HIGHEST_RENDER_STATE];
1097 /* Transform */
1098 D3DMATRIX transforms[HIGHEST_TRANSFORMSTATE];
1100 /* ViewPort */
1101 D3DVIEWPORT8 viewport;
1103 /* Vertex Shader */
1104 DWORD VertexShader;
1106 /* Vertex Shader Declaration */
1107 IDirect3DVertexShaderDeclarationImpl* vertexShaderDecl;
1109 /* Pixel Shader */
1110 DWORD PixelShader;
1112 /* Indexed Vertex Blending */
1113 D3DVERTEXBLENDFLAGS vertex_blend;
1114 FLOAT tween_factor;
1116 /* Vertex Shader Constant */
1117 D3DSHADERVECTOR vertexShaderConstant[D3D8_VSHADER_MAX_CONSTANTS];
1118 /* Pixel Shader Constant */
1119 D3DSHADERVECTOR pixelShaderConstant[D3D8_PSHADER_MAX_CONSTANTS];
1122 /* exported Interfaces */
1123 /* internal Interfaces */
1124 /* temporary internal Interfaces */
1125 extern HRESULT WINAPI IDirect3DDeviceImpl_InitStartupStateBlock(IDirect3DDevice8Impl* This);
1126 extern HRESULT WINAPI IDirect3DDeviceImpl_CreateStateBlock(IDirect3DDevice8Impl* This, D3DSTATEBLOCKTYPE Type, IDirect3DStateBlockImpl** ppStateBlock);
1127 extern HRESULT WINAPI IDirect3DDeviceImpl_DeleteStateBlock(IDirect3DDevice8Impl* This, IDirect3DStateBlockImpl* pSB);
1128 extern HRESULT WINAPI IDirect3DDeviceImpl_BeginStateBlock(IDirect3DDevice8Impl* This);
1129 extern HRESULT WINAPI IDirect3DDeviceImpl_EndStateBlock(IDirect3DDevice8Impl* This, IDirect3DStateBlockImpl** ppStateBlock);
1130 extern HRESULT WINAPI IDirect3DDeviceImpl_ApplyStateBlock(IDirect3DDevice8Impl* iface, IDirect3DStateBlockImpl* pSB);
1131 extern HRESULT WINAPI IDirect3DDeviceImpl_CaptureStateBlock(IDirect3DDevice8Impl* This, IDirect3DStateBlockImpl* pSB);
1133 /* ------------------------------------ */
1134 /* IDirect3DVertexShaderDeclarationImpl */
1135 /* ------------------------------------ */
1137 /*****************************************************************************
1138 * Predeclare the interface implementation structures
1140 /*extern ICOM_VTABLE(IDirect3DVertexShaderDeclaration9) Direct3DVertexShaderDeclaration9_Vtbl;*/
1142 /*****************************************************************************
1143 * IDirect3DVertexShaderDeclaration implementation structure
1145 struct IDirect3DVertexShaderDeclarationImpl {
1146 /* IUnknown fields */
1147 /*ICOM_VFIELD(IDirect3DVertexShaderDeclaration9);*/
1148 DWORD ref;
1150 /* The device, to be replaced by a IDirect3DDeviceImpl */
1151 IDirect3DDevice8Impl* device;
1153 /** precomputed fvf if simple declaration */
1154 DWORD fvf[MAX_STREAMS];
1155 DWORD allFVF;
1157 /** dx8 compatible Declaration fields */
1158 DWORD* pDeclaration8;
1159 DWORD declaration8Length;
1162 /* exported Interfaces */
1163 extern HRESULT WINAPI IDirect3DVertexShaderDeclarationImpl_GetDeclaration8(IDirect3DVertexShaderDeclarationImpl* This, DWORD* pData, UINT* pSizeOfData);
1164 /*extern HRESULT IDirect3DVertexShaderDeclarationImpl_GetDeclaration9(IDirect3DVertexShaderDeclarationImpl* This, D3DVERTEXELEMENT9* pData, UINT* pNumElements);*/
1165 /* internal Interfaces */
1166 /* temporary internal Interfaces */
1167 extern HRESULT WINAPI IDirect3DDeviceImpl_CreateVertexShaderDeclaration8(IDirect3DDevice8Impl* This, CONST DWORD* pDeclaration8, IDirect3DVertexShaderDeclarationImpl** ppVertexShaderDecl);
1170 /* ------------------------- */
1171 /* IDirect3DVertexShaderImpl */
1172 /* ------------------------- */
1174 /*****************************************************************************
1175 * Predeclare the interface implementation structures
1177 /*extern ICOM_VTABLE(IDirect3DVertexShader9) Direct3DVertexShader9_Vtbl;*/
1179 /*****************************************************************************
1180 * IDirect3DVertexShader implementation structure
1182 struct IDirect3DVertexShaderImpl {
1183 /*ICOM_VFIELD(IDirect3DVertexShader9);*/
1184 DWORD ref;
1186 /* The device, to be replaced by a IDirect3DDeviceImpl */
1187 IDirect3DDevice8Impl* device;
1189 DWORD* function;
1190 UINT functionLength;
1191 DWORD usage; /* 0 || D3DUSAGE_SOFTWAREPROCESSING */
1192 DWORD version;
1193 /* run time datas */
1194 VSHADERDATA8* data;
1195 VSHADERINPUTDATA8 input;
1196 VSHADEROUTPUTDATA8 output;
1199 /* exported Interfaces */
1200 extern HRESULT WINAPI IDirect3DVertexShaderImpl_GetFunction(IDirect3DVertexShaderImpl* This, VOID* pData, UINT* pSizeOfData);
1201 /*extern HRESULT WINAPI IDirect3DVertexShaderImpl_SetConstantB(IDirect3DVertexShaderImpl* This, UINT StartRegister, CONST BOOL* pConstantData, UINT BoolCount);*/
1202 /*extern HRESULT WINAPI IDirect3DVertexShaderImpl_SetConstantI(IDirect3DVertexShaderImpl* This, UINT StartRegister, CONST INT* pConstantData, UINT Vector4iCount);*/
1203 extern HRESULT WINAPI IDirect3DVertexShaderImpl_SetConstantF(IDirect3DVertexShaderImpl* This, UINT StartRegister, CONST FLOAT* pConstantData, UINT Vector4fCount);
1204 /*extern HRESULT WINAPI IDirect3DVertexShaderImpl_GetConstantB(IDirect3DVertexShaderImpl* This, UINT StartRegister, BOOL* pConstantData, UINT BoolCount);*/
1205 /*extern HRESULT WINAPI IDirect3DVertexShaderImpl_GetConstantI(IDirect3DVertexShaderImpl* This, UINT StartRegister, INT* pConstantData, UINT Vector4iCount);*/
1206 extern HRESULT WINAPI IDirect3DVertexShaderImpl_GetConstantF(IDirect3DVertexShaderImpl* This, UINT StartRegister, FLOAT* pConstantData, UINT Vector4fCount);
1207 /* internal Interfaces */
1208 extern DWORD WINAPI IDirect3DVertexShaderImpl_GetVersion(IDirect3DVertexShaderImpl* This);
1209 extern HRESULT WINAPI IDirect3DVertexShaderImpl_ExecuteSW(IDirect3DVertexShaderImpl* This, VSHADERINPUTDATA8* input, VSHADEROUTPUTDATA8* output);
1210 /* temporary internal Interfaces */
1211 extern HRESULT WINAPI IDirect3DDeviceImpl_CreateVertexShader(IDirect3DDevice8Impl* This, CONST DWORD* pFunction, DWORD Usage, IDirect3DVertexShaderImpl** ppVertexShader);
1212 extern HRESULT WINAPI IDirect3DDeviceImpl_FillVertexShaderInput(IDirect3DDevice8Impl* This, IDirect3DVertexShaderImpl* vshader, DWORD SkipnStrides);
1214 /* ------------------------ */
1215 /* IDirect3DPixelShaderImpl */
1216 /* ------------------------ */
1218 /*****************************************************************************
1219 * Predeclare the interface implementation structures
1221 /*extern ICOM_VTABLE(IDirect3DPixelShader9) Direct3DPixelShader9_Vtbl;*/
1223 /*****************************************************************************
1224 * IDirect3DPixelShader implementation structure
1226 struct IDirect3DPixelShaderImpl {
1227 /*ICOM_VFIELD(IDirect3DPixelShader9);*/
1228 DWORD ref;
1230 /* The device, to be replaced by a IDirect3DDeviceImpl */
1231 IDirect3DDevice8Impl* device;
1233 DWORD* function;
1234 UINT functionLength;
1235 DWORD version;
1236 /* run time datas */
1237 PSHADERDATA8* data;
1238 PSHADERINPUTDATA8 input;
1239 PSHADEROUTPUTDATA8 output;
1242 /* exported Interfaces */
1243 extern HRESULT WINAPI IDirect3DPixelShaderImpl_GetFunction(IDirect3DPixelShaderImpl* This, VOID* pData, UINT* pSizeOfData);
1244 /* internal Interfaces */
1245 extern DWORD WINAPI IDirect3DPixelShaderImpl_GetVersion(IDirect3DPixelShaderImpl* This);
1246 /* temporary internal Interfaces */
1247 extern HRESULT WINAPI IDirect3DDeviceImpl_CreatePixelShader(IDirect3DDevice8Impl* This, CONST DWORD* pFunction, IDirect3DPixelShaderImpl** ppPixelShader);
1251 * Internals functions
1253 * to see how not defined it here
1255 void GetSrcAndOpFromValue(DWORD iValue, BOOL isAlphaArg, GLenum* source, GLenum* operand);
1256 void setupTextureStates(LPDIRECT3DDEVICE8 iface, DWORD Stage);
1257 void set_tex_op(LPDIRECT3DDEVICE8 iface, BOOL isAlpha, int Stage, D3DTEXTUREOP op, DWORD arg1, DWORD arg2, DWORD arg3);
1259 SHORT D3DFmtGetBpp(IDirect3DDevice8Impl* This, D3DFORMAT fmt);
1260 GLint D3DFmt2GLIntFmt(IDirect3DDevice8Impl* This, D3DFORMAT fmt);
1261 GLenum D3DFmt2GLFmt(IDirect3DDevice8Impl* This, D3DFORMAT fmt);
1262 GLenum D3DFmt2GLType(IDirect3DDevice8Impl* This, D3DFORMAT fmt);
1264 GLenum D3DFmt2GLDepthFmt(D3DFORMAT fmt);
1265 GLenum D3DFmt2GLDepthType(D3DFORMAT fmt);
1267 int D3DPrimitiveListGetVertexSize(D3DPRIMITIVETYPE PrimitiveType, int iNumPrim);
1268 int D3DPrimitive2GLenum(D3DPRIMITIVETYPE PrimitiveType);
1269 int D3DFVFGetSize(D3DFORMAT fvf);
1271 int SOURCEx_RGB_EXT(DWORD arg);
1272 int OPERANDx_RGB_EXT(DWORD arg);
1273 int SOURCEx_ALPHA_EXT(DWORD arg);
1274 int OPERANDx_ALPHA_EXT(DWORD arg);
1275 GLenum StencilOp(DWORD op);
1278 * Internals debug functions
1280 const char* debug_d3ddevicetype(D3DDEVTYPE devtype);
1281 const char* debug_d3dusage(DWORD usage);
1282 const char* debug_d3dformat(D3DFORMAT fmt);
1283 const char* debug_d3dressourcetype(D3DRESOURCETYPE res);
1284 const char* debug_d3dprimitivetype(D3DPRIMITIVETYPE PrimitiveType);
1285 const char* debug_d3dpool(D3DPOOL Pool);
1287 /* Some #defines for additional diagnostics */
1288 #if 0 /* NOTE: Must be 0 in cvs */
1289 /* To avoid having to get gigabytes of trace, the following can be compiled in, and at the start
1290 of each frame, a check is made for the existance of C:\D3DTRACE, and if if exists d3d trace
1291 is enabled, and if it doesnt exists it is disabled. */
1292 # define FRAME_DEBUGGING
1293 /* Adding in the SINGLE_FRAME_DEBUGGING gives a trace of just what makes up a single frame, before
1294 the file is deleted */
1295 # if 1
1296 # define SINGLE_FRAME_DEBUGGING
1297 # endif
1298 /* The following, when enabled, lets you see the makeup of the frame, by drawprimitive calls.
1299 A check is made for the existence of C:\D3DSHOWFRAME, and if it exists will write the
1300 contents of the back buffer into /tmp/backbuffer_* after each primitive array is drawn
1301 for a single frame. At the end of the frame, the file is deleted. */
1302 # if 1
1303 # define SHOW_FRAME_MAKEUP 1
1304 # endif
1305 extern BOOL isOn;
1306 extern BOOL isDumpingFrames;
1307 extern LONG primCounter;
1308 #endif
1310 /* Per-vertex trace: */
1311 #if 0 /* NOTE: Must be 0 in cvs */
1312 # define VTRACE(A) TRACE A
1313 #else
1314 # define VTRACE(A)
1315 #endif
1317 #define TRACE_VECTOR(name) TRACE( #name "=(%f, %f, %f, %f)\n", name.x, name.y, name.z, name.w);
1318 #define TRACE_STRIDED(sd,name) TRACE( #name "=(data:%p, stride:%ld, type:%ld)\n", sd->u.s.name.lpData, sd->u.s.name.dwStride, sd->u.s.name.dwType);
1320 #endif /* __WINE_D3DX8_PRIVATE_H */