- beginning of implementation of Direct3D2 (DX 5.0) and associated classes
[wine] / graphics / d3dcommon.c
1 /* Direct3D Common functions
2    (c) 1998 Lionel ULMER
3    
4    This file contains all common miscellaneous code that spans
5    different 'objects' */
6
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"
14
15 #include "d3d_private.h"
16
17 #ifdef HAVE_MESAGL
18
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"
104   };
105
106   DUMP(" %s = 0x%08lx\n", states[type], value);
107 }
108
109
110 void set_render_state(D3DRENDERSTATETYPE dwRenderStateType,
111                       DWORD dwRenderState)
112 {
113
114   if (TRACE_ON(ddraw))
115     _dump_renderstate(dwRenderStateType, dwRenderState);
116
117   /* First, all the stipple patterns */
118   if ((dwRenderStateType >= D3DRENDERSTATE_STIPPLEPATTERN00) && 
119       (dwRenderStateType >= D3DRENDERSTATE_STIPPLEPATTERN31)) {
120
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;
130       
131     case D3DRENDERSTATE_ZWRITEENABLE:     /* 14 */
132       if (dwRenderState)
133         glDepthMask(GL_TRUE);
134       else
135         glDepthMask(GL_FALSE);
136       break;
137       
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;
164
165       default:
166         ERR(ddraw, "Unexpected value\n");
167       }
168       break;
169       
170     case D3DRENDERSTATE_DITHERENABLE:     /* 26 */
171       if (dwRenderState)
172         glEnable(GL_DITHER);
173       else
174         glDisable(GL_DITHER);
175       break;
176       
177     default:
178       FIXME(ddraw, "Unhandled Render State\n");
179       break;
180     }
181   }
182 }
183
184
185 #endif /* HAVE_MESAGL */