diff options
Diffstat (limited to 'src/native/d3d/D3dCtx.hpp')
-rw-r--r-- | src/native/d3d/D3dCtx.hpp | 113 |
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 |