aboutsummaryrefslogtreecommitdiffstats
path: root/src/native/d3d/D3dCtx.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/native/d3d/D3dCtx.hpp')
-rw-r--r--src/native/d3d/D3dCtx.hpp113
1 files changed, 67 insertions, 46 deletions
diff --git a/src/native/d3d/D3dCtx.hpp b/src/native/d3d/D3dCtx.hpp
index 230f099..96a111a 100644
--- a/src/native/d3d/D3dCtx.hpp
+++ b/src/native/d3d/D3dCtx.hpp
@@ -18,7 +18,7 @@
#include "D3dVertexBuffer.hpp"
#include "D3dDisplayList.hpp"
-#define TEXTURETABLESIZE 8
+#define TEXTURETABLESIZE 8
#define TEXSTAGESUPPORT 8
#define DISPLAYLIST_INITSIZE 8
#define NOCHANGE 0
@@ -26,6 +26,9 @@
#define RECREATEDDRAW 2
#define RECREATEDFAIL -1
+#undef javax_media_j3d_Canvas3D_STENCIL_BUFFER
+#define javax_media_j3d_Canvas3D_STENCIL_BUFFER 4096L
+
// Use in texCoordPosition[]
// Must be negative number
@@ -47,8 +50,11 @@ typedef struct _D3DTLVERTEX {
float tu, tv;
} D3DTLVERTEX;
-typedef vector<LPDIRECT3DRESOURCE8> LPDIRECT3DRESOURCE8Vector;
-typedef vector<LPDIRECT3DVERTEXBUFFER8> LPDIRECT3DVERTEXBUFFER8Vector;
+typedef vector<LPDIRECT3DRESOURCE9> LPDIRECT3DRESOURCE9Vector;
+typedef vector<LPDIRECT3DVERTEXBUFFER9> LPDIRECT3DVERTEXBUFFER9Vector;
+//issue 135 iterator for vectors
+typedef vector<LPDIRECT3DRESOURCE9>::iterator ITER_LPDIRECT3DRESOURCE9;
+typedef vector<LPDIRECT3DVERTEXBUFFER9>::iterator ITER_LPDIRECT3DVERTEXBUFFER9;
class D3dCtx {
public:
@@ -56,47 +62,54 @@ public:
HWND hwnd; // window handle
HWND topHwnd; // Top window handle
D3dDriverInfo *driverInfo; // Driver use
- D3dDeviceInfo *deviceInfo; // Device use
-
- LPDIRECT3D8 pD3D; // Direct3D interface
- LPDIRECT3DDEVICE8 pDevice; // Instance of D3D Device
-
- LPDIRECT3DSURFACE8 depthStencilSurface;
+ D3dDeviceInfo *deviceInfo; // Device use
+
+ LPDIRECT3D9 pD3D; // Direct3D interface
+ LPDIRECT3DDEVICE9 pDevice; // Instance of D3D Device
+
+ LPDIRECT3DSURFACE9 depthStencilSurface;
// This is used for readRaster and offscreen rendering
// Only allocate the memory area if necessary
- LPDIRECT3DSURFACE8 frontSurface;
+ LPDIRECT3DSURFACE9 frontSurface;
- LPDIRECT3DSURFACE8 backSurface;
+ LPDIRECT3DSURFACE9 backSurface;
// Parameters use for CreateDevice()
- D3DPRESENT_PARAMETERS d3dPresent;
+ D3DPRESENT_PARAMETERS d3dPresent;
DWORD dwBehavior;
-
+ BOOL bForceHwdVertexProcess; // true if j3d.d3dVertexProcess is hardware
+ BOOL bForceMixVertexProcess; // true if j3d.d3dVertexProcess is mixed
+ BOOL bForceSWVertexProcess; // true if j3d.d3dVertexProcess is software
+
+ BOOL bUseNvPerfHUD; // true if j3d.useNvPerfHUD is true
+ // it also makes bForceHwdVertexProcess true
+
BOOL offScreen; // true if it is offScreen rendering
// in this case only backSurface is used
+ BOOL bFastDrawQuads;
DWORD offScreenWidth;
DWORD offScreenHeight;
-
+
BOOL bFullScreen; // true if in full screen mode
BOOL bFullScreenRequired; // true if must run in full
// screen mode or die
- BOOL inToggle; // in toggle fullscreen/window mode
+ BOOL inToggle; // in toggle fullscreen/window mode
RECT screenRect; // coordinate of window relative to
// the whole desktop in multiple monitor
RECT windowRect; // coordinate of window relative to
- // the current monitor desktop only
+ // the current monitor desktop only
INT minZDepth; // min Z depth set in NativeConfigTemplate
DEVMODE devmode; // current display mode
DWORD antialiasing; // PREFERRED, REQUIRED or UNNECESSARY
-
+
// Store current color as in OGL glColor()
float currentColor_r;
- float currentColor_g;
- float currentColor_b;
- float currentColor_a;
+ float currentColor_g;
+ float currentColor_b;
+ float currentColor_a;
// Two side light is used. Note that D3D don't support two side
// lighting.
@@ -113,16 +126,16 @@ public:
DWORD zEnable;
// Ambient material used when coloring Attributes
- D3DMATERIAL8 ambientMaterial;
+ D3DMATERIAL9 ambientMaterial;
// temporary variables for ambient light setting
- D3DLIGHT8 savedLight;
- D3DMATERIAL8 savedMaterial;
+ D3DLIGHT9 savedLight;
+ D3DMATERIAL9 savedMaterial;
BOOL savedLightEnable;
// temporary variables used for building VertexBuffer
LPD3DVERTEXBUFFER pVB; // point to the current VB being update
- DWORD texSetUsed;
+ DWORD texSetUsed;
DWORD texStride[TEXSTAGESUPPORT];
// true when in toggle mode
@@ -132,25 +145,25 @@ public:
INT *bindTextureId;
DWORD bindTextureIdLen;
- LPDIRECT3DTEXTURE8 *textureTable;
+ LPDIRECT3DTEXTURE9 *textureTable;
DWORD textureTableLen;
// Volume Texture related variables
// Since 2d & 3d texture ID can't be the same from Java3D.
// We don't need bindVolumeId
- LPDIRECT3DVOLUMETEXTURE8 *volumeTable;
+ LPDIRECT3DVOLUMETEXTURE9 *volumeTable;
DWORD volumeTableLen;
// Texture Cube Mapping related variables
- LPDIRECT3DCUBETEXTURE8 *cubeMapTable;
+ LPDIRECT3DCUBETEXTURE9 *cubeMapTable;
DWORD cubeMapTableLen;
-
+
// true if hardware support MultiTexture
BOOL multiTextureSupport;
// handle to monitor that this ctx belongs to. This is equal to
// NULL if this window is a primary display screen or it covers
- // more than one screen.
+ // more than one screen.
HMONITOR monitor;
// D3D don't have concept of current texture unit stage,
@@ -160,7 +173,7 @@ public:
// true if linear filtering is to be used
BOOL texLinearMode;
-
+
// This is used temporary to store the blend function
// when two pass texture is used to simulate BLEND mode
@@ -169,10 +182,10 @@ public:
DWORD blendEnable;
- // This is used for to transform vertex
+ // This is used for to transform vertex
// from world to screen coordinate
- LPDIRECT3DVERTEXBUFFER8 srcVertexBuffer;
- LPDIRECT3DVERTEXBUFFER8 dstVertexBuffer;
+ LPDIRECT3DVERTEXBUFFER9 srcVertexBuffer;
+ LPDIRECT3DVERTEXBUFFER9 dstVertexBuffer;
// For Rect of texture map in Raster write
D3DTLVERTEX rasterRect[4];
@@ -188,7 +201,7 @@ public:
BOOL texTransformSet[TEXSTAGESUPPORT];
// Remember the last Texture Transform pass down, since
- // TexCoordGen may destroy it in some mode so we have to
+ // TexCoordGen may destroy it in some mode so we have to
// restore it later manually.
D3DXMATRIX texTransform[TEXSTAGESUPPORT];
@@ -215,11 +228,11 @@ public:
BOOL resetColorTarget;
// Use for QuadArray
- LPDIRECT3DINDEXBUFFER8 quadIndexBuffer;
+ LPDIRECT3DINDEXBUFFER9 quadIndexBuffer;
DWORD quadIndexBufferSize;
// Use for Quad Polygon Line mode
- LPDIRECT3DINDEXBUFFER8 lineModeIndexBuffer;
+ LPDIRECT3DINDEXBUFFER9 lineModeIndexBuffer;
// Use temporary for reindexing
DWORD *reIndexifyTable;
@@ -237,8 +250,8 @@ public:
// Use to free resource surface in swap()
BOOL useFreeList0;
- LPDIRECT3DRESOURCE8Vector freeResourceList0;
- LPDIRECT3DRESOURCE8Vector freeResourceList1;
+ LPDIRECT3DRESOURCE9Vector freeResourceList0;
+ LPDIRECT3DRESOURCE9Vector freeResourceList1;
D3dVertexBufferVector freeVBList0;
D3dVertexBufferVector freeVBList1;
@@ -280,14 +293,14 @@ public:
VOID setPresentParams(JNIEnv *env, jobject obj);
VOID setAmbientLightMaterial();
VOID restoreDefaultLightMaterial();
- VOID freeResource(LPDIRECT3DRESOURCE8 surf);
+ VOID freeResource(LPDIRECT3DRESOURCE9 surf);
VOID freeVB(LPD3DVERTEXBUFFER vb);
-
+
VOID freeList();
- VOID freeResourceList(LPDIRECT3DRESOURCE8Vector *v);
- VOID freeVBList(D3dVertexBufferVector *v);
+ VOID freeResourceList(LPDIRECT3DRESOURCE9Vector *v);
+ VOID freeVBList(D3dVertexBufferVector *v);
BOOL createFrontBuffer();
-
+
static D3dDeviceInfo* selectDevice(int deviceID,
D3dDriverInfo *driverInfo,
BOOL *bFullScreen,
@@ -296,15 +309,20 @@ public:
BOOL *bFullScreen,
int minZDepth);
static VOID setDeviceFromProperty(JNIEnv *env);
+ static BOOL getSystemProperty(JNIEnv *env, char *strName, char *strValue);
static VOID setDebugProperty(JNIEnv *env);
static VOID setVBLimitProperty(JNIEnv *env);
- static VOID setImplicitMultisamplingProperty(JNIEnv *env);
+ static VOID setImplicitMultisamplingProperty(JNIEnv *env);
+
+
private:
RECT savedTopRect; // for toggle between fullscreen mode
- RECT savedClientRect;
+ RECT savedClientRect;
DWORD winStyle;
+ // a private reference for JNIEnv
+ JNIEnv* jniEnv;
VOID createVertexBuffer();
@@ -315,11 +333,14 @@ private:
static VOID printWarningMessage(D3dDeviceInfo *deviceInfo);
static VOID showError(HWND hwnd, char *s, BOOL bFullScreen);
VOID setDefaultAttributes();
- VOID printInfo(D3DPRESENT_PARAMETERS *d3dPresent);
+ VOID printInfo(D3DPRESENT_PARAMETERS *d3dPresent);
VOID setWindowMode();
+ jboolean getJavaBoolEnv(JNIEnv *env, char* envStr);
};
typedef vector<D3dCtx *> D3dCtxVector;
+//issue 135 added iterator for D3dCtxVector
+typedef vector<D3dCtx *>::iterator ITER_D3dCtxVector;
extern D3dCtxVector d3dCtxList;
const extern D3DXMATRIX identityMatrix;
#endif