1 /* Direct3D Common functions
4 This file contains all common miscellaneous code that spans
10 #include "interfaces.h"
15 #include "d3d_private.h"
19 static void _dump_renderstate(D3DRENDERSTATETYPE type
,
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
,
115 _dump_renderstate(dwRenderStateType
, dwRenderState
);
117 /* First, all the stipple patterns */
118 if ((dwRenderStateType
>= D3DRENDERSTATE_STIPPLEPATTERN00
) &&
119 (dwRenderStateType
>= D3DRENDERSTATE_STIPPLEPATTERN31
)) {
122 /* All others state variables */
123 switch (dwRenderStateType
) {
124 case D3DRENDERSTATE_ZENABLE
: /* 7 */
126 glEnable(GL_DEPTH_TEST
);
128 glDisable(GL_DEPTH_TEST
);
131 case D3DRENDERSTATE_ZWRITEENABLE
: /* 14 */
133 glDepthMask(GL_TRUE
);
135 glDepthMask(GL_FALSE
);
138 case D3DRENDERSTATE_ZFUNC
: /* 23 */
139 switch ((D3DCMPFUNC
) dwRenderState
) {
141 glDepthFunc(GL_NEVER
);
144 glDepthFunc(GL_LESS
);
147 glDepthFunc(GL_EQUAL
);
149 case D3DCMP_LESSEQUAL
:
150 glDepthFunc(GL_LEQUAL
);
153 glDepthFunc(GL_GREATER
);
155 case D3DCMP_NOTEQUAL
:
156 glDepthFunc(GL_NOTEQUAL
);
158 case D3DCMP_GREATEREQUAL
:
159 glDepthFunc(GL_GEQUAL
);
162 glDepthFunc(GL_ALWAYS
);
166 ERR(ddraw
, "Unexpected value\n");
170 case D3DRENDERSTATE_DITHERENABLE
: /* 26 */
174 glDisable(GL_DITHER
);
178 FIXME(ddraw
, "Unhandled Render State\n");
185 #endif /* HAVE_MESAGL */