- beginning of implementation of Direct3D2 (DX 5.0) and associated classes
[wine/multimedia.git] / graphics / d3dcommon.c
blob8fa6c8b3f2cb796b37b431f791d426e5efb0ef14
1 /* Direct3D Common functions
2 (c) 1998 Lionel ULMER
4 This file contains all common miscellaneous code that spans
5 different 'objects' */
7 #include "config.h"
8 #include "windows.h"
9 #include "wintypes.h"
10 #include "interfaces.h"
11 #include "ddraw.h"
12 #include "d3d.h"
13 #include "debug.h"
15 #include "d3d_private.h"
17 #ifdef HAVE_MESAGL
19 static void _dump_renderstate(D3DRENDERSTATETYPE type,
20 DWORD value) {
21 char *states[] = {
22 NULL,
23 "D3DRENDERSTATE_TEXTUREHANDLE",
24 "D3DRENDERSTATE_ANTIALIAS",
25 "D3DRENDERSTATE_TEXTUREADDRESS",
26 "D3DRENDERSTATE_TEXTUREPERSPECTIVE",
27 "D3DRENDERSTATE_WRAPU",
28 "D3DRENDERSTATE_WRAPV",
29 "D3DRENDERSTATE_ZENABLE",
30 "D3DRENDERSTATE_FILLMODE",
31 "D3DRENDERSTATE_SHADEMODE",
32 "D3DRENDERSTATE_LINEPATTERN",
33 "D3DRENDERSTATE_MONOENABLE",
34 "D3DRENDERSTATE_ROP2",
35 "D3DRENDERSTATE_PLANEMASK",
36 "D3DRENDERSTATE_ZWRITEENABLE",
37 "D3DRENDERSTATE_ALPHATESTENABLE",
38 "D3DRENDERSTATE_LASTPIXEL",
39 "D3DRENDERSTATE_TEXTUREMAG",
40 "D3DRENDERSTATE_TEXTUREMIN",
41 "D3DRENDERSTATE_SRCBLEND",
42 "D3DRENDERSTATE_DESTBLEND",
43 "D3DRENDERSTATE_TEXTUREMAPBLEND",
44 "D3DRENDERSTATE_CULLMODE",
45 "D3DRENDERSTATE_ZFUNC",
46 "D3DRENDERSTATE_ALPHAREF",
47 "D3DRENDERSTATE_ALPHAFUNC",
48 "D3DRENDERSTATE_DITHERENABLE",
49 "D3DRENDERSTATE_ALPHABLENDENABLE",
50 "D3DRENDERSTATE_FOGENABLE",
51 "D3DRENDERSTATE_SPECULARENABLE",
52 "D3DRENDERSTATE_ZVISIBLE",
53 "D3DRENDERSTATE_SUBPIXEL",
54 "D3DRENDERSTATE_SUBPIXELX",
55 "D3DRENDERSTATE_STIPPLEDALPHA",
56 "D3DRENDERSTATE_FOGCOLOR",
57 "D3DRENDERSTATE_FOGTABLEMODE",
58 "D3DRENDERSTATE_FOGTABLESTART",
59 "D3DRENDERSTATE_FOGTABLEEND",
60 "D3DRENDERSTATE_FOGTABLEDENSITY",
61 "D3DRENDERSTATE_STIPPLEENABLE",
62 "D3DRENDERSTATE_EDGEANTIALIAS",
63 "D3DRENDERSTATE_COLORKEYENABLE",
64 "D3DRENDERSTATE_BORDERCOLOR",
65 "D3DRENDERSTATE_TEXTUREADDRESSU",
66 "D3DRENDERSTATE_TEXTUREADDRESSV",
67 "D3DRENDERSTATE_MIPMAPLODBIAS",
68 "D3DRENDERSTATE_ZBIAS",
69 "D3DRENDERSTATE_RANGEFOGENABLE",
70 "D3DRENDERSTATE_ANISOTROPY",
71 "D3DRENDERSTATE_FLUSHBATCH",
72 "D3DRENDERSTATE_STIPPLEPATTERN00",
73 "D3DRENDERSTATE_STIPPLEPATTERN01",
74 "D3DRENDERSTATE_STIPPLEPATTERN02",
75 "D3DRENDERSTATE_STIPPLEPATTERN03",
76 "D3DRENDERSTATE_STIPPLEPATTERN04",
77 "D3DRENDERSTATE_STIPPLEPATTERN05",
78 "D3DRENDERSTATE_STIPPLEPATTERN06",
79 "D3DRENDERSTATE_STIPPLEPATTERN07",
80 "D3DRENDERSTATE_STIPPLEPATTERN08",
81 "D3DRENDERSTATE_STIPPLEPATTERN09",
82 "D3DRENDERSTATE_STIPPLEPATTERN10",
83 "D3DRENDERSTATE_STIPPLEPATTERN11",
84 "D3DRENDERSTATE_STIPPLEPATTERN12",
85 "D3DRENDERSTATE_STIPPLEPATTERN13",
86 "D3DRENDERSTATE_STIPPLEPATTERN14",
87 "D3DRENDERSTATE_STIPPLEPATTERN15",
88 "D3DRENDERSTATE_STIPPLEPATTERN16",
89 "D3DRENDERSTATE_STIPPLEPATTERN17",
90 "D3DRENDERSTATE_STIPPLEPATTERN18",
91 "D3DRENDERSTATE_STIPPLEPATTERN19",
92 "D3DRENDERSTATE_STIPPLEPATTERN20",
93 "D3DRENDERSTATE_STIPPLEPATTERN21",
94 "D3DRENDERSTATE_STIPPLEPATTERN22",
95 "D3DRENDERSTATE_STIPPLEPATTERN23",
96 "D3DRENDERSTATE_STIPPLEPATTERN24",
97 "D3DRENDERSTATE_STIPPLEPATTERN25",
98 "D3DRENDERSTATE_STIPPLEPATTERN26",
99 "D3DRENDERSTATE_STIPPLEPATTERN27",
100 "D3DRENDERSTATE_STIPPLEPATTERN28",
101 "D3DRENDERSTATE_STIPPLEPATTERN29",
102 "D3DRENDERSTATE_STIPPLEPATTERN30",
103 "D3DRENDERSTATE_STIPPLEPATTERN31"
106 DUMP(" %s = 0x%08lx\n", states[type], value);
110 void set_render_state(D3DRENDERSTATETYPE dwRenderStateType,
111 DWORD dwRenderState)
114 if (TRACE_ON(ddraw))
115 _dump_renderstate(dwRenderStateType, dwRenderState);
117 /* First, all the stipple patterns */
118 if ((dwRenderStateType >= D3DRENDERSTATE_STIPPLEPATTERN00) &&
119 (dwRenderStateType >= D3DRENDERSTATE_STIPPLEPATTERN31)) {
121 } else {
122 /* All others state variables */
123 switch (dwRenderStateType) {
124 case D3DRENDERSTATE_ZENABLE: /* 7 */
125 if (dwRenderState)
126 glEnable(GL_DEPTH_TEST);
127 else
128 glDisable(GL_DEPTH_TEST);
129 break;
131 case D3DRENDERSTATE_ZWRITEENABLE: /* 14 */
132 if (dwRenderState)
133 glDepthMask(GL_TRUE);
134 else
135 glDepthMask(GL_FALSE);
136 break;
138 case D3DRENDERSTATE_ZFUNC: /* 23 */
139 switch ((D3DCMPFUNC) dwRenderState) {
140 case D3DCMP_NEVER:
141 glDepthFunc(GL_NEVER);
142 break;
143 case D3DCMP_LESS:
144 glDepthFunc(GL_LESS);
145 break;
146 case D3DCMP_EQUAL:
147 glDepthFunc(GL_EQUAL);
148 break;
149 case D3DCMP_LESSEQUAL:
150 glDepthFunc(GL_LEQUAL);
151 break;
152 case D3DCMP_GREATER:
153 glDepthFunc(GL_GREATER);
154 break;
155 case D3DCMP_NOTEQUAL:
156 glDepthFunc(GL_NOTEQUAL);
157 break;
158 case D3DCMP_GREATEREQUAL:
159 glDepthFunc(GL_GEQUAL);
160 break;
161 case D3DCMP_ALWAYS:
162 glDepthFunc(GL_ALWAYS);
163 break;
165 default:
166 ERR(ddraw, "Unexpected value\n");
168 break;
170 case D3DRENDERSTATE_DITHERENABLE: /* 26 */
171 if (dwRenderState)
172 glEnable(GL_DITHER);
173 else
174 glDisable(GL_DITHER);
175 break;
177 default:
178 FIXME(ddraw, "Unhandled Render State\n");
179 break;
185 #endif /* HAVE_MESAGL */