diff options
Diffstat (limited to 'src/native/d3d/D3dCtx.hpp')
-rw-r--r-- | src/native/d3d/D3dCtx.hpp | 387 |
1 files changed, 0 insertions, 387 deletions
diff --git a/src/native/d3d/D3dCtx.hpp b/src/native/d3d/D3dCtx.hpp deleted file mode 100644 index d503821..0000000 --- a/src/native/d3d/D3dCtx.hpp +++ /dev/null @@ -1,387 +0,0 @@ -/* - * $RCSfile$ - * - * Copyright 2000-2008 Sun Microsystems, Inc. All Rights Reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * $Revision$ - * $Date$ - * $State$ - */ - -#if !defined(D3DCTX_H) -#define D3DCTX_H - - -#include "StdAfx.h" -#include "D3dVertexBuffer.hpp" -#include "D3dDisplayList.hpp" - -#define TEXTURETABLESIZE 8 -#define TEXSTAGESUPPORT 8 -#define DISPLAYLIST_INITSIZE 8 -#define NOCHANGE 0 -#define RESETSURFACE 1 -#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 -#define TEX_GEN_NONE 0 -#define TEX_EYE_LINEAR -1 -#define TEX_SPHERE_MAP -2 -#define TEX_NORMAL_MAP -3 -#define TEX_REFLECT_MAP -4 -#define TEX_OBJ_LINEAR -5 -#define TEX_GEN_INVALID -6 -#define TEX_GEN_AUTO -7 - -typedef struct _D3DVERTEX { - float x, y, z; -} D3DVERTEX; - - -typedef struct _D3DTLVERTEX { - float sx, sy, sz, rhw; - float tu, tv; -} D3DTLVERTEX; - -typedef struct _COORDTEXVERTEX { - float sx, sy, sz; - float tu, tv; -} COORDTEXVERTEX; - -typedef struct _COORDCLRTEXVERTEX { - float sx, sy, sz; - D3DCOLOR color; - float tu, tv; -} COORDCLRTEXVERTEX; - - -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: - - HWND hwnd; // window handle - HWND topHwnd; // Top window handle - D3dDriverInfo *driverInfo; // Driver use - 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 - LPDIRECT3DSURFACE9 frontSurface; - - LPDIRECT3DSURFACE9 backSurface; - - // Parameters use for CreateDevice() - 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 - 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 - INT minZDepth; // min Z depth set in NativeConfigTemplate - INT minZDepthStencil; // min Stencil 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; - - // Two side light is used. Note that D3D don't support two side - // lighting. - BOOL twoSideLightingEnable; - - // True if lighting is currently enable - // Save the current RenderingState to avoid GetRenderState() - // call during Rendering. - BOOL isLightEnable; - DWORD cullMode; - DWORD fillMode; - DWORD softwareVertexProcessing; - DWORD zWriteEnable; - DWORD zEnable; - -// TODO ACES: The following two stencil enable flags are not used -// consistently throughout the pipeline. They are never set to a value, -// and they are not looked at by most of the code. - DWORD stencilWriteEnable; // new on 1.4 - DWORD stencilEnable; // new on 1.4 - - // Ambient material used when coloring Attributes - D3DMATERIAL9 ambientMaterial; - - // temporary variables for ambient light setting - D3DLIGHT9 savedLight; - D3DMATERIAL9 savedMaterial; - BOOL savedLightEnable; - - // temporary variables used for building VertexBuffer - LPD3DVERTEXBUFFER pVB; // point to the current VB being update - DWORD texSetUsed; - DWORD texStride[TEXSTAGESUPPORT]; - - // true when in toggle mode - BOOL forceResize; - - // Texture related variables - INT *bindTextureId; - DWORD bindTextureIdLen; - - 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 - LPDIRECT3DVOLUMETEXTURE9 *volumeTable; - DWORD volumeTableLen; - - // Texture Cube Mapping related variables - 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. - HMONITOR monitor; - - // D3D don't have concept of current texture unit stage, - // instead, the texture unit stage is pass in as argument - // for all texture call. - INT texUnitStage; - - // 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 - DWORD srcBlendFunc; - DWORD dstBlendFunc; - DWORD blendEnable; - - - // This is used for to transform vertex - // from world to screen coordinate - LPDIRECT3DVERTEXBUFFER9 srcVertexBuffer; - LPDIRECT3DVERTEXBUFFER9 dstVertexBuffer; - - // For Rect of texture map in Raster write - D3DTLVERTEX rasterRect[4]; - - // Set automatic Texture coordinate generation type - // TEX_xxx_xxx as defined in GeometryArrayRetained.cpp - INT texGenMode[TEXSTAGESUPPORT]; - - // Whether TEXTURE_COORDINATE_2/3/4 is used in this state - INT texCoordFormat[TEXSTAGESUPPORT]; - - // Whether texture transform matrix is set in this state or not - BOOL texTransformSet[TEXSTAGESUPPORT]; - - // Remember the last Texture Transform pass down, since - // TexCoordGen may destroy it in some mode so we have to - // restore it later manually. - D3DXMATRIX texTransform[TEXSTAGESUPPORT]; - - // True if we copy m._41, m._42 elment to m._31, m._32 - // as a workaround that 2D texture translation did not work. - BOOL texTranslateSet[TEXSTAGESUPPORT]; - - float planeS[TEXSTAGESUPPORT][4]; - float planeT[TEXSTAGESUPPORT][4]; - float planeR[TEXSTAGESUPPORT][4]; - float planeQ[TEXSTAGESUPPORT][4]; - - // Display List ID (start from 1) => VertexBuffer pointer table - LPD3DDISPLAYLIST *displayListTable; - int dlTableSize; - - // For immediate mode rendering, we save the vertexBuffer pointer - // in variable pVertexBuffer of GeometryArrayRetained to reuse it. - D3dVertexBuffer vertexBufferTable; - - int currDisplayListID; - - // True if colorTarget need to reset - BOOL resetColorTarget; - - // Use for QuadArray - LPDIRECT3DINDEXBUFFER9 quadIndexBuffer; - DWORD quadIndexBufferSize; - - // Use for Quad Polygon Line mode - LPDIRECT3DINDEXBUFFER9 lineModeIndexBuffer; - - // Use temporary for reindexing - DWORD *reIndexifyTable; - - // True if Direcct Draw context is being destroy and recreate - // again during resize/toggle - BOOL recreateDDraw; - - // Screen coordinate of current monitor in use - // When hardware accleerated mode is used. For Emulation mode - // they are always zero; - INT monitorLeft; - INT monitorTop; - float pointSize; - - // Use to free resource surface in swap() - BOOL useFreeList0; - LPDIRECT3DRESOURCE9Vector freeResourceList0; - LPDIRECT3DRESOURCE9Vector freeResourceList1; - D3dVertexBufferVector freeVBList0; - D3dVertexBufferVector freeVBList1; - - D3dCtx(JNIEnv *env, jobject obj, HWND hwnd, BOOL offScreen, jint vid); - ~D3dCtx(); - - BOOL initialize(JNIEnv *env, jobject obj); - INT resize(JNIEnv *env, jobject obj); - VOID error(char *s, HRESULT hr); - VOID error(int idx, HRESULT hr); - VOID error(int idx); - VOID error(char *s); - VOID warning(int idx, HRESULT hr); - VOID warning(int idx); - - static VOID d3dError(int idx); - static VOID d3dError(char *s); - static VOID d3dWarning(int idx, HRESULT hr); - static VOID d3dWarning(int idx); - - INT toggleMode(BOOL fullScreen, JNIEnv *env, jobject obj); - DWORD getWidth(); - DWORD getHeight(); - - VOID release(); - VOID releaseTexture(); - VOID releaseVB(); - VOID setViewport(); - VOID transform(D3DVERTEX *worldCoord, D3DTLVERTEX *screenCoord); - VOID getScreenRect(HWND hwnd, RECT *rect); - HMONITOR findMonitor(); - VOID setDriverInfo(); - static D3dDeviceInfo* setDeviceInfo(D3dDriverInfo *driverInfo, - BOOL *bFullScreen, - int minZDepth, - int minZDepthStencil); - DWORD findBehavior(); - VOID setPresentParams(); - INT resetSurface(JNIEnv *env, jobject obj); - VOID setPresentParams(JNIEnv *env, jobject obj); - VOID setAmbientLightMaterial(); - VOID restoreDefaultLightMaterial(); - VOID freeResource(LPDIRECT3DRESOURCE9 surf); - VOID freeVB(LPD3DVERTEXBUFFER vb); - - VOID freeList(); - VOID freeResourceList(LPDIRECT3DRESOURCE9Vector *v); - VOID freeVBList(D3dVertexBufferVector *v); - BOOL createFrontBuffer(); - - static D3dDeviceInfo* selectDevice(int deviceID, - D3dDriverInfo *driverInfo, - BOOL *bFullScreen, - int minZDepth, - int minZDepthStencil); - static D3dDeviceInfo* selectBestDevice(D3dDriverInfo *driverInfo, - BOOL *bFullScreen, - int minZDepth, - int minZDepthStencil); - 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); - - - -private: - - RECT savedTopRect; // for toggle between fullscreen mode - RECT savedClientRect; - DWORD winStyle; - // a private reference for JNIEnv - JNIEnv* jniEnv; - - VOID createVertexBuffer(); - - VOID setCanvasProperty(JNIEnv *env, jobject obj); - VOID setFullScreenFromProperty(JNIEnv *env); - VOID enumDisplayMode(DEVMODE *devmode); - - static VOID printWarningMessage(D3dDeviceInfo *deviceInfo); - static VOID showError(HWND hwnd, char *s, BOOL bFullScreen); - VOID setDefaultAttributes(); - 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 |