Implement Material, Clip plane and Light support plus
MultiplyTransform.
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 8abcae1..dc68095 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -24,6 +24,7 @@
#define __WINE_WINED3D_PRIVATE_H
#include <stdarg.h>
+#include <math.h>
#define NONAMELESSUNION
#define NONAMELESSSTRUCT
#define COBJMACROS
@@ -77,6 +78,7 @@
/* Highest value in D3DTRANSFORMSTATETYPE */
#define WINED3D_VSHADER_MAX_CONSTANTS 96
/* Maximum number of constants provided to the shaders */
+#define MAX_CLIPPLANES D3DMAXUSERCLIPPLANES
#define checkGLcall(A) \
{ \
@@ -108,11 +110,43 @@
checkGLcall("glActiveTextureARB");
#endif
+/* Macro to dump out the current state of the light chain */
+#define DUMP_LIGHT_CHAIN() \
+{ \
+ PLIGHTINFOEL *el = This->stateBlock->lights;\
+ while (el) { \
+ TRACE("Light %p (glIndex %ld, d3dIndex %ld, enabled %d)\n", el, el->glIndex, el->OriginalIndex, el->lightEnabled);\
+ el = el->next; \
+ } \
+}
+
typedef struct IWineD3DStateBlockImpl IWineD3DStateBlockImpl;
extern const float identity[16];
/*****************************************************************************
+ * Internal representation of a light
+ */
+typedef struct PLIGHTINFOEL PLIGHTINFOEL;
+struct PLIGHTINFOEL {
+ WINED3DLIGHT OriginalParms; /* Note D3D8LIGHT == D3D9LIGHT */
+ DWORD OriginalIndex;
+ LONG glIndex;
+ BOOL lightEnabled;
+ BOOL changed;
+ BOOL enabledChanged;
+
+ /* Converted parms to speed up swapping lights */
+ float lightPosn[4];
+ float lightDirn[4];
+ float exponent;
+ float cutoff;
+
+ PLIGHTINFOEL *next;
+ PLIGHTINFOEL *prev;
+};
+
+/*****************************************************************************
* IWineD3D implementation structure
*/
typedef struct IWineD3DImpl
@@ -242,9 +276,11 @@
/* Note: Very long winded but gl Lists are not flexible enough */
/* to resolve everything we need, so doing it manually for now */
typedef struct SAVEDSTATES {
+ BOOL material;
BOOL fvf;
BOOL stream_source[MAX_STREAMS];
BOOL transform[HIGHEST_TRANSFORMSTATE];
+ BOOL clipplane[MAX_CLIPPLANES];
} SAVEDSTATES;
struct IWineD3DStateBlockImpl
@@ -273,6 +309,16 @@
/* Transform */
D3DMATRIX transforms[HIGHEST_TRANSFORMSTATE];
+ /* Lights */
+ PLIGHTINFOEL *lights; /* NOTE: active GL lights must be front of the chain */
+
+ /* Clipping */
+ double clipplane[MAX_CLIPPLANES][4];
+ WINED3DCLIPSTATUS clip_status;
+
+ /* Material */
+ WINED3DMATERIAL material;
+
};
extern IWineD3DStateBlockVtbl IWineD3DStateBlock_Vtbl;