diff options
Diffstat (limited to 'src/native')
64 files changed, 13031 insertions, 3868 deletions
diff --git a/src/native/build.xml b/src/native/build.xml index 8bd6b91..12c82e0 100644 --- a/src/native/build.xml +++ b/src/native/build.xml @@ -18,38 +18,50 @@ <project name="Java 3D" default="compile-opt"> <target name="nativeSetup-debug-solaris" if="isSolarisOnSparc"> - <property name="bldFlag" value="g"/> + <property name="bldFlag" value="-g -DDEBUG"/> <property name="coreLibDependency" value="lib/sparc/libj3dcore-ogl.so"/> <property name="coreUtilsLibDependency" value="lib/sparc/libj3dutils.so"/> </target> + <target name="nativeSetup-debug-solaris-x86" if="isSolarisOnX86"> + <property name="bldFlag" value="-g -DDEBUG"/> + <property name="coreLibDependency" value="lib/i386/libj3dcore-ogl.so"/> + <property name="coreUtilsLibDependency" value="lib/i386/libj3dutils.so"/> + </target> + <target name="nativeSetup-debug-linux" if="isLinuxOnX86"> - <property name="bldFlag" value="g"/> + <property name="bldFlag" value="-g -DDEBUG"/> <property name="coreLibDependency" value="lib/i386/libj3dcore-ogl.so"/> <property name="coreUtilsLibDependency" value="lib/i386/libj3dutils.so"/> </target> <target name="nativeSetup-debug-linux-amd64" if="isLinuxOnAmd64"> - <property name="bldFlag" value="g -fPIC -march=k8 -msse2 -mfpmath=sse"/> + <property name="bldFlag" value="-g -DDEBUG -fPIC -march=k8 -msse2 -mfpmath=sse"/> <property name="coreLibDependency" value="lib/amd64/libj3dcore-ogl.so"/> <property name="coreUtilsLibDependency" value="lib/amd64/libj3dutils.so"/> </target> <target name="nativeSetup-debug-linux-ia64" if="isLinuxOnIA64"> - <property name="bldFlag" value="g"/> + <property name="bldFlag" value="-g -DDEBUG"/> <property name="coreLibDependency" value="lib/ia64/libj3dcore-ogl.so"/> <property name="coreUtilsLibDependency" value="lib/ia64/libj3dutils.so"/> </target> + + <target name="nativeSetup-debug-linux-ppc" if="isLinuxOnPPC"> + <property name="bldFlag" value="-g -DDEBUG"/> + <property name="coreLibDependency" value="lib/ppc/libj3dcore-ogl.so"/> + <property name="coreUtilsLibDependency" value="lib/ppc/libj3dutils.so"/> + </target> <target name="nativeSetup-debug-win32" if="isWindowsOnX86"> <property name="bldFlag" - value="-DWIN32 -DDEBUG -D_WINDOWS"/> + value="-DDEBUG -DWIN32 -D_WINDOWS"/> <property name="coreLibDependency" value="bin/j3dcore-${build.rend}.dll"/> <property name="coreUtilsLibDependency" value="bin/j3dutils.dll"/> </target> - <target name="nativeSetup-debug" depends="nativeSetup-debug-solaris, nativeSetup-debug-linux, nativeSetup-debug-linux-amd64, nativeSetup-debug-linux-ia64, nativeSetup-debug-win32"> + <target name="nativeSetup-debug" depends="nativeSetup-debug-solaris, nativeSetup-debug-solaris-x86, nativeSetup-debug-linux, nativeSetup-debug-linux-amd64, nativeSetup-debug-linux-ia64, nativeSetup-debug-linux-ppc, nativeSetup-debug-win32"> <property name="bldType" value="debug"/> <property name="javahCoreSrc" location="${src}/classes/share/javax/media/j3d"/> @@ -62,37 +74,49 @@ </target> <target name="nativeSetup-opt-solaris" if="isSolarisOnSparc"> - <property name="bldFlag" value="O"/> + <property name="bldFlag" value="-O"/> <property name="coreLibDependency" value="lib/sparc/libj3dcore-ogl.so"/> <property name="coreUtilsLibDependency" value="lib/sparc/libj3dutils.so"/> </target> + <target name="nativeSetup-opt-solaris-x86" if="isSolarisOnX86"> + <property name="bldFlag" value="-O"/> + <property name="coreLibDependency" value="lib/i386/libj3dcore-ogl.so"/> + <property name="coreUtilsLibDependency" value="lib/i386/libj3dutils.so"/> + </target> + <target name="nativeSetup-opt-linux" if="isLinuxOnX86"> - <property name="bldFlag" value="O"/> + <property name="bldFlag" value="-O"/> <property name="coreLibDependency" value="lib/i386/libj3dcore-ogl.so"/> <property name="coreUtilsLibDependency" value="lib/i386/libj3dutils.so"/> </target> <target name="nativeSetup-opt-linux-amd64" if="isLinuxOnAmd64"> - <property name="bldFlag" value="O -fPIC -march=k8 -msse2 -mfpmath=sse"/> + <property name="bldFlag" value="-O -fPIC -march=k8 -msse2 -mfpmath=sse"/> <property name="coreLibDependency" value="lib/amd64/libj3dcore-ogl.so"/> <property name="coreUtilsLibDependency" value="lib/amd64/libj3dutils.so"/> </target> <target name="nativeSetup-opt-linux-ia64" if="isLinuxOnIA64"> - <property name="bldFlag" value="O"/> + <property name="bldFlag" value="-O"/> <property name="coreLibDependency" value="lib/ia64/libj3dcore-ogl.so"/> <property name="coreUtilsLibDependency" value="lib/ia64/libj3dutils.so"/> </target> + <target name="nativeSetup-opt-linux-ppc" if="isLinuxOnPPC"> + <property name="bldFlag" value="-O"/> + <property name="coreLibDependency" value="lib/ppc/libj3dcore-ogl.so"/> + <property name="coreUtilsLibDependency" value="lib/ppc/libj3dutils.so"/> + </target> + <target name="nativeSetup-opt-win32" if="isWindowsOnX86"> <property name="bldFlag" - value="-DWIN32 -DNDEBUG -D_WINDOWS"/> + value="-DWIN32 -D_WINDOWS"/> <property name="coreLibDependency" value="bin/j3dcore-${build.rend}.dll"/> <property name="coreUtilsLibDependency" value="bin/j3dutils.dll"/> </target> - <target name="nativeSetup-opt" depends="nativeSetup-opt-solaris, nativeSetup-opt-linux, nativeSetup-opt-linux-amd64, nativeSetup-opt-linux-ia64, nativeSetup-opt-win32"> + <target name="nativeSetup-opt" depends="nativeSetup-opt-solaris, nativeSetup-opt-solaris-x86, nativeSetup-opt-linux, nativeSetup-opt-linux-amd64, nativeSetup-opt-linux-ia64, nativeSetup-opt-linux-ppc, nativeSetup-opt-win32"> <property name="bldType" value="opt"/> <property name="javahCoreSrc" location="${src}/classes/share/javax/media/j3d"/> @@ -188,6 +212,9 @@ srcfile="${javahCoreSrc}/ModelClipRetained.java" targetfile="${javahCoreTarget}/javax_media_j3d_ModelClipRetained.h"/> <uptodate + srcfile="${javahCoreSrc}/NativeAPIInfo.java" + targetfile="${javahCoreTarget}/javax_media_j3d_NativeAPIInfo.h"/> + <uptodate srcfile="${src}/classes/${ostype}/javax/media/j3d/NativeConfigTemplate3D.java" targetfile="${javahCoreTarget}/javax_media_j3d_NativeConfigTemplate3D.h"/> <uptodate @@ -266,6 +293,21 @@ srcfile="${javahCoreSrc}/TransparencyAttributesRetained.java" targetfile="${javahCoreTarget}/javax_media_j3d_TransparencyAttributesRetained.h"/> <uptodate + srcfile="${javahCoreSrc}/GLSLShaderProgramRetained.java" + targetfile="${javahCoreTarget}/javax_media_j3d_GLSLShaderProgramRetained.h"/> + <uptodate + srcfile="${javahCoreSrc}/CgShaderProgramRetained.java" + targetfile="${javahCoreTarget}/javax_media_j3d_CgShaderProgramRetained.h"/> + <uptodate + srcfile="${javahCoreSrc}/Shader.java" + targetfile="${javahCoreTarget}/javax_media_j3d_Shader.h"/> + <uptodate + srcfile="${javahCoreSrc}/ShaderAttributeObjectRetained.java" + targetfile="${javahCoreTarget}/javax_media_j3d_ShaderAttributeObjectRetained.h"/> + <uptodate + srcfile="${javahCoreSrc}/ShaderError.java" + targetfile="${javahCoreTarget}/javax_media_j3d_ShaderError.h"/> + <uptodate srcfile="${javahUtilsSrc}/J3DTimer.java" targetfile="${javahUtilsTarget}/com_sun_j3d_utils_timer_J3DTimer.h"/> </and> @@ -331,6 +373,7 @@ <class name="javax.media.j3d.Material"/> <class name="javax.media.j3d.MaterialRetained"/> <class name="javax.media.j3d.ModelClipRetained"/> + <class name="javax.media.j3d.NativeAPIInfo"/> <class name="javax.media.j3d.NativeConfigTemplate3D"/> <class name="javax.media.j3d.NodeRetained"/> <class name="javax.media.j3d.PointAttributesRetained"/> @@ -357,6 +400,11 @@ <class name="javax.media.j3d.TextureUnitStateRetained"/> <class name="javax.media.j3d.TransparencyAttributes"/> <class name="javax.media.j3d.TransparencyAttributesRetained"/> + <class name="javax.media.j3d.GLSLShaderProgramRetained"/> + <class name="javax.media.j3d.CgShaderProgramRetained"/> + <class name="javax.media.j3d.Shader"/> + <class name="javax.media.j3d.ShaderAttributeObjectRetained"/> + <class name="javax.media.j3d.ShaderError"/> </javah> diff --git a/src/native/d3d/Attributes.cpp b/src/native/d3d/Attributes.cpp index 6d97058..c4fd82f 100644 --- a/src/native/d3d/Attributes.cpp +++ b/src/native/d3d/Attributes.cpp @@ -306,7 +306,7 @@ void JNICALL Java_javax_media_j3d_Canvas3D_setViewport( width = d3dCtx->devmode.dmPelsWidth; height = d3dCtx->devmode.dmPelsHeight; } - D3DVIEWPORT8 vp = {x, y, width, height, 0.0f, 1.0f}; + D3DVIEWPORT9 vp = {x, y, width, height, 0.0f, 1.0f}; device->SetViewport(&vp); } @@ -422,11 +422,21 @@ void JNICALL Java_javax_media_j3d_RenderingAttributesRetained_updateNative( jboolean db_enable_override, jboolean db_enable, jboolean db_write_enable, + jint db_func, jfloat at_value, jint at_func, jboolean ignoreVertexColors, jboolean rasterOpEnable, - jint rasterOp) + jint rasterOp, + jboolean userStencilAvailable, + jboolean stencilEnable, + jint stencilFailOp, + jint stencilZFailOp, + jint stencilZPassOp, + jint stencilFunction, + jint stencilReferenceValue, + jint stencilCompareMask, + jint stencilWriteMask) { GetDevice(); @@ -499,7 +509,7 @@ void JNICALL Java_javax_media_j3d_Canvas3D_resetPolygonAttributes( device->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID); device->SetRenderState(D3DRS_CULLMODE, D3DCULL_CW); d3dCtx->twoSideLightingEnable = false; - device->SetRenderState(D3DRS_ZBIAS, 0); + device->SetRenderState(D3DRS_DEPTHBIAS, 0); } @@ -535,7 +545,7 @@ void JNICALL Java_javax_media_j3d_PolygonAttributesRetained_updateNative( } } - device->SetRenderState(D3DRS_ZBIAS, zbias_w); + device->SetRenderState(D3DRS_DEPTHBIAS, zbias_w); if (cullFace == javax_media_j3d_PolygonAttributes_CULL_NONE) { d3dCtx->cullMode = D3DCULL_NONE; @@ -582,14 +592,16 @@ void JNICALL Java_javax_media_j3d_Canvas3D_resetLineAttributes( // D3D don't support Line width // glLineWidth(1); - + //D3D9 doesnot support line Patterns + // must update this to use ID3DXLine Interface +/* D3DLINEPATTERN pattern; pattern.wRepeatFactor = 0; pattern.wLinePattern = 0; device->SetRenderState(D3DRS_LINEPATTERN, *((LPDWORD) (&pattern))); - +*/ } @@ -608,7 +620,8 @@ void JNICALL Java_javax_media_j3d_LineAttributesRetained_updateNative( { GetDevice(); - D3DLINEPATTERN pattern; + //Alessandro + //D3DLINEPATTERN pattern; /* if (lineWidth > 1) { @@ -619,12 +632,14 @@ void JNICALL Java_javax_media_j3d_LineAttributesRetained_updateNative( } */ // glLineWidth(lineWidth); - + /** Alessandro if (linePattern == javax_media_j3d_LineAttributes_PATTERN_SOLID) { pattern.wRepeatFactor = 0; pattern.wLinePattern = 0; } else { + **/ + /* if (!d3dCtx->deviceInfo->linePatternSupport) { if (debug && !isLinePatternMessOutput) { @@ -633,6 +648,7 @@ void JNICALL Java_javax_media_j3d_LineAttributesRetained_updateNative( } } */ + /** alessandro if (linePattern == javax_media_j3d_LineAttributes_PATTERN_DASH) { // dashed lines pattern.wRepeatFactor = 1; pattern.wLinePattern = 0x00ff; @@ -650,7 +666,7 @@ void JNICALL Java_javax_media_j3d_LineAttributesRetained_updateNative( device->SetRenderState(D3DRS_LINEPATTERN, *((LPDWORD) (&pattern))); - + **/ /* if (lineAntialiasing == JNI_TRUE) { glEnable (GL_LINE_SMOOTH); @@ -1378,7 +1394,7 @@ void JNICALL Java_javax_media_j3d_MaterialRetained_updateNative( jint colorTarget, jboolean lightEnable) { - D3DMATERIAL8 material; + D3DMATERIAL9 material; GetDevice(); @@ -1650,8 +1666,8 @@ void JNICALL Java_javax_media_j3d_TextureRetained_bindTexture( if (objectId >= d3dCtx->textureTableLen) { DWORD i; DWORD len = max(objectId+1, d3dCtx->textureTableLen << 1); - LPDIRECT3DTEXTURE8 *newTable = (LPDIRECT3DTEXTURE8 *) - malloc(sizeof(LPDIRECT3DTEXTURE8) * len); + LPDIRECT3DTEXTURE9 *newTable = (LPDIRECT3DTEXTURE9 *) + malloc(sizeof(LPDIRECT3DTEXTURE9) * len); if (newTable == NULL) { printf("Not enough memory to alloc texture table of size %d.\n", len); @@ -1698,31 +1714,31 @@ void JNICALL Java_javax_media_j3d_TextureRetained_updateTextureFilterModes( switch (minFilter) { case javax_media_j3d_Texture_FASTEST: case javax_media_j3d_Texture_BASE_LEVEL_POINT: - device->SetTextureStageState(d3dCtx->texUnitStage, - D3DTSS_MINFILTER, D3DTEXF_POINT); - device->SetTextureStageState(d3dCtx->texUnitStage, - D3DTSS_MIPFILTER, D3DTEXF_POINT); + device->SetSamplerState(d3dCtx->texUnitStage, + D3DSAMP_MINFILTER, D3DTEXF_POINT); + device->SetSamplerState (d3dCtx->texUnitStage, + D3DSAMP_MIPFILTER, D3DTEXF_POINT); break; case javax_media_j3d_Texture_BASE_LEVEL_LINEAR: - d3dCtx->texLinearMode = true; - device->SetTextureStageState(d3dCtx->texUnitStage, - D3DTSS_MINFILTER, D3DTEXF_LINEAR); - device->SetTextureStageState(d3dCtx->texUnitStage, - D3DTSS_MIPFILTER, D3DTEXF_POINT); + d3dCtx->texLinearMode = true; + device->SetSamplerState (d3dCtx->texUnitStage, + D3DSAMP_MINFILTER, D3DTEXF_LINEAR); + device->SetSamplerState (d3dCtx->texUnitStage, + D3DSAMP_MIPFILTER, D3DTEXF_POINT); break; case javax_media_j3d_Texture_MULTI_LEVEL_POINT: - device->SetTextureStageState(d3dCtx->texUnitStage, - D3DTSS_MINFILTER, D3DTEXF_POINT); - device->SetTextureStageState(d3dCtx->texUnitStage, - D3DTSS_MIPFILTER, D3DTEXF_LINEAR); + device->SetSamplerState (d3dCtx->texUnitStage, + D3DSAMP_MINFILTER, D3DTEXF_POINT); + device->SetSamplerState (d3dCtx->texUnitStage, + D3DSAMP_MIPFILTER, D3DTEXF_LINEAR); break; case javax_media_j3d_Texture_NICEST: case javax_media_j3d_Texture_MULTI_LEVEL_LINEAR: d3dCtx->texLinearMode = true; - device->SetTextureStageState(d3dCtx->texUnitStage, - D3DTSS_MINFILTER, D3DTEXF_LINEAR); - device->SetTextureStageState(d3dCtx->texUnitStage, - D3DTSS_MIPFILTER, D3DTEXF_LINEAR); + device->SetSamplerState (d3dCtx->texUnitStage, + D3DSAMP_MINFILTER, D3DTEXF_LINEAR); + device->SetSamplerState (d3dCtx->texUnitStage, + D3DSAMP_MIPFILTER, D3DTEXF_LINEAR); break; } @@ -1730,14 +1746,14 @@ void JNICALL Java_javax_media_j3d_TextureRetained_updateTextureFilterModes( switch (magFilter) { case javax_media_j3d_Texture_FASTEST: case javax_media_j3d_Texture_BASE_LEVEL_POINT: - device->SetTextureStageState(d3dCtx->texUnitStage, - D3DTSS_MAGFILTER, D3DTEXF_POINT); + device->SetSamplerState (d3dCtx->texUnitStage, + D3DSAMP_MAGFILTER, D3DTEXF_POINT); break; case javax_media_j3d_Texture_NICEST: case javax_media_j3d_Texture_BASE_LEVEL_LINEAR: d3dCtx->texLinearMode = true; - device->SetTextureStageState(d3dCtx->texUnitStage, - D3DTSS_MAGFILTER, D3DTEXF_LINEAR); + device->SetSamplerState (d3dCtx->texUnitStage, + D3DSAMP_MAGFILTER, D3DTEXF_LINEAR); break; } @@ -1797,19 +1813,19 @@ void updateTextureBoundary(JNIEnv *env, switch (boundaryModeS) { case javax_media_j3d_Texture_WRAP: - device->SetTextureStageState(d3dCtx->texUnitStage, - D3DTSS_ADDRESSU, + device->SetSamplerState (d3dCtx->texUnitStage, + D3DSAMP_ADDRESSU, D3DTADDRESS_WRAP); break; case javax_media_j3d_Texture_CLAMP: if (!d3dCtx->texLinearMode || !d3dCtx->deviceInfo->texBorderModeSupport) { - device->SetTextureStageState(d3dCtx->texUnitStage, - D3DTSS_ADDRESSU, + device->SetSamplerState (d3dCtx->texUnitStage, + D3DSAMP_ADDRESSU, D3DTADDRESS_CLAMP); } else { useBorderMode = TRUE; - device->SetTextureStageState(d3dCtx->texUnitStage, - D3DTSS_ADDRESSU, + device->SetSamplerState (d3dCtx->texUnitStage, + D3DSAMP_ADDRESSU, D3DTADDRESS_BORDER); } break; @@ -1817,19 +1833,19 @@ void updateTextureBoundary(JNIEnv *env, switch (boundaryModeT) { case javax_media_j3d_Texture_WRAP: - device->SetTextureStageState(d3dCtx->texUnitStage, - D3DTSS_ADDRESSV, + device->SetSamplerState (d3dCtx->texUnitStage, + D3DSAMP_ADDRESSV, D3DTADDRESS_WRAP); break; case javax_media_j3d_Texture_CLAMP: if (!d3dCtx->texLinearMode || !d3dCtx->deviceInfo->texBorderModeSupport) { - device->SetTextureStageState(d3dCtx->texUnitStage, - D3DTSS_ADDRESSV, - D3DTADDRESS_CLAMP); + device->SetSamplerState (d3dCtx->texUnitStage, + D3DSAMP_ADDRESSV, + D3DTADDRESS_CLAMP); } else { useBorderMode = TRUE; - device->SetTextureStageState(d3dCtx->texUnitStage, - D3DTSS_ADDRESSV, + device->SetSamplerState (d3dCtx->texUnitStage, + D3DSAMP_ADDRESSV, D3DTADDRESS_BORDER); } break; @@ -1838,19 +1854,19 @@ void updateTextureBoundary(JNIEnv *env, if (boundaryModeR >= 0) { switch (boundaryModeR) { case javax_media_j3d_Texture_WRAP: - device->SetTextureStageState(d3dCtx->texUnitStage, - D3DTSS_ADDRESSW, + device->SetSamplerState (d3dCtx->texUnitStage, + D3DSAMP_ADDRESSW, D3DTADDRESS_WRAP); break; case javax_media_j3d_Texture_CLAMP: if (!d3dCtx->texLinearMode || !d3dCtx->deviceInfo->texBorderModeSupport) { - device->SetTextureStageState(d3dCtx->texUnitStage, - D3DTSS_ADDRESSW, + device->SetSamplerState (d3dCtx->texUnitStage, + D3DSAMP_ADDRESSW, D3DTADDRESS_CLAMP); } else { useBorderMode = TRUE; - device->SetTextureStageState(d3dCtx->texUnitStage, - D3DTSS_ADDRESSW, + device->SetSamplerState (d3dCtx->texUnitStage, + D3DSAMP_ADDRESSW, D3DTADDRESS_BORDER); } break; @@ -1861,8 +1877,8 @@ void updateTextureBoundary(JNIEnv *env, D3DCOLOR color = D3DCOLOR_COLORVALUE(boundaryRed, boundaryGreen, boundaryBlue, boundaryAlpha); - device->SetTextureStageState(d3dCtx->texUnitStage, - D3DTSS_BORDERCOLOR, + device->SetSamplerState (d3dCtx->texUnitStage, + D3DSAMP_BORDERCOLOR, *((DWORD *) &color)); } } @@ -1918,24 +1934,24 @@ void updateTextureAnisotropicFilter( DWORD deg = degree + 0.5f; // round float to int // This will overwrite the previous setting in // updateTextureFilterModes() - device->SetTextureStageState(d3dCtx->texUnitStage, - D3DTSS_MINFILTER, + device->SetSamplerState (d3dCtx->texUnitStage, + D3DSAMP_MINFILTER, D3DTEXF_ANISOTROPIC); - device->SetTextureStageState(d3dCtx->texUnitStage, - D3DTSS_MAGFILTER, + device->SetSamplerState (d3dCtx->texUnitStage, + D3DSAMP_MAGFILTER, D3DTEXF_ANISOTROPIC); - device->SetTextureStageState(d3dCtx->texUnitStage, - D3DTSS_MIPFILTER, + device->SetSamplerState (d3dCtx->texUnitStage, + D3DSAMP_MIPFILTER, D3DTEXF_ANISOTROPIC); - device->SetTextureStageState(d3dCtx->texUnitStage, - D3DTSS_MAXANISOTROPY, deg); + device->SetSamplerState (d3dCtx->texUnitStage, + D3DSAMP_MAXANISOTROPY, deg); } else { // updateTextureFilterModes() will always invoke before // updateTextureAnisotropicFilter() to set Filter mode // correctly. - device->SetTextureStageState(d3dCtx->texUnitStage, - D3DTSS_MAXANISOTROPY, 1); + device->SetSamplerState (d3dCtx->texUnitStage, + D3DSAMP_MAXANISOTROPY, 1); } } @@ -2010,7 +2026,7 @@ void JNICALL Java_javax_media_j3d_TextureRetained_updateTextureSubImage( return; } - LPDIRECT3DTEXTURE8 surf = d3dCtx->textureTable[currBindTex]; + LPDIRECT3DTEXTURE9 surf = d3dCtx->textureTable[currBindTex]; if ((surf == NULL) || ((level > 0) && (!d3dCtx->deviceInfo->supportMipmap))) { @@ -2074,7 +2090,7 @@ void JNICALL Java_javax_media_j3d_TextureRetained_updateTextureImage( return; } - LPDIRECT3DTEXTURE8 surf = d3dCtx->textureTable[currBindTex]; + LPDIRECT3DTEXTURE9 surf = d3dCtx->textureTable[currBindTex]; if (level == 0) { if (surf != NULL) { @@ -2225,8 +2241,8 @@ void JNICALL Java_javax_media_j3d_Texture3DRetained_bindTexture( if (objectId >= d3dCtx->volumeTableLen) { DWORD i; DWORD len = max(objectId+1, d3dCtx->volumeTableLen << 1); - LPDIRECT3DVOLUMETEXTURE8 *newTable = (LPDIRECT3DVOLUMETEXTURE8 *) - malloc(sizeof(LPDIRECT3DVOLUMETEXTURE8) * len); + LPDIRECT3DVOLUMETEXTURE9 *newTable = (LPDIRECT3DVOLUMETEXTURE9 *) + malloc(sizeof(LPDIRECT3DVOLUMETEXTURE9) * len); if (newTable == NULL) { printf("Not enough memory to alloc volume texture table of size %d.\n", len); @@ -2371,7 +2387,7 @@ void JNICALL Java_javax_media_j3d_Texture3DRetained_updateTextureImage( return; } - LPDIRECT3DVOLUMETEXTURE8 surf = d3dCtx->volumeTable[currBindTex]; + LPDIRECT3DVOLUMETEXTURE9 surf = d3dCtx->volumeTable[currBindTex]; if (level == 0) { if (surf != NULL) { @@ -2465,7 +2481,7 @@ void JNICALL Java_javax_media_j3d_Texture3DRetained_updateTextureSubImage( return; } - LPDIRECT3DVOLUMETEXTURE8 surf = d3dCtx->volumeTable[currBindTex]; + LPDIRECT3DVOLUMETEXTURE9 surf = d3dCtx->volumeTable[currBindTex]; if ((surf == NULL) || ((level > 0) && (!d3dCtx->deviceInfo->supportMipmap))) { @@ -2520,8 +2536,8 @@ void JNICALL Java_javax_media_j3d_TextureCubeMapRetained_bindTexture( if (objectId >= d3dCtx->cubeMapTableLen) { DWORD i; DWORD len = max(objectId+1, d3dCtx->cubeMapTableLen << 1); - LPDIRECT3DCUBETEXTURE8 *newTable = (LPDIRECT3DCUBETEXTURE8 *) - malloc(sizeof(LPDIRECT3DCUBETEXTURE8) * len); + LPDIRECT3DCUBETEXTURE9 *newTable = (LPDIRECT3DCUBETEXTURE9 *) + malloc(sizeof(LPDIRECT3DCUBETEXTURE9) * len); if (newTable == NULL) { printf("Not enough memory to alloc cubeMap table of size %d.\n", len); @@ -2641,7 +2657,7 @@ void JNICALL Java_javax_media_j3d_TextureCubeMapRetained_updateTextureSubImage( return; } - LPDIRECT3DCUBETEXTURE8 surf = d3dCtx->cubeMapTable[currBindTex]; + LPDIRECT3DCUBETEXTURE9 surf = d3dCtx->cubeMapTable[currBindTex]; if ((surf == NULL) || ((level > 0) && (!d3dCtx->deviceInfo->supportMipmap))) { @@ -2707,7 +2723,7 @@ void JNICALL Java_javax_media_j3d_TextureCubeMapRetained_updateTextureImage( return; } - LPDIRECT3DCUBETEXTURE8 surf = d3dCtx->cubeMapTable[currBindTex]; + LPDIRECT3DCUBETEXTURE9 surf = d3dCtx->cubeMapTable[currBindTex]; if (level == 0) { if (surf != NULL) { diff --git a/src/native/d3d/Canvas3D.cpp b/src/native/d3d/Canvas3D.cpp index 4195f14..3636e6d 100644 --- a/src/native/d3d/Canvas3D.cpp +++ b/src/native/d3d/Canvas3D.cpp @@ -55,9 +55,11 @@ jlong JNICALL Java_javax_media_j3d_Canvas3D_createNewContext( jlong fbConfigListPtr, jlong sharedCtx, jboolean isSharedCtx, - jboolean offScreen) + jboolean offScreen, + jboolean glslLibraryAvailable, + jboolean cgLibraryAvailable) { - HWND hwnd = WindowFromDC(reinterpret_cast<HDC>(window)); + HWND hwnd = WindowFromDC(reinterpret_cast<HDC>(jlong(window))); lock(); D3dCtx* ctx = new D3dCtx(env, obj, hwnd, offScreen, vid); @@ -109,9 +111,11 @@ void JNICALL Java_javax_media_j3d_Canvas3D_createQueryContext( jlong fbConfigListPtr, jboolean offScreen, jint width, - jint height) + jint height, + jboolean glslLibraryAvailable, + jboolean cgLibraryAvailable) { - HWND hwnd = WindowFromDC(reinterpret_cast<HDC>(window)); + HWND hwnd = WindowFromDC(reinterpret_cast<HDC>(jlong(window))); lock(); // always use offscreen for property since it @@ -187,7 +191,7 @@ void JNICALL Java_javax_media_j3d_Canvas3D_composite( // However we use the following texturemapping function instead // so this will not invoke. if (d3dCtx->backSurface == NULL) { - device->GetBackBuffer(0, D3DBACKBUFFER_TYPE_MONO, + device->GetBackBuffer(0,0, D3DBACKBUFFER_TYPE_MONO,//iSwapChain is 0 &d3dCtx->backSurface); } jbyte *byteData = (jbyte *) (env->GetPrimitiveArrayCritical( @@ -262,7 +266,7 @@ void JNICALL Java_javax_media_j3d_Canvas3D_texturemapping( env, texture, ctx, 0, minX, minY, J3D_RGBA, format, minX, minY, rasWidth, maxX-minX, maxY-minY, imageYdown); - LPDIRECT3DTEXTURE8 surf = d3dCtx->textureTable[objectId]; + LPDIRECT3DTEXTURE9 surf = d3dCtx->textureTable[objectId]; if (surf == NULL) { if (debug) { @@ -366,7 +370,7 @@ void JNICALL Java_javax_media_j3d_Canvas3D_clear( id = env->GetFieldID(pa2d_class, "height", "I"); int height = env->GetIntField(pa2d, id); - LPDIRECT3DTEXTURE8 surf; + LPDIRECT3DTEXTURE9 surf; if ((d3dImage == NULL) || (d3dImage->surf == NULL)) { surf = createSurfaceFromImage(env, pa2d, ctx, @@ -420,11 +424,11 @@ void JNICALL Java_javax_media_j3d_Canvas3D_clear( sw = winWidth/(float) width; sh = winHeight/(float) height; if (sw >= sh) { - scaleWidth = width*sh; + scaleWidth = int(width*sh); scaleHeight = winHeight; } else { scaleWidth = winWidth; - scaleHeight = height*sw; + scaleHeight = int(height*sw); } texModeRepeat = FALSE; break; @@ -435,9 +439,9 @@ void JNICALL Java_javax_media_j3d_Canvas3D_clear( sh = winHeight/(float) height; if (sw >= sh) { scaleWidth = winWidth; - scaleHeight = height*sw; + scaleHeight = int(height*sw); } else { - scaleWidth = width*sh; + scaleWidth = int(width*sh); scaleHeight = winHeight; } texModeRepeat = FALSE; @@ -551,7 +555,7 @@ VOID freePointerList() if (useFreePointerList0) { if (freePointerList1.size() > 0) { lockSurfaceList(); - for (void **p = freePointerList1.begin(); + for (ITER_VOID p = freePointerList1.begin(); p != freePointerList1.end(); ++p) { delete (*p); } @@ -563,7 +567,7 @@ VOID freePointerList() } else { if (freePointerList0.size() > 0) { lockSurfaceList(); - for (void **p = freePointerList0.begin(); + for (ITER_VOID p = freePointerList0.begin(); p != freePointerList0.end(); ++p) { delete (*p); } @@ -599,7 +603,7 @@ jint JNICALL Java_javax_media_j3d_Canvas3D_swapBuffers( if (D3DERR_DEVICENOTRESET == hr) { if (debug) { printf("Buffer swap error %s, try Reset() the surface... \n", - DXGetErrorString8(hr)); + DXGetErrorString9(hr)); } retCode = d3dCtx->resetSurface(env, obj); GetDevice2(); @@ -607,7 +611,7 @@ jint JNICALL Java_javax_media_j3d_Canvas3D_swapBuffers( if (FAILED(hr)) { if (debug) { printf("Buffer swap error %s \n", - DXGetErrorString8(hr)); + DXGetErrorString9(hr)); } } } @@ -891,11 +895,11 @@ void JNICALL Java_javax_media_j3d_Canvas3D_readOffScreenBuffer( } if (d3dCtx->backSurface == NULL) { - HRESULT hr = device->GetBackBuffer(0, D3DBACKBUFFER_TYPE_MONO, + HRESULT hr = device->GetBackBuffer(0,0, D3DBACKBUFFER_TYPE_MONO, //iSwapChain is 0 &d3dCtx->backSurface); if (FAILED(hr)) { printf("[Java 3D] GetBackBuffer fail %s\n", - DXGetErrorString8(hr)); + DXGetErrorString9(hr)); return; } } diff --git a/src/native/d3d/CompressedGeometryRetained.cpp b/src/native/d3d/CompressedGeometryRetained.cpp deleted file mode 100644 index df44ebb..0000000 --- a/src/native/d3d/CompressedGeometryRetained.cpp +++ /dev/null @@ -1,39 +0,0 @@ -/* - * $RCSfile$ - * - * Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved. - * - * Use is subject to license terms. - * - * $Revision$ - * $Date$ - * $State$ - */ - -#include "StdAfx.h" - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_CompressedGeometryRetained_execute - (JNIEnv *env, jobject obj, jlong ctx, jint version, jint bufferType, - jint bufferContents, jint renderFlags, jint offset, jint size, - jbyteArray geometry) -{ - // Not support by D3D, problem should not call this. - printf("Error: CompressedGeometryRetained execute should not invoke by D3D"); -} - -extern "C" JNIEXPORT -jboolean JNICALL Java_javax_media_j3d_CompressedGeometryRetained_decompressByRef - (JNIEnv *env, jobject obj, jlong ctx) -{ - // Not support by D3D - return JNI_FALSE ; -} - -extern "C" JNIEXPORT -jboolean JNICALL Java_javax_media_j3d_CompressedGeometryRetained_decompressHW - (JNIEnv *env, jobject obj, jlong ctx, jint majorVersion, jint minorVersion) -{ - // Not support by D3D - return JNI_FALSE ; -} diff --git a/src/native/d3d/D3dCtx.cpp b/src/native/d3d/D3dCtx.cpp index 05f0bc5..85c81b6 100644 --- a/src/native/d3d/D3dCtx.cpp +++ b/src/native/d3d/D3dCtx.cpp @@ -20,14 +20,14 @@ D3dCtxVector d3dCtxList; * D3dCtx ctx* = new D3dCtx(env, obj, hwnd, offScreen, vid); * if (ctx->initialize(env, obj)) { * delete ctx; - * } + * } * d3dCtxList.push_back(ctx); - * + * * * When ctx remove : * * d3dCtxList.erase(find(d3dCtxList.begin(), d3dCtxList.end(), ctx); - * delete ctx; + * delete ctx; * */ @@ -37,10 +37,10 @@ D3dCtx::D3dCtx(JNIEnv* env, jobject obj, HWND _hwnd, BOOL _offScreen, jint vid) { int i; - + jniEnv = env; monitor = NULL; hwnd = _hwnd; - pD3D = NULL; + pD3D = NULL; pDevice = NULL; offScreen = _offScreen; offScreenWidth = 0; @@ -57,6 +57,7 @@ D3dCtx::D3dCtx(JNIEnv* env, jobject obj, HWND _hwnd, BOOL _offScreen, inToggle = false; useFreeList0 = true; reIndexifyTable = NULL; + bFastDrawQuads = getSystemProperty(env,"j3d.d3dForceFastQuads","true"); // set default RenderingState variable cullMode = D3DCULL_CW; @@ -107,37 +108,37 @@ D3dCtx::D3dCtx(JNIEnv* env, jobject obj, HWND _hwnd, BOOL _offScreen, bindTextureId = NULL; bindTextureIdLen = 0; - textureTable = (LPDIRECT3DTEXTURE8 *) malloc( - sizeof(LPDIRECT3DTEXTURE8) * TEXTURETABLESIZE); + textureTable = (LPDIRECT3DTEXTURE9 *) malloc( + sizeof(LPDIRECT3DTEXTURE9) * TEXTURETABLESIZE); if (textureTable == NULL) { error(OUTOFMEMORY); exit(1); } - ZeroMemory(textureTable, sizeof(LPDIRECT3DTEXTURE8)*TEXTURETABLESIZE); + ZeroMemory(textureTable, sizeof(LPDIRECT3DTEXTURE9)*TEXTURETABLESIZE); textureTableLen = TEXTURETABLESIZE; bindTextureId = NULL; - volumeTable = (LPDIRECT3DVOLUMETEXTURE8 *) malloc( - sizeof(LPDIRECT3DVOLUMETEXTURE8) * TEXTURETABLESIZE); + volumeTable = (LPDIRECT3DVOLUMETEXTURE9 *) malloc( + sizeof(LPDIRECT3DVOLUMETEXTURE9) * TEXTURETABLESIZE); if (volumeTable == NULL) { error(OUTOFMEMORY); exit(1); } - ZeroMemory(volumeTable, sizeof(LPDIRECT3DVOLUMETEXTURE8)*TEXTURETABLESIZE); + ZeroMemory(volumeTable, sizeof(LPDIRECT3DVOLUMETEXTURE9)*TEXTURETABLESIZE); volumeTableLen = TEXTURETABLESIZE; - cubeMapTable = (LPDIRECT3DCUBETEXTURE8 *) malloc( - sizeof(LPDIRECT3DCUBETEXTURE8) * TEXTURETABLESIZE); + cubeMapTable = (LPDIRECT3DCUBETEXTURE9 *) malloc( + sizeof(LPDIRECT3DCUBETEXTURE9) * TEXTURETABLESIZE); if (cubeMapTable == NULL) { error(OUTOFMEMORY); exit(1); } - ZeroMemory(cubeMapTable, sizeof(LPDIRECT3DCUBETEXTURE8)*TEXTURETABLESIZE); + ZeroMemory(cubeMapTable, sizeof(LPDIRECT3DCUBETEXTURE9)*TEXTURETABLESIZE); cubeMapTableLen = TEXTURETABLESIZE; @@ -152,14 +153,14 @@ D3dCtx::D3dCtx(JNIEnv* env, jobject obj, HWND _hwnd, BOOL _offScreen, if (d3dDriverList == NULL) { // keep trying to initialize even though - // last time it fail. + // last time it fail. D3dDriverInfo::initialize(env); } if (d3dDriverList == NULL) { /* * This happen when either - * (1) D3D v8.0 not install or + * (1) D3D v9.0 not install or * (2) Not enough memory or * (3) No adapter found in the system. */ @@ -167,13 +168,13 @@ D3dCtx::D3dCtx(JNIEnv* env, jobject obj, HWND _hwnd, BOOL _offScreen, return; } - pD3D = Direct3DCreate8( D3D_SDK_VERSION ); + pD3D = Direct3DCreate9( D3D_SDK_VERSION ); if (pD3D == NULL) { error(D3DNOTFOUND); return; } - // find current monitor handle before + // find current monitor handle before // get current display mode monitor = findMonitor(); @@ -185,7 +186,7 @@ D3dCtx::D3dCtx(JNIEnv* env, jobject obj, HWND _hwnd, BOOL _offScreen, warning(NEEDSWITCHMODE); } - // find the adapter for this + // find the adapter for this setDriverInfo(); GetWindowRect(topHwnd, &savedTopRect); @@ -193,9 +194,9 @@ D3dCtx::D3dCtx(JNIEnv* env, jobject obj, HWND _hwnd, BOOL _offScreen, for (i=0; i < 4; i++) { rasterRect[i].sx = 0; - rasterRect[i].sy = 0; + rasterRect[i].sy = 0; rasterRect[i].sz = 0; - rasterRect[i].rhw = 0; + rasterRect[i].rhw = 0; } rasterRect[0].tu = 0; @@ -216,7 +217,7 @@ D3dCtx::D3dCtx(JNIEnv* env, jobject obj, HWND _hwnd, BOOL _offScreen, GetWindowRect(hwnd, &windowRect); } -D3dCtx::~D3dCtx() +D3dCtx::~D3dCtx() { release(); SafeRelease(pD3D); @@ -270,7 +271,7 @@ VOID D3dCtx::releaseTexture() D3dImageComponent::remove(&BackgroundImageList, this); unlockBackground(); - // free list0 + // free list0 freeList(); // free list1 freeList(); @@ -281,7 +282,7 @@ VOID D3dCtx::setViewport() int renderWidth = getWidth(); int renderHeight = getHeight(); HRESULT hr; - D3DVIEWPORT8 vp = {0, 0, renderWidth, renderHeight, 0.0f, 1.0f}; + D3DVIEWPORT9 vp = {0, 0, renderWidth, renderHeight, 0.0f, 1.0f}; hr = pDevice->SetViewport( &vp ); @@ -314,14 +315,15 @@ VOID D3dCtx::releaseVB() while (p != NULL) { vbVector = p->vbVector; if (vbVector != NULL) { - for (r = vbVector->begin(); r != vbVector->end(); ++r) { + for (ITER_LPD3DVERTEXBUFFER r = vbVector->begin(); + r != vbVector->end(); ++r) { if (*r == p) { vbVector->erase(r); found = true; break; } } - } + } q = p; p = p->next; delete q; @@ -352,7 +354,7 @@ VOID D3dCtx::release() quadIndexBufferSize = 0; releaseVB(); - // trying to free VertexBuffer + // trying to free VertexBuffer // This will crash the driver if Indices/StreamSource // Not set before. // pDevice->SetIndices(NULL, 0); @@ -360,7 +362,7 @@ VOID D3dCtx::release() SafeRelease(depthStencilSurface); SafeRelease(frontSurface); SafeRelease(backSurface); - + SafeRelease(pDevice); currDisplayListID = 0; multiTextureSupport = false; @@ -397,7 +399,7 @@ BOOL D3dCtx::initialize(JNIEnv *env, jobject obj) oldWidth = offScreenWidth; offScreenWidth = driverInfo->desktopMode.Width; needBiggerRenderSurface = true; - + } if (offScreenHeight > driverInfo->desktopMode.Height) { @@ -410,7 +412,7 @@ BOOL D3dCtx::initialize(JNIEnv *env, jobject obj) needBiggerRenderSurface = true; } */ - + if (!bFullScreen) { getScreenRect(hwnd, &savedClientRect); CopyMemory(&screenRect, &savedClientRect, sizeof (RECT)); @@ -419,21 +421,22 @@ BOOL D3dCtx::initialize(JNIEnv *env, jobject obj) dwBehavior = findBehavior(); if (debug) { - printf("Use %s, ", driverInfo->adapterIdentifier.Description); - + printf("[Java3D]: Use %s, ", driverInfo->adapterIdentifier.Description); + if (deviceInfo->isHardwareTnL && - (dwBehavior == D3DCREATE_SOFTWARE_VERTEXPROCESSING)) { + (dwBehavior == D3DCREATE_SOFTWARE_VERTEXPROCESSING)) + { // user select non-TnL device printf("Hardware Rasterizer\n"); } else { - printf("%s \n", deviceInfo->deviceName); + printf("%s (TnL) \n", deviceInfo->deviceName); } } setPresentParams(env, obj); - + if (debug) { - printf("\nCreate device :\n"); + printf("\n[Java3D]: Create device :\n"); printInfo(&d3dPresent); } @@ -441,27 +444,75 @@ BOOL D3dCtx::initialize(JNIEnv *env, jobject obj) if ((d3dPresent.BackBufferWidth <= 0) || (d3dPresent.BackBufferHeight <= 0)) { if (debug) { - printf("D3D: Can't create device of buffer size %dx%d\n", + printf("[Java3D]: D3D: Can't create device of buffer size %dx%d\n", d3dPresent.BackBufferWidth, d3dPresent.BackBufferHeight); } return false; } - hr = pD3D->CreateDevice(driverInfo->iAdapter, +if(bUseNvPerfHUD) +{ + // using NVIDIA NvPerfHUD profiler + printf("\n[Java3D]: running in NVIDIA NvPerfHUD mode:"); + UINT adapterToUse=driverInfo->iAdapter; + D3DDEVTYPE deviceType=deviceInfo->deviceType; + DWORD behaviorFlags = dwBehavior; + bool isHUDavail = false; + + // Look for 'NVIDIA NVPerfHUD' adapter + // If it is present, override default settings + for (UINT adapter=0;adapter<pD3D->GetAdapterCount(); adapter++) + { + D3DADAPTER_IDENTIFIER9 identifier; + HRESULT Res=pD3D->GetAdapterIdentifier(adapter,0,&identifier); + printf("\n Adapter identifier : %s",identifier.Description); + if (strcmp(identifier.Description,"NVIDIA NVPerfHUD")==0) + { + adapterToUse=adapter; + deviceType=D3DDEVTYPE_REF; + behaviorFlags = D3DCREATE_HARDWARE_VERTEXPROCESSING; + isHUDavail = true; + printf("\n[Java3D]: found a NVIDIA NvPerfHUD adapter"); + break; + } + } + hr = pD3D->CreateDevice( adapterToUse, + deviceType, + topHwnd, + behaviorFlags, + &d3dPresent, + &pDevice); + if(!FAILED(hr)&& isHUDavail) + { + printf("\n[Java3D]: Using NVIDIA NvPerfHUD ! \n"); + } + else + { + printf("\n[Java3D]: No suitable device found for NVIDIA NvPerfHUD ! \n"); + } +} +else +{ + // NORMAL Mode + hr = pD3D->CreateDevice(driverInfo->iAdapter, deviceInfo->deviceType, topHwnd, dwBehavior, &d3dPresent, &pDevice); +} + - if (FAILED(hr) && (requiredDeviceID < 0)) { + if (FAILED(hr) && (requiredDeviceID < 0)) + { + printf("\n[Java3D]: Using D3DDEVTYPE_REF mode.\n"); if (deviceInfo->deviceType != D3DDEVTYPE_REF) { // switch to reference mode warning(CREATEDEVICEFAIL, hr); deviceInfo = driverInfo->d3dDeviceList[DEVICE_REF]; - dwBehavior = findBehavior(); - deviceInfo->findDepthStencilFormat(minZDepth); + dwBehavior = findBehavior(); + deviceInfo->findDepthStencilFormat(minZDepth); d3dPresent.AutoDepthStencilFormat = deviceInfo->depthStencilFormat; if (deviceInfo->depthStencilFormat == D3DFMT_UNKNOWN) { @@ -471,8 +522,8 @@ BOOL D3dCtx::initialize(JNIEnv *env, jobject obj) return false; } if (debug) { - printf("Fallback to create reference device :\n"); - printInfo(&d3dPresent); + printf("[Java3D]: Fallback to create reference device :\n"); + printInfo(&d3dPresent); } hr = pD3D->CreateDevice(driverInfo->iAdapter, @@ -482,12 +533,12 @@ BOOL D3dCtx::initialize(JNIEnv *env, jobject obj) &d3dPresent, &pDevice); } - } + } /* if (offScreen && needBiggerRenderSurface) { - IDirect3DSurface8 *pRenderTarget; - IDirect3DSurface8 *pStencilDepthTarget; + IDirect3DSurface9 *pRenderTarget; + IDirect3DSurface9 *pStencilDepthTarget; hr = pDevice->CreateRenderTarget(oldWidth, oldHeight, @@ -495,9 +546,9 @@ BOOL D3dCtx::initialize(JNIEnv *env, jobject obj) D3DMULTISAMPLE_NONE, true, &pRenderTarget); - + if (FAILED(hr)) { - printf("Fail to CreateRenderTarget %s\n", DXGetErrorString8(hr)); + printf("Fail to CreateRenderTarget %s\n", DXGetErrorString9(hr)); } else { hr = pDevice->CreateDepthStencilSurface(oldWidth, oldHeight, @@ -505,13 +556,13 @@ BOOL D3dCtx::initialize(JNIEnv *env, jobject obj) D3DMULTISAMPLE_NONE, &pStencilDepthTarget); if (FAILED(hr)) { - printf("Fail to CreateDepthStencilSurface %s\n", DXGetErrorString8(hr)); + printf("Fail to CreateDepthStencilSurface %s\n", DXGetErrorString9(hr)); pRenderTarget->Release(); } else { hr = pDevice->SetRenderTarget(pRenderTarget, pStencilDepthTarget); if (FAILED(hr)) { - printf("Fail to SetRenderTarget %s\n", DXGetErrorString8(hr)); + printf("Fail to SetRenderTarget %s\n", DXGetErrorString9(hr)); pRenderTarget->Release(); pStencilDepthTarget->Release(); } else { @@ -541,8 +592,12 @@ BOOL D3dCtx::initialize(JNIEnv *env, jobject obj) bindTextureIdLen = 1; } - jclass canvasCls = env->GetObjectClass(obj); - jfieldID id = env->GetFieldID(canvasCls, "numTexCoordSupported", "I"); + + jclass canvasCls = env->GetObjectClass(obj); + jfieldID id; + + // TODO check it !!!! + id = env->GetFieldID(canvasCls, "maxTexCoordSets", "I"); //was numtexCoordSupported env->SetIntField(obj, id, TEXSTAGESUPPORT); if (bindTextureIdLen > 1) { @@ -551,9 +606,11 @@ BOOL D3dCtx::initialize(JNIEnv *env, jobject obj) bindTextureIdLen = TEXSTAGESUPPORT; } multiTextureSupport = true; - id = env->GetFieldID(canvasCls, "multiTexAccelerated", "Z"); + id = env->GetFieldID(canvasCls, "multiTexAccelerated", "Z"); env->SetBooleanField(obj, id, JNI_TRUE); - id = env->GetFieldID(canvasCls, "numTexUnitSupported", "I"); + + // TODO check it !!!! + id = env->GetFieldID(canvasCls, "maxTextureUnits", "I"); //was numTexUnitSupported env->SetIntField(obj, id, bindTextureIdLen); } else { bindTextureIdLen = 1; @@ -573,10 +630,10 @@ BOOL D3dCtx::initialize(JNIEnv *env, jobject obj) if (debug && (deviceInfo != NULL)) { if (multiTextureSupport) { - printf("Max Texture Unit Stage support : %d \n", + printf("Max Texture Unit Stage support : %d \n", deviceInfo->maxTextureBlendStages); - printf("Max Simultaneous Texture unit support : %d \n", + printf("Max Simultaneous Texture unit support : %d \n", deviceInfo->maxSimultaneousTextures); } else { printf("MultiTexture support : false\n"); @@ -606,7 +663,7 @@ INT D3dCtx::resize(JNIEnv *env, jobject obj) BOOL moveRequest; - GetWindowRect(hwnd, &windowRect); + GetWindowRect(hwnd, &windowRect); if ((windowRect.right == screenRect.right) && (windowRect.left == screenRect.left) && @@ -624,22 +681,22 @@ INT D3dCtx::resize(JNIEnv *env, jobject obj) moveRequest = false; } - + HMONITOR oldMonitor = monitor; monitor = findMonitor(); - getScreenRect(hwnd, &screenRect); + getScreenRect(hwnd, &screenRect); if (monitor != oldMonitor) { - enumDisplayMode(&devmode); + enumDisplayMode(&devmode); setDriverInfo(); release(); initialize(env, obj); - return RECREATEDDRAW; - } + return RECREATEDDRAW; + } if (!moveRequest) { - + retValue = resetSurface(env, obj); if (retValue != RECREATEDFAIL) { return retValue; @@ -656,16 +713,16 @@ INT D3dCtx::toggleMode(BOOL _bFullScreen, JNIEnv *env, jobject obj) INT retValue; if ((pDevice == NULL) || - (!_bFullScreen && + (!_bFullScreen && !deviceInfo->canRenderWindowed)) { // driver did not support window mode return NOCHANGE; } - + int onScreenCount = 0; - - for (D3dCtx **p = d3dCtxList.begin(); p != d3dCtxList.end(); p++) { - if (!(*p)->offScreen && + + for (ITER_D3dCtxVector p = d3dCtxList.begin(); p != d3dCtxList.end(); p++) { + if (!(*p)->offScreen && // (monitor == (*p)->monitor) && (++onScreenCount > 1)) { // don't toggle if there are more than one onScreen ctx exists @@ -683,7 +740,7 @@ INT D3dCtx::toggleMode(BOOL _bFullScreen, JNIEnv *env, jobject obj) if (retValue != RECREATEDFAIL) { forceResize = true; } else { - // Switch back to window mode if fall to toggle fullscreen + // Switch back to window mode if fall to toggle fullscreen // and vice versa bFullScreen = !bFullScreen; release(); @@ -729,7 +786,7 @@ VOID D3dCtx::setPresentParams(JNIEnv *env, jobject obj) GetWindowRect(hwnd, &savedClientRect); d3dPresent.Windowed = false; - d3dPresent.hDeviceWindow = topHwnd; + d3dPresent.hDeviceWindow = topHwnd; if ((antialiasing != UNNECESSARY) && deviceInfo->supportAntialiasing()) { @@ -741,7 +798,10 @@ VOID D3dCtx::setPresentParams(JNIEnv *env, jobject obj) d3dPresent.BackBufferHeight = driverInfo->desktopMode.Height; d3dPresent.BackBufferFormat = driverInfo->desktopMode.Format; d3dPresent.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT; - d3dPresent.FullScreen_PresentationInterval = D3DPRESENT_INTERVAL_ONE; + if (deviceInfo->supportRasterPresImmediate) + d3dPresent.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; + else + d3dPresent.PresentationInterval = D3DPRESENT_INTERVAL_ONE; } else { d3dPresent.Windowed = true; @@ -757,7 +817,11 @@ VOID D3dCtx::setPresentParams(JNIEnv *env, jobject obj) d3dPresent.BackBufferHeight = getHeight(); d3dPresent.BackBufferFormat = driverInfo->desktopMode.Format; d3dPresent.FullScreen_RefreshRateInHz = 0; - d3dPresent.FullScreen_PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT; + + if (deviceInfo->supportRasterPresImmediate) + d3dPresent.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; + else + d3dPresent.PresentationInterval = D3DPRESENT_INTERVAL_ONE; } @@ -788,15 +852,15 @@ INT D3dCtx::resetSurface(JNIEnv *env, jobject obj) setPresentParams(env, obj); if (debug) { printf("\nReset Device :\n"); - printInfo(&d3dPresent); - } + printInfo(&d3dPresent); + } // Must release any non default pool surface, otherwise // Reset() will fail SafeRelease(depthStencilSurface); SafeRelease(frontSurface); SafeRelease(backSurface); - + releaseVB(); SafeRelease(lineModeIndexBuffer); quadIndexBufferSize = 0; @@ -822,12 +886,12 @@ INT D3dCtx::resetSurface(JNIEnv *env, jobject obj) } -VOID D3dCtx::error(int idx) +VOID D3dCtx::error(int idx) { error(getErrorMessage(idx)); } -VOID D3dCtx::error(int idx, HRESULT hr) +VOID D3dCtx::error(int idx, HRESULT hr) { error(getErrorMessage(idx), hr); } @@ -835,37 +899,37 @@ VOID D3dCtx::error(int idx, HRESULT hr) VOID D3dCtx::warning(int idx) { - printf("%s\n", getErrorMessage(idx)); + printf("[Java3D] Warning : %s\n", getErrorMessage(idx)); } -VOID D3dCtx::warning(int idx, HRESULT hr) +VOID D3dCtx::warning(int idx, HRESULT hr) { - printf("%s - %s\n", getErrorMessage(idx), DXGetErrorString8(hr)); + printf("[Java3D] Warning : %s - %s\n", getErrorMessage(idx), DXGetErrorString9(hr)); } -VOID D3dCtx::error(char *s) +VOID D3dCtx::error(char *s) { showError(hwnd, s, bFullScreen); } -VOID D3dCtx::error(char *s, HRESULT hr) +VOID D3dCtx::error(char *s, HRESULT hr) { char message[400]; - sprintf(message, "%s - %s", s, DXGetErrorString8(hr)); - showError(hwnd, message, bFullScreen); + sprintf(message, "%s - %s", s, DXGetErrorString9(hr)); + showError(hwnd, message, bFullScreen); } VOID D3dCtx::d3dWarning(int idx) { - printf("%s\n", getErrorMessage(idx)); + printf("[Java3D] Warning: %s\n", getErrorMessage(idx)); } - -VOID D3dCtx::d3dWarning(int idx, HRESULT hr) + +VOID D3dCtx::d3dWarning(int idx, HRESULT hr) { - printf("%s - %s\n", - getErrorMessage(idx), DXGetErrorString8(hr)); + printf("[Java3D] Warning: %s - %s\n", + getErrorMessage(idx), DXGetErrorString9(hr)); } @@ -889,7 +953,7 @@ VOID D3dCtx::showError(HWND hwnd, char *s, BOOL bFullScreen) firstError = false; if (bFullScreen) { // In full screen mode, we can't see message box - printf("[Java 3D] %s\n", s); + printf("[Java3D] Error: %s\n", s); exit(1); } else { MessageBox(hwnd, s, "Java 3D", MB_OK|MB_ICONERROR); @@ -898,7 +962,7 @@ VOID D3dCtx::showError(HWND hwnd, char *s, BOOL bFullScreen) } -DWORD D3dCtx::getWidth() +DWORD D3dCtx::getWidth() { if (!offScreen) { return screenRect.right - screenRect.left; @@ -909,7 +973,7 @@ DWORD D3dCtx::getWidth() } -DWORD D3dCtx::getHeight() +DWORD D3dCtx::getHeight() { if (!offScreen) { return screenRect.bottom - screenRect.top; @@ -927,10 +991,10 @@ D3dDeviceInfo* D3dCtx::selectDevice(int deviceID, D3dDeviceInfo *pDevice; for (int i=0; i < numDeviceTypes; i++) { - pDevice = driverInfo->d3dDeviceList[i]; + pDevice = driverInfo->d3dDeviceList[i]; if ((((deviceID == DEVICE_HAL) || (deviceID == DEVICE_HAL_TnL)) && (pDevice->deviceType == D3DDEVTYPE_HAL)) || - (deviceID == DEVICE_REF) && + (deviceID == DEVICE_REF) && (pDevice->deviceType == D3DDEVTYPE_REF)) { if ((*bFullScreen && !pDevice->fullscreenCompatible) || (!*bFullScreen && !pDevice->desktopCompatible)) { @@ -943,7 +1007,7 @@ D3dDeviceInfo* D3dCtx::selectDevice(int deviceID, exit(1); } if (pDevice->maxZBufferDepthSize == 0) { - if (pDevice->deviceType == D3DDEVTYPE_HAL) { + if (pDevice->deviceType == D3DDEVTYPE_HAL) { d3dError(HALNOTCOMPATIBLE); } else { // should not happen, REF device always support @@ -964,7 +1028,7 @@ D3dDeviceInfo* D3dCtx::selectDevice(int deviceID, exit(1); } return pDevice; - } + } } @@ -989,7 +1053,7 @@ D3dDeviceInfo* D3dCtx::selectBestDevice(D3dDriverInfo *driverInfo, if (pDevice->depthStencilFormat == D3DFMT_UNKNOWN) { if (pDevice->deviceType == D3DDEVTYPE_REF) { - d3dError(DEPTHSTENCILNOTFOUND); + d3dError(DEPTHSTENCILNOTFOUND); return NULL; } else { continue; @@ -1015,7 +1079,7 @@ D3dDeviceInfo* D3dCtx::selectBestDevice(D3dDriverInfo *driverInfo, } } } - } + } } if (bestDevice == NULL) { @@ -1023,7 +1087,7 @@ D3dDeviceInfo* D3dCtx::selectBestDevice(D3dDriverInfo *driverInfo, d3dError(DEVICENOTFOUND); return NULL; } - + // TODO: suggest another display mode for user /* if (bestDevice->deviceType == D3DDEVTYPE_REF) { @@ -1053,14 +1117,14 @@ VOID D3dCtx::setDeviceFromProperty(JNIEnv *env) if ( systemClass != NULL ) { - jmethodID method = env->GetStaticMethodID( + jmethodID method = env->GetStaticMethodID( systemClass, "getProperty", "(Ljava/lang/String;)Ljava/lang/String;" ); if ( method != NULL ) { jstring name = env->NewStringUTF( "j3d.d3ddevice" ); jstring property = reinterpret_cast<jstring>( - env->CallStaticObjectMethod( + env->CallStaticObjectMethod( systemClass, method, name )); jboolean isCopy; @@ -1086,12 +1150,12 @@ VOID D3dCtx::setDeviceFromProperty(JNIEnv *env) } name = env->NewStringUTF( "j3d.d3ddriver" ); property = reinterpret_cast<jstring>( - env->CallStaticObjectMethod( + env->CallStaticObjectMethod( systemClass, method, name )); if ( property != NULL ) { const char* chars = env->GetStringUTFChars( - property, &isCopy); + property, &isCopy); if ( chars != 0 ) { // atoi() return 0, our default value, on error. @@ -1112,14 +1176,14 @@ VOID D3dCtx::setFullScreenFromProperty(JNIEnv *env) if ( systemClass != NULL ) { - jmethodID method = env->GetStaticMethodID( + jmethodID method = env->GetStaticMethodID( systemClass, "getProperty", "(Ljava/lang/String;)Ljava/lang/String;" ); if ( method != NULL ) { jstring name = env->NewStringUTF( "j3d.fullscreen" ); jstring property = reinterpret_cast<jstring>( - env->CallStaticObjectMethod( + env->CallStaticObjectMethod( systemClass, method, name )); if ( property != NULL ) { @@ -1149,14 +1213,14 @@ VOID D3dCtx::setVBLimitProperty(JNIEnv *env) if ( systemClass != NULL ) { - jmethodID method = env->GetStaticMethodID( + jmethodID method = env->GetStaticMethodID( systemClass, "getProperty", "(Ljava/lang/String;)Ljava/lang/String;" ); if ( method != NULL ) { jstring name = env->NewStringUTF( "j3d.vertexbufferlimit" ); jstring property = reinterpret_cast<jstring>( - env->CallStaticObjectMethod( + env->CallStaticObjectMethod( systemClass, method, name )); if ( property != NULL ) { @@ -1190,14 +1254,14 @@ VOID D3dCtx::setDebugProperty(JNIEnv *env) if ( systemClass != NULL ) { - jmethodID method = env->GetStaticMethodID( + jmethodID method = env->GetStaticMethodID( systemClass, "getProperty", "(Ljava/lang/String;)Ljava/lang/String;" ); if ( method != NULL ) { jstring name = env->NewStringUTF( "j3d.debug" ); jstring property = reinterpret_cast<jstring>( - env->CallStaticObjectMethod( + env->CallStaticObjectMethod( systemClass, method, name )); if ( property != NULL ) { @@ -1219,6 +1283,41 @@ VOID D3dCtx::setDebugProperty(JNIEnv *env) } } +BOOL D3dCtx::getSystemProperty(JNIEnv *env, char *strName, char *strValue) +{ + jclass systemClass = env->FindClass( "javax/media/j3d/MasterControl" ); + + if ( systemClass != NULL ) + { + jmethodID method = env->GetStaticMethodID( + systemClass, "getProperty", + "(Ljava/lang/String;)Ljava/lang/String;" ); + if ( method != NULL ) + { + jstring name = env->NewStringUTF( strName ); + jstring property = reinterpret_cast<jstring>( + env->CallStaticObjectMethod( + systemClass, method, name )); + if ( property != NULL ) + { + jboolean isCopy; + const char * chars = env->GetStringUTFChars(property, &isCopy ); + if ( chars != 0 && stricmp( chars, strValue ) == 0 ) + { + env->ReleaseStringUTFChars( property, chars ); + return true; + } + else + { + env->ReleaseStringUTFChars( property, chars ); + return false; + } + } + } + } + return false; +} + VOID D3dCtx::setImplicitMultisamplingProperty(JNIEnv *env) { jclass cls = env->FindClass("javax/media/j3d/VirtualUniverse"); @@ -1227,7 +1326,7 @@ VOID D3dCtx::setImplicitMultisamplingProperty(JNIEnv *env) implicitMultisample = false; return; } - + jfieldID fieldID = env->GetStaticFieldID(cls, "mc", "Ljavax/media/j3d/MasterControl;"); if (fieldID == NULL) { @@ -1242,7 +1341,7 @@ VOID D3dCtx::setImplicitMultisamplingProperty(JNIEnv *env) return; } - cls = env->FindClass("javax/media/j3d/MasterControl"); + cls = env->FindClass("javax/media/j3d/MasterControl"); if (cls == NULL) { implicitMultisample = false; @@ -1262,7 +1361,7 @@ VOID D3dCtx::setImplicitMultisamplingProperty(JNIEnv *env) // Callback to notify Canvas3D which mode it is currently running -VOID D3dCtx::setCanvasProperty(JNIEnv *env, jobject obj) +VOID D3dCtx::setCanvasProperty(JNIEnv *env, jobject obj) { int mask = javax_media_j3d_Canvas3D_EXT_ABGR | javax_media_j3d_Canvas3D_EXT_BGR; @@ -1276,11 +1375,11 @@ VOID D3dCtx::setCanvasProperty(JNIEnv *env, jobject obj) } jclass canvasCls = env->GetObjectClass(obj); - jfieldID id = env->GetFieldID(canvasCls, "fullScreenMode", "Z"); + jfieldID id = env->GetFieldID(canvasCls, "fullScreenMode", "Z"); env->SetBooleanField(obj, id, bFullScreen); - id = env->GetFieldID(canvasCls, "fullscreenWidth", "I"); + id = env->GetFieldID(canvasCls, "fullscreenWidth", "I"); env->SetIntField(obj, id, driverInfo->desktopMode.Width); - id = env->GetFieldID(canvasCls, "fullscreenHeight", "I"); + id = env->GetFieldID(canvasCls, "fullscreenHeight", "I"); env->SetIntField(obj, id, driverInfo->desktopMode.Height); id = env->GetFieldID(canvasCls, "textureExtendedFeatures", "I"); @@ -1288,35 +1387,54 @@ VOID D3dCtx::setCanvasProperty(JNIEnv *env, jobject obj) id = env->GetFieldID(canvasCls, "extensionsSupported", "I"); env->SetIntField(obj, id, mask); - + id = env->GetFieldID(canvasCls, "nativeGraphicsVersion", "Ljava/lang/String;"); - char *version = "DirectX 8.0 or above"; + char *version = "DirectX 9.0 or above"; env->SetObjectField(obj, id, env->NewStringUTF(version)); - float degree = deviceInfo->maxAnisotropy; + float degree = float(deviceInfo->maxAnisotropy); id = env->GetFieldID(canvasCls, "anisotropicDegreeMax", "F"); env->SetFloatField(obj, id, degree); id = env->GetFieldID(canvasCls, "textureWidthMax", "I"); - env->SetIntField(obj, id, deviceInfo->maxTextureWidth); + env->SetIntField(obj, id, deviceInfo->maxTextureWidth); id = env->GetFieldID(canvasCls, "textureHeightMax", "I"); - env->SetIntField(obj, id, deviceInfo->maxTextureHeight); + env->SetIntField(obj, id, deviceInfo->maxTextureHeight); if (deviceInfo->maxTextureDepth > 0) { id = env->GetFieldID(canvasCls, "texture3DWidthMax", "I"); - env->SetIntField(obj, id, deviceInfo->maxTextureWidth); + env->SetIntField(obj, id, deviceInfo->maxTextureWidth); id = env->GetFieldID(canvasCls, "texture3DHeightMax", "I"); - env->SetIntField(obj, id, deviceInfo->maxTextureHeight); + env->SetIntField(obj, id, deviceInfo->maxTextureHeight); id = env->GetFieldID(canvasCls, "texture3DDepthMax", "I"); env->SetIntField(obj, id, deviceInfo->maxTextureDepth); + + // issue 135 + // private String nativeGraphicsVendor = "<UNKNOWN>"; + // private String nativeGraphicsRenderer = "<UNKNOWN>"; + id = env->GetFieldID(canvasCls, "nativeGraphicsVendor", "Ljava/lang/String;"); + //char *nGVendor = driverInfo->adapterIdentifier.DeviceName ; + char *nGVendor = deviceInfo->deviceVendor ; + env->SetObjectField(obj, id, env->NewStringUTF(nGVendor)); + // printf("DEBUG vendor : %s ", nGVendor); + + id = env->GetFieldID(canvasCls, "nativeGraphicsRenderer", "Ljava/lang/String;"); + // char *nGRenderer = driverInfo->adapterIdentifier.Description; + char *nGRenderer = deviceInfo->deviceRenderer; + env->SetObjectField(obj, id, env->NewStringUTF(nGRenderer)); + + } } -VOID D3dCtx::createVertexBuffer() + + + +VOID D3dCtx::createVertexBuffer() { if (srcVertexBuffer != NULL) { // Each pDevice has its own vertex buffer, @@ -1328,27 +1446,45 @@ VOID D3dCtx::createVertexBuffer() if (dstVertexBuffer != NULL) { dstVertexBuffer->Release(); } + DWORD usage_D3DVERTEX = D3DUSAGE_DONOTCLIP| + D3DUSAGE_WRITEONLY| + D3DUSAGE_SOFTWAREPROCESSING; + + DWORD usage_D3DTLVERTEX= D3DUSAGE_DONOTCLIP| + D3DUSAGE_SOFTWAREPROCESSING; + +//# if NVIDIA_DEBUG + if(deviceInfo->isHardwareTnL) + { + // remove SoftwareProcessing + usage_D3DVERTEX = D3DUSAGE_DONOTCLIP| + D3DUSAGE_WRITEONLY; + + usage_D3DTLVERTEX = D3DUSAGE_DONOTCLIP; + } +// # endif HRESULT hr = pDevice->CreateVertexBuffer(sizeof(D3DVERTEX), - D3DUSAGE_DONOTCLIP| - D3DUSAGE_WRITEONLY| - D3DUSAGE_SOFTWAREPROCESSING, + usage_D3DVERTEX, D3DFVF_XYZ, D3DPOOL_MANAGED, - &srcVertexBuffer); + &srcVertexBuffer, + NULL); if (FAILED(hr)) { + printf("\n[Java3D] Failed to create VertexBuffer (D3DVERTEX)\n"); error(CREATEVERTEXBUFFER, hr); + } hr = pDevice->CreateVertexBuffer(sizeof(D3DTLVERTEX), - D3DUSAGE_DONOTCLIP| - D3DUSAGE_SOFTWAREPROCESSING, + usage_D3DTLVERTEX, D3DFVF_XYZRHW|D3DFVF_TEX1, D3DPOOL_MANAGED, - &dstVertexBuffer); + &dstVertexBuffer,NULL); if (FAILED(hr)) { + printf("\n[Java3D] Warning: Failed to create VertexBuffer (D3DTLVERTEX)\n"); error(CREATEVERTEXBUFFER, hr); } } @@ -1377,34 +1513,39 @@ VOID D3dCtx::transform(D3DVERTEX *worldCoord, D3DTLVERTEX *screenCoord) { if (!softwareVertexProcessing) { // ProcessVertices() only work in software vertex // processing mode - pDevice->SetRenderState(D3DRS_SOFTWAREVERTEXPROCESSING, - TRUE); + //pDevice->SetRenderState(D3DRS_SOFTWAREVERTEXPROCESSING, TRUE); + pDevice->SetSoftwareVertexProcessing(TRUE); } pDevice->SetRenderState(D3DRS_CLIPPING, FALSE); - hr = srcVertexBuffer->Lock(0, 0, (BYTE **)&pv, 0); + hr = srcVertexBuffer->Lock(0, 0, (VOID **)&pv, 0); if (FAILED(hr)) { if (debug) { - printf("Fail to lock buffer %s\n", DXGetErrorString8(hr)); + printf("[Java3D] Fail to lock buffer %s\n", DXGetErrorString9(hr)); } } else { pv[0].x = worldCoord->x; pv[0].y = worldCoord->y; pv[0].z = worldCoord->z; - + srcVertexBuffer->Unlock(); - pDevice->SetStreamSource(0, srcVertexBuffer, - sizeof(D3DVERTEX)); - pDevice->SetVertexShader(D3DFVF_XYZ); + pDevice->SetStreamSource(0, srcVertexBuffer,0, sizeof(D3DVERTEX)); + + //pDevice->SetVertexShader(D3DFVF_XYZ); + pDevice->SetVertexShader(NULL); + pDevice->SetFVF(D3DFVF_XYZ); + hr = pDevice->ProcessVertices(0, 0, 1, - dstVertexBuffer, 0); - + dstVertexBuffer, + NULL, + 0); + if (FAILED(hr)) { if (debug) { - printf("Fail to processVertices %s\n", DXGetErrorString8(hr)); + printf("[Java3D] Fail to processVertices %s\n", DXGetErrorString9(hr)); } } else { - hr = dstVertexBuffer->Lock(0, 0, (BYTE **)&tlpv, D3DLOCK_READONLY); + hr = dstVertexBuffer->Lock(0, 0, (VOID **)&tlpv, D3DLOCK_READONLY); if (SUCCEEDED(hr)) { screenCoord->sx = tlpv[0].sx; screenCoord->sy = tlpv[0].sy; @@ -1420,12 +1561,12 @@ VOID D3dCtx::transform(D3DVERTEX *worldCoord, D3DTLVERTEX *screenCoord) { } pDevice->SetRenderState(D3DRS_CLIPPING, TRUE); if (!softwareVertexProcessing) { - pDevice->SetRenderState(D3DRS_SOFTWAREVERTEXPROCESSING, - FALSE); + //pDevice->SetRenderState(D3DRS_SOFTWAREVERTEXPROCESSING, FALSE); + pDevice->SetSoftwareVertexProcessing(FALSE); } // restore original texture state pDevice->SetTextureStageState(0, D3DTSS_COLOROP, texState); - } + } } @@ -1437,13 +1578,13 @@ VOID D3dCtx::getScreenRect(HWND hwnd, RECT *rect) { if ((deviceInfo->isHardware) && (numDriver > 1)) { - MONITORINFO info; + MONITORINFO info; HMONITOR hMonitor = driverInfo->hMonitor; info.cbSize = sizeof(MONITORINFO); if (hMonitor == NULL) { - hMonitor = MonitorFromWindow(hwnd, - MONITOR_DEFAULTTONEAREST); + hMonitor = MonitorFromWindow(hwnd, + MONITOR_DEFAULTTONEAREST); } GetMonitorInfo(hMonitor, &info); monitorLeft = info.rcMonitor.left; @@ -1463,20 +1604,20 @@ VOID D3dCtx::getScreenRect(HWND hwnd, RECT *rect) { * Return NULL if this window intersect several monitor */ -HMONITOR D3dCtx::findMonitor() +HMONITOR D3dCtx::findMonitor() { if ((osvi.dwMajorVersion < 4) || (numDriver < 2)) { return NULL; - } + } RECT rect; - MONITORINFO info; - HMONITOR hmonitor = MonitorFromWindow(hwnd, - MONITOR_DEFAULTTONEAREST); + MONITORINFO info; + HMONITOR hmonitor = MonitorFromWindow(hwnd, + MONITOR_DEFAULTTONEAREST); info.cbSize = sizeof(MONITORINFO); - GetMonitorInfo(hmonitor, &info); + GetMonitorInfo(hmonitor, &info); GetWindowRect(hwnd, &rect); if ((info.rcMonitor.left <= rect.left) && @@ -1502,7 +1643,7 @@ D3dDeviceInfo* D3dCtx::setDeviceInfo(D3dDriverInfo *driverInfo, int minZDepth) { if (requiredDeviceID >= 0) { - return selectDevice(requiredDeviceID, driverInfo, + return selectDevice(requiredDeviceID, driverInfo, bFullScreen, minZDepth); } else { return selectBestDevice(driverInfo, bFullScreen, @@ -1528,7 +1669,7 @@ VOID D3dCtx::setDriverInfo() if (d3dDriverList[i]->hMonitor == monitor) { newDriver = d3dDriverList[i]; break; - } + } } } } else { @@ -1545,26 +1686,27 @@ VOID D3dCtx::setDriverInfo() VOID D3dCtx::setDefaultAttributes() { - pDevice->SetRenderState(D3DRS_SOFTWAREVERTEXPROCESSING, - softwareVertexProcessing); + /*pDevice->SetRenderState(D3DRS_SOFTWAREVERTEXPROCESSING, + softwareVertexProcessing);*/ + pDevice->SetSoftwareVertexProcessing(softwareVertexProcessing); pDevice->SetRenderState(D3DRS_SPECULARMATERIALSOURCE, D3DMCS_MATERIAL); pDevice->SetRenderState(D3DRS_AMBIENTMATERIALSOURCE, D3DMCS_MATERIAL); pDevice->SetRenderState(D3DRS_NORMALIZENORMALS, TRUE); - // Default specular is FALSE + // Default specular is FALSE pDevice->SetRenderState(D3DRS_SPECULARENABLE, TRUE); // Texture & CULL mode default value for D3D is different from OGL pDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CW); - // Default in D3D is D3DCMP_LESSEQUAL, OGL is D3DCMP_LESS + // Default in D3D is D3DCMP_LESSEQUAL, OGL is D3DCMP_LESS // Set Range based fog - pDevice->SetRenderState(D3DRS_RANGEFOGENABLE, + pDevice->SetRenderState(D3DRS_RANGEFOGENABLE, deviceInfo->rangeFogEnable); - + // disable antialiasing (default is true in D3D) if (!implicitMultisample) { pDevice->SetRenderState(D3DRS_MULTISAMPLEANTIALIAS, FALSE); @@ -1582,13 +1724,13 @@ VOID D3dCtx::setDefaultAttributes() pDevice->SetTextureStageState(i, D3DTSS_COLORARG1, D3DTA_TEXTURE); pDevice->SetTextureStageState(i, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1); pDevice->SetTextureStageState(i, D3DTSS_ALPHAARG1, D3DTA_TEXTURE); - pDevice->SetTextureStageState(i, D3DTSS_MIPFILTER, D3DTEXF_LINEAR); - pDevice->SetTextureStageState(i, D3DTSS_MAGFILTER, D3DTEXF_LINEAR); + //pDevice->SetTextureStageState(i, D3DTSS_MIPFILTER, D3DTEXF_LINEAR); + //pDevice->SetTextureStageState(i, D3DTSS_MAGFILTER, D3DTEXF_LINEAR); bindTextureId[i] = -1; } } - + for (int i=0; i < TEXSTAGESUPPORT; i++) { texGenMode[i] = TEX_GEN_NONE; texTransformSet[i] = false; @@ -1599,11 +1741,11 @@ VOID D3dCtx::setDefaultAttributes() } } -VOID D3dCtx::enumDisplayMode(DEVMODE* dmode) +VOID D3dCtx::enumDisplayMode(DEVMODE* dmode) { MONITORINFOEX mi; - + if (monitor == NULL) { EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, dmode ); } else { @@ -1613,22 +1755,70 @@ VOID D3dCtx::enumDisplayMode(DEVMODE* dmode) EnumDisplaySettings( mi.szDevice, ENUM_CURRENT_SETTINGS, dmode); } } - -DWORD D3dCtx::findBehavior() +// check what kind of Vertex processing will be used +DWORD D3dCtx::findBehavior() { + bForceHwdVertexProcess = getSystemProperty(jniEnv,"j3d.d3dVertexProcess","hardware"); + bForceMixVertexProcess = getSystemProperty(jniEnv,"j3d.d3dVertexProcess","mixed"); + bForceSWVertexProcess = getSystemProperty(jniEnv,"j3d.d3dVertexProcess","software"); + + bUseNvPerfHUD = getSystemProperty(jniEnv,"j3d.useNvPerfHUD","true"); + + if (bUseNvPerfHUD) // must have bForceHwdVertexProcess as true + { + printf("\n[Java3D]: using j3d.useNvPerfHUD=true\n"); + bForceHwdVertexProcess = true; + bForceMixVertexProcess = false; + bForceSWVertexProcess = false; + } + + if (bForceHwdVertexProcess) + { + softwareVertexProcessing = FALSE; + printf("\n[Java3D]: using d3dVertexProcess=hardware\n"); + return D3DCREATE_HARDWARE_VERTEXPROCESSING; + } + + if (bForceMixVertexProcess) + { + printf("\n[Java3D]: using d3dVertexProcess=mixed\n"); + softwareVertexProcessing = FALSE; + return D3DCREATE_MIXED_VERTEXPROCESSING; + } + + if (bForceSWVertexProcess) + { + printf("\n[Java3D]: using d3dVertexProcess=software\n"); + softwareVertexProcessing = TRUE; + return D3DCREATE_SOFTWARE_VERTEXPROCESSING; + } + // high-end video cards: NV25 and above + if (deviceInfo->isHardwareTnL && deviceInfo->supportShaders11 && + ((requiredDeviceID < 0) || (requiredDeviceID == DEVICE_HAL_TnL))) + { + if (debug){printf("\n[Java3D]: using hardware Vertex Processing.\n");} + softwareVertexProcessing = FALSE; + return D3DCREATE_HARDWARE_VERTEXPROCESSING; + } + // midle-end video cards if (deviceInfo->isHardwareTnL && - ((requiredDeviceID < 0) || (requiredDeviceID == DEVICE_HAL_TnL))) { - softwareVertexProcessing = FALSE; - return D3DCREATE_MIXED_VERTEXPROCESSING; - } else { - softwareVertexProcessing = TRUE; - return D3DCREATE_SOFTWARE_VERTEXPROCESSING; - } + ((requiredDeviceID < 0) || (requiredDeviceID == DEVICE_HAL_TnL))) + { + if (debug){printf("\n[Java3D]: using mixed Vertex Processing.\n");} + softwareVertexProcessing = FALSE; + return D3DCREATE_MIXED_VERTEXPROCESSING; + } + else // low-end vcards use Software Vertex Processing + { + if (debug){printf("\n[Java3D]: using software Vertex Processing.\n");} + softwareVertexProcessing = TRUE; + return D3DCREATE_SOFTWARE_VERTEXPROCESSING; + } } -VOID D3dCtx::printInfo(D3DPRESENT_PARAMETERS *d3dPresent) +VOID D3dCtx::printInfo(D3DPRESENT_PARAMETERS *d3dPresent) { - + if (d3dPresent->Windowed) { printf("Window "); } else { @@ -1652,11 +1842,11 @@ VOID D3dCtx::setWindowMode() SetWindowLong(topHwnd, GWL_STYLE, winStyle); SetWindowPos(topHwnd, HWND_NOTOPMOST, savedTopRect.left, savedTopRect.top, savedTopRect.right - savedTopRect.left, - savedTopRect.bottom - savedTopRect.top, + savedTopRect.bottom - savedTopRect.top, SWP_SHOWWINDOW); } else { SetWindowLong(topHwnd, GWL_STYLE, - WS_POPUP|WS_SYSMENU|WS_VISIBLE); + WS_POPUP|WS_SYSMENU|WS_VISIBLE); } } @@ -1672,7 +1862,7 @@ VOID D3dCtx::setAmbientLightMaterial() pDevice->GetMaterial(&savedMaterial); pDevice->GetLightEnable(0, &savedLightEnable); - CopyColor(ambientMaterial.Ambient, + CopyColor(ambientMaterial.Ambient, currentColor_r, currentColor_g, currentColor_b, @@ -1700,18 +1890,19 @@ VOID D3dCtx::restoreDefaultLightMaterial() pDevice->LightEnable(0, savedLightEnable); } -VOID D3dCtx::freeVBList(D3dVertexBufferVector *v) +VOID D3dCtx::freeVBList(D3dVertexBufferVector *v) { - LPD3DVERTEXBUFFER *p, r; + //LPD3DVERTEXBUFFER *p; + LPD3DVERTEXBUFFER r; lockGeometry(); - for (p = v->begin(); p != v->end(); ++p) { + for (ITER_LPD3DVERTEXBUFFER p = v->begin(); p != v->end(); ++p) { // Remove itself from current ctx vertexBufferTable list r = (*p)->next; if (r != NULL) { r->previous = (*p)->previous; - } + } (*p)->previous->next = r; // Now we can free current VB delete (*p); @@ -1721,9 +1912,9 @@ VOID D3dCtx::freeVBList(D3dVertexBufferVector *v) } -VOID D3dCtx::freeResourceList(LPDIRECT3DRESOURCE8Vector *v) +VOID D3dCtx::freeResourceList(LPDIRECT3DRESOURCE9Vector *v) { - LPDIRECT3DRESOURCE8 *s; + ITER_LPDIRECT3DRESOURCE9 s; lockSurfaceList(); for (s = v->begin(); s != v->end(); ++s) { @@ -1754,7 +1945,7 @@ VOID D3dCtx::freeList() } } -VOID D3dCtx::freeVB(LPD3DVERTEXBUFFER vb) +VOID D3dCtx::freeVB(LPD3DVERTEXBUFFER vb) { if (vb != NULL) { lockSurfaceList(); @@ -1768,14 +1959,14 @@ VOID D3dCtx::freeVB(LPD3DVERTEXBUFFER vb) } -VOID D3dCtx::freeResource(LPDIRECT3DRESOURCE8 res) +VOID D3dCtx::freeResource(LPDIRECT3DRESOURCE9 res) { if (res != NULL) { lockSurfaceList(); if (useFreeList0) { freeResourceList0.push_back(res); } else { - freeResourceList1.push_back(res); + freeResourceList1.push_back(res); } unlockSurfaceList(); } @@ -1785,14 +1976,18 @@ BOOL D3dCtx::createFrontBuffer() { HRESULT hr; - hr = pDevice->CreateImageSurface(driverInfo->desktopMode.Width, + /*CreateImageSurface*/ + hr = pDevice->CreateOffscreenPlainSurface( + driverInfo->desktopMode.Width, driverInfo->desktopMode.Height, D3DFMT_A8R8G8B8, - &frontSurface); + D3DPOOL_SCRATCH, + &frontSurface, + NULL); if (FAILED(hr)) { if (debug) { - printf("[Java3D] Fail to CreateImageSurface %s\n", - DXGetErrorString8(hr)); + printf("[Java3D] Fail to CreateOffscreenPlainSurface %s\n", + DXGetErrorString9(hr)); } frontSurface = NULL; return false; @@ -1800,5 +1995,74 @@ BOOL D3dCtx::createFrontBuffer() return true; } +jboolean D3dCtx::getJavaBoolEnv(JNIEnv *env, char* envStr) +{ + jclass systemClass = env->FindClass( "javax/media/j3d/MasterControl" ); + + if ( systemClass != NULL ) + { + jmethodID method = env->GetStaticMethodID( + systemClass, "getProperty", + "(Ljava/lang/String;)Ljava/lang/String;" ); + if ( method != NULL ) + { + jstring name = env->NewStringUTF( envStr ); + jstring property = reinterpret_cast<jstring>( + env->CallStaticObjectMethod( + systemClass, method, name )); + if ( property != NULL ) + { + jboolean isCopy; + const char * chars = env->GetStringUTFChars( + property, &isCopy ); + if ( chars != 0 ) + { + if ( stricmp( chars, "true" ) == 0 ) + { + env->ReleaseStringUTFChars( property, chars ); + return true; + } + else + { + env->ReleaseStringUTFChars( property, chars ); + return false; + } + env->ReleaseStringUTFChars( property, chars ); + } + } + } + } + return false; +} + + + +/** +// this routine is not safe using current D3D routines +VOID D3dCtx::getDXVersion(CHAR* strResult) +{ + HRESULT hr; + // TCHAR strResult[128]; + + DWORD dwDirectXVersion = 0; + TCHAR strDirectXVersion[10]; + + hr = GetDXVersion( &dwDirectXVersion, strDirectXVersion, 10 ); + if( SUCCEEDED(hr) ) + { + strcpy( strResult, "DirectX "); + if( dwDirectXVersion > 0 ) + + strcpy( strResult, strDirectXVersion ); + else + strcpy( strResult, "not installed") ); + } + else + { + strcpy( strResult, "Unknown version of DirectX installed"); + } + +} + **/ 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 diff --git a/src/native/d3d/D3dDeviceInfo.cpp b/src/native/d3d/D3dDeviceInfo.cpp index 5628273..7fffdf5 100644 --- a/src/native/d3d/D3dDeviceInfo.cpp +++ b/src/native/d3d/D3dDeviceInfo.cpp @@ -22,63 +22,95 @@ D3dDeviceInfo::~D3dDeviceInfo() { } -VOID D3dDeviceInfo::setCaps(D3DCAPS8 *d3dCaps) { - - if (deviceType == D3DDEVTYPE_HAL) { - isHardware = true; - isHardwareTnL = (d3dCaps->DevCaps & - D3DDEVCAPS_HWTRANSFORMANDLIGHT); - } else { - isHardware = false; - isHardwareTnL = false; +VOID D3dDeviceInfo::setCaps(D3DCAPS9 *d3dCaps) +{ + if (deviceType == D3DDEVTYPE_HAL ) + { + isHardware = true; + isHardwareTnL = (d3dCaps->DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT); + } + else // D3DDEVTYPE_REF + { + isHardware = false; + isHardwareTnL = false; } + + // check if it supports at least vertex shader 1.1 + if(d3dCaps->VertexShaderVersion < D3DVS_VERSION(1,1)) + { + supportShaders11 = false; + } + else + { + supportShaders11 = true; + } + DWORD vsVersion = d3dCaps->VertexShaderVersion; + if (debug) + { + char* dt; + if (isHardware) + dt = "HAL"; + else + dt ="REL"; + + printf("Java3D: Supported Shaders = %d.%d in mode %s ", + HIBYTE(LOWORD(vsVersion)), + LOBYTE(LOWORD(vsVersion)), + dt); + + } + + //supportStreamOffset = + + supportDepthBias = (d3dCaps->RasterCaps & D3DPRASTERCAPS_DEPTHBIAS) != 0; + maxTextureBlendStages = d3dCaps->MaxTextureBlendStages; maxSimultaneousTextures = d3dCaps->MaxSimultaneousTextures; - maxTextureUnitStageSupport = min(maxTextureBlendStages, - maxSimultaneousTextures); - supportMipmap = ((d3dCaps->TextureCaps & - D3DPTEXTURECAPS_MIPMAP) != 0); - texturePow2Only = ((d3dCaps->TextureCaps & - D3DPTEXTURECAPS_POW2) != 0); - textureSquareOnly = ((d3dCaps->TextureCaps & - D3DPTEXTURECAPS_SQUAREONLY) != 0); - linePatternSupport = ((d3dCaps->PrimitiveMiscCaps & - D3DPMISCCAPS_LINEPATTERNREP) != 0); - texBorderModeSupport = ((d3dCaps->TextureAddressCaps & - D3DPTADDRESSCAPS_BORDER) != 0); - texLerpSupport = ((d3dCaps->TextureOpCaps & - D3DTEXOPCAPS_LERP) != 0); - canRenderWindowed = ((d3dCaps->Caps2 & - D3DCAPS2_CANRENDERWINDOWED) != 0); + + maxTextureUnitStageSupport = min(maxTextureBlendStages, maxSimultaneousTextures); + + supportMipmap = ((d3dCaps->TextureCaps & D3DPTEXTURECAPS_MIPMAP) != 0); + + texturePow2Only = ((d3dCaps->TextureCaps & D3DPTEXTURECAPS_POW2) != 0); + + textureSquareOnly = ((d3dCaps->TextureCaps & D3DPTEXTURECAPS_SQUAREONLY) != 0); + + linePatternSupport = false; //((d3dCaps->PrimitiveMiscCaps & D3DPMISCCAPS_LINEPATTERNREP) != 0); + + texBorderModeSupport = ((d3dCaps->TextureAddressCaps & D3DPTADDRESSCAPS_BORDER) != 0); + + texLerpSupport = ((d3dCaps->TextureOpCaps & D3DTEXOPCAPS_LERP) != 0); + + canRenderWindowed = true;//((d3dCaps->Caps2 & D3DCAPS2_CANRENDERWINDOWED) != 0); + maxPrimitiveCount = d3dCaps->MaxPrimitiveCount; - maxVertexIndex = min(vertexBufferMaxVertexLimit, - d3dCaps->MaxVertexIndex); + maxVertexIndex = min(vertexBufferMaxVertexLimit, d3dCaps->MaxVertexIndex); + maxTextureHeight = d3dCaps->MaxTextureHeight; maxTextureWidth = d3dCaps->MaxTextureWidth; maxTextureDepth = d3dCaps->MaxVolumeExtent; maxActiveLights = d3dCaps->MaxActiveLights; - maxPointSize = d3dCaps->MaxPointSize; + maxPointSize = DWORD(d3dCaps->MaxPointSize); maxAnisotropy = d3dCaps->MaxAnisotropy; - maxVertexCount[GEO_TYPE_QUAD_SET] = min(vertexBufferMaxVertexLimit, + maxVertexCount[GEO_TYPE_QUAD_SET] = min(vertexBufferMaxVertexLimit, maxPrimitiveCount << 1); // Since index is used, we need to make sure than index range // is also support. - maxVertexCount[GEO_TYPE_QUAD_SET] = min(maxVertexCount[GEO_TYPE_QUAD_SET], - maxVertexIndex); - - maxVertexCount[GEO_TYPE_TRI_SET] = min(vertexBufferMaxVertexLimit, - maxPrimitiveCount*3); - maxVertexCount[GEO_TYPE_POINT_SET] = min(vertexBufferMaxVertexLimit, - maxPrimitiveCount); - maxVertexCount[GEO_TYPE_LINE_SET] = min(vertexBufferMaxVertexLimit, - maxPrimitiveCount << 1); - maxVertexCount[GEO_TYPE_TRI_STRIP_SET] = min(vertexBufferMaxVertexLimit, - maxPrimitiveCount + 2); - maxVertexCount[GEO_TYPE_TRI_FAN_SET] = min(vertexBufferMaxVertexLimit, - maxPrimitiveCount + 2); + maxVertexCount[GEO_TYPE_QUAD_SET] = min(maxVertexCount[GEO_TYPE_QUAD_SET], maxVertexIndex); + + maxVertexCount[GEO_TYPE_TRI_SET] = min(vertexBufferMaxVertexLimit, maxPrimitiveCount*3); + + maxVertexCount[GEO_TYPE_POINT_SET] = min(vertexBufferMaxVertexLimit, maxPrimitiveCount); + + maxVertexCount[GEO_TYPE_LINE_SET] = min(vertexBufferMaxVertexLimit, maxPrimitiveCount << 1); + + maxVertexCount[GEO_TYPE_TRI_STRIP_SET] = min(vertexBufferMaxVertexLimit, maxPrimitiveCount + 2); + + maxVertexCount[GEO_TYPE_TRI_FAN_SET] = min(vertexBufferMaxVertexLimit, maxPrimitiveCount + 2); + maxVertexCount[GEO_TYPE_LINE_STRIP_SET] = min(vertexBufferMaxVertexLimit, maxPrimitiveCount +1); maxVertexCount[GEO_TYPE_INDEXED_QUAD_SET] = maxVertexCount[GEO_TYPE_QUAD_SET]; @@ -89,38 +121,57 @@ VOID D3dDeviceInfo::setCaps(D3DCAPS8 *d3dCaps) { maxVertexCount[GEO_TYPE_INDEXED_TRI_FAN_SET] = maxVertexCount[GEO_TYPE_TRI_FAN_SET]; maxVertexCount[GEO_TYPE_INDEXED_LINE_STRIP_SET] = maxVertexCount[GEO_TYPE_LINE_STRIP_SET]; + if ( (d3dCaps->PresentationIntervals & D3DPRESENT_INTERVAL_IMMEDIATE) != 0) + supportRasterPresImmediate = true; + else + supportRasterPresImmediate = false; if (((d3dCaps->RasterCaps & D3DPRASTERCAPS_FOGTABLE) != 0) && - ((d3dCaps->RasterCaps & D3DPRASTERCAPS_WFOG) != 0)) { + ((d3dCaps->RasterCaps & D3DPRASTERCAPS_WFOG) != 0)) + { // use pixel w-fog fogMode = D3DRS_FOGTABLEMODE; rangeFogEnable = false; - } else if (((d3dCaps->RasterCaps & D3DPRASTERCAPS_FOGVERTEX) != 0) && - ((d3dCaps->RasterCaps & D3DPRASTERCAPS_FOGRANGE) != 0)) { - // use vertex range based fog - fogMode = D3DRS_FOGVERTEXMODE; - rangeFogEnable = true; - } else if ((d3dCaps->RasterCaps & D3DPRASTERCAPS_FOGTABLE) != 0) { - // use pixel z-fog - fogMode = D3DRS_FOGTABLEMODE; - rangeFogEnable = false; - } else if (D3DPRASTERCAPS_FOGVERTEX) { - // use vertex z-fog - fogMode = D3DRS_FOGVERTEXMODE; - rangeFogEnable = false; - } else { - if (debug) { - printf("[Java 3D] Fog not support in this device !\n"); - } + } + else + if (((d3dCaps->RasterCaps & D3DPRASTERCAPS_FOGVERTEX) != 0) && + ((d3dCaps->RasterCaps & D3DPRASTERCAPS_FOGRANGE) != 0)) + + { + // use vertex range based fog + fogMode = D3DRS_FOGVERTEXMODE; + rangeFogEnable = true; + } + else + if ((d3dCaps->RasterCaps & D3DPRASTERCAPS_FOGTABLE) != 0) + { + // use pixel z-fog + fogMode = D3DRS_FOGTABLEMODE; + rangeFogEnable = false; + } + else + if (D3DPRASTERCAPS_FOGVERTEX) + { + // use vertex z-fog + fogMode = D3DRS_FOGVERTEXMODE; + rangeFogEnable = false; + } + else + { + if (debug) + { + printf("[Java 3D] Fog not support in this device !\n"); + } } texMask = 0; if ((d3dCaps->TextureCaps & D3DPTEXTURECAPS_VOLUMEMAP) && - (maxTextureDepth > 0)) { + (maxTextureDepth > 0)) + { texMask |= javax_media_j3d_Canvas3D_TEXTURE_3D; - } + } if (d3dCaps->TextureCaps & D3DPTEXTURECAPS_CUBEMAP) { texMask |= javax_media_j3d_Canvas3D_TEXTURE_CUBE_MAP; @@ -137,17 +188,17 @@ VOID D3dDeviceInfo::setCaps(D3DCAPS8 *d3dCaps) { if (d3dCaps->TextureOpCaps & D3DTEXOPCAPS_SUBTRACT) { texMask |= javax_media_j3d_Canvas3D_TEXTURE_COMBINE_SUBTRACT; } - + if (d3dCaps->TextureOpCaps & D3DTEXOPCAPS_LERP) { texMask |= (javax_media_j3d_Canvas3D_TEXTURE_LERP| javax_media_j3d_Canvas3D_TEXTURE_COMBINE); - } else if (d3dCaps->TextureOpCaps & + } else if (d3dCaps->TextureOpCaps & (D3DTEXOPCAPS_DOTPRODUCT3|D3DTEXOPCAPS_SUBTRACT| D3DTEXOPCAPS_MODULATE|D3DTEXOPCAPS_ADD| D3DTEXOPCAPS_ADDSIGNED)) { texMask |= javax_media_j3d_Canvas3D_TEXTURE_COMBINE; } - + if (maxAnisotropy > 1) { texMask |= javax_media_j3d_Canvas3D_TEXTURE_ANISOTROPIC_FILTER; @@ -164,7 +215,7 @@ void D3dDeviceInfo::findDepthStencilFormat(int minZDepth) depthStencilFormat = D3DFMT_UNKNOWN; for (int i=0; i < D3DDEPTHFORMATSIZE; i++) { if (depthFormatSupport[i]) { - // prefer one with stencil buffer, follow by D3DFMT_D16_LOCKABLE, + // prefer one with stencil buffer, follow by D3DFMT_D16_LOCKABLE, if (d3dDepthTable[i] >= minZDepth) { depthStencilFormat = (D3DFORMAT) d3dDepthFormat[i]; break; diff --git a/src/native/d3d/D3dDeviceInfo.hpp b/src/native/d3d/D3dDeviceInfo.hpp index 4008011..ffb4587 100644 --- a/src/native/d3d/D3dDeviceInfo.hpp +++ b/src/native/d3d/D3dDeviceInfo.hpp @@ -24,12 +24,16 @@ public: // Hardware Rasterizer // Transform & Light Hardware Rasterizer // Reference Rasterizer - char deviceName[40]; // One of above name - D3DDEVTYPE deviceType; // D3DDEVTYPE_HAL or D3DDEVTYPE_REF + char deviceName[40]; // One of above name + D3DDEVTYPE deviceType; // D3DDEVTYPE_HAL or D3DDEVTYPE_REF BOOL desktopCompatible; // Can render in desktop mode BOOL fullscreenCompatible; // Can render in fullscreen mode // using current desktop mode setting - + //issue 135 - adding device info + char* deviceVendor; + char* deviceRenderer; + char* deviceVersion; + // each bitmask correspond to the support of // D3DMULTISAMPLE_i_SAMPLES type, i = 2...16 DWORD multiSampleSupport; @@ -43,11 +47,14 @@ public: // max z buffer depth support UINT maxZBufferDepthSize; - // Max vetex count support for each primitive + // Max vertex count support for each primitive DWORD maxVertexCount[GEO_TYPE_INDEXED_LINE_STRIP_SET+1]; + BOOL supportShaders11; BOOL isHardware; BOOL isHardwareTnL; + BOOL supportDepthBias; + BOOL supportRasterPresImmediate; BOOL canRenderWindowed; BOOL supportMipmap; BOOL texturePow2Only; @@ -66,19 +73,23 @@ public: DWORD maxActiveLights; DWORD maxPointSize; DWORD rangeFogEnable; - D3DRENDERSTATETYPE fogMode; + D3DRENDERSTATETYPE fogMode; int texMask; int maxAnisotropy; + BOOL supportStreamOffset; + D3dDeviceInfo(); ~D3dDeviceInfo(); // set capabilities of this device - VOID setCaps(D3DCAPS8 *d3dCaps); + VOID setCaps(D3DCAPS9 *d3dCaps); BOOL supportAntialiasing(); D3DMULTISAMPLE_TYPE getBestMultiSampleType(); int getTextureFeaturesMask(); void findDepthStencilFormat(int minZDepth); + + }; #endif diff --git a/src/native/d3d/D3dDisplayList.cpp b/src/native/d3d/D3dDisplayList.cpp index 73c0fd2..48eaf34 100644 --- a/src/native/d3d/D3dDisplayList.cpp +++ b/src/native/d3d/D3dDisplayList.cpp @@ -19,7 +19,7 @@ D3dDisplayList::D3dDisplayList() D3dDisplayList::~D3dDisplayList() { - for (D3dVertexBuffer **p = vBufferVec.begin(); + for (ITER_LPD3DVERTEXBUFFER p = vBufferVec.begin(); p != vBufferVec.end(); p++) { SafeDelete(*p); } @@ -28,7 +28,7 @@ D3dDisplayList::~D3dDisplayList() VOID D3dDisplayList::render(D3dCtx *d3dCtx) { - for (D3dVertexBuffer **p = vBufferVec.begin(); + for (ITER_LPD3DVERTEXBUFFER p = vBufferVec.begin(); p != vBufferVec.end(); p++) { (*p)->render(d3dCtx); } @@ -49,17 +49,17 @@ VOID D3dDisplayList::optimize(D3dCtx *d3dCtx) { D3dVertexBufferVector vCloneBufferVec; - D3dVertexBuffer **r = vBufferVec.begin(); - - for (; r != vBufferVec.end(); r++) { + D3dVertexBuffer **r = &(*vBufferVec.begin()); + + for (; r != &(*vBufferVec.end()); r++) { vCloneBufferVec.push_back(*r); } vBufferVec.erase(vBufferVec.begin(), vBufferVec.end()); - D3dVertexBuffer **vbegin = vCloneBufferVec.begin(); - D3dVertexBuffer **vend = vCloneBufferVec.end(); + D3dVertexBuffer **vbegin = &(*vCloneBufferVec.begin()); + D3dVertexBuffer **vend = &(*vCloneBufferVec.end()); D3dVertexBuffer **q = vbegin; D3dVertexBuffer **p; int primitiveType, vcounts, climit; @@ -92,7 +92,7 @@ VOID D3dDisplayList::optimize(D3dCtx *d3dCtx) ((*p)->isIndexPrimitive == isIndexPrimitive) && (isQuad(*p) == quadFlag) && ((*p)->isPointFlagUsed == isPointFlagUsed) && - // This means Mutliple VBs already use + // This means Mutliple VBs already use ((*p)->totalVertexCount == (*p)->vcount)) { vcounts += (*p)->totalVertexCount; if ((*p)->indexBuffer != NULL) { @@ -106,7 +106,7 @@ VOID D3dDisplayList::optimize(D3dCtx *d3dCtx) } else { break; } - } + } if (merge) { mergedVB = createMergedVB(d3dCtx, q, p, vcounts, indexCounts); @@ -119,8 +119,8 @@ VOID D3dDisplayList::optimize(D3dCtx *d3dCtx) for (r = q; r != p; r++) { vBufferVec.push_back(*r); } - } - } else { + } + } else { vBufferVec.push_back(*q); } q = p; @@ -131,13 +131,14 @@ VOID D3dDisplayList::optimize(D3dCtx *d3dCtx) + LPD3DVERTEXBUFFER D3dDisplayList::createMergedVB(D3dCtx *d3dCtx, D3dVertexBuffer **vstart, D3dVertexBuffer **vend, DWORD vcount, DWORD indexCount) { - LPDIRECT3DDEVICE8 device = d3dCtx->pDevice; + LPDIRECT3DDEVICE9 device = d3dCtx->pDevice; D3dVertexBuffer **r; UINT i; HRESULT hr; @@ -158,43 +159,46 @@ LPD3DVERTEXBUFFER D3dDisplayList::createMergedVB(D3dCtx *d3dCtx, D3DUSAGE_WRITEONLY, vb->vertexFormat, D3DPOOL_DEFAULT, - &vb->buffer); + &vb->buffer, + NULL); } else { hr = device->CreateVertexBuffer(vb->stride*vcount, D3DUSAGE_WRITEONLY|D3DUSAGE_POINTS, vb->vertexFormat, D3DPOOL_DEFAULT, - &vb->buffer); + &vb->buffer, + NULL); } if (FAILED(hr)) { return NULL; } + BYTE *bdst = NULL; + WORD *wdst = NULL; + UINT *idst = NULL; - BYTE *bdst = NULL; - WORD *wdst = NULL; - UINT *idst = NULL; - - hr = vb->buffer->Lock(0, 0, (BYTE**) &bdst, 0); + hr = vb->buffer->Lock(0, 0,(VOID**) &bdst , 0); if (FAILED(hr)) { SafeRelease(vb->buffer); return NULL; } if (indexCount > 0) { - if (indexCount <= 0xffff) { + if (indexCount < 0xffff) { hr = device->CreateIndexBuffer(indexCount*sizeof(WORD), D3DUSAGE_WRITEONLY, D3DFMT_INDEX16, D3DPOOL_DEFAULT, - &vb->indexBuffer); - + &vb->indexBuffer, + NULL); + } else { hr = device->CreateIndexBuffer(indexCount*sizeof(UINT), D3DUSAGE_WRITEONLY, D3DFMT_INDEX32, D3DPOOL_DEFAULT, - &vb->indexBuffer); + &vb->indexBuffer, + NULL); } if (FAILED(hr)) { vb->buffer->Unlock(); @@ -202,9 +206,9 @@ LPD3DVERTEXBUFFER D3dDisplayList::createMergedVB(D3dCtx *d3dCtx, return NULL; } if (indexCount <= 0xffff) { - hr = vb->indexBuffer->Lock(0, 0, (BYTE**) &wdst, 0); + hr = vb->indexBuffer->Lock(0, 0,(VOID**) &wdst, 0); } else { - hr = vb->indexBuffer->Lock(0, 0, (BYTE**) &idst, 0); + hr = vb->indexBuffer->Lock(0, 0,(VOID**) &idst, 0); } if (FAILED(hr)) { vb->buffer->Unlock(); @@ -214,10 +218,10 @@ LPD3DVERTEXBUFFER D3dDisplayList::createMergedVB(D3dCtx *d3dCtx, } } - BYTE *bsrc = NULL; - WORD *wsrc = NULL; - UINT *isrc = NULL; - UINT offset = 0; + BYTE *bsrc = NULL; + WORD *wsrc = NULL; + UINT *isrc = NULL; + UINT offset = 0; DWORD len; BOOL stripType = true; @@ -233,16 +237,16 @@ LPD3DVERTEXBUFFER D3dDisplayList::createMergedVB(D3dCtx *d3dCtx, vb->numVerticesLen = 1; vb->stripLen = 1; stripType = false; - } + } for (r = vstart; r != vend; r++) { - hr = (*r)->buffer->Lock(0, 0, (BYTE **) &bsrc, 0); + hr = (*r)->buffer->Lock(0, 0,(VOID**) &bsrc, 0); if (FAILED(hr)) { vb->buffer->Unlock(); if (indexCount > 0) { vb->indexBuffer->Unlock(); - } + } SafeRelease(vb->buffer); SafeRelease(vb->indexBuffer); return NULL; @@ -250,9 +254,9 @@ LPD3DVERTEXBUFFER D3dDisplayList::createMergedVB(D3dCtx *d3dCtx, if (indexCount > 0) { if (indexCount <= 0xffff) { - hr = (*r)->indexBuffer->Lock(0, 0, (BYTE**) &wsrc, 0); + hr = (*r)->indexBuffer->Lock(0, 0, (VOID**)&wsrc, 0); } else { - hr = (*r)->indexBuffer->Lock(0, 0, (BYTE**) &isrc, 0); + hr = (*r)->indexBuffer->Lock(0, 0,(VOID**) &isrc, 0); } if (FAILED(hr)) { (*r)->buffer->Unlock(); diff --git a/src/native/d3d/D3dDriverInfo.cpp b/src/native/d3d/D3dDriverInfo.cpp index 01a3694..a2d848f 100644 --- a/src/native/d3d/D3dDriverInfo.cpp +++ b/src/native/d3d/D3dDriverInfo.cpp @@ -47,7 +47,7 @@ D3DFORMAT d3dDepthFormat[D3DDEPTHFORMATSIZE] = {D3DFMT_D15S1, // This should match the depth bit in the above array int d3dDepthTable[D3DDEPTHFORMATSIZE] = {15, 24, 24, 16, 16, 32}; -D3DLIGHT8 ambientLight; +D3DLIGHT9 ambientLight; D3dDriverInfo::D3dDriverInfo() { @@ -97,7 +97,41 @@ VOID computeRGBDepth(D3dDriverInfo *pDriver) } -VOID buildDriverList(LPDIRECT3D8 pD3D) + +VOID setInfo(D3dDeviceInfo* pDevice,D3DADAPTER_IDENTIFIER9 *identifier) +{ + char* str = (char *)"UNKNOW Vendor "; + + switch( identifier->VendorId ) + { + // A more complete list can be found from http://www.pcidatabase.com/vendors.php?sort=id + case 0x1002: str = (char *) "ATI Technologies Inc."; break; + case 0x1013: str = (char *) "Cirrus Logic."; break; + case 0x1023: str = (char *) "Trident Microsistems."; break; + case 0x102B: str = (char *) "Matrox Electronic Systems Ltd."; break; + case 0x108E: str = (char *) "Sun Microsystems."; break; + case 0x10DE: str = (char *) "NVIDIA Corporation"; break; + case 0x121A: str = (char *) "3dfx Interactive Inc"; break; + case 0x3D3D: str = (char *) "3Dlabs Inc, Ltd."; break; + case 0x5333: str = (char *) "S3 Graphics Co., Ltd."; break; + case 0x8086: str = (char *) "Intel Corporation"; break; + default: sprintf( str, "vendor ID %x.",identifier->VendorId); + break; + } + pDevice->deviceVendor = str; + + pDevice->deviceRenderer = identifier->Description; + + char version[ 128 ]; + sprintf( version, "%d.%d.%d.%d", HIWORD( identifier->DriverVersion.HighPart ), + LOWORD( identifier->DriverVersion.HighPart ), + HIWORD( identifier->DriverVersion.LowPart ), + LOWORD( identifier->DriverVersion.LowPart ) ); + pDevice->deviceVersion = (char *)version; +} + + +VOID buildDriverList(LPDIRECT3D9 pD3D) { numDriver = pD3D->GetAdapterCount(); @@ -120,16 +154,17 @@ VOID buildDriverList(LPDIRECT3D8 pD3D) { pDriver = new D3dDriverInfo(); d3dDriverList[i] = pDriver; - pD3D->GetAdapterIdentifier(i, D3DENUM_NO_WHQL_LEVEL, + pD3D->GetAdapterIdentifier(i, 0, &pDriver->adapterIdentifier); pD3D->GetAdapterDisplayMode(i, &pDriver->desktopMode); computeRGBDepth(pDriver); pDriver->hMonitor = pD3D->GetAdapterMonitor(i); pDriver->iAdapter = i; + for (int j = 0; j < numDeviceTypes; j++ ) { - D3DCAPS8 d3dCaps; + D3DCAPS9 d3dCaps; D3dDeviceInfo* pDevice = pDriver->d3dDeviceList[j]; pDevice->deviceType = deviceTypes[j]; pD3D->GetDeviceCaps(i, deviceTypes[j], &d3dCaps); @@ -152,7 +187,9 @@ VOID buildDriverList(LPDIRECT3D8 pD3D) strcpy(pDevice->deviceName, "Hardware Rasterizer"); } else { strcpy(pDevice->deviceName, "Reference Rasterizer"); - } + } + //issue 135 put here info about vendor and device model + setInfo(pDevice, &pDriver->adapterIdentifier); for (int k=0; k < D3DDEPTHFORMATSIZE; k++) { pDevice->depthFormatSupport[k] = @@ -176,12 +213,13 @@ VOID buildDriverList(LPDIRECT3D8 pD3D) DWORD bitmask = 1 << 2; pDevice->multiSampleSupport = 0; for (int mtype = D3DMULTISAMPLE_2_SAMPLES; - mtype <= D3DMULTISAMPLE_16_SAMPLES; mtype++) { + mtype <= D3DMULTISAMPLE_16_SAMPLES; mtype++) { // consider desktop mode only for multisampling if (SUCCEEDED(pD3D->CheckDeviceMultiSampleType(i, deviceTypes[j], pDriver->desktopMode.Format, TRUE, - (D3DMULTISAMPLE_TYPE) mtype))) { + (D3DMULTISAMPLE_TYPE) mtype,NULL) + )) { pDevice->multiSampleSupport |= bitmask; } bitmask <<= 1; @@ -204,7 +242,7 @@ VOID D3dDriverInfo::release() VOID printInfo() { - printf("Java 3D 1.3.3, Windows version is %d.%d ", + printf("Java 3D 1.4, Windows version is %d.%d ", osvi.dwMajorVersion, osvi.dwMinorVersion); printf("Build: %d, ", LOWORD(osvi.dwBuildNumber)); @@ -217,7 +255,7 @@ VOID printInfo() printf("Windows 95/98"); break; case VER_PLATFORM_WIN32_NT: - printf("Windows NT"); + printf("Windows NT/2000/XP"); break; } @@ -226,7 +264,7 @@ VOID printInfo() D3dDriverInfo *pDriver; for (int i=0; i < numDriver; i++) { pDriver = d3dDriverList[i]; - D3DADAPTER_IDENTIFIER8 *id = &pDriver->adapterIdentifier; + D3DADAPTER_IDENTIFIER9 *id = &pDriver->adapterIdentifier; D3DDISPLAYMODE *dm = &pDriver->desktopMode; printf("\n[Display Driver] %s, %s, Product %d\n", id->Driver, id->Description, @@ -234,8 +272,9 @@ VOID printInfo() printf(" Version %d.%d, Build %d, VendorId %d\n", LOWORD(id->DriverVersion.HighPart), HIWORD(id->DriverVersion.LowPart), - LOWORD(id->DriverVersion.LowPart)); - printf(" DeviceId 0x%x, SubSysId 0x%x, Revision 0x%d\n", + LOWORD(id->DriverVersion.LowPart), + id->VendorId); + printf(" DeviceId %d, SubSysId %d, Revision %d\n", id->VendorId, id->DeviceId, id->SubSysId, id->Revision); printf(" [Desktop Mode] %dx%d ", @@ -262,19 +301,22 @@ VOID printInfo() // Construct the D3dDriverList by enumerate all the drivers VOID D3dDriverInfo::initialize(JNIEnv *env) { - HINSTANCE hD3D8DLL = LoadLibrary( "D3D8.DLL" ); + HINSTANCE hD3D9DLL = LoadLibrary( "D3D9.DLL" ); - // Simply see if D3D8.dll exists. - if ( hD3D8DLL == NULL ) + // Simply see if D3D9.dll exists. + if ( hD3D9DLL == NULL ) { D3dCtx::d3dError(D3DNOTFOUND); return; } - FreeLibrary(hD3D8DLL); - + FreeLibrary(hD3D9DLL); - LPDIRECT3D8 pD3D = Direct3DCreate8( D3D_SDK_VERSION ); + LPDIRECT3D9 pD3D = Direct3DCreate9( D3D_SDK_VERSION ); + printf("[Java3D] Using DirectX D3D 9.0 or higher.\n"); + if (debug){ + printf("[Java3D] DirectX D3D renderer build 1.4.2005.10.10\n"); + } if (pD3D == NULL) { D3dCtx::d3dError(D3DNOTFOUND); return; @@ -317,4 +359,3 @@ VOID D3dDriverInfo::initialize(JNIEnv *env) - diff --git a/src/native/d3d/D3dDriverInfo.hpp b/src/native/d3d/D3dDriverInfo.hpp index e164fe8..5c5f0ca 100644 --- a/src/native/d3d/D3dDriverInfo.hpp +++ b/src/native/d3d/D3dDriverInfo.hpp @@ -26,7 +26,7 @@ extern int d3dDepthTable[D3DDEPTHFORMATSIZE]; class D3dDriverInfo { public: // DDraw Driver info - D3DADAPTER_IDENTIFIER8 adapterIdentifier; + D3DADAPTER_IDENTIFIER9 adapterIdentifier; // Desktop display mode for this adapter D3DDISPLAYMODE desktopMode; // monitor handle for this adapter @@ -56,6 +56,6 @@ extern const DWORD numDeviceTypes; extern const D3DDEVTYPE deviceTypes[2]; extern int requiredDeviceID; // force to use HAL/REF or exit extern int requiredDriverID; // force to use specific adapte -extern D3DLIGHT8 ambientLight; // constant ambient light +extern D3DLIGHT9 ambientLight; // constant ambient light extern BOOL implicitMultisample; #endif diff --git a/src/native/d3d/D3dImageComponent.cpp b/src/native/d3d/D3dImageComponent.cpp index 0b15c16..64031bb 100644 --- a/src/native/d3d/D3dImageComponent.cpp +++ b/src/native/d3d/D3dImageComponent.cpp @@ -20,7 +20,7 @@ D3dImageComponent::D3dImageComponent() D3dImageComponent::D3dImageComponent(D3dCtx *_ctx, int _hashCode, - LPDIRECT3DTEXTURE8 _surf) + LPDIRECT3DTEXTURE9 _surf) { ctx = _ctx; hashCode = _hashCode; @@ -46,7 +46,7 @@ VOID D3dImageComponent::init() D3dImageComponent* D3dImageComponent::add(D3dImageComponent *list, D3dCtx *ctx, int hashCode, - LPDIRECT3DTEXTURE8 surf) + LPDIRECT3DTEXTURE9 surf) { D3dImageComponent *p = list->next; diff --git a/src/native/d3d/D3dImageComponent.hpp b/src/native/d3d/D3dImageComponent.hpp index 0fb9743..4abedd3 100644 --- a/src/native/d3d/D3dImageComponent.hpp +++ b/src/native/d3d/D3dImageComponent.hpp @@ -18,7 +18,7 @@ class D3dImageComponent { public: - LPDIRECT3DTEXTURE8 surf; + LPDIRECT3DTEXTURE9 surf; D3dCtx *ctx; int hashCode; D3dImageComponent *next; @@ -26,7 +26,7 @@ public: D3dImageComponent(); D3dImageComponent(D3dCtx *ctx, int hashCode, - LPDIRECT3DTEXTURE8 surf); + LPDIRECT3DTEXTURE9 surf); ~D3dImageComponent(); @@ -37,7 +37,7 @@ public: static D3dImageComponent* add(D3dImageComponent *list, D3dCtx *ctx, int hashCode, - LPDIRECT3DTEXTURE8 surf); + LPDIRECT3DTEXTURE9 surf); static VOID remove(D3dImageComponent *list, D3dCtx *ctx, int hashCode); static VOID remove(D3dImageComponent *list, D3dCtx *ctx); diff --git a/src/native/d3d/D3dUtil.cpp b/src/native/d3d/D3dUtil.cpp index 117c623..81d2182 100644 --- a/src/native/d3d/D3dUtil.cpp +++ b/src/native/d3d/D3dUtil.cpp @@ -20,7 +20,7 @@ HANDLE backgroundSema = CreateSemaphore(NULL, 1, 1, HANDLE geometrySema = CreateSemaphore(NULL, 1, 1, "Java3d_GeometryArrayLock"); HANDLE surfaceListSema = CreateSemaphore(NULL, 1, 1, "Java3d_SurfaceListLock"); - + BOOL firstError = true; BOOL firstWarning = true; BOOL debug; @@ -33,7 +33,7 @@ BOOL useFreePointerList0 = true; char *D3dErrorMessage[] = { "Can't found 3D Driver !", "Current display driver did not support renderer inside window. Now switch to full screen mode...", - "DirectX 8.0 or above is required for this version of Java3D.", + "DirectX 9.0 or above is required for this version of Java3D.", "Your graphics card did not support >= 16 bit color mode which Java 3D required.", "Please switch your display mode to at least 16 bit color depth.", "No compatible device found, please switch to other display mode and try again !", @@ -47,7 +47,7 @@ char *D3dErrorMessage[] = { "Graphics card did not support Hardware acceleration", "Graphics card did not support Transform and light hardware acceleration", "No Stencil buffer found in current display mode. DecalGroup may not work correctly.", - "Can't found a valid texture format, please try to use reference mode", + "Can't found a valid texture format, please try to use reference mode. DirectX SDK must be installed to use reference mode", "Fail to create offscreen image for background", "Fail to create Vertex Buffer", "Fail to Reset() D3D device, try Recreate device again.", @@ -94,7 +94,7 @@ D3DFORMAT d3dFormatTable[] = { D3DFMT_X8L8V8U8, D3DFMT_Q8W8V8U8, D3DFMT_V16U16, - D3DFMT_W11V11U10, +// D3DFMT_W11V11U10, D3DFMT_UYVY, D3DFMT_YUY2, D3DFMT_DXT1, @@ -116,7 +116,7 @@ D3DFORMAT d3dFormatTable[] = { char *d3dFormatTableChar[] = { "D3DFMT_UNKNOWN", - "D3DFMT_R8G8B8", + "D3DFMT_R8G8B8", "D3DFMT_A8R8G8B8", "D3DFMT_X8R8G8B8", "D3DFMT_R5G6B5", @@ -137,7 +137,7 @@ char *d3dFormatTableChar[] = { "D3DFMT_X8L8V8U8", "D3DFMT_Q8W8V8U8", "D3DFMT_V16U16", - "D3DFMT_W11V11U10", + // "D3DFMT_W11V11U10", "D3DFMT_UYVY", "D3DFMT_YUY2", "D3DFMT_DXT1", @@ -200,9 +200,9 @@ D3DCUBEMAP_FACES textureCubeMapFace[] = { typedef struct _PIXELFORMAT { DWORD dwRGBBitCount; DWORD dwRBitMask; - DWORD dwGBitMask; - DWORD dwBBitMask; - DWORD dwRGBAlphaBitMask; + DWORD dwGBitMask; + DWORD dwBBitMask; + DWORD dwRGBAlphaBitMask; BOOL noAlpha; } PIXELFORMAT; @@ -213,7 +213,7 @@ typedef struct _DEPTHPIXELFORMAT { } DEPTHPIXELFORMAT; -char *getSwapEffectName(D3DSWAPEFFECT swapEffect) +char *getSwapEffectName(D3DSWAPEFFECT swapEffect) { int t = (int) swapEffect; if ((t < 0) || (t > 4)) { @@ -222,7 +222,7 @@ char *getSwapEffectName(D3DSWAPEFFECT swapEffect) return swapEffectTable[t]; } -char *getMultiSampleName(D3DMULTISAMPLE_TYPE mtype) +char *getMultiSampleName(D3DMULTISAMPLE_TYPE mtype) { int t = (int) mtype; if ((t < 0) || (t > 16)) { @@ -238,7 +238,7 @@ char* getPixelFormatName(D3DFORMAT f) if (f == d3dFormatTable[i]) { return d3dFormatTableChar[i]; } - } + } // should not happen return d3dFormatTableChar[0]; } @@ -246,7 +246,7 @@ char* getPixelFormatName(D3DFORMAT f) // If there is a new D3DFORMAT, just add it here and // our copy procedures can handle any format specific // as bit mask. -VOID computePixelFormat(PIXELFORMAT *ddpf, D3DFORMAT format) +VOID computePixelFormat(PIXELFORMAT *ddpf, D3DFORMAT format) { switch (format) { case D3DFMT_R8G8B8: @@ -257,7 +257,7 @@ VOID computePixelFormat(PIXELFORMAT *ddpf, D3DFORMAT format) ddpf->dwBBitMask = 0x000000ff; ddpf->noAlpha = true; break; - case D3DFMT_A8R8G8B8: + case D3DFMT_A8R8G8B8: ddpf->dwRGBBitCount = 32; ddpf->dwRGBAlphaBitMask = 0xff000000; ddpf->dwRBitMask = 0x00ff0000; @@ -289,7 +289,7 @@ VOID computePixelFormat(PIXELFORMAT *ddpf, D3DFORMAT format) ddpf->dwBBitMask = 0x001f; ddpf->noAlpha = true; break; - case D3DFMT_A1R5G5B5: + case D3DFMT_A1R5G5B5: ddpf->dwRGBBitCount = 16; ddpf->dwRGBAlphaBitMask = 0x8000; ddpf->dwRBitMask = 0x7c00; @@ -361,7 +361,7 @@ VOID computePixelFormat(PIXELFORMAT *ddpf, D3DFORMAT format) ddpf->dwBBitMask = 0; ddpf->noAlpha = false; break; - default: + default: printf("Unsupport format %d\n ", format); ddpf->dwRGBBitCount = 8; ddpf->dwRGBAlphaBitMask = 0; @@ -376,12 +376,12 @@ VOID computePixelFormat(PIXELFORMAT *ddpf, D3DFORMAT format) /* - * Right now only format D3DFMT_D16_LOCKABLE + * Right now only format D3DFMT_D16_LOCKABLE * is lockable by application. So can't use * with stencil buffer (in DecalGroup) together */ -VOID computeDepthPixelFormat(DEPTHPIXELFORMAT *ddpf, - D3DFORMAT format) +VOID computeDepthPixelFormat(DEPTHPIXELFORMAT *ddpf, + D3DFORMAT format) { switch (format) { case D3DFMT_D16_LOCKABLE: @@ -392,17 +392,17 @@ VOID computeDepthPixelFormat(DEPTHPIXELFORMAT *ddpf, case D3DFMT_D15S1: ddpf->dwZBufferBitDepth = 16; ddpf->dwZBitMask = 0xfffe; - break; + break; case D3DFMT_D32: ddpf->dwZBufferBitDepth = 32; ddpf->dwZBitMask = 0xffffffff; - break; + break; case D3DFMT_D24S8: case D3DFMT_D24X8: case D3DFMT_D24X4S4: ddpf->dwZBufferBitDepth = 32; ddpf->dwZBitMask = 0xffffff00; - break; + break; default: printf("Unknown depth buffer format %d\n", format); } @@ -412,13 +412,13 @@ VOID computeDepthPixelFormat(DEPTHPIXELFORMAT *ddpf, /* * Set the correct D3DTSS_TEXTURETRANSFORMFLAGS */ -void setTexTransformStageFlag(D3dCtx* d3dCtx, - LPDIRECT3DDEVICE8 device, - int tus, int ts, int genMode) +void setTexTransformStageFlag(D3dCtx* d3dCtx, + LPDIRECT3DDEVICE9 device, + int tus, int ts, int genMode) { /* * In case of automatic texture generation, disable - * texture unit transform stage will cause crash in + * texture unit transform stage will cause crash in * reference device mode. */ if ((!d3dCtx->texTransformSet[tus]) && @@ -428,7 +428,7 @@ void setTexTransformStageFlag(D3dCtx* d3dCtx, D3DTTFF_DISABLE); } else { D3DXMATRIX *m; - + switch (ts) { case 2: // Adjust for 2D texture transform in D3D @@ -463,18 +463,18 @@ void setTexTransformStageFlag(D3dCtx* d3dCtx, m = &d3dCtx->texTransform[tus]; (*m)._31 = (*m)._41; (*m)._32 = (*m)._42; - device->SetTransform((D3DTRANSFORMSTATETYPE) + device->SetTransform((D3DTRANSFORMSTATETYPE) (D3DTS_TEXTURE0 + tus), m); d3dCtx->texTranslateSet[tus] = true; } device->SetTextureStageState(tus, - D3DTSS_TEXTURETRANSFORMFLAGS, + D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT2); break; case 3: device->SetTextureStageState(tus, - D3DTSS_TEXTURETRANSFORMFLAGS, + D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT3); break; case 4: @@ -482,15 +482,15 @@ void setTexTransformStageFlag(D3dCtx* d3dCtx, // The texture transform matrix is funky that only the // upper 3x3 matrix is used if we are not using // automatic texture generation. In case of Object - // Linear we are need to workaround by doing our + // Linear we are need to workaround by doing our // own texture transform when generate texture // coordinate. device->SetTextureStageState(tus, D3DTSS_TEXTURETRANSFORMFLAGS, - D3DTTFF_DISABLE); - } else { + D3DTTFF_DISABLE); + } else { device->SetTextureStageState(tus, - D3DTSS_TEXTURETRANSFORMFLAGS, + D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT4|D3DTTFF_PROJECTED); } break; @@ -503,18 +503,18 @@ void setTexTransformStageFlag(D3dCtx* d3dCtx, } /* - * Set the corresponding D3D texture coordinate + * Set the corresponding D3D texture coordinate * mapping mode. */ inline int setTextureStage(D3dCtx *d3dCtx, - LPDIRECT3DDEVICE8 device, + LPDIRECT3DDEVICE9 device, int mapTexStage, jint texStage) { DWORD mode = 0; int genMode = d3dCtx->texGenMode[mapTexStage]; - // printf("Set TexStage mapTexStage = %d, texStage = %d, genMode = %d\n", + // printf("Set TexStage mapTexStage = %d, texStage = %d, genMode = %d\n", // mapTexStage, texStage, genMode); switch (genMode) { @@ -523,10 +523,10 @@ inline int setTextureStage(D3dCtx *d3dCtx, case TEX_GEN_INVALID: // optimize for general case device->SetTextureStageState(mapTexStage, - D3DTSS_TEXCOORDINDEX, + D3DTSS_TEXCOORDINDEX, texStage); return genMode; - case TEX_EYE_LINEAR: + case TEX_EYE_LINEAR: mode = D3DTSS_TCI_CAMERASPACEPOSITION; break; case TEX_SPHERE_MAP: @@ -547,21 +547,21 @@ inline int setTextureStage(D3dCtx *d3dCtx, // there is no texture coordinate defined in that texStage in VB. // This also clear the texStage previously set. device->SetTextureStageState(mapTexStage, - D3DTSS_TEXCOORDINDEX, + D3DTSS_TEXCOORDINDEX, mode | texStage); return TEX_GEN_AUTO; } -void getTexWidthHeight(D3dDeviceInfo *deviceInfo, +void getTexWidthHeight(D3dDeviceInfo *deviceInfo, jint* width, jint *height) { int texWidth, texHeight; - + texWidth = *width; texHeight = *height; - + // Found a texture bigger than width/height if (deviceInfo->texturePow2Only) { @@ -620,7 +620,7 @@ D3DFORMAT getTexFormat(jint internalFormat) { default: printf("CreateTextureSurface: Unknown internal Format %d \n", internalFormat); return D3DFMT_UNKNOWN; - } + } } @@ -628,7 +628,7 @@ D3dCtx* findCtx(HWND hwnd) { D3dCtx *ctx = NULL; - for (D3dCtx **p = d3dCtxList.begin(); p != d3dCtxList.end(); p++) { + for (ITER_D3dCtxVector p = d3dCtxList.begin(); p != d3dCtxList.end(); p++) { if ((*p)->hwnd == hwnd) { ctx = *p; break; @@ -638,7 +638,7 @@ D3dCtx* findCtx(HWND hwnd) } -inline VOID lock() +inline VOID lock() { if (hSema != NULL) { WaitForSingleObject(hSema, INFINITE); @@ -653,7 +653,7 @@ inline VOID unlock() } -inline VOID lockSurfaceList() +inline VOID lockSurfaceList() { if (surfaceListSema != NULL) { WaitForSingleObject(surfaceListSema, INFINITE); @@ -681,7 +681,7 @@ inline VOID unlockBackground() } } -inline VOID lockImage() +inline VOID lockImage() { if (imageSema != NULL) { WaitForSingleObject(imageSema, INFINITE); @@ -697,7 +697,7 @@ inline VOID unlockImage() -inline VOID lockGeometry() +inline VOID lockGeometry() { if (geometrySema != NULL) { WaitForSingleObject(geometrySema, INFINITE); @@ -711,28 +711,28 @@ inline VOID unlockGeometry() } } -VOID freePointer(void * ptr) +VOID freePointer(void * ptr) { if (ptr != NULL) { lockSurfaceList(); if (useFreePointerList0) { freePointerList0.push_back(ptr); } else { - freePointerList1.push_back(ptr); + freePointerList1.push_back(ptr); } unlockSurfaceList(); } } -char *getErrorMessage(int idx) +char *getErrorMessage(int idx) { return D3dErrorMessage[idx]; } -HWND getTopWindow(HWND hwnd) +HWND getTopWindow(HWND hwnd) { HWND desktop = GetDesktopWindow(); HWND parent = GetParent(hwnd); @@ -745,7 +745,7 @@ HWND getTopWindow(HWND hwnd) } -DWORD firstBit(DWORD mask) +DWORD firstBit(DWORD mask) { int i; @@ -760,23 +760,23 @@ DWORD firstBit(DWORD mask) } // create a DirectDraw Texture surface of specific width and height -LPDIRECT3DTEXTURE8 createTextureSurface(D3dCtx *d3dCtx, +LPDIRECT3DTEXTURE9 createTextureSurface(D3dCtx *d3dCtx, jint numLevels, jint internalFormat, - jint width, jint height) + jint width, jint height) { - LPDIRECT3DTEXTURE8 pTexture; + LPDIRECT3DTEXTURE9 pTexture; D3DFORMAT format; HRESULT hr; - LPDIRECT3DDEVICE8 pDevice = d3dCtx->pDevice; + LPDIRECT3DDEVICE9 pDevice = d3dCtx->pDevice; D3dDeviceInfo *deviceInfo = d3dCtx->deviceInfo; if (!deviceInfo->supportMipmap) { numLevels = 1; - } + } - getTexWidthHeight(deviceInfo, &width, &height); + getTexWidthHeight(deviceInfo, &width, &height); format = getTexFormat(internalFormat); // If format not support, the utility function will adjust the @@ -787,29 +787,29 @@ LPDIRECT3DTEXTURE8 createTextureSurface(D3dCtx *d3dCtx, if (FAILED(hr)) { printf("Fail to create texture surface %dx%d, format %d, level %d : %s\n", - width, height, format, numLevels, DXGetErrorString8(hr)); + width, height, format, numLevels, DXGetErrorString9(hr)); return NULL; } - + return pTexture; } // create a DirectDraw Texture surface of specific width and height -LPDIRECT3DVOLUMETEXTURE8 createVolumeTexture(D3dCtx *d3dCtx, +LPDIRECT3DVOLUMETEXTURE9 createVolumeTexture(D3dCtx *d3dCtx, jint numLevels, jint internalFormat, - jint width, + jint width, jint height, - jint depth) + jint depth) { - LPDIRECT3DVOLUMETEXTURE8 pTexture; + LPDIRECT3DVOLUMETEXTURE9 pTexture; int texWidth, texHeight, texDepth; D3DFORMAT format; HRESULT hr; - LPDIRECT3DDEVICE8 pDevice = d3dCtx->pDevice; + LPDIRECT3DDEVICE9 pDevice = d3dCtx->pDevice; D3dDeviceInfo *deviceInfo = d3dCtx->deviceInfo; texWidth = width; @@ -819,7 +819,7 @@ LPDIRECT3DVOLUMETEXTURE8 createVolumeTexture(D3dCtx *d3dCtx, if (!deviceInfo->supportMipmap) { numLevels = 1; - } + } // Found a texture bigger than width/height @@ -887,25 +887,25 @@ LPDIRECT3DVOLUMETEXTURE8 createVolumeTexture(D3dCtx *d3dCtx, if (debug) { printf("Fail to create volume texture %dx%dx%d, format %d, level %d : %s\n", texWidth, texHeight, texDepth, format, numLevels, - DXGetErrorString8(hr)); + DXGetErrorString9(hr)); } return NULL; } - + return pTexture; } // copy data from DirectDraw surface to memory // and reverse the Y axis -void copyDataFromSurface(jint internalFormat, +void copyDataFromSurface(jint internalFormat, jint xoffset, jint yoffset, jint subWidth, jint subHeight, - jbyte *data, - LPDIRECT3DSURFACE8 surf) + jbyte *data, + LPDIRECT3DSURFACE9 surf) { D3DSURFACE_DESC ddsd; - D3DLOCKED_RECT lockedRect; + D3DLOCKED_RECT lockedRect; PIXELFORMAT ddpf; HRESULT hr; @@ -929,7 +929,7 @@ void copyDataFromSurface(jint internalFormat, D3DLOCK_READONLY); if (FAILED(hr)) { - printf("Fail to lock surface: %s\n", DXGetErrorString8(hr)); + printf("Fail to lock surface: %s\n", DXGetErrorString9(hr)); return; } @@ -941,9 +941,9 @@ void copyDataFromSurface(jint internalFormat, unsigned char *destRow = (unsigned char *) data; unsigned char *srcRow = ((unsigned char *) lockedRect.pBits) + - xoffset*((int) ceil((float) ddpf.dwRGBBitCount/8.0)) + + xoffset*((int) ceil((float) ddpf.dwRGBBitCount/8.0)) + (yoffset*lockedRect.Pitch); - + if ((internalFormat == FORMAT_BYTE_RGBA) || (internalFormat == FORMAT_BYTE_RGB)) { @@ -969,7 +969,7 @@ void copyDataFromSurface(jint internalFormat, *src++; *dst++ = (byte) 0xff; } - srcRow += lockedRect.Pitch; + srcRow += lockedRect.Pitch; destRow -= dstPitch; } } else { @@ -985,21 +985,21 @@ void copyDataFromSurface(jint internalFormat, *dst++ = b1; *dst++ = *src++; } - srcRow += lockedRect.Pitch; + srcRow += lockedRect.Pitch; destRow -= dstPitch; } } } else { // handle less common format int rshift = firstBit(ddpf.dwRBitMask) + - countBits(ddpf.dwRBitMask) - 8; - int gshift = firstBit(ddpf.dwGBitMask) + - countBits(ddpf.dwGBitMask) - 8; + ucountBits(ddpf.dwRBitMask) - 8; + int gshift = firstBit(ddpf.dwGBitMask) + + ucountBits(ddpf.dwGBitMask) - 8; int bshift = firstBit(ddpf.dwBBitMask) + - countBits(ddpf.dwBBitMask) - 8; + ucountBits(ddpf.dwBBitMask) - 8; int ashift = firstBit(ddpf.dwRGBAlphaBitMask) + - countBits(ddpf.dwRGBAlphaBitMask) - 8; + ucountBits(ddpf.dwRGBAlphaBitMask) - 8; - if ((ddpf.dwRGBBitCount <= 32) && + if ((ddpf.dwRGBBitCount <= 32) && (ddpf.dwRGBBitCount > 24)) { for (int i=yoffset; i < ylimit; i++) { @@ -1028,7 +1028,7 @@ void copyDataFromSurface(jint internalFormat, } if (bshift >= 0) { *dst++ = (byte) ((mask & ddpf.dwBBitMask) >> - bshift); + bshift); } else { t = (mask & ddpf.dwBBitMask) << -bshift; *dst++ = (t <= 0xff ? (byte) t : 0xff); @@ -1048,7 +1048,7 @@ void copyDataFromSurface(jint internalFormat, srcRow += lockedRect.Pitch; destRow -= dstPitch; } - } else if ((ddpf.dwRGBBitCount <= 24) && + } else if ((ddpf.dwRGBBitCount <= 24) && (ddpf.dwRGBBitCount > 16)) { for (int i=yoffset; i < ylimit; i++) { src = srcRow; @@ -1094,7 +1094,7 @@ void copyDataFromSurface(jint internalFormat, srcRow += lockedRect.Pitch; destRow -= dstPitch; } - } else if ((ddpf.dwRGBBitCount <= 16) && + } else if ((ddpf.dwRGBBitCount <= 16) && (ddpf.dwRGBBitCount > 8)) { for (int i=yoffset; i < ylimit; i++) { @@ -1111,7 +1111,7 @@ void copyDataFromSurface(jint internalFormat, t = (mask & ddpf.dwRBitMask) << -rshift; *dst++ = (t <= 0xff ? (byte) t : 0xff); } - + if (gshift >= 0) { *dst++ = (byte) ((mask & ddpf.dwGBitMask) >> gshift); @@ -1121,7 +1121,7 @@ void copyDataFromSurface(jint internalFormat, } if (bshift >= 0) { *dst++ = (byte) ((mask & ddpf.dwBBitMask) >> - bshift); + bshift); } else { t = (mask & ddpf.dwBBitMask) << -bshift; *dst++ = (t <= 0xff ? (byte) t : 0xff); @@ -1155,7 +1155,7 @@ void copyDataFromSurface(jint internalFormat, t = (mask & ddpf.dwRBitMask) << -rshift; *dst++ = (t <= 0xff ? (byte) t : 0xff); } - + if (gshift >= 0) { *dst++ = (byte) ((mask & ddpf.dwGBitMask) >> gshift); @@ -1165,7 +1165,7 @@ void copyDataFromSurface(jint internalFormat, } if (bshift >= 0) { *dst++ = (byte) ((mask & ddpf.dwBBitMask) >> - bshift); + bshift); } else { t = (mask & ddpf.dwBBitMask) << -bshift; *dst++ = (t <= 0xff ? (byte) t : 0xff); @@ -1186,12 +1186,12 @@ void copyDataFromSurface(jint internalFormat, destRow -= dstPitch; } } - } + } } else if (internalFormat == FORMAT_BYTE_LA) { - int gshift = firstBit(ddpf.dwGBitMask) + - countBits(ddpf.dwGBitMask) - 8; + int gshift = firstBit(ddpf.dwGBitMask) + + ucountBits(ddpf.dwGBitMask) - 8; int ashift = firstBit(ddpf.dwRGBAlphaBitMask) + - countBits(ddpf.dwRGBAlphaBitMask) - 8; + ucountBits(ddpf.dwRGBAlphaBitMask) - 8; dstPitch = subWidth << 1; destRow += (subHeight-1)*dstPitch; @@ -1215,13 +1215,13 @@ void copyDataFromSurface(jint internalFormat, *dst++ = *src++; } } - srcRow += lockedRect.Pitch; + srcRow += lockedRect.Pitch; destRow -= dstPitch; } } else { // handle less common format - int gshift = firstBit(ddpf.dwGBitMask) + - countBits(ddpf.dwGBitMask) - 8; - if ((ddpf.dwRGBBitCount <= 32) && + int gshift = firstBit(ddpf.dwGBitMask) + + ucountBits(ddpf.dwGBitMask) - 8; + if ((ddpf.dwRGBBitCount <= 32) && (ddpf.dwRGBBitCount > 24)) { for (int i=yoffset; i < ylimit; i++) { @@ -1237,7 +1237,7 @@ void copyDataFromSurface(jint internalFormat, *dst++ = (byte) ((mask & ddpf.dwGBitMask) >> gshift); } else { - t = (mask & ddpf.dwGBitMask) << -gshift; + t = (mask & ddpf.dwGBitMask) << -gshift; *dst++ = (t <= 0xff ? (byte) t : 0xff); } if (ddpf.noAlpha) { @@ -1255,7 +1255,7 @@ void copyDataFromSurface(jint internalFormat, srcRow += lockedRect.Pitch; destRow -= dstPitch; } - } else if ((ddpf.dwRGBBitCount <= 24) && + } else if ((ddpf.dwRGBBitCount <= 24) && (ddpf.dwRGBBitCount > 16)) { for (int i=yoffset; i < ylimit; i++) { src = srcRow; @@ -1269,7 +1269,7 @@ void copyDataFromSurface(jint internalFormat, *dst++ = (byte) ((mask & ddpf.dwGBitMask) >> gshift); } else { - t = (mask & ddpf.dwGBitMask) << -gshift; + t = (mask & ddpf.dwGBitMask) << -gshift; *dst++ = (t <= 0xff ? (byte) t : 0xff); } if (ddpf.noAlpha) { @@ -1287,7 +1287,7 @@ void copyDataFromSurface(jint internalFormat, srcRow += lockedRect.Pitch; destRow -= dstPitch; } - } else if ((ddpf.dwRGBBitCount <= 16) && + } else if ((ddpf.dwRGBBitCount <= 16) && (ddpf.dwRGBBitCount > 8)) { for (int i=yoffset; i < ylimit; i++) { src = srcRow; @@ -1300,7 +1300,7 @@ void copyDataFromSurface(jint internalFormat, *dst++ = (byte) ((mask & ddpf.dwGBitMask) >> gshift); } else { - t = (mask & ddpf.dwGBitMask) << -gshift; + t = (mask & ddpf.dwGBitMask) << -gshift; *dst++ = (t <= 0xff ? (byte) t : 0xff); } if (ddpf.noAlpha) { @@ -1328,7 +1328,7 @@ void copyDataFromSurface(jint internalFormat, *dst++ = (byte) ((mask & ddpf.dwGBitMask) >> gshift); } else { - t = (mask & ddpf.dwGBitMask) << -gshift; + t = (mask & ddpf.dwGBitMask) << -gshift; *dst++ = (t <= 0xff ? (byte) t : 0xff); } if (ddpf.noAlpha) { @@ -1347,11 +1347,11 @@ void copyDataFromSurface(jint internalFormat, destRow -= dstPitch; } } - } + } } else if (internalFormat == FORMAT_BYTE_GRAY) { - int gshift = firstBit(ddpf.dwGBitMask) + - countBits(ddpf.dwGBitMask) - 8; + int gshift = firstBit(ddpf.dwGBitMask) + + ucountBits(ddpf.dwGBitMask) - 8; dstPitch = subWidth; destRow += (subHeight-1)*dstPitch; @@ -1370,13 +1370,13 @@ void copyDataFromSurface(jint internalFormat, *dst++ = b2; *src++; } - srcRow += lockedRect.Pitch; + srcRow += lockedRect.Pitch; destRow -= dstPitch; } } else { // handle less common format - int gshift = firstBit(ddpf.dwGBitMask) + - countBits(ddpf.dwGBitMask) - 8; - if ((ddpf.dwRGBBitCount <= 32) && + int gshift = firstBit(ddpf.dwGBitMask) + + ucountBits(ddpf.dwGBitMask) - 8; + if ((ddpf.dwRGBBitCount <= 32) && (ddpf.dwRGBBitCount > 24)) { for (int i=yoffset; i < ylimit; i++) { @@ -1392,14 +1392,14 @@ void copyDataFromSurface(jint internalFormat, *dst++ = (byte) ((mask & ddpf.dwGBitMask) >> gshift); } else { - t = (mask & ddpf.dwGBitMask) << -gshift; + t = (mask & ddpf.dwGBitMask) << -gshift; *dst++ = (t <= 0xff ? (byte) t : 0xff); } } srcRow += lockedRect.Pitch; destRow -= dstPitch; } - } else if ((ddpf.dwRGBBitCount <= 24) && + } else if ((ddpf.dwRGBBitCount <= 24) && (ddpf.dwRGBBitCount > 16)) { for (int i=yoffset; i < ylimit; i++) { src = srcRow; @@ -1413,14 +1413,14 @@ void copyDataFromSurface(jint internalFormat, *dst++ = (byte) ((mask & ddpf.dwGBitMask) >> gshift); } else { - t = (mask & ddpf.dwGBitMask) << -gshift; + t = (mask & ddpf.dwGBitMask) << -gshift; *dst++ = (t <= 0xff ? (byte) t : 0xff); } } srcRow += lockedRect.Pitch; destRow -= dstPitch; } - } else if ((ddpf.dwRGBBitCount <= 16) && + } else if ((ddpf.dwRGBBitCount <= 16) && (ddpf.dwRGBBitCount > 8)) { for (int i=yoffset; i < ylimit; i++) { src = srcRow; @@ -1433,7 +1433,7 @@ void copyDataFromSurface(jint internalFormat, *dst++ = (byte) ((mask & ddpf.dwGBitMask) >> gshift); } else { - t = (mask & ddpf.dwGBitMask) << -gshift; + t = (mask & ddpf.dwGBitMask) << -gshift; *dst++ = (t <= 0xff ? (byte) t : 0xff); } } @@ -1450,7 +1450,7 @@ void copyDataFromSurface(jint internalFormat, *dst++ = (byte) ((mask & ddpf.dwGBitMask) >> gshift); } else { - t = (mask & ddpf.dwGBitMask) << -gshift; + t = (mask & ddpf.dwGBitMask) << -gshift; *dst++ = (t <= 0xff ? (byte) t : 0xff); } } @@ -1458,7 +1458,7 @@ void copyDataFromSurface(jint internalFormat, destRow -= dstPitch; } } - } + } } else { // FORMAT_USHORT_GRAY @@ -1468,21 +1468,21 @@ void copyDataFromSurface(jint internalFormat, hr = surf->UnlockRect(); if (FAILED(hr)) { - printf("Fail to unlock surface: %s\n", DXGetErrorString8(hr)); + printf("Fail to unlock surface: %s\n", DXGetErrorString9(hr)); return; } } -void copyDataToSurfaceABGR(jint internalFormat, +void copyDataToSurfaceABGR(jint internalFormat, PIXELFORMAT *ddpf, unsigned char* pRect, DWORD rectPitch, jbyte *data, jint xoffset, jint yoffset, - DWORD xlimit, DWORD ylimit, - jint subWidth) + DWORD xlimit, DWORD ylimit, + jint subWidth) { unsigned char *src; unsigned char *dst; @@ -1510,7 +1510,7 @@ void copyDataToSurfaceABGR(jint internalFormat, *dst++ = a; } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount == 16) && (ddpf->dwRBitMask == 0xf00) && @@ -1529,20 +1529,20 @@ void copyDataToSurfaceABGR(jint internalFormat, *dst++ = (a << 4) | r; } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { // handle less common (even weird) format - int rDiscard = 8-countBits(ddpf->dwRBitMask); - int gDiscard = 8-countBits(ddpf->dwGBitMask); - int bDiscard = 8-countBits(ddpf->dwBBitMask); - int aDiscard = 8-countBits(ddpf->dwRGBAlphaBitMask); + int rDiscard = 8-ucountBits(ddpf->dwRBitMask); + int gDiscard = 8-ucountBits(ddpf->dwGBitMask); + int bDiscard = 8-ucountBits(ddpf->dwBBitMask); + int aDiscard = 8-ucountBits(ddpf->dwRGBAlphaBitMask); int rshift = firstBit(ddpf->dwRBitMask); - int gshift = firstBit(ddpf->dwGBitMask); - int bshift = firstBit(ddpf->dwBBitMask); - int ashift = firstBit(ddpf->dwRGBAlphaBitMask); + int gshift = firstBit(ddpf->dwGBitMask); + int bshift = firstBit(ddpf->dwBBitMask); + int ashift = firstBit(ddpf->dwRGBAlphaBitMask); DWORD mask; - if ((ddpf->dwRGBBitCount <= 32) && + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += (xoffset << 2); for (int i=yoffset; i < ylimit; i++) { @@ -1569,7 +1569,7 @@ void copyDataToSurfaceABGR(jint internalFormat, } else { r = (*src++) << -rDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); @@ -1577,7 +1577,7 @@ void copyDataToSurfaceABGR(jint internalFormat, *dst++ = (byte) ((mask >> 24) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -1606,14 +1606,14 @@ void copyDataToSurfaceABGR(jint internalFormat, } else { r = (*src++) << -rDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); *dst++ = (byte) ((mask >> 16) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -1642,13 +1642,13 @@ void copyDataToSurfaceABGR(jint internalFormat, } else { r = (*src++) << -rDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += xoffset; @@ -1676,31 +1676,31 @@ void copyDataToSurfaceABGR(jint internalFormat, } else { r = (*src++) << -rDiscard; } - *dst++ = (byte) ((r << rshift) | (g << gshift) | + *dst++ = (byte) ((r << rshift) | (g << gshift) | (b << bshift) | (a << ashift)); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } - } else { - // should not happen, RGBBitCount > 32. Even DirectX + } else { + // should not happen, RGBBitCount > 32. Even DirectX // RGB mask can't address it. - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } } } else if (internalFormat == LUMINANCE_ALPHA) { - int rDiscard = 8-countBits(ddpf->dwRBitMask); - int gDiscard = 8-countBits(ddpf->dwGBitMask); - int bDiscard = 8-countBits(ddpf->dwBBitMask); - int aDiscard = 8-countBits(ddpf->dwRGBAlphaBitMask); + int rDiscard = 8-ucountBits(ddpf->dwRBitMask); + int gDiscard = 8-ucountBits(ddpf->dwGBitMask); + int bDiscard = 8-ucountBits(ddpf->dwBBitMask); + int aDiscard = 8-ucountBits(ddpf->dwRGBAlphaBitMask); int rshift = firstBit(ddpf->dwRBitMask); int gshift = firstBit(ddpf->dwGBitMask); int bshift = firstBit(ddpf->dwBBitMask); - int ashift = firstBit(ddpf->dwRGBAlphaBitMask); + int ashift = firstBit(ddpf->dwRGBAlphaBitMask); DWORD mask; - if ((ddpf->dwRGBBitCount <= 32) && + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += (xoffset << 2); for (int i=yoffset; i < ylimit; i++) { @@ -1710,7 +1710,7 @@ void copyDataToSurfaceABGR(jint internalFormat, if (aDiscard >= 0) { a = (*src++) >> aDiscard; } else { - a = (*src++) << -aDiscard; + a = (*src++) << -aDiscard; } src++; src++; @@ -1730,7 +1730,7 @@ void copyDataToSurfaceABGR(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); @@ -1738,7 +1738,7 @@ void copyDataToSurfaceABGR(jint internalFormat, *dst++ = (byte) ((mask >> 24) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -1750,7 +1750,7 @@ void copyDataToSurfaceABGR(jint internalFormat, if (aDiscard >= 0) { a = (*src++) >> aDiscard; } else { - a = (*src++) << -aDiscard; + a = (*src++) << -aDiscard; } src++; src++; @@ -1770,14 +1770,14 @@ void copyDataToSurfaceABGR(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); *dst++ = (byte) ((mask >> 16) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -1789,7 +1789,7 @@ void copyDataToSurfaceABGR(jint internalFormat, if (aDiscard >= 0) { a = (*src++) >> aDiscard; } else { - a = (*src++) << -aDiscard; + a = (*src++) << -aDiscard; } src++; src++; @@ -1809,13 +1809,13 @@ void copyDataToSurfaceABGR(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += xoffset; @@ -1826,7 +1826,7 @@ void copyDataToSurfaceABGR(jint internalFormat, if (aDiscard >= 0) { a = (*src++) >> aDiscard; } else { - a = (*src++) << -aDiscard; + a = (*src++) << -aDiscard; } src++; src++; @@ -1846,22 +1846,22 @@ void copyDataToSurfaceABGR(jint internalFormat, } else { b = l << -bDiscard; } - *dst++ = (byte) ((r << rshift) | (g << gshift) | + *dst++ = (byte) ((r << rshift) | (g << gshift) | (b << bshift) | (a << ashift)); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } - } else if (internalFormat == ALPHA) { - int aDiscard = 8-countBits(ddpf->dwRGBAlphaBitMask); - int ashift = firstBit(ddpf->dwRGBAlphaBitMask); + } else if (internalFormat == ALPHA) { + int aDiscard = 8-ucountBits(ddpf->dwRGBAlphaBitMask); + int ashift = firstBit(ddpf->dwRGBAlphaBitMask); DWORD mask; - if ((ddpf->dwRGBBitCount <= 32) && + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += (xoffset << 2); for (int i=yoffset; i < ylimit; i++) { @@ -1881,7 +1881,7 @@ void copyDataToSurfaceABGR(jint internalFormat, *dst++ = (byte) ((mask >> 24) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -1902,7 +1902,7 @@ void copyDataToSurfaceABGR(jint internalFormat, *dst++ = (byte) ((mask >> 16) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -1922,7 +1922,7 @@ void copyDataToSurfaceABGR(jint internalFormat, *dst++ = (byte) ((mask >> 8) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += xoffset; @@ -1939,26 +1939,26 @@ void copyDataToSurfaceABGR(jint internalFormat, *dst++ = (byte) (a << ashift); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } } else if ((internalFormat == LUMINANCE) || (internalFormat == INTENSITY)) { - int rDiscard = 8-countBits(ddpf->dwRBitMask); - int gDiscard = 8-countBits(ddpf->dwGBitMask); - int bDiscard = 8-countBits(ddpf->dwBBitMask); - int aDiscard = 8-countBits(ddpf->dwRGBAlphaBitMask); + int rDiscard = 8-ucountBits(ddpf->dwRBitMask); + int gDiscard = 8-ucountBits(ddpf->dwGBitMask); + int bDiscard = 8-ucountBits(ddpf->dwBBitMask); + int aDiscard = 8-ucountBits(ddpf->dwRGBAlphaBitMask); int rshift = firstBit(ddpf->dwRBitMask); int gshift = firstBit(ddpf->dwGBitMask); int bshift = firstBit(ddpf->dwBBitMask); - int ashift = firstBit(ddpf->dwRGBAlphaBitMask); + int ashift = firstBit(ddpf->dwRGBAlphaBitMask); DWORD mask; - - if ((ddpf->dwRGBBitCount <= 32) && + + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += (xoffset << 2); for (int i=yoffset; i < ylimit; i++) { @@ -1987,7 +1987,7 @@ void copyDataToSurfaceABGR(jint internalFormat, } else { a = l << -aDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); @@ -1995,7 +1995,7 @@ void copyDataToSurfaceABGR(jint internalFormat, *dst++ = (byte) ((mask >> 24) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -2026,14 +2026,14 @@ void copyDataToSurfaceABGR(jint internalFormat, } else { a = l << -aDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); *dst++ = (byte) ((mask >> 16) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -2064,13 +2064,13 @@ void copyDataToSurfaceABGR(jint internalFormat, } else { a = l << -aDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += xoffset; @@ -2100,16 +2100,16 @@ void copyDataToSurfaceABGR(jint internalFormat, } else { a = l << -aDiscard; } - *dst++ = (byte) ((r << rshift) | - (g << gshift) | + *dst++ = (byte) ((r << rshift) | + (g << gshift) | (b << bshift) | (a << ashift)); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } } else { @@ -2118,14 +2118,14 @@ void copyDataToSurfaceABGR(jint internalFormat, } -void copyDataToSurfaceBGR(jint internalFormat, +void copyDataToSurfaceBGR(jint internalFormat, PIXELFORMAT *ddpf, unsigned char* pRect, DWORD rectPitch, jbyte *data, jint xoffset, jint yoffset, - DWORD xlimit, DWORD ylimit, - jint subWidth) + DWORD xlimit, DWORD ylimit, + jint subWidth) { unsigned char *src; unsigned char *dst; @@ -2153,7 +2153,7 @@ void copyDataToSurfaceBGR(jint internalFormat, *dst++ = 0xff; } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount == 16) && @@ -2172,18 +2172,18 @@ void copyDataToSurfaceBGR(jint internalFormat, *dst++ = 0xf0 | r; } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { // handle less common (even weird) format - int rDiscard = 8-countBits(ddpf->dwRBitMask); - int gDiscard = 8-countBits(ddpf->dwGBitMask); - int bDiscard = 8-countBits(ddpf->dwBBitMask); + int rDiscard = 8-ucountBits(ddpf->dwRBitMask); + int gDiscard = 8-ucountBits(ddpf->dwGBitMask); + int bDiscard = 8-ucountBits(ddpf->dwBBitMask); int rshift = firstBit(ddpf->dwRBitMask); - int gshift = firstBit(ddpf->dwGBitMask); - int bshift = firstBit(ddpf->dwBBitMask); + int gshift = firstBit(ddpf->dwGBitMask); + int bshift = firstBit(ddpf->dwBBitMask); DWORD mask; - if ((ddpf->dwRGBBitCount <= 32) && + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += (xoffset << 2); for (int i=yoffset; i < ylimit; i++) { @@ -2205,15 +2205,15 @@ void copyDataToSurfaceBGR(jint internalFormat, } else { r = (*src++) << -rDiscard; } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask; + mask = (r << rshift) | (g << gshift) | + (b << bshift) | ddpf->dwRGBAlphaBitMask; *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); *dst++ = (byte) ((mask >> 16) & 0xff); *dst++ = (byte) ((mask >> 24) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -2237,14 +2237,14 @@ void copyDataToSurfaceBGR(jint internalFormat, } else { r = (*src++) << -rDiscard; } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask; + mask = (r << rshift) | (g << gshift) | + (b << bshift) | ddpf->dwRGBAlphaBitMask; *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); *dst++ = (byte) ((mask >> 16) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -2268,13 +2268,13 @@ void copyDataToSurfaceBGR(jint internalFormat, } else { r = (*src++) << -rDiscard; } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask; + mask = (r << rshift) | (g << gshift) | + (b << bshift) | ddpf->dwRGBAlphaBitMask; *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += xoffset; @@ -2297,29 +2297,29 @@ void copyDataToSurfaceBGR(jint internalFormat, } else { r = (*src++) << -rDiscard; } - *dst++ = (byte) ((r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask); + *dst++ = (byte) ((r << rshift) | (g << gshift) | + (b << bshift) | ddpf->dwRGBAlphaBitMask); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } - } else { - // should not happen, RGBBitCount > 32. Even DirectX + } else { + // should not happen, RGBBitCount > 32. Even DirectX // RGB mask can't address it. - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } } } else if (internalFormat == LUMINANCE_ALPHA) { - int rDiscard = 8-countBits(ddpf->dwRBitMask); - int gDiscard = 8-countBits(ddpf->dwGBitMask); - int bDiscard = 8-countBits(ddpf->dwBBitMask); + int rDiscard = 8-ucountBits(ddpf->dwRBitMask); + int gDiscard = 8-ucountBits(ddpf->dwGBitMask); + int bDiscard = 8-ucountBits(ddpf->dwBBitMask); int rshift = firstBit(ddpf->dwRBitMask); int gshift = firstBit(ddpf->dwGBitMask); int bshift = firstBit(ddpf->dwBBitMask); DWORD mask; - if ((ddpf->dwRGBBitCount <= 32) && + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += (xoffset << 2); for (int i=yoffset; i < ylimit; i++) { @@ -2344,15 +2344,15 @@ void copyDataToSurfaceBGR(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask; + mask = (r << rshift) | (g << gshift) | + (b << bshift) | ddpf->dwRGBAlphaBitMask; *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); *dst++ = (byte) ((mask >> 16) & 0xff); *dst++ = (byte) ((mask >> 24) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -2379,14 +2379,14 @@ void copyDataToSurfaceBGR(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask; + mask = (r << rshift) | (g << gshift) | + (b << bshift) | ddpf->dwRGBAlphaBitMask; *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); *dst++ = (byte) ((mask >> 16) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -2413,13 +2413,13 @@ void copyDataToSurfaceBGR(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask; + mask = (r << rshift) | (g << gshift) | + (b << bshift) | ddpf->dwRGBAlphaBitMask; *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += xoffset; @@ -2445,23 +2445,23 @@ void copyDataToSurfaceBGR(jint internalFormat, } else { b = l << -bDiscard; } - *dst++ = (byte) ((r << rshift) | (g << gshift) | - (b << bshift) |ddpf->dwRGBAlphaBitMask); + *dst++ = (byte) ((r << rshift) | (g << gshift) | + (b << bshift) |ddpf->dwRGBAlphaBitMask); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } - } else if (internalFormat == ALPHA) { + } else if (internalFormat == ALPHA) { byte m1 = (byte) (ddpf->dwRGBAlphaBitMask & 0xff); byte m2 = (byte) ((ddpf->dwRGBAlphaBitMask >> 8) & 0xff); byte m3 = (byte) ((ddpf->dwRGBAlphaBitMask >> 16) & 0xff); byte m4 = (byte) ((ddpf->dwRGBAlphaBitMask >> 24) & 0xff); - if ((ddpf->dwRGBBitCount <= 32) && + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += (xoffset << 2); for (int i=yoffset; i < ylimit; i++) { @@ -2475,7 +2475,7 @@ void copyDataToSurfaceBGR(jint internalFormat, *dst++ = m4; } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -2490,7 +2490,7 @@ void copyDataToSurfaceBGR(jint internalFormat, *dst++ = m3; } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -2504,7 +2504,7 @@ void copyDataToSurfaceBGR(jint internalFormat, *dst++ = m2; } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += xoffset; @@ -2516,23 +2516,23 @@ void copyDataToSurfaceBGR(jint internalFormat, *dst++ = m1; } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } } else if ((internalFormat == LUMINANCE) || (internalFormat == INTENSITY)) { - int rDiscard = 8-countBits(ddpf->dwRBitMask); - int gDiscard = 8-countBits(ddpf->dwGBitMask); - int bDiscard = 8-countBits(ddpf->dwBBitMask); + int rDiscard = 8-ucountBits(ddpf->dwRBitMask); + int gDiscard = 8-ucountBits(ddpf->dwGBitMask); + int bDiscard = 8-ucountBits(ddpf->dwBBitMask); int rshift = firstBit(ddpf->dwRBitMask); int gshift = firstBit(ddpf->dwGBitMask); int bshift = firstBit(ddpf->dwBBitMask); DWORD mask; - - if ((ddpf->dwRGBBitCount <= 32) && + + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += (xoffset << 2); for (int i=yoffset; i < ylimit; i++) { @@ -2556,7 +2556,7 @@ void copyDataToSurfaceBGR(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | ddpf->dwRGBAlphaBitMask; *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); @@ -2564,7 +2564,7 @@ void copyDataToSurfaceBGR(jint internalFormat, *dst++ = (byte) ((mask >> 24) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -2590,14 +2590,14 @@ void copyDataToSurfaceBGR(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask; + mask = (r << rshift) | (g << gshift) | + (b << bshift) | ddpf->dwRGBAlphaBitMask; *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); *dst++ = (byte) ((mask >> 16) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -2623,13 +2623,13 @@ void copyDataToSurfaceBGR(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask; + mask = (r << rshift) | (g << gshift) | + (b << bshift) | ddpf->dwRGBAlphaBitMask; *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += xoffset; @@ -2654,16 +2654,16 @@ void copyDataToSurfaceBGR(jint internalFormat, } else { b = l << -bDiscard; } - *dst++ = (byte) ((r << rshift) | - (g << gshift) | + *dst++ = (byte) ((r << rshift) | + (g << gshift) | (b << bshift) | - ddpf->dwRGBAlphaBitMask); + ddpf->dwRGBAlphaBitMask); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } } else { @@ -2676,14 +2676,14 @@ void copyDataToSurfaceBGR(jint internalFormat, * but the pixel is written in the destination buffer * from right to left. This is used for CubeMapping. */ -void copyDataToSurfaceRGBARev(jint internalFormat, +void copyDataToSurfaceRGBARev(jint internalFormat, PIXELFORMAT *ddpf, unsigned char* pRect, DWORD rectPitch, jbyte *data, jint xoffset, jint yoffset, - DWORD xlimit, DWORD ylimit, - jint subWidth) + DWORD xlimit, DWORD ylimit, + jint subWidth) { unsigned char *src; unsigned char *dst; @@ -2716,7 +2716,7 @@ void copyDataToSurfaceRGBARev(jint internalFormat, *dst-- = b; } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount == 16) && (ddpf->dwRBitMask == 0xf00) && @@ -2736,19 +2736,19 @@ void copyDataToSurfaceRGBARev(jint internalFormat, } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { // handle less common (even weird) format - int rDiscard = 8-countBits(ddpf->dwRBitMask); - int gDiscard = 8-countBits(ddpf->dwGBitMask); - int bDiscard = 8-countBits(ddpf->dwBBitMask); - int aDiscard = 8-countBits(ddpf->dwRGBAlphaBitMask); + int rDiscard = 8-ucountBits(ddpf->dwRBitMask); + int gDiscard = 8-ucountBits(ddpf->dwGBitMask); + int bDiscard = 8-ucountBits(ddpf->dwBBitMask); + int aDiscard = 8-ucountBits(ddpf->dwRGBAlphaBitMask); int rshift = firstBit(ddpf->dwRBitMask); - int gshift = firstBit(ddpf->dwGBitMask); - int bshift = firstBit(ddpf->dwBBitMask); - int ashift = firstBit(ddpf->dwRGBAlphaBitMask); + int gshift = firstBit(ddpf->dwGBitMask); + int bshift = firstBit(ddpf->dwBBitMask); + int ashift = firstBit(ddpf->dwRGBAlphaBitMask); DWORD mask; - if ((ddpf->dwRGBBitCount <= 32) && + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += ((xlimit << 2) - 1); for (int i=yoffset; i < ylimit; i++) { @@ -2775,7 +2775,7 @@ void copyDataToSurfaceRGBARev(jint internalFormat, } else { a = (*src++) >> -aDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst-- = (byte) ((mask >> 24) & 0xff); *dst-- = (byte) ((mask >> 16) & 0xff); @@ -2784,7 +2784,7 @@ void copyDataToSurfaceRGBARev(jint internalFormat, } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -2814,14 +2814,14 @@ void copyDataToSurfaceRGBARev(jint internalFormat, } else { a = (*src++) >> -aDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst-- = (byte) ((mask >> 16) & 0xff); *dst-- = (byte) ((mask >> 8) & 0xff); *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -2850,13 +2850,13 @@ void copyDataToSurfaceRGBARev(jint internalFormat, } else { a = (*src++) >> -aDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst-- = (byte) ((mask >> 8) & 0xff); *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += (xlimit-1); @@ -2884,31 +2884,31 @@ void copyDataToSurfaceRGBARev(jint internalFormat, } else { a = (*src++) >> -aDiscard; } - *dst-- = (byte) ((r << rshift) | (g << gshift) | + *dst-- = (byte) ((r << rshift) | (g << gshift) | (b << bshift) | (a << ashift)); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } - } else { - // should not happen, RGBBitCount > 32. Even DirectX + } else { + // should not happen, RGBBitCount > 32. Even DirectX // RGB mask can't address it. - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } } } else if (internalFormat == LUMINANCE_ALPHA) { - int rDiscard = 8-countBits(ddpf->dwRBitMask); - int gDiscard = 8-countBits(ddpf->dwGBitMask); - int bDiscard = 8-countBits(ddpf->dwBBitMask); - int aDiscard = 8-countBits(ddpf->dwRGBAlphaBitMask); + int rDiscard = 8-ucountBits(ddpf->dwRBitMask); + int gDiscard = 8-ucountBits(ddpf->dwGBitMask); + int bDiscard = 8-ucountBits(ddpf->dwBBitMask); + int aDiscard = 8-ucountBits(ddpf->dwRGBAlphaBitMask); int rshift = firstBit(ddpf->dwRBitMask); int gshift = firstBit(ddpf->dwGBitMask); int bshift = firstBit(ddpf->dwBBitMask); - int ashift = firstBit(ddpf->dwRGBAlphaBitMask); + int ashift = firstBit(ddpf->dwRGBAlphaBitMask); DWORD mask; - if ((ddpf->dwRGBBitCount <= 32) && + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += ((xlimit << 2) -1); for (int i=yoffset; i < ylimit; i++) { @@ -2921,7 +2921,7 @@ void copyDataToSurfaceRGBARev(jint internalFormat, if (aDiscard >= 0) { a = (*src++) >> aDiscard; } else { - a = (*src++) << -aDiscard; + a = (*src++) << -aDiscard; } if (rDiscard >= 0) { r = l >> rDiscard; @@ -2938,7 +2938,7 @@ void copyDataToSurfaceRGBARev(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst-- = (byte) ((mask >> 24) & 0xff); @@ -2947,7 +2947,7 @@ void copyDataToSurfaceRGBARev(jint internalFormat, *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -2962,7 +2962,7 @@ void copyDataToSurfaceRGBARev(jint internalFormat, if (aDiscard >= 0) { a = (*src++) >> aDiscard; } else { - a = (*src++) << -aDiscard; + a = (*src++) << -aDiscard; } if (rDiscard >= 0) { r = l >> rDiscard; @@ -2979,14 +2979,14 @@ void copyDataToSurfaceRGBARev(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst-- = (byte) ((mask >> 16) & 0xff); *dst-- = (byte) ((mask >> 8) & 0xff); *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -3001,7 +3001,7 @@ void copyDataToSurfaceRGBARev(jint internalFormat, if (aDiscard >= 0) { a = (*src++) >> aDiscard; } else { - a = (*src++) << -aDiscard; + a = (*src++) << -aDiscard; } if (rDiscard >= 0) { r = l >> rDiscard; @@ -3018,13 +3018,13 @@ void copyDataToSurfaceRGBARev(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst-- = (byte) ((mask >> 8) & 0xff); *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += (xlimit - 1); @@ -3038,7 +3038,7 @@ void copyDataToSurfaceRGBARev(jint internalFormat, if (aDiscard >= 0) { a = (*src++) >> aDiscard; } else { - a = (*src++) << -aDiscard; + a = (*src++) << -aDiscard; } if (rDiscard >= 0) { r = l >> rDiscard; @@ -3055,22 +3055,22 @@ void copyDataToSurfaceRGBARev(jint internalFormat, } else { b = l << -bDiscard; } - *dst-- = (byte) ((r << rshift) | (g << gshift) | + *dst-- = (byte) ((r << rshift) | (g << gshift) | (b << bshift) | (a << ashift)); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } - } else if (internalFormat == ALPHA) { - int aDiscard = 8-countBits(ddpf->dwRGBAlphaBitMask); - int ashift = firstBit(ddpf->dwRGBAlphaBitMask); + } else if (internalFormat == ALPHA) { + int aDiscard = 8-ucountBits(ddpf->dwRGBAlphaBitMask); + int ashift = firstBit(ddpf->dwRGBAlphaBitMask); DWORD mask; - if ((ddpf->dwRGBBitCount <= 32) && + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += ((xlimit << 2) - 1); for (int i=yoffset; i < ylimit; i++) { @@ -3090,7 +3090,7 @@ void copyDataToSurfaceRGBARev(jint internalFormat, *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -3111,7 +3111,7 @@ void copyDataToSurfaceRGBARev(jint internalFormat, *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -3131,7 +3131,7 @@ void copyDataToSurfaceRGBARev(jint internalFormat, *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += (xlimit-1); @@ -3148,25 +3148,25 @@ void copyDataToSurfaceRGBARev(jint internalFormat, *dst-- = (byte) (a << ashift); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } } else if ((internalFormat == LUMINANCE) || (internalFormat == INTENSITY)) { - int rDiscard = 8-countBits(ddpf->dwRBitMask); - int gDiscard = 8-countBits(ddpf->dwGBitMask); - int bDiscard = 8-countBits(ddpf->dwBBitMask); - int aDiscard = 8-countBits(ddpf->dwRGBAlphaBitMask); + int rDiscard = 8-ucountBits(ddpf->dwRBitMask); + int gDiscard = 8-ucountBits(ddpf->dwGBitMask); + int bDiscard = 8-ucountBits(ddpf->dwBBitMask); + int aDiscard = 8-ucountBits(ddpf->dwRGBAlphaBitMask); int rshift = firstBit(ddpf->dwRBitMask); int gshift = firstBit(ddpf->dwGBitMask); int bshift = firstBit(ddpf->dwBBitMask); - int ashift = firstBit(ddpf->dwRGBAlphaBitMask); + int ashift = firstBit(ddpf->dwRGBAlphaBitMask); DWORD mask; - - if ((ddpf->dwRGBBitCount <= 32) && + + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += ((xlimit << 2) - 1); for (int i=yoffset; i < ylimit; i++) { @@ -3195,7 +3195,7 @@ void copyDataToSurfaceRGBARev(jint internalFormat, } else { a = l << -aDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst-- = (byte) ((mask >> 24) & 0xff); *dst-- = (byte) ((mask >> 16) & 0xff); @@ -3203,7 +3203,7 @@ void copyDataToSurfaceRGBARev(jint internalFormat, *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -3234,14 +3234,14 @@ void copyDataToSurfaceRGBARev(jint internalFormat, } else { a = l << -aDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst-- = (byte) ((mask >> 16) & 0xff); *dst-- = (byte) ((mask >> 8) & 0xff); *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -3272,13 +3272,13 @@ void copyDataToSurfaceRGBARev(jint internalFormat, } else { a = l << -aDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst-- = (byte) ((mask >> 8) & 0xff); *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += (xlimit-1); @@ -3308,16 +3308,16 @@ void copyDataToSurfaceRGBARev(jint internalFormat, } else { a = l << -aDiscard; } - *dst-- = (byte) ((r << rshift) | - (g << gshift) | + *dst-- = (byte) ((r << rshift) | + (g << gshift) | (b << bshift) | (a << ashift)); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } } else { @@ -3327,14 +3327,14 @@ void copyDataToSurfaceRGBARev(jint internalFormat, -void copyDataToSurfaceABGRRev(jint internalFormat, +void copyDataToSurfaceABGRRev(jint internalFormat, PIXELFORMAT *ddpf, unsigned char* pRect, DWORD rectPitch, jbyte *data, jint xoffset, jint yoffset, - DWORD xlimit, DWORD ylimit, - jint subWidth) + DWORD xlimit, DWORD ylimit, + jint subWidth) { unsigned char *src; unsigned char *dst; @@ -3365,7 +3365,7 @@ void copyDataToSurfaceABGRRev(jint internalFormat, *dst-- = b; } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount == 16) && (ddpf->dwRBitMask == 0xf00) && @@ -3384,20 +3384,20 @@ void copyDataToSurfaceABGRRev(jint internalFormat, *dst-- = (g << 4) | b; } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { // handle less common (even weird) format - int rDiscard = 8-countBits(ddpf->dwRBitMask); - int gDiscard = 8-countBits(ddpf->dwGBitMask); - int bDiscard = 8-countBits(ddpf->dwBBitMask); - int aDiscard = 8-countBits(ddpf->dwRGBAlphaBitMask); + int rDiscard = 8-ucountBits(ddpf->dwRBitMask); + int gDiscard = 8-ucountBits(ddpf->dwGBitMask); + int bDiscard = 8-ucountBits(ddpf->dwBBitMask); + int aDiscard = 8-ucountBits(ddpf->dwRGBAlphaBitMask); int rshift = firstBit(ddpf->dwRBitMask); - int gshift = firstBit(ddpf->dwGBitMask); - int bshift = firstBit(ddpf->dwBBitMask); - int ashift = firstBit(ddpf->dwRGBAlphaBitMask); + int gshift = firstBit(ddpf->dwGBitMask); + int bshift = firstBit(ddpf->dwBBitMask); + int ashift = firstBit(ddpf->dwRGBAlphaBitMask); DWORD mask; - if ((ddpf->dwRGBBitCount <= 32) && + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += ((xlimit << 2) - 1); for (int i=yoffset; i < ylimit; i++) { @@ -3424,7 +3424,7 @@ void copyDataToSurfaceABGRRev(jint internalFormat, } else { r = (*src++) << -rDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst-- = (byte) ((mask >> 24) & 0xff); *dst-- = (byte) ((mask >> 16) & 0xff); @@ -3432,7 +3432,7 @@ void copyDataToSurfaceABGRRev(jint internalFormat, *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -3461,14 +3461,14 @@ void copyDataToSurfaceABGRRev(jint internalFormat, } else { r = (*src++) << -rDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst-- = (byte) ((mask >> 16) & 0xff); *dst-- = (byte) ((mask >> 8) & 0xff); *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -3497,13 +3497,13 @@ void copyDataToSurfaceABGRRev(jint internalFormat, } else { r = (*src++) << -rDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst-- = (byte) ((mask >> 8) & 0xff); *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += (xlimit-1); @@ -3531,31 +3531,31 @@ void copyDataToSurfaceABGRRev(jint internalFormat, } else { r = (*src++) << -rDiscard; } - *dst-- = (byte) ((r << rshift) | (g << gshift) | + *dst-- = (byte) ((r << rshift) | (g << gshift) | (b << bshift) | (a << ashift)); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } - } else { - // should not happen, RGBBitCount > 32. Even DirectX + } else { + // should not happen, RGBBitCount > 32. Even DirectX // RGB mask can't address it. - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } } } else if (internalFormat == LUMINANCE_ALPHA) { - int rDiscard = 8-countBits(ddpf->dwRBitMask); - int gDiscard = 8-countBits(ddpf->dwGBitMask); - int bDiscard = 8-countBits(ddpf->dwBBitMask); - int aDiscard = 8-countBits(ddpf->dwRGBAlphaBitMask); + int rDiscard = 8-ucountBits(ddpf->dwRBitMask); + int gDiscard = 8-ucountBits(ddpf->dwGBitMask); + int bDiscard = 8-ucountBits(ddpf->dwBBitMask); + int aDiscard = 8-ucountBits(ddpf->dwRGBAlphaBitMask); int rshift = firstBit(ddpf->dwRBitMask); int gshift = firstBit(ddpf->dwGBitMask); int bshift = firstBit(ddpf->dwBBitMask); - int ashift = firstBit(ddpf->dwRGBAlphaBitMask); + int ashift = firstBit(ddpf->dwRGBAlphaBitMask); DWORD mask; - if ((ddpf->dwRGBBitCount <= 32) && + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += ((xlimit << 2) - 1); for (int i=yoffset; i < ylimit; i++) { @@ -3565,7 +3565,7 @@ void copyDataToSurfaceABGRRev(jint internalFormat, if (aDiscard >= 0) { a = (*src++) >> aDiscard; } else { - a = (*src++) << -aDiscard; + a = (*src++) << -aDiscard; } src++; src++; @@ -3585,7 +3585,7 @@ void copyDataToSurfaceABGRRev(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst-- = (byte) ((mask >> 24) & 0xff); *dst-- = (byte) ((mask >> 16) & 0xff); @@ -3593,7 +3593,7 @@ void copyDataToSurfaceABGRRev(jint internalFormat, *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -3605,7 +3605,7 @@ void copyDataToSurfaceABGRRev(jint internalFormat, if (aDiscard >= 0) { a = (*src++) >> aDiscard; } else { - a = (*src++) << -aDiscard; + a = (*src++) << -aDiscard; } src++; src++; @@ -3625,14 +3625,14 @@ void copyDataToSurfaceABGRRev(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst-- = (byte) ((mask >> 16) & 0xff); *dst-- = (byte) ((mask >> 8) & 0xff); *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -3644,7 +3644,7 @@ void copyDataToSurfaceABGRRev(jint internalFormat, if (aDiscard >= 0) { a = (*src++) >> aDiscard; } else { - a = (*src++) << -aDiscard; + a = (*src++) << -aDiscard; } src++; src++; @@ -3664,13 +3664,13 @@ void copyDataToSurfaceABGRRev(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst-- = (byte) ((mask >> 8) & 0xff); *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += (xlimit - 1); @@ -3681,7 +3681,7 @@ void copyDataToSurfaceABGRRev(jint internalFormat, if (aDiscard >= 0) { a = (*src++) >> aDiscard; } else { - a = (*src++) << -aDiscard; + a = (*src++) << -aDiscard; } src++; src++; @@ -3701,22 +3701,22 @@ void copyDataToSurfaceABGRRev(jint internalFormat, } else { b = l << -bDiscard; } - *dst-- = (byte) ((r << rshift) | (g << gshift) | + *dst-- = (byte) ((r << rshift) | (g << gshift) | (b << bshift) | (a << ashift)); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } - } else if (internalFormat == ALPHA) { - int aDiscard = 8-countBits(ddpf->dwRGBAlphaBitMask); - int ashift = firstBit(ddpf->dwRGBAlphaBitMask); + } else if (internalFormat == ALPHA) { + int aDiscard = 8-ucountBits(ddpf->dwRGBAlphaBitMask); + int ashift = firstBit(ddpf->dwRGBAlphaBitMask); DWORD mask; - if ((ddpf->dwRGBBitCount <= 32) && + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += ((xlimit << 2) - 1); for (int i=yoffset; i < ylimit; i++) { @@ -3737,7 +3737,7 @@ void copyDataToSurfaceABGRRev(jint internalFormat, } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -3758,7 +3758,7 @@ void copyDataToSurfaceABGRRev(jint internalFormat, *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -3778,7 +3778,7 @@ void copyDataToSurfaceABGRRev(jint internalFormat, *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += xlimit; @@ -3795,26 +3795,26 @@ void copyDataToSurfaceABGRRev(jint internalFormat, *dst-- = (byte) (a << ashift); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } } else if ((internalFormat == LUMINANCE) || (internalFormat == INTENSITY)) { - int rDiscard = 8-countBits(ddpf->dwRBitMask); - int gDiscard = 8-countBits(ddpf->dwGBitMask); - int bDiscard = 8-countBits(ddpf->dwBBitMask); - int aDiscard = 8-countBits(ddpf->dwRGBAlphaBitMask); + int rDiscard = 8-ucountBits(ddpf->dwRBitMask); + int gDiscard = 8-ucountBits(ddpf->dwGBitMask); + int bDiscard = 8-ucountBits(ddpf->dwBBitMask); + int aDiscard = 8-ucountBits(ddpf->dwRGBAlphaBitMask); int rshift = firstBit(ddpf->dwRBitMask); int gshift = firstBit(ddpf->dwGBitMask); int bshift = firstBit(ddpf->dwBBitMask); - int ashift = firstBit(ddpf->dwRGBAlphaBitMask); + int ashift = firstBit(ddpf->dwRGBAlphaBitMask); DWORD mask; - - if ((ddpf->dwRGBBitCount <= 32) && + + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += ((xlimit << 2) - 1); for (int i=yoffset; i < ylimit; i++) { @@ -3843,7 +3843,7 @@ void copyDataToSurfaceABGRRev(jint internalFormat, } else { a = l << -aDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst-- = (byte) ((mask >> 24) & 0xff); *dst-- = (byte) ((mask >> 16) & 0xff); @@ -3851,7 +3851,7 @@ void copyDataToSurfaceABGRRev(jint internalFormat, *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -3882,14 +3882,14 @@ void copyDataToSurfaceABGRRev(jint internalFormat, } else { a = l << -aDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst-- = (byte) ((mask >> 16) & 0xff); *dst-- = (byte) ((mask >> 8) & 0xff); *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -3920,13 +3920,13 @@ void copyDataToSurfaceABGRRev(jint internalFormat, } else { a = l << -aDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst-- = (byte) ((mask >> 8) & 0xff); *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += (xlimit - 1); @@ -3956,16 +3956,16 @@ void copyDataToSurfaceABGRRev(jint internalFormat, } else { a = l << -aDiscard; } - *dst-- = (byte) ((r << rshift) | - (g << gshift) | + *dst-- = (byte) ((r << rshift) | + (g << gshift) | (b << bshift) | (a << ashift)); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } } else { @@ -3975,14 +3975,14 @@ void copyDataToSurfaceABGRRev(jint internalFormat, } -void copyDataToSurfaceBGRRev(jint internalFormat, +void copyDataToSurfaceBGRRev(jint internalFormat, PIXELFORMAT *ddpf, unsigned char* pRect, DWORD rectPitch, jbyte *data, jint xoffset, jint yoffset, - DWORD xlimit, DWORD ylimit, - jint subWidth) + DWORD xlimit, DWORD ylimit, + jint subWidth) { unsigned char *src; unsigned char *dst; @@ -4013,7 +4013,7 @@ void copyDataToSurfaceBGRRev(jint internalFormat, *dst-- = b; } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount == 16) && @@ -4032,18 +4032,18 @@ void copyDataToSurfaceBGRRev(jint internalFormat, *dst-- = (g << 4) | b; } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { // handle less common (even weird) format - int rDiscard = 8-countBits(ddpf->dwRBitMask); - int gDiscard = 8-countBits(ddpf->dwGBitMask); - int bDiscard = 8-countBits(ddpf->dwBBitMask); + int rDiscard = 8-ucountBits(ddpf->dwRBitMask); + int gDiscard = 8-ucountBits(ddpf->dwGBitMask); + int bDiscard = 8-ucountBits(ddpf->dwBBitMask); int rshift = firstBit(ddpf->dwRBitMask); - int gshift = firstBit(ddpf->dwGBitMask); - int bshift = firstBit(ddpf->dwBBitMask); + int gshift = firstBit(ddpf->dwGBitMask); + int bshift = firstBit(ddpf->dwBBitMask); DWORD mask; - if ((ddpf->dwRGBBitCount <= 32) && + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += ((xlimit << 2) - 1); for (int i=yoffset; i < ylimit; i++) { @@ -4065,15 +4065,15 @@ void copyDataToSurfaceBGRRev(jint internalFormat, } else { r = (*src++) << -rDiscard; } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask; + mask = (r << rshift) | (g << gshift) | + (b << bshift) | ddpf->dwRGBAlphaBitMask; *dst-- = (byte) ((mask >> 24) & 0xff); *dst-- = (byte) ((mask >> 16) & 0xff); *dst-- = (byte) ((mask >> 8) & 0xff); *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -4097,14 +4097,14 @@ void copyDataToSurfaceBGRRev(jint internalFormat, } else { r = (*src++) << -rDiscard; } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask; + mask = (r << rshift) | (g << gshift) | + (b << bshift) | ddpf->dwRGBAlphaBitMask; *dst-- = (byte) ((mask >> 16) & 0xff); *dst-- = (byte) ((mask >> 8) & 0xff); *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -4128,13 +4128,13 @@ void copyDataToSurfaceBGRRev(jint internalFormat, } else { r = (*src++) << -rDiscard; } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask; + mask = (r << rshift) | (g << gshift) | + (b << bshift) | ddpf->dwRGBAlphaBitMask; *dst-- = (byte) ((mask >> 8) & 0xff); *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += (xlimit - 1); @@ -4157,29 +4157,29 @@ void copyDataToSurfaceBGRRev(jint internalFormat, } else { r = (*src++) << -rDiscard; } - *dst-- = (byte) ((r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask); + *dst-- = (byte) ((r << rshift) | (g << gshift) | + (b << bshift) | ddpf->dwRGBAlphaBitMask); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } - } else { - // should not happen, RGBBitCount > 32. Even DirectX + } else { + // should not happen, RGBBitCount > 32. Even DirectX // RGB mask can't address it. - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } } } else if (internalFormat == LUMINANCE_ALPHA) { - int rDiscard = 8-countBits(ddpf->dwRBitMask); - int gDiscard = 8-countBits(ddpf->dwGBitMask); - int bDiscard = 8-countBits(ddpf->dwBBitMask); + int rDiscard = 8-ucountBits(ddpf->dwRBitMask); + int gDiscard = 8-ucountBits(ddpf->dwGBitMask); + int bDiscard = 8-ucountBits(ddpf->dwBBitMask); int rshift = firstBit(ddpf->dwRBitMask); int gshift = firstBit(ddpf->dwGBitMask); int bshift = firstBit(ddpf->dwBBitMask); DWORD mask; - if ((ddpf->dwRGBBitCount <= 32) && + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += ((xlimit << 2) - 1); for (int i=yoffset; i < ylimit; i++) { @@ -4204,15 +4204,15 @@ void copyDataToSurfaceBGRRev(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask; + mask = (r << rshift) | (g << gshift) | + (b << bshift) | ddpf->dwRGBAlphaBitMask; *dst-- = (byte) ((mask >> 24) & 0xff); *dst-- = (byte) ((mask >> 16) & 0xff); *dst-- = (byte) ((mask >> 8) & 0xff); *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -4239,14 +4239,14 @@ void copyDataToSurfaceBGRRev(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask; + mask = (r << rshift) | (g << gshift) | + (b << bshift) | ddpf->dwRGBAlphaBitMask; *dst-- = (byte) ((mask >> 16) & 0xff); *dst-- = (byte) ((mask >> 8) & 0xff); *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -4273,13 +4273,13 @@ void copyDataToSurfaceBGRRev(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask; + mask = (r << rshift) | (g << gshift) | + (b << bshift) | ddpf->dwRGBAlphaBitMask; *dst-- = (byte) ((mask >> 8) & 0xff); *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += (xlimit - 1); @@ -4305,23 +4305,23 @@ void copyDataToSurfaceBGRRev(jint internalFormat, } else { b = l << -bDiscard; } - *dst-- = (byte) ((r << rshift) | (g << gshift) | - (b << bshift) |ddpf->dwRGBAlphaBitMask); + *dst-- = (byte) ((r << rshift) | (g << gshift) | + (b << bshift) |ddpf->dwRGBAlphaBitMask); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } - } else if (internalFormat == ALPHA) { + } else if (internalFormat == ALPHA) { byte m1 = (byte) (ddpf->dwRGBAlphaBitMask & 0xff); byte m2 = (byte) ((ddpf->dwRGBAlphaBitMask >> 8) & 0xff); byte m3 = (byte) ((ddpf->dwRGBAlphaBitMask >> 16) & 0xff); byte m4 = (byte) ((ddpf->dwRGBAlphaBitMask >> 24) & 0xff); - if ((ddpf->dwRGBBitCount <= 32) && + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += ((xlimit << 2) - 1); for (int i=yoffset; i < ylimit; i++) { @@ -4335,7 +4335,7 @@ void copyDataToSurfaceBGRRev(jint internalFormat, *dst-- = m1; } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -4350,7 +4350,7 @@ void copyDataToSurfaceBGRRev(jint internalFormat, *dst-- = m1; } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -4364,7 +4364,7 @@ void copyDataToSurfaceBGRRev(jint internalFormat, *dst-- = m1; } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += (xlimit - 1); @@ -4376,23 +4376,23 @@ void copyDataToSurfaceBGRRev(jint internalFormat, *dst-- = m1; } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } } else if ((internalFormat == LUMINANCE) || (internalFormat == INTENSITY)) { - int rDiscard = 8-countBits(ddpf->dwRBitMask); - int gDiscard = 8-countBits(ddpf->dwGBitMask); - int bDiscard = 8-countBits(ddpf->dwBBitMask); + int rDiscard = 8-ucountBits(ddpf->dwRBitMask); + int gDiscard = 8-ucountBits(ddpf->dwGBitMask); + int bDiscard = 8-ucountBits(ddpf->dwBBitMask); int rshift = firstBit(ddpf->dwRBitMask); int gshift = firstBit(ddpf->dwGBitMask); int bshift = firstBit(ddpf->dwBBitMask); DWORD mask; - - if ((ddpf->dwRGBBitCount <= 32) && + + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += ((xlimit << 2) - 1); for (int i=yoffset; i < ylimit; i++) { @@ -4416,7 +4416,7 @@ void copyDataToSurfaceBGRRev(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | ddpf->dwRGBAlphaBitMask; *dst-- = (byte) ((mask >> 24) & 0xff); *dst-- = (byte) ((mask >> 16) & 0xff); @@ -4425,7 +4425,7 @@ void copyDataToSurfaceBGRRev(jint internalFormat, } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -4451,14 +4451,14 @@ void copyDataToSurfaceBGRRev(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask; + mask = (r << rshift) | (g << gshift) | + (b << bshift) | ddpf->dwRGBAlphaBitMask; *dst-- = (byte) ((mask >> 16) & 0xff); *dst-- = (byte) ((mask >> 8) & 0xff); *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -4484,13 +4484,13 @@ void copyDataToSurfaceBGRRev(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask; + mask = (r << rshift) | (g << gshift) | + (b << bshift) | ddpf->dwRGBAlphaBitMask; *dst-- = (byte) ((mask >> 8) & 0xff); *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += (xlimit - 1); @@ -4515,16 +4515,16 @@ void copyDataToSurfaceBGRRev(jint internalFormat, } else { b = l << -bDiscard; } - *dst-- = (byte) ((r << rshift) | - (g << gshift) | + *dst-- = (byte) ((r << rshift) | + (g << gshift) | (b << bshift) | - ddpf->dwRGBAlphaBitMask); + ddpf->dwRGBAlphaBitMask); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } } else { @@ -4533,14 +4533,14 @@ void copyDataToSurfaceBGRRev(jint internalFormat, } -void copyDataToSurfaceRGBRev(jint internalFormat, +void copyDataToSurfaceRGBRev(jint internalFormat, PIXELFORMAT *ddpf, unsigned char* pRect, DWORD rectPitch, jbyte *data, jint xoffset, jint yoffset, - DWORD xlimit, DWORD ylimit, - jint subWidth) + DWORD xlimit, DWORD ylimit, + jint subWidth) { unsigned char *src; unsigned char *dst; @@ -4573,7 +4573,7 @@ void copyDataToSurfaceRGBRev(jint internalFormat, *dst-- = b; } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount == 16) && (ddpf->dwRBitMask == 0xf00) && @@ -4591,18 +4591,18 @@ void copyDataToSurfaceRGBRev(jint internalFormat, *dst-- = (g << 4) | b; } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { // handle less common (even weird) format - int rDiscard = 8-countBits(ddpf->dwRBitMask); - int gDiscard = 8-countBits(ddpf->dwGBitMask); - int bDiscard = 8-countBits(ddpf->dwBBitMask); + int rDiscard = 8-ucountBits(ddpf->dwRBitMask); + int gDiscard = 8-ucountBits(ddpf->dwGBitMask); + int bDiscard = 8-ucountBits(ddpf->dwBBitMask); int rshift = firstBit(ddpf->dwRBitMask); - int gshift = firstBit(ddpf->dwGBitMask); - int bshift = firstBit(ddpf->dwBBitMask); + int gshift = firstBit(ddpf->dwGBitMask); + int bshift = firstBit(ddpf->dwBBitMask); DWORD mask; - if ((ddpf->dwRGBBitCount <= 32) && + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += ((xlimit << 2) - 1); for (int i=yoffset; i < ylimit; i++) { @@ -4624,15 +4624,15 @@ void copyDataToSurfaceRGBRev(jint internalFormat, } else { b = (*src++) >> -bDiscard; } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask; + mask = (r << rshift) | (g << gshift) | + (b << bshift) | ddpf->dwRGBAlphaBitMask; *dst-- = (byte) ((mask >> 24) & 0xff); *dst-- = (byte) ((mask >> 16) & 0xff); *dst-- = (byte) ((mask >> 8) & 0xff); *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -4656,14 +4656,14 @@ void copyDataToSurfaceRGBRev(jint internalFormat, } else { b = (*src++) >> -bDiscard; } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask; + mask = (r << rshift) | (g << gshift) | + (b << bshift) | ddpf->dwRGBAlphaBitMask; *dst-- = (byte) ((mask >> 16) & 0xff); *dst-- = (byte) ((mask >> 8) & 0xff); *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -4687,13 +4687,13 @@ void copyDataToSurfaceRGBRev(jint internalFormat, } else { b = (*src++) >> -bDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | ddpf->dwRGBAlphaBitMask; *dst-- = (byte) ((mask >> 8) & 0xff); *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += (xlimit - 1); @@ -4716,29 +4716,29 @@ void copyDataToSurfaceRGBRev(jint internalFormat, } else { b = (*src++) >> -bDiscard; } - *dst-- = (byte) ((r << rshift) | (g << gshift) | + *dst-- = (byte) ((r << rshift) | (g << gshift) | (b << bshift) | ddpf->dwRGBAlphaBitMask); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } - } else { - // should not happen, RGBBitCount > 32. Even DirectX + } else { + // should not happen, RGBBitCount > 32. Even DirectX // RGB mask can't address it. - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } } } else if (internalFormat == LUMINANCE_ALPHA) { - int rDiscard = 8-countBits(ddpf->dwRBitMask); - int gDiscard = 8-countBits(ddpf->dwGBitMask); - int bDiscard = 8-countBits(ddpf->dwBBitMask); + int rDiscard = 8-ucountBits(ddpf->dwRBitMask); + int gDiscard = 8-ucountBits(ddpf->dwGBitMask); + int bDiscard = 8-ucountBits(ddpf->dwBBitMask); int rshift = firstBit(ddpf->dwRBitMask); int gshift = firstBit(ddpf->dwGBitMask); int bshift = firstBit(ddpf->dwBBitMask); DWORD mask; - if ((ddpf->dwRGBBitCount <= 32) && + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += ((xlimit << 2) - 1); for (int i=yoffset; i < ylimit; i++) { @@ -4763,7 +4763,7 @@ void copyDataToSurfaceRGBRev(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | ddpf->dwRGBAlphaBitMask; *dst-- = (byte) ((mask >> 24) & 0xff); *dst-- = (byte) ((mask >> 16) & 0xff); @@ -4771,7 +4771,7 @@ void copyDataToSurfaceRGBRev(jint internalFormat, *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -4798,14 +4798,14 @@ void copyDataToSurfaceRGBRev(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | ddpf->dwRGBAlphaBitMask; *dst-- = (byte) ((mask >> 16) & 0xff); *dst-- = (byte) ((mask >> 8) & 0xff); *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -4832,13 +4832,13 @@ void copyDataToSurfaceRGBRev(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | ddpf->dwRGBAlphaBitMask; *dst-- = (byte) ((mask >> 8) & 0xff); *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += (xlimit - 1); @@ -4864,23 +4864,23 @@ void copyDataToSurfaceRGBRev(jint internalFormat, } else { b = l << -bDiscard; } - *dst-- = (byte) ((r << rshift) | (g << gshift) | + *dst-- = (byte) ((r << rshift) | (g << gshift) | (b << bshift) | ddpf->dwRGBAlphaBitMask); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } - } else if (internalFormat == ALPHA) { + } else if (internalFormat == ALPHA) { byte m1 = (byte) (ddpf->dwRGBAlphaBitMask & 0xff); byte m2 = (byte) ((ddpf->dwRGBAlphaBitMask >> 8) & 0xff); byte m3 = (byte) ((ddpf->dwRGBAlphaBitMask >> 16) & 0xff); byte m4 = (byte) ((ddpf->dwRGBAlphaBitMask >> 24) & 0xff); - if ((ddpf->dwRGBBitCount <= 32) && + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += ((xlimit << 2) - 1); for (int i=yoffset; i < ylimit; i++) { @@ -4894,7 +4894,7 @@ void copyDataToSurfaceRGBRev(jint internalFormat, *dst-- = m1; } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -4909,7 +4909,7 @@ void copyDataToSurfaceRGBRev(jint internalFormat, *dst-- = m1; } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -4923,7 +4923,7 @@ void copyDataToSurfaceRGBRev(jint internalFormat, *dst-- = m1; } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += (xlimit - 1); @@ -4935,23 +4935,23 @@ void copyDataToSurfaceRGBRev(jint internalFormat, *dst-- = m1; } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } } else if ((internalFormat == LUMINANCE) || (internalFormat == INTENSITY)) { - int rDiscard = 8-countBits(ddpf->dwRBitMask); - int gDiscard = 8-countBits(ddpf->dwGBitMask); - int bDiscard = 8-countBits(ddpf->dwBBitMask); + int rDiscard = 8-ucountBits(ddpf->dwRBitMask); + int gDiscard = 8-ucountBits(ddpf->dwGBitMask); + int bDiscard = 8-ucountBits(ddpf->dwBBitMask); int rshift = firstBit(ddpf->dwRBitMask); int gshift = firstBit(ddpf->dwGBitMask); int bshift = firstBit(ddpf->dwBBitMask); DWORD mask; - - if ((ddpf->dwRGBBitCount <= 32) && + + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += ((xlimit << 2) - 1); for (int i=yoffset; i < ylimit; i++) { @@ -4976,7 +4976,7 @@ void copyDataToSurfaceRGBRev(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | ddpf->dwRGBAlphaBitMask; *dst-- = (byte) ((mask >> 24) & 0xff); *dst-- = (byte) ((mask >> 16) & 0xff); @@ -4984,7 +4984,7 @@ void copyDataToSurfaceRGBRev(jint internalFormat, *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -5011,14 +5011,14 @@ void copyDataToSurfaceRGBRev(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | ddpf->dwRGBAlphaBitMask; *dst-- = (byte) ((mask >> 16) & 0xff); *dst-- = (byte) ((mask >> 8) & 0xff); *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -5045,13 +5045,13 @@ void copyDataToSurfaceRGBRev(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | ddpf->dwRGBAlphaBitMask; *dst-- = (byte) ((mask >> 8) & 0xff); *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += (xlimit - 1); @@ -5077,16 +5077,16 @@ void copyDataToSurfaceRGBRev(jint internalFormat, } else { b = l << -bDiscard; } - *dst-- = (byte) ((r << rshift) | - (g << gshift) | + *dst-- = (byte) ((r << rshift) | + (g << gshift) | (b << bshift) | ddpf->dwRGBAlphaBitMask); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } } else { @@ -5094,14 +5094,14 @@ void copyDataToSurfaceRGBRev(jint internalFormat, } } -void copyDataToSurfaceLARev(jint internalFormat, +void copyDataToSurfaceLARev(jint internalFormat, PIXELFORMAT *ddpf, unsigned char* pRect, DWORD rectPitch, jbyte *data, jint xoffset, jint yoffset, - DWORD xlimit, DWORD ylimit, - jint subWidth) + DWORD xlimit, DWORD ylimit, + jint subWidth) { unsigned char *src; unsigned char *dst; @@ -5132,7 +5132,7 @@ void copyDataToSurfaceLARev(jint internalFormat, *dst-- = l; } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount == 16) && (ddpf->dwRBitMask == 0xf00) && @@ -5149,20 +5149,20 @@ void copyDataToSurfaceLARev(jint internalFormat, *dst-- = (l << 4) | l; } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { // handle less common (even weird) format - int rDiscard = 8-countBits(ddpf->dwRBitMask); - int gDiscard = 8-countBits(ddpf->dwGBitMask); - int bDiscard = 8-countBits(ddpf->dwBBitMask); - int aDiscard = 8-countBits(ddpf->dwRGBAlphaBitMask); + int rDiscard = 8-ucountBits(ddpf->dwRBitMask); + int gDiscard = 8-ucountBits(ddpf->dwGBitMask); + int bDiscard = 8-ucountBits(ddpf->dwBBitMask); + int aDiscard = 8-ucountBits(ddpf->dwRGBAlphaBitMask); int rshift = firstBit(ddpf->dwRBitMask); int gshift = firstBit(ddpf->dwGBitMask); int bshift = firstBit(ddpf->dwBBitMask); - int ashift = firstBit(ddpf->dwRGBAlphaBitMask); + int ashift = firstBit(ddpf->dwRGBAlphaBitMask); DWORD mask; - if ((ddpf->dwRGBBitCount <= 32) && + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += ((xlimit << 2) - 1); for (int i=yoffset; i < ylimit; i++) { @@ -5179,7 +5179,7 @@ void copyDataToSurfaceLARev(jint internalFormat, } else { a = (*src++) >> -aDiscard; } - mask = (l << rshift) | (l << gshift) | + mask = (l << rshift) | (l << gshift) | (l << bshift) | (a << ashift); *dst-- = (byte) ((mask >> 24) & 0xff); *dst-- = (byte) ((mask >> 16) & 0xff); @@ -5187,7 +5187,7 @@ void copyDataToSurfaceLARev(jint internalFormat, *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -5206,14 +5206,14 @@ void copyDataToSurfaceLARev(jint internalFormat, } else { a = (*src++) >> -aDiscard; } - mask = (l << rshift) | (l << gshift) | + mask = (l << rshift) | (l << gshift) | (l << bshift) | (a << ashift); *dst-- = (byte) ((mask >> 16) & 0xff); *dst-- = (byte) ((mask >> 8) & 0xff); *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -5232,13 +5232,13 @@ void copyDataToSurfaceLARev(jint internalFormat, } else { a = (*src++) >> -aDiscard; } - mask = (l << rshift) | (l << gshift) | + mask = (l << rshift) | (l << gshift) | (l << bshift) | (a << ashift); *dst-- = (byte) ((mask >> 8) & 0xff); *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += (xlimit - 1); @@ -5256,32 +5256,32 @@ void copyDataToSurfaceLARev(jint internalFormat, } else { a = (*src++) >> -aDiscard; } - *dst-- = (byte) ((l << rshift) | (l << gshift) | + *dst-- = (byte) ((l << rshift) | (l << gshift) | (l << bshift) | (a << ashift)); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } - } else { - // should not happen, RGBBitCount > 32. Even DirectX + } else { + // should not happen, RGBBitCount > 32. Even DirectX // RGB mask can't address it. - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } } } else if (internalFormat == LUMINANCE_ALPHA) { - int rDiscard = 8-countBits(ddpf->dwRBitMask); - int gDiscard = 8-countBits(ddpf->dwGBitMask); - int bDiscard = 8-countBits(ddpf->dwBBitMask); - int aDiscard = 8-countBits(ddpf->dwRGBAlphaBitMask); + int rDiscard = 8-ucountBits(ddpf->dwRBitMask); + int gDiscard = 8-ucountBits(ddpf->dwGBitMask); + int bDiscard = 8-ucountBits(ddpf->dwBBitMask); + int aDiscard = 8-ucountBits(ddpf->dwRGBAlphaBitMask); int rshift = firstBit(ddpf->dwRBitMask); int gshift = firstBit(ddpf->dwGBitMask); int bshift = firstBit(ddpf->dwBBitMask); - int ashift = firstBit(ddpf->dwRGBAlphaBitMask); + int ashift = firstBit(ddpf->dwRGBAlphaBitMask); DWORD mask; - if ((ddpf->dwRGBBitCount <= 32) && + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += ((xlimit << 2) - 1); for (int i=yoffset; i < ylimit; i++) { @@ -5292,7 +5292,7 @@ void copyDataToSurfaceLARev(jint internalFormat, if (aDiscard >= 0) { a = (*src++) >> aDiscard; } else { - a = (*src++) << -aDiscard; + a = (*src++) << -aDiscard; } if (rDiscard >= 0) { r = l >> rDiscard; @@ -5309,7 +5309,7 @@ void copyDataToSurfaceLARev(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst-- = (byte) ((mask >> 24) & 0xff); @@ -5318,7 +5318,7 @@ void copyDataToSurfaceLARev(jint internalFormat, *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -5331,7 +5331,7 @@ void copyDataToSurfaceLARev(jint internalFormat, if (aDiscard >= 0) { a = (*src++) >> aDiscard; } else { - a = (*src++) << -aDiscard; + a = (*src++) << -aDiscard; } if (rDiscard >= 0) { r = l >> rDiscard; @@ -5348,14 +5348,14 @@ void copyDataToSurfaceLARev(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst-- = (byte) ((mask >> 16) & 0xff); *dst-- = (byte) ((mask >> 8) & 0xff); *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -5368,7 +5368,7 @@ void copyDataToSurfaceLARev(jint internalFormat, if (aDiscard >= 0) { a = (*src++) >> aDiscard; } else { - a = (*src++) << -aDiscard; + a = (*src++) << -aDiscard; } if (rDiscard >= 0) { r = l >> rDiscard; @@ -5385,13 +5385,13 @@ void copyDataToSurfaceLARev(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst-- = (byte) ((mask >> 8) & 0xff); *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += (xlimit - 1); @@ -5403,7 +5403,7 @@ void copyDataToSurfaceLARev(jint internalFormat, if (aDiscard >= 0) { a = (*src++) >> aDiscard; } else { - a = (*src++) << -aDiscard; + a = (*src++) << -aDiscard; } if (rDiscard >= 0) { r = l >> rDiscard; @@ -5420,22 +5420,22 @@ void copyDataToSurfaceLARev(jint internalFormat, } else { b = l << -bDiscard; } - *dst-- = (byte) ((r << rshift) | (g << gshift) | + *dst-- = (byte) ((r << rshift) | (g << gshift) | (b << bshift) | (a << ashift)); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } - } else if (internalFormat == ALPHA) { - int aDiscard = 8-countBits(ddpf->dwRGBAlphaBitMask); - int ashift = firstBit(ddpf->dwRGBAlphaBitMask); + } else if (internalFormat == ALPHA) { + int aDiscard = 8-ucountBits(ddpf->dwRGBAlphaBitMask); + int ashift = firstBit(ddpf->dwRGBAlphaBitMask); DWORD mask; - if ((ddpf->dwRGBBitCount <= 32) && + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += ((xlimit << 2) - 1); for (int i=yoffset; i < ylimit; i++) { @@ -5455,7 +5455,7 @@ void copyDataToSurfaceLARev(jint internalFormat, *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -5476,7 +5476,7 @@ void copyDataToSurfaceLARev(jint internalFormat, *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -5496,7 +5496,7 @@ void copyDataToSurfaceLARev(jint internalFormat, *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += (xlimit - 1); @@ -5513,25 +5513,25 @@ void copyDataToSurfaceLARev(jint internalFormat, *dst-- = (byte) (a << ashift); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } } else if ((internalFormat == LUMINANCE) || (internalFormat == INTENSITY)) { - int rDiscard = 8-countBits(ddpf->dwRBitMask); - int gDiscard = 8-countBits(ddpf->dwGBitMask); - int bDiscard = 8-countBits(ddpf->dwBBitMask); - int aDiscard = 8-countBits(ddpf->dwRGBAlphaBitMask); + int rDiscard = 8-ucountBits(ddpf->dwRBitMask); + int gDiscard = 8-ucountBits(ddpf->dwGBitMask); + int bDiscard = 8-ucountBits(ddpf->dwBBitMask); + int aDiscard = 8-ucountBits(ddpf->dwRGBAlphaBitMask); int rshift = firstBit(ddpf->dwRBitMask); int gshift = firstBit(ddpf->dwGBitMask); int bshift = firstBit(ddpf->dwBBitMask); - int ashift = firstBit(ddpf->dwRGBAlphaBitMask); + int ashift = firstBit(ddpf->dwRGBAlphaBitMask); DWORD mask; - - if ((ddpf->dwRGBBitCount <= 32) && + + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += ((xlimit << 2) - 1); for (int i=yoffset; i < ylimit; i++) { @@ -5560,7 +5560,7 @@ void copyDataToSurfaceLARev(jint internalFormat, } else { a = l << -aDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst-- = (byte) ((mask >> 24) & 0xff); *dst-- = (byte) ((mask >> 16) & 0xff); @@ -5568,7 +5568,7 @@ void copyDataToSurfaceLARev(jint internalFormat, *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -5599,14 +5599,14 @@ void copyDataToSurfaceLARev(jint internalFormat, } else { a = l << -aDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst-- = (byte) ((mask >> 16) & 0xff); *dst-- = (byte) ((mask >> 8) & 0xff); *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -5637,13 +5637,13 @@ void copyDataToSurfaceLARev(jint internalFormat, } else { a = l << -aDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst-- = (byte) ((mask >> 8) & 0xff); *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += (xlimit - 1); @@ -5673,16 +5673,16 @@ void copyDataToSurfaceLARev(jint internalFormat, } else { a = l << -aDiscard; } - *dst-- = (byte) ((r << rshift) | - (g << gshift) | + *dst-- = (byte) ((r << rshift) | + (g << gshift) | (b << bshift) | (a << ashift)); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } } else { @@ -5690,14 +5690,14 @@ void copyDataToSurfaceLARev(jint internalFormat, } } -void copyDataToSurfaceGrayRev(jint internalFormat, +void copyDataToSurfaceGrayRev(jint internalFormat, PIXELFORMAT *ddpf, unsigned char* pRect, DWORD rectPitch, jbyte *data, jint xoffset, jint yoffset, - DWORD xlimit, DWORD ylimit, - jint subWidth) + DWORD xlimit, DWORD ylimit, + jint subWidth) { unsigned char *src; unsigned char *dst; @@ -5728,7 +5728,7 @@ void copyDataToSurfaceGrayRev(jint internalFormat, *dst-- = l; } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount == 16) && (ddpf->dwRBitMask == 0xf00) && @@ -5744,18 +5744,18 @@ void copyDataToSurfaceGrayRev(jint internalFormat, *dst-- = (l << 4) | l; } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { // handle less common (even weird) format - int rDiscard = 8-countBits(ddpf->dwRBitMask); - int gDiscard = 8-countBits(ddpf->dwGBitMask); - int bDiscard = 8-countBits(ddpf->dwBBitMask); + int rDiscard = 8-ucountBits(ddpf->dwRBitMask); + int gDiscard = 8-ucountBits(ddpf->dwGBitMask); + int bDiscard = 8-ucountBits(ddpf->dwBBitMask); int rshift = firstBit(ddpf->dwRBitMask); int gshift = firstBit(ddpf->dwGBitMask); int bshift = firstBit(ddpf->dwBBitMask); DWORD mask; - if ((ddpf->dwRGBBitCount <= 32) && + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += ((xlimit << 2) - 1); for (int i=yoffset; i < ylimit; i++) { @@ -5767,7 +5767,7 @@ void copyDataToSurfaceGrayRev(jint internalFormat, } else { l = (*src++) << -rDiscard; } - mask = (l << rshift) | (l << gshift) | + mask = (l << rshift) | (l << gshift) | (l << bshift) | ddpf->dwRGBAlphaBitMask; *dst-- = (byte) ((mask >> 24) & 0xff); *dst-- = (byte) ((mask >> 16) & 0xff); @@ -5775,7 +5775,7 @@ void copyDataToSurfaceGrayRev(jint internalFormat, *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -5789,14 +5789,14 @@ void copyDataToSurfaceGrayRev(jint internalFormat, } else { l = (*src++) << -rDiscard; } - mask = (l << rshift) | (l << gshift) | + mask = (l << rshift) | (l << gshift) | (l << bshift) | ddpf->dwRGBAlphaBitMask; *dst-- = (byte) ((mask >> 16) & 0xff); *dst-- = (byte) ((mask >> 8) & 0xff); *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -5810,13 +5810,13 @@ void copyDataToSurfaceGrayRev(jint internalFormat, } else { l = (*src++) << -rDiscard; } - mask = (l << rshift) | (l << gshift) | + mask = (l << rshift) | (l << gshift) | (l << bshift) | ddpf->dwRGBAlphaBitMask; *dst-- = (byte) ((mask >> 8) & 0xff); *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += (xlimit - 1); @@ -5829,32 +5829,32 @@ void copyDataToSurfaceGrayRev(jint internalFormat, } else { l = (*src++) << -rDiscard; } - *dst-- = (byte) ((l << rshift) | (l << gshift) | - (l << bshift) | ddpf->dwRGBAlphaBitMask); + *dst-- = (byte) ((l << rshift) | (l << gshift) | + (l << bshift) | ddpf->dwRGBAlphaBitMask); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } - } else { - // should not happen, RGBBitCount > 32. Even DirectX + } else { + // should not happen, RGBBitCount > 32. Even DirectX // RGB mask can't address it. - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } } } else if (internalFormat == LUMINANCE_ALPHA) { - int rDiscard = 8-countBits(ddpf->dwRBitMask); - int gDiscard = 8-countBits(ddpf->dwGBitMask); - int bDiscard = 8-countBits(ddpf->dwBBitMask); - int aDiscard = 8-countBits(ddpf->dwRGBAlphaBitMask); + int rDiscard = 8-ucountBits(ddpf->dwRBitMask); + int gDiscard = 8-ucountBits(ddpf->dwGBitMask); + int bDiscard = 8-ucountBits(ddpf->dwBBitMask); + int aDiscard = 8-ucountBits(ddpf->dwRGBAlphaBitMask); int rshift = firstBit(ddpf->dwRBitMask); int gshift = firstBit(ddpf->dwGBitMask); int bshift = firstBit(ddpf->dwBBitMask); - int ashift = firstBit(ddpf->dwRGBAlphaBitMask); + int ashift = firstBit(ddpf->dwRGBAlphaBitMask); DWORD mask; - if ((ddpf->dwRGBBitCount <= 32) && + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += ((xlimit << 2) - 1); for (int i=yoffset; i < ylimit; i++) { @@ -5865,7 +5865,7 @@ void copyDataToSurfaceGrayRev(jint internalFormat, if (aDiscard >= 0) { a = l >> aDiscard; } else { - a = l << -aDiscard; + a = l << -aDiscard; } if (rDiscard >= 0) { r = l >> rDiscard; @@ -5882,7 +5882,7 @@ void copyDataToSurfaceGrayRev(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst-- = (byte) ((mask >> 24) & 0xff); *dst-- = (byte) ((mask >> 16) & 0xff); @@ -5890,7 +5890,7 @@ void copyDataToSurfaceGrayRev(jint internalFormat, *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -5903,7 +5903,7 @@ void copyDataToSurfaceGrayRev(jint internalFormat, if (aDiscard >= 0) { a = l >> aDiscard; } else { - a = l << -aDiscard; + a = l << -aDiscard; } if (rDiscard >= 0) { r = l >> rDiscard; @@ -5920,14 +5920,14 @@ void copyDataToSurfaceGrayRev(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst-- = (byte) ((mask >> 16) & 0xff); *dst-- = (byte) ((mask >> 8) & 0xff); *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -5940,7 +5940,7 @@ void copyDataToSurfaceGrayRev(jint internalFormat, if (aDiscard >= 0) { a = l >> aDiscard; } else { - a = l << -aDiscard; + a = l << -aDiscard; } if (rDiscard >= 0) { r = l >> rDiscard; @@ -5957,13 +5957,13 @@ void copyDataToSurfaceGrayRev(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst-- = (byte) ((mask >> 8) & 0xff); *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += (xlimit - 1); @@ -5975,7 +5975,7 @@ void copyDataToSurfaceGrayRev(jint internalFormat, if (aDiscard >= 0) { a = l >> aDiscard; } else { - a = l << -aDiscard; + a = l << -aDiscard; } if (rDiscard >= 0) { r = l >> rDiscard; @@ -5992,22 +5992,22 @@ void copyDataToSurfaceGrayRev(jint internalFormat, } else { b = l << -bDiscard; } - *dst-- = (byte) ((r << rshift) | (g << gshift) | + *dst-- = (byte) ((r << rshift) | (g << gshift) | (b << bshift) | (a << ashift)); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } - } else if (internalFormat == ALPHA) { - int aDiscard = 8-countBits(ddpf->dwRGBAlphaBitMask); - int ashift = firstBit(ddpf->dwRGBAlphaBitMask); + } else if (internalFormat == ALPHA) { + int aDiscard = 8-ucountBits(ddpf->dwRGBAlphaBitMask); + int ashift = firstBit(ddpf->dwRGBAlphaBitMask); DWORD mask; - if ((ddpf->dwRGBBitCount <= 32) && + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += ((xlimit << 2) - 1); for (int i=yoffset; i < ylimit; i++) { @@ -6026,7 +6026,7 @@ void copyDataToSurfaceGrayRev(jint internalFormat, *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -6046,7 +6046,7 @@ void copyDataToSurfaceGrayRev(jint internalFormat, *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -6065,7 +6065,7 @@ void copyDataToSurfaceGrayRev(jint internalFormat, *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += (xlimit - 1); @@ -6081,25 +6081,25 @@ void copyDataToSurfaceGrayRev(jint internalFormat, *dst-- = (byte) (a << ashift); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } } else if ((internalFormat == LUMINANCE) || (internalFormat == INTENSITY)) { - int rDiscard = 8-countBits(ddpf->dwRBitMask); - int gDiscard = 8-countBits(ddpf->dwGBitMask); - int bDiscard = 8-countBits(ddpf->dwBBitMask); - int aDiscard = 8-countBits(ddpf->dwRGBAlphaBitMask); + int rDiscard = 8-ucountBits(ddpf->dwRBitMask); + int gDiscard = 8-ucountBits(ddpf->dwGBitMask); + int bDiscard = 8-ucountBits(ddpf->dwBBitMask); + int aDiscard = 8-ucountBits(ddpf->dwRGBAlphaBitMask); int rshift = firstBit(ddpf->dwRBitMask); int gshift = firstBit(ddpf->dwGBitMask); int bshift = firstBit(ddpf->dwBBitMask); - int ashift = firstBit(ddpf->dwRGBAlphaBitMask); + int ashift = firstBit(ddpf->dwRGBAlphaBitMask); DWORD mask; - - if ((ddpf->dwRGBBitCount <= 32) && + + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += ((xlimit << 2) - 1); for (int i=yoffset; i < ylimit; i++) { @@ -6127,7 +6127,7 @@ void copyDataToSurfaceGrayRev(jint internalFormat, } else { a = l << -aDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst-- = (byte) ((mask >> 24) & 0xff); *dst-- = (byte) ((mask >> 16) & 0xff); @@ -6135,7 +6135,7 @@ void copyDataToSurfaceGrayRev(jint internalFormat, *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -6165,14 +6165,14 @@ void copyDataToSurfaceGrayRev(jint internalFormat, } else { a = l << -aDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst-- = (byte) ((mask >> 16) & 0xff); *dst-- = (byte) ((mask >> 8) & 0xff); *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -6202,13 +6202,13 @@ void copyDataToSurfaceGrayRev(jint internalFormat, } else { a = l << -aDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst-- = (byte) ((mask >> 8) & 0xff); *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += (xlimit - 1); @@ -6237,16 +6237,16 @@ void copyDataToSurfaceGrayRev(jint internalFormat, } else { a = l << -aDiscard; } - *dst-- = (byte) ((r << rshift) | - (g << gshift) | + *dst-- = (byte) ((r << rshift) | + (g << gshift) | (b << bshift) | (a << ashift)); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } } else { @@ -6255,14 +6255,14 @@ void copyDataToSurfaceGrayRev(jint internalFormat, } -void copyDataToSurfaceGrayRev(jint internalFormat, +void copyDataToSurfaceGrayRev(jint internalFormat, PIXELFORMAT *ddpf, unsigned char* pRect, DWORD rectPitch, jshort *data, jint xoffset, jint yoffset, - DWORD xlimit, DWORD ylimit, - jint subWidth) + DWORD xlimit, DWORD ylimit, + jint subWidth) { unsigned char *src; unsigned char *dst; @@ -6272,12 +6272,12 @@ void copyDataToSurfaceGrayRev(jint internalFormat, unsigned char *destRow = pRect + rectPitch*yoffset; - if (internalFormat == ALPHA) { - int aDiscard = 8-countBits(ddpf->dwRGBAlphaBitMask); - int ashift = firstBit(ddpf->dwRGBAlphaBitMask); + if (internalFormat == ALPHA) { + int aDiscard = 8-ucountBits(ddpf->dwRGBAlphaBitMask); + int ashift = firstBit(ddpf->dwRGBAlphaBitMask); DWORD mask; - if ((ddpf->dwRGBBitCount <= 32) && + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += ((xlimit << 2) - 1); for (int i=yoffset; i < ylimit; i++) { @@ -6297,7 +6297,7 @@ void copyDataToSurfaceGrayRev(jint internalFormat, *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -6318,7 +6318,7 @@ void copyDataToSurfaceGrayRev(jint internalFormat, *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -6338,7 +6338,7 @@ void copyDataToSurfaceGrayRev(jint internalFormat, *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += (xlimit - 1); @@ -6355,25 +6355,25 @@ void copyDataToSurfaceGrayRev(jint internalFormat, *dst-- = (byte) (a << ashift); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } } else if ((internalFormat == LUMINANCE) || (internalFormat == INTENSITY)) { - int rDiscard = 8-countBits(ddpf->dwRBitMask); - int gDiscard = 8-countBits(ddpf->dwGBitMask); - int bDiscard = 8-countBits(ddpf->dwBBitMask); - int aDiscard = 8-countBits(ddpf->dwRGBAlphaBitMask); + int rDiscard = 8-ucountBits(ddpf->dwRBitMask); + int gDiscard = 8-ucountBits(ddpf->dwGBitMask); + int bDiscard = 8-ucountBits(ddpf->dwBBitMask); + int aDiscard = 8-ucountBits(ddpf->dwRGBAlphaBitMask); int rshift = firstBit(ddpf->dwRBitMask); int gshift = firstBit(ddpf->dwGBitMask); int bshift = firstBit(ddpf->dwBBitMask); - int ashift = firstBit(ddpf->dwRGBAlphaBitMask); + int ashift = firstBit(ddpf->dwRGBAlphaBitMask); DWORD mask; - if ((ddpf->dwRGBBitCount <= 32) && + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += ((xlimit << 2) - 1); for (int i=yoffset; i < ylimit; i++) { @@ -6402,7 +6402,7 @@ void copyDataToSurfaceGrayRev(jint internalFormat, } else { a = l << -aDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst-- = (byte) ((mask >> 24) & 0xff); *dst-- = (byte) ((mask >> 16) & 0xff); @@ -6410,7 +6410,7 @@ void copyDataToSurfaceGrayRev(jint internalFormat, *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -6441,14 +6441,14 @@ void copyDataToSurfaceGrayRev(jint internalFormat, } else { a = l << -aDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst-- = (byte) ((mask >> 16) & 0xff); *dst-- = (byte) ((mask >> 8) & 0xff); *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -6479,13 +6479,13 @@ void copyDataToSurfaceGrayRev(jint internalFormat, } else { a = l << -aDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst-- = (byte) ((mask >> 8) & 0xff); *dst-- = (byte) (mask & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += (xlimit - 1); @@ -6515,47 +6515,47 @@ void copyDataToSurfaceGrayRev(jint internalFormat, } else { a = l << -aDiscard; } - *dst-- = (byte) ((r << rshift) | - (g << gshift) | + *dst-- = (byte) ((r << rshift) | + (g << gshift) | (b << bshift) | (a << ashift)); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } } else { printf("Texture format %d not support.\n", internalFormat); - } + } } /* * Copy data to Texture memory surface *pRect - * with pitch = rectPitch + * with pitch = rectPitch * Note that rectPitch >= surface width since * D3D may allocate extra width in texture memory * for other purpose or for alignment. Addional - * offset = (xoffset, yoffset) is added to copy - * data in texture memory. + * offset = (xoffset, yoffset) is added to copy + * data in texture memory. * * The source image has width = subWidth and * pointer *data. - * + * * */ -void copyDataToSurfaceRGBA(jint internalFormat, +void copyDataToSurfaceRGBA(jint internalFormat, PIXELFORMAT *ddpf, unsigned char* pRect, DWORD rectPitch, jbyte *data, jint xoffset, jint yoffset, - DWORD xlimit, DWORD ylimit, - jint subWidth) + DWORD xlimit, DWORD ylimit, + jint subWidth) { unsigned char *src; unsigned char *dst; @@ -6588,7 +6588,7 @@ void copyDataToSurfaceRGBA(jint internalFormat, *dst++ = *src++; } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount == 16) && (ddpf->dwRBitMask == 0xf00) && @@ -6607,20 +6607,20 @@ void copyDataToSurfaceRGBA(jint internalFormat, *dst++ = (a << 4) | r; } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { // handle less common (even weird) format - int rDiscard = 8-countBits(ddpf->dwRBitMask); - int gDiscard = 8-countBits(ddpf->dwGBitMask); - int bDiscard = 8-countBits(ddpf->dwBBitMask); - int aDiscard = 8-countBits(ddpf->dwRGBAlphaBitMask); + int rDiscard = 8-ucountBits(ddpf->dwRBitMask); + int gDiscard = 8-ucountBits(ddpf->dwGBitMask); + int bDiscard = 8-ucountBits(ddpf->dwBBitMask); + int aDiscard = 8-ucountBits(ddpf->dwRGBAlphaBitMask); int rshift = firstBit(ddpf->dwRBitMask); - int gshift = firstBit(ddpf->dwGBitMask); - int bshift = firstBit(ddpf->dwBBitMask); - int ashift = firstBit(ddpf->dwRGBAlphaBitMask); + int gshift = firstBit(ddpf->dwGBitMask); + int bshift = firstBit(ddpf->dwBBitMask); + int ashift = firstBit(ddpf->dwRGBAlphaBitMask); DWORD mask; - if ((ddpf->dwRGBBitCount <= 32) && + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += (xoffset << 2); for (int i=yoffset; i < ylimit; i++) { @@ -6647,7 +6647,7 @@ void copyDataToSurfaceRGBA(jint internalFormat, } else { a = (*src++) >> -aDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); @@ -6655,7 +6655,7 @@ void copyDataToSurfaceRGBA(jint internalFormat, *dst++ = (byte) ((mask >> 24) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -6684,14 +6684,14 @@ void copyDataToSurfaceRGBA(jint internalFormat, } else { a = (*src++) >> -aDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); *dst++ = (byte) ((mask >> 16) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -6720,13 +6720,13 @@ void copyDataToSurfaceRGBA(jint internalFormat, } else { a = (*src++) >> -aDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += xoffset; @@ -6754,32 +6754,32 @@ void copyDataToSurfaceRGBA(jint internalFormat, } else { a = (*src++) >> -aDiscard; } - *dst++ = (byte) ((r << rshift) | (g << gshift) | + *dst++ = (byte) ((r << rshift) | (g << gshift) | (b << bshift) | (a << ashift)); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } - } else { - // should not happen, RGBBitCount > 32. Even DirectX + } else { + // should not happen, RGBBitCount > 32. Even DirectX // RGB mask can't address it. - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } } } else if (internalFormat == LUMINANCE_ALPHA) { - int rDiscard = 8-countBits(ddpf->dwRBitMask); - int gDiscard = 8-countBits(ddpf->dwGBitMask); - int bDiscard = 8-countBits(ddpf->dwBBitMask); - int aDiscard = 8-countBits(ddpf->dwRGBAlphaBitMask); + int rDiscard = 8-ucountBits(ddpf->dwRBitMask); + int gDiscard = 8-ucountBits(ddpf->dwGBitMask); + int bDiscard = 8-ucountBits(ddpf->dwBBitMask); + int aDiscard = 8-ucountBits(ddpf->dwRGBAlphaBitMask); int rshift = firstBit(ddpf->dwRBitMask); int gshift = firstBit(ddpf->dwGBitMask); int bshift = firstBit(ddpf->dwBBitMask); - int ashift = firstBit(ddpf->dwRGBAlphaBitMask); + int ashift = firstBit(ddpf->dwRGBAlphaBitMask); DWORD mask; - if ((ddpf->dwRGBBitCount <= 32) && + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += (xoffset << 2); for (int i=yoffset; i < ylimit; i++) { @@ -6792,7 +6792,7 @@ void copyDataToSurfaceRGBA(jint internalFormat, if (aDiscard >= 0) { a = (*src++) >> aDiscard; } else { - a = (*src++) << -aDiscard; + a = (*src++) << -aDiscard; } if (rDiscard >= 0) { r = l >> rDiscard; @@ -6809,7 +6809,7 @@ void copyDataToSurfaceRGBA(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); @@ -6817,7 +6817,7 @@ void copyDataToSurfaceRGBA(jint internalFormat, *dst++ = (byte) ((mask >> 24) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -6832,7 +6832,7 @@ void copyDataToSurfaceRGBA(jint internalFormat, if (aDiscard >= 0) { a = (*src++) >> aDiscard; } else { - a = (*src++) << -aDiscard; + a = (*src++) << -aDiscard; } if (rDiscard >= 0) { r = l >> rDiscard; @@ -6849,14 +6849,14 @@ void copyDataToSurfaceRGBA(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); *dst++ = (byte) ((mask >> 16) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -6871,7 +6871,7 @@ void copyDataToSurfaceRGBA(jint internalFormat, if (aDiscard >= 0) { a = (*src++) >> aDiscard; } else { - a = (*src++) << -aDiscard; + a = (*src++) << -aDiscard; } if (rDiscard >= 0) { r = l >> rDiscard; @@ -6888,13 +6888,13 @@ void copyDataToSurfaceRGBA(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += xoffset; @@ -6908,7 +6908,7 @@ void copyDataToSurfaceRGBA(jint internalFormat, if (aDiscard >= 0) { a = (*src++) >> aDiscard; } else { - a = (*src++) << -aDiscard; + a = (*src++) << -aDiscard; } if (rDiscard >= 0) { r = l >> rDiscard; @@ -6925,22 +6925,22 @@ void copyDataToSurfaceRGBA(jint internalFormat, } else { b = l << -bDiscard; } - *dst++ = (byte) ((r << rshift) | (g << gshift) | + *dst++ = (byte) ((r << rshift) | (g << gshift) | (b << bshift) | (a << ashift)); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } - } else if (internalFormat == ALPHA) { - int aDiscard = 8-countBits(ddpf->dwRGBAlphaBitMask); - int ashift = firstBit(ddpf->dwRGBAlphaBitMask); + } else if (internalFormat == ALPHA) { + int aDiscard = 8-ucountBits(ddpf->dwRGBAlphaBitMask); + int ashift = firstBit(ddpf->dwRGBAlphaBitMask); DWORD mask; - if ((ddpf->dwRGBBitCount <= 32) && + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += (xoffset << 2); for (int i=yoffset; i < ylimit; i++) { @@ -6960,7 +6960,7 @@ void copyDataToSurfaceRGBA(jint internalFormat, *dst++ = (byte) ((mask >> 24) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -6981,7 +6981,7 @@ void copyDataToSurfaceRGBA(jint internalFormat, *dst++ = (byte) ((mask >> 16) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -7001,7 +7001,7 @@ void copyDataToSurfaceRGBA(jint internalFormat, *dst++ = (byte) ((mask >> 8) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += xoffset; @@ -7018,25 +7018,25 @@ void copyDataToSurfaceRGBA(jint internalFormat, *dst++ = (byte) (a << ashift); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } } else if ((internalFormat == LUMINANCE) || (internalFormat == INTENSITY)) { - int rDiscard = 8-countBits(ddpf->dwRBitMask); - int gDiscard = 8-countBits(ddpf->dwGBitMask); - int bDiscard = 8-countBits(ddpf->dwBBitMask); - int aDiscard = 8-countBits(ddpf->dwRGBAlphaBitMask); + int rDiscard = 8-ucountBits(ddpf->dwRBitMask); + int gDiscard = 8-ucountBits(ddpf->dwGBitMask); + int bDiscard = 8-ucountBits(ddpf->dwBBitMask); + int aDiscard = 8-ucountBits(ddpf->dwRGBAlphaBitMask); int rshift = firstBit(ddpf->dwRBitMask); int gshift = firstBit(ddpf->dwGBitMask); int bshift = firstBit(ddpf->dwBBitMask); - int ashift = firstBit(ddpf->dwRGBAlphaBitMask); + int ashift = firstBit(ddpf->dwRGBAlphaBitMask); DWORD mask; - - if ((ddpf->dwRGBBitCount <= 32) && + + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += (xoffset << 2); for (int i=yoffset; i < ylimit; i++) { @@ -7065,7 +7065,7 @@ void copyDataToSurfaceRGBA(jint internalFormat, } else { a = l << -aDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); @@ -7073,7 +7073,7 @@ void copyDataToSurfaceRGBA(jint internalFormat, *dst++ = (byte) ((mask >> 24) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -7104,14 +7104,14 @@ void copyDataToSurfaceRGBA(jint internalFormat, } else { a = l << -aDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); *dst++ = (byte) ((mask >> 16) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -7142,13 +7142,13 @@ void copyDataToSurfaceRGBA(jint internalFormat, } else { a = l << -aDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += xoffset; @@ -7178,16 +7178,16 @@ void copyDataToSurfaceRGBA(jint internalFormat, } else { a = l << -aDiscard; } - *dst++ = (byte) ((r << rshift) | - (g << gshift) | + *dst++ = (byte) ((r << rshift) | + (g << gshift) | (b << bshift) | (a << ashift)); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } } else { @@ -7196,14 +7196,14 @@ void copyDataToSurfaceRGBA(jint internalFormat, } -void copyDataToSurfaceRGB(jint internalFormat, +void copyDataToSurfaceRGB(jint internalFormat, PIXELFORMAT *ddpf, unsigned char* pRect, DWORD rectPitch, jbyte *data, jint xoffset, jint yoffset, - DWORD xlimit, DWORD ylimit, - jint subWidth) + DWORD xlimit, DWORD ylimit, + jint subWidth) { unsigned char *src; unsigned char *dst; @@ -7237,7 +7237,7 @@ void copyDataToSurfaceRGB(jint internalFormat, } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount == 16) && (ddpf->dwRBitMask == 0xf00) && @@ -7255,18 +7255,18 @@ void copyDataToSurfaceRGB(jint internalFormat, *dst++ = 0xf0 | r; } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { // handle less common (even weird) format - int rDiscard = 8-countBits(ddpf->dwRBitMask); - int gDiscard = 8-countBits(ddpf->dwGBitMask); - int bDiscard = 8-countBits(ddpf->dwBBitMask); + int rDiscard = 8-ucountBits(ddpf->dwRBitMask); + int gDiscard = 8-ucountBits(ddpf->dwGBitMask); + int bDiscard = 8-ucountBits(ddpf->dwBBitMask); int rshift = firstBit(ddpf->dwRBitMask); - int gshift = firstBit(ddpf->dwGBitMask); - int bshift = firstBit(ddpf->dwBBitMask); + int gshift = firstBit(ddpf->dwGBitMask); + int bshift = firstBit(ddpf->dwBBitMask); DWORD mask; - if ((ddpf->dwRGBBitCount <= 32) && + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += (xoffset << 2); for (int i=yoffset; i < ylimit; i++) { @@ -7288,15 +7288,15 @@ void copyDataToSurfaceRGB(jint internalFormat, } else { b = (*src++) >> -bDiscard; } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask; + mask = (r << rshift) | (g << gshift) | + (b << bshift) | ddpf->dwRGBAlphaBitMask; *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); *dst++ = (byte) ((mask >> 16) & 0xff); *dst++ = (byte) ((mask >> 24) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -7320,14 +7320,14 @@ void copyDataToSurfaceRGB(jint internalFormat, } else { b = (*src++) >> -bDiscard; } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask; + mask = (r << rshift) | (g << gshift) | + (b << bshift) | ddpf->dwRGBAlphaBitMask; *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); *dst++ = (byte) ((mask >> 16) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -7351,13 +7351,13 @@ void copyDataToSurfaceRGB(jint internalFormat, } else { b = (*src++) >> -bDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | ddpf->dwRGBAlphaBitMask; *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += xoffset; @@ -7380,29 +7380,29 @@ void copyDataToSurfaceRGB(jint internalFormat, } else { b = (*src++) >> -bDiscard; } - *dst++ = (byte) ((r << rshift) | (g << gshift) | + *dst++ = (byte) ((r << rshift) | (g << gshift) | (b << bshift) | ddpf->dwRGBAlphaBitMask); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } - } else { - // should not happen, RGBBitCount > 32. Even DirectX + } else { + // should not happen, RGBBitCount > 32. Even DirectX // RGB mask can't address it. - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } } } else if (internalFormat == LUMINANCE_ALPHA) { - int rDiscard = 8-countBits(ddpf->dwRBitMask); - int gDiscard = 8-countBits(ddpf->dwGBitMask); - int bDiscard = 8-countBits(ddpf->dwBBitMask); + int rDiscard = 8-ucountBits(ddpf->dwRBitMask); + int gDiscard = 8-ucountBits(ddpf->dwGBitMask); + int bDiscard = 8-ucountBits(ddpf->dwBBitMask); int rshift = firstBit(ddpf->dwRBitMask); int gshift = firstBit(ddpf->dwGBitMask); int bshift = firstBit(ddpf->dwBBitMask); DWORD mask; - if ((ddpf->dwRGBBitCount <= 32) && + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += (xoffset << 2); for (int i=yoffset; i < ylimit; i++) { @@ -7427,7 +7427,7 @@ void copyDataToSurfaceRGB(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | ddpf->dwRGBAlphaBitMask; *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); @@ -7435,7 +7435,7 @@ void copyDataToSurfaceRGB(jint internalFormat, *dst++ = (byte) ((mask >> 24) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -7462,14 +7462,14 @@ void copyDataToSurfaceRGB(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | ddpf->dwRGBAlphaBitMask; *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); *dst++ = (byte) ((mask >> 16) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -7496,13 +7496,13 @@ void copyDataToSurfaceRGB(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | ddpf->dwRGBAlphaBitMask; *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += xoffset; @@ -7528,23 +7528,23 @@ void copyDataToSurfaceRGB(jint internalFormat, } else { b = l << -bDiscard; } - *dst++ = (byte) ((r << rshift) | (g << gshift) | + *dst++ = (byte) ((r << rshift) | (g << gshift) | (b << bshift) | ddpf->dwRGBAlphaBitMask); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } - } else if (internalFormat == ALPHA) { + } else if (internalFormat == ALPHA) { byte m1 = (byte) (ddpf->dwRGBAlphaBitMask & 0xff); byte m2 = (byte) ((ddpf->dwRGBAlphaBitMask >> 8) & 0xff); byte m3 = (byte) ((ddpf->dwRGBAlphaBitMask >> 16) & 0xff); byte m4 = (byte) ((ddpf->dwRGBAlphaBitMask >> 24) & 0xff); - if ((ddpf->dwRGBBitCount <= 32) && + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += (xoffset << 2); for (int i=yoffset; i < ylimit; i++) { @@ -7558,7 +7558,7 @@ void copyDataToSurfaceRGB(jint internalFormat, *dst++ = m4; } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -7573,7 +7573,7 @@ void copyDataToSurfaceRGB(jint internalFormat, *dst++ = m3; } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -7587,7 +7587,7 @@ void copyDataToSurfaceRGB(jint internalFormat, *dst++ = m2; } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += xoffset; @@ -7599,23 +7599,23 @@ void copyDataToSurfaceRGB(jint internalFormat, *dst++ = m1; } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } } else if ((internalFormat == LUMINANCE) || (internalFormat == INTENSITY)) { - int rDiscard = 8-countBits(ddpf->dwRBitMask); - int gDiscard = 8-countBits(ddpf->dwGBitMask); - int bDiscard = 8-countBits(ddpf->dwBBitMask); + int rDiscard = 8-ucountBits(ddpf->dwRBitMask); + int gDiscard = 8-ucountBits(ddpf->dwGBitMask); + int bDiscard = 8-ucountBits(ddpf->dwBBitMask); int rshift = firstBit(ddpf->dwRBitMask); int gshift = firstBit(ddpf->dwGBitMask); int bshift = firstBit(ddpf->dwBBitMask); DWORD mask; - - if ((ddpf->dwRGBBitCount <= 32) && + + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += (xoffset << 2); for (int i=yoffset; i < ylimit; i++) { @@ -7640,7 +7640,7 @@ void copyDataToSurfaceRGB(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | ddpf->dwRGBAlphaBitMask; *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); @@ -7648,7 +7648,7 @@ void copyDataToSurfaceRGB(jint internalFormat, *dst++ = (byte) ((mask >> 24) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -7675,14 +7675,14 @@ void copyDataToSurfaceRGB(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | ddpf->dwRGBAlphaBitMask; *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); *dst++ = (byte) ((mask >> 16) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -7709,13 +7709,13 @@ void copyDataToSurfaceRGB(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | ddpf->dwRGBAlphaBitMask; *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += xoffset; @@ -7741,16 +7741,16 @@ void copyDataToSurfaceRGB(jint internalFormat, } else { b = l << -bDiscard; } - *dst++ = (byte) ((r << rshift) | - (g << gshift) | + *dst++ = (byte) ((r << rshift) | + (g << gshift) | (b << bshift) | ddpf->dwRGBAlphaBitMask); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } } else { @@ -7759,14 +7759,14 @@ void copyDataToSurfaceRGB(jint internalFormat, } -void copyDataToSurfaceLA(jint internalFormat, +void copyDataToSurfaceLA(jint internalFormat, PIXELFORMAT *ddpf, unsigned char* pRect, DWORD rectPitch, jbyte *data, jint xoffset, jint yoffset, - DWORD xlimit, DWORD ylimit, - jint subWidth) + DWORD xlimit, DWORD ylimit, + jint subWidth) { unsigned char *src; unsigned char *dst; @@ -7797,7 +7797,7 @@ void copyDataToSurfaceLA(jint internalFormat, *dst++ = *src++; } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount == 16) && (ddpf->dwRBitMask == 0xf00) && @@ -7814,20 +7814,20 @@ void copyDataToSurfaceLA(jint internalFormat, *dst++ = (a << 4) | l; } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { // handle less common (even weird) format - int rDiscard = 8-countBits(ddpf->dwRBitMask); - int gDiscard = 8-countBits(ddpf->dwGBitMask); - int bDiscard = 8-countBits(ddpf->dwBBitMask); - int aDiscard = 8-countBits(ddpf->dwRGBAlphaBitMask); + int rDiscard = 8-ucountBits(ddpf->dwRBitMask); + int gDiscard = 8-ucountBits(ddpf->dwGBitMask); + int bDiscard = 8-ucountBits(ddpf->dwBBitMask); + int aDiscard = 8-ucountBits(ddpf->dwRGBAlphaBitMask); int rshift = firstBit(ddpf->dwRBitMask); int gshift = firstBit(ddpf->dwGBitMask); int bshift = firstBit(ddpf->dwBBitMask); - int ashift = firstBit(ddpf->dwRGBAlphaBitMask); + int ashift = firstBit(ddpf->dwRGBAlphaBitMask); DWORD mask; - if ((ddpf->dwRGBBitCount <= 32) && + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += (xoffset << 2); for (int i=yoffset; i < ylimit; i++) { @@ -7844,7 +7844,7 @@ void copyDataToSurfaceLA(jint internalFormat, } else { a = (*src++) >> -aDiscard; } - mask = (l << rshift) | (l << gshift) | + mask = (l << rshift) | (l << gshift) | (l << bshift) | (a << ashift); *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); @@ -7852,7 +7852,7 @@ void copyDataToSurfaceLA(jint internalFormat, *dst++ = (byte) ((mask >> 24) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -7871,14 +7871,14 @@ void copyDataToSurfaceLA(jint internalFormat, } else { a = (*src++) >> -aDiscard; } - mask = (l << rshift) | (l << gshift) | + mask = (l << rshift) | (l << gshift) | (l << bshift) | (a << ashift); *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); *dst++ = (byte) ((mask >> 16) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -7897,13 +7897,13 @@ void copyDataToSurfaceLA(jint internalFormat, } else { a = (*src++) >> -aDiscard; } - mask = (l << rshift) | (l << gshift) | + mask = (l << rshift) | (l << gshift) | (l << bshift) | (a << ashift); *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += xoffset; @@ -7921,32 +7921,32 @@ void copyDataToSurfaceLA(jint internalFormat, } else { a = (*src++) >> -aDiscard; } - *dst++ = (byte) ((l << rshift) | (l << gshift) | + *dst++ = (byte) ((l << rshift) | (l << gshift) | (l << bshift) | (a << ashift)); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } - } else { - // should not happen, RGBBitCount > 32. Even DirectX + } else { + // should not happen, RGBBitCount > 32. Even DirectX // RGB mask can't address it. - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } } } else if (internalFormat == LUMINANCE_ALPHA) { - int rDiscard = 8-countBits(ddpf->dwRBitMask); - int gDiscard = 8-countBits(ddpf->dwGBitMask); - int bDiscard = 8-countBits(ddpf->dwBBitMask); - int aDiscard = 8-countBits(ddpf->dwRGBAlphaBitMask); + int rDiscard = 8-ucountBits(ddpf->dwRBitMask); + int gDiscard = 8-ucountBits(ddpf->dwGBitMask); + int bDiscard = 8-ucountBits(ddpf->dwBBitMask); + int aDiscard = 8-ucountBits(ddpf->dwRGBAlphaBitMask); int rshift = firstBit(ddpf->dwRBitMask); int gshift = firstBit(ddpf->dwGBitMask); int bshift = firstBit(ddpf->dwBBitMask); - int ashift = firstBit(ddpf->dwRGBAlphaBitMask); + int ashift = firstBit(ddpf->dwRGBAlphaBitMask); DWORD mask; - if ((ddpf->dwRGBBitCount <= 32) && + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += (xoffset << 2); for (int i=yoffset; i < ylimit; i++) { @@ -7957,7 +7957,7 @@ void copyDataToSurfaceLA(jint internalFormat, if (aDiscard >= 0) { a = (*src++) >> aDiscard; } else { - a = (*src++) << -aDiscard; + a = (*src++) << -aDiscard; } if (rDiscard >= 0) { r = l >> rDiscard; @@ -7974,7 +7974,7 @@ void copyDataToSurfaceLA(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); @@ -7982,7 +7982,7 @@ void copyDataToSurfaceLA(jint internalFormat, *dst++ = (byte) ((mask >> 24) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -7995,7 +7995,7 @@ void copyDataToSurfaceLA(jint internalFormat, if (aDiscard >= 0) { a = (*src++) >> aDiscard; } else { - a = (*src++) << -aDiscard; + a = (*src++) << -aDiscard; } if (rDiscard >= 0) { r = l >> rDiscard; @@ -8012,14 +8012,14 @@ void copyDataToSurfaceLA(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); *dst++ = (byte) ((mask >> 16) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -8032,7 +8032,7 @@ void copyDataToSurfaceLA(jint internalFormat, if (aDiscard >= 0) { a = (*src++) >> aDiscard; } else { - a = (*src++) << -aDiscard; + a = (*src++) << -aDiscard; } if (rDiscard >= 0) { r = l >> rDiscard; @@ -8049,13 +8049,13 @@ void copyDataToSurfaceLA(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += xoffset; @@ -8067,7 +8067,7 @@ void copyDataToSurfaceLA(jint internalFormat, if (aDiscard >= 0) { a = (*src++) >> aDiscard; } else { - a = (*src++) << -aDiscard; + a = (*src++) << -aDiscard; } if (rDiscard >= 0) { r = l >> rDiscard; @@ -8084,22 +8084,22 @@ void copyDataToSurfaceLA(jint internalFormat, } else { b = l << -bDiscard; } - *dst++ = (byte) ((r << rshift) | (g << gshift) | + *dst++ = (byte) ((r << rshift) | (g << gshift) | (b << bshift) | (a << ashift)); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } - } else if (internalFormat == ALPHA) { - int aDiscard = 8-countBits(ddpf->dwRGBAlphaBitMask); - int ashift = firstBit(ddpf->dwRGBAlphaBitMask); + } else if (internalFormat == ALPHA) { + int aDiscard = 8-ucountBits(ddpf->dwRGBAlphaBitMask); + int ashift = firstBit(ddpf->dwRGBAlphaBitMask); DWORD mask; - if ((ddpf->dwRGBBitCount <= 32) && + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += (xoffset << 2); for (int i=yoffset; i < ylimit; i++) { @@ -8119,7 +8119,7 @@ void copyDataToSurfaceLA(jint internalFormat, *dst++ = (byte) ((mask >> 24) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -8140,7 +8140,7 @@ void copyDataToSurfaceLA(jint internalFormat, *dst++ = (byte) ((mask >> 16) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -8160,7 +8160,7 @@ void copyDataToSurfaceLA(jint internalFormat, *dst++ = (byte) ((mask >> 8) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += xoffset; @@ -8177,25 +8177,25 @@ void copyDataToSurfaceLA(jint internalFormat, *dst++ = (byte) (a << ashift); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } } else if ((internalFormat == LUMINANCE) || (internalFormat == INTENSITY)) { - int rDiscard = 8-countBits(ddpf->dwRBitMask); - int gDiscard = 8-countBits(ddpf->dwGBitMask); - int bDiscard = 8-countBits(ddpf->dwBBitMask); - int aDiscard = 8-countBits(ddpf->dwRGBAlphaBitMask); + int rDiscard = 8-ucountBits(ddpf->dwRBitMask); + int gDiscard = 8-ucountBits(ddpf->dwGBitMask); + int bDiscard = 8-ucountBits(ddpf->dwBBitMask); + int aDiscard = 8-ucountBits(ddpf->dwRGBAlphaBitMask); int rshift = firstBit(ddpf->dwRBitMask); int gshift = firstBit(ddpf->dwGBitMask); int bshift = firstBit(ddpf->dwBBitMask); - int ashift = firstBit(ddpf->dwRGBAlphaBitMask); + int ashift = firstBit(ddpf->dwRGBAlphaBitMask); DWORD mask; - - if ((ddpf->dwRGBBitCount <= 32) && + + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += (xoffset << 2); for (int i=yoffset; i < ylimit; i++) { @@ -8224,7 +8224,7 @@ void copyDataToSurfaceLA(jint internalFormat, } else { a = l << -aDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); @@ -8232,7 +8232,7 @@ void copyDataToSurfaceLA(jint internalFormat, *dst++ = (byte) ((mask >> 24) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -8263,14 +8263,14 @@ void copyDataToSurfaceLA(jint internalFormat, } else { a = l << -aDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); *dst++ = (byte) ((mask >> 16) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -8301,13 +8301,13 @@ void copyDataToSurfaceLA(jint internalFormat, } else { a = l << -aDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += xoffset; @@ -8337,16 +8337,16 @@ void copyDataToSurfaceLA(jint internalFormat, } else { a = l << -aDiscard; } - *dst++ = (byte) ((r << rshift) | - (g << gshift) | + *dst++ = (byte) ((r << rshift) | + (g << gshift) | (b << bshift) | (a << ashift)); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } } else { @@ -8354,14 +8354,14 @@ void copyDataToSurfaceLA(jint internalFormat, } } -void copyDataToSurfaceGray(jint internalFormat, +void copyDataToSurfaceGray(jint internalFormat, PIXELFORMAT *ddpf, unsigned char* pRect, DWORD rectPitch, jbyte *data, jint xoffset, jint yoffset, - DWORD xlimit, DWORD ylimit, - jint subWidth) + DWORD xlimit, DWORD ylimit, + jint subWidth) { unsigned char *src; unsigned char *dst; @@ -8393,7 +8393,7 @@ void copyDataToSurfaceGray(jint internalFormat, *dst++ = 0xff; } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount == 16) && (ddpf->dwRBitMask == 0xf00) && @@ -8409,18 +8409,18 @@ void copyDataToSurfaceGray(jint internalFormat, *dst++ = 0xf0 | l; } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { // handle less common (even weird) format - int rDiscard = 8-countBits(ddpf->dwRBitMask); - int gDiscard = 8-countBits(ddpf->dwGBitMask); - int bDiscard = 8-countBits(ddpf->dwBBitMask); + int rDiscard = 8-ucountBits(ddpf->dwRBitMask); + int gDiscard = 8-ucountBits(ddpf->dwGBitMask); + int bDiscard = 8-ucountBits(ddpf->dwBBitMask); int rshift = firstBit(ddpf->dwRBitMask); int gshift = firstBit(ddpf->dwGBitMask); int bshift = firstBit(ddpf->dwBBitMask); DWORD mask; - if ((ddpf->dwRGBBitCount <= 32) && + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += (xoffset << 2); for (int i=yoffset; i < ylimit; i++) { @@ -8432,7 +8432,7 @@ void copyDataToSurfaceGray(jint internalFormat, } else { l = (*src++) << -rDiscard; } - mask = (l << rshift) | (l << gshift) | + mask = (l << rshift) | (l << gshift) | (l << bshift) | ddpf->dwRGBAlphaBitMask; *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); @@ -8440,7 +8440,7 @@ void copyDataToSurfaceGray(jint internalFormat, *dst++ = (byte) ((mask >> 24) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -8454,14 +8454,14 @@ void copyDataToSurfaceGray(jint internalFormat, } else { l = (*src++) << -rDiscard; } - mask = (l << rshift) | (l << gshift) | + mask = (l << rshift) | (l << gshift) | (l << bshift) | ddpf->dwRGBAlphaBitMask; *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); *dst++ = (byte) ((mask >> 16) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -8475,13 +8475,13 @@ void copyDataToSurfaceGray(jint internalFormat, } else { l = (*src++) << -rDiscard; } - mask = (l << rshift) | (l << gshift) | + mask = (l << rshift) | (l << gshift) | (l << bshift) | ddpf->dwRGBAlphaBitMask; *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += xoffset; @@ -8494,32 +8494,32 @@ void copyDataToSurfaceGray(jint internalFormat, } else { l = (*src++) << -rDiscard; } - *dst++ = (byte) ((l << rshift) | (l << gshift) | - (l << bshift) | ddpf->dwRGBAlphaBitMask); + *dst++ = (byte) ((l << rshift) | (l << gshift) | + (l << bshift) | ddpf->dwRGBAlphaBitMask); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } - } else { - // should not happen, RGBBitCount > 32. Even DirectX + } else { + // should not happen, RGBBitCount > 32. Even DirectX // RGB mask can't address it. - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } } } else if (internalFormat == LUMINANCE_ALPHA) { - int rDiscard = 8-countBits(ddpf->dwRBitMask); - int gDiscard = 8-countBits(ddpf->dwGBitMask); - int bDiscard = 8-countBits(ddpf->dwBBitMask); - int aDiscard = 8-countBits(ddpf->dwRGBAlphaBitMask); + int rDiscard = 8-ucountBits(ddpf->dwRBitMask); + int gDiscard = 8-ucountBits(ddpf->dwGBitMask); + int bDiscard = 8-ucountBits(ddpf->dwBBitMask); + int aDiscard = 8-ucountBits(ddpf->dwRGBAlphaBitMask); int rshift = firstBit(ddpf->dwRBitMask); int gshift = firstBit(ddpf->dwGBitMask); int bshift = firstBit(ddpf->dwBBitMask); - int ashift = firstBit(ddpf->dwRGBAlphaBitMask); + int ashift = firstBit(ddpf->dwRGBAlphaBitMask); DWORD mask; - if ((ddpf->dwRGBBitCount <= 32) && + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += (xoffset << 2); for (int i=yoffset; i < ylimit; i++) { @@ -8530,7 +8530,7 @@ void copyDataToSurfaceGray(jint internalFormat, if (aDiscard >= 0) { a = l >> aDiscard; } else { - a = l << -aDiscard; + a = l << -aDiscard; } if (rDiscard >= 0) { r = l >> rDiscard; @@ -8547,7 +8547,7 @@ void copyDataToSurfaceGray(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); @@ -8555,7 +8555,7 @@ void copyDataToSurfaceGray(jint internalFormat, *dst++ = (byte) ((mask >> 24) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -8568,7 +8568,7 @@ void copyDataToSurfaceGray(jint internalFormat, if (aDiscard >= 0) { a = l >> aDiscard; } else { - a = l << -aDiscard; + a = l << -aDiscard; } if (rDiscard >= 0) { r = l >> rDiscard; @@ -8585,14 +8585,14 @@ void copyDataToSurfaceGray(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); *dst++ = (byte) ((mask >> 16) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -8605,7 +8605,7 @@ void copyDataToSurfaceGray(jint internalFormat, if (aDiscard >= 0) { a = l >> aDiscard; } else { - a = l << -aDiscard; + a = l << -aDiscard; } if (rDiscard >= 0) { r = l >> rDiscard; @@ -8622,13 +8622,13 @@ void copyDataToSurfaceGray(jint internalFormat, } else { b = l << -bDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += xoffset; @@ -8640,7 +8640,7 @@ void copyDataToSurfaceGray(jint internalFormat, if (aDiscard >= 0) { a = l >> aDiscard; } else { - a = l << -aDiscard; + a = l << -aDiscard; } if (rDiscard >= 0) { r = l >> rDiscard; @@ -8657,22 +8657,22 @@ void copyDataToSurfaceGray(jint internalFormat, } else { b = l << -bDiscard; } - *dst++ = (byte) ((r << rshift) | (g << gshift) | + *dst++ = (byte) ((r << rshift) | (g << gshift) | (b << bshift) | (a << ashift)); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } - } else if (internalFormat == ALPHA) { - int aDiscard = 8-countBits(ddpf->dwRGBAlphaBitMask); - int ashift = firstBit(ddpf->dwRGBAlphaBitMask); + } else if (internalFormat == ALPHA) { + int aDiscard = 8-ucountBits(ddpf->dwRGBAlphaBitMask); + int ashift = firstBit(ddpf->dwRGBAlphaBitMask); DWORD mask; - if ((ddpf->dwRGBBitCount <= 32) && + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += (xoffset << 2); for (int i=yoffset; i < ylimit; i++) { @@ -8691,7 +8691,7 @@ void copyDataToSurfaceGray(jint internalFormat, *dst++ = (byte) ((mask >> 24) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -8711,7 +8711,7 @@ void copyDataToSurfaceGray(jint internalFormat, *dst++ = (byte) ((mask >> 16) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -8730,7 +8730,7 @@ void copyDataToSurfaceGray(jint internalFormat, *dst++ = (byte) ((mask >> 8) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += xoffset; @@ -8746,25 +8746,25 @@ void copyDataToSurfaceGray(jint internalFormat, *dst++ = (byte) (a << ashift); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } } else if ((internalFormat == LUMINANCE) || (internalFormat == INTENSITY)) { - int rDiscard = 8-countBits(ddpf->dwRBitMask); - int gDiscard = 8-countBits(ddpf->dwGBitMask); - int bDiscard = 8-countBits(ddpf->dwBBitMask); - int aDiscard = 8-countBits(ddpf->dwRGBAlphaBitMask); + int rDiscard = 8-ucountBits(ddpf->dwRBitMask); + int gDiscard = 8-ucountBits(ddpf->dwGBitMask); + int bDiscard = 8-ucountBits(ddpf->dwBBitMask); + int aDiscard = 8-ucountBits(ddpf->dwRGBAlphaBitMask); int rshift = firstBit(ddpf->dwRBitMask); int gshift = firstBit(ddpf->dwGBitMask); int bshift = firstBit(ddpf->dwBBitMask); - int ashift = firstBit(ddpf->dwRGBAlphaBitMask); + int ashift = firstBit(ddpf->dwRGBAlphaBitMask); DWORD mask; - - if ((ddpf->dwRGBBitCount <= 32) && + + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += (xoffset << 2); for (int i=yoffset; i < ylimit; i++) { @@ -8792,7 +8792,7 @@ void copyDataToSurfaceGray(jint internalFormat, } else { a = l << -aDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); @@ -8800,7 +8800,7 @@ void copyDataToSurfaceGray(jint internalFormat, *dst++ = (byte) ((mask >> 24) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -8830,14 +8830,14 @@ void copyDataToSurfaceGray(jint internalFormat, } else { a = l << -aDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); *dst++ = (byte) ((mask >> 16) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -8867,13 +8867,13 @@ void copyDataToSurfaceGray(jint internalFormat, } else { a = l << -aDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += xoffset; @@ -8902,16 +8902,16 @@ void copyDataToSurfaceGray(jint internalFormat, } else { a = l << -aDiscard; } - *dst++ = (byte) ((r << rshift) | - (g << gshift) | + *dst++ = (byte) ((r << rshift) | + (g << gshift) | (b << bshift) | (a << ashift)); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } } else { @@ -8925,28 +8925,28 @@ void copyDataToSurfaceGray(jint internalFormat, * Copy data from memory to DirectDraw surface * * Source image with WIDTH = tilew, the subimage with - * dimension (subWidth, subHeight) is copy with + * dimension (subWidth, subHeight) is copy with * offset = (imgXOffset, imgYOffset) from the start * pointer *data. * - * Destination frame buffer is copy with + * Destination frame buffer is copy with * offset = (xoffset, yoffset) * */ void copyDataToSurface(jint storedFormat, - jint internalFormat, + jint internalFormat, jint xoffset, jint yoffset, jint imgXOffset, jint imgYOffset, jint subWidth, jint subHeight, - jint tilew, jbyte *data, - LPDIRECT3DTEXTURE8 surf, - jint level) + jint tilew, jbyte *data, + LPDIRECT3DTEXTURE9 surf, + jint level) { D3DSURFACE_DESC ddsd; - D3DLOCKED_RECT lockedRect; + D3DLOCKED_RECT lockedRect; PIXELFORMAT ddpf; HRESULT hr; - + if (surf == NULL) { return; } @@ -8971,58 +8971,58 @@ void copyDataToSurface(jint storedFormat, if (FAILED(hr)) { - printf("Fail to lock surface: %s\n", DXGetErrorString8(hr)); + printf("Fail to lock surface: %s\n", DXGetErrorString9(hr)); return; } int offset = tilew*imgYOffset + imgXOffset; switch (storedFormat) { case FORMAT_BYTE_RGBA : // This is the one we use when byReference = false - copyDataToSurfaceRGBA(internalFormat, &ddpf, + copyDataToSurfaceRGBA(internalFormat, &ddpf, (unsigned char *) lockedRect.pBits, lockedRect.Pitch, - data + (offset << 2), - xoffset, yoffset, + data + (offset << 2), + xoffset, yoffset, xlimit, ylimit, tilew); break; case FORMAT_BYTE_RGB: - copyDataToSurfaceRGB(internalFormat, &ddpf, + copyDataToSurfaceRGB(internalFormat, &ddpf, (unsigned char *) lockedRect.pBits, lockedRect.Pitch, - data + 3*offset, - xoffset, yoffset, + data + 3*offset, + xoffset, yoffset, xlimit, ylimit, tilew); break; case FORMAT_BYTE_ABGR: - copyDataToSurfaceABGR(internalFormat, &ddpf, + copyDataToSurfaceABGR(internalFormat, &ddpf, (unsigned char *) lockedRect.pBits, lockedRect.Pitch, - data + (offset << 2), - xoffset, yoffset, + data + (offset << 2), + xoffset, yoffset, xlimit, ylimit, tilew); break; case FORMAT_BYTE_BGR: - copyDataToSurfaceBGR(internalFormat, &ddpf, + copyDataToSurfaceBGR(internalFormat, &ddpf, (unsigned char *) lockedRect.pBits, lockedRect.Pitch, - data + 3*offset, - xoffset, yoffset, + data + 3*offset, + xoffset, yoffset, xlimit, ylimit, tilew); break; case FORMAT_BYTE_LA: - copyDataToSurfaceLA(internalFormat, &ddpf, + copyDataToSurfaceLA(internalFormat, &ddpf, (unsigned char *) lockedRect.pBits, lockedRect.Pitch, - data + (offset << 1), - xoffset, yoffset, + data + (offset << 1), + xoffset, yoffset, xlimit, ylimit, tilew); break; case FORMAT_BYTE_GRAY: copyDataToSurfaceGray(internalFormat, &ddpf, (unsigned char *) lockedRect.pBits, lockedRect.Pitch, - data + offset, - xoffset, yoffset, + data + offset, + xoffset, yoffset, xlimit, ylimit, tilew); break; default: // should not happen @@ -9032,21 +9032,21 @@ void copyDataToSurface(jint storedFormat, hr = surf->UnlockRect(level); if (FAILED(hr)) { - printf("Fail to unlock surface: %s\n", DXGetErrorString8(hr)); + printf("Fail to unlock surface: %s\n", DXGetErrorString9(hr)); return; } } -void copyDataToSurfaceGray(jint internalFormat, +void copyDataToSurfaceGray(jint internalFormat, PIXELFORMAT *ddpf, unsigned char* pRect, DWORD rectPitch, jshort *data, jint xoffset, jint yoffset, - DWORD xlimit, DWORD ylimit, - jint subWidth) + DWORD xlimit, DWORD ylimit, + jint subWidth) { unsigned char *src; unsigned char *dst; @@ -9056,12 +9056,12 @@ void copyDataToSurfaceGray(jint internalFormat, unsigned char *destRow = pRect + rectPitch*yoffset; - if (internalFormat == ALPHA) { - int aDiscard = 8-countBits(ddpf->dwRGBAlphaBitMask); - int ashift = firstBit(ddpf->dwRGBAlphaBitMask); + if (internalFormat == ALPHA) { + int aDiscard = 8-ucountBits(ddpf->dwRGBAlphaBitMask); + int ashift = firstBit(ddpf->dwRGBAlphaBitMask); DWORD mask; - if ((ddpf->dwRGBBitCount <= 32) && + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += (xoffset << 2); for (int i=yoffset; i < ylimit; i++) { @@ -9081,7 +9081,7 @@ void copyDataToSurfaceGray(jint internalFormat, *dst++ = (byte) ((mask >> 24) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -9102,7 +9102,7 @@ void copyDataToSurfaceGray(jint internalFormat, *dst++ = (byte) ((mask >> 16) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -9122,7 +9122,7 @@ void copyDataToSurfaceGray(jint internalFormat, *dst++ = (byte) ((mask >> 8) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += xoffset; @@ -9139,26 +9139,26 @@ void copyDataToSurfaceGray(jint internalFormat, *dst++ = (byte) (a << ashift); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } } else if ((internalFormat == LUMINANCE) || (internalFormat == INTENSITY)) { - int rDiscard = 8-countBits(ddpf->dwRBitMask); - int gDiscard = 8-countBits(ddpf->dwGBitMask); - int bDiscard = 8-countBits(ddpf->dwBBitMask); - int aDiscard = 8-countBits(ddpf->dwRGBAlphaBitMask); + int rDiscard = 8-ucountBits(ddpf->dwRBitMask); + int gDiscard = 8-ucountBits(ddpf->dwGBitMask); + int bDiscard = 8-ucountBits(ddpf->dwBBitMask); + int aDiscard = 8-ucountBits(ddpf->dwRGBAlphaBitMask); int rshift = firstBit(ddpf->dwRBitMask); int gshift = firstBit(ddpf->dwGBitMask); int bshift = firstBit(ddpf->dwBBitMask); - int ashift = firstBit(ddpf->dwRGBAlphaBitMask); + int ashift = firstBit(ddpf->dwRGBAlphaBitMask); DWORD mask; - if ((ddpf->dwRGBBitCount <= 32) && + if ((ddpf->dwRGBBitCount <= 32) && (ddpf->dwRGBBitCount > 24)) { destRow += (xoffset << 2); for (int i=yoffset; i < ylimit; i++) { @@ -9187,7 +9187,7 @@ void copyDataToSurfaceGray(jint internalFormat, } else { a = l << -aDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); @@ -9195,7 +9195,7 @@ void copyDataToSurfaceGray(jint internalFormat, *dst++ = (byte) ((mask >> 24) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 24) && (ddpf->dwRGBBitCount > 16)) { @@ -9226,14 +9226,14 @@ void copyDataToSurfaceGray(jint internalFormat, } else { a = l << -aDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); *dst++ = (byte) ((mask >> 16) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if ((ddpf->dwRGBBitCount <= 16) && (ddpf->dwRGBBitCount > 8)) { @@ -9264,13 +9264,13 @@ void copyDataToSurfaceGray(jint internalFormat, } else { a = l << -aDiscard; } - mask = (r << rshift) | (g << gshift) | + mask = (r << rshift) | (g << gshift) | (b << bshift) | (a << ashift); *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else if (ddpf->dwRGBBitCount <= 8) { destRow += xoffset; @@ -9300,21 +9300,21 @@ void copyDataToSurfaceGray(jint internalFormat, } else { a = l << -aDiscard; } - *dst++ = (byte) ((r << rshift) | - (g << gshift) | + *dst++ = (byte) ((r << rshift) | + (g << gshift) | (b << bshift) | (a << ashift)); } srcRow += srcPitch; - destRow += rectPitch; + destRow += rectPitch; } } else { - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf->dwRGBBitCount); } } else { printf("Texture format %d not support.\n", internalFormat); - } + } } @@ -9325,14 +9325,14 @@ void copyDataToSurface(jint storedFormat, jint imgXOffset, jint imgYOffset, jint subWidth, jint subHeight, jint tilew, jshort *data, - LPDIRECT3DTEXTURE8 surf, + LPDIRECT3DTEXTURE9 surf, jint level) { D3DSURFACE_DESC ddsd; - D3DLOCKED_RECT lockedRect; + D3DLOCKED_RECT lockedRect; PIXELFORMAT ddpf; HRESULT hr; - + if (surf == NULL) { return; } @@ -9351,22 +9351,22 @@ void copyDataToSurface(jint storedFormat, hr = surf->LockRect(level, &lockedRect, NULL, 0); if (FAILED(hr)) { - printf("Fail to lock surface: %s\n", DXGetErrorString8(hr)); + printf("Fail to lock surface: %s\n", DXGetErrorString9(hr)); return; } int offset = tilew*imgYOffset + imgXOffset; - copyDataToSurfaceGray(internalFormat, &ddpf, + copyDataToSurfaceGray(internalFormat, &ddpf, (unsigned char *) lockedRect.pBits, lockedRect.Pitch, - data + (offset << 1), - xoffset, yoffset, + data + (offset << 1), + xoffset, yoffset, xlimit, ylimit, tilew); - + hr = surf->UnlockRect(level); if (FAILED(hr)) { - printf("Fail to unlock surface: %s\n", DXGetErrorString8(hr)); + printf("Fail to unlock surface: %s\n", DXGetErrorString9(hr)); return; } } @@ -9376,14 +9376,14 @@ void copyDataToSurface(jint storedFormat, // and reverse the Y axis void copyDepthFromSurface(jint xoffset, jint yoffset, jint subWidth, jint subHeight, - jint *data, - LPDIRECT3DSURFACE8 surf) + jint *data, + LPDIRECT3DSURFACE9 surf) { D3DSURFACE_DESC ddsd; DEPTHPIXELFORMAT ddpf; - D3DLOCKED_RECT lockedRect; + D3DLOCKED_RECT lockedRect; HRESULT hr; - + if (surf == NULL) { return; } @@ -9403,7 +9403,7 @@ void copyDepthFromSurface(jint xoffset, jint yoffset, if (FAILED(hr)) { if (debug) { - printf("Fail to lock depth surface: %s\n", DXGetErrorString8(hr)); + printf("Fail to lock depth surface: %s\n", DXGetErrorString9(hr)); } return; } @@ -9414,7 +9414,7 @@ void copyDepthFromSurface(jint xoffset, jint yoffset, jint *dst; unsigned char *src; unsigned char *srcRow = ((unsigned char *) lockedRect.pBits) + - xoffset*((int) ceil((float) ddpf.dwZBufferBitDepth/8.0)) + + xoffset*((int) ceil((float) ddpf.dwZBufferBitDepth/8.0)) + (yoffset*lockedRect.Pitch); int zshift = firstBit(ddpf.dwZBitMask); @@ -9432,7 +9432,7 @@ void copyDepthFromSurface(jint xoffset, jint yoffset, b2 = *src++; b3 = *src++; b4 = *src++; - mask = (b4 << 24) | (b3 << 16) | + mask = (b4 << 24) | (b3 << 16) | (b2 << 8) | b1; *dst++ = (mask & ddpf.dwZBitMask) >> zshift; } @@ -9480,13 +9480,13 @@ void copyDepthFromSurface(jint xoffset, jint yoffset, } } else { // This is not support by D3D 8 either - printf("[Java 3D] %d bit Z buffer not support !\n", + printf("[Java 3D] %d bit Z buffer not support !\n", ddpf.dwZBufferBitDepth); } hr = surf->UnlockRect(); if (FAILED(hr)) { - printf("Fail to unlock depth surface: %s\n", DXGetErrorString8(hr)); + printf("Fail to unlock depth surface: %s\n", DXGetErrorString9(hr)); return; } } @@ -9496,14 +9496,14 @@ void copyDepthFromSurface(jint xoffset, jint yoffset, // and reverse the Y axis void copyDepthFromSurface(jint xoffset, jint yoffset, jint subWidth, jint subHeight, - jfloat *data, - LPDIRECT3DSURFACE8 surf) + jfloat *data, + LPDIRECT3DSURFACE9 surf) { D3DSURFACE_DESC ddsd; DEPTHPIXELFORMAT ddpf; - D3DLOCKED_RECT lockedRect; + D3DLOCKED_RECT lockedRect; HRESULT hr; - + if (surf == NULL) { return; } @@ -9524,7 +9524,7 @@ void copyDepthFromSurface(jint xoffset, jint yoffset, if (FAILED(hr)) { if (debug) { - printf("Fail to lock depth surface: %s\n", DXGetErrorString8(hr)); + printf("Fail to lock depth surface: %s\n", DXGetErrorString9(hr)); } return; } @@ -9535,11 +9535,11 @@ void copyDepthFromSurface(jint xoffset, jint yoffset, jfloat *dst; unsigned char *src; unsigned char *srcRow = ((unsigned char *) lockedRect.pBits) + - xoffset*((int) ceil((float) ddpf.dwZBufferBitDepth/8.0)) + + xoffset*((int) ceil((float) ddpf.dwZBufferBitDepth/8.0)) + (yoffset*lockedRect.Pitch); int zshift = firstBit(ddpf.dwZBitMask); - float maxdepth = 1 << ddpf.dwZBufferBitDepth; + float maxdepth = float( 1 << ddpf.dwZBufferBitDepth); destRow += (subHeight-1)*subWidth; @@ -9554,7 +9554,7 @@ void copyDepthFromSurface(jint xoffset, jint yoffset, b2 = *src++; b3 = *src++; b4 = *src++; - mask = (b4 << 24) | (b3 << 16) | + mask = (b4 << 24) | (b3 << 16) | (b2 << 8) | b1; *dst++ = (((mask & ddpf.dwZBitMask) >> zshift))/ maxdepth; @@ -9606,13 +9606,13 @@ void copyDepthFromSurface(jint xoffset, jint yoffset, } } else { // This is not support by D3D 8 either - printf("[Java 3D] %d bit Z buffer not support !\n", + printf("[Java 3D] %d bit Z buffer not support !\n", ddpf.dwZBufferBitDepth); } hr = surf->UnlockRect(); if (FAILED(hr)) { - printf("Fail to unlock depth surface: %s\n", DXGetErrorString8(hr)); + printf("Fail to unlock depth surface: %s\n", DXGetErrorString9(hr)); return; } } @@ -9624,14 +9624,14 @@ void copyDepthToSurfaceAlways(jint dst_xoffset, jint dst_yoffset, jint src_xoffset, jint src_yoffset, jint subWidth, jint subHeight, jint src_width, jint src_height, - jint *data, - LPDIRECT3DSURFACE8 surf) + jint *data, + LPDIRECT3DSURFACE9 surf) { D3DSURFACE_DESC ddsd; DEPTHPIXELFORMAT ddpf; - D3DLOCKED_RECT lockedRect; + D3DLOCKED_RECT lockedRect; HRESULT hr; - + if (surf == NULL) { return; } @@ -9652,12 +9652,12 @@ void copyDepthToSurfaceAlways(jint dst_xoffset, jint dst_yoffset, if (FAILED(hr)) { if (debug) { - printf("Fail to lock depth surface: %s\n", DXGetErrorString8(hr)); + printf("Fail to lock depth surface: %s\n", DXGetErrorString9(hr)); } return; } jint *src; - jint *srcRow = data + src_xoffset + + jint *srcRow = data + src_xoffset + (src_yoffset + subHeight-1)*src_width; unsigned char *dst; unsigned char *destRow = ((unsigned char *) lockedRect.pBits) + @@ -9677,7 +9677,7 @@ void copyDepthToSurfaceAlways(jint dst_xoffset, jint dst_yoffset, for (int j=dst_xoffset; j < xlimit; j++) { mask = *src++; if (mask < maxValue) { - mask = mask << zshift; + mask = mask << zshift; } else { mask = ddpf.dwZBitMask; } @@ -9698,7 +9698,7 @@ void copyDepthToSurfaceAlways(jint dst_xoffset, jint dst_yoffset, for (int j=dst_xoffset; j < xlimit; j++) { mask = *src++; if (mask < maxValue) { - mask = mask << zshift; + mask = mask << zshift; } else { mask = ddpf.dwZBitMask; } @@ -9718,7 +9718,7 @@ void copyDepthToSurfaceAlways(jint dst_xoffset, jint dst_yoffset, for (int j=dst_xoffset; j < xlimit; j++) { mask = *src++; if (mask < maxValue) { - mask = mask << zshift; + mask = mask << zshift; } else { mask = ddpf.dwZBitMask; } @@ -9749,7 +9749,7 @@ void copyDepthToSurfaceAlways(jint dst_xoffset, jint dst_yoffset, hr = surf->UnlockRect(); if (FAILED(hr)) { - printf("Fail to unlock depth surface: %s\n", DXGetErrorString8(hr)); + printf("Fail to unlock depth surface: %s\n", DXGetErrorString9(hr)); return; } @@ -9762,14 +9762,14 @@ void copyDepthToSurfaceAlways(jint dst_xoffset, jint dst_yoffset, jint src_xoffset, jint src_yoffset, jint subWidth, jint subHeight, jint src_width, jint src_height, - jfloat *data, - LPDIRECT3DSURFACE8 surf) + jfloat *data, + LPDIRECT3DSURFACE9 surf) { D3DSURFACE_DESC ddsd; DEPTHPIXELFORMAT ddpf; - D3DLOCKED_RECT lockedRect; + D3DLOCKED_RECT lockedRect; HRESULT hr; - + if (surf == NULL) { return; } @@ -9791,12 +9791,12 @@ void copyDepthToSurfaceAlways(jint dst_xoffset, jint dst_yoffset, if (FAILED(hr)) { if (debug) { - printf("Fail to lock depth surface: %s\n", DXGetErrorString8(hr)); + printf("Fail to lock depth surface: %s\n", DXGetErrorString9(hr)); } return; } jfloat *src; - jfloat *srcRow = data + src_xoffset + + jfloat *srcRow = data + src_xoffset + (src_yoffset + subHeight-1)*src_width; unsigned char *dst; unsigned char *destRow = ((unsigned char *) lockedRect.pBits) + @@ -9805,7 +9805,7 @@ void copyDepthToSurfaceAlways(jint dst_xoffset, jint dst_yoffset, int zshift = firstBit(ddpf.dwZBitMask); DWORD mask; int maxValue = ddpf.dwZBitMask >> zshift; - float maxdepth = 1 << ddpf.dwZBufferBitDepth; + float maxdepth = float( 1 << ddpf.dwZBufferBitDepth); if ((ddpf.dwZBufferBitDepth <= 32) && (ddpf.dwZBufferBitDepth > 24)) { @@ -9814,9 +9814,9 @@ void copyDepthToSurfaceAlways(jint dst_xoffset, jint dst_yoffset, src = srcRow; dst = destRow; for (int j=dst_xoffset; j < xlimit; j++) { - mask = (DWORD) (*src++)*maxdepth; + mask = DWORD((*src++)*maxdepth); if (mask < maxValue) { - mask = mask << zshift; + mask = mask << zshift; } else { mask = ddpf.dwZBitMask; } @@ -9835,9 +9835,9 @@ void copyDepthToSurfaceAlways(jint dst_xoffset, jint dst_yoffset, src = srcRow; dst = destRow; for (int j=dst_xoffset; j < xlimit; j++) { - mask = (DWORD) (*src++)*maxdepth; + mask = DWORD((*src++)*maxdepth); if (mask < maxValue) { - mask = mask << zshift; + mask = mask << zshift; } else { mask = ddpf.dwZBitMask; } @@ -9855,9 +9855,9 @@ void copyDepthToSurfaceAlways(jint dst_xoffset, jint dst_yoffset, src = srcRow; dst = destRow; for (int j=dst_xoffset; j < xlimit; j++) { - mask = (DWORD) (*src++)*maxdepth; + mask = DWORD((*src++)*maxdepth); if (mask < maxValue) { - mask = mask << zshift; + mask = mask << zshift; } else { mask = ddpf.dwZBitMask; } @@ -9873,7 +9873,7 @@ void copyDepthToSurfaceAlways(jint dst_xoffset, jint dst_yoffset, src = srcRow; dst = destRow; for (int j=dst_xoffset; j < xlimit; j++) { - mask = (DWORD) (*src++)*maxdepth; + mask = DWORD((*src++)*maxdepth); if (mask < maxValue) { *dst++ = (byte) ((mask << zshift) & 0xff); } else { @@ -9888,7 +9888,7 @@ void copyDepthToSurfaceAlways(jint dst_xoffset, jint dst_yoffset, hr = surf->UnlockRect(); if (FAILED(hr)) { - printf("Fail to unlock depth surface: %s\n", DXGetErrorString8(hr)); + printf("Fail to unlock depth surface: %s\n", DXGetErrorString9(hr)); return; } @@ -9900,14 +9900,14 @@ void copyDepthToSurfaceCmp(jint dst_xoffset, jint dst_yoffset, jint src_xoffset, jint src_yoffset, jint subWidth, jint subHeight, jint src_width, jint src_height, - jint *data, - LPDIRECT3DSURFACE8 surf) + jint *data, + LPDIRECT3DSURFACE9 surf) { D3DSURFACE_DESC ddsd; DEPTHPIXELFORMAT ddpf; - D3DLOCKED_RECT lockedRect; + D3DLOCKED_RECT lockedRect; HRESULT hr; - + if (surf == NULL) { return; } @@ -9929,13 +9929,13 @@ void copyDepthToSurfaceCmp(jint dst_xoffset, jint dst_yoffset, if (FAILED(hr)) { if (debug) { - printf("Fail to lock depth surface: %s\n", DXGetErrorString8(hr)); + printf("Fail to lock depth surface: %s\n", DXGetErrorString9(hr)); } return; } jint *src; - jint *srcRow = data + src_xoffset + + jint *srcRow = data + src_xoffset + (src_yoffset + subHeight-1)*src_width; unsigned char *dst; unsigned char *destRow = ((unsigned char *) lockedRect.pBits) + @@ -9960,14 +9960,14 @@ void copyDepthToSurfaceCmp(jint dst_xoffset, jint dst_yoffset, b2 = *dst++; b3 = *dst++; b4 = *dst++; - zmask = (b4 << 24) | (b3 << 16) | + zmask = (b4 << 24) | (b3 << 16) | (b2 << 8) | b1; zmask = (zmask & ddpf.dwZBitMask) >> zshift; mask = *src++; - if (mask < zmask) { + if (mask < zmask) { // z depth test pass if (mask < maxValue) { - mask = mask << zshift; + mask = mask << zshift; } else { mask = ddpf.dwZBitMask; } @@ -9976,7 +9976,7 @@ void copyDepthToSurfaceCmp(jint dst_xoffset, jint dst_yoffset, *dst++ = (byte) ((mask >> 8) & 0xff); *dst++ = (byte) ((mask >> 16) & 0xff); *dst++ = (byte) ((mask >> 24) & 0xff); - } + } } srcRow -= src_width; destRow += lockedRect.Pitch; @@ -9991,16 +9991,16 @@ void copyDepthToSurfaceCmp(jint dst_xoffset, jint dst_yoffset, b1 = *dst++; b2 = *dst++; b3 = *dst++; - zmask = (b3 << 16) | (b2 << 8) | b1; + zmask = (b3 << 16) | (b2 << 8) | b1; zmask = (zmask & ddpf.dwZBitMask) >> zshift; mask = *src++; - if (mask < zmask) { + if (mask < zmask) { if (mask < maxValue) { - mask = mask << zshift; + mask = mask << zshift; } else { mask = ddpf.dwZBitMask; } - dst -= 3; + dst -= 3; *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); *dst++ = (byte) ((mask >> 16) & 0xff); @@ -10018,12 +10018,12 @@ void copyDepthToSurfaceCmp(jint dst_xoffset, jint dst_yoffset, for (int j=dst_xoffset; j < xlimit; j++) { b1 = *dst++; b2 = *dst++; - zmask = (b2 << 8) | b1; + zmask = (b2 << 8) | b1; zmask = (zmask & ddpf.dwZBitMask) >> zshift; mask = *src++; - if (mask < zmask) { + if (mask < zmask) { if (mask < maxValue) { - mask = mask << zshift; + mask = mask << zshift; } else { mask = ddpf.dwZBitMask; } @@ -10043,7 +10043,7 @@ void copyDepthToSurfaceCmp(jint dst_xoffset, jint dst_yoffset, for (int j=dst_xoffset; j < xlimit; j++) { zmask = (*dst++ & ddpf.dwZBitMask) >> zshift; mask = *src++; - if (mask < zmask) { + if (mask < zmask) { dst--; if (mask < maxValue) { *dst++ = (byte) ((mask << zshift) & 0xff); @@ -10060,7 +10060,7 @@ void copyDepthToSurfaceCmp(jint dst_xoffset, jint dst_yoffset, hr = surf->UnlockRect(); if (FAILED(hr)) { - printf("Fail to unlock depth surface: %s\n", DXGetErrorString8(hr)); + printf("Fail to unlock depth surface: %s\n", DXGetErrorString9(hr)); return; } @@ -10073,14 +10073,14 @@ void copyDepthToSurfaceCmp(jint dst_xoffset, jint dst_yoffset, jint src_xoffset, jint src_yoffset, jint subWidth, jint subHeight, jint src_width, jint src_height, - jfloat *data, - LPDIRECT3DSURFACE8 surf) + jfloat *data, + LPDIRECT3DSURFACE9 surf) { D3DSURFACE_DESC ddsd; DEPTHPIXELFORMAT ddpf; - D3DLOCKED_RECT lockedRect; + D3DLOCKED_RECT lockedRect; HRESULT hr; - + if (surf == NULL) { return; } @@ -10102,12 +10102,12 @@ void copyDepthToSurfaceCmp(jint dst_xoffset, jint dst_yoffset, if (FAILED(hr)) { if (debug) { - printf("Fail to lock depth surface: %s\n", DXGetErrorString8(hr)); + printf("Fail to lock depth surface: %s\n", DXGetErrorString9(hr)); } return; } jfloat *src; - jfloat *srcRow = data + src_xoffset + + jfloat *srcRow = data + src_xoffset + (src_yoffset + subHeight-1)*src_width; unsigned char *dst; unsigned char *destRow = ((unsigned char *) lockedRect.pBits) + @@ -10118,7 +10118,7 @@ void copyDepthToSurfaceCmp(jint dst_xoffset, jint dst_yoffset, DWORD b1, b2, b3, b4; DWORD zmask; int maxValue = ddpf.dwZBitMask >> zshift; - float maxdepth = 1 << ddpf.dwZBufferBitDepth; + float maxdepth = float(1 << ddpf.dwZBufferBitDepth); if ((ddpf.dwZBufferBitDepth <= 32) && (ddpf.dwZBufferBitDepth > 24)) { @@ -10131,14 +10131,14 @@ void copyDepthToSurfaceCmp(jint dst_xoffset, jint dst_yoffset, b2 = *dst++; b3 = *dst++; b4 = *dst++; - zmask = (b4 << 24) | (b3 << 16) | + zmask = (b4 << 24) | (b3 << 16) | (b2 << 8) | b1; zmask = (zmask & ddpf.dwZBitMask) >> zshift; - mask = (DWORD) (*src++)*maxdepth; - if (mask < zmask) { + mask = DWORD((*src++)*maxdepth); + if (mask < zmask) { // z depth test pass if (mask < maxValue) { - mask = mask << zshift; + mask = mask << zshift; } else { mask = ddpf.dwZBitMask; } @@ -10147,7 +10147,7 @@ void copyDepthToSurfaceCmp(jint dst_xoffset, jint dst_yoffset, *dst++ = (byte) ((mask >> 8) & 0xff); *dst++ = (byte) ((mask >> 16) & 0xff); *dst++ = (byte) ((mask >> 24) & 0xff); - } + } } srcRow -= src_width; destRow += lockedRect.Pitch; @@ -10162,16 +10162,16 @@ void copyDepthToSurfaceCmp(jint dst_xoffset, jint dst_yoffset, b1 = *dst++; b2 = *dst++; b3 = *dst++; - zmask = (b3 << 16) | (b2 << 8) | b1; + zmask = (b3 << 16) | (b2 << 8) | b1; zmask = (zmask & ddpf.dwZBitMask) >> zshift; - mask = (DWORD) (*src++)*maxdepth; - if (mask < zmask) { + mask = DWORD((*src++)*maxdepth); + if (mask < zmask) { if (mask < maxValue) { - mask = mask << zshift; + mask = mask << zshift; } else { mask = ddpf.dwZBitMask; } - dst -= 3; + dst -= 3; *dst++ = (byte) (mask & 0xff); *dst++ = (byte) ((mask >> 8) & 0xff); *dst++ = (byte) ((mask >> 16) & 0xff); @@ -10189,12 +10189,12 @@ void copyDepthToSurfaceCmp(jint dst_xoffset, jint dst_yoffset, for (int j=dst_xoffset; j < xlimit; j++) { b1 = *dst++; b2 = *dst++; - zmask = (b2 << 8) | b1; + zmask = (b2 << 8) | b1; zmask = (zmask & ddpf.dwZBitMask) >> zshift; - mask = (DWORD) (*src++)*maxdepth; - if (mask < zmask) { + mask = DWORD((*src++)*maxdepth); + if (mask < zmask) { if (mask < maxValue) { - mask = mask << zshift; + mask = mask << zshift; } else { mask = ddpf.dwZBitMask; } @@ -10213,8 +10213,8 @@ void copyDepthToSurfaceCmp(jint dst_xoffset, jint dst_yoffset, dst = destRow; for (int j=dst_xoffset; j < xlimit; j++) { zmask = (*dst++ & ddpf.dwZBitMask) >> zshift; - mask = (DWORD) (*src++)*maxdepth; - if (mask < zmask) { + mask = DWORD((*src++)*maxdepth); + if (mask < zmask) { dst--; if (mask < maxValue) { *dst++ = (byte) ((mask << zshift) & 0xff); @@ -10231,7 +10231,7 @@ void copyDepthToSurfaceCmp(jint dst_xoffset, jint dst_yoffset, hr = surf->UnlockRect(); if (FAILED(hr)) { - printf("Fail to unlock depth surface: %s\n", DXGetErrorString8(hr)); + printf("Fail to unlock depth surface: %s\n", DXGetErrorString9(hr)); return; } @@ -10240,13 +10240,13 @@ void copyDepthToSurfaceCmp(jint dst_xoffset, jint dst_yoffset, // copy data to DirectDraw depth surface from memory // and reverse the Y axis void copyDepthToSurface(D3dCtx *d3dCtx, - LPDIRECT3DDEVICE8 device, + LPDIRECT3DDEVICE9 device, jint dst_xoffset, jint dst_yoffset, jint src_xoffset, jint src_yoffset, jint subWidth, jint subHeight, jint src_width, jint src_height, - jint *data, - LPDIRECT3DSURFACE8 surf) + jint *data, + LPDIRECT3DSURFACE9 surf) { if (!d3dCtx->zWriteEnable) { @@ -10260,7 +10260,7 @@ void copyDepthToSurface(D3dCtx *d3dCtx, src_width, src_height, data, surf); } else { - // Currently ZFUNC must be D3DCMP_LESS + // Currently ZFUNC must be D3DCMP_LESS copyDepthToSurfaceCmp(dst_xoffset, dst_yoffset, src_xoffset, src_yoffset, subWidth, subHeight, @@ -10273,13 +10273,13 @@ void copyDepthToSurface(D3dCtx *d3dCtx, // copy data to DirectDraw depth surface from memory // and reverse the Y axis void copyDepthToSurface(D3dCtx *d3dCtx, - LPDIRECT3DDEVICE8 device, + LPDIRECT3DDEVICE9 device, jint dst_xoffset, jint dst_yoffset, jint src_xoffset, jint src_yoffset, jint subWidth, jint subHeight, jint src_width, jint src_height, - jfloat *data, - LPDIRECT3DSURFACE8 surf) + jfloat *data, + LPDIRECT3DSURFACE9 surf) { if (!d3dCtx->zWriteEnable) { return; @@ -10292,7 +10292,7 @@ void copyDepthToSurface(D3dCtx *d3dCtx, src_width, src_height, data, surf); } else { - // Currently ZFUNC must be D3DCMP_LESS + // Currently ZFUNC must be D3DCMP_LESS copyDepthToSurfaceCmp(dst_xoffset, dst_yoffset, src_xoffset, src_yoffset, subWidth, subHeight, @@ -10305,12 +10305,12 @@ void copyDepthToSurface(D3dCtx *d3dCtx, void compositeDataToSurface(jint px, jint py, jint xoffset, jint yoffset, jint subWidth, jint subHeight, - jint dataWidth, - jbyte *data, - LPDIRECT3DSURFACE8 surf) + jint dataWidth, + jbyte *data, + LPDIRECT3DSURFACE9 surf) { D3DSURFACE_DESC ddsd; - D3DLOCKED_RECT lockedRect; + D3DLOCKED_RECT lockedRect; PIXELFORMAT ddpf; HRESULT hr; @@ -10334,7 +10334,7 @@ void compositeDataToSurface(jint px, jint py, hr = surf->LockRect(&lockedRect, NULL, 0); if (FAILED(hr)) { - printf("Fail to lock rendering surface: %s\n", DXGetErrorString8(hr)); + printf("Fail to lock rendering surface: %s\n", DXGetErrorString9(hr)); return; } @@ -10344,8 +10344,8 @@ void compositeDataToSurface(jint px, jint py, DWORD srcPitch; int offset = (xoffset + yoffset*dataWidth) << 2; unsigned char *srcRow = (unsigned char *) data + offset; - unsigned char *destRow = ((unsigned char *) lockedRect.pBits) + - ((px + xoffset) << 2) + (py + yoffset)*lockedRect.Pitch; + unsigned char *destRow = ((unsigned char *) lockedRect.pBits) + + ((px + xoffset) << 2) + (py + yoffset)*lockedRect.Pitch; unsigned char a2; float inv = 1.0f/255.0f; ddpf.noAlpha = true; @@ -10353,7 +10353,7 @@ void compositeDataToSurface(jint px, jint py, if (ddpf.dwRGBAlphaBitMask != 0) { ddpf.noAlpha = false; } - + srcPitch = dataWidth << 2; if ((ddpf.dwRGBBitCount == 32) && @@ -10378,13 +10378,13 @@ void compositeDataToSurface(jint px, jint py, *dst++ = 0xff; } else { a2 = 255-a; - *dst++ = (*dst * a2 + b * a)*inv; - *dst++ = (*dst * a2 + g * a)*inv; - *dst++ = (*dst * a2 + r * a)*inv; + *dst++ = (unsigned char)((*dst * a2 + b * a)*inv); + *dst++ = (unsigned char)((*dst * a2 + g * a)*inv); + *dst++ = (unsigned char)((*dst * a2 + r * a)*inv); if (ddpf.noAlpha) { *dst++ = a; } else { - *dst++ = (*dst * a2 + a * a)*inv; + *dst++ = (unsigned char)((*dst * a2 + a * a)*inv); } } } else { @@ -10392,22 +10392,22 @@ void compositeDataToSurface(jint px, jint py, } } srcRow += srcPitch; - destRow += lockedRect.Pitch; + destRow += lockedRect.Pitch; } } else { // handle less common (even weird) format int rshift = firstBit(ddpf.dwRBitMask) + - countBits(ddpf.dwRBitMask) - 8; - int gshift = firstBit(ddpf.dwGBitMask) + - countBits(ddpf.dwGBitMask) - 8; + ucountBits(ddpf.dwRBitMask) - 8; + int gshift = firstBit(ddpf.dwGBitMask) + + ucountBits(ddpf.dwGBitMask) - 8; int bshift = firstBit(ddpf.dwBBitMask) + - countBits(ddpf.dwBBitMask) - 8; + ucountBits(ddpf.dwBBitMask) - 8; int ashift = firstBit(ddpf.dwRGBAlphaBitMask) + - countBits(ddpf.dwRGBAlphaBitMask) - 8; + ucountBits(ddpf.dwRGBAlphaBitMask) - 8; DWORD mask, dmask; DWORD dr, dg, db, da; - if ((ddpf.dwRGBBitCount <= 32) && + if ((ddpf.dwRGBBitCount <= 32) && (ddpf.dwRGBBitCount > 24)) { for (int i=yoffset; i < ylimit; i++) { src = srcRow; @@ -10422,7 +10422,7 @@ void compositeDataToSurface(jint px, jint py, if (a != 0xff) { dmask = (*(dst+3) << 24) | (*(dst+2) << 16) | - (*(dst+1) << 8) | + (*(dst+1) << 8) | *dst; if (rshift >= 0) { dr = (byte) ((dmask & ddpf.dwRBitMask) >> @@ -10454,12 +10454,12 @@ void compositeDataToSurface(jint px, jint py, da = (byte) ((dmask & ddpf.dwRGBAlphaBitMask) << -ashift); } - a = (da * a2 + a * a)*inv; + a = DWORD((da * a2 + a * a)*inv); } - g = (dg * a2 + g * a)*inv; - b = (db * a2 + b * a)*inv; - r = (dr * a2 + r * a)*inv; + g = DWORD((dg * a2 + g * a)*inv); + b = DWORD((db * a2 + b * a)*inv); + r = DWORD((dr * a2 + r * a)*inv); } if (rshift >= 0) { mask = (r << rshift) & ddpf.dwRBitMask; @@ -10492,7 +10492,7 @@ void compositeDataToSurface(jint px, jint py, } } srcRow += srcPitch; - destRow += lockedRect.Pitch; + destRow += lockedRect.Pitch; } } else if ((ddpf.dwRGBBitCount <= 24) && (ddpf.dwRGBBitCount > 16)) { @@ -10539,11 +10539,11 @@ void compositeDataToSurface(jint px, jint py, da = (byte) ((dmask & ddpf.dwRGBAlphaBitMask) << -ashift); } - a = (da * a2 + a * a)*inv; + a = DWORD((da * a2 + a * a)*inv); } - g = (dg * a2 + g * a)*inv; - b = (db * a2 + b * a)*inv; - r = (dr * a2 + r * a)*inv; + g = DWORD((dg * a2 + g * a)*inv); + b = DWORD((db * a2 + b * a)*inv); + r = DWORD((dr * a2 + r * a)*inv); } if (rshift >= 0) { mask = (r << rshift) & ddpf.dwRBitMask; @@ -10575,7 +10575,7 @@ void compositeDataToSurface(jint px, jint py, } } srcRow += srcPitch; - destRow += lockedRect.Pitch; + destRow += lockedRect.Pitch; } } else if ((ddpf.dwRGBBitCount <= 16) && (ddpf.dwRGBBitCount > 8)) { @@ -10624,12 +10624,12 @@ void compositeDataToSurface(jint px, jint py, da = (byte) ((dmask & ddpf.dwRGBAlphaBitMask) << -ashift); } - a = (da * a2 + a * a)*inv; - } + a = DWORD( (da * a2 + a * a)*inv); + } - g = (dg * a2 + g * a)*inv; - b = (db * a2 + b * a)*inv; - r = (dr * a2 + r * a)*inv; + g = DWORD((dg * a2 + g * a)*inv); + b = DWORD((db * a2 + b * a)*inv); + r = DWORD((dr * a2 + r * a)*inv); } if (rshift >= 0) { @@ -10662,7 +10662,7 @@ void compositeDataToSurface(jint px, jint py, } } srcRow += srcPitch; - destRow += lockedRect.Pitch; + destRow += lockedRect.Pitch; } } else if (ddpf.dwRGBBitCount <= 8) { for (int i=yoffset; i < ylimit; i++) { @@ -10706,12 +10706,12 @@ void compositeDataToSurface(jint px, jint py, da = (byte) ((dmask & ddpf.dwRGBAlphaBitMask) << -ashift); } - a = (da * a2 + a * a)*inv; + a = DWORD((da * a2 + a * a)*inv); } - g = (dg * a2 + g * a)*inv; - b = (db * a2 + b * a)*inv; - r = (dr * a2 + r * a)*inv; + g = DWORD((dg * a2 + g * a)*inv); + b = DWORD((db * a2 + b * a)*inv); + r = DWORD((dr * a2 + r * a)*inv); } if (rshift >= 0) { mask = (r << rshift) & ddpf.dwRBitMask; @@ -10741,19 +10741,19 @@ void compositeDataToSurface(jint px, jint py, } } srcRow += srcPitch; - destRow += lockedRect.Pitch; + destRow += lockedRect.Pitch; } - } else { - // should not happen, RGBBitCount > 32. Even DirectX + } else { + // should not happen, RGBBitCount > 32. Even DirectX // RGB mask can't address it. - printf("Texture memory with RGBBitCount = %d not support. \n", + printf("Texture memory with RGBBitCount = %d not support. \n", ddpf.dwRGBBitCount); } } hr = surf->UnlockRect(); if (FAILED(hr)) { - printf("Fail to unlock rendering surface: %s\n", DXGetErrorString8(hr)); + printf("Fail to unlock rendering surface: %s\n", DXGetErrorString9(hr)); return; } } @@ -10767,13 +10767,13 @@ void copyDataToVolume(jint storedFormat, jint imgZOffset, jint subWidth, jint subHeight, jint subDepth, jint tilew, jint tileh, - jbyte* data, - LPDIRECT3DVOLUMETEXTURE8 surf, + jbyte* data, + LPDIRECT3DVOLUMETEXTURE9 surf, jint level) { D3DVOLUME_DESC ddsd; - D3DLOCKED_BOX lockedBox; + D3DLOCKED_BOX lockedBox; PIXELFORMAT ddpf; HRESULT hr; UINT i; @@ -10792,7 +10792,7 @@ void copyDataToVolume(jint storedFormat, // case the hardware memory buffer may smaller than the // texture pass in. - if ((xoffset >= width) || + if ((xoffset >= width) || (yoffset >= height) || (zoffset >= depth)) { return; @@ -10806,7 +10806,7 @@ void copyDataToVolume(jint storedFormat, if (FAILED(hr)) { - printf("Fail to lock volume: %s\n", DXGetErrorString8(hr)); + printf("Fail to lock volume: %s\n", DXGetErrorString9(hr)); return; } @@ -10824,12 +10824,12 @@ void copyDataToVolume(jint storedFormat, srcSlicePitch <<= 2; for (i = zoffset; i < zlimit; i++) { - copyDataToSurfaceRGBA(internalFormat, &ddpf, + copyDataToSurfaceRGBA(internalFormat, &ddpf, p, lockedBox.RowPitch, data, - xoffset, yoffset, - xlimit, ylimit, + xoffset, yoffset, + xlimit, ylimit, tilew); p += lockedBox.SlicePitch; data += srcSlicePitch; @@ -10841,12 +10841,12 @@ void copyDataToVolume(jint storedFormat, srcSlicePitch *= 3; for (i = zoffset; i < zlimit; i++) { - copyDataToSurfaceRGB(internalFormat, &ddpf, + copyDataToSurfaceRGB(internalFormat, &ddpf, p, lockedBox.RowPitch, data, - xoffset, yoffset, - xlimit, ylimit, + xoffset, yoffset, + xlimit, ylimit, tilew); p += lockedBox.SlicePitch; data += srcSlicePitch; @@ -10857,12 +10857,12 @@ void copyDataToVolume(jint storedFormat, srcSlicePitch <<= 2; for (i = zoffset; i < zlimit; i++) { - copyDataToSurfaceABGR(internalFormat, &ddpf, + copyDataToSurfaceABGR(internalFormat, &ddpf, p, lockedBox.RowPitch, data, - xoffset, yoffset, - xlimit, ylimit, + xoffset, yoffset, + xlimit, ylimit, tilew); p += lockedBox.SlicePitch; data += srcSlicePitch; @@ -10873,11 +10873,11 @@ void copyDataToVolume(jint storedFormat, srcSlicePitch *= 3; for (i = zoffset; i < zlimit; i++) { - copyDataToSurfaceBGR(internalFormat, &ddpf, + copyDataToSurfaceBGR(internalFormat, &ddpf, p, lockedBox.RowPitch, data, - xoffset, yoffset, + xoffset, yoffset, xlimit, ylimit, tilew); p += lockedBox.SlicePitch; @@ -10889,12 +10889,12 @@ void copyDataToVolume(jint storedFormat, srcSlicePitch <<= 1; for (i = zoffset; i < zlimit; i++) { - copyDataToSurfaceLA(internalFormat, &ddpf, + copyDataToSurfaceLA(internalFormat, &ddpf, p, lockedBox.RowPitch, data, - xoffset, yoffset, - xlimit, ylimit, + xoffset, yoffset, + xlimit, ylimit, tilew); p += lockedBox.SlicePitch; data += srcSlicePitch; @@ -10908,8 +10908,8 @@ void copyDataToVolume(jint storedFormat, p, lockedBox.RowPitch, data, - xoffset, yoffset, - xlimit, ylimit, + xoffset, yoffset, + xlimit, ylimit, tilew); p += lockedBox.SlicePitch; data += srcSlicePitch; @@ -10922,7 +10922,7 @@ void copyDataToVolume(jint storedFormat, hr = surf->UnlockBox(level); if (FAILED(hr)) { - printf("Fail to unlock volume: %s\n", DXGetErrorString8(hr)); + printf("Fail to unlock volume: %s\n", DXGetErrorString9(hr)); return; } } @@ -10936,12 +10936,12 @@ void copyDataToVolume(jint storedFormat, jint imgZOffset, jint subWidth, jint subHeight, jint subDepth, jint tilew, jint tileh, - jshort* data, - LPDIRECT3DVOLUMETEXTURE8 surf, + jshort* data, + LPDIRECT3DVOLUMETEXTURE9 surf, jint level) { D3DVOLUME_DESC ddsd; - D3DLOCKED_BOX lockedBox; + D3DLOCKED_BOX lockedBox; PIXELFORMAT ddpf; HRESULT hr; UINT i; @@ -10958,7 +10958,7 @@ void copyDataToVolume(jint storedFormat, computePixelFormat(&ddpf, ddsd.Format); - if ((xoffset >= width) || + if ((xoffset >= width) || (yoffset >= height) || (zoffset >= depth)) { return; @@ -10972,7 +10972,7 @@ void copyDataToVolume(jint storedFormat, hr = surf->LockBox(level, &lockedBox, NULL, 0); if (FAILED(hr)) { - printf("Fail to lock volume: %s\n", DXGetErrorString8(hr)); + printf("Fail to lock volume: %s\n", DXGetErrorString9(hr)); return; } @@ -10984,12 +10984,12 @@ void copyDataToVolume(jint storedFormat, data += (imgOffset << 1); for (i = zoffset; i < zlimit; i++) { - copyDataToSurfaceGray(internalFormat, &ddpf, + copyDataToSurfaceGray(internalFormat, &ddpf, p, lockedBox.RowPitch, data, - xoffset, yoffset, - xlimit, ylimit, + xoffset, yoffset, + xlimit, ylimit, tilew); p += lockedBox.SlicePitch; data += srcSlicePitch; @@ -10997,13 +10997,13 @@ void copyDataToVolume(jint storedFormat, hr = surf->UnlockBox(level); if (FAILED(hr)) { - printf("Fail to unlock volume: %s\n", DXGetErrorString8(hr)); + printf("Fail to unlock volume: %s\n", DXGetErrorString9(hr)); return; } } -LPDIRECT3DTEXTURE8 createSurfaceFromImage(JNIEnv *env, +LPDIRECT3DTEXTURE9 createSurfaceFromImage(JNIEnv *env, jobject pa2d, jlong ctx, int width, @@ -11033,22 +11033,22 @@ LPDIRECT3DTEXTURE8 createSurfaceFromImage(JNIEnv *env, internalFormat = LUMINANCE_ALPHA; break; case FORMAT_BYTE_GRAY: - case FORMAT_USHORT_GRAY: + case FORMAT_USHORT_GRAY: internalFormat = LUMINANCE; break; default: printf("Format %d not support for Image Component\n", internalFormat); return NULL; } - - LPDIRECT3DTEXTURE8 surf; - surf = createTextureSurface(d3dCtx, 1, internalFormat, + LPDIRECT3DTEXTURE9 surf; + + surf = createTextureSurface(d3dCtx, 1, internalFormat, width, height); if (surf == NULL) { - return NULL; + return NULL; } if (imageYdown != NULL) { @@ -11058,7 +11058,7 @@ LPDIRECT3DTEXTURE8 createSurfaceFromImage(JNIEnv *env, copyDataToSurface(storedFormat, internalFormat, 0, 0, 0, 0, width, height, width, byteData, surf, 0); env->ReleasePrimitiveArrayCritical(imageYdown, byteData, 0); - + } else { jshort *shortData = (jshort *)(env->GetPrimitiveArrayCritical( imageYdown, NULL)); @@ -11070,23 +11070,24 @@ LPDIRECT3DTEXTURE8 createSurfaceFromImage(JNIEnv *env, return surf; } -VOID createLineModeIndexBuffer(D3dCtx *d3dCtx) +VOID createLineModeIndexBuffer(D3dCtx *d3dCtx) { HRESULT hr; WORD *wptr; hr = d3dCtx->pDevice->CreateIndexBuffer(6*sizeof(WORD), D3DUSAGE_WRITEONLY, - D3DFMT_INDEX16, + D3DFMT_INDEX16, D3DPOOL_DEFAULT, - &d3dCtx->lineModeIndexBuffer); + &d3dCtx->lineModeIndexBuffer, + NULL); if (FAILED(hr)) { D3dCtx::d3dWarning(CREATEINDEXVBFAIL, hr); return; } - hr = d3dCtx->lineModeIndexBuffer->Lock(0, 0, (BYTE **) &wptr, 0); + hr = d3dCtx->lineModeIndexBuffer->Lock(0, 0, (VOID **) &wptr, 0); if (FAILED(hr)) { D3dCtx::d3dWarning(LOCKINDEXVBFAIL, hr); return; @@ -11101,12 +11102,12 @@ VOID createLineModeIndexBuffer(D3dCtx *d3dCtx) d3dCtx->lineModeIndexBuffer->Unlock(); } -// Return TRUE if index is adjust smaller -BOOL createQuadIndices(D3dCtx *d3dCtx, int vcount) +// Return TRUE if index is adjust smaller +BOOL createQuadIndices(D3dCtx *d3dCtx, int vcount) { - DWORD dwIndexCount = (vcount*3) >> 1; + DWORD dwIndexCount = (vcount*3) >> 1; WORD *q; - LPDIRECT3DDEVICE8 device = d3dCtx->pDevice; + LPDIRECT3DDEVICE9 device = d3dCtx->pDevice; HRESULT hr; BOOL adjustIdx = FALSE; @@ -11119,31 +11120,33 @@ BOOL createQuadIndices(D3dCtx *d3dCtx, int vcount) if (dwIndexCount > d3dCtx->quadIndexBufferSize) { d3dCtx->freeResource(d3dCtx->quadIndexBuffer); - hr = device->CreateIndexBuffer(dwIndexCount*sizeof(WORD), + hr = device->CreateIndexBuffer(dwIndexCount*sizeof(WORD), D3DUSAGE_WRITEONLY, D3DFMT_INDEX16, D3DPOOL_MANAGED, - &d3dCtx->quadIndexBuffer); + &d3dCtx->quadIndexBuffer, + NULL); if (FAILED(hr)) { + printf("[Java3D] Error CREATEINDEXVBFAIL \n"); D3dCtx::d3dWarning(CREATEINDEXVBFAIL, hr); - d3dCtx->quadIndexBufferSize = 0; + d3dCtx->quadIndexBufferSize = 0; d3dCtx->quadIndexBuffer = NULL; - if (d3dCtx->quadIndexBufferSize > 0) { + if (d3dCtx->quadIndexBufferSize > 0) { // indices has successfully set before, we prevent // setting this when indices did not set before. // It is becasue there is a bug in Nvidia driver which // will crash in this case. - device->SetIndices(NULL, 0); + device->SetIndices(NULL); } return adjustIdx; - } + } d3dCtx->quadIndexBufferSize = dwIndexCount; - hr = d3dCtx->quadIndexBuffer->Lock(0, 0, (BYTE **) &q, 0); + hr = d3dCtx->quadIndexBuffer->Lock(0, 0, (VOID **) &q, 0); if (FAILED(hr)) { D3dCtx::d3dWarning(LOCKINDEXVBFAIL, hr); - if (d3dCtx->quadIndexBufferSize > 0) { - device->SetIndices(NULL, 0); + if (d3dCtx->quadIndexBufferSize > 0) { + device->SetIndices(NULL); } return adjustIdx; } @@ -11153,10 +11156,10 @@ BOOL createQuadIndices(D3dCtx *d3dCtx, int vcount) while (j < dwIndexCount) { q[j++] = ++i; // q[0] = 0 q[j++] = i+1; // q[1] = 1 - q[j++] = i+2; // q[2] = 2 - q[j++] = i++; // q[3] = 0 - q[j++] = ++i; // q[4] = 2 - q[j++] = ++i; // q[5] = 3 + q[j++] = i+2; // q[2] = 2 + q[j++] = i++; // q[3] = 0 + q[j++] = ++i; // q[4] = 2 + q[j++] = ++i; // q[5] = 3 } d3dCtx->quadIndexBuffer->Unlock(); @@ -11189,27 +11192,27 @@ int getPrimitiveNum(int primitive, int vcount) /* - * Note that tThe condition width == height always holds + * Note that tThe condition width == height always holds * when this function is invoked. */ -LPDIRECT3DCUBETEXTURE8 createCubeMapTexture(D3dCtx *d3dCtx, +LPDIRECT3DCUBETEXTURE9 createCubeMapTexture(D3dCtx *d3dCtx, jint numLevels, jint internalFormat, - jint width, + jint width, jint height) { - LPDIRECT3DCUBETEXTURE8 pTexture; + LPDIRECT3DCUBETEXTURE9 pTexture; D3DFORMAT format; HRESULT hr; - LPDIRECT3DDEVICE8 pDevice = d3dCtx->pDevice; + LPDIRECT3DDEVICE9 pDevice = d3dCtx->pDevice; D3dDeviceInfo *deviceInfo = d3dCtx->deviceInfo; if (!deviceInfo->supportMipmap) { numLevels = 1; - } + } - getTexWidthHeight(deviceInfo, &width, &height); + getTexWidthHeight(deviceInfo, &width, &height); format = getTexFormat(internalFormat); // If format not support, the utility function will adjust the @@ -11221,30 +11224,30 @@ LPDIRECT3DCUBETEXTURE8 createCubeMapTexture(D3dCtx *d3dCtx, if (FAILED(hr)) { if (debug) { printf("Fail to create cube texture surface %dx%d, format %d, level %d : %s\n", - width, height, format, numLevels, DXGetErrorString8(hr)); + width, height, format, numLevels, DXGetErrorString9(hr)); } return NULL; } - + return pTexture; } -void copyDataToCubeMap(jint storedFormat, +void copyDataToCubeMap(jint storedFormat, jint internalFormat, jint xoffset, jint yoffset, jint imgXOffset, jint imgYOffset, jint subWidth, jint subHeight, - jint tilew, - jshort *data, LPDIRECT3DCUBETEXTURE8 surf, + jint tilew, + jshort *data, LPDIRECT3DCUBETEXTURE9 surf, jint level, jint face) { D3DSURFACE_DESC ddsd; - D3DLOCKED_RECT lockedRect; + D3DLOCKED_RECT lockedRect; PIXELFORMAT ddpf; HRESULT hr; - + if (surf == NULL) { return; } @@ -11260,11 +11263,11 @@ void copyDataToCubeMap(jint storedFormat, DWORD xlimit = min(xoffset + subWidth, width); DWORD ylimit = min(yoffset + subHeight, height); - hr = surf->LockRect(textureCubeMapFace[face], level, + hr = surf->LockRect(textureCubeMapFace[face], level, &lockedRect, NULL, 0); if (FAILED(hr)) { - printf("Fail to lock surface: %s\n", DXGetErrorString8(hr)); + printf("Fail to lock surface: %s\n", DXGetErrorString9(hr)); return; } @@ -11272,25 +11275,25 @@ void copyDataToCubeMap(jint storedFormat, if ((face == D3DCUBEMAP_FACE_NEGATIVE_Y) || (face == D3DCUBEMAP_FACE_POSITIVE_Y)) { - copyDataToSurfaceGray(internalFormat, &ddpf, + copyDataToSurfaceGray(internalFormat, &ddpf, (unsigned char *) lockedRect.pBits, lockedRect.Pitch, - data + - ((offset+tilew*(ylimit-yoffset)) << 1), - xoffset, yoffset, + data + + ((offset+tilew*(ylimit-yoffset)) << 1), + xoffset, yoffset, xlimit, ylimit, -tilew); } else { - copyDataToSurfaceGrayRev(internalFormat, &ddpf, + copyDataToSurfaceGrayRev(internalFormat, &ddpf, (unsigned char *) lockedRect.pBits, lockedRect.Pitch, - data + (offset << 1), - xoffset, yoffset, + data + (offset << 1), + xoffset, yoffset, xlimit, ylimit, tilew); } hr = surf->UnlockRect(textureCubeMapFace[face], level); if (FAILED(hr)) { - printf("Fail to unlock surface: %s\n", DXGetErrorString8(hr)); + printf("Fail to unlock surface: %s\n", DXGetErrorString9(hr)); return; } } @@ -11301,17 +11304,17 @@ void copyDataToCubeMap(jint storedFormat, jint xoffset, jint yoffset, jint imgXOffset, jint imgYOffset, jint subWidth, jint subHeight, - jint tilew, - jbyte* data, - LPDIRECT3DCUBETEXTURE8 surf, + jint tilew, + jbyte* data, + LPDIRECT3DCUBETEXTURE9 surf, jint level, jint face) { D3DSURFACE_DESC ddsd; - D3DLOCKED_RECT lockedRect; + D3DLOCKED_RECT lockedRect; PIXELFORMAT ddpf; HRESULT hr; - + if (surf == NULL) { return; } @@ -11337,7 +11340,7 @@ void copyDataToCubeMap(jint storedFormat, if (FAILED(hr)) { - printf("Fail to lock surface: %s\n", DXGetErrorString8(hr)); + printf("Fail to lock surface: %s\n", DXGetErrorString9(hr)); return; } int offset = tilew*imgYOffset + imgXOffset; @@ -11347,118 +11350,118 @@ void copyDataToCubeMap(jint storedFormat, // This is the one we use when byReference = false if ((face == D3DCUBEMAP_FACE_NEGATIVE_Y) || (face == D3DCUBEMAP_FACE_POSITIVE_Y)) { - // Copy the pixel from bottom to up and + // Copy the pixel from bottom to up and // left to right in this case to match OGL definition - copyDataToSurfaceRGBA(internalFormat, &ddpf, + copyDataToSurfaceRGBA(internalFormat, &ddpf, (unsigned char *) lockedRect.pBits, lockedRect.Pitch, - data + + data + ((offset + tilew*(ylimit-yoffset-1)) << 2), - xoffset, yoffset, + xoffset, yoffset, xlimit, ylimit, -tilew); } else { - // Copy the pixel from up to bottom and + // Copy the pixel from up to bottom and // right to left in this case to match OGL definition - copyDataToSurfaceRGBARev(internalFormat, &ddpf, + copyDataToSurfaceRGBARev(internalFormat, &ddpf, (unsigned char *) lockedRect.pBits, lockedRect.Pitch, data + (offset << 2), - xoffset, yoffset, + xoffset, yoffset, xlimit, ylimit, tilew); } break; case FORMAT_BYTE_RGB: if ((face == D3DCUBEMAP_FACE_NEGATIVE_Y) || (face == D3DCUBEMAP_FACE_POSITIVE_Y)) { - copyDataToSurfaceRGB(internalFormat, &ddpf, + copyDataToSurfaceRGB(internalFormat, &ddpf, (unsigned char *) lockedRect.pBits, lockedRect.Pitch, - data + + data + 3*(offset + tilew*(ylimit-yoffset-1)), - xoffset, yoffset, + xoffset, yoffset, xlimit, ylimit, -tilew); } else { - copyDataToSurfaceRGBRev(internalFormat, &ddpf, + copyDataToSurfaceRGBRev(internalFormat, &ddpf, (unsigned char *) lockedRect.pBits, lockedRect.Pitch, data + 3*offset, - xoffset, yoffset, + xoffset, yoffset, xlimit, ylimit, tilew); } break; case FORMAT_BYTE_ABGR: if ((face == D3DCUBEMAP_FACE_NEGATIVE_Y) || (face == D3DCUBEMAP_FACE_POSITIVE_Y)) { - copyDataToSurfaceABGR(internalFormat, &ddpf, + copyDataToSurfaceABGR(internalFormat, &ddpf, (unsigned char *) lockedRect.pBits, lockedRect.Pitch, - data + - ((offset+tilew*(ylimit-yoffset-1)) << 2), - xoffset, yoffset, + data + + ((offset+tilew*(ylimit-yoffset-1)) << 2), + xoffset, yoffset, xlimit, ylimit, -tilew); } else { - copyDataToSurfaceABGRRev(internalFormat, &ddpf, + copyDataToSurfaceABGRRev(internalFormat, &ddpf, (unsigned char *) lockedRect.pBits, lockedRect.Pitch, - data + (offset << 2), - xoffset, yoffset, + data + (offset << 2), + xoffset, yoffset, xlimit, ylimit, tilew); } break; case FORMAT_BYTE_BGR: if ((face == D3DCUBEMAP_FACE_NEGATIVE_Y) || (face == D3DCUBEMAP_FACE_POSITIVE_Y)) { - copyDataToSurfaceBGR(internalFormat, &ddpf, + copyDataToSurfaceBGR(internalFormat, &ddpf, (unsigned char *) lockedRect.pBits, lockedRect.Pitch, - data + + data + 3*(offset + tilew*(ylimit-yoffset-1)), - xoffset, yoffset, + xoffset, yoffset, xlimit, ylimit, -tilew); } else { - copyDataToSurfaceBGRRev(internalFormat, &ddpf, + copyDataToSurfaceBGRRev(internalFormat, &ddpf, (unsigned char *) lockedRect.pBits, lockedRect.Pitch, - data + 3*offset, - xoffset, yoffset, + data + 3*offset, + xoffset, yoffset, xlimit, ylimit, tilew); } break; case FORMAT_BYTE_LA: if ((face == D3DCUBEMAP_FACE_NEGATIVE_Y) || (face == D3DCUBEMAP_FACE_POSITIVE_Y)) { - copyDataToSurfaceLA(internalFormat, &ddpf, + copyDataToSurfaceLA(internalFormat, &ddpf, (unsigned char *) lockedRect.pBits, lockedRect.Pitch, - data + - ((offset+tilew*(ylimit-yoffset-1)) << 1), - xoffset, yoffset, - xlimit, ylimit, -tilew); + data + + ((offset+tilew*(ylimit-yoffset-1)) << 1), + xoffset, yoffset, + xlimit, ylimit, -tilew); } else { - copyDataToSurfaceLARev(internalFormat, &ddpf, + copyDataToSurfaceLARev(internalFormat, &ddpf, (unsigned char *) lockedRect.pBits, lockedRect.Pitch, - data + (offset << 1), - xoffset, yoffset, + data + (offset << 1), + xoffset, yoffset, xlimit, ylimit, tilew); } break; case FORMAT_BYTE_GRAY: if ((face == D3DCUBEMAP_FACE_NEGATIVE_Y) || - (face == D3DCUBEMAP_FACE_POSITIVE_Y)) { + (face == D3DCUBEMAP_FACE_POSITIVE_Y)) { copyDataToSurfaceGray(internalFormat, &ddpf, (unsigned char *) lockedRect.pBits, lockedRect.Pitch, - data + - offset + tilew*(ylimit-yoffset-1), - xoffset, yoffset, + data + + offset + tilew*(ylimit-yoffset-1), + xoffset, yoffset, xlimit, ylimit, -tilew); } else { copyDataToSurfaceGrayRev(internalFormat, &ddpf, (unsigned char *) lockedRect.pBits, lockedRect.Pitch, - data + offset, - xoffset, yoffset, + data + offset, + xoffset, yoffset, xlimit, ylimit, tilew); } break; @@ -11469,54 +11472,57 @@ void copyDataToCubeMap(jint storedFormat, hr = surf->UnlockRect(textureCubeMapFace[face], level); if (FAILED(hr)) { - printf("Fail to unlock surface: %s\n", DXGetErrorString8(hr)); + printf("Fail to unlock surface: %s\n", DXGetErrorString9(hr)); return; } } void drawTextureRect(D3dCtx *d3dCtx, - LPDIRECT3DDEVICE8 device, - LPDIRECT3DTEXTURE8 surf, + LPDIRECT3DDEVICE9 device, + LPDIRECT3DTEXTURE9 surf, D3DTLVERTEX screenCoord, - int startx, int starty, + int startx, int starty, int endx, int endy, int scaleWidth, int scaleHeight, - boolean texModeRepeat) + boolean texModeRepeat) { - LPDIRECT3DTEXTURE8 texture = NULL; + LPDIRECT3DTEXTURE9 texture = NULL; DWORD transflag, minstate, magstate, texcoordstate; DWORD wrapU, wrapV; DWORD colorOp, colorArg, alphaOp, alphaArg; D3DMATRIX m; + magstate = 1; + minstate = 1; + int h = endy - starty; int w = endx - startx; device->SetRenderState(D3DRS_SPECULARENABLE, FALSE); - device->GetTexture(0, (LPDIRECT3DBASETEXTURE8 *) &texture); + device->GetTexture(0, (LPDIRECT3DBASETEXTURE9 *) &texture); device->GetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, &transflag); if (transflag != D3DTTFF_DISABLE) { device->GetTransform(D3DTS_TEXTURE0, &m); } - - device->GetTextureStageState(0, D3DTSS_MINFILTER, &minstate); - device->GetTextureStageState(0, D3DTSS_MAGFILTER, &magstate); + //alessandro + //device->GetTextureStageState(0, D3DTSS_MINFILTER, &minstate); + //device->GetTextureStageState(0, D3DTSS_MAGFILTER, &magstate); device->GetTextureStageState(0, D3DTSS_TEXCOORDINDEX, &texcoordstate); device->SetTexture(0, surf); device->SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_DISABLE); if ((w == scaleWidth) && (h == scaleHeight)) { - device->SetTextureStageState(0, D3DTSS_MINFILTER, D3DTEXF_POINT); - device->SetTextureStageState(0, D3DTSS_MAGFILTER, - D3DTEXF_POINT); + // alessandro + // device->SetTextureStageState(0, D3DTSS_MINFILTER, D3DTEXF_POINT); + // device->SetTextureStageState(0, D3DTSS_MAGFILTER, D3DTEXF_POINT); } else { - device->SetTextureStageState(0, D3DTSS_MINFILTER, D3DTEXF_LINEAR); - device->SetTextureStageState(0, D3DTSS_MAGFILTER, D3DTEXF_LINEAR); + // device->SetTextureStageState(0, D3DTSS_MINFILTER, D3DTEXF_LINEAR); + // device->SetTextureStageState(0, D3DTSS_MAGFILTER, D3DTEXF_LINEAR); } device->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0); device->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE); @@ -11550,10 +11556,10 @@ void drawTextureRect(D3dCtx *d3dCtx, // no need to draw multiple time tumax = scaleWidth/(float) ddsd.Width; tvmax = scaleHeight/(float) ddsd.Height; - device->GetTextureStageState(0, D3DTSS_ADDRESSU, &wrapU); - device->GetTextureStageState(0, D3DTSS_ADDRESSV, &wrapV); - device->SetTextureStageState(0, D3DTSS_ADDRESSU, D3DTADDRESS_WRAP); - device->SetTextureStageState(0, D3DTSS_ADDRESSV, D3DTADDRESS_WRAP); + device->GetSamplerState (0, D3DSAMP_ADDRESSU, &wrapU); + device->GetSamplerState (0, D3DSAMP_ADDRESSV, &wrapV); + device->SetSamplerState (0, D3DSAMP_ADDRESSU, D3DTADDRESS_WRAP); + device->SetSamplerState (0, D3DSAMP_ADDRESSV, D3DTADDRESS_WRAP); multipleDraw = false; } else { tumax = endx/(float) ddsd.Width; @@ -11562,7 +11568,7 @@ void drawTextureRect(D3dCtx *d3dCtx, } } else { tumax = endx/(float) ddsd.Width; - tvmax = endy/(float) ddsd.Height; + tvmax = endy/(float) ddsd.Height; multipleDraw = false; } @@ -11571,11 +11577,11 @@ void drawTextureRect(D3dCtx *d3dCtx, d3dCtx->rasterRect[0].tv = tvmax; d3dCtx->rasterRect[1].tu = tumin; d3dCtx->rasterRect[1].tv = tvmin; - d3dCtx->rasterRect[2].tu = tumax; - d3dCtx->rasterRect[2].tv = tvmax; - d3dCtx->rasterRect[3].tu = tumax; + d3dCtx->rasterRect[2].tu = tumax; + d3dCtx->rasterRect[2].tv = tvmax; + d3dCtx->rasterRect[3].tu = tumax; d3dCtx->rasterRect[3].tv = tvmin; - + d3dCtx->rasterRect[0].sx = screenCoord.sx; d3dCtx->rasterRect[0].sz = screenCoord.sz; d3dCtx->rasterRect[0].rhw = screenCoord.rhw; @@ -11593,7 +11599,11 @@ void drawTextureRect(D3dCtx *d3dCtx, d3dCtx->rasterRect[3].rhw = screenCoord.rhw; if ((h > 0) && (w > 0)) { - device->SetVertexShader(D3DFVF_XYZRHW|D3DFVF_TEX1); + //device->SetVertexShader(D3DFVF_XYZRHW|D3DFVF_TEX1); + //device->SetVertexShader(vertexFormat); + device->SetVertexShader(NULL); + device->SetFVF(D3DFVF_XYZRHW|D3DFVF_TEX1); + if (!multipleDraw) { d3dCtx->rasterRect[0].sy = screenCoord.sy + scaleHeight; d3dCtx->rasterRect[2].sx = screenCoord.sx + scaleWidth; @@ -11601,7 +11611,7 @@ void drawTextureRect(D3dCtx *d3dCtx, d3dCtx->rasterRect[3].sx = screenCoord.sx + scaleWidth; device->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, - d3dCtx->rasterRect, + d3dCtx->rasterRect, sizeof(D3DTLVERTEX)); } else { d3dCtx->rasterRect[0].sy = screenCoord.sy + h; @@ -11612,7 +11622,7 @@ void drawTextureRect(D3dCtx *d3dCtx, for (int j=0; j < ceil(scaleWidth/((double) w)); j++) { device->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, - d3dCtx->rasterRect, + d3dCtx->rasterRect, sizeof(D3DTLVERTEX)); d3dCtx->rasterRect[0].sx += w; d3dCtx->rasterRect[1].sx += w; @@ -11648,8 +11658,8 @@ void drawTextureRect(D3dCtx *d3dCtx, if (d3dCtx->fillMode != D3DFILL_SOLID) { device->SetRenderState(D3DRS_FILLMODE, d3dCtx->fillMode); } - device->SetTextureStageState(0, D3DTSS_MINFILTER, minstate); - device->SetTextureStageState(0, D3DTSS_MAGFILTER, magstate); + //device->SetTextureStageState(0, D3DTSS_MINFILTER, minstate); + //device->SetTextureStageState(0, D3DTSS_MAGFILTER, magstate); device->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, texcoordstate); device->SetTextureStageState(0, D3DTSS_COLOROP, colorOp); @@ -11658,9 +11668,23 @@ void drawTextureRect(D3dCtx *d3dCtx, device->SetTextureStageState(0, D3DTSS_ALPHAARG1, alphaArg); if (texModeRepeat && !multipleDraw) { - device->SetTextureStageState(0, D3DTSS_ADDRESSU, wrapU); - device->SetTextureStageState(0, D3DTSS_ADDRESSV, wrapV); + device->SetSamplerState (0, D3DSAMP_ADDRESSU, wrapU); + device->SetSamplerState (0, D3DSAMP_ADDRESSV, wrapV); } device->SetRenderState(D3DRS_CULLMODE, d3dCtx->cullMode); device->SetRenderState(D3DRS_SPECULARENABLE, TRUE); } + +DWORD ucountBits(DWORD mask) +{ + DWORD count = 0; + int i; + + for (i=sizeof(DWORD)*8-1; i >=0 ; i--) { + if ((mask & 0x01) > 0) { + count++; + } + mask >>= 1; + } + return count; +} diff --git a/src/native/d3d/D3dUtil.hpp b/src/native/d3d/D3dUtil.hpp index c91b26f..cb340d9 100644 --- a/src/native/d3d/D3dUtil.hpp +++ b/src/native/d3d/D3dUtil.hpp @@ -70,7 +70,7 @@ #define GetDevice() \ GetCtx() \ - LPDIRECT3DDEVICE8 device = d3dCtx->pDevice; \ + LPDIRECT3DDEVICE9 device = d3dCtx->pDevice; \ if (device == NULL) return; #define GetCtx2() \ @@ -80,7 +80,7 @@ #define GetDevice2() \ GetCtx2(); \ - LPDIRECT3DDEVICE8 device = d3dCtx->pDevice; \ + LPDIRECT3DDEVICE9 device = d3dCtx->pDevice; \ if (device == NULL) return 0; #define CopyColor(c, red, green, blue, alpha) \ @@ -118,6 +118,9 @@ extern vector<void *> freePointerList0; extern vector<void *> freePointerList1; extern BOOL useFreePointerList0; +//ISSUE 135 a iterator to void * +typedef vector<void *>::iterator ITER_VOID; + extern HANDLE hSema; // handle to semaphore extern BOOL firstError; extern BOOL debug; @@ -136,21 +139,21 @@ extern VOID lockGeometry(); extern VOID unlockGeometry(); extern VOID lockSurfaceList(); extern VOID unlockSurfaceList(); -extern VOID freeSurface(LPDIRECT3DBASETEXTURE8 surf); +extern VOID freeSurface(LPDIRECT3DBASETEXTURE9 surf); extern VOID freePointer(void* surf); extern VOID freePointerList(); extern VOID setWindowCallback(HWND topHwnd, HWND hwnd); extern char* getErrorMessage(int idx); extern HWND getTopWindow(HWND hwnd); -extern LPDIRECT3DTEXTURE8 createTextureSurface(D3dCtx *d3dCtx, +extern LPDIRECT3DTEXTURE9 createTextureSurface(D3dCtx *d3dCtx, jint numLevels, jint internalFormat, jint width, jint height); -extern LPDIRECT3DVOLUMETEXTURE8 createVolumeTexture(D3dCtx *d3dCtx, +extern LPDIRECT3DVOLUMETEXTURE9 createVolumeTexture(D3dCtx *d3dCtx, jint numLevels, jint internalFormat, jint width, @@ -158,7 +161,7 @@ extern LPDIRECT3DVOLUMETEXTURE8 createVolumeTexture(D3dCtx *d3dCtx, jint depth); -extern LPDIRECT3DCUBETEXTURE8 createCubeMapTexture(D3dCtx *d3dCtx, +extern LPDIRECT3DCUBETEXTURE9 createCubeMapTexture(D3dCtx *d3dCtx, jint numLevels, jint internalFormat, jint width, @@ -170,7 +173,7 @@ extern void copyDataToSurface(jint format, jint xoffset, jint yoffset, jint imgXOffset, jint imgYOffset, jint width, jint height, jint tilew, - jshort *data, LPDIRECT3DTEXTURE8 surf, + jshort *data, LPDIRECT3DTEXTURE9 surf, jint level); extern void copyDataToSurface(jint format, @@ -179,7 +182,7 @@ extern void copyDataToSurface(jint format, jint imgXOffset, jint imgYOffset, jint width, jint height, jint tilew, jbyte* data, - LPDIRECT3DTEXTURE8 surf, + LPDIRECT3DTEXTURE9 surf, jint level); extern void copyDataToVolume(jint format, @@ -190,7 +193,7 @@ extern void copyDataToVolume(jint format, jint imgZOffset, jint width, jint height, jint depth, jint tilew, jint tileh, - jshort *data, LPDIRECT3DVOLUMETEXTURE8 surf, + jshort *data, LPDIRECT3DVOLUMETEXTURE9 surf, jint level); @@ -203,7 +206,7 @@ extern void copyDataToVolume(jint format, jint width, jint height, jint depth, jint tilew, jint tileh, jbyte* data, - LPDIRECT3DVOLUMETEXTURE8 surf, + LPDIRECT3DVOLUMETEXTURE9 surf, jint level); extern void copyDataToCubeMap(jint format, @@ -212,7 +215,7 @@ extern void copyDataToCubeMap(jint format, jint imgXOffset, jint imgYOffset, jint width, jint height, jint tilew, - jshort *data, LPDIRECT3DCUBETEXTURE8 surf, + jshort *data, LPDIRECT3DCUBETEXTURE9 surf, jint level, jint face); @@ -224,7 +227,7 @@ extern void copyDataToCubeMap(jint format, jint width, jint height, jint tilew, jbyte* data, - LPDIRECT3DCUBETEXTURE8 surf, + LPDIRECT3DCUBETEXTURE9 surf, jint level, jint face); @@ -232,50 +235,50 @@ extern void copyDataToCubeMap(jint format, extern void copyDepthFromSurface(jint xoffset, jint yoffset, jint subWidth, jint subHeight, jint *data, - LPDIRECT3DSURFACE8 surf); + LPDIRECT3DSURFACE9 surf); extern void copyDepthFromSurface(jint xoffset, jint yoffset, jint subWidth, jint subHeight, jfloat *data, - LPDIRECT3DSURFACE8 surf); + LPDIRECT3DSURFACE9 surf); extern void copyDepthToSurface(D3dCtx *d3dCtx, - LPDIRECT3DDEVICE8 device, + LPDIRECT3DDEVICE9 device, jint dst_xoffset, jint dst_yoffset, jint src_xoffset, jint src_yoffset, jint subWidth, jint subHeight, jint src_width, jint src_height, jint *data, - LPDIRECT3DSURFACE8 surf); + LPDIRECT3DSURFACE9 surf); extern void copyDepthToSurface(D3dCtx *d3dCtx, - LPDIRECT3DDEVICE8 device, + LPDIRECT3DDEVICE9 device, jint dst_xoffset, jint dst_yoffset, jint src_xoffset, jint src_yoffset, jint subWidth, jint subHeight, jint src_width, jint src_height, jfloat *data, - LPDIRECT3DSURFACE8 surf); + LPDIRECT3DSURFACE9 surf); extern void copyDataFromSurface(jint internalFormat, jint xoffset, jint yoffset, jint width, jint height, - jbyte *data, LPDIRECT3DSURFACE8 surf); + jbyte *data, LPDIRECT3DSURFACE9 surf); void compositeDataToSurface(jint px, jint py, jint xoffset, jint yoffset, jint subWidth, jint subHeight, jint dataWidth, jbyte *data, - LPDIRECT3DSURFACE8 surf); + LPDIRECT3DSURFACE9 surf); // extern BOOL isIdentity(jdouble *matrix); -extern void CopyTextureStage(LPDIRECT3DDEVICE8 device, +extern void CopyTextureStage(LPDIRECT3DDEVICE9 device, int fromLevel, int toLevel); -extern LPDIRECT3DTEXTURE8 createSurfaceFromImage(JNIEnv *env, +extern LPDIRECT3DTEXTURE9 createSurfaceFromImage(JNIEnv *env, jobject pa2d, jlong ctx, int width, @@ -292,19 +295,20 @@ extern char *getSwapEffectName(D3DSWAPEFFECT swapEffect); extern int getPrimitiveNum(int primitive, int vcount); extern int getMaxNumVertex(int primitive, int vcount); extern void drawTextureRect(D3dCtx *d3dCtx, - LPDIRECT3DDEVICE8 device, - LPDIRECT3DTEXTURE8 tex, + LPDIRECT3DDEVICE9 device, + LPDIRECT3DTEXTURE9 tex, D3DTLVERTEX screenCoord, int startx, int starty, int endx, int endy, int scaleWidth, int scaleHeight, boolean texModeRepeat); extern int setTextureStage(D3dCtx *d3dCtx, - LPDIRECT3DDEVICE8 device, + LPDIRECT3DDEVICE9 device, int mapTexStage, jint texStage); extern void setTexTransformStageFlag(D3dCtx* d3dCtx, - LPDIRECT3DDEVICE8 device, + LPDIRECT3DDEVICE9 device, int tus, int ts, int genMode); +DWORD ucountBits(DWORD mask) ; #endif diff --git a/src/native/d3d/D3dVertexBuffer.cpp b/src/native/d3d/D3dVertexBuffer.cpp index a29cf09..45688ee 100644 --- a/src/native/d3d/D3dVertexBuffer.cpp +++ b/src/native/d3d/D3dVertexBuffer.cpp @@ -62,7 +62,7 @@ VOID D3dVertexBuffer::render(D3dCtx *d3dCtx) if ((buffer != NULL) && (numVertices != NULL)) { // device is already check for NULL in callDisplayList - LPDIRECT3DDEVICE8 device = d3dCtx->pDevice; + LPDIRECT3DDEVICE9 device = d3dCtx->pDevice; BOOL setAmbientLight = false; if (((vertexFormat & D3DFVF_DIFFUSE) == 0) && @@ -95,9 +95,10 @@ VOID D3dVertexBuffer::render(D3dCtx *d3dCtx) device->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID); if (d3dCtx->deviceInfo->maxPointSize < d3dCtx->pointSize) { // Use software vertex processing mode - device->SetRenderState(D3DRS_SOFTWAREVERTEXPROCESSING, - TRUE); + //device->SetRenderState(D3DRS_SOFTWAREVERTEXPROCESSING, TRUE); + device->SetSoftwareVertexProcessing(TRUE); } + oldPrimitiveType = primitiveType; // For Polygon D3DFill_POINT mode we need to // temporary switch primitive to point list @@ -106,9 +107,11 @@ VOID D3dVertexBuffer::render(D3dCtx *d3dCtx) } } - device->SetStreamSource(0, buffer, stride); - device->SetVertexShader(vertexFormat); - + device->SetStreamSource(0, buffer,0, stride); + //device->SetVertexShader(vertexFormat); + device->SetVertexShader(NULL); + device->SetFVF(vertexFormat); + int startIdx=0; int vc, i; @@ -123,10 +126,10 @@ VOID D3dVertexBuffer::render(D3dCtx *d3dCtx) } } else { if (indexBuffer != NULL) { - device->SetIndices(indexBuffer, 0); + device->SetIndices(indexBuffer); for (i = 0; i < stripLen; i++) { vc = numVertices[i]; - device->DrawIndexedPrimitive(primitiveType, + device->DrawIndexedPrimitive(primitiveType,0, 0, vcount, startIdx, @@ -136,9 +139,9 @@ VOID D3dVertexBuffer::render(D3dCtx *d3dCtx) } else { if (d3dCtx->quadIndexBufferSize > 0) { // Index is successfully set - device->SetIndices(d3dCtx->quadIndexBuffer, 0); - device->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, - 0, + device->SetIndices(d3dCtx->quadIndexBuffer); + device->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0, + 0, numVertices[0], 0, numVertices[0] >> 1); @@ -156,8 +159,10 @@ VOID D3dVertexBuffer::render(D3dCtx *d3dCtx) if (renderPoint) { device->SetRenderState(D3DRS_CULLMODE, d3dCtx->cullMode); device->SetRenderState(D3DRS_FILLMODE, d3dCtx->fillMode); - device->SetRenderState(D3DRS_SOFTWAREVERTEXPROCESSING, + /** device->SetRenderState(D3DRS_SOFTWAREVERTEXPROCESSING, d3dCtx->softwareVertexProcessing); + **/ + device->SetSoftwareVertexProcessing(d3dCtx->softwareVertexProcessing); primitiveType = oldPrimitiveType; } else if (restorePointSize) { device->SetRenderState(D3DRS_POINTSIZE, diff --git a/src/native/d3d/D3dVertexBuffer.hpp b/src/native/d3d/D3dVertexBuffer.hpp index cef8f4a..4cb6b9e 100644 --- a/src/native/d3d/D3dVertexBuffer.hpp +++ b/src/native/d3d/D3dVertexBuffer.hpp @@ -22,15 +22,17 @@ class D3dVertexBuffer; typedef D3dVertexBuffer* LPD3DVERTEXBUFFER; typedef vector<LPD3DVERTEXBUFFER> D3dVertexBufferVector; +//ISSUE 135 iterator for D3dVertexBuffer +typedef vector<LPD3DVERTEXBUFFER>::iterator ITER_LPD3DVERTEXBUFFER; class D3dVertexBuffer { public: // Actual buffer memory to hold all the vertices - LPDIRECT3DVERTEXBUFFER8 buffer; + LPDIRECT3DVERTEXBUFFER9 buffer; // Indexed buffer for rendering IndexedGeometry - LPDIRECT3DINDEXBUFFER8 indexBuffer; + LPDIRECT3DINDEXBUFFER9 indexBuffer; // D3D type of this Vertex Buffer D3DPRIMITIVETYPE primitiveType; @@ -56,6 +58,11 @@ public: // compute from above vertexFormat UINT stride; + UINT numCoorTexSupported; + + + + // Number of strips used for StripGeometryArray // For each strip i the number of vertex is // numVertices[i] diff --git a/src/native/d3d/GeometryArrayRetained.cpp b/src/native/d3d/GeometryArrayRetained.cpp index 50c6507..681395c 100644 --- a/src/native/d3d/GeometryArrayRetained.cpp +++ b/src/native/d3d/GeometryArrayRetained.cpp @@ -22,6 +22,7 @@ /* * This correspond to the constant in d3dtypes.h * under D3D 7.0/8.0 header and may not portable : + * Still valid with D3D 9.0 (aces) * D3DFVF_TEXTUREFORMAT1 3 * D3DFVF_TEXTUREFORMAT2 0 * D3DFVF_TEXTUREFORMAT3 1 @@ -62,12 +63,12 @@ void copyIndexVertexToVB(D3dCtx *d3dCtx, if (cDirty & javax_media_j3d_GeometryArrayRetained_INDEX_CHANGED) { jint *src = strideData->indexPtr + strideData->initialIndexIndex; - LPDIRECT3DINDEXBUFFER8 indexBuffer = d3dCtx->pVB->indexBuffer; + LPDIRECT3DINDEXBUFFER9 indexBuffer = d3dCtx->pVB->indexBuffer; D3DINDEXBUFFER_DESC desc; BYTE *bptr; indexBuffer->GetDesc(&desc); - hr = indexBuffer->Lock(0, 0, &bptr, 0); + hr = indexBuffer->Lock(0, 0, (VOID**)&bptr, 0); if (FAILED(hr)) { D3dCtx::d3dWarning(LOCKINDEXVBFAIL, hr); return; @@ -359,7 +360,7 @@ void copyVertexToVB(D3dCtx *d3dCtx, // buildGA() & modeulateAlpha // Currently buildGA() will not use byte color // so this code should never execute. - jbyte alpha = (jbyte) 255*strideData->alpha; + jbyte alpha = (jbyte)(255*strideData->alpha); if (strideData->useAlpha) { srcStride = strideData->diffuseStride - 3; while (wdst < wendptr) { @@ -1066,7 +1067,7 @@ void copyOneVertexToVB(D3dCtx *d3dCtx, float* allocateVB(D3dCtx *d3dCtx, - LPDIRECT3DDEVICE8 device, + LPDIRECT3DDEVICE9 device, int vcount, int maxVertexLimit, jint *cdirty) @@ -1111,13 +1112,15 @@ float* allocateVB(D3dCtx *d3dCtx, D3DUSAGE_WRITEONLY, vb->vertexFormat, D3DPOOL_DEFAULT, - &vb->buffer); + &vb->buffer, + NULL); } else { hr = device->CreateVertexBuffer(vb->stride*vcount, D3DUSAGE_WRITEONLY|D3DUSAGE_POINTS, vb->vertexFormat, D3DPOOL_DEFAULT, - &vb->buffer); + &vb->buffer, + NULL); } if (FAILED(hr)) { vb->buffer = NULL; @@ -1129,7 +1132,7 @@ float* allocateVB(D3dCtx *d3dCtx, *cdirty = javax_media_j3d_GeometryArrayRetained_VERTEX_CHANGED; } - hr = vb->buffer->Lock(0, 0, (BYTE**) &ptr, 0); + hr = vb->buffer->Lock(0, 0,(VOID**) &ptr, 0); if (FAILED(hr)) { D3dCtx::d3dWarning(LOCKVBFAIL, hr); @@ -1147,7 +1150,7 @@ float* allocateVB(D3dCtx *d3dCtx, BOOL createCopyVBVertex(D3dCtx *d3dCtx, - LPDIRECT3DDEVICE8 device, + LPDIRECT3DDEVICE9 device, D3DDRAWPRIMITIVESTRIDEDDATA *strideData, int vcount, jint cDirty, jdouble* xform, @@ -1170,7 +1173,7 @@ BOOL createCopyVBVertex(D3dCtx *d3dCtx, } else { // use the same VB HRESULT hr; - hr = vb->buffer->Lock(0, 0, (BYTE**)&vbptr, 0); + hr = vb->buffer->Lock(0, 0, (VOID**)&vbptr, 0); if (FAILED(hr)) { D3dCtx::d3dWarning(LOCKVBFAIL, hr); @@ -1210,7 +1213,7 @@ void splitVertexToMultipleVB(D3dCtx *d3dCtx, float* oldTexCoords[D3DDP_MAXTEXCOORD]; int vc; int texSetUsed = d3dCtx->texSetUsed; - LPDIRECT3DDEVICE8 device = d3dCtx->pDevice; + LPDIRECT3DDEVICE9 device = d3dCtx->pDevice; jfloat fr, fg, fb, fa; jbyte br, bg, bb, ba; boolean success; @@ -1508,7 +1511,7 @@ BOOL reIndexifyIndexVertexToVBs(D3dCtx *d3dCtx, { LPD3DVERTEXBUFFER vb = d3dCtx->pVB; HRESULT hr; - LPDIRECT3DDEVICE8 device = d3dCtx->pDevice; + LPDIRECT3DDEVICE9 device = d3dCtx->pDevice; int vbSize; @@ -1558,13 +1561,15 @@ BOOL reIndexifyIndexVertexToVBs(D3dCtx *d3dCtx, D3DUSAGE_WRITEONLY, vb->vertexFormat, D3DPOOL_DEFAULT, - &vb->buffer); + &vb->buffer, + NULL); } else { hr = device->CreateVertexBuffer(vb->stride*vbSize, D3DUSAGE_WRITEONLY|D3DUSAGE_POINTS, vb->vertexFormat, D3DPOOL_DEFAULT, - &vb->buffer); + &vb->buffer, + NULL); vb->isPointFlagUsed = true; } @@ -1588,13 +1593,15 @@ BOOL reIndexifyIndexVertexToVBs(D3dCtx *d3dCtx, D3DUSAGE_WRITEONLY, D3DFMT_INDEX16, D3DPOOL_DEFAULT, - &vb->indexBuffer); + &vb->indexBuffer, + NULL); } else { hr = device->CreateIndexBuffer(vbSize*sizeof(UINT), D3DUSAGE_WRITEONLY, D3DFMT_INDEX32, D3DPOOL_DEFAULT, - &vb->indexBuffer); + &vb->indexBuffer, + NULL); } if (FAILED(hr)) { @@ -1610,7 +1617,7 @@ BOOL reIndexifyIndexVertexToVBs(D3dCtx *d3dCtx, float *vbptr; // Note that DWORD (use for color) is of same size // as float (use for vertex/normal) - hr = vb->buffer->Lock(0, 0, (BYTE**)&vbptr, 0); + hr = vb->buffer->Lock(0, 0, (VOID**)&vbptr, 0); if (FAILED(hr)) { D3dCtx::d3dWarning(LOCKVBFAIL, hr); // recreate it next time @@ -1628,7 +1635,7 @@ BOOL reIndexifyIndexVertexToVBs(D3dCtx *d3dCtx, BYTE *bptr; vb->indexBuffer->GetDesc(&desc); - hr = vb->indexBuffer->Lock(0, 0, &bptr, 0); + hr = vb->indexBuffer->Lock(0, 0, (VOID**)&bptr, 0); if (FAILED(hr)) { D3dCtx::d3dWarning(LOCKINDEXVBFAIL, hr); vb->buffer->Unlock(); @@ -1848,35 +1855,37 @@ void splitIndexVertexToMultipleVB(D3dCtx *d3dCtx, // This is used by quad polygon line mode void DrawPolygonLine(D3dCtx *d3dCtx, - LPDIRECT3DDEVICE8 device, + LPDIRECT3DDEVICE9 device, DWORD vertexFormat, D3DDRAWPRIMITIVESTRIDEDDATA *strideData) { HRESULT hr; float *vbptr; - hr = d3dCtx->pVB->buffer->Lock(0, 0, (BYTE**) &vbptr, 0 ); + hr = d3dCtx->pVB->buffer->Lock(0, 0, (VOID**) &vbptr, 0 ); if (FAILED(hr)) { D3dCtx::d3dWarning(LOCKVBFAIL, hr); return; } // DisplayList will not use in this case, so xform = nxform = NULL copyVertexToVB(d3dCtx, strideData, 4, &vbptr, - javax_media_j3d_GeometryArrayRetained_VERTEX_CHANGED, true, - NULL, NULL); + javax_media_j3d_GeometryArrayRetained_VERTEX_CHANGED, true, + NULL, NULL); d3dCtx->pVB->buffer->Unlock(); - device->SetStreamSource(0, d3dCtx->pVB->buffer, - d3dCtx->pVB->stride); - device->SetIndices(d3dCtx->lineModeIndexBuffer, 0); - device->SetVertexShader(vertexFormat); - - device->DrawIndexedPrimitive(D3DPT_LINESTRIP, 0, 4, 0, 4); + device->SetStreamSource(0, d3dCtx->pVB->buffer, 0, + d3dCtx->pVB->stride); + device->SetIndices(d3dCtx->lineModeIndexBuffer); + //device->SetVertexShader(vertexFormat); + device->SetVertexShader(NULL); + device->SetFVF(vertexFormat); + + device->DrawIndexedPrimitive(D3DPT_LINESTRIP,0, 0, 4, 0, 4); } // This is used by indexed quad polygon line mode void DrawIndexPolygonLine(D3dCtx *d3dCtx, - LPDIRECT3DDEVICE8 device, + LPDIRECT3DDEVICE9 device, DWORD vertexFormat, D3DDRAWPRIMITIVESTRIDEDDATA *strideData, jint idx0, jint idx1, jint idx2, jint idx3) @@ -1884,7 +1893,7 @@ void DrawIndexPolygonLine(D3dCtx *d3dCtx, HRESULT hr; float *vbptr; - hr = d3dCtx->pVB->buffer->Lock(0, 0, (BYTE**) &vbptr, 0 ); + hr = d3dCtx->pVB->buffer->Lock(0, 0, (VOID**) &vbptr, 0 ); if (FAILED(hr)) { D3dCtx::d3dWarning(LOCKVBFAIL, hr); return; @@ -1904,18 +1913,21 @@ void DrawIndexPolygonLine(D3dCtx *d3dCtx, NULL, NULL); d3dCtx->pVB->buffer->Unlock(); - device->SetStreamSource(0, d3dCtx->pVB->buffer, - d3dCtx->pVB->stride); - device->SetVertexShader(vertexFormat); - device->SetIndices(d3dCtx->lineModeIndexBuffer, 0); + device->SetStreamSource(0, d3dCtx->pVB->buffer, 0, + d3dCtx->pVB->stride); + //device->SetVertexShader(vertexFormat); + device->SetVertexShader(NULL); + device->SetFVF(vertexFormat); + + device->SetIndices(d3dCtx->lineModeIndexBuffer); - device->DrawIndexedPrimitive(D3DPT_LINESTRIP, 0, 4, 0, 4); + device->DrawIndexedPrimitive(D3DPT_LINESTRIP,0, 0, 4, 0, 4); } void renderGeometry(JNIEnv *env, D3dCtx *d3dCtx, - LPDIRECT3DDEVICE8 device, + LPDIRECT3DDEVICE9 device, jobject geo, jint geo_type, D3DDRAWPRIMITIVESTRIDEDDATA *strideData, @@ -1998,9 +2010,9 @@ void renderGeometry(JNIEnv *env, } else { // Found the vb in the list of vbVector - for (LPD3DVERTEXBUFFER *s = vbVector->begin(); + for (ITER_LPD3DVERTEXBUFFER s = vbVector->begin(); s != vbVector->end(); ++s) { - if ((*s)->ctx == d3dCtx) { + if ((*s)->ctx == d3dCtx) { vb = *s; break; } @@ -2061,13 +2073,15 @@ void renderGeometry(JNIEnv *env, D3DUSAGE_WRITEONLY, vertexFormat, D3DPOOL_DEFAULT, - &vb->buffer); + &vb->buffer, + NULL); } else { hr = device->CreateVertexBuffer(vb->stride*vb->vcount, D3DUSAGE_WRITEONLY|D3DUSAGE_POINTS, vertexFormat, D3DPOOL_DEFAULT, - &vb->buffer); + &vb->buffer, + NULL); vb->isPointFlagUsed = true; } @@ -2122,7 +2136,7 @@ void renderGeometry(JNIEnv *env, // Note that DWORD (use for color) is of same size // as float (use for vertex/normal) - hr = vb->buffer->Lock(0, 0, (BYTE**)&vbptr, 0); + hr = vb->buffer->Lock(0, 0, (VOID**)&vbptr, 0); if (FAILED(hr)) { D3dCtx::d3dWarning(LOCKVBFAIL, hr); // recreate it next time @@ -2573,7 +2587,7 @@ void renderGeometry(JNIEnv *env, void renderIndexGeometry(JNIEnv *env, D3dCtx *d3dCtx, - LPDIRECT3DDEVICE8 device, + LPDIRECT3DDEVICE9 device, jobject geo, jint geo_type, D3DDRAWPRIMITIVESTRIDEDDATA *strideData, @@ -2638,8 +2652,8 @@ void renderIndexGeometry(JNIEnv *env, env->SetLongField(geo, fieldID, reinterpret_cast<long>(vbVector)); } else { // Found the vb in the list of vbVector - for (LPD3DVERTEXBUFFER *s = vbVector->begin(); - s != vbVector->end(); ++s) { + for (ITER_LPD3DVERTEXBUFFER s = vbVector->begin(); + s != vbVector->end(); ++s) { if ((*s)->ctx == d3dCtx) { vb = *s; break; @@ -2704,13 +2718,15 @@ void renderIndexGeometry(JNIEnv *env, D3DUSAGE_WRITEONLY, vertexFormat, D3DPOOL_DEFAULT, - &vb->buffer); + &vb->buffer, + NULL); } else { hr = device->CreateVertexBuffer(vb->stride*vb->vcount, D3DUSAGE_WRITEONLY|D3DUSAGE_POINTS, vertexFormat, D3DPOOL_DEFAULT, - &vb->buffer); + &vb->buffer, + NULL); vb->isPointFlagUsed = true; } @@ -2745,13 +2761,15 @@ void renderIndexGeometry(JNIEnv *env, D3DUSAGE_WRITEONLY, D3DFMT_INDEX16, D3DPOOL_DEFAULT, - &vb->indexBuffer); + &vb->indexBuffer, + NULL); } else { hr = device->CreateIndexBuffer(vb->indexCount*sizeof(UINT), D3DUSAGE_WRITEONLY, D3DFMT_INDEX32, D3DPOOL_DEFAULT, - &vb->indexBuffer); + &vb->indexBuffer, + NULL); } if (FAILED(hr)) { @@ -2799,7 +2817,7 @@ void renderIndexGeometry(JNIEnv *env, // Note that DWORD (use for color) is of same size // as float (use for vertex/normal) - hr = vb->buffer->Lock(0, 0, (BYTE**)&vbptr, 0); + hr = vb->buffer->Lock(0, 0, (VOID**)&vbptr, 0); if (FAILED(hr)) { D3dCtx::d3dWarning(LOCKVBFAIL, hr); // recreate it next time @@ -2927,7 +2945,10 @@ void renderIndexGeometry(JNIEnv *env, renderTypeSet = true; expandQuadIndex = true; // fall through - } else { // polygon line mode + } + // start quad WireFrame + else { + // polygon line mode // we don't want to see extra line appear in the // diagonal of quads if it splits into two // triangles. This is REALLY SLOW !!! @@ -3037,6 +3058,9 @@ void renderIndexGeometry(JNIEnv *env, // Don't call vb->Renderer() at the end return; } + + //end Quad WireFrame + // fall through case GEO_TYPE_INDEXED_TRI_SET: if (renderTypeSet == false) { @@ -3151,7 +3175,7 @@ inline void setDefaultTextureCoordPointers(D3dCtx *d3dCtx, */ void setTextureCoordPointers(JNIEnv *env, D3dCtx* d3dCtx, - LPDIRECT3DDEVICE8 device, + LPDIRECT3DDEVICE9 device, D3DDRAWPRIMITIVESTRIDEDDATA *strideData, jint pass, jint texoff, @@ -3647,9 +3671,9 @@ void executeGeometryArrayVA( /* execute geometry array with java array format */ extern "C" JNIEXPORT void JNICALL Java_javax_media_j3d_GeometryArrayRetained_executeVABuffer( - JNIEnv *env, + JNIEnv *env, jobject obj, - jlong ctx, + jlong ctxInfo, jobject geo, jint geo_type, jboolean isNonUniformScale, @@ -3666,6 +3690,10 @@ void JNICALL Java_javax_media_j3d_GeometryArrayRetained_executeVABuffer( jbyteArray cbdata, jint initialNormalIndex, jobject ndata, + jint vertexAttrCount, + jintArray vertexAttrSizes, + jintArray vertexAttrIndices, + jobjectArray vertexAttrData, jint pass, jint texCoordMapLength, jintArray tcoordsetmap, @@ -3741,13 +3769,13 @@ void JNICALL Java_javax_media_j3d_GeometryArrayRetained_executeVABuffer( } } - executeGeometryArrayVA(env, obj, ctx, geo, geo_type, - isNonUniformScale, false, 0, - multiScreen, ignoreVertexColors, + executeGeometryArrayVA(env, obj, ctxInfo, geo, geo_type, + isNonUniformScale, false, 0, multiScreen, ignoreVertexColors, vcount, vformat, vdefined, initialCoordIndex, fverts, dverts, initialColorIndex, fclrs, bclrs, initialNormalIndex, - norms, pass, texCoordMapLength, + norms, + pass, texCoordMapLength, tcoordsetmap,numActiveTexUnit, tunitstatemap, texindices,texStride,texCoordPointer, NULL, NULL, cdirty); @@ -3763,12 +3791,12 @@ extern "C" JNIEXPORT void JNICALL Java_javax_media_j3d_GeometryArrayRetained_executeVA( JNIEnv *env, jobject obj, - jlong ctx, + jlong ctxInfo, jobject geo, jint geo_type, jboolean isNonUniformScale, jboolean multiScreen, - jboolean ignoreVertexColors, + jboolean ignoreVertexColors, jint vcount, jint vformat, jint vdefined, @@ -3780,7 +3808,11 @@ void JNICALL Java_javax_media_j3d_GeometryArrayRetained_executeVA( jbyteArray cbdata, jint initialNormalIndex, jfloatArray ndata, - jint pass, // or texUnitIndex + jint vertexAttrCount, + jintArray vertexAttrSizes, + jintArray vertexAttrIndices, + jobjectArray vertexAttrData, + jint pass, jint texCoordMapLength, jintArray tcoordsetmap, jint numActiveTexUnit, @@ -3788,7 +3820,7 @@ void JNICALL Java_javax_media_j3d_GeometryArrayRetained_executeVA( jintArray texindices, jint texStride, jobjectArray texCoords, - jint cDirty) + jint cdirty) { jfloat *fverts = NULL; @@ -3847,7 +3879,7 @@ void JNICALL Java_javax_media_j3d_GeometryArrayRetained_executeVA( } } - executeGeometryArrayVA(env, obj, ctx, geo, geo_type, + executeGeometryArrayVA(env, obj, ctxInfo, geo, geo_type, isNonUniformScale, false, 0, multiScreen, ignoreVertexColors, vcount, vformat, vdefined, initialCoordIndex, @@ -3856,7 +3888,7 @@ void JNICALL Java_javax_media_j3d_GeometryArrayRetained_executeVA( norms, pass, texCoordMapLength, tcoordsetmap,numActiveTexUnit, tunitstatemap, texindices,texStride,texCoordPointer, - NULL, NULL, cDirty); + NULL, NULL, cdirty); if (floatCoordDefined) { env->ReleasePrimitiveArrayCritical( vfcoords, fverts, 0); @@ -3910,12 +3942,12 @@ void JNICALL Java_javax_media_j3d_GeometryArrayRetained_disableGlobalAlpha( extern "C" JNIEXPORT void JNICALL Java_javax_media_j3d_GeometryArrayRetained_setVertexFormat( - JNIEnv *env, + JNIEnv *env, jobject obj, + jlong ctxInfo, jint vformat, jboolean useAlpha, - jboolean ignoreVertexColors, - jlong ctx) + jboolean ignoreVertexColors) { // not use in D3D } @@ -4100,17 +4132,24 @@ void executeGeometryArray(JNIEnv *env, } +/* + * Class: javax_media_j3d_GeometryArrayRetained + * Method: buildGA + * Signature: (JLjavax/media/j3d/GeometryArrayRetained;IZZFZIIII[II[II[I[D[D[F)V + */ extern "C" JNIEXPORT void JNICALL Java_javax_media_j3d_GeometryArrayRetained_buildGA(JNIEnv *env, - jobject obj, jlong ctx, jobject geo, jint geo_type, - jboolean isNonUniformScale, jboolean updateAlpha, float alpha, + jobject obj, jlong ctx, jobject geo, + jint geo_type, + jboolean isNonUniformScale, jboolean updateAlpha, float alpha, jboolean ignoreVertexColors, jint startVIndex, - jint vcount, jint vformat, + jint vcount, jint vformat, jint texCoordSetCount, - jintArray texCoordSetMapArray, + jintArray texCoordSetMapArray, jint texCoordMapLength, jintArray texUnitOffset, + jint vertexAttrCount, jintArray vertexAttrSizes, jdoubleArray xform, jdoubleArray nxform, jfloatArray varray) { @@ -4160,8 +4199,7 @@ void JNICALL Java_javax_media_j3d_GeometryArrayRetained_buildGA(JNIEnv *env, extern "C" JNIEXPORT void JNICALL Java_javax_media_j3d_GeometryArrayRetained_execute(JNIEnv *env, - jobject obj, jlong ctx, - jobject geo, jint geo_type, + jobject obj, jlong ctx,jobject geo, jint geo_type, jboolean isNonUniformScale, jboolean useAlpha, jboolean multiScreen, jboolean ignoreVertexColors, @@ -4169,10 +4207,11 @@ void JNICALL Java_javax_media_j3d_GeometryArrayRetained_execute(JNIEnv *env, jint vcount, jint vformat, jint texCoordSetCount, jintArray texCoordSetMapArray, jint texCoordMapLength, jintArray texUnitOffset, - jint numActiveTexUnit, - jintArray tunitstatemap, + jint numActiveTexUnit, + jintArray tunitstatemap, + jint vertexAttrCount, jintArray vertexAttrSizes, jfloatArray varray, jfloatArray carray, - jint texUnitIndex, jint cDirty) + jint texUnitIndex, jint cDirty) { jfloat *verts = NULL; @@ -4260,13 +4299,13 @@ void JNICALL Java_javax_media_j3d_GeometryArrayRetained_freeD3DArray if (vbVector != NULL) { // clearLive() invoke this in Renderer thread - for (LPD3DVERTEXBUFFER *s = vbVector->begin(); + for (ITER_LPD3DVERTEXBUFFER s = vbVector->begin(); s != vbVector->end(); ++s) { // This notify vb that parent vector is already free // so there is no need to remove itself from vbVector (*s)->vbVector = NULL; (*s)->ctx->freeVB(*s); - } + } env->SetLongField(geo, fieldID, 0); vbVector->clear(); delete vbVector; @@ -4466,7 +4505,9 @@ void JNICALL Java_javax_media_j3d_IndexedGeometryArrayRetained_executeIndexedGeo jint initialIndexIndex, jint indexCount, jint vcount, - jint vformat, jint texCoordSetCount, + jint vformat, + jint vertexAttrCount, jintArray vertexAttrSizes, + jint texCoordSetCount, jintArray texCoordSetMapArray, jint texCoordMapLength, jintArray texUnitOffset, jint numActiveTexUnit, @@ -4573,6 +4614,8 @@ void JNICALL Java_javax_media_j3d_IndexedGeometryArrayRetained_buildIndexedGeome jint indexCount, jint vertexCount, jint vformat, + jint vertexAttrCount, + jintArray vertexAttrSizes, jint texCoordSetCount, jintArray texCoordSetMapArray, jint texCoordMapLength, @@ -4773,6 +4816,9 @@ void JNICALL Java_javax_media_j3d_IndexedGeometryArrayRetained_executeIndexedGeo jfloatArray cfdata, jbyteArray cbdata, jfloatArray ndata, + jint vertexAttrCount, + jintArray vertexAttrSizes, + jobjectArray vertexAttrData, jint pass, jint texCoordMapLength, jintArray tcoordsetmap, @@ -4917,6 +4963,9 @@ void JNICALL Java_javax_media_j3d_IndexedGeometryArrayRetained_executeIndexedGeo jfloatArray cfdata, jbyteArray cbdata, jobject ndata, + jint vertexAttrCount, + jintArray vertexAttrSizes, + jobjectArray vertexAttrData, jint pass, jint texCoordMapLength, jintArray tcoordsetmap, @@ -5124,6 +5173,12 @@ void JNICALL Java_javax_media_j3d_GeometryArrayRetained_buildGAForBuffer( javax_media_j3d_GeometryArrayRetained_VERTEX_CHANGED); } +/* execute geometry array with java array format */ +/* + * Class: javax_media_j3d_GeometryArrayRetained + * Method: buildGAForByRef + * Signature: (JLjavax/media/j3d/GeometryArrayRetained;IZZFZIIII[F[DI[F[BI[FI[I[I[[FI[I[II[Ljava/lang/Object;[D[D)V + */ extern "C" JNIEXPORT void JNICALL Java_javax_media_j3d_GeometryArrayRetained_buildGAForByRef( @@ -5147,7 +5202,11 @@ void JNICALL Java_javax_media_j3d_GeometryArrayRetained_buildGAForByRef( jbyteArray cbdata, jint initialNormalIndex, jfloatArray ndata, - jint texCoordMapLength, + jint vertexAttrCount, + jintArray vertexAttrSizes, + jintArray vertexAttrIndices, + jobjectArray vertexAttrData, + jint texCoordMapLength, jintArray tcoordsetmap, jintArray texindices, jint texStride, diff --git a/src/native/d3d/GraphicsContext3D.cpp b/src/native/d3d/GraphicsContext3D.cpp index e1fa7db..fc33970 100644 --- a/src/native/d3d/GraphicsContext3D.cpp +++ b/src/native/d3d/GraphicsContext3D.cpp @@ -49,9 +49,9 @@ void JNICALL Java_javax_media_j3d_GraphicsContext3D_readRasterNative( d3dCtx->createFrontBuffer())) { - HRESULT hr = device->GetFrontBuffer(d3dCtx->frontSurface); + HRESULT hr = device->GetFrontBufferData(0,d3dCtx->frontSurface);//iSwapChain as 0 if (FAILED(hr)) { - printf("GetFrontBuffer fail %s\n", DXGetErrorString8(hr)); + printf("GetFrontBuffer fail %s\n", DXGetErrorString9(hr)); return; } @@ -77,10 +77,10 @@ void JNICALL Java_javax_media_j3d_GraphicsContext3D_readRasterNative( } } else { if (d3dCtx->backSurface == NULL) { - HRESULT hr = device->GetBackBuffer(0, D3DBACKBUFFER_TYPE_MONO, + HRESULT hr = device->GetBackBuffer(0,0, D3DBACKBUFFER_TYPE_MONO, //isSwapChain as 0 &d3dCtx->backSurface); if (FAILED(hr)) { - printf("GetBackBuffer fail %s\n", DXGetErrorString8(hr)); + printf("GetBackBuffer fail %s\n", DXGetErrorString9(hr)); return; } } @@ -114,7 +114,7 @@ void JNICALL Java_javax_media_j3d_GraphicsContext3D_readRasterNative( if (FAILED(hr)) { if (debug) { printf("[Java3D] Fail to get depth stencil surface %s\n", - DXGetErrorString8(hr)); + DXGetErrorString9(hr)); } return; } diff --git a/src/native/d3d/Lights.cpp b/src/native/d3d/Lights.cpp index 322ccd1..9a790a8 100644 --- a/src/native/d3d/Lights.cpp +++ b/src/native/d3d/Lights.cpp @@ -27,7 +27,7 @@ void JNICALL Java_javax_media_j3d_DirectionalLightRetained_updateLight( jfloat diry, jfloat dirz) { - D3DLIGHT8 d3dLight; + D3DLIGHT9 d3dLight; GetDevice(); @@ -71,7 +71,7 @@ void JNICALL Java_javax_media_j3d_PointLightRetained_updateLight( jfloat posy, jfloat posz) { - D3DLIGHT8 d3dLight; + D3DLIGHT9 d3dLight; GetDevice(); @@ -119,7 +119,7 @@ void JNICALL Java_javax_media_j3d_SpotLightRetained_updateLight( jfloat diry, jfloat dirz) { - D3DLIGHT8 d3dLight; + D3DLIGHT9 d3dLight; GetDevice(); diff --git a/src/native/d3d/NativeAPIInfo.c b/src/native/d3d/NativeAPIInfo.c index 8286a7b..ddca7af 100644 --- a/src/native/d3d/NativeAPIInfo.c +++ b/src/native/d3d/NativeAPIInfo.c @@ -13,11 +13,11 @@ #include <jni.h> #include "javax_media_j3d_MasterControl.h" - +#include "javax_media_j3d_NativeAPIInfo.h" JNIEXPORT jint JNICALL Java_javax_media_j3d_NativeAPIInfo_getRenderingAPI( JNIEnv *env, jobject obj) -{ +{ return (jint)javax_media_j3d_MasterControl_RENDER_DIRECT3D; } diff --git a/src/native/d3d/NativeConfigTemplate3D.cpp b/src/native/d3d/NativeConfigTemplate3D.cpp index d115c14..c18134b 100644 --- a/src/native/d3d/NativeConfigTemplate3D.cpp +++ b/src/native/d3d/NativeConfigTemplate3D.cpp @@ -131,3 +131,18 @@ jint JNICALL Java_javax_media_j3d_NativeConfigTemplate3D_choosePixelFormat( return retValue; } + + +/* + * Class: javax_media_j3d_NativeConfigTemplate3D + * Method: getStencilSize + * Signature: (JZ)I + * @TODO: FIX THIS !!!!! + */ +JNIEXPORT jint JNICALL Java_javax_media_j3d_NativeConfigTemplate3D_getStencilSize + (JNIEnv *, jobject, jlong, jboolean) +{ + // dummy value + + return 8; +} diff --git a/src/native/d3d/RasterRetained.cpp b/src/native/d3d/RasterRetained.cpp index 7886868..a1606f3 100644 --- a/src/native/d3d/RasterRetained.cpp +++ b/src/native/d3d/RasterRetained.cpp @@ -102,7 +102,7 @@ void JNICALL Java_javax_media_j3d_RasterRetained_execute(JNIEnv *env, D3dImageComponent* d3dImage = D3dImageComponent::find(&RasterList, d3dCtx, hashCode); - LPDIRECT3DTEXTURE8 surf = NULL ; + LPDIRECT3DTEXTURE9 surf = NULL ; if ((d3dImage == NULL) || (d3dImage->surf == NULL)) { @@ -200,7 +200,7 @@ void JNICALL Java_javax_media_j3d_RasterRetained_execute(JNIEnv *env, if (FAILED(hr)) { if (debug) { printf("[Java3D] Fail to get depth stencil surface %s\n", - DXGetErrorString8(hr)); + DXGetErrorString9(hr)); } return; } @@ -213,8 +213,8 @@ void JNICALL Java_javax_media_j3d_RasterRetained_execute(JNIEnv *env, intData_array, NULL); copyDepthToSurface(d3dCtx, device, - screenCoord.sx, - screenCoord.sy, + (int)(screenCoord.sx), + (int)(screenCoord.sy), x_offset, y_offset, w, h,width, height, intData, d3dCtx->depthStencilSurface); @@ -230,8 +230,8 @@ void JNICALL Java_javax_media_j3d_RasterRetained_execute(JNIEnv *env, floatData_array, NULL); copyDepthToSurface(d3dCtx, device, - screenCoord.sx, - screenCoord.sy, + (jint)(screenCoord.sx), + (jint)(screenCoord.sy), x_offset, y_offset, w, h, width, height, floatData, d3dCtx->depthStencilSurface); diff --git a/src/native/d3d/StdAfx.h b/src/native/d3d/StdAfx.h index 020e69e..d653594 100644 --- a/src/native/d3d/StdAfx.h +++ b/src/native/d3d/StdAfx.h @@ -7,12 +7,20 @@ * * $Revision$ * $Date$ - * $State$ + * $State$_WIN32_WINNT */ #if !defined(AFX_STDAFX_H) #define AFX_STDAFX_H +#ifndef WINVER +#define WINVER 0x0501 +#endif + +#ifndef _WIN32_WINNT +#define _WIN32_WINNT 0x0501 +#endif + #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 @@ -35,9 +43,9 @@ #include <jni.h> #include <math.h> #define D3D_OVERLOADS -#include <d3d8.h> -#include <dxerr8.h> -#include <d3dx8.h> +#include <d3d9.h> +#include <dxerr9.h> +#include <d3dx9.h> #include <vector> #include <algorithm> using namespace std ; @@ -52,3 +60,4 @@ using namespace std ; #include "D3dDisplayList.hpp" #include "D3dImageComponent.hpp" #endif + diff --git a/src/native/d3d/build-windows-i586-vc.xml b/src/native/d3d/build-windows-i586-vc.xml index 9f05f23..a73c4ca 100644 --- a/src/native/d3d/build-windows-i586-vc.xml +++ b/src/native/d3d/build-windows-i586-vc.xml @@ -36,12 +36,13 @@ <!-- Compile the c source files--> <exec dir="${build}/${platform}/${bldType}/native/d3d/objs" executable="cl"> - <arg line="-I"${javaInclude}" -I"${javaWin32Include}" -I"${src}/native/ogl" -I"${javahCoreTarget}" -nologo -MT -W3 -GX -Ox -YX -FD ${bldFlag} -DD3D -DJ3D_BUILDVERTICES -c "${oglsrc}/DrawingSurfaceObjectAWT.c" "${oglsrc}/MasterControl.c" "${d3dsrc}/D3dVertexBuffer.cpp" "${d3dsrc}/D3dDisplayList.cpp" "${d3dsrc}/D3dDriverInfo.cpp" "${d3dsrc}/D3dDeviceInfo.cpp" "${d3dsrc}/D3dCtx.cpp" "${d3dsrc}/D3dUtil.cpp" "${d3dsrc}/D3dImageComponent.cpp" "${d3dsrc}/GeometryArrayRetained.cpp" "${d3dsrc}/Canvas3D.cpp" "${d3dsrc}/GraphicsContext3D.cpp" "${d3dsrc}/CompressedGeometryRetained.cpp" "${d3dsrc}/Attributes.cpp" "${d3dsrc}/Lights.cpp" "${d3dsrc}/NativeConfigTemplate3D.cpp" "${d3dsrc}/NativeWSInfo.cpp" "${d3dsrc}/NativeAPIInfo.c" "${d3dsrc}/RasterRetained.cpp""/> + <arg line="-Ox -Og -O2 -Ob2 -Os -Oi -GT -GL /nologo -I"${javaInclude}" -I"${javaWin32Include}" -I"${src}/native/ogl" -I"${javahCoreTarget}" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "J3DDX90PORT_EXPORTS" /D "WIN32" /D "D3D" /D "J3D_BUILDVERTICES" /D "NVIDIA_DEBUG" /FD /EHsc /MT /Fp"J3dDX90Port.pch" /W2 /c /TP "${oglsrc}/DrawingSurfaceObjectAWT.c" "${oglsrc}/MasterControl.c" "${d3dsrc}/D3dVertexBuffer.cpp" "${d3dsrc}/D3dDisplayList.cpp" "${d3dsrc}/D3dDriverInfo.cpp" "${d3dsrc}/D3dDeviceInfo.cpp" "${d3dsrc}/D3dCtx.cpp" "${d3dsrc}/D3dUtil.cpp" "${d3dsrc}/D3dImageComponent.cpp" "${d3dsrc}/GeometryArrayRetained.cpp" "${d3dsrc}/Canvas3D.cpp" "${d3dsrc}/GraphicsContext3D.cpp" "${d3dsrc}/Attributes.cpp" "${d3dsrc}/Lights.cpp" "${d3dsrc}/NativeConfigTemplate3D.cpp" "${d3dsrc}/NativeWSInfo.cpp" "${d3dsrc}/NativeAPIInfo.c" "${d3dsrc}/RasterRetained.cpp" "/> </exec> + <!-- Create the library file--> <exec dir="${build}/${platform}/${bldType}/native/d3d/objs" executable="link"> - <arg line="-nologo -dll -subsystem:windows -pdb:none -machine:I386 /ignore:4089 -out:j3dcore-d3d.dll D3dVertexBuffer.obj D3dDisplayList.obj D3dDriverInfo.obj D3dDeviceInfo.obj D3dCtx.obj D3dUtil.obj D3dImageComponent.obj GeometryArrayRetained.obj Canvas3D.obj GraphicsContext3D.obj CompressedGeometryRetained.obj Attributes.obj Lights.obj NativeConfigTemplate3D.obj NativeWSInfo.obj NativeAPIInfo.obj RasterRetained.obj DrawingSurfaceObjectAWT.obj MasterControl.obj kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ddraw.lib d3d8.lib d3dx8.lib dxerr8.lib dxguid.lib user32.lib delayimp.lib -DELAYLOAD:jawt.dll -LIBPATH:"${java.home}\..\lib" jawt.lib"/> + <arg line="/OUT:"j3dcore-d3d.dll" /nologo -DLL -DELAYLOAD:jawt.dll -IMPLIB:"j3dcore-d3d.lib" -MACHINE:X86 -LTCG /ignore:4089 ddraw.lib d3d9.lib d3dx9.lib dxerr9.lib dxguid.lib dinput.lib dinput8.lib delayimp.lib WinStrm.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib DelayImp.lib Attributes.obj Canvas3D.obj D3dCtx.obj D3dDeviceInfo.obj D3dDisplayList.obj D3dDriverInfo.obj D3dImageComponent.obj D3dUtil.obj D3dVertexBuffer.obj DrawingSurfaceObjectAWT.obj GeometryArrayRetained.obj GraphicsContext3D.obj Lights.obj MasterControl.obj NativeAPIInfo.obj NativeConfigTemplate3D.obj NativeWSInfo.obj RasterRetained.obj ddraw.lib d3d9.lib d3dx9.lib dxerr9.lib dxguid.lib dinput.lib dinput8.lib delayimp.lib WinStrm.lib -LIBPATH:"${java.home}\..\lib" jawt.lib"/> </exec> <!-- Copy the copyright library file --> diff --git a/src/native/ogl/Attributes.c b/src/native/ogl/Attributes.c index efe4407..16a299e 100644 --- a/src/native/ogl/Attributes.c +++ b/src/native/ogl/Attributes.c @@ -554,8 +554,67 @@ void JNICALL Java_javax_media_j3d_Canvas3D_resetRenderingAttributes( glEnable(GL_DEPTH_TEST); } glAlphaFunc(GL_ALWAYS, 0.0f); + glDepthFunc(GL_LEQUAL); glEnable(GL_COLOR_MATERIAL); glDisable(GL_COLOR_LOGIC_OP); + +} + +GLenum getFunctionValue(jint func) { + switch (func) { + case javax_media_j3d_RenderingAttributes_ALWAYS: + func = GL_ALWAYS; + break; + case javax_media_j3d_RenderingAttributes_NEVER: + func = GL_NEVER; + break; + case javax_media_j3d_RenderingAttributes_EQUAL: + func = GL_EQUAL; + break; + case javax_media_j3d_RenderingAttributes_NOT_EQUAL: + func = GL_NOTEQUAL; + break; + case javax_media_j3d_RenderingAttributes_LESS: + func = GL_LESS; + break; + case javax_media_j3d_RenderingAttributes_LESS_OR_EQUAL: + func = GL_LEQUAL; + break; + case javax_media_j3d_RenderingAttributes_GREATER: + func = GL_GREATER; + break; + case javax_media_j3d_RenderingAttributes_GREATER_OR_EQUAL: + func = GL_GEQUAL; + break; + } + + return func; +} + +GLenum getStencilOpValue(jint op) { + switch (op) { + case javax_media_j3d_RenderingAttributes_STENCIL_KEEP: + op = GL_KEEP; + break; + case javax_media_j3d_RenderingAttributes_STENCIL_ZERO: + op = GL_ZERO; + break; + case javax_media_j3d_RenderingAttributes_STENCIL_REPLACE: + op = GL_REPLACE; + break; + case javax_media_j3d_RenderingAttributes_STENCIL_INCR: + op = GL_INCR; + break; + case javax_media_j3d_RenderingAttributes_STENCIL_DECR: + op = GL_DECR; + break; + case javax_media_j3d_RenderingAttributes_STENCIL_INVERT: + op = GL_INVERT; + break; + } + + return op; + } JNIEXPORT @@ -567,16 +626,28 @@ void JNICALL Java_javax_media_j3d_RenderingAttributesRetained_updateNative( jboolean db_enable_override, jboolean db_enable, jboolean db_write_enable, + jint db_func, jfloat at_value, jint at_func, jboolean ignoreVertexColors, jboolean rasterOpEnable, - jint rasterOp) + jint rasterOp, + jboolean userStencilAvailable, + jboolean stencilEnable, + jint stencilFailOp, + jint stencilZFailOp, + jint stencilZPassOp, + jint stencilFunction, + jint stencilReferenceValue, + jint stencilCompareMask, + jint stencilWriteMask) { if (db_enable_override == JNI_FALSE) { if (db_enable == JNI_TRUE) { glEnable(GL_DEPTH_TEST); - } else { + glDepthFunc( getFunctionValue(db_func)); + + } else { glDisable(GL_DEPTH_TEST); } } @@ -593,6 +664,7 @@ void JNICALL Java_javax_media_j3d_RenderingAttributesRetained_updateNative( glDisable(GL_ALPHA_TEST); } else { glEnable(GL_ALPHA_TEST); + glAlphaFunc(getFunctionValue(at_func), at_value); } if (ignoreVertexColors == JNI_TRUE) { @@ -600,47 +672,81 @@ void JNICALL Java_javax_media_j3d_RenderingAttributesRetained_updateNative( } else { glEnable(GL_COLOR_MATERIAL); - } - - switch (at_func) { - case javax_media_j3d_RenderingAttributes_ALWAYS: - glAlphaFunc(GL_ALWAYS, at_value); - break; - case javax_media_j3d_RenderingAttributes_NEVER: - glAlphaFunc(GL_NEVER, at_value); - break; - case javax_media_j3d_RenderingAttributes_EQUAL: - glAlphaFunc(GL_EQUAL, at_value); - break; - case javax_media_j3d_RenderingAttributes_NOT_EQUAL: - glAlphaFunc(GL_NOTEQUAL, at_value); - break; - case javax_media_j3d_RenderingAttributes_LESS: - glAlphaFunc(GL_LESS, at_value); - break; - case javax_media_j3d_RenderingAttributes_LESS_OR_EQUAL: - glAlphaFunc(GL_LEQUAL, at_value); - break; - case javax_media_j3d_RenderingAttributes_GREATER: - glAlphaFunc(GL_GREATER, at_value); - break; - case javax_media_j3d_RenderingAttributes_GREATER_OR_EQUAL: - glAlphaFunc(GL_GEQUAL, at_value); - break; } - + if (rasterOpEnable == JNI_TRUE) { glEnable(GL_COLOR_LOGIC_OP); switch (rasterOp) { + case javax_media_j3d_RenderingAttributes_ROP_CLEAR: + glLogicOp(GL_CLEAR); + break; + case javax_media_j3d_RenderingAttributes_ROP_AND: + glLogicOp(GL_AND); + break; + case javax_media_j3d_RenderingAttributes_ROP_AND_REVERSE: + glLogicOp(GL_AND_REVERSE); + break; case javax_media_j3d_RenderingAttributes_ROP_COPY: glLogicOp(GL_COPY); break; + case javax_media_j3d_RenderingAttributes_ROP_AND_INVERTED: + glLogicOp(GL_AND_INVERTED); + break; + case javax_media_j3d_RenderingAttributes_ROP_NOOP: + glLogicOp(GL_NOOP); + break; case javax_media_j3d_RenderingAttributes_ROP_XOR: glLogicOp(GL_XOR); break; + case javax_media_j3d_RenderingAttributes_ROP_OR: + glLogicOp(GL_OR); + break; + case javax_media_j3d_RenderingAttributes_ROP_NOR: + glLogicOp(GL_NOR); + break; + case javax_media_j3d_RenderingAttributes_ROP_EQUIV: + glLogicOp(GL_EQUIV); + break; + case javax_media_j3d_RenderingAttributes_ROP_INVERT: + glLogicOp(GL_INVERT); + break; + case javax_media_j3d_RenderingAttributes_ROP_OR_REVERSE: + glLogicOp(GL_OR_REVERSE); + break; + case javax_media_j3d_RenderingAttributes_ROP_COPY_INVERTED: + glLogicOp(GL_COPY_INVERTED); + break; + case javax_media_j3d_RenderingAttributes_ROP_OR_INVERTED: + glLogicOp(GL_OR_INVERTED); + break; + case javax_media_j3d_RenderingAttributes_ROP_NAND: + glLogicOp(GL_NAND); + break; + case javax_media_j3d_RenderingAttributes_ROP_SET: + glLogicOp(GL_SET); + break; } - } else + } else { glDisable(GL_COLOR_LOGIC_OP); + } + + if (userStencilAvailable == JNI_TRUE) { + if (stencilEnable == JNI_TRUE) { + glEnable(GL_STENCIL_TEST); + + glStencilOp(getStencilOpValue(stencilFailOp), + getStencilOpValue(stencilZFailOp), + getStencilOpValue(stencilZPassOp)); + + glStencilFunc(getFunctionValue(stencilFunction), + stencilReferenceValue, stencilCompareMask); + + glStencilMask(stencilWriteMask); + + } else { + glDisable(GL_STENCIL_TEST); + } + } } JNIEXPORT @@ -741,7 +847,7 @@ void JNICALL Java_javax_media_j3d_Canvas3D_resetLineAttributes( glLineWidth(1.0f); glDisable(GL_LINE_STIPPLE); - /* TODO: Polygon Mode check, blend enable */ + /* XXXX: Polygon Mode check, blend enable */ glDisable (GL_LINE_SMOOTH); } @@ -773,7 +879,7 @@ void JNICALL Java_javax_media_j3d_LineAttributesRetained_updateNative( glEnable(GL_LINE_STIPPLE); } - /* TODO: Polygon Mode check, blend enable */ + /* XXXX: Polygon Mode check, blend enable */ if (lineAntialiasing == JNI_TRUE) { glEnable (GL_LINE_SMOOTH); } else { @@ -789,7 +895,7 @@ void JNICALL Java_javax_media_j3d_Canvas3D_resetPointAttributes( { glPointSize(1.0f); - /* TODO: Polygon Mode check, blend enable */ + /* XXXX: Polygon Mode check, blend enable */ glDisable (GL_POINT_SMOOTH); } @@ -803,7 +909,7 @@ void JNICALL Java_javax_media_j3d_PointAttributesRetained_updateNative( { glPointSize(pointSize); - /* TODO: Polygon Mode check, blend enable */ + /* XXXX: Polygon Mode check, blend enable */ if (pointAntialiasing == JNI_TRUE) { glEnable (GL_POINT_SMOOTH); } else { @@ -3409,18 +3515,6 @@ void JNICALL Java_javax_media_j3d_TextureUnitStateRetained_updateTextureUnitStat */ } -JNIEXPORT -void JNICALL Java_javax_media_j3d_Canvas3D_setDepthFunc( - JNIEnv * env, - jobject obj, - jlong ctxInfo, - jint func) -{ - if (func == javax_media_j3d_RenderingAttributesRetained_LESS) - glDepthFunc(GL_LESS); - else if (func == javax_media_j3d_RenderingAttributesRetained_LEQUAL) - glDepthFunc(GL_LEQUAL); -} JNIEXPORT void JNICALL Java_javax_media_j3d_Canvas3D_setBlendColor( @@ -3503,3 +3597,115 @@ void JNICALL Java_javax_media_j3d_Canvas3D_updateTexUnitStateMap( * texture unit state. */ } + + +/* + * strJavaToC + * + * Returns a copy of the specified Java String object as a new, + * null-terminated "C" string. The caller must free this string. + */ +char * +strJavaToC(JNIEnv *env, jstring str) +{ + JNIEnv table = *env; + jclass oom; + + const char *strUTFBytes; /* Array of UTF-8 bytes */ + char *cString = NULL; /* Null-terminated "C" string */ + + if (str == NULL) { + return NULL; + } + + strUTFBytes = table->GetStringUTFChars(env, str, NULL); + if (strUTFBytes == NULL) { + /* Just return, since GetStringUTFChars will throw OOM if it returns NULL */ + return NULL; + } + + cString = strdup(strUTFBytes); + table->ReleaseStringUTFChars(env, str, strUTFBytes); + if (cString == NULL) { + if ((oom = table->FindClass(env, "java/lang/OutOfMemoryError")) != NULL) { + table->ThrowNew(env, oom, "strdup"); + } + return NULL; + } + + return cString; +} + + +/* + * createShaderError + * + * Constructs a new ShaderError object from the given error code, + * error message, and detail message. + */ +jobject +createShaderError( + JNIEnv *env, + int errorCode, + const char *errorMsg, + const char *detailMsg) +{ + JNIEnv table = *env; + jclass shaderErrorClass; + jobject shaderError; + jmethodID methodID; + jstring errorMsgString = NULL; + jstring detailMsgString = NULL; + + if (errorMsg != NULL) { + if ((errorMsgString = table->NewStringUTF(env, errorMsg)) == NULL) { + return NULL; + } + } + + if (detailMsg != NULL) { + if ((detailMsgString = table->NewStringUTF(env, detailMsg)) == NULL) { + return NULL; + } + } + + shaderErrorClass = (*(table->FindClass))(env, "javax/media/j3d/ShaderError"); + if (shaderErrorClass == NULL) { + return NULL; + } + + methodID = table->GetMethodID(env, shaderErrorClass, + "<init>", + "(ILjava/lang/String;)V"); + if (methodID == NULL) { + return NULL; + } + + shaderError = table->NewObject(env, shaderErrorClass, methodID, + errorCode, errorMsgString); + if (shaderError == NULL) { + return NULL; + } + + methodID = table->GetMethodID(env, shaderErrorClass, + "setDetailMessage", + "(Ljava/lang/String;)V"); + if (methodID == NULL) { + return NULL; + } + + table->CallVoidMethod(env, shaderError, methodID, + detailMsgString); + + return shaderError; +} + + +void +throwAssert(JNIEnv *env, char *str) +{ + jclass rte; + if ((rte = (*env)->FindClass(env, "java/lang/AssertionError")) != NULL) { + (*env)->ThrowNew(env, rte, str); + } +} diff --git a/src/native/ogl/Canvas3D.c b/src/native/ogl/Canvas3D.c index 3a45b92..f653e84 100644 --- a/src/native/ogl/Canvas3D.c +++ b/src/native/ogl/Canvas3D.c @@ -16,7 +16,7 @@ * of the Java 3D API. */ -#if defined(__linux__) +#if defined(LINUX) #define _GNU_SOURCE 1 #endif @@ -28,7 +28,7 @@ #include "gldefs.h" -#if defined(SOLARIS) || defined(__linux__) +#if defined(UNIX) #include <dlfcn.h> #endif @@ -38,6 +38,8 @@ #endif /* DEBUG */ +extern void throwAssert(JNIEnv *env, char *str); + static void initializeCtxInfo(JNIEnv *env, GraphicsContextPropertiesInfo* ctxInfo); static void cleanupCtxInfo(GraphicsContextPropertiesInfo* ctxInfo); static void disableAttribFor2D(GraphicsContextPropertiesInfo *ctxProperties); @@ -47,7 +49,7 @@ static void disableAttribFor2D(GraphicsContextPropertiesInfo *ctxProperties); * Method: getTextureColorTableSize * Signature: ()I */ -int getTextureColorTableSize( +extern int getTextureColorTableSize( JNIEnv *env, jobject obj, jlong ctxInfo, @@ -55,6 +57,21 @@ int getTextureColorTableSize( int minorVersion); +extern void checkGLSLShaderExtensions( + JNIEnv *env, + jobject obj, + char *tmpExtensionStr, + GraphicsContextPropertiesInfo *ctxInfo, + jboolean glslLibraryAvailable); + +extern void checkCgShaderExtensions( + JNIEnv *env, + jobject obj, + char *tmpExtensionStr, + GraphicsContextPropertiesInfo *ctxInfo, + jboolean cgLibraryAvailable); + + #ifdef WIN32 extern void printErrorMessage(char *message); extern PIXELFORMATDESCRIPTOR getDummyPFD(); @@ -71,6 +88,7 @@ HWND createDummyWindow(const char* szAppName); void extractVersionInfo(char *versionStr, int* numbers){ char *majorNumStr; char *minorNumStr; + majorNumStr = strtok(versionStr, (char *)"."); minorNumStr = strtok(0, (char *)"."); if (majorNumStr != NULL) @@ -78,14 +96,14 @@ void extractVersionInfo(char *versionStr, int* numbers){ if (minorNumStr != NULL) numbers[1] = atoi(minorNumStr); - /* fprintf(stderr, "majorNumStr = %d, minNumStr = %d \n", numbers[0], numbers[1]); */ return; } /* * check if the extension is supported */ -int isExtensionSupported(const char *allExtensions, const char *extension) +int +isExtensionSupported(const char *allExtensions, const char *extension) { const char *start; const char *where, *terminator; @@ -114,18 +132,23 @@ int isExtensionSupported(const char *allExtensions, const char *extension) return 0; } -void checkTextureExtensions( + +static void +checkTextureExtensions( JNIEnv *env, jobject obj, char *tmpExtensionStr, int versionNumber, - GraphicsContextPropertiesInfo* ctxInfo) { - - if(isExtensionSupported(tmpExtensionStr, "GL_ARB_multitexture")) { - ctxInfo->arb_multitexture = JNI_TRUE ; + GraphicsContextPropertiesInfo* ctxInfo) +{ + if (isExtensionSupported(tmpExtensionStr, "GL_ARB_multitexture")) { + ctxInfo->arb_multitexture = JNI_TRUE; ctxInfo->textureExtMask |= javax_media_j3d_Canvas3D_TEXTURE_MULTI_TEXTURE; - glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, &ctxInfo->textureUnitCount); - + glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, &ctxInfo->maxTextureUnits); + ctxInfo->maxTexCoordSets = ctxInfo->maxTextureUnits; + if (isExtensionSupported(tmpExtensionStr, "GL_ARB_vertex_shader")) { + glGetIntegerv(GL_MAX_TEXTURE_COORDS_ARB, &ctxInfo->maxTexCoordSets); + } } if(isExtensionSupported(tmpExtensionStr,"GL_SGI_texture_color_table" )){ @@ -171,7 +194,7 @@ void checkTextureExtensions( if(isExtensionSupported(tmpExtensionStr,"GL_NV_register_combiners" )) { ctxInfo->textureRegisterCombinersAvailable = JNI_TRUE; ctxInfo->textureExtMask |= javax_media_j3d_Canvas3D_TEXTURE_REGISTER_COMBINERS; -#if defined(SOLARIS) || defined(__linux__) +#if defined(UNIX) ctxInfo->glCombinerInputNV = (MYPFNGLCOMBINERINPUTNV) dlsym(RTLD_DEFAULT, "glCombinerInputNV"); ctxInfo->glFinalCombinerInputNV = @@ -282,7 +305,7 @@ void checkTextureExtensions( ctxInfo->linear_sharpen_rgb_enum = GL_LINEAR_SHARPEN_COLOR_SGIS; ctxInfo->linear_sharpen_alpha_enum = GL_LINEAR_SHARPEN_ALPHA_SGIS; ctxInfo->textureExtMask |= javax_media_j3d_Canvas3D_TEXTURE_SHARPEN; -#if defined(SOLARIS) || defined(__linux__) +#if defined(UNIX) ctxInfo->glSharpenTexFuncSGIS = (MYPFNGLSHARPENTEXFUNCSGI) dlsym(RTLD_DEFAULT, "glSharpenTexFuncSGIS"); #endif @@ -306,7 +329,7 @@ void checkTextureExtensions( ctxInfo->texture_detail_mode_enum = GL_DETAIL_TEXTURE_MODE_SGIS; ctxInfo->texture_detail_level_enum = GL_DETAIL_TEXTURE_LEVEL_SGIS; ctxInfo->textureExtMask |= javax_media_j3d_Canvas3D_TEXTURE_DETAIL; -#if defined(SOLARIS) || defined(__linux__) +#if defined(UNIX) ctxInfo->glDetailTexFuncSGIS = (MYPFNGLDETAILTEXFUNCSGI) dlsym(RTLD_DEFAULT, "glDetailTexFuncSGIS"); #endif @@ -325,7 +348,7 @@ void checkTextureExtensions( ctxInfo->textureFilter4Available = JNI_TRUE; ctxInfo->filter4_enum = GL_FILTER4_SGIS; ctxInfo->textureExtMask |= javax_media_j3d_Canvas3D_TEXTURE_FILTER4; -#if defined(SOLARIS) || defined(__linux__) +#if defined(UNIX) ctxInfo->glTexFilterFuncSGIS = (MYPFNGLTEXFILTERFUNCSGI) dlsym(RTLD_DEFAULT, "glTexFilterFuncSGIS"); #endif @@ -410,6 +433,38 @@ getJavaBoolEnv(JNIEnv *env, char* envStr) return (*(table->GetBooleanField))(env, obj, fieldID); } +/* + * Dummy functions for language-independent vertex attribute functions + */ +static void +dummyVertexAttrPointer( + GraphicsContextPropertiesInfo *ctxProperties, + int index, int size, int type, int stride, + const void *pointer) +{ +#ifdef DEBUG + fprintf(stderr, "dummyVertexAttrPointer()\n"); +#endif /* DEBUG */ +} + +static void +dummyEnDisableVertexAttrArray( + GraphicsContextPropertiesInfo *ctxProperties, int index) +{ +#ifdef DEBUG + fprintf(stderr, "dummyEnDisableVertexAttrArray()\n"); +#endif /* DEBUG */ +} + +static void +dummyVertexAttr( + GraphicsContextPropertiesInfo *ctxProperties, + int index, const float *v) +{ +#ifdef DEBUG + fprintf(stderr, "dummyVertexAttr()\n"); +#endif /* DEBUG */ +} /* * get properties from current context @@ -421,9 +476,10 @@ getPropertiesFromCurrentContext( GraphicsContextPropertiesInfo *ctxInfo, jlong hdc, int pixelFormat, - int stencilSize, jlong fbConfigListPtr, - jboolean offScreen) + jboolean offScreen, + jboolean glslLibraryAvailable, + jboolean cgLibraryAvailable) { JNIEnv table = *env; @@ -436,10 +492,8 @@ getPropertiesFromCurrentContext( char *tmpExtensionStr; int versionNumbers[2]; char *cgHwStr = 0; - - + #ifdef WIN32 - PIXELFORMATDESCRIPTOR pfd; PixelFormatInfo *PixelFormatInfoPtr = (PixelFormatInfo *)fbConfigListPtr; #endif @@ -485,18 +539,24 @@ getPropertiesFromCurrentContext( /* *********************************************************/ /* setup the graphics context properties */ - /* check 1.2 core and above */ + /* NOTE : At some point we will want to require OpenGL 1.3 */ + /* Check for OpenGL 1.2 core or better */ if ((versionNumbers[0] > 1) || (versionNumbers[0] == 1 && versionNumbers[1] >= 2)) { - /* 1.2 core */ + if (versionNumbers[0] == 1 && versionNumbers[1] == 2) { + fprintf(stderr, + "Java 3D WARNING : OpenGL 1.3 will be required in the near future (GL_VERSION=%d.%d)\n", + versionNumbers[0], versionNumbers[1]); + } + ctxInfo->rescale_normal_ext = JNI_TRUE; ctxInfo->rescale_normal_ext_enum = GL_RESCALE_NORMAL; ctxInfo->bgr_ext = JNI_TRUE; ctxInfo->bgr_ext_enum = GL_BGR; ctxInfo->texture3DAvailable = JNI_TRUE; ctxInfo->textureExtMask |= javax_media_j3d_Canvas3D_TEXTURE_3D; -#if defined(SOLARIS) || defined(__linux__) +#if defined(UNIX) ctxInfo->glTexImage3DEXT = (MYPFNGLTEXIMAGE3DPROC )dlsym(RTLD_DEFAULT, "glTexImage3D"); ctxInfo->glTexSubImage3DEXT = (MYPFNGLTEXSUBIMAGE3DPROC )dlsym(RTLD_DEFAULT, "glTexSubImage3D"); #endif @@ -514,8 +574,9 @@ getPropertiesFromCurrentContext( if(isExtensionSupported(tmpExtensionStr, "GL_ARB_imaging")){ ctxInfo->blend_color_ext = JNI_TRUE; - ctxInfo->blendFunctionTable[7] = GL_CONSTANT_COLOR; -#if defined(SOLARIS) || defined(__linux__) + + ctxInfo->blendFunctionTable[BLEND_CONSTANT_COLOR] = GL_CONSTANT_COLOR; +#if defined(UNIX) ctxInfo->glBlendColor = (MYPFNGLBLENDCOLORPROC )dlsym(RTLD_DEFAULT, "glBlendColor"); #endif #ifdef WIN32 @@ -539,103 +600,24 @@ getPropertiesFromCurrentContext( ctxInfo->texture_max_level_enum = GL_TEXTURE_MAX_LEVEL; /* ... */ - - } else { /* check 1.1 extension */ - if(isExtensionSupported(tmpExtensionStr,"GL_EXT_rescale_normal")){ - ctxInfo->rescale_normal_ext = JNI_TRUE; - ctxInfo->rescale_normal_ext_enum = GL_RESCALE_NORMAL_EXT; - } - if(isExtensionSupported(tmpExtensionStr,"GL_BGR_EXT")) { - ctxInfo->bgr_ext = 1; - ctxInfo->bgr_ext_enum = GL_BGR_EXT; - } - - if(isExtensionSupported(tmpExtensionStr,"GL_EXT_texture3D" )){ - ctxInfo->texture3DAvailable = JNI_TRUE; - ctxInfo->textureExtMask |= javax_media_j3d_Canvas3D_TEXTURE_3D; - ctxInfo->texture_3D_ext_enum = GL_TEXTURE_3D_EXT; - ctxInfo->texture_wrap_r_ext_enum = GL_TEXTURE_WRAP_R_EXT; -#if defined(SOLARIS) || defined(__linux__) - ctxInfo->glTexImage3DEXT = (MYPFNGLTEXIMAGE3DPROC )dlsym(RTLD_DEFAULT, "glTexImage3DEXT"); - ctxInfo->glTexSubImage3DEXT = (MYPFNGLTEXSUBIMAGE3DPROC )dlsym(RTLD_DEFAULT, "glTexSubImage3DEXT"); - /* Fallback to non-EXT variants, needed for older - NVIDIA drivers which announce GL_EXT_texture3D but - don't have the EXT variants */ - if (ctxInfo->glTexImage3DEXT == NULL || - ctxInfo->glTexSubImage3DEXT == NULL) { - - ctxInfo->glTexImage3DEXT = - (MYPFNGLTEXIMAGE3DPROC) dlsym(RTLD_DEFAULT, "glTexImage3D"); - ctxInfo->glTexSubImage3DEXT = - (MYPFNGLTEXSUBIMAGE3DPROC) dlsym(RTLD_DEFAULT, "glTexSubImage3D"); - - if (ctxInfo->glTexImage3DEXT == NULL || - ctxInfo->glTexSubImage3DEXT == NULL) { - - ctxInfo->textureExtMask &= - ~javax_media_j3d_Canvas3D_TEXTURE_3D; - ctxInfo->texture3DAvailable = JNI_FALSE; - } - } - -#endif -#ifdef WIN32 - ctxInfo->glTexImage3DEXT = (MYPFNGLTEXIMAGE3DPROC )wglGetProcAddress("glTexImage3DEXT"); - ctxInfo->glTexSubImage3DEXT = (MYPFNGLTEXSUBIMAGE3DPROC )wglGetProcAddress("glTexSubImage3DEXT"); - if ((ctxInfo->glTexImage3DEXT == NULL) || (ctxInfo->glTexSubImage3DEXT == NULL)) { - ctxInfo->textureExtMask &= ~javax_media_j3d_Canvas3D_TEXTURE_3D; - ctxInfo->texture3DAvailable = JNI_FALSE; - } -#endif - } - - - if(isExtensionSupported(tmpExtensionStr, "GL_EXT_texture_edge_clamp")) { - ctxInfo->texture_clamp_to_edge_enum = GL_CLAMP_TO_EDGE_EXT; - } else if(isExtensionSupported(tmpExtensionStr, "GL_SGIS_texture_edge_clamp")) { - ctxInfo->texture_clamp_to_edge_enum = GL_CLAMP_TO_EDGE_SGIS; - } else { - /* fallback to GL_CLAMP */ - ctxInfo->texture_clamp_to_edge_enum = GL_CLAMP; - } - - - if(isExtensionSupported(tmpExtensionStr, "GL_EXT_blend_color")){ - ctxInfo->blend_color_ext = JNI_TRUE; -#if defined(SOLARIS) || defined(__linux__) - ctxInfo->glBlendColor = (MYPFNGLBLENDCOLOREXTPROC )dlsym(RTLD_DEFAULT, "glBlendColorEXT"); -#endif -#ifdef WIN32 - ctxInfo->glBlendColor = (MYPFNGLBLENDCOLOREXTPROC )wglGetProcAddress("glBlendColorEXT"); - if (ctxInfo->glBlendColor == NULL) { - ctxInfo->blend_color_ext = JNI_FALSE; - } -#endif - ctxInfo->blendFunctionTable[7] = GL_CONSTANT_COLOR_EXT; - } - - if(isExtensionSupported(tmpExtensionStr,"GL_EXT_separate_specular_color" )){ - ctxInfo->seperate_specular_color = JNI_TRUE; - ctxInfo->light_model_color_control_enum = GL_LIGHT_MODEL_COLOR_CONTROL_EXT; - ctxInfo->single_color_enum = GL_SINGLE_COLOR_EXT; - ctxInfo->seperate_specular_color_enum = GL_SEPARATE_SPECULAR_COLOR_EXT ; - } + } + else { + jclass rte; - if (isExtensionSupported(tmpExtensionStr,"GL_SGIS_texture_lod")) { - ctxInfo->textureLodAvailable = JNI_TRUE; - ctxInfo->textureExtMask |= javax_media_j3d_Canvas3D_TEXTURE_LOD_RANGE; - ctxInfo->texture_min_lod_enum = GL_TEXTURE_MIN_LOD_SGIS; - ctxInfo->texture_max_lod_enum = GL_TEXTURE_MAX_LOD_SGIS; - ctxInfo->texture_base_level_enum = GL_TEXTURE_BASE_LEVEL_SGIS; - ctxInfo->texture_max_level_enum = GL_TEXTURE_MAX_LEVEL_SGIS; + fprintf(stderr, + "Java 3D ERROR : OpenGL 1.2 or better is required (GL_VERSION=%d.%d)\n", + versionNumbers[0], versionNumbers[1]); + if ((rte = (*(table->FindClass))(env, "java/lang/IllegalStateException")) != NULL) { + (*(table->ThrowNew))(env, rte, "GL_VERSION"); } - - - /* ... */ + return JNI_FALSE; } + /* + * TODO: Remove extension checks for those features that are core + * in OpenGL 1.2 and just use the core feature. + */ - /* check extensions for remaining of 1.1 and 1.2 */ if(isExtensionSupported(tmpExtensionStr, "GL_EXT_multi_draw_arrays")){ ctxInfo->multi_draw_arrays_ext = JNI_TRUE; @@ -672,13 +654,7 @@ getPropertiesFromCurrentContext( ctxInfo->arb_transpose_matrix = JNI_TRUE; } -#ifdef OBSOLETE_HW_COMPRESSED_GEOM - if(isExtensionSupported(tmpExtensionStr, "GL_SUNX_geometry_compression")) { - ctxInfo->geometry_compression_sunx = JNI_TRUE ; - } -#endif /* OBSOLETE_HW_COMPRESSED_GEOM */ - -#if defined(SOLARIS) || defined(__linux__) +#if defined(UNIX) /* * setup ARB_multisample, under windows this is setup in * NativeConfigTemplate when pixel format is choose @@ -713,15 +689,17 @@ getPropertiesFromCurrentContext( * it by default if the surface is multisample capable. */ if (ctxInfo->arb_multisample && !ctxInfo->implicit_multisample) { - glDisable(MULTISAMPLE_ARB); + glDisable(GL_MULTISAMPLE_ARB); } - /* - * checking of the texture extensions is done in checkTextureExtensions(), - * so that the same function can be used for queryContext as well - */ + + /* Check texture extensions */ checkTextureExtensions(env, obj, tmpExtensionStr, versionNumbers[1], - ctxInfo); - + ctxInfo); + + /* Check shader extensions */ + checkGLSLShaderExtensions(env, obj, tmpExtensionStr, ctxInfo, glslLibraryAvailable); + checkCgShaderExtensions(env, obj, tmpExtensionStr, ctxInfo, cgLibraryAvailable); + /* ... */ /* *********************************************************/ @@ -766,33 +744,6 @@ getPropertiesFromCurrentContext( ctxInfo->extMask |= javax_media_j3d_Canvas3D_ARB_TRANSPOSE_MATRIX; } -#ifdef OBSOLETE_HW_COMPRESSED_GEOM - /* - * Check for compressed geometry extensions and see if hardware - * acceleration is supported in the runtime environment. - */ - if (ctxInfo->geometry_compression_sunx) { - cgHwStr = (char *)glGetString(GL_COMPRESSED_GEOM_ACCELERATED_SUNX) ; - } - - if (cgHwStr == 0 || strstr(cgHwStr, " ")) { - ctxInfo->geometry_compression_accelerated = 0 ; - - } else { - char *tmp = strdup(cgHwStr) ; - - ctxInfo->geometry_compression_accelerated_major_version = - atoi(strtok(tmp, ".")) ; - ctxInfo->geometry_compression_accelerated_minor_version = - atoi(strtok(0, ".")) ; - ctxInfo->geometry_compression_accelerated_subminor_version = - atoi(strtok(0, ".")) ; - - free(tmp) ; - ctxInfo->geometry_compression_accelerated = 1 ; - } -#endif /* OBSOLETE_HW_COMPRESSED_GEOM */ - /* Setup GL_EXT_separate_specular_color */ if(ctxInfo->seperate_specular_color) { ctxInfo->extMask |= javax_media_j3d_Canvas3D_EXT_SEPARATE_SPECULAR_COLOR; @@ -893,13 +844,9 @@ getPropertiesFromCurrentContext( } } - - DescribePixelFormat((HDC) hdc, pixelFormat, sizeof(pfd), &pfd); - - stencilSize = pfd.cStencilBits; #endif -#if defined(SOLARIS) || defined(__linux__) +#if defined(UNIX) if(ctxInfo->multi_draw_arrays_ext) { ctxInfo->glMultiDrawArraysEXT = (MYPFNGLMULTIDRAWARRAYSEXTPROC)dlsym(RTLD_DEFAULT, "glMultiDrawArraysEXT"); @@ -977,14 +924,7 @@ getPropertiesFromCurrentContext( } } -#endif /* Solaris or Linux */ - - if (stencilSize > 1) { - ctxInfo->extMask |= javax_media_j3d_Canvas3D_STENCIL_BUFFER; - } - - - /* ... */ +#endif /* UNIX */ /* clearing up the memory */ free(tmpExtensionStr); @@ -1013,12 +953,20 @@ void setupCanvasProperties( (*(table->SetBooleanField))(env, obj, rsc_field, ctxInfo->arb_multitexture); if (ctxInfo->arb_multitexture) { - rsc_field = (jfieldID) (*(table->GetFieldID))(env, cv_class, "numTexUnitSupported", "I"); - (*(table->SetIntField))(env, obj, rsc_field, ctxInfo->textureUnitCount); - rsc_field = (jfieldID) (*(table->GetFieldID))(env, cv_class, "numTexCoordSupported", "I"); - (*(table->SetIntField))(env, obj, rsc_field, ctxInfo->textureUnitCount); + rsc_field = (jfieldID) (*(table->GetFieldID))(env, cv_class, "maxTextureUnits", "I"); + (*(table->SetIntField))(env, obj, rsc_field, ctxInfo->maxTextureUnits); + rsc_field = (jfieldID) (*(table->GetFieldID))(env, cv_class, "maxTexCoordSets", "I"); + (*(table->SetIntField))(env, obj, rsc_field, ctxInfo->maxTexCoordSets); + rsc_field = (jfieldID) (*(table->GetFieldID))(env, cv_class, "maxTextureImageUnits", "I"); + (*(table->SetIntField))(env, obj, rsc_field, ctxInfo->maxTextureImageUnits); + rsc_field = (jfieldID) (*(table->GetFieldID))(env, cv_class, "maxVertexTextureImageUnits", "I"); + (*(table->SetIntField))(env, obj, rsc_field, ctxInfo->maxVertexTextureImageUnits); + rsc_field = (jfieldID) (*(table->GetFieldID))(env, cv_class, "maxCombinedTextureImageUnits", "I"); + (*(table->SetIntField))(env, obj, rsc_field, ctxInfo->maxCombinedTextureImageUnits); + rsc_field = (jfieldID) (*(table->GetFieldID))(env, cv_class, "maxVertexAttrs", "I"); + (*(table->SetIntField))(env, obj, rsc_field, ctxInfo->maxVertexAttrs); } - + rsc_field = (jfieldID) (*(table->GetFieldID))(env, cv_class, "extensionsSupported", "I"); (*(table->SetIntField))(env, obj, rsc_field, ctxInfo->extMask); @@ -1067,6 +1015,13 @@ void setupCanvasProperties( rsc_field = (jfieldID) (*(table->GetFieldID))(env, cv_class, "texture3DDepthMax", "I"); (*(table->SetIntField))(env, obj, rsc_field, param); + + rsc_field = (jfieldID) (*(table->GetFieldID))(env, cv_class, "shadingLanguageGLSL", "Z"); + (*(table->SetBooleanField))(env, obj, rsc_field, ctxInfo->shadingLanguageGLSL); + + rsc_field = (jfieldID) (*(table->GetFieldID))(env, cv_class, "shadingLanguageCg", "Z"); + (*(table->SetBooleanField))(env, obj, rsc_field, ctxInfo->shadingLanguageCg); + } JNIEXPORT @@ -1090,12 +1045,12 @@ void JNICALL Java_javax_media_j3d_Canvas3D_destroyContext( wglDeleteContext((HGLRC)context); #endif /* WIN32 */ -#if defined(SOLARIS) || defined(__linux__) +#if defined(UNIX) /* glXMakeCurrent((Display *)display, None, NULL); */ glXDestroyContext((Display *)display, (GLXContext)context); -#endif /* SOLARIS */ +#endif /* UNIX */ /* cleanup CtxInfo and free its memory */ cleanupCtxInfo(s); @@ -1129,7 +1084,9 @@ jlong JNICALL Java_javax_media_j3d_Canvas3D_createNewContext( jlong fbConfigListPtr, jlong sharedCtxInfo, jboolean isSharedCtx, - jboolean offScreen) + jboolean offScreen, + jboolean glslLibraryAvailable, + jboolean cgLibraryAvailable) { jlong gctx; jlong sharedCtx; @@ -1142,7 +1099,7 @@ jlong JNICALL Java_javax_media_j3d_Canvas3D_createNewContext( GraphicsContextPropertiesInfo *sharedCtxStructure; int PixelFormatID=0; -#if defined(SOLARIS) || defined(__linux__) +#if defined(UNIX) /* Fix for issue 20 */ @@ -1154,10 +1111,12 @@ jlong JNICALL Java_javax_media_j3d_Canvas3D_createNewContext( fbConfigList = (GLXFBConfig *)fbConfigListPtr; /* - fprintf(stderr, "Canvas3D_createNewContext: \n"); - fprintf(stderr, "fbConfigListPtr 0x%x\n", (int) fbConfigListPtr); - fprintf(stderr, "fbConfigList 0x%x, fbConfigList[0] 0x%x\n", - (int) fbConfigList, (int) fbConfigList[0]); + fprintf(stderr, "Canvas3D_createNewContext: \n"); + fprintf(stderr, " fbConfigListPtr 0x%x\n", (int) fbConfigListPtr); + fprintf(stderr, " fbConfigList 0x%x, fbConfigList[0] 0x%x\n", + (int) fbConfigList, (int) fbConfigList[0]); + fprintf(stderr, " glslLibraryAvailable = %d\n", glslLibraryAvailable); + fprintf(stderr, " cgLibraryAvailable = %d\n", cgLibraryAvailable); */ if(sharedCtxInfo == 0) @@ -1204,13 +1163,13 @@ jlong JNICALL Java_javax_media_j3d_Canvas3D_createNewContext( return 0; } - + /* Shouldn't this be moved to NativeConfig. ? */ glXGetFBConfigAttrib((Display *) display, fbConfigList[0], GLX_STENCIL_SIZE, &stencilSize); gctx = (jlong)ctx; -#endif /* SOLARIS */ +#endif /* UNIX */ #ifdef WIN32 HGLRC hrc; /* HW Rendering Context */ @@ -1245,7 +1204,7 @@ jlong JNICALL Java_javax_media_j3d_Canvas3D_createNewContext( * by wglChoosePixelFormat() or wglChoosePixelFormatARB. */ - if(!offScreen) { // Fix to issue 104 + if(!offScreen) { /* Fix to issue 104 */ if ((PixelFormatInfoPtr == NULL) || (PixelFormatInfoPtr->onScreenPFormat <= 0)) { printErrorMessage("Canvas3D_createNewContext: onScreen PixelFormat is invalid"); return 0; @@ -1266,11 +1225,11 @@ jlong JNICALL Java_javax_media_j3d_Canvas3D_createNewContext( SetPixelFormat(hdc, PixelFormatID, NULL); - // fprintf(stderr, "Before wglCreateContext\n"); + /* fprintf(stderr, "Before wglCreateContext\n"); */ hrc = wglCreateContext( hdc ); - // fprintf(stderr, "After wglCreateContext hrc = 0x%x\n", hrc); + /* fprintf(stderr, "After wglCreateContext hrc = 0x%x\n", hrc); */ if (!hrc) { err = GetLastError(); @@ -1286,9 +1245,9 @@ jlong JNICALL Java_javax_media_j3d_Canvas3D_createNewContext( wglShareLists( (HGLRC) sharedCtx, hrc ); } - // fprintf(stderr, "Before wglMakeCurrent\n"); + /* fprintf(stderr, "Before wglMakeCurrent\n"); */ result = wglMakeCurrent(hdc, hrc); - // fprintf(stderr, "After wglMakeCurrent result = %d\n", result); + /* fprintf(stderr, "After wglMakeCurrent result = %d\n", result); */ if (!result) { err = GetLastError(); @@ -1304,13 +1263,14 @@ jlong JNICALL Java_javax_media_j3d_Canvas3D_createNewContext( /* allocate the structure */ ctxInfo = (GraphicsContextPropertiesInfo *)malloc(sizeof(GraphicsContextPropertiesInfo)); - + /* initialize the structure */ initializeCtxInfo(env, ctxInfo); ctxInfo->context = gctx; - + if (!getPropertiesFromCurrentContext(env, obj, ctxInfo, (jlong) hdc, PixelFormatID, - stencilSize, fbConfigListPtr, offScreen)) { + fbConfigListPtr, offScreen, + glslLibraryAvailable, cgLibraryAvailable)) { return 0; } @@ -1358,7 +1318,7 @@ void JNICALL Java_javax_media_j3d_Canvas3D_useCtx( { GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; jlong ctx = ctxProperties->context; -#if defined(SOLARIS) || defined(__linux__) +#if defined(UNIX) glXMakeCurrent((Display *)display, (GLXDrawable)window, (GLXContext)ctx); #endif @@ -1409,7 +1369,7 @@ void JNICALL Java_javax_media_j3d_Canvas3D_composite( fprintf(stderr, "Canvas3D.composite()\n"); #endif /* Temporarily disable fragment and most 3D operations */ - /* TODO: the GL_TEXTURE_BIT may not be necessary here */ + /* XXXX: the GL_TEXTURE_BIT may not be necessary here */ glPushAttrib(GL_ENABLE_BIT|GL_TEXTURE_BIT|GL_DEPTH_BUFFER_BIT); disableAttribFor2D(ctxProperties); @@ -1708,7 +1668,7 @@ void JNICALL Java_javax_media_j3d_Canvas3D_clear( pixels_obj, NULL); /* Temporarily disable fragment and most 3D operations */ - /* TODO: the GL_TEXTURE_BIT may not be necessary */ + /* XXXX: the GL_TEXTURE_BIT may not be necessary */ glPushAttrib(GL_ENABLE_BIT|GL_TEXTURE_BIT); disableAttribFor2D(ctxProperties); @@ -1743,7 +1703,8 @@ void JNICALL Java_javax_media_j3d_Canvas3D_clear( break; case FORMAT_BYTE_GRAY: case FORMAT_USHORT_GRAY: - /* TODO: throw exception */ + default: + throwAssert(env, "illegal format"); break; } @@ -1988,9 +1949,11 @@ void JNICALL Java_javax_media_j3d_Canvas3D_textureclear(JNIEnv *env, case FORMAT_BYTE_LA: gltype = GL_LUMINANCE_ALPHA; break; + case FORMAT_BYTE_GRAY: case FORMAT_USHORT_GRAY: - /* TODO: throw exception */ + default: + throwAssert(env, "illegal format"); break; } @@ -2296,7 +2259,7 @@ jint JNICALL Java_javax_media_j3d_Canvas3D_swapBuffers( jint win) { -#if defined(SOLARIS) || defined(__linux__) +#if defined(UNIX) glXSwapBuffers((Display *)display, (Window)win); #endif @@ -2463,17 +2426,6 @@ void JNICALL Java_javax_media_j3d_Canvas3D_freeTexture( } - -JNIEXPORT jint JNICALL Java_javax_media_j3d_Canvas3D_getTextureUnitCount( - JNIEnv *env, - jobject obj, - jlong ctxInfo) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - return ctxProperties->textureUnitCount; -} - /* * Method: getTextureColorTableSize */ @@ -2494,7 +2446,7 @@ int getTextureColorTableSize( ctxProperties->glGetColorTableParameteriv = (MYPFNGLGETCOLORTABLEPARAMETERIVPROC)wglGetProcAddress("glGetColorTableParameteriv"); #endif -#if defined(SOLARIS) || defined(__linux__) +#if defined(UNIX) ctxProperties->glColorTable = (MYPFNGLCOLORTABLEPROC)dlsym(RTLD_DEFAULT, "glColorTable"); ctxProperties->glGetColorTableParameteriv = @@ -2507,7 +2459,7 @@ int getTextureColorTableSize( ctxProperties->glGetColorTableParameteriv = (MYPFNGLGETCOLORTABLEPARAMETERIVPROC)wglGetProcAddress("glGetColorTableParameterivSGI"); #endif -#if defined(SOLARIS) || defined(__linux__) +#if defined(UNIX) ctxProperties->glColorTable = (MYPFNGLCOLORTABLEPROC)dlsym(RTLD_DEFAULT, "glColorTableSGI"); ctxProperties->glGetColorTableParameteriv = @@ -2540,7 +2492,7 @@ void JNICALL Java_javax_media_j3d_Canvas3D_videoResize( jint win, jfloat dvrFactor) { -#if defined(SOLARIS) || defined(__linux__) +#if defined(UNIX) GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; @@ -2560,7 +2512,7 @@ void JNICALL Java_javax_media_j3d_Canvas3D_videoResizeCompensation( jboolean enable) { -#if defined(SOLARIS) || defined(__linux__) +#if defined(UNIX) GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; @@ -2591,7 +2543,7 @@ jint JNICALL Java_javax_media_j3d_Canvas3D_createOffScreenBuffer( jint height) { -#if defined(SOLARIS) || defined(__linux__) +#if defined(UNIX) /* Fix for issue 20 */ @@ -2699,7 +2651,7 @@ jint JNICALL Java_javax_media_j3d_Canvas3D_createOffScreenBuffer( } -#endif /* SOLARIS */ +#endif /* UNIX */ #ifdef WIN32 /* Fix for issue 76 */ @@ -2902,7 +2854,7 @@ void JNICALL Java_javax_media_j3d_Canvas3D_destroyOffScreenBuffer( jfieldID offScreenBuffer_field; JNIEnv table = *env; -#if defined(SOLARIS) || defined(__linux__) +#if defined(UNIX) /* Fix for Issue 20 */ GLXFBConfig *fbConfigList = (GLXFBConfig *)fbConfigListPtr; int val; @@ -2918,7 +2870,7 @@ void JNICALL Java_javax_media_j3d_Canvas3D_destroyOffScreenBuffer( glXDestroyPixmap((Display *) display, (GLXPixmap)window); } -#endif /* SOLARIS */ +#endif /* UNIX */ #ifdef WIN32 /* Fix for issue 76 */ @@ -3023,9 +2975,11 @@ void JNICALL Java_javax_media_j3d_Canvas3D_readOffScreenBuffer( case FORMAT_BYTE_LA: type = GL_LUMINANCE_ALPHA; break; + case FORMAT_BYTE_GRAY: case FORMAT_USHORT_GRAY: - /* TODO: throw exception */ + default: + throwAssert(env, "illegal format"); break; } @@ -3057,15 +3011,16 @@ initializeCtxInfo(JNIEnv *env , GraphicsContextPropertiesInfo* ctxInfo) /* 1.2 and GL_ARB_imaging */ ctxInfo->blend_color_ext = JNI_FALSE; - ctxInfo->color_table_ext = JNI_FALSE; - ctxInfo->blendFunctionTable[0] = GL_ZERO; - ctxInfo->blendFunctionTable[1] = GL_ONE; - ctxInfo->blendFunctionTable[2] = GL_SRC_ALPHA; - ctxInfo->blendFunctionTable[3] = GL_ONE_MINUS_SRC_ALPHA; - ctxInfo->blendFunctionTable[4] = GL_DST_COLOR; - ctxInfo->blendFunctionTable[5] = GL_SRC_COLOR; - ctxInfo->blendFunctionTable[6] = GL_ONE_MINUS_SRC_COLOR; - ctxInfo->blendFunctionTable[7] = GL_SRC_COLOR; + ctxInfo->color_table_ext = JNI_FALSE; + ctxInfo->blendFunctionTable[BLEND_ZERO] = GL_ZERO; + ctxInfo->blendFunctionTable[BLEND_ONE] = GL_ONE; + ctxInfo->blendFunctionTable[BLEND_SRC_ALPHA] = GL_SRC_ALPHA; + ctxInfo->blendFunctionTable[BLEND_ONE_MINUS_SRC_ALPHA] = GL_ONE_MINUS_SRC_ALPHA; + ctxInfo->blendFunctionTable[BLEND_DST_COLOR] = GL_DST_COLOR; + ctxInfo->blendFunctionTable[BLEND_ONE_MINUS_DST_COLOR] = GL_ONE_MINUS_DST_COLOR; + ctxInfo->blendFunctionTable[BLEND_SRC_COLOR] = GL_SRC_COLOR; + ctxInfo->blendFunctionTable[BLEND_ONE_MINUS_SRC_COLOR] = GL_ONE_MINUS_SRC_COLOR; + ctxInfo->blendFunctionTable[BLEND_CONSTANT_COLOR] = GL_CONSTANT_COLOR; /* 1.1 extensions or 1.2 extensions */ /* sun extensions */ @@ -3075,7 +3030,6 @@ initializeCtxInfo(JNIEnv *env , GraphicsContextPropertiesInfo* ctxInfo) ctxInfo->videoResizeAvailable = JNI_FALSE; ctxInfo->global_alpha_sun = JNI_FALSE; ctxInfo->constant_data_sun = JNI_FALSE; - ctxInfo->geometry_compression_sunx = JNI_FALSE; /* EXT extensions */ ctxInfo->abgr_ext = JNI_FALSE; @@ -3092,7 +3046,12 @@ initializeCtxInfo(JNIEnv *env , GraphicsContextPropertiesInfo* ctxInfo) ctxInfo->arb_multitexture = JNI_FALSE; ctxInfo->arb_multisample = JNI_FALSE; - ctxInfo->textureUnitCount = 1; + ctxInfo->maxTexCoordSets = 1; + ctxInfo->maxTextureUnits = 1; + ctxInfo->maxTextureImageUnits = 0; + ctxInfo->maxVertexTextureImageUnits = 0; + ctxInfo->maxCombinedTextureImageUnits = 0; + ctxInfo->textureEnvCombineAvailable = JNI_FALSE; ctxInfo->textureCombineDot3Available = JNI_FALSE; ctxInfo->textureCombineSubtractAvailable = JNI_FALSE; @@ -3111,15 +3070,13 @@ initializeCtxInfo(JNIEnv *env , GraphicsContextPropertiesInfo* ctxInfo) ctxInfo->textureLodAvailable = JNI_FALSE; ctxInfo->textureLodBiasAvailable = JNI_FALSE; - ctxInfo->geometry_compression_accelerated = JNI_FALSE; - ctxInfo->geometry_compression_accelerated_major_version = 0; - ctxInfo->geometry_compression_accelerated_minor_version = 0; - ctxInfo->geometry_compression_accelerated_subminor_version = 0; - /* extension mask */ ctxInfo->extMask = 0; ctxInfo->textureExtMask = 0; + ctxInfo->shadingLanguageGLSL = JNI_FALSE; + ctxInfo->shadingLanguageCg = JNI_FALSE; + ctxInfo->glBlendColor = NULL; ctxInfo->glBlendColorEXT = NULL; ctxInfo->glColorTable = NULL; @@ -3151,9 +3108,28 @@ initializeCtxInfo(JNIEnv *env , GraphicsContextPropertiesInfo* ctxInfo) ctxInfo->glDetailTexFuncSGIS = NULL; ctxInfo->glTexFilterFuncSGIS = NULL; -#if defined(SOLARIS) || defined(__linux__) + /* Initialize shader program Id */ + ctxInfo->shaderProgramId = 0; + + /* Initialize maximum number of vertex attrs */ + ctxInfo->maxVertexAttrs = 0; + + /* Initialize shader vertex attribute function pointers */ + ctxInfo->vertexAttrPointer = dummyVertexAttrPointer; + ctxInfo->enableVertexAttrArray = dummyEnDisableVertexAttrArray; + ctxInfo->disableVertexAttrArray = dummyEnDisableVertexAttrArray; + ctxInfo->vertexAttr1fv = dummyVertexAttr; + ctxInfo->vertexAttr2fv = dummyVertexAttr; + ctxInfo->vertexAttr3fv = dummyVertexAttr; + ctxInfo->vertexAttr4fv = dummyVertexAttr; + + /* Initialize shader info pointers */ + ctxInfo->glslCtxInfo = NULL; + ctxInfo->cgCtxInfo = NULL; + +#if defined(UNIX) ctxInfo->glXVideoResizeSUN = NULL; -#endif /* SOLARIS || __linux__ */ +#endif /* UNIX */ } static void @@ -3242,7 +3218,9 @@ void JNICALL Java_javax_media_j3d_Canvas3D_createQueryContext( jlong fbConfigListPtr, jboolean offScreen, jint width, - jint height) + jint height, + jboolean glslLibraryAvailable, + jboolean cgLibraryAvailable) { JNIEnv table = *env; jlong gctx; @@ -3251,7 +3229,7 @@ void JNICALL Java_javax_media_j3d_Canvas3D_createQueryContext( int PixelFormatID=0; GraphicsContextPropertiesInfo* ctxInfo = (GraphicsContextPropertiesInfo *)malloc(sizeof(GraphicsContextPropertiesInfo)); -#if defined(SOLARIS) || defined(__linux__) +#if defined(UNIX) /* Fix for issue 20 */ @@ -3356,7 +3334,7 @@ void JNICALL Java_javax_media_j3d_Canvas3D_createQueryContext( * by wglChoosePixelFormat() or wglChoosePixelFormatARB. */ - // Fix to issue 104 + /* Fix to issue 104 */ if(!offScreen) { if ((PixelFormatInfoPtr == NULL) || (PixelFormatInfoPtr->onScreenPFormat <= 0)) { printErrorMessage("Canvas3D_createNewContext: onScreen PixelFormat is invalid"); @@ -3431,7 +3409,8 @@ void JNICALL Java_javax_media_j3d_Canvas3D_createQueryContext( /* get current context properties */ if (getPropertiesFromCurrentContext(env, obj, ctxInfo, (jlong) hdc, PixelFormatID, - stencilSize, fbConfigListPtr, offScreen)) { + fbConfigListPtr, offScreen, + glslLibraryAvailable, cgLibraryAvailable)) { /* put the properties to the Java side */ setupCanvasProperties(env, obj, ctxInfo); } @@ -3439,11 +3418,11 @@ void JNICALL Java_javax_media_j3d_Canvas3D_createQueryContext( /* clear up the context , colormap and window if appropriate */ if(window == 0 && !offScreen){ -#if defined(SOLARIS) || defined(__linux__) +#if defined(UNIX) Java_javax_media_j3d_Canvas3D_destroyContext(env, obj, display, newWin, (jlong)ctxInfo); XDestroyWindow((Display *)display, glWin); XFreeColormap((Display *)display, cmap); -#endif /* SOLARIS */ +#endif /* UNIX */ #ifdef WIN32 /* Release DC */ ReleaseDC(hDummyWnd, hdc); @@ -3495,10 +3474,10 @@ JNIEXPORT void JNICALL Java_javax_media_j3d_Canvas3D_setFullSceneAntialiasing if (ctxProperties->arb_multisample && !ctxProperties->implicit_multisample) { if(enable == JNI_TRUE) { - glEnable(MULTISAMPLE_ARB); + glEnable(GL_MULTISAMPLE_ARB); } else { - glDisable(MULTISAMPLE_ARB); + glDisable(GL_MULTISAMPLE_ARB); } } @@ -3521,7 +3500,7 @@ jboolean JNICALL Java_javax_media_j3d_Canvas3D_validGraphicsMode( return (devMode.dmBitsPerPel > 8); #endif -#if defined(SOLARIS) || defined(__linux__) +#if defined(UNIX) return JNI_TRUE; #endif } diff --git a/src/native/ogl/CgShaderProgram.c b/src/native/ogl/CgShaderProgram.c new file mode 100644 index 0000000..5e7654b --- /dev/null +++ b/src/native/ogl/CgShaderProgram.c @@ -0,0 +1,1815 @@ +/* + * $RCSfile$ + * + * Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved. + * + * Use is subject to license terms. + * + * $Revision$ + * $Date$ + * $State$ + */ + +#if defined(LINUX) +#define _GNU_SOURCE 1 +#endif + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <math.h> +#include <jni.h> + +#include "gldefs.h" +#include "CgWrapper.h" + +#if defined(UNIX) +#include <dlfcn.h> +#endif + + +extern char *strJavaToC(JNIEnv *env, jstring str); +extern void throwAssert(JNIEnv *env, char *str); +extern jobject createShaderError(JNIEnv *env, + int errorCode, + const char *errorMsg, + const char *detailMsg); + +static void cgVertexAttrPointer(GraphicsContextPropertiesInfo *ctxProperties, + int index, int size, int type, int stride, + const void *pointer); +static void cgEnableVertexAttrArray(GraphicsContextPropertiesInfo *ctxProperties, + int index); +static void cgDisableVertexAttrArray(GraphicsContextPropertiesInfo *ctxProperties, + int index); +static void cgVertexAttr(GraphicsContextPropertiesInfo *ctxProperties, + int index, const float *v); + + +/* Global CG wrapper info struct, created by MasterControl during initialization */ +static CgWrapperInfo *globalCgWrapperInfo = NULL; + + +/* + * Class: javax_media_j3d_MasterControl + * Method: loadNativeCgLibrary + * Signature: ()Z + */ +JNIEXPORT jboolean JNICALL +Java_javax_media_j3d_MasterControl_loadNativeCgLibrary( + JNIEnv *env, + jclass clazz, + jobjectArray libpath) +{ + CgWrapperInfo *cgWrapperInfo; + int i, pathLen; + char *errName = NULL; + +#ifdef WIN32 + DWORD err; + LPTSTR errString; + UINT origErrorMode; +#endif /* WIN32 */ + + /* + * This method is called exactly once to load and initialize the + * CG wrapper library. + */ + + /* Assertion check that we don't get called more than once */ + if (globalCgWrapperInfo != NULL) { + throwAssert(env, "MasterControl.loadNativeCgLibrary called more than once"); + return JNI_FALSE; + } + + /* Allocate global Cg wrapper struct */ + cgWrapperInfo = (CgWrapperInfo*)malloc(sizeof(CgWrapperInfo)); + cgWrapperInfo->loaded = JNI_FALSE; + cgWrapperInfo->cgLibraryHandle = NULL; + +#ifdef COMPILE_CG_SHADERS + + /* Remove the following print statement when the native Cg code is done */ + fprintf(stderr, "*** JAVA 3D : loading experimental native Cg library\n"); + + /* Get number of entries in libpath array */ + pathLen = (*env)->GetArrayLength(env, libpath); + /*fprintf(stderr, "pathLen = %d\n", pathLen);*/ + +#ifdef UNIX + + for (i = 0; i < pathLen; i++) { + jstring libname; + char *libnameStr; + + libname = (*env)->GetObjectArrayElement(env, libpath, i); + libnameStr = strJavaToC(env, libname); + /*fprintf(stderr, "dlopen(%s)\n", libnameStr);*/ + cgWrapperInfo->cgLibraryHandle = dlopen(libnameStr, RTLD_LAZY); + if ((cgWrapperInfo->cgLibraryHandle == NULL) && (i == pathLen-1)) { + errName = strdup(libnameStr); + } + free(libnameStr); + if (cgWrapperInfo->cgLibraryHandle != NULL) { + break; + } + } + + if (cgWrapperInfo->cgLibraryHandle == NULL) { + fprintf(stderr, "JAVA 3D ERROR : Unable to load library "); + perror(errName); + free(errName); + free(cgWrapperInfo); + return JNI_FALSE; + } + + /* Get pointer to library function to setup function pointers */ + cgWrapperInfo->j3dLoadCgFunctionPointers = + (PFNJ3DLOADCGFUNCTIONPOINTERS)dlsym(cgWrapperInfo->cgLibraryHandle, + "j3dLoadCgFunctionPointers"); + +#endif /* UNIX */ + +#ifdef WIN32 + + /* Load the library, suppressing any dialog boxes that may occur */ + origErrorMode = SetErrorMode(SEM_NOOPENFILEERRORBOX | + SEM_FAILCRITICALERRORS); + + for (i = 0; i < pathLen; i++) { + jstring libname; + char *libnameStr; + + libname = (*env)->GetObjectArrayElement(env, libpath, i); + libnameStr = strJavaToC(env, libname); + /*fprintf(stderr, "LoadLibrary(%s)\n", libnameStr);*/ + cgWrapperInfo->cgLibraryHandle = LoadLibrary(libnameStr); + if ((cgWrapperInfo->cgLibraryHandle == NULL) && (i == pathLen-1)) { + errName = strdup(libnameStr); + } + free(libnameStr); + if (cgWrapperInfo->cgLibraryHandle != NULL) { + break; + } + } + + SetErrorMode(origErrorMode); + + if (cgWrapperInfo->cgLibraryHandle == NULL) { + err = GetLastError(); + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_FROM_SYSTEM, + NULL, err, 0, (LPTSTR)&errString, 0, NULL); + + fprintf(stderr, + "JAVA 3D ERROR : Unable to load library %s: %s\n", + errName, errString); + free(errName); + return JNI_FALSE; + } + + cgWrapperInfo->j3dLoadCgFunctionPointers = + (PFNJ3DLOADCGFUNCTIONPOINTERS)GetProcAddress( + (HMODULE)cgWrapperInfo->cgLibraryHandle, + "j3dLoadCgFunctionPointers"); + + if (cgWrapperInfo->j3dLoadCgFunctionPointers == NULL) { + err = GetLastError(); + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_FROM_SYSTEM, + NULL, err, 0, (LPTSTR)&errString, 0, NULL); + + fprintf(stderr, + "JAVA 3D ERROR : Unable to find: j3dLoadCgFunctionPointers: %s\n", + errString); + return JNI_FALSE; + } + +#endif /* WIN32 */ + + if (cgWrapperInfo->j3dLoadCgFunctionPointers) { + cgWrapperInfo->j3dLoadCgFunctionPointers(cgWrapperInfo); + cgWrapperInfo->loaded = JNI_TRUE; + } + +#else /* COMPILE_CG_SHADERS */ + + fprintf(stderr, "Java 3D: CgShaderProgram code not compiled\n"); + +#endif /* COMPILE_CG_SHADERS */ + + /* Save pointer in global variable */ + globalCgWrapperInfo = cgWrapperInfo; + + return cgWrapperInfo->loaded; +} + + +#ifdef COMPILE_CG_SHADERS + +static char * +getErrorLog( + GraphicsContextPropertiesInfo* ctxProperties, + CGerror lastError) +{ + CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; + CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; + + if (lastError != 0) { + const char *errString = cgWrapperInfo->cgGetErrorString(lastError); + const char *delimeter1 = "\n"; + const char *listing = cgWrapperInfo->cgGetLastListing(cgCtxInfo->cgCtx); + + char *errMsg = (char *) + malloc(strlen(errString) + strlen(delimeter1) + strlen(listing) + 1); + + if (errMsg == NULL) { + perror("malloc"); + return NULL; + } + + strcpy(errMsg, errString); + strcat(errMsg, delimeter1); + strcat(errMsg, listing); + + return errMsg; + } + + fprintf(stderr, "Assertion error: assert(lastError != 0) failed\n"); + return NULL; +} + + +static CgCtxInfo * +createCgShaderContext( + JNIEnv *env, + GraphicsContextPropertiesInfo *ctxInfo) +{ + jclass oom; + CGerror lastError; + CgCtxInfo *cgCtxInfo = NULL; + CgWrapperInfo *cgWrapperInfo; + + /* Assertion check that we don't get here unless the library is loaded */ + if (globalCgWrapperInfo == NULL) { + throwAssert(env, "createCgShaderContext: cgWrapperInfo is NULL"); + return NULL; + } + + if (!globalCgWrapperInfo->loaded) { + throwAssert(env, "createCgShaderContext: cgWrapper library not loaded"); + return NULL; + } + + cgCtxInfo = (CgCtxInfo*)malloc(sizeof(CgCtxInfo)); + if (cgCtxInfo == NULL) { + if ((oom = (*env)->FindClass(env, "java/lang/OutOfMemoryError")) != NULL) { + (*env)->ThrowNew(env, oom, "malloc"); + } + return NULL; + } + + /* Point to the global CG wrapper info */ + cgWrapperInfo = cgCtxInfo->cgWrapperInfo = globalCgWrapperInfo; + + /* Create CG context */ + cgCtxInfo->cgCtx = cgWrapperInfo->cgCreateContext(); + + if ((lastError = cgWrapperInfo->cgGetError()) != 0) { + fprintf(stderr, "Fatal error in creating Cg context:\n"); + fprintf(stderr, "\t%s\n", cgWrapperInfo->cgGetErrorString(lastError)); + free(cgCtxInfo); + return NULL; + } + + if (cgCtxInfo->cgCtx == 0) { + fprintf(stderr, "Invalid NULL Cg context\n"); + free(cgCtxInfo); + return NULL; + } + + /* Use GL_ARB_vertex_program extension if supported by video card */ + if (cgWrapperInfo->cgGLIsProfileSupported(CG_PROFILE_ARBVP1)) { + fprintf(stderr, "Using CG_PROFILE_ARBVP1\n"); + cgCtxInfo->vProfile = CG_PROFILE_ARBVP1; + } + else if (cgWrapperInfo->cgGLIsProfileSupported(CG_PROFILE_VP20)) { + fprintf(stderr, "Using CG_PROFILE_VP20\n"); + cgCtxInfo->vProfile = CG_PROFILE_VP20; + } + else { + fprintf(stderr, + "ERROR: Vertex programming extensions (GL_ARB_vertex_program or\n" + "GL_NV_vertex_program) not supported, exiting...\n"); + free(cgCtxInfo); + return NULL; + } + + if ((lastError = cgWrapperInfo->cgGetError()) != 0) { + fprintf(stderr, "FATAL ERROR IN CREATING VERTEX SHADER PROFILE:\n"); + fprintf(stderr, "\t%s\n", cgWrapperInfo->cgGetErrorString(lastError)); + free(cgCtxInfo); + return NULL; + } + + /* Use GL_ARB_fragment_program extension if supported by video card */ + if (cgWrapperInfo->cgGLIsProfileSupported(CG_PROFILE_ARBFP1)) { + fprintf(stderr, "Using CG_PROFILE_ARBFP1\n"); + cgCtxInfo->fProfile = CG_PROFILE_ARBFP1; + } + else if (cgWrapperInfo->cgGLIsProfileSupported(CG_PROFILE_FP20)) { + fprintf(stderr, "Using CG_PROFILE_FP20\n"); + cgCtxInfo->fProfile = CG_PROFILE_FP20; + } + else { + fprintf(stderr, + "Fragment programming extensions (GL_ARB_fragment_program or\n" + "GL_NV_fragment_program) not supported, exiting...\n"); + free(cgCtxInfo); + return NULL; + } + + if ((lastError = cgWrapperInfo->cgGetError()) != 0) { + fprintf(stderr, "FATAL ERROR IN CREATING FRAGMENT SHADER PROFILE:\n"); + fprintf(stderr, "\t%s\n", cgWrapperInfo->cgGetErrorString(lastError)); + free(cgCtxInfo); + return NULL; + } + + /* + fprintf(stderr, "createCgShaderContext: SUCCESS\n"); + fprintf(stderr, " cgCtx = 0x%x\n", cgCtxInfo->cgCtx); + fprintf(stderr, " vProfile = 0x%x\n", cgCtxInfo->vProfile); + fprintf(stderr, " fProfile = 0x%x\n", cgCtxInfo->fProfile); + */ + + return cgCtxInfo; +} + +#endif /* COMPILE_CG_SHADERS */ + + +/* + * Called by getPropertiesFromCurrentContext to initialize the Cg + * shader function pointers and set the flag indicating whether Cg + * shaders are available. + */ +void +checkCgShaderExtensions( + JNIEnv *env, + jobject obj, + char *tmpExtensionStr, + GraphicsContextPropertiesInfo *ctxInfo, + jboolean cgLibraryAvailable) +{ + ctxInfo->shadingLanguageCg = JNI_FALSE; + ctxInfo->cgCtxInfo = NULL; + +#ifdef COMPILE_CG_SHADERS + if (cgLibraryAvailable) { + /* TODO: need to free ctxInfo->cgCtxInfo when ctxInfo is freed */ + ctxInfo->cgCtxInfo = createCgShaderContext(env, ctxInfo); + if (ctxInfo->cgCtxInfo != NULL) { + CgWrapperInfo *cgWrapperInfo = ctxInfo->cgCtxInfo->cgWrapperInfo; + + /* + fprintf(stderr, "Cg ctx is available\n"); + */ + ctxInfo->shadingLanguageCg = JNI_TRUE; + + /* TODO: Query Cg texture sampler limits */ + ctxInfo->maxTextureImageUnits = ctxInfo->maxTextureUnits; + ctxInfo->maxVertexTextureImageUnits = 0; + ctxInfo->maxCombinedTextureImageUnits = ctxInfo->maxTextureUnits; + + /* TODO: Query max vertex attrs */ + ctxInfo->maxVertexAttrs = 2; + + /* Initialize shader vertex attribute function pointers */ + ctxInfo->vertexAttrPointer = cgVertexAttrPointer; + ctxInfo->enableVertexAttrArray = cgEnableVertexAttrArray; + ctxInfo->disableVertexAttrArray = cgDisableVertexAttrArray; + ctxInfo->vertexAttr1fv = cgVertexAttr; + ctxInfo->vertexAttr2fv = cgVertexAttr; + ctxInfo->vertexAttr3fv = cgVertexAttr; + ctxInfo->vertexAttr4fv = cgVertexAttr; + } + /* + else { + fprintf(stderr, "ERROR: Cg ctx *not* available\n"); + } + */ + } +#endif /* COMPILE_CG_SHADERS */ + +} + + +/* + * Class: javax_media_j3d_CgShaderProgramRetained + * Method: createNativeShader + * Signature: (JI[J)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject JNICALL +Java_javax_media_j3d_CgShaderProgramRetained_createNativeShader( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jint shaderType, + jlongArray shaderIdArray) +{ + jobject shaderError = NULL; + +#ifdef COMPILE_CG_SHADERS + GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; + CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; + + jlong *shaderIdPtr; + CGprogram shaderId = 0; + jclass oom; + CgShaderInfo *cgShaderInfo; + + fprintf(stderr, "CgShaderProgramRetained.createNativeShader\n"); + + cgShaderInfo = (CgShaderInfo*)malloc(sizeof(CgShaderInfo)); + if (cgShaderInfo == NULL) { + if ((oom = (*env)->FindClass(env, "java/lang/OutOfMemoryError")) != NULL) { + (*env)->ThrowNew(env, oom, "malloc"); + } + return NULL; + } + cgShaderInfo->cgShader = 0; + cgShaderInfo->shaderType = shaderType; + if (shaderType == javax_media_j3d_Shader_SHADER_TYPE_VERTEX) { + cgShaderInfo->shaderProfile = cgCtxInfo->vProfile; + } + else if (shaderType == javax_media_j3d_Shader_SHADER_TYPE_FRAGMENT) { + cgShaderInfo->shaderProfile = cgCtxInfo->fProfile; + } + else { + cgShaderInfo->shaderProfile = 0; + fprintf(stderr, "shaderType = %d\n", shaderType); + throwAssert(env, "unrecognized shaderType"); + return NULL; + } + + shaderIdPtr = (*env)->GetLongArrayElements(env, shaderIdArray, NULL); + shaderIdPtr[0] = (jlong) cgShaderInfo; + (*env)->ReleaseLongArrayElements(env, shaderIdArray, shaderIdPtr, 0); + +#else /* COMPILE_CG_SHADERS */ + + shaderError = createShaderError(env, + javax_media_j3d_ShaderError_UNSUPPORTED_LANGUAGE_ERROR, + "CgShaderProgram support not compiled", + NULL); + +#endif /* !COMPILE_CG_SHADERS */ + + return shaderError; +} + + +/* + * Class: javax_media_j3d_CgShaderProgramRetained + * Method: destroyNativeShader + * Signature: (JJ)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject JNICALL +Java_javax_media_j3d_CgShaderProgramRetained_destroyNativeShader( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jlong shaderId) +{ + jobject shaderError = NULL; + +#ifdef COMPILE_CG_SHADERS + + GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; + CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; + CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; + + CgShaderInfo *cgShaderInfo = (CgShaderInfo *)shaderId; + + fprintf(stderr, "CgShaderProgramRetained.destroyNativeShader\n"); + + if (cgShaderInfo != NULL) { + if (cgShaderInfo->cgShader != 0) { + cgWrapperInfo->cgDestroyProgram(cgShaderInfo->cgShader); + } + + free(cgShaderInfo); + } + +#else /* COMPILE_CG_SHADERS */ + + shaderError = createShaderError(env, + javax_media_j3d_ShaderError_UNSUPPORTED_LANGUAGE_ERROR, + "CgShaderProgram support not compiled", + NULL); + +#endif /* !COMPILE_CG_SHADERS */ + + return shaderError; +} + + +/* + * Class: javax_media_j3d_CgShaderProgramRetained + * Method: compileNativeShader + * Signature: (JJLjava/lang/String;)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject JNICALL +Java_javax_media_j3d_CgShaderProgramRetained_compileNativeShader( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jlong shaderId, + jstring program) +{ + jobject shaderError = NULL; + +#ifdef COMPILE_CG_SHADERS + + /* TODO: implement this */ + + GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; + CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; + CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; + + CgShaderInfo *cgShaderInfo = (CgShaderInfo *)shaderId; + CGerror lastError; + GLcharARB *shaderString = NULL; + + fprintf(stderr, "CgShaderProgramRetained.compileNativeShader\n"); + + /* Assertion check the cgShaderInfo pointer */ + if (cgShaderInfo == NULL) { + throwAssert(env, "cgShaderInfo is NULL"); + return NULL; + } + + /* Assertion check the program string */ + if (program == NULL) { + throwAssert(env, "shader program string is NULL"); + return NULL; + } + + shaderString = strJavaToC(env, program); + if (shaderString == NULL) { + /* Just return, since strJavaToC will throw OOM if it returns NULL */ + return NULL; + } + + /* create the shader */ + if (cgShaderInfo->shaderType == javax_media_j3d_Shader_SHADER_TYPE_VERTEX) { + fprintf(stderr, "Create vertex shader\n"); + } + else if (cgShaderInfo->shaderType == javax_media_j3d_Shader_SHADER_TYPE_FRAGMENT) { + fprintf(stderr, "Create fragment shader\n"); + } + fprintf(stderr, "cgCtx = 0x%x\n", cgCtxInfo->cgCtx); + fprintf(stderr, "shaderProfile = 0x%x\n", cgShaderInfo->shaderProfile); + cgShaderInfo->cgShader = cgWrapperInfo->cgCreateProgram(cgCtxInfo->cgCtx, + CG_SOURCE, shaderString, + cgShaderInfo->shaderProfile, NULL, NULL); + fprintf(stderr, " cgShader = 0x%x\n", cgShaderInfo->cgShader); + + free(shaderString); + +#ifdef OUT__XXX__OUT + cgShaderInfo->cgShader = 0; + shaderError = createShaderError(env, + javax_media_j3d_ShaderError_COMPILE_ERROR, + "Cg shader compile error", + "NOT YET IMPLEMENTED..."); +#endif /* OUT__XXX__OUT */ + + if ((lastError = cgWrapperInfo->cgGetError()) != 0) { + char *detailMsg = getErrorLog(ctxProperties, lastError); + shaderError = createShaderError(env, + javax_media_j3d_ShaderError_COMPILE_ERROR, + "Cg shader compile error", + detailMsg); + if (detailMsg != NULL) { + free(detailMsg); + } + } + +#else /* COMPILE_CG_SHADERS */ + + shaderError = createShaderError(env, + javax_media_j3d_ShaderError_UNSUPPORTED_LANGUAGE_ERROR, + "CgShaderProgram support not compiled", + NULL); + +#endif /* !COMPILE_CG_SHADERS */ + + return shaderError; +} + + +/* + * Class: javax_media_j3d_CgShaderProgramRetained + * Method: createNativeShaderProgram + * Signature: (J[J)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject JNICALL +Java_javax_media_j3d_CgShaderProgramRetained_createNativeShaderProgram( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jlongArray shaderProgramIdArray) +{ + jobject shaderError = NULL; + +#ifdef COMPILE_CG_SHADERS + + jlong *shaderProgramIdPtr; + + CgShaderProgramInfo *shaderProgramInfo = + (CgShaderProgramInfo*)malloc(sizeof(CgShaderProgramInfo)); + + fprintf(stderr, "CgShaderProgramRetained.createNativeShaderProgram\n"); + + shaderProgramInfo->vShader = NULL; + shaderProgramInfo->fShader = NULL; + shaderProgramInfo->numVtxAttrs = 0; + shaderProgramInfo->vtxAttrs = NULL; + + shaderProgramIdPtr = (*env)->GetLongArrayElements(env, shaderProgramIdArray, NULL); + shaderProgramIdPtr[0] = (jlong)shaderProgramInfo; + (*env)->ReleaseLongArrayElements(env, shaderProgramIdArray, shaderProgramIdPtr, 0); + +#else /* COMPILE_CG_SHADERS */ + + shaderError = createShaderError(env, + javax_media_j3d_ShaderError_UNSUPPORTED_LANGUAGE_ERROR, + "CgShaderProgram support not compiled", + NULL); + +#endif /* !COMPILE_CG_SHADERS */ + + return shaderError; +} + + +/* + * Class: javax_media_j3d_CgShaderProgramRetained + * Method: destroyNativeShaderProgram + * Signature: (JJ)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject JNICALL +Java_javax_media_j3d_CgShaderProgramRetained_destroyNativeShaderProgram( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jlong shaderProgramId) +{ + jobject shaderError = NULL; + +#ifdef COMPILE_CG_SHADERS + + CgShaderProgramInfo *shaderProgramInfo = (CgShaderProgramInfo*)shaderProgramId; + + fprintf(stderr, "CgShaderProgramRetained.destroyNativeShaderProgram\n"); + + if (shaderProgramInfo != NULL) { + if (shaderProgramInfo->vtxAttrs != NULL) { + free(shaderProgramInfo->vtxAttrs); + shaderProgramInfo->vtxAttrs = NULL; + } + free(shaderProgramInfo); + } + +#else /* COMPILE_CG_SHADERS */ + + shaderError = createShaderError(env, + javax_media_j3d_ShaderError_UNSUPPORTED_LANGUAGE_ERROR, + "CgShaderProgram support not compiled", + NULL); + +#endif /* !COMPILE_CG_SHADERS */ + + return shaderError; +} + + +/* + * Class: javax_media_j3d_CgShaderProgramRetained + * Method: linkNativeShaderProgram + * Signature: (JJ[J)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject JNICALL +Java_javax_media_j3d_CgShaderProgramRetained_linkNativeShaderProgram( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jlong shaderProgramId, + jlongArray shaderIdArray) +{ + jobject shaderError = NULL; + +#ifdef COMPILE_CG_SHADERS + + GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; + CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; + CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; + + jsize shaderIdArrayLength = (*env)->GetArrayLength(env, shaderIdArray); + jlong *shaderIdPtr = (*env)->GetLongArrayElements(env, shaderIdArray, NULL); + CGerror lastError; + + int i; + + CgShaderProgramInfo *shaderProgramInfo = (CgShaderProgramInfo*)shaderProgramId; + + fprintf(stderr, "CgShaderProgramRetained.linkNativeShaderProgram\n"); + + /* + * NOTE: we assume that the caller has already verified that there + * is at most one vertex program and one fragment program + */ + shaderProgramInfo->vShader = NULL; + shaderProgramInfo->fShader = NULL; + for (i = 0; i < shaderIdArrayLength; i++) { + CgShaderInfo *shader = (CgShaderInfo*)shaderIdPtr[i]; + if (shader->shaderType == javax_media_j3d_Shader_SHADER_TYPE_VERTEX) { + shaderProgramInfo->vShader = shader; + } else { + shaderProgramInfo->fShader = shader; + } + + cgWrapperInfo->cgGLLoadProgram(shader->cgShader); + + if ((lastError = cgWrapperInfo->cgGetError()) != 0) { + char *detailMsg = getErrorLog(ctxProperties, lastError); + shaderError = createShaderError(env, + javax_media_j3d_ShaderError_LINK_ERROR, + "Cg shader link/load error", + detailMsg); + if (detailMsg != NULL) { + free(detailMsg); + } + } + + cgWrapperInfo->cgGLBindProgram(shader->cgShader); + + if ((lastError = cgWrapperInfo->cgGetError()) != 0) { + char *detailMsg = getErrorLog(ctxProperties, lastError); + shaderError = createShaderError(env, + javax_media_j3d_ShaderError_LINK_ERROR, + "Cg shader link/bind error", + detailMsg); + if (detailMsg != NULL) { + free(detailMsg); + } + } + } + + (*env)->ReleaseLongArrayElements(env, shaderIdArray, shaderIdPtr, JNI_ABORT); + +#else /* COMPILE_CG_SHADERS */ + + shaderError = createShaderError(env, + javax_media_j3d_ShaderError_UNSUPPORTED_LANGUAGE_ERROR, + "CgShaderProgram support not compiled", + NULL); + +#endif /* !COMPILE_CG_SHADERS */ + + return shaderError; +} + + +/* + * Class: javax_media_j3d_CgShaderProgramRetained + * Method: lookupNativeVertexAttrNames + * Signature: (JJI[Ljava/lang/String;[Z)V + */ +JNIEXPORT void JNICALL +Java_javax_media_j3d_CgShaderProgramRetained_lookupNativeVertexAttrNames( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jlong shaderProgramId, + jint numAttrNames, + jobjectArray attrNames, + jbooleanArray errArr) +{ +#ifdef COMPILE_CG_SHADERS + + GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; + CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; + CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; + + CgShaderProgramInfo *shaderProgramInfo = (CgShaderProgramInfo*)shaderProgramId; + + int i; + jstring attrName; + char *attrNameString; + jboolean *errPtr; + + errPtr = (*env)->GetBooleanArrayElements(env, errArr, NULL); + + if (shaderProgramInfo->vShader == NULL) { + /* If there if no vertex shader, no attributes can be looked up, so all fail */ + for (i = 0; i < numAttrNames; i++) { + errPtr[i] = JNI_TRUE; + } + (*env)->ReleaseBooleanArrayElements(env, errArr, errPtr, 0); + return; + } + + shaderProgramInfo->numVtxAttrs = numAttrNames; + shaderProgramInfo->vtxAttrs = (CGparameter *)malloc(numAttrNames * sizeof(CGparameter)); + + fprintf(stderr, "CgShaderProgramRetained.lookupNativeVertexAttrNames()\n"); + for (i = 0; i < numAttrNames; i++) { + attrName = (*env)->GetObjectArrayElement(env, attrNames, i); + attrNameString = strJavaToC(env, attrName); + + shaderProgramInfo->vtxAttrs[i] = + cgWrapperInfo->cgGetNamedParameter(shaderProgramInfo->vShader->cgShader, + attrNameString); + fprintf(stderr, " %s : 0x%x\n", attrNameString, shaderProgramInfo->vtxAttrs[i]); + if (shaderProgramInfo->vtxAttrs[i] == NULL) { + errPtr[i] = JNI_TRUE; + } + + free(attrNameString); + } + + (*env)->ReleaseBooleanArrayElements(env, errArr, errPtr, 0); + +#endif /* COMPILE_CG_SHADERS */ +} + + +#ifdef COMPILE_CG_SHADERS + +static jint +cgToJ3dType(CGtype type) +{ + switch (type) { + case CG_BOOL: + case CG_BOOL1: + case CG_FIXED: + case CG_FIXED1: + case CG_HALF: + case CG_HALF1: + case CG_INT: + case CG_INT1: + return TYPE_INTEGER; + + /* + * TODO: add ShaderAttribute support for setting samplers. In the + * mean time, the binding between sampler and texture unit will + * need to be specified in the shader itself (which it already is + * in most example shaders). + * + * case CG_SAMPLER2D: + * case CG_SAMPLER3D: + * case CG_SAMPLERCUBE: + * + */ + + case CG_BOOL2: + case CG_FIXED2: + case CG_HALF2: + case CG_INT2: + /* TODO: return TYPE_TUPLE2I; */ + return -1; + + case CG_BOOL3: + case CG_FIXED3: + case CG_HALF3: + case CG_INT3: + /*TODO: return TYPE_TUPLE3I; */ + return -1; + + case CG_BOOL4: + case CG_FIXED4: + case CG_HALF4: + case CG_INT4: + /*TODO: return TYPE_TUPLE4I; */ + return -1; + + case CG_FLOAT: + case CG_FLOAT1: + return TYPE_FLOAT; + + case CG_FLOAT2: + /*TODO: return TYPE_TUPLE2F; */ + return -1; + + case CG_FLOAT3: + /*TODO: return TYPE_TUPLE3F; */ + return -1; + + case CG_FLOAT4: + /*TODO: return TYPE_TUPLE4F; */ + return -1; + + case CG_FLOAT3x3: + /*TODO: return TYPE_MATRIX3F; */ + return -1; + + case CG_FLOAT4x4: + /*TODO: return TYPE_MATRIX4F; */ + return -1; + + /* + * Java 3D does not support the following sampler types: + * + * case CG_SAMPLER1D: + * case CG_SAMPLERRECT: + */ + } + + return -1; +} + +static CGparameter +lookupParams( + CgWrapperInfo *cgWrapperInfo, + CgShaderInfo *shader, + char *attrNameString, + CGtype *type, + int *size, + jboolean *isArray) +{ + CGparameter loc; + CGparameter firstElem; + + loc = cgWrapperInfo->cgGetNamedParameter(shader->cgShader, + attrNameString); + if (loc != NULL) { + *type = cgWrapperInfo->cgGetParameterType(loc); + if (*type == CG_ARRAY) { + *isArray = JNI_TRUE; + *size = cgWrapperInfo->cgGetArraySize(loc, 0); + /**type = cgWrapperInfo->cgGetArrayType(loc);*/ + firstElem = cgWrapperInfo->cgGetArrayParameter(loc, 0); + *type = cgWrapperInfo->cgGetParameterType(firstElem); + /* + fprintf(stderr, + "firstElem = %d, *type = %d\n", + firstElem, *type); + */ + } + else { + *isArray = JNI_FALSE; + *size = 1; + } + } + + return loc; +} + +#endif /* COMPILE_CG_SHADERS */ + + +/* + * Class: javax_media_j3d_CgShaderProgramRetained + * Method: lookupNativeShaderAttrNames + * Signature: (JJI[Ljava/lang/String;[J[I[I[Z)V + */ +JNIEXPORT void JNICALL +Java_javax_media_j3d_CgShaderProgramRetained_lookupNativeShaderAttrNames( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jlong shaderProgramId, + jint numAttrNames, + jobjectArray attrNames, + jlongArray locArr, + jintArray typeArr, + jintArray sizeArr, + jbooleanArray isArrayArr) +{ + +#ifdef COMPILE_CG_SHADERS + + GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; + CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; + CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; + CgShaderProgramInfo *shaderProgramInfo = (CgShaderProgramInfo*)shaderProgramId; + + jstring attrName; + char *attrNameString; + jlong *locPtr; + jint *typePtr; + jint *sizePtr; + jboolean *isArrayPtr; + CGparameter vLoc, fLoc; + CGtype vType, fType; + int vSize, fSize; + jboolean vIsArray, fIsArray; + int i; + + locPtr = (*env)->GetLongArrayElements(env, locArr, NULL); + typePtr = (*env)->GetIntArrayElements(env, typeArr, NULL); + sizePtr = (*env)->GetIntArrayElements(env, sizeArr, NULL); + isArrayPtr = (*env)->GetBooleanArrayElements(env, isArrayArr, NULL); + + /* + * Set the loc, type, and size arrays to out-of-band values + */ + for (i = 0; i < numAttrNames; i++) { + locPtr[i] = -1; + typePtr[i] = -1; + sizePtr[i] = -1; + } + + /* Now lookup the location of each name in the attrNames array */ + for (i = 0; i < numAttrNames; i++) { + jboolean err; + CgParameterInfo *cgParamInfo; + + attrName = (*env)->GetObjectArrayElement(env, attrNames, i); + attrNameString = (GLcharARB *)strJavaToC(env, attrName); + + fprintf(stderr, "lookup %s\n", attrNameString); + + /* + * Get uniform attribute location -- note that we need to + * lookup the name in both the vertex and fragment shader + * (although we will generalize it to look at the list of "N" + * shaders). If all parameter locations are NULL, then no + * struct will be allocated and -1 will be stored for this + * attribute. If there is more than one non-NULL parameter, + * then all must be of the same type and dimensionality, + * otherwise an error will be generated and -1 will be stored + * for this attribute. If all non-NULL parameters are of the + * same type and dimensionality, then a struct is allocated + * containing the list of parameters. + * + * When any of the setUniform methods are called, the attribute + * will be set for each parameter in the list. + */ + cgParamInfo = (CgParameterInfo *)malloc(sizeof(CgParameterInfo)); + cgParamInfo->vParam = NULL; + cgParamInfo->fParam = NULL; + err = JNI_FALSE; + + vLoc = NULL; + if (shaderProgramInfo->vShader != NULL) { + vLoc = lookupParams(cgWrapperInfo, shaderProgramInfo->vShader, + attrNameString, &vType, &vSize, &vIsArray); + cgParamInfo->vParam = vLoc; + if (vLoc != NULL) { + sizePtr[i] = (jint)vSize; + isArrayPtr[i] = vIsArray; + typePtr[i] = cgToJ3dType(vType); + + fprintf(stderr, " vLoc = %d, vType = %d, vSize = %d, vIsArray = %d\n", + vLoc, vType, vSize, vIsArray); + } + } + + fLoc = NULL; + if (shaderProgramInfo->fShader != NULL) { + fLoc = lookupParams(cgWrapperInfo, shaderProgramInfo->fShader, + attrNameString, &fType, &fSize, &fIsArray); + cgParamInfo->fParam = fLoc; + if (fLoc != NULL) { + sizePtr[i] = (jint)fSize; + isArrayPtr[i] = fIsArray; + typePtr[i] = cgToJ3dType(fType); + + fprintf(stderr, " fLoc = %d, fType = %d, fSize = %d, fIsArray = %d\n", + fLoc, fType, fSize, fIsArray); + } + } + + /* + * If the name lookup found an entry in both vertex and + * fragment program, verify that the type and size are the + * same. + */ + if (cgParamInfo->vParam != NULL && cgParamInfo->fParam != NULL) { + if (vType != fType || vSize != fSize || vIsArray != fIsArray) { + /* TODO: the following needs to be propagated to ShaderError */ + fprintf(stderr, + "JAVA 3D : error shader attribute type mismatch: %s\n", + attrNameString); + fprintf(stderr, + " 1 : type = %d, size = %d, isArray = %d\n", + vType, vSize, vIsArray); + fprintf(stderr, + " 0 : type = %d, size = %d, isArray = %d\n", + fType, fSize, fIsArray); + err = JNI_TRUE; + } + } + + /* + * Report an error if we got a mismatch or if the attribute + * was not found in either the vertex or the fragment program + */ + if (err || (cgParamInfo->vParam == NULL && cgParamInfo->fParam == NULL)) { + /* TODO: distinguish between (err) and (vParam and fParam both NULL) */ + free(cgParamInfo); + locPtr[i] = (jlong)-1; + } + else { + /* + * TODO: need to store the cgParamInfo pointers in the + * shader program so we can free them later. + * + * NOTE: WE CURRENTLY HAVE A MEMORY LEAK. + */ + locPtr[i] = (jlong)cgParamInfo; + } + + free(attrNameString); + } + + /* Release JNI arrays */ + (*env)->ReleaseLongArrayElements(env, locArr, locPtr, 0); + (*env)->ReleaseIntArrayElements(env, typeArr, typePtr, 0); + (*env)->ReleaseIntArrayElements(env, sizeArr, sizePtr, 0); + (*env)->ReleaseBooleanArrayElements(env, isArrayArr, isArrayPtr, 0); + +#endif /* COMPILE_CG_SHADERS */ + +} + + +/* + * Class: javax_media_j3d_CgShaderProgramRetained + * Method: useShaderProgram + * Signature: (JJ)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject JNICALL +Java_javax_media_j3d_CgShaderProgramRetained_useShaderProgram( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jlong shaderProgramId) +{ +#ifdef COMPILE_CG_SHADERS + + GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; + CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; + CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; + + CgShaderProgramInfo *shaderProgramInfo = (CgShaderProgramInfo*)shaderProgramId; + + cgWrapperInfo->cgGLDisableProfile(cgCtxInfo->vProfile); + cgWrapperInfo->cgGLDisableProfile(cgCtxInfo->fProfile); + + if (shaderProgramId != 0) { + if (shaderProgramInfo->vShader != NULL) { + cgWrapperInfo->cgGLBindProgram(shaderProgramInfo->vShader->cgShader); + cgWrapperInfo->cgGLEnableProfile(shaderProgramInfo->vShader->shaderProfile); + } + + if (shaderProgramInfo->fShader != NULL) { + cgWrapperInfo->cgGLBindProgram(shaderProgramInfo->fShader->cgShader); + cgWrapperInfo->cgGLEnableProfile(shaderProgramInfo->fShader->shaderProfile); + } + } + else { + /* TODO: Unbind old shader program */ + } + + ctxProperties->shaderProgramId = shaderProgramId; + +#endif /* COMPILE_CG_SHADERS */ + + return NULL; +} + + +/* + * Class: javax_media_j3d_CgShaderProgramRetained + * Method: setUniform1i + * Signature: (JJJI)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject JNICALL +Java_javax_media_j3d_CgShaderProgramRetained_setUniform1i( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jlong shaderProgramId, + jlong location, + jint value) +{ + jobject shaderError = NULL; + +#ifdef COMPILE_CG_SHADERS + + /* TODO: implement this */ + +#else /* COMPILE_CG_SHADERS */ + + shaderError = createShaderError(env, + javax_media_j3d_ShaderError_UNSUPPORTED_LANGUAGE_ERROR, + "CgShaderProgram support not compiled", + NULL); + +#endif /* !COMPILE_CG_SHADERS */ + + return shaderError; +} + + +/* + * Class: javax_media_j3d_CgShaderProgramRetained + * Method: setUniform1f + * Signature: (JJJF)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject JNICALL +Java_javax_media_j3d_CgShaderProgramRetained_setUniform1f( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jlong shaderProgramId, + jlong location, + jfloat value) +{ + jobject shaderError = NULL; + +#ifdef COMPILE_CG_SHADERS + + GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; + CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; + CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; + CgShaderProgramInfo *shaderProgramInfo = (CgShaderProgramInfo*)shaderProgramId; + CgParameterInfo *cgParamInfo = (CgParameterInfo *)location; + + if (cgParamInfo->vParam != NULL) { + cgWrapperInfo->cgSetParameter1f(cgParamInfo->vParam, value); + } + + if (cgParamInfo->fParam != NULL) { + cgWrapperInfo->cgSetParameter1f(cgParamInfo->fParam, value); + } + +#else /* COMPILE_CG_SHADERS */ + + shaderError = createShaderError(env, + javax_media_j3d_ShaderError_UNSUPPORTED_LANGUAGE_ERROR, + "CgShaderProgram support not compiled", + NULL); + +#endif /* !COMPILE_CG_SHADERS */ + + return shaderError; +} + + +/* + * Class: javax_media_j3d_CgShaderProgramRetained + * Method: setUniform2i + * Signature: (JJJ[I)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject JNICALL +Java_javax_media_j3d_CgShaderProgramRetained_setUniform2i( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jlong shaderProgramId, + jlong location, + jintArray varray) +{ + jobject shaderError = NULL; + +#ifdef COMPILE_CG_SHADERS + + /* TODO: implement this */ + +#else /* COMPILE_CG_SHADERS */ + + shaderError = createShaderError(env, + javax_media_j3d_ShaderError_UNSUPPORTED_LANGUAGE_ERROR, + "CgShaderProgram support not compiled", + NULL); + +#endif /* !COMPILE_CG_SHADERS */ + + return shaderError; +} + + +/* + * Class: javax_media_j3d_CgShaderProgramRetained + * Method: setUniform2f + * Signature: (JJJ[F)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject JNICALL +Java_javax_media_j3d_CgShaderProgramRetained_setUniform2f( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jlong shaderProgramId, + jlong location, + jfloatArray varray) +{ + jobject shaderError = NULL; + +#ifdef COMPILE_CG_SHADERS + + /* TODO: implement this */ + +#else /* COMPILE_CG_SHADERS */ + + shaderError = createShaderError(env, + javax_media_j3d_ShaderError_UNSUPPORTED_LANGUAGE_ERROR, + "CgShaderProgram support not compiled", + NULL); + +#endif /* !COMPILE_CG_SHADERS */ + + return shaderError; +} + + +/* + * Class: javax_media_j3d_CgShaderProgramRetained + * Method: setUniform3i + * Signature: (JJJ[I)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject JNICALL +Java_javax_media_j3d_CgShaderProgramRetained_setUniform3i( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jlong shaderProgramId, + jlong location, + jintArray varray) +{ + jobject shaderError = NULL; + +#ifdef COMPILE_CG_SHADERS + + /* TODO: implement this */ + +#else /* COMPILE_CG_SHADERS */ + + shaderError = createShaderError(env, + javax_media_j3d_ShaderError_UNSUPPORTED_LANGUAGE_ERROR, + "CgShaderProgram support not compiled", + NULL); + +#endif /* !COMPILE_CG_SHADERS */ + + return shaderError; +} + + +/* + * Class: javax_media_j3d_CgShaderProgramRetained + * Method: setUniform3f + * Signature: (JJJ[F)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject JNICALL +Java_javax_media_j3d_CgShaderProgramRetained_setUniform3f( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jlong shaderProgramId, + jlong location, + jfloatArray varray) +{ + jobject shaderError = NULL; + +#ifdef COMPILE_CG_SHADERS + + /* TODO: implement this */ + +#else /* COMPILE_CG_SHADERS */ + + shaderError = createShaderError(env, + javax_media_j3d_ShaderError_UNSUPPORTED_LANGUAGE_ERROR, + "CgShaderProgram support not compiled", + NULL); + +#endif /* !COMPILE_CG_SHADERS */ + + return shaderError; +} + + +/* + * Class: javax_media_j3d_CgShaderProgramRetained + * Method: setUniform4i + * Signature: (JJJ[I)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject JNICALL +Java_javax_media_j3d_CgShaderProgramRetained_setUniform4i( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jlong shaderProgramId, + jlong location, + jintArray varray) +{ + jobject shaderError = NULL; + +#ifdef COMPILE_CG_SHADERS + + /* TODO: implement this */ + +#else /* COMPILE_CG_SHADERS */ + + shaderError = createShaderError(env, + javax_media_j3d_ShaderError_UNSUPPORTED_LANGUAGE_ERROR, + "CgShaderProgram support not compiled", + NULL); + +#endif /* !COMPILE_CG_SHADERS */ + + return shaderError; +} + + +/* + * Class: javax_media_j3d_CgShaderProgramRetained + * Method: setUniform4f + * Signature: (JJJ[F)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject JNICALL +Java_javax_media_j3d_CgShaderProgramRetained_setUniform4f( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jlong shaderProgramId, + jlong location, + jfloatArray varray) +{ + jobject shaderError = NULL; + +#ifdef COMPILE_CG_SHADERS + + /* TODO: implement this */ + +#else /* COMPILE_CG_SHADERS */ + + shaderError = createShaderError(env, + javax_media_j3d_ShaderError_UNSUPPORTED_LANGUAGE_ERROR, + "CgShaderProgram support not compiled", + NULL); + +#endif /* !COMPILE_CG_SHADERS */ + + return shaderError; +} + + +/* + * Class: javax_media_j3d_CgShaderProgramRetained + * Method: setUniformMatrix3f + * Signature: (JJJ[F)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject JNICALL +Java_javax_media_j3d_CgShaderProgramRetained_setUniformMatrix3f( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jlong shaderProgramId, + jlong location, + jfloatArray varray) +{ + jobject shaderError = NULL; + +#ifdef COMPILE_CG_SHADERS + + /* TODO: implement this */ + +#else /* COMPILE_CG_SHADERS */ + + shaderError = createShaderError(env, + javax_media_j3d_ShaderError_UNSUPPORTED_LANGUAGE_ERROR, + "CgShaderProgram support not compiled", + NULL); + +#endif /* !COMPILE_CG_SHADERS */ + + return shaderError; +} + + +/* + * Class: javax_media_j3d_CgShaderProgramRetained + * Method: setUniformMatrix4f + * Signature: (JJJ[F)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject JNICALL +Java_javax_media_j3d_CgShaderProgramRetained_setUniformMatrix4f( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jlong shaderProgramId, + jlong location, + jfloatArray varray) +{ + jobject shaderError = NULL; + +#ifdef COMPILE_CG_SHADERS + + /* TODO: implement this */ + +#else /* COMPILE_CG_SHADERS */ + + shaderError = createShaderError(env, + javax_media_j3d_ShaderError_UNSUPPORTED_LANGUAGE_ERROR, + "CgShaderProgram support not compiled", + NULL); + +#endif /* !COMPILE_CG_SHADERS */ + + return shaderError; +} + + +/* + * Cg vertex attribute functions + */ + +static void +cgVertexAttrPointer( + GraphicsContextPropertiesInfo *ctxProperties, + int index, int size, int type, int stride, + const void *pointer) +{ + /* TODO: implement this */ + fprintf(stderr, "cgVertexAttrPointer: not implemented\n"); +} + +static void +cgEnableVertexAttrArray( + GraphicsContextPropertiesInfo *ctxProperties, + int index) +{ + /* TODO: implement this */ + fprintf(stderr, "cgEnableVertexAttrArray: not implemented\n"); +} + +static void +cgDisableVertexAttrArray( + GraphicsContextPropertiesInfo *ctxProperties, + int index) +{ + /* TODO: implement this */ + fprintf(stderr, "cgDisableVertexAttrArray: not implemented\n"); +} + +static void +cgVertexAttr( + GraphicsContextPropertiesInfo *ctxProperties, + int index, const float *v) +{ + /* + * NOTE: we should never get here. This function is only called + * when building display lists for geometry arrays with vertex + * attributes, and such display lists are disabled in Cg mode. + */ + fprintf(stderr, + "Java 3D ERROR : Assertion failed: invalid call to cgVertexAttr*f\n"); +} + + +#if 0 + + +/* + * Class: javax_media_j3d_CgShaderProgramRetained + * Method: setUniform1iArray + * Signature: (JJJI[I)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject JNICALL Java_javax_media_j3d_CgShaderProgramRetained_setUniform1iArray + (JNIEnv *, jobject, jlong, jlong, jlong, jint, jintArray); + +/* + * Class: javax_media_j3d_CgShaderProgramRetained + * Method: setUniform1fArray + * Signature: (JJJI[F)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject JNICALL Java_javax_media_j3d_CgShaderProgramRetained_setUniform1fArray + (JNIEnv *, jobject, jlong, jlong, jlong, jint, jfloatArray); + +/* + * Class: javax_media_j3d_CgShaderProgramRetained + * Method: setUniform2iArray + * Signature: (JJJI[I)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject JNICALL Java_javax_media_j3d_CgShaderProgramRetained_setUniform2iArray + (JNIEnv *, jobject, jlong, jlong, jlong, jint, jintArray); + +/* + * Class: javax_media_j3d_CgShaderProgramRetained + * Method: setUniform2fArray + * Signature: (JJJI[F)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject JNICALL Java_javax_media_j3d_CgShaderProgramRetained_setUniform2fArray + (JNIEnv *, jobject, jlong, jlong, jlong, jint, jfloatArray); + +/* + * Class: javax_media_j3d_CgShaderProgramRetained + * Method: setUniform3iArray + * Signature: (JJJI[I)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject JNICALL Java_javax_media_j3d_CgShaderProgramRetained_setUniform3iArray + (JNIEnv *, jobject, jlong, jlong, jlong, jint, jintArray); + +/* + * Class: javax_media_j3d_CgShaderProgramRetained + * Method: setUniform3fArray + * Signature: (JJJI[F)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject JNICALL Java_javax_media_j3d_CgShaderProgramRetained_setUniform3fArray + (JNIEnv *, jobject, jlong, jlong, jlong, jint, jfloatArray); + +/* + * Class: javax_media_j3d_CgShaderProgramRetained + * Method: setUniform4iArray + * Signature: (JJJI[I)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject JNICALL Java_javax_media_j3d_CgShaderProgramRetained_setUniform4iArray + (JNIEnv *, jobject, jlong, jlong, jlong, jint, jintArray); + +/* + * Class: javax_media_j3d_CgShaderProgramRetained + * Method: setUniform4fArray + * Signature: (JJJI[F)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject JNICALL Java_javax_media_j3d_CgShaderProgramRetained_setUniform4fArray + (JNIEnv *, jobject, jlong, jlong, jlong, jint, jfloatArray); + +/* + * Class: javax_media_j3d_CgShaderProgramRetained + * Method: setUniformMatrix3fArray + * Signature: (JJJI[F)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject JNICALL Java_javax_media_j3d_CgShaderProgramRetained_setUniformMatrix3fArray + (JNIEnv *, jobject, jlong, jlong, jlong, jint, jfloatArray); + +/* + * Class: javax_media_j3d_CgShaderProgramRetained + * Method: setUniformMatrix4fArray + * Signature: (JJJI[F)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject JNICALL Java_javax_media_j3d_CgShaderProgramRetained_setUniformMatrix4fArray + (JNIEnv *, jobject, jlong, jlong, jlong, jint, jfloatArray); + + + +#endif + + + + + +#if 0 +/* + * Class: javax_media_j3d_CgShaderProgram + * Method: updateNative + * Signature: (JLjava/lang/String;Ljava/lang/String;)V + */ +JNIEXPORT void JNICALL Java_javax_media_j3d_CgShaderProgram_updateNative( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jstring vertexShader, + jstring fragmentShader) +{ +#ifndef COMPILE_CG_SHADERS + static GLboolean firstTime = GL_TRUE; + + if (firstTime) { + fprintf(stderr, "Java 3D ERROR : CgShader code not compiled\n"); + firstTime = GL_FALSE; + } + return; +#endif /* !COMPILE_CG_SHADERS */ + +#ifdef COMPILE_CG_SHADERS + /* Null-terminated "C" strings */ + char *vertexShaderString = NULL; + char *fragmentShaderString = NULL; + + /* Process vertex shader */ + /* + fprintf(stderr, " vertexShader == 0x%x\n", vertexShader); + */ + if (vertexShader != 0) { + vertexShaderString = strJavaToC(env, vertexShader); + if (vertexShaderString == NULL) { + return; + } + + /* + * TODO: need to check whether the shader has changed and free up the + * old shader before allocating a new one (like we do for texture) + */ + if (vContext == 0) { + /* Use GL_ARB_vertex_program extension if supported by video card */ + if (cgGLIsProfileSupported(CG_PROFILE_ARBVP1)) { + fprintf(stderr, "Using CG_PROFILE_ARBVP1\n"); + vProfile = CG_PROFILE_ARBVP1; + } + else if (cgGLIsProfileSupported(CG_PROFILE_VP20)) { + fprintf(stderr, "Using CG_PROFILE_VP20\n"); + vProfile = CG_PROFILE_VP20; + } + else { + fprintf(stderr, + "ERROR: Vertex programming extensions (GL_ARB_vertex_program or\n" + "GL_NV_vertex_program) not supported, exiting...\n"); + return; + } + + cgSetErrorCallback(cgErrorCallback); + + vContext = cgCreateContext(); + + /* create the vertex shader */ + fprintf(stderr, + "CgShaderProgram_updateNative: create vertex shader program\n"); + vShader = cgCreateProgram(vContext, + CG_SOURCE, vertexShaderString, + vProfile, NULL, NULL); + } + free(vertexShaderString); + + /* + fprintf(stderr, + "CgShaderProgram_updateNative: load/bind/enable vertex shader program\n"); + */ + cgGLLoadProgram(vShader); + cgGLBindProgram(vShader); + cgGLEnableProfile(vProfile); + } + else { + if (vProfile != 0) { + cgGLDisableProfile(vProfile); + } + } + + /* Process fragment shader */ + /* + fprintf(stderr, " fragmentShader == 0x%x\n", fragmentShader); + */ + if (fragmentShader != 0) { + fragmentShaderString = strJavaToC(env, fragmentShader); + if (fragmentShaderString == NULL) { + return; + } + + /* + * TODO: need to check whether the shader has changed and free up the + * old shader before allocating a new one (like we do for texture) + */ + if (fContext == 0) { + /* Use GL_ARB_fragment_program extension if supported by video card */ + if (cgGLIsProfileSupported(CG_PROFILE_ARBFP1)) { + fprintf(stderr, "Using CG_PROFILE_ARBFP1\n"); + fProfile = CG_PROFILE_ARBFP1; + } + else if (cgGLIsProfileSupported(CG_PROFILE_FP20)) { + fprintf(stderr, "Using CG_PROFILE_FP20\n"); + fProfile = CG_PROFILE_FP20; + } + else { + fprintf(stderr, + "Fragment programming extensions (GL_ARB_fragment_program or\n" + "GL_NV_fragment_program) not supported, exiting...\n"); + return; + } + + cgSetErrorCallback(cgErrorCallback); + + fContext = cgCreateContext(); + + /* create the fragment shader */ + fprintf(stderr, + "CgShaderProgram_updateNative: create fragment shader program\n"); + fShader = cgCreateProgram(fContext, + CG_SOURCE, fragmentShaderString, + fProfile, NULL, NULL); + } + free(fragmentShaderString); + + cgGLLoadProgram(fShader); + cgGLBindProgram(fShader); + /* + fprintf(stderr, + "CgShaderProgram_updateNative: load/bind/enable fragment shader program\n"); + */ + cgGLEnableProfile(fProfile); + } + else { + if (fProfile != 0) { + cgGLDisableProfile(fProfile); + } + } +#endif /* COMPILE_CG_SHADERS */ + +} +/* KCR: END CG SHADER HACK */ + +#endif /* 0 */ diff --git a/src/native/ogl/CgWrapper.c b/src/native/ogl/CgWrapper.c new file mode 100644 index 0000000..55c2c64 --- /dev/null +++ b/src/native/ogl/CgWrapper.c @@ -0,0 +1,56 @@ +/* + * $RCSfile$ + * + * Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved. + * + * Use is subject to license terms. + * + * $Revision$ + * $Date$ + * $State$ + */ + +/* + * Note: since this is just a wrapper around the CG functions, it + * won't be compiled or linked unless the CG library is + * available. This means we don't need to use "#ifdef COMPILE_CG". + */ + +#if defined(LINUX) +#define _GNU_SOURCE 1 +#endif + +#include <stdio.h> +#include <stdlib.h> + +#include "gldefs.h" +#include "CgWrapper.h" + +/* + * Setup the function pointers + */ +JNIEXPORT void +j3dLoadCgFunctionPointers(CgWrapperInfo *cgWrapperInfo) +{ + cgWrapperInfo->cgCreateContext = &cgCreateContext; + cgWrapperInfo->cgGLIsProfileSupported = &cgGLIsProfileSupported; + cgWrapperInfo->cgGetError = &cgGetError; + cgWrapperInfo->cgGetErrorString = &cgGetErrorString; + cgWrapperInfo->cgGetLastListing = &cgGetLastListing; + cgWrapperInfo->cgCreateProgram = &cgCreateProgram; + cgWrapperInfo->cgDestroyProgram = &cgDestroyProgram; + cgWrapperInfo->cgGLLoadProgram = &cgGLLoadProgram; + cgWrapperInfo->cgGLBindProgram = &cgGLBindProgram; + cgWrapperInfo->cgGLUnbindProgram = &cgGLUnbindProgram; + cgWrapperInfo->cgGLEnableProfile = &cgGLEnableProfile; + cgWrapperInfo->cgGLDisableProfile = &cgGLDisableProfile; + cgWrapperInfo->cgGetNamedParameter = &cgGetNamedParameter; + cgWrapperInfo->cgGetParameterType = &cgGetParameterType; + cgWrapperInfo->cgGetArrayDimension = &cgGetArrayDimension; + cgWrapperInfo->cgGetArrayType = &cgGetArrayType; + cgWrapperInfo->cgGetArraySize = &cgGetArraySize; + cgWrapperInfo->cgGetArrayParameter = &cgGetArrayParameter; + cgWrapperInfo->cgSetParameter1f = &cgSetParameter1f; + + return; +} diff --git a/src/native/ogl/CgWrapper.h b/src/native/ogl/CgWrapper.h new file mode 100644 index 0000000..feed5ad --- /dev/null +++ b/src/native/ogl/CgWrapper.h @@ -0,0 +1,167 @@ +/* + * $RCSfile$ + * + * Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved. + * + * Use is subject to license terms. + * + * $Revision$ + * $Date$ + * $State$ + */ + +#ifndef _Java3D_CgWrapper_h_ +#define _Java3D_CgWrapper_h_ + +#include "gldefs.h" + +#ifdef COMPILE_CG_SHADERS +#include <Cg/cgGL.h> +#endif /* COMPILE_CG_SHADERS */ + + +/* Forward references for structure typedefs */ +typedef struct CgWrapperInfoRec CgWrapperInfo; +typedef struct CgShaderInfoRec CgShaderInfo; +typedef struct CgShaderProgramInfoRec CgShaderProgramInfo; +typedef struct CgParameterInfoRec CgParameterInfo; + + +/* Typedef for function pointer to entry point in CgWrapper library */ +typedef void (*PFNJ3DLOADCGFUNCTIONPOINTERS)(CgWrapperInfo *); + + +#ifdef COMPILE_CG_SHADERS +typedef CGcontext (*PFNCGCREATECONTEXT)(void); +typedef CGbool (*PFNCGGLISPROFILESUPPORTED)(CGprofile); +typedef CGerror (*PFNCGGETERROR)(void); +typedef const char * (*PFNCGGETERRORSTRING)(CGerror); +typedef const char * (*PFNCGGETLASTLISTING)(CGcontext); +typedef CGprogram (*PFNCGCREATEPROGRAM)(CGcontext, CGenum, const char *, + CGprofile, const char *, const char **); +typedef void (*PFNCGDESTROYPROGRAM)(CGprogram program); +typedef void (*PFNCGGLLOADPROGRAM)(CGprogram); +typedef void (*PFNCGGLBINDPROGRAM)(CGprogram); +typedef void (*PFNCGGLUNBINDPROGRAM)(CGprofile); +typedef void (*PFNCGGLENABLEPROFILE)(CGprofile); +typedef void (*PFNCGGLDISABLEPROFILE)(CGprofile); +typedef CGparameter (*PFNCGGETNAMEDPARAMETER)(CGprogram, const char *); +typedef CGtype (*PFNCGGETPARAMETERTYPE)(CGparameter); +typedef int (*PFNCGGETARRAYDIMENSION)(CGparameter); +typedef CGtype (*PFNCGGETARRAYTYPE)(CGparameter); +typedef int (*PFNCGGETARRAYSIZE)(CGparameter, int); +typedef CGparameter (*PFNCGGETARRAYPARAMETER)(CGparameter, int); +typedef void (*PFNCGSETPARAMETER1F)(CGparameter, float); + +#endif /* COMPILE_CG_SHADERS */ + + +/* + * Global struct that contains the reference to the CG wrapper library + * and the function pointers to each wrapper function. This is a + * singleton (only one instance exists), and is initialized by a + * static MasterControl method. For performance, we will cache the + * pointer to this global struct in each context. + */ +struct CgWrapperInfoRec { + /* + * Flag indicating whether the library and all function pointers + * were successfully loaded. + */ + jboolean loaded; + + /* + * Pointer to library, returned by dlopen (UNIX) or LoadLibrary (Windows) + */ + void *cgLibraryHandle; + + /* Function pointer to entry point in CgWrapper library */ + PFNJ3DLOADCGFUNCTIONPOINTERS j3dLoadCgFunctionPointers; + + /* Function pointers for warapper functions */ +#ifdef COMPILE_CG_SHADERS + + /* CG function pointers */ + PFNCGCREATECONTEXT cgCreateContext; + PFNCGGLISPROFILESUPPORTED cgGLIsProfileSupported; + PFNCGGETERROR cgGetError; + PFNCGGETERRORSTRING cgGetErrorString; + PFNCGGETLASTLISTING cgGetLastListing; + PFNCGCREATEPROGRAM cgCreateProgram; + PFNCGDESTROYPROGRAM cgDestroyProgram; + PFNCGGLLOADPROGRAM cgGLLoadProgram; + PFNCGGLBINDPROGRAM cgGLBindProgram; + PFNCGGLUNBINDPROGRAM cgGLUnbindProgram; + PFNCGGLENABLEPROFILE cgGLEnableProfile; + PFNCGGLDISABLEPROFILE cgGLDisableProfile; + PFNCGGETNAMEDPARAMETER cgGetNamedParameter; + PFNCGGETPARAMETERTYPE cgGetParameterType; + PFNCGGETARRAYDIMENSION cgGetArrayDimension; + PFNCGGETARRAYTYPE cgGetArrayType; + PFNCGGETARRAYSIZE cgGetArraySize; + PFNCGGETARRAYPARAMETER cgGetArrayParameter; + PFNCGSETPARAMETER1F cgSetParameter1f; + +#endif /* COMPILE_CG_SHADERS */ +}; + + +/* Structure used to hold CG context information; stored in ctxInfo */ +struct CgCtxInfoRec { + CgWrapperInfo *cgWrapperInfo; /* Pointer to static wrapper info */ + +#ifdef COMPILE_CG_SHADERS + CGcontext cgCtx; + CGprofile vProfile; + CGprofile fProfile; +#endif /* COMPILE_CG_SHADERS */ +}; + + +/* Structure used to hold CG shader information; passed back to Java as cgShaderId */ +struct CgShaderInfoRec { +#ifdef COMPILE_CG_SHADERS + CGprogram cgShader; + jint shaderType; + CGprofile shaderProfile; +#else /* COMPILE_CG_SHADERS */ + int dummy; +#endif /* COMPILE_CG_SHADERS */ +}; + +/* + * Structure used to hold CG shader program information; passed back + * to Java as cgShaderProgramId + */ +struct CgShaderProgramInfoRec { +#ifdef COMPILE_CG_SHADERS + /* + * Vertex and fragment shader -- may be null to indicate that one + * or the other is not present + */ + CgShaderInfo *vShader; /* Vertex shader */ + CgShaderInfo *fShader; /* Fragment shader */ + + /* Array of parameters for (varying) vertex attributes */ + int numVtxAttrs; + CGparameter *vtxAttrs; +#else /* COMPILE_CG_SHADERS */ + int dummy; +#endif /* COMPILE_CG_SHADERS */ +}; + +/* + * Structure used to hold CG shader parameter information for uniform + * shader attributes; passed back to Java in the locArr array + */ +struct CgParameterInfoRec { +#ifdef COMPILE_CG_SHADERS + CGparameter vParam; /* Parameter handle for vertex shader */ + CGparameter fParam; /* Parameter handle for fragment shader */ +#else /* COMPILE_CG_SHADERS */ + int dummy; +#endif /* COMPILE_CG_SHADERS */ +}; + + +#endif /* _Java3D_CgWrapper_h_ */ diff --git a/src/native/ogl/CompressedGeometryRetained.c b/src/native/ogl/CompressedGeometryRetained.c deleted file mode 100644 index 4455ee4..0000000 --- a/src/native/ogl/CompressedGeometryRetained.c +++ /dev/null @@ -1,76 +0,0 @@ -/* - * $RCSfile$ - * - * Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved. - * - * Use is subject to license terms. - * - * $Revision$ - * $Date$ - * $State$ - */ - -#include <stdio.h> -#include <jni.h> -#include "gldefs.h" - -#ifdef OBSOLETE_HW_COMPRESSED_GEOM -/* #if defined(SOLARIS) && defined(__sparc) */ -/* Solaris/Sparc only, all others define this as a noop */ -#pragma weak glDrawCompressedGeomSUNX -#endif /* OBSOLETE_HW_COMPRESSED_GEOM */ - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_CompressedGeometryRetained_execute - (JNIEnv *env, jobject obj, jlong ctxInfo, jint version, jint bufferType, - jint bufferContents, jint renderFlags, jint offset, jint size, - jbyteArray geometry) -{ - fprintf(stderr, - "JAVA 3D ERROR: call to obsolete CompressedGeometryRetained.execute method\n"); - - -#ifdef OBSOLETE_HW_COMPRESSED_GEOM - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - jbyte *cg = (*env)->GetPrimitiveArrayCritical(env, geometry, 0) ; - - /* ignore offset and pass header at 0 along with cg data */ - if(ctxProperties->geometry_compression_sunx) - glDrawCompressedGeomSUNX((GLint)(size + 48), (GLubyte *)cg) ; - - (*env)->ReleasePrimitiveArrayCritical(env, geometry, cg, 0) ; -#endif /* OBSOLETE_HW_COMPRESSED_GEOM */ -} - - -JNIEXPORT -jboolean JNICALL Java_javax_media_j3d_CompressedGeometryRetained_decompressByRef - (JNIEnv *env, jobject obj, jlong ctxInfo) -{ - return JNI_FALSE; -} - -JNIEXPORT -jboolean JNICALL Java_javax_media_j3d_CompressedGeometryRetained_decompressHW - (JNIEnv *env, jobject obj, jlong ctxInfo, jint majorVersion, jint minorVersion) -{ - return JNI_FALSE; - - -#ifdef OBSOLETE_HW_COMPRESSED_GEOM - /* - * Return true if hardware decompression is supported for the given - * version number of the compressed geometry. - */ - - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - return - (ctxProperties->geometry_compression_accelerated == 1) && - ((majorVersion < ctxProperties->geometry_compression_accelerated_major_version) || - ((majorVersion == ctxProperties->geometry_compression_accelerated_major_version) && - (minorVersion <= ctxProperties->geometry_compression_accelerated_minor_version))) ; -#endif /* OBSOLETE_HW_COMPRESSED_GEOM */ -} diff --git a/src/native/ogl/DrawingSurfaceObjectAWT.c b/src/native/ogl/DrawingSurfaceObjectAWT.c index b728201..84f86bb 100644 --- a/src/native/ogl/DrawingSurfaceObjectAWT.c +++ b/src/native/ogl/DrawingSurfaceObjectAWT.c @@ -16,12 +16,16 @@ * of the Java 3D API. */ +#include <jni.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #include <jawt_md.h> +#include "javax_media_j3d_MasterControl.h" +#include "javax_media_j3d_DrawingSurfaceObjectAWT.h" + #ifdef DEBUG /* Uncomment the following for VERBOSE debug messages */ /* #define VERBOSE */ @@ -144,11 +148,11 @@ Java_javax_media_j3d_DrawingSurfaceObjectAWT_getDrawingSurfaceWindowIdAWT( #endif /* __sparc */ #endif /* SOLARIS */ -#ifdef __linux__ +#ifdef LINUX JAWT_X11DrawingSurfaceInfo *xds = (JAWT_X11DrawingSurfaceInfo*) dsi->platformInfo; window = (jint)xds->drawable; -#endif /* __linux__ */ +#endif /* LINUX */ /* * Don't free DrawingSurfaceInfo here, otherwise diff --git a/src/native/ogl/GLSLInfo.h b/src/native/ogl/GLSLInfo.h new file mode 100644 index 0000000..c5be2ca --- /dev/null +++ b/src/native/ogl/GLSLInfo.h @@ -0,0 +1,61 @@ +/* + * $RCSfile$ + * + * Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved. + * + * Use is subject to license terms. + * + * $Revision$ + * $Date$ + * $State$ + */ + +#ifndef _Java3D_GLSLInfo_h_ +#define _Java3D_GLSLInfo_h_ + +#include "gldefs.h" + +/* Structure used to hold GLSL context information; stored in ctxInfo */ +struct GLSLCtxInfoRec { + PFNGLATTACHOBJECTARBPROC pfnglAttachObjectARB; + PFNGLCOMPILESHADERARBPROC pfnglCompileShaderARB; + PFNGLCREATEPROGRAMOBJECTARBPROC pfnglCreateProgramObjectARB; + PFNGLCREATESHADEROBJECTARBPROC pfnglCreateShaderObjectARB; + PFNGLDELETEOBJECTARBPROC pfnglglDeleteObjectARB; + PFNGLGETINFOLOGARBPROC pfnglGetInfoLogARB; + PFNGLGETOBJECTPARAMETERIVARBPROC pfnglGetObjectParameterivARB; + PFNGLLINKPROGRAMARBPROC pfnglLinkProgramARB; + PFNGLSHADERSOURCEARBPROC pfnglShaderSourceARB; + PFNGLUSEPROGRAMOBJECTARBPROC pfnglUseProgramObjectARB; + PFNGLGETUNIFORMLOCATIONARBPROC pfnglGetUniformLocationARB; + PFNGLGETATTRIBLOCATIONARBPROC pfnglGetAttribLocationARB; + PFNGLBINDATTRIBLOCATIONARBPROC pfnglBindAttribLocationARB; + PFNGLVERTEXATTRIB1FVARBPROC pfnglVertexAttrib1fvARB; + PFNGLVERTEXATTRIB2FVARBPROC pfnglVertexAttrib2fvARB; + PFNGLVERTEXATTRIB3FVARBPROC pfnglVertexAttrib3fvARB; + PFNGLVERTEXATTRIB4FVARBPROC pfnglVertexAttrib4fvARB; + PFNGLVERTEXATTRIBPOINTERARBPROC pfnglVertexAttribPointerARB; + PFNGLENABLEVERTEXATTRIBARRAYARBPROC pfnglEnableVertexAttribArrayARB; + PFNGLDISABLEVERTEXATTRIBARRAYARBPROC pfnglDisableVertexAttribArrayARB; + PFNGLGETACTIVEUNIFORMARBPROC pfnglGetActiveUniformARB; + PFNGLUNIFORM1IARBPROC pfnglUniform1iARB; + PFNGLUNIFORM1FARBPROC pfnglUniform1fARB; + PFNGLUNIFORM2IARBPROC pfnglUniform2iARB; + PFNGLUNIFORM2FARBPROC pfnglUniform2fARB; + PFNGLUNIFORM3IARBPROC pfnglUniform3iARB; + PFNGLUNIFORM3FARBPROC pfnglUniform3fARB; + PFNGLUNIFORM4IARBPROC pfnglUniform4iARB; + PFNGLUNIFORM4FARBPROC pfnglUniform4fARB; + PFNGLUNIFORM1IVARBPROC pfnglUniform1ivARB; + PFNGLUNIFORM1FVARBPROC pfnglUniform1fvARB; + PFNGLUNIFORM2IVARBPROC pfnglUniform2ivARB; + PFNGLUNIFORM2FVARBPROC pfnglUniform2fvARB; + PFNGLUNIFORM3IVARBPROC pfnglUniform3ivARB; + PFNGLUNIFORM3FVARBPROC pfnglUniform3fvARB; + PFNGLUNIFORM4IVARBPROC pfnglUniform4ivARB; + PFNGLUNIFORM4FVARBPROC pfnglUniform4fvARB; + PFNGLUNIFORMMATRIX3FVARBPROC pfnglUniformMatrix3fvARB; + PFNGLUNIFORMMATRIX4FVARBPROC pfnglUniformMatrix4fvARB; +}; + +#endif /* _Java3D_GLSLInfo_h_ */ diff --git a/src/native/ogl/GLSLShaderProgram.c b/src/native/ogl/GLSLShaderProgram.c new file mode 100644 index 0000000..3c29cb6 --- /dev/null +++ b/src/native/ogl/GLSLShaderProgram.c @@ -0,0 +1,1630 @@ +/* + * $RCSfile$ + * + * Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved. + * + * Use is subject to license terms. + * + * $Revision$ + * $Date$ + * $State$ + */ + +#if defined(LINUX) +#define _GNU_SOURCE 1 +#endif + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <math.h> +#include <jni.h> + +#include "gldefs.h" +#include "GLSLInfo.h" + +#if defined(UNIX) +#include <dlfcn.h> +#endif + +#ifdef DEBUG +/* Uncomment the following for VERBOSE debug messages */ +/* #define VERBOSE */ +#endif /* DEBUG */ + + +extern char *strJavaToC(JNIEnv *env, jstring str); +extern void throwAssert(JNIEnv *env, char *str); +extern jobject createShaderError(JNIEnv *env, + int errorCode, + const char *errorMsg, + const char *detailMsg); + +extern int isExtensionSupported(const char *allExtensions, const char *extension); + + +static void glslVertexAttrPointer(GraphicsContextPropertiesInfo *ctxProperties, + int index, int size, int type, int stride, + const void *pointer); +static void glslEnableVertexAttrArray(GraphicsContextPropertiesInfo *ctxProperties, + int index); +static void glslDisableVertexAttrArray(GraphicsContextPropertiesInfo *ctxProperties, + int index); +static void glslVertexAttr1fv(GraphicsContextPropertiesInfo *ctxProperties, + int index, const float *v); +static void glslVertexAttr2fv(GraphicsContextPropertiesInfo *ctxProperties, + int index, const float *v); +static void glslVertexAttr3fv(GraphicsContextPropertiesInfo *ctxProperties, + int index, const float *v); +static void glslVertexAttr4fv(GraphicsContextPropertiesInfo *ctxProperties, + int index, const float *v); + + +/* + * Called by getPropertiesFromCurrentContext to initialize the GLSL + * shader function pointers and set the flag indicating whether GLSL + * shaders are available. + */ +void +checkGLSLShaderExtensions( + JNIEnv *env, + jobject obj, + char *tmpExtensionStr, + GraphicsContextPropertiesInfo *ctxInfo, + jboolean glslLibraryAvailable) +{ + ctxInfo->shadingLanguageGLSL = JNI_FALSE; + ctxInfo->glslCtxInfo = NULL; + + if (glslLibraryAvailable && + isExtensionSupported(tmpExtensionStr, "GL_ARB_shader_objects") && + isExtensionSupported(tmpExtensionStr, "GL_ARB_shading_language_100")) { + + GLSLCtxInfo *glslCtxInfo = (GLSLCtxInfo *)malloc(sizeof(GLSLCtxInfo)); + memset(glslCtxInfo, 0, sizeof(GLSLCtxInfo)); + +#if defined(UNIX) + glslCtxInfo->pfnglAttachObjectARB = + (PFNGLATTACHOBJECTARBPROC)dlsym(RTLD_DEFAULT, "glAttachObjectARB"); + glslCtxInfo->pfnglCompileShaderARB = + (PFNGLCOMPILESHADERARBPROC)dlsym(RTLD_DEFAULT, "glCompileShaderARB"); + glslCtxInfo->pfnglCreateProgramObjectARB = + (PFNGLCREATEPROGRAMOBJECTARBPROC)dlsym(RTLD_DEFAULT, "glCreateProgramObjectARB"); + glslCtxInfo->pfnglCreateShaderObjectARB = + (PFNGLCREATESHADEROBJECTARBPROC)dlsym(RTLD_DEFAULT, "glCreateShaderObjectARB"); + glslCtxInfo->pfnglglDeleteObjectARB = + (PFNGLDELETEOBJECTARBPROC)dlsym(RTLD_DEFAULT, "glDeleteObjectARB"); + glslCtxInfo->pfnglGetInfoLogARB = + (PFNGLGETINFOLOGARBPROC)dlsym(RTLD_DEFAULT, "glGetInfoLogARB"); + glslCtxInfo->pfnglGetObjectParameterivARB = + (PFNGLGETOBJECTPARAMETERIVARBPROC)dlsym(RTLD_DEFAULT, "glGetObjectParameterivARB"); + glslCtxInfo->pfnglLinkProgramARB = + (PFNGLLINKPROGRAMARBPROC)dlsym(RTLD_DEFAULT, "glLinkProgramARB"); + glslCtxInfo->pfnglShaderSourceARB = + (PFNGLSHADERSOURCEARBPROC)dlsym(RTLD_DEFAULT, "glShaderSourceARB"); + glslCtxInfo->pfnglUseProgramObjectARB = + (PFNGLUSEPROGRAMOBJECTARBPROC)dlsym(RTLD_DEFAULT, "glUseProgramObjectARB"); + glslCtxInfo->pfnglGetUniformLocationARB = + (PFNGLGETUNIFORMLOCATIONARBPROC)dlsym(RTLD_DEFAULT, "glGetUniformLocationARB"); + glslCtxInfo->pfnglGetAttribLocationARB = + (PFNGLGETATTRIBLOCATIONARBPROC)dlsym(RTLD_DEFAULT, "glGetAttribLocationARB"); + glslCtxInfo->pfnglBindAttribLocationARB = + (PFNGLBINDATTRIBLOCATIONARBPROC)dlsym(RTLD_DEFAULT, "glBindAttribLocationARB"); + glslCtxInfo->pfnglVertexAttrib1fvARB = + (PFNGLVERTEXATTRIB1FVARBPROC)dlsym(RTLD_DEFAULT, "glVertexAttrib1fvARB"); + glslCtxInfo->pfnglVertexAttrib2fvARB = + (PFNGLVERTEXATTRIB2FVARBPROC)dlsym(RTLD_DEFAULT, "glVertexAttrib2fvARB"); + glslCtxInfo->pfnglVertexAttrib3fvARB = + (PFNGLVERTEXATTRIB3FVARBPROC)dlsym(RTLD_DEFAULT, "glVertexAttrib3fvARB"); + glslCtxInfo->pfnglVertexAttrib4fvARB = + (PFNGLVERTEXATTRIB4FVARBPROC)dlsym(RTLD_DEFAULT, "glVertexAttrib4fvARB"); + glslCtxInfo->pfnglVertexAttribPointerARB = + (PFNGLVERTEXATTRIBPOINTERARBPROC)dlsym(RTLD_DEFAULT, "glVertexAttribPointerARB"); + glslCtxInfo->pfnglEnableVertexAttribArrayARB = + (PFNGLENABLEVERTEXATTRIBARRAYARBPROC)dlsym(RTLD_DEFAULT, "glEnableVertexAttribArrayARB"); + glslCtxInfo->pfnglDisableVertexAttribArrayARB = + (PFNGLDISABLEVERTEXATTRIBARRAYARBPROC)dlsym(RTLD_DEFAULT, "glDisableVertexAttribArrayARB"); + glslCtxInfo->pfnglVertexAttribPointerARB = + (PFNGLVERTEXATTRIBPOINTERARBPROC)dlsym(RTLD_DEFAULT, "glVertexAttribPointerARB"); + glslCtxInfo->pfnglGetActiveUniformARB = + (PFNGLGETACTIVEUNIFORMARBPROC)dlsym(RTLD_DEFAULT, "glGetActiveUniformARB"); + glslCtxInfo->pfnglUniform1iARB = + (PFNGLUNIFORM1IARBPROC)dlsym(RTLD_DEFAULT, "glUniform1iARB"); + glslCtxInfo->pfnglUniform1fARB = + (PFNGLUNIFORM1FARBPROC)dlsym(RTLD_DEFAULT, "glUniform1fARB"); + glslCtxInfo->pfnglUniform2iARB = + (PFNGLUNIFORM2IARBPROC)dlsym(RTLD_DEFAULT, "glUniform2iARB"); + glslCtxInfo->pfnglUniform2fARB = + (PFNGLUNIFORM2FARBPROC)dlsym(RTLD_DEFAULT, "glUniform2fARB"); + glslCtxInfo->pfnglUniform3iARB = + (PFNGLUNIFORM3IARBPROC)dlsym(RTLD_DEFAULT, "glUniform3iARB"); + glslCtxInfo->pfnglUniform3fARB = + (PFNGLUNIFORM3FARBPROC)dlsym(RTLD_DEFAULT, "glUniform3fARB"); + glslCtxInfo->pfnglUniform4iARB = + (PFNGLUNIFORM4IARBPROC)dlsym(RTLD_DEFAULT, "glUniform4iARB"); + glslCtxInfo->pfnglUniform4fARB = + (PFNGLUNIFORM4FARBPROC)dlsym(RTLD_DEFAULT, "glUniform4fARB"); + glslCtxInfo->pfnglUniform1ivARB = + (PFNGLUNIFORM1IVARBPROC)dlsym(RTLD_DEFAULT, "glUniform1ivARB"); + glslCtxInfo->pfnglUniform1fvARB = + (PFNGLUNIFORM1FVARBPROC)dlsym(RTLD_DEFAULT, "glUniform1fvARB"); + glslCtxInfo->pfnglUniform2ivARB = + (PFNGLUNIFORM2IVARBPROC)dlsym(RTLD_DEFAULT, "glUniform2ivARB"); + glslCtxInfo->pfnglUniform2fvARB = + (PFNGLUNIFORM2FVARBPROC)dlsym(RTLD_DEFAULT, "glUniform2fvARB"); + glslCtxInfo->pfnglUniform3ivARB = + (PFNGLUNIFORM3IVARBPROC)dlsym(RTLD_DEFAULT, "glUniform3ivARB"); + glslCtxInfo->pfnglUniform3fvARB = + (PFNGLUNIFORM3FVARBPROC)dlsym(RTLD_DEFAULT, "glUniform3fvARB"); + glslCtxInfo->pfnglUniform4ivARB = + (PFNGLUNIFORM4IVARBPROC)dlsym(RTLD_DEFAULT, "glUniform4ivARB"); + glslCtxInfo->pfnglUniform4fvARB = + (PFNGLUNIFORM4FVARBPROC)dlsym(RTLD_DEFAULT, "glUniform4fvARB"); + glslCtxInfo->pfnglUniformMatrix3fvARB = + (PFNGLUNIFORMMATRIX3FVARBPROC)dlsym(RTLD_DEFAULT, "glUniformMatrix3fvARB"); + glslCtxInfo->pfnglUniformMatrix4fvARB = + (PFNGLUNIFORMMATRIX4FVARBPROC)dlsym(RTLD_DEFAULT, "glUniformMatrix4fvARB"); +#endif +#ifdef WIN32 + glslCtxInfo->pfnglAttachObjectARB = + (PFNGLATTACHOBJECTARBPROC)wglGetProcAddress("glAttachObjectARB"); + glslCtxInfo->pfnglCompileShaderARB = + (PFNGLCOMPILESHADERARBPROC)wglGetProcAddress("glCompileShaderARB"); + glslCtxInfo->pfnglCreateProgramObjectARB = + (PFNGLCREATEPROGRAMOBJECTARBPROC)wglGetProcAddress("glCreateProgramObjectARB"); + glslCtxInfo->pfnglCreateShaderObjectARB = + (PFNGLCREATESHADEROBJECTARBPROC)wglGetProcAddress("glCreateShaderObjectARB"); + glslCtxInfo->pfnglglDeleteObjectARB = + (PFNGLDELETEOBJECTARBPROC)wglGetProcAddress("glDeleteObjectARB"); + glslCtxInfo->pfnglGetInfoLogARB = + (PFNGLGETINFOLOGARBPROC)wglGetProcAddress("glGetInfoLogARB"); + glslCtxInfo->pfnglGetObjectParameterivARB = + (PFNGLGETOBJECTPARAMETERIVARBPROC)wglGetProcAddress("glGetObjectParameterivARB"); + glslCtxInfo->pfnglLinkProgramARB = + (PFNGLLINKPROGRAMARBPROC)wglGetProcAddress("glLinkProgramARB"); + glslCtxInfo->pfnglShaderSourceARB = + (PFNGLSHADERSOURCEARBPROC)wglGetProcAddress("glShaderSourceARB"); + glslCtxInfo->pfnglUseProgramObjectARB = + (PFNGLUSEPROGRAMOBJECTARBPROC)wglGetProcAddress("glUseProgramObjectARB"); + glslCtxInfo->pfnglGetUniformLocationARB = + (PFNGLGETUNIFORMLOCATIONARBPROC)wglGetProcAddress("glGetUniformLocationARB"); + glslCtxInfo->pfnglGetAttribLocationARB = + (PFNGLGETATTRIBLOCATIONARBPROC)wglGetProcAddress("glGetAttribLocationARB"); + glslCtxInfo->pfnglBindAttribLocationARB = + (PFNGLBINDATTRIBLOCATIONARBPROC)wglGetProcAddress("glBindAttribLocationARB"); + glslCtxInfo->pfnglVertexAttrib1fvARB = + (PFNGLVERTEXATTRIB1FVARBPROC)wglGetProcAddress("glVertexAttrib1fvARB"); + glslCtxInfo->pfnglVertexAttrib2fvARB = + (PFNGLVERTEXATTRIB2FVARBPROC)wglGetProcAddress("glVertexAttrib2fvARB"); + glslCtxInfo->pfnglVertexAttrib3fvARB = + (PFNGLVERTEXATTRIB3FVARBPROC)wglGetProcAddress("glVertexAttrib3fvARB"); + glslCtxInfo->pfnglVertexAttrib4fvARB = + (PFNGLVERTEXATTRIB4FVARBPROC)wglGetProcAddress("glVertexAttrib4fvARB"); + glslCtxInfo->pfnglVertexAttribPointerARB = + (PFNGLVERTEXATTRIBPOINTERARBPROC)wglGetProcAddress("glVertexAttribPointerARB"); + glslCtxInfo->pfnglEnableVertexAttribArrayARB = + (PFNGLENABLEVERTEXATTRIBARRAYARBPROC)wglGetProcAddress("glEnableVertexAttribArrayARB"); + glslCtxInfo->pfnglDisableVertexAttribArrayARB = + (PFNGLDISABLEVERTEXATTRIBARRAYARBPROC)wglGetProcAddress("glDisableVertexAttribArrayARB"); + glslCtxInfo->pfnglVertexAttribPointerARB = + (PFNGLVERTEXATTRIBPOINTERARBPROC)wglGetProcAddress("glVertexAttribPointerARB"); + glslCtxInfo->pfnglGetActiveUniformARB = + (PFNGLGETACTIVEUNIFORMARBPROC)wglGetProcAddress("glGetActiveUniformARB"); + glslCtxInfo->pfnglUniform1iARB = + (PFNGLUNIFORM1IARBPROC)wglGetProcAddress("glUniform1iARB"); + glslCtxInfo->pfnglUniform1fARB = + (PFNGLUNIFORM1FARBPROC)wglGetProcAddress("glUniform1fARB"); + glslCtxInfo->pfnglUniform2iARB = + (PFNGLUNIFORM2IARBPROC)wglGetProcAddress("glUniform2iARB"); + glslCtxInfo->pfnglUniform2fARB = + (PFNGLUNIFORM2FARBPROC)wglGetProcAddress("glUniform2fARB"); + glslCtxInfo->pfnglUniform3iARB = + (PFNGLUNIFORM3IARBPROC)wglGetProcAddress("glUniform3iARB"); + glslCtxInfo->pfnglUniform3fARB = + (PFNGLUNIFORM3FARBPROC)wglGetProcAddress("glUniform3fARB"); + glslCtxInfo->pfnglUniform4iARB = + (PFNGLUNIFORM4IARBPROC)wglGetProcAddress("glUniform4iARB"); + glslCtxInfo->pfnglUniform4fARB = + (PFNGLUNIFORM4FARBPROC)wglGetProcAddress("glUniform4fARB"); + glslCtxInfo->pfnglUniform1ivARB = + (PFNGLUNIFORM1IVARBPROC)wglGetProcAddress("glUniform1ivARB"); + glslCtxInfo->pfnglUniform1fvARB = + (PFNGLUNIFORM1FVARBPROC)wglGetProcAddress("glUniform1fvARB"); + glslCtxInfo->pfnglUniform2ivARB = + (PFNGLUNIFORM2IVARBPROC)wglGetProcAddress("glUniform2ivARB"); + glslCtxInfo->pfnglUniform2fvARB = + (PFNGLUNIFORM2FVARBPROC)wglGetProcAddress("glUniform2fvARB"); + glslCtxInfo->pfnglUniform3ivARB = + (PFNGLUNIFORM3IVARBPROC)wglGetProcAddress("glUniform3ivARB"); + glslCtxInfo->pfnglUniform3fvARB = + (PFNGLUNIFORM3FVARBPROC)wglGetProcAddress("glUniform3fvARB"); + glslCtxInfo->pfnglUniform4ivARB = + (PFNGLUNIFORM4IVARBPROC)wglGetProcAddress("glUniform4ivARB"); + glslCtxInfo->pfnglUniform4fvARB = + (PFNGLUNIFORM4FVARBPROC)wglGetProcAddress("glUniform4fvARB"); + glslCtxInfo->pfnglUniformMatrix3fvARB = + (PFNGLUNIFORMMATRIX3FVARBPROC)wglGetProcAddress("glUniformMatrix3fvARB"); + glslCtxInfo->pfnglUniformMatrix4fvARB = + (PFNGLUNIFORMMATRIX4FVARBPROC)wglGetProcAddress("glUniformMatrix4fvARB"); +#endif + + /* Initialize shader vertex attribute function pointers */ + ctxInfo->vertexAttrPointer = glslVertexAttrPointer; + ctxInfo->enableVertexAttrArray = glslEnableVertexAttrArray; + ctxInfo->disableVertexAttrArray = glslDisableVertexAttrArray; + ctxInfo->vertexAttr1fv = glslVertexAttr1fv; + ctxInfo->vertexAttr2fv = glslVertexAttr2fv; + ctxInfo->vertexAttr3fv = glslVertexAttr3fv; + ctxInfo->vertexAttr4fv = glslVertexAttr4fv; + + ctxInfo->maxTextureImageUnits = 0; + ctxInfo->maxVertexTextureImageUnits = 0; + ctxInfo->maxCombinedTextureImageUnits = 0; + + /* Initialize GLSL texture sampler limits */ + glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS_ARB, &ctxInfo->maxTextureImageUnits); + glGetIntegerv(GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB, &ctxInfo->maxVertexTextureImageUnits); + glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB, &ctxInfo->maxCombinedTextureImageUnits); + glGetIntegerv(GL_MAX_VERTEX_ATTRIBS_ARB, &ctxInfo->maxVertexAttrs); + if (ctxInfo->maxVertexAttrs > 0) { + /* decr count, since vertexAttr[0] is reserved for position */ + ctxInfo->maxVertexAttrs -= 1; + } + + if (glslCtxInfo->pfnglCreateShaderObjectARB != NULL) { + /*fprintf(stderr, "Java 3D : GLSLShader extension is available\n");*/ + ctxInfo->shadingLanguageGLSL = JNI_TRUE; + /* TODO: need to free ctxInfo->glslCtxInfo when ctxInfo is freed */ + ctxInfo->glslCtxInfo = glslCtxInfo; + } + else { + free(glslCtxInfo); + } + } +} + + +/* + * Return the info log as a string. This is used as the detail message + * for a ShaderError. + */ +static const char * +getInfoLog( + GraphicsContextPropertiesInfo* ctxProperties, + GLhandleARB obj) +{ + int infoLogLength = 0; + int len = 0; + GLcharARB *infoLog = NULL; + + GLSLCtxInfo *glslCtxInfo = ctxProperties->glslCtxInfo; + + static const char *allocMsg = + "Java 3D ERROR: could not allocate infoLog buffer\n"; + + glslCtxInfo->pfnglGetObjectParameterivARB(obj, + GL_OBJECT_INFO_LOG_LENGTH_ARB, + &infoLogLength); + if (infoLogLength > 0) { + infoLog = (GLcharARB *)malloc(infoLogLength); + if (infoLog == NULL) { + return allocMsg; + } + + glslCtxInfo->pfnglGetInfoLogARB(obj, infoLogLength, &len, infoLog); + } + + return infoLog; +} + + +/* + * Class: javax_media_j3d_GLSLShaderProgramRetained + * Method: createNativeShader + * Signature: (JI[J)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject JNICALL +Java_javax_media_j3d_GLSLShaderProgramRetained_createNativeShader( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jint shaderType, + jlongArray shaderIdArray) +{ + + jlong *shaderIdPtr; + GLhandleARB shaderHandle = 0; + + GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; + GLSLCtxInfo *glslCtxInfo = ctxProperties->glslCtxInfo; + jobject shaderError = NULL; + + shaderIdPtr = (*env)->GetLongArrayElements(env, shaderIdArray, NULL); + + /* Process shader */ + /* + fprintf(stderr, " shaderType == %d\n", shaderType); + */ + if (shaderType == javax_media_j3d_Shader_SHADER_TYPE_VERTEX) { + /* create the vertex shader */ + shaderHandle = glslCtxInfo->pfnglCreateShaderObjectARB(GL_VERTEX_SHADER_ARB); + } + else if (shaderType == javax_media_j3d_Shader_SHADER_TYPE_FRAGMENT) { + /* create the fragment shader */ + shaderHandle = glslCtxInfo->pfnglCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB); + } + + if (shaderHandle == 0) { + shaderError = createShaderError(env, + javax_media_j3d_ShaderError_COMPILE_ERROR, + "Unable to create native shader object", + NULL); + } + + shaderIdPtr[0] = (jlong) shaderHandle; + (*env)->ReleaseLongArrayElements(env, shaderIdArray, shaderIdPtr, 0); + + return shaderError; +} + + +/* + * Class: javax_media_j3d_GLSLShaderProgramRetained + * Method: destroyNativeShader + * Signature: (JJ)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject JNICALL +Java_javax_media_j3d_GLSLShaderProgramRetained_destroyNativeShader( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jlong shaderId) +{ + GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; + GLSLCtxInfo *glslCtxInfo = ctxProperties->glslCtxInfo; + + glslCtxInfo->pfnglglDeleteObjectARB( (GLhandleARB) shaderId); + + return NULL; +} + +/* + * Class: javax_media_j3d_GLSLShaderProgramRetained + * Method: compileNativeShader + * Signature: (JJLjava/lang/String;)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject JNICALL +Java_javax_media_j3d_GLSLShaderProgramRetained_compileNativeShader( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jlong shaderId, + jstring program) +{ + GLint status; + + GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; + GLSLCtxInfo *glslCtxInfo = ctxProperties->glslCtxInfo; + jobject shaderError = NULL; + + /* Null-terminated "C" strings */ + GLcharARB *shaderString = NULL; + const GLcharARB *shaderStringArr[1]; + + + /* Assertion check the shaderId */ + if (shaderId == 0) { + throwAssert(env, "shaderId == 0"); + return NULL; + } + + /* Assertion check the program string */ + if (program == NULL) { + throwAssert(env, "shader program string is NULL"); + return NULL; + } + + shaderString = (GLcharARB *)strJavaToC(env, program); + if (shaderString == NULL) { + /* Just return, since strJavaToC will throw OOM if it returns NULL */ + return NULL; + } + + shaderStringArr[0] = shaderString; + glslCtxInfo->pfnglShaderSourceARB((GLhandleARB)shaderId, 1, shaderStringArr, NULL); + glslCtxInfo->pfnglCompileShaderARB((GLhandleARB)shaderId); + glslCtxInfo->pfnglGetObjectParameterivARB((GLhandleARB)shaderId, + GL_OBJECT_COMPILE_STATUS_ARB, + &status); + if (!status) { + const char *detailMsg = getInfoLog(ctxProperties, (GLhandleARB)shaderId); + + shaderError = createShaderError(env, + javax_media_j3d_ShaderError_COMPILE_ERROR, + "GLSL shader compile error", + detailMsg); + } + + free(shaderString); + return shaderError; +} + + +/* + * Class: javax_media_j3d_GLSLShaderProgramRetained + * Method: createNativeShaderProgram + * Signature: (J[J)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject JNICALL +Java_javax_media_j3d_GLSLShaderProgramRetained_createNativeShaderProgram( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jlongArray shaderProgramIdArray) +{ + + jlong *shaderProgramIdPtr; + GLhandleARB shaderProgramHandle; + jobject shaderError = NULL; + + GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; + GLSLCtxInfo *glslCtxInfo = ctxProperties->glslCtxInfo; + shaderProgramIdPtr = (*env)->GetLongArrayElements(env, shaderProgramIdArray, NULL); + + shaderProgramHandle = glslCtxInfo->pfnglCreateProgramObjectARB(); + + if (shaderProgramHandle == 0) { + shaderError = createShaderError(env, + javax_media_j3d_ShaderError_LINK_ERROR, + "Unable to create native shader program object", + NULL); + } + + shaderProgramIdPtr[0] = (jlong) shaderProgramHandle; + (*env)->ReleaseLongArrayElements(env, shaderProgramIdArray, shaderProgramIdPtr, 0); + + return shaderError; +} + +/* + * Class: javax_media_j3d_GLSLShaderProgramRetained + * Method: destroyNativeShaderProgram + * Signature: (JJ)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject JNICALL +Java_javax_media_j3d_GLSLShaderProgramRetained_destroyNativeShaderProgram( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jlong shaderProgramId) +{ + GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; + GLSLCtxInfo *glslCtxInfo = ctxProperties->glslCtxInfo; + + glslCtxInfo->pfnglglDeleteObjectARB((GLhandleARB)shaderProgramId); + + return NULL; +} + +/* + * Class: javax_media_j3d_GLSLShaderProgramRetained + * Method: linkNativeShaderProgram + * Signature: (JJ[J)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject JNICALL +Java_javax_media_j3d_GLSLShaderProgramRetained_linkNativeShaderProgram( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jlong shaderProgramId, + jlongArray shaderIdArray) +{ + GLint status; + int i; + + GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; + GLSLCtxInfo *glslCtxInfo = ctxProperties->glslCtxInfo; + jlong *shaderIdPtr = (*env)->GetLongArrayElements(env, shaderIdArray, NULL); + jsize shaderIdArrayLength = (*env)->GetArrayLength(env, shaderIdArray); + jobject shaderError = NULL; + + /* + fprintf(stderr, "linkShaderProgram: shaderIdArrayLength %d\n", shaderIdArrayLength); + */ + + for(i=0; i<shaderIdArrayLength; i++) { + glslCtxInfo->pfnglAttachObjectARB((GLhandleARB)shaderProgramId, + (GLhandleARB)shaderIdPtr[i]); + } + + glslCtxInfo->pfnglLinkProgramARB((GLhandleARB)shaderProgramId); + glslCtxInfo->pfnglGetObjectParameterivARB((GLhandleARB)shaderProgramId, + GL_OBJECT_LINK_STATUS_ARB, + &status); + + if (!status) { + const char *detailMsg = getInfoLog(ctxProperties, (GLhandleARB)shaderProgramId); + + shaderError = createShaderError(env, + javax_media_j3d_ShaderError_LINK_ERROR, + "GLSL shader program link error", + detailMsg); + } + + (*env)->ReleaseLongArrayElements(env, shaderIdArray, shaderIdPtr, JNI_ABORT); + + return shaderError; +} + + +/* + * Class: javax_media_j3d_GLSLShaderProgramRetained + * Method: bindNativeVertexAttrName + * Signature: (JJLjava/lang/String;I)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject JNICALL +Java_javax_media_j3d_GLSLShaderProgramRetained_bindNativeVertexAttrName( + JNIEnv * env, + jobject obj, + jlong ctxInfo, + jlong shaderProgramId, + jstring attrName, + jint attrIndex) +{ + GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; + GLSLCtxInfo *glslCtxInfo = ctxProperties->glslCtxInfo; + jobject shaderError = NULL; + GLcharARB *attrNameString = (GLcharARB *)strJavaToC(env, attrName); + + /* + fprintf(stderr, + "GLSLShaderProgramRetained.bindNativeVertexAttrName: %s\n", + attrNameString); + */ + + glslCtxInfo->pfnglBindAttribLocationARB((GLhandleARB)shaderProgramId, + attrIndex + 1, + attrNameString); + + /* No error checking needed, so just return */ + + return shaderError; +} + + +static jint +glslToJ3dType(GLint type) +{ + switch (type) { + case GL_BOOL_ARB: + case GL_INT: + case GL_SAMPLER_2D_ARB: + case GL_SAMPLER_3D_ARB: + case GL_SAMPLER_CUBE_ARB: + return TYPE_INTEGER; + + case GL_FLOAT: + return TYPE_FLOAT; + + case GL_INT_VEC2_ARB: + case GL_BOOL_VEC2_ARB: + return TYPE_TUPLE2I; + + case GL_FLOAT_VEC2_ARB: + return TYPE_TUPLE2F; + + case GL_INT_VEC3_ARB: + case GL_BOOL_VEC3_ARB: + return TYPE_TUPLE3I; + + case GL_FLOAT_VEC3_ARB: + return TYPE_TUPLE3F; + + case GL_INT_VEC4_ARB: + case GL_BOOL_VEC4_ARB: + return TYPE_TUPLE4I; + + case GL_FLOAT_VEC4_ARB: + return TYPE_TUPLE4F; + + /* case GL_FLOAT_MAT2_ARB: */ + + case GL_FLOAT_MAT3_ARB: + return TYPE_MATRIX3F; + + case GL_FLOAT_MAT4_ARB: + return TYPE_MATRIX4F; + + /* + * Java 3D does not support the following sampler types: + * + * case GL_SAMPLER_1D_ARB: + * case GL_SAMPLER_1D_SHADOW_ARB: + * case GL_SAMPLER_2D_SHADOW_ARB: + * case GL_SAMPLER_2D_RECT_ARB: + * case GL_SAMPLER_2D_RECT_SHADOW_ARB: + */ + } + + return -1; +} + + +/* + * Class: javax_media_j3d_GLSLShaderProgramRetained + * Method: lookupNativeShaderAttrNames + * Signature: (JJI[Ljava/lang/String;[J[I[I[Z)V + */ +JNIEXPORT void JNICALL +Java_javax_media_j3d_GLSLShaderProgramRetained_lookupNativeShaderAttrNames( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jlong shaderProgramId, + jint numAttrNames, + jobjectArray attrNames, + jlongArray locArr, + jintArray typeArr, + jintArray sizeArr, + jbooleanArray isArrayArr) +{ + GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; + GLSLCtxInfo *glslCtxInfo = ctxProperties->glslCtxInfo; + GLcharARB **attrNamesString; + jlong *locPtr; + jint *typePtr; + jint *sizePtr; + jboolean *isArrayPtr; + GLint loc; + GLenum type; + GLint size; + GLcharARB *name; + GLint maxStrLen; + int numActiveUniforms; + int i, j; + + JNIEnv table = *env; + + locPtr = (*env)->GetLongArrayElements(env, locArr, NULL); + typePtr = (*env)->GetIntArrayElements(env, typeArr, NULL); + sizePtr = (*env)->GetIntArrayElements(env, sizeArr, NULL); + isArrayPtr = (*env)->GetBooleanArrayElements(env, isArrayArr, NULL); + + /* + * Initialize the name array, also set the loc, type, and size + * arrays to out-of-band values + */ + attrNamesString = (GLcharARB **)malloc(numAttrNames * sizeof(GLcharARB *)); + for (i = 0; i < numAttrNames; i++) { + jstring attrName; + + attrName = (*env)->GetObjectArrayElement(env, attrNames, i); + attrNamesString[i] = (GLcharARB *)strJavaToC(env, attrName); + + locPtr[i] = -1; + typePtr[i] = -1; + sizePtr[i] = -1; + } + + /* + * Loop through the list of active uniform variables, one at a + * time, searching for a match in the attrNames array. + * + * NOTE: Since attrNames isn't sorted, and we don't have a + * hashtable of names to index locations, we will do a + * brute-force, linear search of the array. This leads to an + * O(n^2) algorithm (actually O(n*m) where n is attrNames.length + * and m is the number of uniform variables), but since we expect + * N to be small, we will not optimize this at this time. + */ + glslCtxInfo->pfnglGetObjectParameterivARB((GLhandleARB) shaderProgramId, + GL_OBJECT_ACTIVE_UNIFORMS_ARB, + &numActiveUniforms); + glslCtxInfo->pfnglGetObjectParameterivARB((GLhandleARB) shaderProgramId, + GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB, + &maxStrLen); + name = malloc(maxStrLen + 1); + + /* + fprintf(stderr, + "numActiveUniforms = %d, maxStrLen = %d\n", + numActiveUniforms, maxStrLen); + */ + + for (i = 0; i < numActiveUniforms; i++) { + glslCtxInfo->pfnglGetActiveUniformARB((GLhandleARB) shaderProgramId, + i, + maxStrLen, + NULL, + &size, + &type, + name); + /* + fprintf(stderr, + "Uniform[%d] : name = %s, type = %d, size = %d\n", + i, name, type, size); + */ + + /* Now try to find the name */ + for (j = 0; j < numAttrNames; j++) { + if (strcmp(attrNamesString[j], name) == 0) { + sizePtr[j] = (jint)size; + isArrayPtr[j] = (size > 1); + typePtr[j] = glslToJ3dType(type); + break; + } + } + } + + free(name); + + /* Now lookup the location of each name in the attrNames array */ + for (i = 0; i < numAttrNames; i++) { + /* + * Get uniform attribute location + */ + loc = glslCtxInfo->pfnglGetUniformLocationARB((GLhandleARB)shaderProgramId, + attrNamesString[i]); + + /* + fprintf(stderr, + "str = %s, loc = %d\n", + attrNamesString[i], loc); + */ + + locPtr[i] = (jlong)loc; + } + + /* Free the array of strings */ + for (i = 0; i < numAttrNames; i++) { + free(attrNamesString[i]); + } + free(attrNamesString); + + /* Release JNI arrays */ + (*env)->ReleaseLongArrayElements(env, locArr, locPtr, 0); + (*env)->ReleaseIntArrayElements(env, typeArr, typePtr, 0); + (*env)->ReleaseIntArrayElements(env, sizeArr, sizePtr, 0); + (*env)->ReleaseBooleanArrayElements(env, isArrayArr, isArrayPtr, 0); +} + + +/* + * Class: javax_media_j3d_GLSLShaderProgramRetained + * Method: useShaderProgram + * Signature: (JI)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject +JNICALL Java_javax_media_j3d_GLSLShaderProgramRetained_useShaderProgram( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jlong shaderProgramId) +{ + GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; + GLSLCtxInfo *glslCtxInfo = ctxProperties->glslCtxInfo; + + glslCtxInfo->pfnglUseProgramObjectARB((GLhandleARB)shaderProgramId); + + ctxProperties->shaderProgramId = shaderProgramId; + + return NULL; +} + +/* + * Class: javax_media_j3d_GLSLShaderProgramRetained + * Method: setUniform1i + * Signature: (JJJI)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject +JNICALL Java_javax_media_j3d_GLSLShaderProgramRetained_setUniform1i( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jlong shaderProgramId, + jlong location, + jint value) +{ + /* We do not need to use shaderProgramId because caller has already called + useShaderProgram(). */ + + GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; + GLSLCtxInfo *glslCtxInfo = ctxProperties->glslCtxInfo; + + /* Load attribute */ + glslCtxInfo->pfnglUniform1iARB((GLint)location, value); + + return NULL; +} + +/* + * Class: javax_media_j3d_GLSLShaderProgramRetained + * Method: setUniform1f + * Signature: (JJJF)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject +JNICALL Java_javax_media_j3d_GLSLShaderProgramRetained_setUniform1f( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jlong shaderProgramId, + jlong location, + jfloat value) +{ + /* We do not need to use shaderProgramId because caller has already called + useShaderProgram(). */ + + GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; + GLSLCtxInfo *glslCtxInfo = ctxProperties->glslCtxInfo; + + /* Load attribute */ + glslCtxInfo->pfnglUniform1fARB((GLint)location, value); + + return NULL; +} + +/* + * Class: javax_media_j3d_GLSLShaderProgramRetained + * Method: setUniform2i + * Signature: (JJJ[I)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject +JNICALL Java_javax_media_j3d_GLSLShaderProgramRetained_setUniform2i( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jlong shaderProgramId, + jlong location, + jintArray varray) +{ + /* We do not need to use shaderProgramId because caller has already called + useShaderProgram(). */ + + jint *values; + + GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; + GLSLCtxInfo *glslCtxInfo = ctxProperties->glslCtxInfo; + + /* Get array values */ + values = (*env)->GetIntArrayElements(env, varray, NULL); + + /* Load attribute */ + glslCtxInfo->pfnglUniform2iARB((GLint)location, values[0], values[1]); + + /* Release array values */ + (*env)->ReleaseIntArrayElements(env, varray, values, JNI_ABORT); + + return NULL; + +} + + +/* + * Class: javax_media_j3d_GLSLShaderProgramRetained + * Method: setUniform2f + * Signature: (JJJ[F)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject +JNICALL Java_javax_media_j3d_GLSLShaderProgramRetained_setUniform2f( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jlong shaderProgramId, + jlong location, + jfloatArray varray) +{ + /* We do not need to use shaderProgramId because caller has already called + useShaderProgram(). */ + + jfloat *values; + + GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; + GLSLCtxInfo *glslCtxInfo = ctxProperties->glslCtxInfo; + + /* Why shaderProgramId is not needed ? */ + + /* Get array values */ + values = (*env)->GetFloatArrayElements(env, varray, NULL); + + /* Load attribute */ + glslCtxInfo->pfnglUniform2fARB((GLint)location, values[0], values[1]); + + /* Release array values */ + (*env)->ReleaseFloatArrayElements(env, varray, values, JNI_ABORT); + + return NULL; + +} + + +/* + * Class: javax_media_j3d_GLSLShaderProgramRetained + * Method: setUniform3i + * Signature: (JJJ[I)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject +JNICALL Java_javax_media_j3d_GLSLShaderProgramRetained_setUniform3i( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jlong shaderProgramId, + jlong location, + jintArray varray) +{ + /* We do not need to use shaderProgramId because caller has already called + useShaderProgram(). */ + + jint *values; + + GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; + GLSLCtxInfo *glslCtxInfo = ctxProperties->glslCtxInfo; + + /* Get array values */ + values = (*env)->GetIntArrayElements(env, varray, NULL); + + /* Load attribute */ + glslCtxInfo->pfnglUniform3iARB((GLint)location, values[0], values[1], values[2]); + + /* Release array values */ + (*env)->ReleaseIntArrayElements(env, varray, values, JNI_ABORT); + + return NULL; + +} + + +/* + * Class: javax_media_j3d_GLSLShaderProgramRetained + * Method: setUniform3f + * Signature: (JJJ[F)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject +JNICALL Java_javax_media_j3d_GLSLShaderProgramRetained_setUniform3f( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jlong shaderProgramId, + jlong location, + jfloatArray varray) +{ + /* We do not need to use shaderProgramId because caller has already called + useShaderProgram(). */ + + jfloat *values; + + GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; + GLSLCtxInfo *glslCtxInfo = ctxProperties->glslCtxInfo; + + /* Get array values */ + values = (*env)->GetFloatArrayElements(env, varray, NULL); + + /* Load attribute */ + glslCtxInfo->pfnglUniform3fARB((GLint)location, values[0], values[1], values[2]); + + /* Release array values */ + (*env)->ReleaseFloatArrayElements(env, varray, values, JNI_ABORT); + + return NULL; + +} + + +/* + * Class: javax_media_j3d_GLSLShaderProgramRetained + * Method: setUniform4i + * Signature: (JJJ[I)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject +JNICALL Java_javax_media_j3d_GLSLShaderProgramRetained_setUniform4i( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jlong shaderProgramId, + jlong location, + jintArray varray) +{ + /* We do not need to use shaderProgramId because caller has already called + useShaderProgram(). */ + + jint *values; + + GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; + GLSLCtxInfo *glslCtxInfo = ctxProperties->glslCtxInfo; + /* Get array values */ + values = (*env)->GetIntArrayElements(env, varray, NULL); + + /* Load attribute */ + glslCtxInfo->pfnglUniform4iARB((GLint)location, values[0], values[1], values[2], values[3]); + + /* Release array values */ + (*env)->ReleaseIntArrayElements(env, varray, values, JNI_ABORT); + + return NULL; +} + + +/* + * Class: javax_media_j3d_GLSLShaderProgramRetained + * Method: setUniform4f + * Signature: (JJJ[F)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject +JNICALL Java_javax_media_j3d_GLSLShaderProgramRetained_setUniform4f( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jlong shaderProgramId, + jlong location, + jfloatArray varray) +{ + /* We do not need to use shaderProgramId because caller has already called + useShaderProgram(). */ + + jfloat *values; + + GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; + GLSLCtxInfo *glslCtxInfo = ctxProperties->glslCtxInfo; + + /* Get array values */ + values = (*env)->GetFloatArrayElements(env, varray, NULL); + + /* Load attribute */ + glslCtxInfo->pfnglUniform4fARB((GLint)location, values[0], values[1], values[2], values[3]); + + /* Release array values */ + (*env)->ReleaseFloatArrayElements(env, varray, values, JNI_ABORT); + + return NULL; + +} + +/* + * Class: javax_media_j3d_GLSLShaderProgramRetained + * Method: setUniformMatrix3f + * Signature: (JJJ[F)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject JNICALL Java_javax_media_j3d_GLSLShaderProgramRetained_setUniformMatrix3f( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jlong shaderProgramId, + jlong location, + jfloatArray varray) +{ + /* We do not need to use shaderProgramId because caller has already called + useShaderProgram(). */ + + jfloat *values; + + GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; + GLSLCtxInfo *glslCtxInfo = ctxProperties->glslCtxInfo; + + /* Get array values */ + values = (*env)->GetFloatArrayElements(env, varray, NULL); + + /* Load attribute */ + /* transpose is GL_TRUE : each matrix is supplied in row major order */ + glslCtxInfo->pfnglUniformMatrix3fvARB((GLint)location, 1, GL_TRUE, (GLfloat *)values); + + /* Release array values */ + (*env)->ReleaseFloatArrayElements(env, varray, values, JNI_ABORT); + + return NULL; +} + +/* + * Class: javax_media_j3d_GLSLShaderProgramRetained + * Method: setUniformMatrix4f + * Signature: (JJJ[F)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject JNICALL Java_javax_media_j3d_GLSLShaderProgramRetained_setUniformMatrix4f( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jlong shaderProgramId, + jlong location, + jfloatArray varray) +{ + /* We do not need to use shaderProgramId because caller has already called + useShaderProgram(). */ + + jfloat *values; + + GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; + GLSLCtxInfo *glslCtxInfo = ctxProperties->glslCtxInfo; + + /* Get array values */ + values = (*env)->GetFloatArrayElements(env, varray, NULL); + + /* Load attribute */ + /* transpose is GL_TRUE : each matrix is supplied in row major order */ + glslCtxInfo->pfnglUniformMatrix4fvARB((GLint)location, 1, GL_TRUE, (GLfloat *)values); + + /* Release array values */ + (*env)->ReleaseFloatArrayElements(env, varray, values, JNI_ABORT); + + return NULL; +} + +/* + * Class: javax_media_j3d_GLSLShaderProgramRetained + * Method: setUniform1iArray + * Signature: (JJJI[I)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject +JNICALL Java_javax_media_j3d_GLSLShaderProgramRetained_setUniform1iArray( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jlong shaderProgramId, + jlong location, + jint length, + jintArray vArray) +{ + + JNIEnv table = *env; + jint *values; + + /* We do not need to use shaderProgramId because caller has already called + useShaderProgram(). */ + + GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; + GLSLCtxInfo *glslCtxInfo = ctxProperties->glslCtxInfo; + + /* Get array values */ + values = (jint *)(*(table->GetPrimitiveArrayCritical))(env, vArray , NULL); + + /* Load attribute */ + glslCtxInfo->pfnglUniform1ivARB((GLint)location, length, values); + + /* Release array values */ + (*(table->ReleasePrimitiveArrayCritical))(env, vArray, values, 0); + + return NULL; + +} + + +/* + * Class: javax_media_j3d_GLSLShaderProgramRetained + * Method: setUniform1fArray + * Signature: (JJJI[F)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject +JNICALL Java_javax_media_j3d_GLSLShaderProgramRetained_setUniform1fArray( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jlong shaderProgramId, + jlong location, + jint length, + jfloatArray vArray) +{ + + JNIEnv table = *env; + jfloat *values; + + /* We do not need to use shaderProgramId because caller has already called + useShaderProgram(). */ + + GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; + GLSLCtxInfo *glslCtxInfo = ctxProperties->glslCtxInfo; + + /* Get array values */ + values = (jfloat *)(*(table->GetPrimitiveArrayCritical))(env, vArray , NULL); + + /* Load attribute */ + glslCtxInfo->pfnglUniform1fvARB((GLint)location, length, values); + + /* Release array values */ + (*(table->ReleasePrimitiveArrayCritical))(env, vArray, values, 0); + + return NULL; + +} + +/* + * Class: javax_media_j3d_GLSLShaderProgramRetained + * Method: setUniform2iArray + * Signature: (JJJI[I)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject +JNICALL Java_javax_media_j3d_GLSLShaderProgramRetained_setUniform2iArray( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jlong shaderProgramId, + jlong location, + jint length, + jintArray vArray) +{ + + JNIEnv table = *env; + jint *values; + + /* We do not need to use shaderProgramId because caller has already called + useShaderProgram(). */ + + GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; + GLSLCtxInfo *glslCtxInfo = ctxProperties->glslCtxInfo; + + /* Get array values */ + values = (jint *)(*(table->GetPrimitiveArrayCritical))(env, vArray , NULL); + + /* Load attribute */ + glslCtxInfo->pfnglUniform2ivARB((GLint)location, length, values); + + /* Release array values */ + (*(table->ReleasePrimitiveArrayCritical))(env, vArray, values, 0); + + return NULL; + +} + + + +/* + * Class: javax_media_j3d_GLSLShaderProgramRetained + * Method: setUniform2fArray + * Signature: (JJJI[F)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject +JNICALL Java_javax_media_j3d_GLSLShaderProgramRetained_setUniform2fArray( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jlong shaderProgramId, + jlong location, + jint length, + jfloatArray vArray) +{ + + JNIEnv table = *env; + jfloat *values; + + /* We do not need to use shaderProgramId because caller has already called + useShaderProgram(). */ + + GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; + GLSLCtxInfo *glslCtxInfo = ctxProperties->glslCtxInfo; + + /* Get array values */ + values = (jfloat *)(*(table->GetPrimitiveArrayCritical))(env, vArray , NULL); + + /* Load attribute */ + glslCtxInfo->pfnglUniform2fvARB((GLint)location, length, values); + + /* Release array values */ + (*(table->ReleasePrimitiveArrayCritical))(env, vArray, values, 0); + + return NULL; + +} + + +/* + * Class: javax_media_j3d_GLSLShaderProgramRetained + * Method: setUniform3iArray + * Signature: (JJJI[I)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject +JNICALL Java_javax_media_j3d_GLSLShaderProgramRetained_setUniform3iArray( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jlong shaderProgramId, + jlong location, + jint length, + jintArray vArray) +{ + + JNIEnv table = *env; + jint *values; + + /* We do not need to use shaderProgramId because caller has already called + useShaderProgram(). */ + + GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; + GLSLCtxInfo *glslCtxInfo = ctxProperties->glslCtxInfo; + + /* Get array values */ + values = (jint *)(*(table->GetPrimitiveArrayCritical))(env, vArray , NULL); + + /* Load attribute */ + glslCtxInfo->pfnglUniform3ivARB((GLint)location, length, values); + + /* Release array values */ + (*(table->ReleasePrimitiveArrayCritical))(env, vArray, values, 0); + + return NULL; + +} + + +/* + * Class: javax_media_j3d_GLSLShaderProgramRetained + * Method: setUniform3fArray + * Signature: (JJJI[F)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject +JNICALL Java_javax_media_j3d_GLSLShaderProgramRetained_setUniform3fArray( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jlong shaderProgramId, + jlong location, + jint length, + jfloatArray vArray) +{ + + JNIEnv table = *env; + jfloat *values; + + /* We do not need to use shaderProgramId because caller has already called + useShaderProgram(). */ + + GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; + GLSLCtxInfo *glslCtxInfo = ctxProperties->glslCtxInfo; + + /* Get array values */ + values = (jfloat *)(*(table->GetPrimitiveArrayCritical))(env, vArray , NULL); + + /* Load attribute */ + glslCtxInfo->pfnglUniform3fvARB((GLint)location, length, values); + + /* Release array values */ + (*(table->ReleasePrimitiveArrayCritical))(env, vArray, values, 0); + + return NULL; + +} + + +/* + * Class: javax_media_j3d_GLSLShaderProgramRetained + * Method: setUniform4iArray + * Signature: (JJJI[I)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject +JNICALL Java_javax_media_j3d_GLSLShaderProgramRetained_setUniform4iArray( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jlong shaderProgramId, + jlong location, + jint length, + jintArray vArray) +{ + + JNIEnv table = *env; + jint *values; + + /* We do not need to use shaderProgramId because caller has already called + useShaderProgram(). */ + + GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; + GLSLCtxInfo *glslCtxInfo = ctxProperties->glslCtxInfo; + + /* Get array values */ + values = (jint *)(*(table->GetPrimitiveArrayCritical))(env, vArray , NULL); + + /* Load attribute */ + glslCtxInfo->pfnglUniform4ivARB((GLint)location, length, values); + + /* Release array values */ + (*(table->ReleasePrimitiveArrayCritical))(env, vArray, values, 0); + + return NULL; + +} + + +/* + * Class: javax_media_j3d_GLSLShaderProgramRetained + * Method: setUniform4fArray + * Signature: (JJJI[F)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject +JNICALL Java_javax_media_j3d_GLSLShaderProgramRetained_setUniform4fArray( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jlong shaderProgramId, + jlong location, + jint length, + jfloatArray vArray) +{ + + JNIEnv table = *env; + jfloat *values; + + /* We do not need to use shaderProgramId because caller has already called + useShaderProgram(). */ + + GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; + GLSLCtxInfo *glslCtxInfo = ctxProperties->glslCtxInfo; + + /* Get array values */ + values = (jfloat *)(*(table->GetPrimitiveArrayCritical))(env, vArray , NULL); + + /* Load attribute */ + glslCtxInfo->pfnglUniform4fvARB((GLint)location, length, values); + + /* Release array values */ + (*(table->ReleasePrimitiveArrayCritical))(env, vArray, values, 0); + + return NULL; + +} + + +/* + * Class: javax_media_j3d_GLSLShaderProgramRetained + * Method: setUniformMatrix3fArray + * Signature: (JJJI[F)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject +JNICALL Java_javax_media_j3d_GLSLShaderProgramRetained_setUniformMatrix3fArray +( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jlong shaderProgramId, + jlong location, + jint length, + jfloatArray vArray) +{ + + JNIEnv table = *env; + jfloat *values; + + /* We do not need to use shaderProgramId because caller has already called + useShaderProgram(). */ + + GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; + GLSLCtxInfo *glslCtxInfo = ctxProperties->glslCtxInfo; + + /* Get array values */ + values = (jfloat *)(*(table->GetPrimitiveArrayCritical))(env, vArray , NULL); + + /* Load attribute */ + /* transpose is GL_TRUE : each matrix is supplied in row major order */ + glslCtxInfo->pfnglUniformMatrix3fvARB((GLint)location, length, + GL_TRUE, (GLfloat *)values); + + /* Release array values */ + (*(table->ReleasePrimitiveArrayCritical))(env, vArray, values, 0); + + return NULL; +} + + +/* + * Class: javax_media_j3d_GLSLShaderProgramRetained + * Method: setUniformMatrix4fArray + * Signature: (JJJI[F)Ljavax/media/j3d/ShaderError; + */ +JNIEXPORT jobject +JNICALL Java_javax_media_j3d_GLSLShaderProgramRetained_setUniformMatrix4fArray +( + JNIEnv *env, + jobject obj, + jlong ctxInfo, + jlong shaderProgramId, + jlong location, + jint length, + jfloatArray vArray) +{ + + JNIEnv table = *env; + jfloat *values; + + /* We do not need to use shaderProgramId because caller has already called + useShaderProgram(). */ + + GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; + GLSLCtxInfo *glslCtxInfo = ctxProperties->glslCtxInfo; + + /* Get array values */ + values = (jfloat *)(*(table->GetPrimitiveArrayCritical))(env, vArray , NULL); + + /* Load attribute */ + /* transpose is GL_TRUE : each matrix is supplied in row major order */ + glslCtxInfo->pfnglUniformMatrix4fvARB((GLint)location, length, + GL_TRUE, (GLfloat *)values); + + /* Release array values */ + (*(table->ReleasePrimitiveArrayCritical))(env, vArray, values, 0); + + return NULL; +} + + +/* + * GLSL vertex attribute functions + */ + +static void +glslVertexAttrPointer( + GraphicsContextPropertiesInfo *ctxProperties, + int index, int size, int type, int stride, + const void *pointer) +{ + GLSLCtxInfo *glslCtxInfo = ctxProperties->glslCtxInfo; + + glslCtxInfo->pfnglVertexAttribPointerARB(index+1, size, type, + GL_FALSE, stride, pointer); +} + +static void +glslEnableVertexAttrArray( + GraphicsContextPropertiesInfo *ctxProperties, + int index) +{ + GLSLCtxInfo *glslCtxInfo = ctxProperties->glslCtxInfo; + + glslCtxInfo->pfnglEnableVertexAttribArrayARB(index+1); +} + +static void +glslDisableVertexAttrArray( + GraphicsContextPropertiesInfo *ctxProperties, + int index) +{ + GLSLCtxInfo *glslCtxInfo = ctxProperties->glslCtxInfo; + + glslCtxInfo->pfnglDisableVertexAttribArrayARB(index+1); +} + +static void +glslVertexAttr1fv( + GraphicsContextPropertiesInfo *ctxProperties, + int index, const float *v) +{ + GLSLCtxInfo *glslCtxInfo = ctxProperties->glslCtxInfo; + +#ifdef VERBOSE + fprintf(stderr, "glslVertexAttr1fv()\n"); +#endif + glslCtxInfo->pfnglVertexAttrib1fvARB(index+1, v); +} + +static void +glslVertexAttr2fv( + GraphicsContextPropertiesInfo *ctxProperties, + int index, const float *v) +{ + GLSLCtxInfo *glslCtxInfo = ctxProperties->glslCtxInfo; + +#ifdef VERBOSE + fprintf(stderr, "glslVertexAttr2fv()\n"); +#endif + glslCtxInfo->pfnglVertexAttrib2fvARB(index+1, v); +} + +static void +glslVertexAttr3fv( + GraphicsContextPropertiesInfo *ctxProperties, + int index, const float *v) +{ + GLSLCtxInfo *glslCtxInfo = ctxProperties->glslCtxInfo; + +#ifdef VERBOSE + fprintf(stderr, "glslVertexAttr3fv()\n"); +#endif + glslCtxInfo->pfnglVertexAttrib3fvARB(index+1, v); +} + +static void +glslVertexAttr4fv( + GraphicsContextPropertiesInfo *ctxProperties, + int index, const float *v) +{ + GLSLCtxInfo *glslCtxInfo = ctxProperties->glslCtxInfo; + +#ifdef VERBOSE + fprintf(stderr, "glslVertexAttr4fv()\n"); +#endif + glslCtxInfo->pfnglVertexAttrib4fvARB(index+1, v); +} + diff --git a/src/native/ogl/GeometryArrayRetained.c b/src/native/ogl/GeometryArrayRetained.c index b69324b..9834eae 100644 --- a/src/native/ogl/GeometryArrayRetained.c +++ b/src/native/ogl/GeometryArrayRetained.c @@ -47,24 +47,20 @@ static float EPS = 0.0001f; iaFormat = GL_T2F_C4F_N3F_V3F; break;\ default: \ useInterleavedArrays = 0; break; \ - } - - - -/* This hardcoded value should be fixed for 1.3 */ -#define NUM_TEXTURE_UNITS 64 + } -extern void enableTexCoordPointer(GraphicsContextPropertiesInfo *, int, int, - int, int, void *); -extern void disableTexCoordPointer(GraphicsContextPropertiesInfo *, int); +static void enableTexCoordPointer(GraphicsContextPropertiesInfo *, int, int, + int, int, void *); +static void disableTexCoordPointer(GraphicsContextPropertiesInfo *, int); +static void clientActiveTextureUnit(GraphicsContextPropertiesInfo *, int); /* * texUnitIndex < 0 implies send all texture unit state info in one pass * texUnitIndex >= 0 implies one texture unit state info in one pass using * the underlying texture unit 0 */ -void +static void executeTexture(int texUnitIndex, int texCoordSetMapLen, int texSize, int bstride, int texCoordoff, jint texCoordSetMapOffset[], @@ -143,6 +139,39 @@ executeTexture(int texUnitIndex, int texCoordSetMapLen, } } +static void +resetTexture(jlong ctxInfo) +{ + int i; + + GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; + + if(ctxProperties->arb_multitexture) { + /* Disable texture coordinate arrays for all texture units */ + for (i = 0; i < ctxProperties->maxTexCoordSets; i++) { + disableTexCoordPointer(ctxProperties, i); + } + /* Reset client active texture unit to 0 */ + clientActiveTextureUnit(ctxProperties, 0); + } else { + disableTexCoordPointer(ctxProperties, 0); + } +} + + +static void +resetVertexAttrs(jlong ctxInfo, int vertexAttrCount) +{ + int i; + + GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; + + /* Disable specified vertex attr arrays */ + for (i = 0; i < vertexAttrCount; i++) { + ctxProperties->disableVertexAttrArray(ctxProperties, i); + } +} + /* * glLockArrays() is invoked only for indexed geometry, and the @@ -166,21 +195,23 @@ unlockArray(GraphicsContextPropertiesInfo *ctxProperties) } -void -executeGeometryArray(JNIEnv *env, - jobject obj, jlong ctxInfo, jobject geo, jint geo_type, - jboolean isNonUniformScale, jboolean useAlpha, - jboolean multiScreen, - jboolean ignoreVertexColors, - jint startVIndex, - jint vcount, jint vformat, - jint texCoordSetCount, - jintArray texCoordSetMap, jint texCoordSetMapLen, - jintArray texUnitOffset, - jint numActiveTexUnit, - jintArray texUnitStateMapArray, - jfloatArray varray, jobject varrayBuffer, jfloatArray carray, - jint texUnitIndex, jint cDirty) +static void +executeGeometryArray( + JNIEnv *env, + jobject obj, jlong ctxInfo, jobject geo, jint geo_type, + jboolean isNonUniformScale, jboolean useAlpha, + jboolean multiScreen, + jboolean ignoreVertexColors, + jint startVIndex, + jint vcount, jint vformat, + jint texCoordSetCount, + jintArray texCoordSetMap, jint texCoordSetMapLen, + jintArray texUnitOffset, + jint numActiveTexUnit, + jintArray texUnitStateMapArray, + jint vertexAttrCount, jintArray vertexAttrSizes, + jfloatArray varray, jobject varrayBuffer, jfloatArray carray, + jint texUnitIndex, jint cDirty) { jclass geo_class; JNIEnv table; @@ -210,13 +241,16 @@ executeGeometryArray(JNIEnv *env, jfieldID start_field; GLint *start; int cstride = 0; + int vAttrStride = 0; + int vAttrOff; + jint *vAttrSizesPtr = NULL; table = *env; geo_class = (jclass) (*(table->GetObjectClass))(env, geo); - /* This matches the code in GeometryArrayRetained.java */ stride = coordoff = normoff = coloroff = texCoordoff = 0; + vAttrOff = 0; if ((vformat & GA_COORDINATES) != 0) { stride += 3; } @@ -253,6 +287,20 @@ executeGeometryArray(JNIEnv *env, coordoff += texStride; } + if ((vformat & GA_VERTEX_ATTRIBUTES) != 0) { + if (vertexAttrSizes != NULL) { + vAttrSizesPtr = table->GetIntArrayElements(env, vertexAttrSizes, NULL); + } + for (i = 0; i < vertexAttrCount; i++) { + vAttrStride += vAttrSizesPtr[i]; + } + stride += vAttrStride; + normoff += vAttrStride; + coloroff += vAttrStride; + coordoff += vAttrStride; + texCoordoff += vAttrStride; + } + bstride = stride*sizeof(float); /* @@ -277,17 +325,22 @@ executeGeometryArray(JNIEnv *env, } /* begin critical region */ + verts = NULL; if(varray != NULL) { verts = (jfloat *) (*(table->GetPrimitiveArrayCritical))(env, varray, NULL); - if(verts == NULL) - return; } else if(varrayBuffer != NULL) { verts = (jfloat *) (*(table->GetDirectBufferAddress))(env, varrayBuffer ); - if(verts == NULL) - return; } - + if (verts == NULL) { + /* This should never happen */ + fprintf(stderr, "JAVA 3D ERROR : unable to get vertex pointer\n"); + if (vAttrSizesPtr != NULL) { + table->ReleaseIntArrayElements(env, vertexAttrSizes, vAttrSizesPtr, JNI_ABORT); + } + return; + } + /* using byRef interleaved array and has a separate pointer, then .. */ cstride = stride; if (carray != NULL) { @@ -369,6 +422,17 @@ executeGeometryArray(JNIEnv *env, numActiveTexUnit, texUnitStateMap, startVertex, ctxInfo); } + + if (vformat & GA_VERTEX_ATTRIBUTES) { + jfloat *vAttrPtr = &startVertex[vAttrOff]; + + for (i = 0; i < vertexAttrCount; i++) { + ctxProperties->enableVertexAttrArray(ctxProperties, i); + ctxProperties->vertexAttrPointer(ctxProperties, i, vAttrSizesPtr[i], + GL_FLOAT, bstride, vAttrPtr); + vAttrPtr += vAttrSizesPtr[i]; + } + } } switch (geo_type) { @@ -451,6 +515,17 @@ executeGeometryArray(JNIEnv *env, numActiveTexUnit, texUnitStateMap, startVertex, ctxInfo); } + + if (vformat & GA_VERTEX_ATTRIBUTES) { + jfloat *vAttrPtr = &startVertex[vAttrOff]; + + for (i = 0; i < vertexAttrCount; i++) { + ctxProperties->enableVertexAttrArray(ctxProperties, i); + ctxProperties->vertexAttrPointer(ctxProperties, i, vAttrSizesPtr[i], + GL_FLOAT, bstride, vAttrPtr); + vAttrPtr += vAttrSizesPtr[i]; + } + } } switch (geo_type){ case GEO_TYPE_QUAD_SET : glDrawArrays(GL_QUADS, 0, vcount);break; @@ -465,6 +540,14 @@ executeGeometryArray(JNIEnv *env, glDisable(GL_NORMALIZE); } + if (vformat & GA_VERTEX_ATTRIBUTES) { + resetVertexAttrs(ctxInfo, vertexAttrCount); + } + + if (vformat & GA_TEXTURE_COORDINATE) { + resetTexture(ctxInfo); + } + if (carray != NULL) (*(table->ReleasePrimitiveArrayCritical))(env, carray, clrs, 0); @@ -477,74 +560,104 @@ executeGeometryArray(JNIEnv *env, texUnitStateMap, 0); if(varray != NULL) (*(table->ReleasePrimitiveArrayCritical))(env, varray, verts, 0); + + if (vAttrSizesPtr != NULL) { + table->ReleaseIntArrayElements(env, vertexAttrSizes, vAttrSizesPtr, JNI_ABORT); + } } -JNIEXPORT -void JNICALL Java_javax_media_j3d_GeometryArrayRetained_execute(JNIEnv *env, - jobject obj, jlong ctxInfo, jobject geo, jint geo_type, - jboolean isNonUniformScale, jboolean useAlpha, - jboolean multiScreen, - jboolean ignoreVertexColors, - jint startVIndex, - jint vcount, jint vformat, - jint texCoordSetCount, - jintArray texCoordSetMap, jint texCoordSetMapLen, - jintArray texUnitOffset, - jint numActiveTexUnit, - jintArray texUnitStateMapArray, - jfloatArray varray, jfloatArray carray, - jint texUnitIndex, jint cDirty) { - - + +/* + * Class: javax_media_j3d_GeometryArrayRetained + * Method: execute + * Signature: (JLjavax/media/j3d/GeometryArrayRetained;IZZZZIIII[II[II[II[I[F[FII)V + */ +JNIEXPORT void JNICALL +Java_javax_media_j3d_GeometryArrayRetained_execute(JNIEnv *env, + jobject obj, jlong ctxInfo, jobject geo, jint geo_type, + jboolean isNonUniformScale, jboolean useAlpha, + jboolean multiScreen, + jboolean ignoreVertexColors, + jint startVIndex, + jint vcount, jint vformat, + jint texCoordSetCount, + jintArray texCoordSetMap, jint texCoordSetMapLen, + jintArray texUnitOffset, + jint numActiveTexUnit, + jintArray texUnitStateMapArray, + jint vertexAttrCount, jintArray vertexAttrSizes, + jfloatArray varray, jfloatArray carray, + jint texUnitIndex, jint cDirty) +{ + +#ifdef VERBOSE + fprintf(stderr, "GeometryArrayRetained.execute() -- calling executeGeometryArray\n"); +#endif /* VERBOSE */ + /* call executeGeometryArray */ - executeGeometryArray(env, obj, ctxInfo, geo, geo_type, isNonUniformScale, useAlpha, + executeGeometryArray(env, obj, ctxInfo, geo, geo_type, isNonUniformScale, useAlpha, multiScreen, ignoreVertexColors, startVIndex, vcount, vformat, texCoordSetCount, texCoordSetMap, texCoordSetMapLen, texUnitOffset, numActiveTexUnit, texUnitStateMapArray, + vertexAttrCount, vertexAttrSizes, varray, NULL, carray, texUnitIndex, cDirty); - + } /* interleaved data with nio buffer as data format */ -JNIEXPORT -void JNICALL Java_javax_media_j3d_GeometryArrayRetained_executeInterleavedBuffer(JNIEnv *env, - jobject obj, jlong ctxInfo, jobject geo, jint geo_type, - jboolean isNonUniformScale, jboolean useAlpha, - jboolean multiScreen, - jboolean ignoreVertexColors, - jint startVIndex, - jint vcount, jint vformat, - jint texCoordSetCount, - jintArray texCoordSetMap, jint texCoordSetMapLen, - jintArray texUnitOffset, - jint numActiveTexUnit, - jintArray texUnitStateMapArray, - jobject varray, jfloatArray carray, - jint texUnitIndex, jint cDirty) { - +JNIEXPORT void JNICALL +Java_javax_media_j3d_GeometryArrayRetained_executeInterleavedBuffer( + JNIEnv *env, + jobject obj, jlong ctxInfo, jobject geo, jint geo_type, + jboolean isNonUniformScale, jboolean useAlpha, + jboolean multiScreen, + jboolean ignoreVertexColors, + jint startVIndex, + jint vcount, jint vformat, + jint texCoordSetCount, + jintArray texCoordSetMap, jint texCoordSetMapLen, + jintArray texUnitOffset, + jint numActiveTexUnit, + jintArray texUnitStateMapArray, + jobject varray, jfloatArray carray, + jint texUnitIndex, jint cDirty) +{ + +#ifdef VERBOSE + fprintf(stderr, "GeometryArrayRetained.executeInterleavedBuffer() -- calling executeGeometryArray\n"); +#endif /* VERBOSE */ + /* call executeGeometryArray */ executeGeometryArray(env, obj, ctxInfo, geo, geo_type, isNonUniformScale, useAlpha, multiScreen, ignoreVertexColors, startVIndex, vcount, vformat, texCoordSetCount, texCoordSetMap, texCoordSetMapLen, texUnitOffset, numActiveTexUnit, texUnitStateMapArray, + 0, NULL, NULL, varray, carray, texUnitIndex, cDirty); } + +/* + * Class: javax_media_j3d_GeometryArrayRetained + * Method: buildGA + * Signature: (JLjavax/media/j3d/GeometryArrayRetained;IZZFZIIII[II[II[I[D[D[F)V + */ JNIEXPORT -void JNICALL Java_javax_media_j3d_GeometryArrayRetained_buildGA(JNIEnv *env, - jobject obj, jlong ctxInfo, jobject geo, - jint geo_type, - jboolean isNonUniformScale, jboolean updateAlpha, float alpha, - jboolean ignoreVertexColors, - jint startVIndex, - jint vcount, jint vformat, - jint texCoordSetCount, - jintArray texCoordSetMapArray, - jint texCoordSetMapLen, - jintArray texUnitOffset, - jdoubleArray xform, jdoubleArray nxform, - jfloatArray varray) + void JNICALL Java_javax_media_j3d_GeometryArrayRetained_buildGA(JNIEnv *env, + jobject obj, jlong ctxInfo, jobject geo, + jint geo_type, + jboolean isNonUniformScale, jboolean updateAlpha, float alpha, + jboolean ignoreVertexColors, + jint startVIndex, + jint vcount, jint vformat, + jint texCoordSetCount, + jintArray texCoordSetMapArray, + jint texCoordSetMapLen, + jintArray texUnitOffset, + jint vertexAttrCount, jintArray vertexAttrSizes, + jdoubleArray xform, jdoubleArray nxform, + jfloatArray varray) { jclass geo_class; JNIEnv table; @@ -554,6 +667,9 @@ void JNICALL Java_javax_media_j3d_GeometryArrayRetained_buildGA(JNIEnv *env, jint i, j; size_t bstride; jint texStride, *texCoordSetMapOffset; + int vAttrStride = 0; + int vAttrOff; + jint *vAttrSizesPtr = NULL; GLsizei *strips; jfloat vertex[3]; jfloat normal[3]; @@ -569,18 +685,22 @@ void JNICALL Java_javax_media_j3d_GeometryArrayRetained_buildGA(JNIEnv *env, float color[4]; jdouble *xform_ptr = NULL; jdouble *nxform_ptr = NULL; - jint k; GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; jlong ctx = ctxProperties->context; +#ifdef VERBOSE + fprintf(stderr, "GeometryArrayRetained.buildGA()\n"); +#endif /* VERBOSE */ + table = *env; geo_class = (jclass) (*(table->GetObjectClass))(env, geo); /* This matches the code in GeometryArrayRetained.java */ stride = coordoff = normoff = coloroff = texCoordoff = 0; + vAttrOff = 0; if ((vformat & GA_COORDINATES) != 0) { stride += 3; } @@ -623,6 +743,20 @@ void JNICALL Java_javax_media_j3d_GeometryArrayRetained_buildGA(JNIEnv *env, coordoff += texStride; } + if ((vformat & GA_VERTEX_ATTRIBUTES) != 0) { + if (vertexAttrSizes != NULL) { + vAttrSizesPtr = table->GetIntArrayElements(env, vertexAttrSizes, NULL); + } + for (i = 0; i < vertexAttrCount; i++) { + vAttrStride += vAttrSizesPtr[i]; + } + stride += vAttrStride; + normoff += vAttrStride; + coloroff += vAttrStride; + coordoff += vAttrStride; + texCoordoff += vAttrStride; + } + bstride = stride*sizeof(float); /* Start send down from the startVIndex */ initialOffset = startVIndex * stride; @@ -630,6 +764,7 @@ void JNICALL Java_javax_media_j3d_GeometryArrayRetained_buildGA(JNIEnv *env, coloroff += initialOffset; coordoff += initialOffset; texCoordoff += initialOffset; + vAttrOff += initialOffset; /* * process alpha for geometryArray without alpha @@ -740,6 +875,38 @@ printf("orig: < %g %g %g > transformed: < %g %g %g >\n", } } + if (vformat & GA_VERTEX_ATTRIBUTES) { + int vaIdx, vaOff; + + vaOff = vAttrOff; + for (vaIdx = 0; vaIdx < vertexAttrCount; vaIdx++) { +#ifdef VERBOSE + fprintf(stderr, "vertexAttrs[%d] = (", vaIdx); + for (k = 0; k < vAttrSizesPtr[vaIdx]; k++) { + fprintf(stderr, "%g, ", + verts[vaOff+k]); + } + fprintf(stderr, ")\n"); +#endif /* VERBOSE */ + switch (vAttrSizesPtr[vaIdx]) { + case 1: + ctxProperties->vertexAttr1fv(ctxProperties, vaIdx, &verts[vaOff]); + break; + case 2: + ctxProperties->vertexAttr2fv(ctxProperties, vaIdx, &verts[vaOff]); + break; + case 3: + ctxProperties->vertexAttr3fv(ctxProperties, vaIdx, &verts[vaOff]); + break; + case 4: + ctxProperties->vertexAttr4fv(ctxProperties, vaIdx, &verts[vaOff]); + break; + } + + vaOff += vAttrSizesPtr[vaIdx]; + } + } + if (vformat & GA_TEXTURE_COORDINATE) { if (texCoordSetMapLen > 0) { @@ -833,6 +1000,7 @@ printf("orig: < %g %g %g > transformed: < %g %g %g >\n", coloroff += stride; coordoff += stride; texCoordoff += stride; + vAttrOff += stride; } glEnd(); } @@ -917,6 +1085,38 @@ printf("orig: < %g %g %g > transformed: < %g %g %g >\n", } } + if (vformat & GA_VERTEX_ATTRIBUTES) { + int vaIdx, vaOff; + + vaOff = vAttrOff; + for (vaIdx = 0; vaIdx < vertexAttrCount; vaIdx++) { +#ifdef VERBOSE + fprintf(stderr, "vertexAttrs[%d] = (", vaIdx); + for (k = 0; k < vAttrSizesPtr[vaIdx]; k++) { + fprintf(stderr, "%g, ", + verts[vaOff+k]); + } + fprintf(stderr, ")\n"); +#endif /* VERBOSE */ + switch (vAttrSizesPtr[vaIdx]) { + case 1: + ctxProperties->vertexAttr1fv(ctxProperties, vaIdx, &verts[vaOff]); + break; + case 2: + ctxProperties->vertexAttr2fv(ctxProperties, vaIdx, &verts[vaOff]); + break; + case 3: + ctxProperties->vertexAttr3fv(ctxProperties, vaIdx, &verts[vaOff]); + break; + case 4: + ctxProperties->vertexAttr4fv(ctxProperties, vaIdx, &verts[vaOff]); + break; + } + + vaOff += vAttrSizesPtr[vaIdx]; + } + } + if (vformat & GA_TEXTURE_COORDINATE) { if (texCoordSetMapLen > 0) { @@ -1012,13 +1212,14 @@ printf("orig: < %g %g %g > transformed: < %g %g %g >\n", coloroff += stride; coordoff += stride; texCoordoff += stride; + vAttrOff += stride; } glEnd(); } /* Restore the vertex format */ vformat = saveVformat; - + (*(table->ReleasePrimitiveArrayCritical))(env, varray, verts, 0); if (texCoordSetMapLen > 0) @@ -1030,35 +1231,48 @@ printf("orig: < %g %g %g > transformed: < %g %g %g >\n", if (nxform_ptr != NULL) (*(table->ReleasePrimitiveArrayCritical))(env, nxform, nxform_ptr, 0); + + if (vAttrSizesPtr != NULL) { + table->ReleaseIntArrayElements(env, vertexAttrSizes, vAttrSizesPtr, JNI_ABORT); + } } -void enableTexCoordPointer( +static void +enableTexCoordPointer( GraphicsContextPropertiesInfo *ctxProperties, int texUnit, int texSize, int texDataType, int stride, - void *pointer) { - - if (ctxProperties->arb_multitexture) { - ctxProperties->glClientActiveTextureARB(texUnit + GL_TEXTURE0_ARB); - } + void *pointer) +{ + clientActiveTextureUnit(ctxProperties, texUnit); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glTexCoordPointer(texSize, texDataType, stride, pointer); } - -void disableTexCoordPointer( +static void +disableTexCoordPointer( GraphicsContextPropertiesInfo *ctxProperties, - int texUnit) { + int texUnit) +{ + clientActiveTextureUnit(ctxProperties, texUnit); + glDisableClientState(GL_TEXTURE_COORD_ARRAY); +} - if (ctxProperties->glClientActiveTextureARB != NULL) { +static void +clientActiveTextureUnit( + GraphicsContextPropertiesInfo *ctxProperties, + int texUnit) +{ + if (ctxProperties->arb_multitexture) { ctxProperties->glClientActiveTextureARB(texUnit + GL_TEXTURE0_ARB); } - glDisableClientState(GL_TEXTURE_COORD_ARRAY); } -void executeGeometryArrayVA( + +static void +executeGeometryArrayVA( JNIEnv *env, jobject obj, jlong ctxInfo, @@ -1078,6 +1292,10 @@ void executeGeometryArrayVA( jbyte* bclrs, jint initialNormalIndex, jfloat* norms, + jint vertexAttrCount, + jintArray vertexAttrSizes, + jintArray vertexAttrIndices, + jfloat ** vertexAttrPointer, jint pass, jint texCoordMapLength, jintArray tcoordsetmap, @@ -1102,6 +1320,8 @@ void executeGeometryArrayVA( GLint *start; jint coordoff, coloroff, normoff; + jint* initialVAttrIndices; + jint* vAttrSizes; int texSet; jint *texCoordSetMap; jint* initialTexIndices; @@ -1111,10 +1331,15 @@ void executeGeometryArrayVA( jboolean floatColorsDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_COLOR_FLOAT) != 0); jboolean byteColorsDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_COLOR_BYTE) != 0); jboolean normalsDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_NORMAL_FLOAT) != 0); + jboolean vattrDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_VATTR_FLOAT) != 0); jboolean textureDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_TEXCOORD_FLOAT) != 0); table = *env; - + +#ifdef VERBOSE + fprintf(stderr, "executeGeometryArrayVA()\n"); +#endif /* VERBOSE */ + /* Enable normalize for non-uniform scale (which rescale can't handle) */ if (ctxProperties->rescale_normal_ext && isNonUniformScale) { glEnable(GL_NORMALIZE); @@ -1150,9 +1375,31 @@ void executeGeometryArrayVA( glNormalPointer(GL_FLOAT, 0, &(norms[normoff])); } + if (vattrDefined) { + float *pVertexAttrs; + int sz, initIdx; + + vAttrSizes = (jint *) (*(table->GetPrimitiveArrayCritical))(env, vertexAttrSizes, NULL); + initialVAttrIndices = (jint *) (*(table->GetPrimitiveArrayCritical))(env, vertexAttrIndices, NULL); + + for (i = 0; i < vertexAttrCount; i++) { + pVertexAttrs = vertexAttrPointer[i]; + sz = vAttrSizes[i]; + initIdx = initialVAttrIndices[i]; + + ctxProperties->enableVertexAttrArray(ctxProperties, i); + ctxProperties->vertexAttrPointer(ctxProperties, i, sz, + GL_FLOAT, 0, + &pVertexAttrs[initIdx * sz]); + } + + (*(table->ReleasePrimitiveArrayCritical))(env, vertexAttrSizes, vAttrSizes, 0); + (*(table->ReleasePrimitiveArrayCritical))(env, vertexAttrIndices, initialVAttrIndices, 0); + } + if (textureDefined) { - int j = 0, tus = 0; + int tus = 0; float *ptexCoords; initialTexIndices = (jint *) (*(table->GetPrimitiveArrayCritical))(env,texindices, NULL); @@ -1194,6 +1441,8 @@ void executeGeometryArrayVA( disableTexCoordPointer(ctxProperties, 0); } } + /* Reset client active texture unit to 0 */ + clientActiveTextureUnit(ctxProperties, 0); } if (geo_type == GEO_TYPE_TRI_STRIP_SET || @@ -1250,15 +1499,26 @@ void executeGeometryArrayVA( } + if (vattrDefined) { + resetVertexAttrs(ctxInfo, vertexAttrCount); + } + if (textureDefined) { + resetTexture(ctxInfo); + (*(table->ReleasePrimitiveArrayCritical))(env, tcoordsetmap, texCoordSetMap, 0); (*(table->ReleasePrimitiveArrayCritical))(env, texindices, initialTexIndices, 0); } } /* execute geometry array with java array format */ -JNIEXPORT -void JNICALL Java_javax_media_j3d_GeometryArrayRetained_executeVA( +/* + * Class: javax_media_j3d_GeometryArrayRetained + * Method: executeVA + * Signature: (JLjavax/media/j3d/GeometryArrayRetained;IZZZIIII[F[DI[F[BI[FI[I[I[[FII[II[I[II[Ljava/lang/Object;I)V + */ +JNIEXPORT void JNICALL +Java_javax_media_j3d_GeometryArrayRetained_executeVA( JNIEnv *env, jobject obj, jlong ctxInfo, @@ -1278,6 +1538,10 @@ void JNICALL Java_javax_media_j3d_GeometryArrayRetained_executeVA( jbyteArray cbdata, jint initialNormalIndex, jfloatArray ndata, + jint vertexAttrCount, + jintArray vertexAttrSizes, + jintArray vertexAttrIndices, + jobjectArray vertexAttrData, jint pass, jint texCoordMapLength, jintArray tcoordsetmap, @@ -1302,26 +1566,41 @@ void JNICALL Java_javax_media_j3d_GeometryArrayRetained_executeVA( jdouble *dverts = NULL; jbyte *bclrs = NULL; jfloat *fclrs = NULL, *norms = NULL; - jfloat* texCoordPointer[NUM_TEXTURE_UNITS]; - jarray texobjs[NUM_TEXTURE_UNITS]; + jarray *vaobjs = NULL; + jfloat **vertexAttrPointer = NULL; + jfloat **texCoordPointer = NULL; + jarray *texobjs = NULL; jint* texUnitStateMap = NULL; int i; - jboolean floatCoordDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_COORD_FLOAT) != 0); jboolean doubleCoordDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_COORD_DOUBLE) != 0); jboolean floatColorsDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_COLOR_FLOAT) != 0); jboolean byteColorsDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_COLOR_BYTE) != 0); jboolean normalsDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_NORMAL_FLOAT) != 0); + jboolean vattrDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_VATTR_FLOAT) != 0); jboolean textureDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_TEXCOORD_FLOAT) != 0); + if (vattrDefined) { + vaobjs = (jarray *)malloc(vertexAttrCount * sizeof(jarray)); + vertexAttrPointer = (jfloat **)malloc(vertexAttrCount * sizeof(jfloat *)); + + for (i = 0; i < vertexAttrCount; i++) { + vaobjs[i] = (*(table->GetObjectArrayElement))(env, vertexAttrData, i); + } + } + if (textureDefined) { + texobjs = (jarray*)malloc(texCoordMapLength * sizeof(jarray)); + texCoordPointer = (jfloat**)malloc(texCoordMapLength * sizeof(jfloat*)); + for (i = 0; i < texCoordMapLength; i++) { texobjs[i] = (*(table->GetObjectArrayElement))(env, texCoords, i); } } + geo_class = (jclass) (*(table->GetObjectClass))(env, geo); - + if (geo_type == GEO_TYPE_TRI_STRIP_SET || geo_type == GEO_TYPE_TRI_FAN_SET || geo_type == GEO_TYPE_LINE_STRIP_SET) { @@ -1337,6 +1616,13 @@ void JNICALL Java_javax_media_j3d_GeometryArrayRetained_executeVA( start_field); } + /* Get vertex attribute arrays */ + if (vattrDefined) { + for (i = 0; i < vertexAttrCount; i++) { + vertexAttrPointer[i] = (jfloat *) (*(table->GetPrimitiveArrayCritical))(env, vaobjs[i], NULL); + } + } + /* get texture arrays */ if (textureDefined) { for (i = 0; i < texCoordMapLength; i++) { @@ -1369,16 +1655,36 @@ void JNICALL Java_javax_media_j3d_GeometryArrayRetained_executeVA( norms = (jfloat *) (*(table->GetPrimitiveArrayCritical))(env,ndata, NULL); } +#ifdef VERBOSE + fprintf(stderr, "GeometryArrayRetained.executeVA() -- calling executeGeometryArrayVA\n"); +#endif /* VERBOSE */ + executeGeometryArrayVA(env, obj, ctxInfo, geo, geo_type, isNonUniformScale, multiScreen, ignoreVertexColors, vcount, vformat, vdefined, initialCoordIndex, fverts, dverts, initialColorIndex, fclrs, bclrs, initialNormalIndex, - norms, pass, texCoordMapLength, + norms, + vertexAttrCount, vertexAttrSizes, + vertexAttrIndices, vertexAttrPointer, + pass, texCoordMapLength, tcoordsetmap,numActiveTexUnit, texUnitStateMap, texindices,texStride,texCoordPointer,cdirty, sarray, strip_len, start_array); + if (vattrDefined) { + for (i = 0; i < vertexAttrCount; i++) { + (*(table->ReleasePrimitiveArrayCritical))(env, vaobjs[i], vertexAttrPointer[i], 0); + } + } + + if (vaobjs != NULL) { + free(vaobjs); + } + if (vertexAttrPointer != NULL) { + free(vertexAttrPointer); + } + if (textureDefined) { for (i = 0; i < texCoordMapLength; i++) { if (texCoordPointer[i] != NULL) { @@ -1389,6 +1695,13 @@ void JNICALL Java_javax_media_j3d_GeometryArrayRetained_executeVA( (*(table->ReleasePrimitiveArrayCritical))(env, tunitstatemap, texUnitStateMap, 0); } } + + if (texobjs != NULL) { + free(texobjs); + } + if (texCoordPointer != NULL) { + free(texCoordPointer); + } if (normalsDefined) { (*env)->ReleasePrimitiveArrayCritical(env, ndata, norms, 0); @@ -1409,12 +1722,15 @@ void JNICALL Java_javax_media_j3d_GeometryArrayRetained_executeVA( else if (doubleCoordDefined) { (*env)->ReleasePrimitiveArrayCritical(env, vdcoords, dverts, 0); } - } /* execute geometry array with java array format */ -JNIEXPORT -void JNICALL Java_javax_media_j3d_GeometryArrayRetained_executeVABuffer( +/* + * Class: javax_media_j3d_GeometryArrayRetained + * Method: executeVABuffer + * Signature: (JLjavax/media/j3d/GeometryArrayRetained;IZZZIIIILjava/lang/Object;ILjava/lang/Object;[F[BILjava/lang/Object;I[I[I[Ljava/lang/Object;II[II[I[II[Ljava/lang/Object;I)V + */ +JNIEXPORT void JNICALL Java_javax_media_j3d_GeometryArrayRetained_executeVABuffer( JNIEnv *env, jobject obj, jlong ctxInfo, @@ -1434,6 +1750,10 @@ void JNICALL Java_javax_media_j3d_GeometryArrayRetained_executeVABuffer( jbyteArray cbdata, jint initialNormalIndex, jobject ndata, + jint vertexAttrCount, + jintArray vertexAttrSizes, + jintArray vertexAttrIndices, + jobjectArray vertexAttrData, jint pass, jint texCoordMapLength, jintArray tcoordsetmap, @@ -1457,8 +1777,10 @@ void JNICALL Java_javax_media_j3d_GeometryArrayRetained_executeVABuffer( jdouble *dverts = NULL ; jbyte *bclrs = NULL; jfloat *fclrs = NULL, *norms = NULL; - jfloat* texCoordPointer[NUM_TEXTURE_UNITS]; - jarray texobjs[NUM_TEXTURE_UNITS]; + jarray *vaobjs = NULL; + jfloat **vertexAttrPointer = NULL; + jfloat **texCoordPointer = NULL; + jarray *texobjs = NULL; jint* texUnitStateMap = NULL; int i; @@ -1467,10 +1789,22 @@ void JNICALL Java_javax_media_j3d_GeometryArrayRetained_executeVABuffer( jboolean floatColorsDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_COLOR_FLOAT) != 0); jboolean byteColorsDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_COLOR_BYTE) != 0); jboolean normalsDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_NORMAL_FLOAT) != 0); + jboolean vattrDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_VATTR_FLOAT) != 0); jboolean textureDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_TEXCOORD_FLOAT) != 0); - + if (vattrDefined) { + vaobjs = (jarray *)malloc(vertexAttrCount * sizeof(jarray)); + vertexAttrPointer = (jfloat **)malloc(vertexAttrCount * sizeof(jfloat *)); + + for (i = 0; i < vertexAttrCount; i++) { + vaobjs[i] = (*(table->GetObjectArrayElement))(env, vertexAttrData, i); + } + } + if (textureDefined) { + texobjs = (jarray*)malloc(texCoordMapLength * sizeof(jarray)); + texCoordPointer = (jfloat**)malloc(texCoordMapLength * sizeof(jfloat*)); + for (i = 0; i < texCoordMapLength; i++) { texobjs[i] = (*(table->GetObjectArrayElement))(env, texCoords, i); } @@ -1523,6 +1857,13 @@ void JNICALL Java_javax_media_j3d_GeometryArrayRetained_executeVABuffer( norms = (jfloat *)(*(table->GetDirectBufferAddress))(env, ndata); } + /* get vertex attr arrays */ + if (vattrDefined) { + for (i = 0; i < vertexAttrCount; i++) { + vertexAttrPointer[i] = (jfloat *) (*(table->GetDirectBufferAddress))(env, vaobjs[i]); + } + } + /* get texture arrays */ if (textureDefined) { for (i = 0; i < texCoordMapLength; i++) { @@ -1537,21 +1878,42 @@ void JNICALL Java_javax_media_j3d_GeometryArrayRetained_executeVABuffer( } +#ifdef VERBOSE + fprintf(stderr, "GeometryArrayRetained.executeVABuffer() -- calling executeGeometryArrayVA\n"); +#endif /* VERBOSE */ + executeGeometryArrayVA(env, obj, ctxInfo, geo, geo_type, isNonUniformScale, multiScreen, ignoreVertexColors, vcount, vformat, vdefined, initialCoordIndex, fverts, dverts, initialColorIndex, fclrs, bclrs, initialNormalIndex, - norms, pass, texCoordMapLength, + norms, + vertexAttrCount, vertexAttrSizes, + vertexAttrIndices, vertexAttrPointer, + pass, texCoordMapLength, tcoordsetmap,numActiveTexUnit, texUnitStateMap, texindices,texStride,texCoordPointer,cdirty, sarray, strip_len, start_array); + if (vaobjs != NULL) { + free(vaobjs); + } + if (vertexAttrPointer != NULL) { + free(vertexAttrPointer); + } + if (textureDefined) { if (texUnitStateMap != NULL) { (*(table->ReleasePrimitiveArrayCritical))(env, tunitstatemap, texUnitStateMap, 0); } } + if (texobjs != NULL) { + free(texobjs); + } + if (texCoordPointer != NULL) { + free(texCoordPointer); + } + if(floatColorsDefined && cfdata != NULL) (*(table->ReleasePrimitiveArrayCritical))(env, cfdata, fclrs, 0); else if(byteColorsDefined && cbdata != NULL) @@ -1581,18 +1943,30 @@ void JNICALL Java_javax_media_j3d_GeometryArrayRetained_disableGlobalAlpha( } } + +/* + * Class: javax_media_j3d_GeometryArrayRetained + * Method: setVertexFormat + * Signature: (JIZZI[I)V + */ JNIEXPORT void JNICALL Java_javax_media_j3d_GeometryArrayRetained_setVertexFormat( JNIEnv *env, jobject obj, + jlong ctxInfo, jint vformat, jboolean useAlpha, - jboolean ignoreVertexColors, - jlong ctxInfo) { - + jboolean ignoreVertexColors) +{ GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; jlong ctx = ctxProperties->context; - + +#ifdef VERBOSE + fprintf(stderr, + "GeometryArrayRetained.setVertexFormat() : vformat = %d\n", + vformat); +#endif /* VERBOSE */ + /* Enable and disable the appropriate pointers */ if (vformat & GA_NORMALS) { glEnableClientState(GL_NORMAL_ARRAY); @@ -1616,7 +1990,6 @@ void JNICALL Java_javax_media_j3d_GeometryArrayRetained_setVertexFormat( glDisable(GL_GLOBAL_ALPHA_SUN); } } - if (vformat & GA_COORDINATES) { glEnableClientState(GL_VERTEX_ARRAY); @@ -1626,9 +1999,11 @@ void JNICALL Java_javax_media_j3d_GeometryArrayRetained_setVertexFormat( } } -JNIEXPORT -jboolean JNICALL Java_javax_media_j3d_GeometryArrayRetained_globalAlphaSUN - (JNIEnv *env, jobject obj, jlong ctxInfo) +JNIEXPORT jboolean JNICALL +Java_javax_media_j3d_GeometryArrayRetained_globalAlphaSUN( + JNIEnv *env, + jobject obj, + jlong ctxInfo) { GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; jlong ctx = ctxProperties->context; @@ -1640,24 +2015,26 @@ jboolean JNICALL Java_javax_media_j3d_GeometryArrayRetained_globalAlphaSUN } - -void executeIndexedGeometryArray(JNIEnv *env, - jobject obj, jlong ctxInfo, jobject geo, jint geo_type, - jboolean isNonUniformScale, jboolean useAlpha, - jboolean multiScreen, - jboolean ignoreVertexColors, - jint initialIndexIndex, - jint indexCount, - jint vertexCount, - jint vformat, - jint texCoordSetCount, - jintArray texCoordSetMap, jint texCoordSetMapLen, - jintArray texUnitOffset, - jint numActiveTexUnit, - jintArray texUnitStateMapArray, - jfloatArray varray, jobject varrayBuffer, jfloatArray carray, - jint texUnitIndex, jint cDirty, - jintArray indexCoord) +static void +executeIndexedGeometryArray( + JNIEnv *env, + jobject obj, jlong ctxInfo, jobject geo, jint geo_type, + jboolean isNonUniformScale, jboolean useAlpha, + jboolean multiScreen, + jboolean ignoreVertexColors, + jint initialIndexIndex, + jint indexCount, + jint vertexCount, + jint vformat, + jint vertexAttrCount, jintArray vertexAttrSizes, + jint texCoordSetCount, + jintArray texCoordSetMap, jint texCoordSetMapLen, + jintArray texUnitOffset, + jint numActiveTexUnit, + jintArray texUnitStateMapArray, + jfloatArray varray, jobject varrayBuffer, jfloatArray carray, + jint texUnitIndex, jint cDirty, + jintArray indexCoord) { jclass geo_class; JNIEnv table; @@ -1685,18 +2062,28 @@ void executeIndexedGeometryArray(JNIEnv *env, jint texSize, texStride, *texCoordSetMapOffset = NULL, *texUnitStateMap = NULL; - + GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; jlong ctx = ctxProperties->context; int cstride = 0; + int vAttrStride = 0; + int vAttrOff; + jint *vAttrSizesPtr = NULL; + table = *env; - /* fprintf(stderr, "Java_javax_media_j3d_IndexedGeometryArrayRetained_executeIndexedGeometry \n");*/ +#ifdef VERBOSE + fprintf(stderr, + "executeIndexedGeometryArray: vertexAttrCount = %d\n", + vertexAttrCount); +#endif /* VERBOSE */ + geo_class = (jclass) (*(table->GetObjectClass))(env, geo); /* This matches the code in GeometryArrayRetained.java */ stride = coordoff = normoff = coloroff = texCoordoff = 0; + vAttrOff = 0; if ((vformat & GA_COORDINATES) != 0) { stride += 3; } @@ -1733,6 +2120,20 @@ void executeIndexedGeometryArray(JNIEnv *env, coordoff += texStride; } + if ((vformat & GA_VERTEX_ATTRIBUTES) != 0) { + if (vertexAttrSizes != NULL) { + vAttrSizesPtr = table->GetIntArrayElements(env, vertexAttrSizes, NULL); + } + for (i = 0; i < vertexAttrCount; i++) { + vAttrStride += vAttrSizesPtr[i]; + } + stride += vAttrStride; + normoff += vAttrStride; + coloroff += vAttrStride; + coordoff += vAttrStride; + texCoordoff += vAttrStride; + } + bstride = stride*sizeof(float); /* @@ -1831,13 +2232,24 @@ void executeIndexedGeometryArray(JNIEnv *env, if (vformat & GA_TEXTURE_COORDINATE) { -/* TODO: texCoordoff == 0 ???*/ + /* XXXX: texCoordoff == 0 ???*/ executeTexture(texUnitIndex, texCoordSetMapLen, texSize, bstride, texCoordoff, texCoordSetMapOffset, numActiveTexUnit, texUnitStateMap, verts, ctxInfo); } + + if (vformat & GA_VERTEX_ATTRIBUTES) { + jfloat *vAttrPtr = &verts[vAttrOff]; + + for (i = 0; i < vertexAttrCount; i++) { + ctxProperties->enableVertexAttrArray(ctxProperties, i); + ctxProperties->vertexAttrPointer(ctxProperties, i, vAttrSizesPtr[i], + GL_FLOAT, bstride, vAttrPtr); + vAttrPtr += vAttrSizesPtr[i]; + } + } } switch (geo_type) { @@ -1923,15 +2335,25 @@ void executeIndexedGeometryArray(JNIEnv *env, if (vformat & GA_TEXTURE_COORDINATE) { -/* TODO: texCoordoff == 0 ???*/ + /* XXXX: texCoordoff == 0 ???*/ executeTexture(texUnitIndex, texCoordSetMapLen, - texSize, bstride, texCoordoff, - texCoordSetMapOffset, - numActiveTexUnit, texUnitStateMap, - verts, ctxInfo); - } - } + texSize, bstride, texCoordoff, + texCoordSetMapOffset, + numActiveTexUnit, texUnitStateMap, + verts, ctxInfo); + } + if (vformat & GA_VERTEX_ATTRIBUTES) { + jfloat *vAttrPtr = &verts[vAttrOff]; + + for (i = 0; i < vertexAttrCount; i++) { + ctxProperties->enableVertexAttrArray(ctxProperties, i); + ctxProperties->vertexAttrPointer(ctxProperties, i, vAttrSizesPtr[i], + GL_FLOAT, bstride, vAttrPtr); + vAttrPtr += vAttrSizesPtr[i]; + } + } + } lockArray(ctxProperties, vertexCount); @@ -1944,7 +2366,15 @@ void executeIndexedGeometryArray(JNIEnv *env, } unlockArray(ctxProperties); - + + if (vformat & GA_VERTEX_ATTRIBUTES) { + resetVertexAttrs(ctxInfo, vertexAttrCount); + } + + if (vformat & GA_TEXTURE_COORDINATE) { + resetTexture(ctxInfo); + } + /* clean up if we turned on normalize */ if (ctxProperties->rescale_normal_ext && isNonUniformScale) { @@ -1965,69 +2395,88 @@ void executeIndexedGeometryArray(JNIEnv *env, if (texUnitStateMap != NULL) (*(table->ReleasePrimitiveArrayCritical))(env, texUnitStateMapArray, texUnitStateMap, 0); + if (vAttrSizesPtr != NULL) { + table->ReleaseIntArrayElements(env, vertexAttrSizes, vAttrSizesPtr, JNI_ABORT); + } } -JNIEXPORT -void JNICALL Java_javax_media_j3d_IndexedGeometryArrayRetained_executeIndexedGeometry(JNIEnv *env, - jobject obj, jlong ctxInfo, jobject geo, jint geo_type, - jboolean isNonUniformScale, jboolean useAlpha, - jboolean multiScreen, - jboolean ignoreVertexColors, - jint initialIndexIndex, - jint indexCount, - jint vertexCount, - jint vformat, - jint texCoordSetCount, - jintArray texCoordSetMap, jint texCoordSetMapLen, - jintArray texUnitOffset, - jint numActiveTexUnit, - jintArray texUnitStateMapArray, - jfloatArray varray, jfloatArray carray, - jint texUnitIndex, jint cDirty, - jintArray indexCoord) + +JNIEXPORT void JNICALL +Java_javax_media_j3d_IndexedGeometryArrayRetained_executeIndexedGeometry( + JNIEnv *env, + jobject obj, jlong ctxInfo, jobject geo, jint geo_type, + jboolean isNonUniformScale, jboolean useAlpha, + jboolean multiScreen, + jboolean ignoreVertexColors, + jint initialIndexIndex, + jint indexCount, + jint vertexCount, + jint vformat, + jint vertexAttrCount, jintArray vertexAttrSizes, + jint texCoordSetCount, + jintArray texCoordSetMap, jint texCoordSetMapLen, + jintArray texUnitOffset, + jint numActiveTexUnit, + jintArray texUnitStateMapArray, + jfloatArray varray, jfloatArray carray, + jint texUnitIndex, jint cDirty, + jintArray indexCoord) { + +#ifdef VERBOSE + fprintf(stderr, "IndexedGeometryArrayRetained.executeIndexedGeometry() -- calling executeIndexedGeometryArray\n"); +#endif /* VERBOSE */ + executeIndexedGeometryArray(env, obj, ctxInfo, geo, geo_type, - isNonUniformScale, useAlpha, multiScreen, - ignoreVertexColors, - initialIndexIndex, - indexCount, - vertexCount, - vformat, - texCoordSetCount, - texCoordSetMap, texCoordSetMapLen, - texUnitOffset, - numActiveTexUnit, - texUnitStateMapArray, - varray, NULL, carray, - texUnitIndex, cDirty, - indexCoord); + isNonUniformScale, useAlpha, multiScreen, + ignoreVertexColors, + initialIndexIndex, + indexCount, + vertexCount, + vformat, + vertexAttrCount, vertexAttrSizes, + texCoordSetCount, + texCoordSetMap, texCoordSetMapLen, + texUnitOffset, + numActiveTexUnit, + texUnitStateMapArray, + varray, NULL, carray, + texUnitIndex, cDirty, + indexCoord); } -JNIEXPORT -void JNICALL Java_javax_media_j3d_IndexedGeometryArrayRetained_executeIndexedGeometryBuffer(JNIEnv *env, - jobject obj, jlong ctxInfo, jobject geo, jint geo_type, - jboolean isNonUniformScale, jboolean useAlpha, - jboolean multiScreen, - jboolean ignoreVertexColors, - jint initialIndexIndex, - jint indexCount, - jint vertexCount, - jint vformat, - jint texCoordSetCount, - jintArray texCoordSetMap, jint texCoordSetMapLen, - jintArray texUnitOffset, - jint numActiveTexUnit, - jintArray texUnitStateMapArray, - jobject varray, jfloatArray carray, - jint texUnitIndex, jint cDirty, - jintArray indexCoord) +JNIEXPORT void JNICALL +Java_javax_media_j3d_IndexedGeometryArrayRetained_executeIndexedGeometryBuffer( + JNIEnv *env, + jobject obj, jlong ctxInfo, jobject geo, jint geo_type, + jboolean isNonUniformScale, jboolean useAlpha, + jboolean multiScreen, + jboolean ignoreVertexColors, + jint initialIndexIndex, + jint indexCount, + jint vertexCount, + jint vformat, + jint texCoordSetCount, + jintArray texCoordSetMap, jint texCoordSetMapLen, + jintArray texUnitOffset, + jint numActiveTexUnit, + jintArray texUnitStateMapArray, + jobject varray, jfloatArray carray, + jint texUnitIndex, jint cDirty, + jintArray indexCoord) { + +#ifdef VERBOSE + fprintf(stderr, "IndexedGeometryArrayRetained.executeIndexedGeometryBuffer() -- calling executeIndexedGeometryArray\n"); +#endif /* VERBOSE */ + executeIndexedGeometryArray(env, obj, ctxInfo, geo, geo_type, isNonUniformScale, useAlpha, multiScreen, ignoreVertexColors, initialIndexIndex, indexCount, vertexCount, - vformat, + vformat, + 0, NULL, texCoordSetCount, texCoordSetMap, texCoordSetMapLen, texUnitOffset, @@ -2039,7 +2488,8 @@ void JNICALL Java_javax_media_j3d_IndexedGeometryArrayRetained_executeIndexedGeo } -void executeIndexedGeometryArrayVA( +static void +executeIndexedGeometryArrayVA( JNIEnv *env, jobject obj, jlong ctxInfo, @@ -2058,6 +2508,9 @@ void executeIndexedGeometryArrayVA( jfloat* fclrs, jbyte* bclrs, jfloat* norms, + jint vertexAttrCount, + jintArray vertexAttrSizes, + jfloat ** vertexAttrPointer, jint pass, jint texCoordMapLength, jintArray tcoordsetmap, @@ -2069,7 +2522,7 @@ void executeIndexedGeometryArrayVA( jintArray indexCoord, jarray sarray, jsize strip_len) - { +{ int primType; JNIEnv table; jint i; @@ -2083,6 +2536,7 @@ void executeIndexedGeometryArrayVA( jboolean floatColorsDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_COLOR_FLOAT) != 0); jboolean byteColorsDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_COLOR_BYTE) != 0); jboolean normalsDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_NORMAL_FLOAT) != 0); + jboolean vattrDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_VATTR_FLOAT) != 0); jboolean textureDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_TEXCOORD_FLOAT) != 0); GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; @@ -2091,9 +2545,17 @@ void executeIndexedGeometryArrayVA( int texSet; jint *texCoordSetMap, *texUnitStateMap; GLsizei *countArray; + jint* vAttrSizes; jint offset = 0; + table = *env; +#ifdef VERBOSE + fprintf(stderr, + "executeIndexedGeometryArrayVA: vertexAttrCount = %d\n", + vertexAttrCount); +#endif /* VERBOSE */ + /* Enable normalize for non-uniform scale (which rescale can't handle) */ if (ctxProperties->rescale_normal_ext && isNonUniformScale) { glEnable(GL_NORMALIZE); @@ -2122,9 +2584,28 @@ void executeIndexedGeometryArrayVA( glNormalPointer(GL_FLOAT, 0, norms); } + if (vattrDefined) { + float *pVertexAttrs; + int sz; + + vAttrSizes = (jint *) (*(table->GetPrimitiveArrayCritical))(env, vertexAttrSizes, NULL); + + for (i = 0; i < vertexAttrCount; i++) { + pVertexAttrs = vertexAttrPointer[i]; + sz = vAttrSizes[i]; + + ctxProperties->enableVertexAttrArray(ctxProperties, i); + ctxProperties->vertexAttrPointer(ctxProperties, i, sz, + GL_FLOAT, 0, + pVertexAttrs); + } + + (*(table->ReleasePrimitiveArrayCritical))(env, vertexAttrSizes, vAttrSizes, 0); + } + if (textureDefined) { - int j = 0, tus = 0; + int tus = 0; float *ptexCoords; texCoordSetMap = (jint *) (*(table->GetPrimitiveArrayCritical))(env,tcoordsetmap, NULL); @@ -2164,6 +2645,8 @@ void executeIndexedGeometryArrayVA( */ } } + /* Reset client active texture unit to 0 */ + clientActiveTextureUnit(ctxProperties, 0); } indices = (jint *) (*(table->GetPrimitiveArrayCritical))(env, indexCoord, NULL); @@ -2237,7 +2720,13 @@ void executeIndexedGeometryArrayVA( (*(table->ReleasePrimitiveArrayCritical))(env, indexCoord, indices, 0); + if (vattrDefined) { + resetVertexAttrs(ctxInfo, vertexAttrCount); + } + if (textureDefined) { + resetTexture(ctxInfo); + (*(table->ReleasePrimitiveArrayCritical))(env, tcoordsetmap, texCoordSetMap, 0); if (texUnitStateMap != NULL) (*(table->ReleasePrimitiveArrayCritical))(env, tunitstatemap, texUnitStateMap, 0); @@ -2265,6 +2754,9 @@ void JNICALL Java_javax_media_j3d_IndexedGeometryArrayRetained_executeIndexedGeo jfloatArray cfdata, jbyteArray cbdata, jfloatArray ndata, + jint vertexAttrCount, + jintArray vertexAttrSizes, + jobjectArray vertexAttrData, jint pass, jint texCoordMapLength, jintArray tcoordsetmap, @@ -2286,23 +2778,41 @@ void JNICALL Java_javax_media_j3d_IndexedGeometryArrayRetained_executeIndexedGeo jdouble *dverts = NULL; jbyte *bclrs = NULL; jfloat *fclrs = NULL, *norms = NULL; - jfloat* texCoordPointer[NUM_TEXTURE_UNITS]; - jarray texobjs[NUM_TEXTURE_UNITS]; + jarray *vaobjs = NULL; + jfloat **vertexAttrPointer = NULL; + jfloat **texCoordPointer = NULL; + jarray *texobjs = NULL; jboolean floatCoordDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_COORD_FLOAT) != 0); jboolean doubleCoordDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_COORD_DOUBLE) != 0); jboolean floatColorsDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_COLOR_FLOAT) != 0); jboolean byteColorsDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_COLOR_BYTE) != 0); jboolean normalsDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_NORMAL_FLOAT) != 0); + jboolean vattrDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_VATTR_FLOAT) != 0); jboolean textureDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_TEXCOORD_FLOAT) != 0); + table = *env; - geo_class = (jclass) (*(table->GetObjectClass))(env, geo); + + if (vattrDefined) { + vaobjs = (jarray *)malloc(vertexAttrCount * sizeof(jarray)); + vertexAttrPointer = (jfloat **)malloc(vertexAttrCount * sizeof(jfloat *)); + + for (i = 0; i < vertexAttrCount; i++) { + vaobjs[i] = (*(table->GetObjectArrayElement))(env, vertexAttrData, i); + } + } if (textureDefined) { + texobjs = (jarray*)malloc(texCoordMapLength * sizeof(jarray)); + texCoordPointer = (jfloat**)malloc(texCoordMapLength * sizeof(jfloat*)); + for (i = 0; i < texCoordMapLength; i++) { texobjs[i] = (jarray)(*(table->GetObjectArrayElement))(env, texCoords, i); } } + + geo_class = (jclass) (*(table->GetObjectClass))(env, geo); + if (geo_type == GEO_TYPE_INDEXED_TRI_STRIP_SET || geo_type == GEO_TYPE_INDEXED_TRI_FAN_SET || geo_type == GEO_TYPE_INDEXED_LINE_STRIP_SET) { @@ -2313,7 +2823,15 @@ void JNICALL Java_javax_media_j3d_IndexedGeometryArrayRetained_executeIndexedGeo strip_len = (jsize)(*(table->GetArrayLength))(env, sarray); } - /* get texture arrays */ + + /* Get vertex attribute arrays */ + if (vattrDefined) { + for (i = 0; i < vertexAttrCount; i++) { + vertexAttrPointer[i] = (jfloat *) (*(table->GetPrimitiveArrayCritical))(env, vaobjs[i], NULL); + } + } + + /* get texture arrays */ if (textureDefined) { for (i = 0; i < texCoordMapLength; i++) { if (texobjs[i] != NULL) @@ -2343,6 +2861,10 @@ void JNICALL Java_javax_media_j3d_IndexedGeometryArrayRetained_executeIndexedGeo norms = (jfloat *) (*(table->GetPrimitiveArrayCritical))(env,ndata, NULL); } +#ifdef VERBOSE + fprintf(stderr, "IndexedGeometryArrayRetained.executeIndexedGeometryVA() -- calling executeIndexedGeometryArrayVA\n"); +#endif /* VERBOSE */ + executeIndexedGeometryArrayVA(env, obj, ctxInfo, @@ -2361,6 +2883,9 @@ void JNICALL Java_javax_media_j3d_IndexedGeometryArrayRetained_executeIndexedGeo fclrs, bclrs, norms, + vertexAttrCount, + vertexAttrSizes, + vertexAttrPointer, pass, texCoordMapLength, tcoordsetmap, @@ -2391,6 +2916,19 @@ void JNICALL Java_javax_media_j3d_IndexedGeometryArrayRetained_executeIndexedGeo (*(table->ReleasePrimitiveArrayCritical))(env, ndata, norms, 0); } + if (vattrDefined) { + for (i = 0; i < vertexAttrCount; i++) { + (*(table->ReleasePrimitiveArrayCritical))(env, vaobjs[i], vertexAttrPointer[i], 0); + } + } + + if (vaobjs != NULL) { + free(vaobjs); + } + if (vertexAttrPointer != NULL) { + free(vertexAttrPointer); + } + if (textureDefined) { for (i = 0; i < texCoordMapLength; i++) { if (texCoordPointer[i] != NULL) { @@ -2398,6 +2936,13 @@ void JNICALL Java_javax_media_j3d_IndexedGeometryArrayRetained_executeIndexedGeo } } } + + if (texobjs != NULL) { + free(texobjs); + } + if (texCoordPointer != NULL) { + free(texCoordPointer); + } } JNIEXPORT @@ -2420,6 +2965,9 @@ void JNICALL Java_javax_media_j3d_IndexedGeometryArrayRetained_executeIndexedGeo jfloatArray cfdata, jbyteArray cbdata, jobject ndata, + jint vertexAttrCount, + jintArray vertexAttrSizes, + jobjectArray vertexAttrData, jint pass, jint texCoordMapLength, jintArray tcoordsetmap, @@ -2441,23 +2989,38 @@ void JNICALL Java_javax_media_j3d_IndexedGeometryArrayRetained_executeIndexedGeo jdouble *dverts = NULL; jbyte *bclrs = NULL; jfloat *fclrs = NULL, *norms = NULL; - jfloat* texCoordPointer[NUM_TEXTURE_UNITS]; - jarray texobjs[NUM_TEXTURE_UNITS]; + jarray *vaobjs = NULL; + jfloat **vertexAttrPointer = NULL; + jfloat **texCoordPointer = NULL; + jarray *texobjs = NULL; jboolean floatCoordDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_COORD_FLOAT) != 0); jboolean doubleCoordDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_COORD_DOUBLE) != 0); jboolean floatColorsDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_COLOR_FLOAT) != 0); jboolean byteColorsDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_COLOR_BYTE) != 0); jboolean normalsDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_NORMAL_FLOAT) != 0); + jboolean vattrDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_VATTR_FLOAT) != 0); jboolean textureDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_TEXCOORD_FLOAT) != 0); - table = *env; - geo_class = (jclass) (*(table->GetObjectClass))(env, geo); - + + table = *env; + + if (vattrDefined) { + vaobjs = (jarray *)malloc(vertexAttrCount * sizeof(jarray)); + vertexAttrPointer = (jfloat **)malloc(vertexAttrCount * sizeof(jfloat *)); + + for (i = 0; i < vertexAttrCount; i++) { + vaobjs[i] = (*(table->GetObjectArrayElement))(env, vertexAttrData, i); + } + } + if (textureDefined) { for (i = 0; i < texCoordMapLength; i++) { texobjs[i] = (jarray)(*(table->GetObjectArrayElement))(env, texCoords, i); } } + + geo_class = (jclass) (*(table->GetObjectClass))(env, geo); + if (geo_type == GEO_TYPE_INDEXED_TRI_STRIP_SET || geo_type == GEO_TYPE_INDEXED_TRI_FAN_SET || geo_type == GEO_TYPE_INDEXED_LINE_STRIP_SET) { @@ -2468,6 +3031,14 @@ void JNICALL Java_javax_media_j3d_IndexedGeometryArrayRetained_executeIndexedGeo strip_len = (jsize)(*(table->GetArrayLength))(env, sarray); } + + /* Get vertex attribute arrays */ + if (vattrDefined) { + for (i = 0; i < vertexAttrCount; i++) { + vertexAttrPointer[i] = (jfloat *) (*(table->GetDirectBufferAddress))(env, vaobjs[i]); + } + } + /* get texture arrays */ if (textureDefined) { for (i = 0; i < texCoordMapLength; i++) { @@ -2478,14 +3049,14 @@ void JNICALL Java_javax_media_j3d_IndexedGeometryArrayRetained_executeIndexedGeo } } - + /* get coordinate array */ if (floatCoordDefined) { fverts= (jfloat *)(*(table->GetDirectBufferAddress))(env, vcoords ); } else if (doubleCoordDefined) { dverts= (jdouble *)(*(table->GetDirectBufferAddress))(env, vcoords ); } - + /* get color array */ if (floatColorsDefined) { if(cfdata != NULL) @@ -2499,12 +3070,16 @@ void JNICALL Java_javax_media_j3d_IndexedGeometryArrayRetained_executeIndexedGeo else bclrs = (jbyte *)(*(table->GetDirectBufferAddress))(env, cdataBuffer); } - + /* get normal array */ if (normalsDefined) { norms = (jfloat *)(*(table->GetDirectBufferAddress))(env, ndata); } +#ifdef VERBOSE + fprintf(stderr, "IndexedGeometryArrayRetained.executeIndexedGeometryVABuffer() -- calling executeIndexedGeometryArrayVA\n"); +#endif /* VERBOSE */ + executeIndexedGeometryArrayVA(env, obj, ctxInfo, @@ -2523,6 +3098,9 @@ void JNICALL Java_javax_media_j3d_IndexedGeometryArrayRetained_executeIndexedGeo fclrs, bclrs, norms, + vertexAttrCount, + vertexAttrSizes, + vertexAttrPointer, pass, texCoordMapLength, tcoordsetmap, @@ -2539,26 +3117,42 @@ void JNICALL Java_javax_media_j3d_IndexedGeometryArrayRetained_executeIndexedGeo (*(table->ReleasePrimitiveArrayCritical))(env, cfdata, fclrs, 0); else if(byteColorsDefined && cbdata != NULL) (*(table->ReleasePrimitiveArrayCritical))(env, cbdata, bclrs, 0); + + if (vaobjs != NULL) { + free(vaobjs); + } + if (vertexAttrPointer != NULL) { + free(vertexAttrPointer); + } + + if (texobjs != NULL) { + free(texobjs); + } + if (texCoordPointer != NULL) { + free(texCoordPointer); + } } -JNIEXPORT -void JNICALL Java_javax_media_j3d_IndexedGeometryArrayRetained_buildIndexedGeometry(JNIEnv *env, - jobject obj, jlong ctxInfo, jobject geo, - jint geo_type, - jboolean isNonUniformScale, jboolean updateAlpha, float alpha, - jboolean ignoreVertexColors, - jint initialIndexIndex, - jint validIndexCount, - jint vertexCount, - jint vformat, - jint texCoordSetCount, - jintArray texCoordSetMapArray, - jint texCoordSetMapLen, - jintArray texUnitOffset, - jdoubleArray xform, jdoubleArray nxform, - jfloatArray varray, jintArray indexCoord) +JNIEXPORT void JNICALL +Java_javax_media_j3d_IndexedGeometryArrayRetained_buildIndexedGeometry( + JNIEnv *env, + jobject obj, jlong ctxInfo, jobject geo, + jint geo_type, + jboolean isNonUniformScale, jboolean updateAlpha, float alpha, + jboolean ignoreVertexColors, + jint initialIndexIndex, + jint validIndexCount, + jint vertexCount, + jint vformat, + jint vertexAttrCount, + jintArray vertexAttrSizes, + jint texCoordSetCount, + jintArray texCoordSetMapArray, + jint texCoordSetMapLen, + jintArray texUnitOffset, + jdoubleArray xform, jdoubleArray nxform, + jfloatArray varray, jintArray indexCoord) { - jclass geo_class; JNIEnv table; jboolean useAlpha = JNI_FALSE; @@ -2566,7 +3160,7 @@ void JNICALL Java_javax_media_j3d_IndexedGeometryArrayRetained_buildIndexedGeome jfloat *verts; jint *indices; jint i; - size_t bstride; + size_t bstride; jint texStride, *texCoordSetMapOffset, texSize; GLsizei *countArray; GLenum iaFormat; @@ -2584,15 +3178,23 @@ void JNICALL Java_javax_media_j3d_IndexedGeometryArrayRetained_buildIndexedGeome jint** multiDrawElementsIndices = NULL; jint allocated = 0; int offset = 0; + int vAttrStride = 0; + int vAttrOff; + jint *vAttrSizesPtr = NULL; GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; jlong ctx = ctxProperties->context; - + +#ifdef VERBOSE + fprintf(stderr, "IndexedGeometryArrayRetained.buildIndexedGeometry()\n"); +#endif /* VERBOSE */ + table = *env; geo_class = (jclass) (*(table->GetObjectClass))(env, geo); /* This matches the code in GeometryArrayRetained.java */ stride = coordoff = normoff = coloroff = texCoordoff = 0; + vAttrOff = 0; if ((vformat & GA_COORDINATES) != 0) { glEnableClientState(GL_VERTEX_ARRAY); stride += 3; @@ -2600,6 +3202,7 @@ void JNICALL Java_javax_media_j3d_IndexedGeometryArrayRetained_buildIndexedGeome else { glDisableClientState(GL_VERTEX_ARRAY); } + if ((vformat & GA_NORMALS) != 0) { glEnableClientState(GL_NORMAL_ARRAY); stride += 3; @@ -2618,6 +3221,7 @@ void JNICALL Java_javax_media_j3d_IndexedGeometryArrayRetained_buildIndexedGeome else { glDisableClientState(GL_COLOR_ARRAY); } + if ((vformat & GA_TEXTURE_COORDINATE) != 0) { if ((vformat & GA_TEXTURE_COORDINATE_2) != 0) { texSize = 2; @@ -2635,6 +3239,20 @@ void JNICALL Java_javax_media_j3d_IndexedGeometryArrayRetained_buildIndexedGeome coordoff += texStride; } + if ((vformat & GA_VERTEX_ATTRIBUTES) != 0) { + if (vertexAttrSizes != NULL) { + vAttrSizesPtr = table->GetIntArrayElements(env, vertexAttrSizes, NULL); + } + for (i = 0; i < vertexAttrCount; i++) { + vAttrStride += vAttrSizesPtr[i]; + } + stride += vAttrStride; + normoff += vAttrStride; + coloroff += vAttrStride; + coordoff += vAttrStride; + texCoordoff += vAttrStride; + } + bstride = stride*sizeof(float); /* @@ -2798,7 +3416,18 @@ void JNICALL Java_javax_media_j3d_IndexedGeometryArrayRetained_buildIndexedGeome texCoordSetMapOffset, texCoordSetMapLen, NULL, verts, ctxInfo); - } + } + + if (vformat & GA_VERTEX_ATTRIBUTES) { + jfloat *vAttrPtr = &verts[vAttrOff]; + + for (i = 0; i < vertexAttrCount; i++) { + ctxProperties->enableVertexAttrArray(ctxProperties, i); + ctxProperties->vertexAttrPointer(ctxProperties, i, vAttrSizesPtr[i], + GL_FLOAT, bstride, vAttrPtr); + vAttrPtr += vAttrSizesPtr[i]; + } + } } switch (geo_type) { @@ -2910,6 +3539,17 @@ void JNICALL Java_javax_media_j3d_IndexedGeometryArrayRetained_buildIndexedGeome texCoordSetMapLen, NULL, verts, ctxInfo); } + + if (vformat & GA_VERTEX_ATTRIBUTES) { + jfloat *vAttrPtr = &verts[vAttrOff]; + + for (i = 0; i < vertexAttrCount; i++) { + ctxProperties->enableVertexAttrArray(ctxProperties, i); + ctxProperties->vertexAttrPointer(ctxProperties, i, vAttrSizesPtr[i], + GL_FLOAT, bstride, vAttrPtr); + vAttrPtr += vAttrSizesPtr[i]; + } + } } lockArray(ctxProperties, vertexCount); switch (geo_type){ @@ -2922,6 +3562,14 @@ void JNICALL Java_javax_media_j3d_IndexedGeometryArrayRetained_buildIndexedGeome unlockArray(ctxProperties); + if (vformat & GA_VERTEX_ATTRIBUTES) { + resetVertexAttrs(ctxInfo, vertexAttrCount); + } + + if (vformat & GA_TEXTURE_COORDINATE) { + resetTexture(ctxInfo); + } + if (tmpNormalArray != NULL) { free(tmpNormalArray); } @@ -2943,12 +3591,20 @@ void JNICALL Java_javax_media_j3d_IndexedGeometryArrayRetained_buildIndexedGeome if (nxform_ptr != NULL) (*(table->ReleasePrimitiveArrayCritical))(env, nxform, nxform_ptr, 0); + + if (vAttrSizesPtr != NULL) { + table->ReleaseIntArrayElements(env, vertexAttrSizes, vAttrSizesPtr, JNI_ABORT); + } } /* execute geometry array with java array format */ -JNIEXPORT -void JNICALL Java_javax_media_j3d_GeometryArrayRetained_buildGAForByRef( +/* + * Class: javax_media_j3d_GeometryArrayRetained + * Method: buildGAForByRef + * Signature: (JLjavax/media/j3d/GeometryArrayRetained;IZZFZIIII[F[DI[F[BI[FI[I[I[[FI[I[II[Ljava/lang/Object;[D[D)V + */ +JNIEXPORT void JNICALL Java_javax_media_j3d_GeometryArrayRetained_buildGAForByRef( JNIEnv *env, jobject obj, jlong ctxInfo, @@ -2969,6 +3625,10 @@ void JNICALL Java_javax_media_j3d_GeometryArrayRetained_buildGAForByRef( jbyteArray cbdata, jint initialNormalIndex, jfloatArray ndata, + jint vertexAttrCount, + jintArray vertexAttrSizes, + jintArray vertexAttrIndices, + jobjectArray vertexAttrData, jint texCoordMapLength, jintArray tcoordsetmap, jintArray texindices, @@ -2998,22 +3658,39 @@ void JNICALL Java_javax_media_j3d_GeometryArrayRetained_buildGAForByRef( jfloat* fvptr = NULL, *nptr = NULL, *fcptr = NULL; jdouble* dvptr = NULL; jbyte* bcptr = NULL; - jfloat* texCoordPointer[NUM_TEXTURE_UNITS]; - jarray texobjs[NUM_TEXTURE_UNITS]; + jarray *vaobjs = NULL; + jfloat **vertexAttrPointer = NULL; + jfloat **texCoordPointer = NULL; + jarray *texobjs = NULL; jint *tunitstatemap = NULL; + int offset = 0; + jboolean floatCoordDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_COORD_FLOAT) != 0); jboolean doubleCoordDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_COORD_DOUBLE) != 0); jboolean floatColorsDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_COLOR_FLOAT) != 0); jboolean byteColorsDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_COLOR_BYTE) != 0); jboolean normalsDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_NORMAL_FLOAT) != 0); + jboolean vattrDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_VATTR_FLOAT) != 0); jboolean textureDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_TEXCOORD_FLOAT) != 0); - int offset = 0; GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; jlong ctx = ctxProperties->context; table = *env; + + if (vattrDefined) { + vaobjs = (jarray *)malloc(vertexAttrCount * sizeof(jarray)); + vertexAttrPointer = (jfloat **)malloc(vertexAttrCount * sizeof(jfloat *)); + + for (i = 0; i < vertexAttrCount; i++) { + vaobjs[i] = (*(table->GetObjectArrayElement))(env, vertexAttrData, i); + } + } + if (textureDefined) { + texobjs = (jarray*)malloc(texCoordMapLength * sizeof(jarray)); + texCoordPointer = (jfloat**)malloc(texCoordMapLength * sizeof(jfloat*)); + for (i = 0; i < texCoordMapLength; i++) { texobjs[i] = (*(table->GetObjectArrayElement))(env, texCoords, i); } @@ -3051,6 +3728,14 @@ void JNICALL Java_javax_media_j3d_GeometryArrayRetained_buildGAForByRef( floatColorsDefined = JNI_FALSE; byteColorsDefined = JNI_FALSE; } + + /* get vertex attr arrays */ + if (vattrDefined) { + for (i = 0; i < vertexAttrCount; i++) { + vertexAttrPointer[i] = (jfloat *) (*(table->GetPrimitiveArrayCritical))(env, vaobjs[i], NULL); + } + } + /* get texture arrays */ if (textureDefined) { tunitstatemap = (int *)malloc(texCoordMapLength * sizeof(int)); @@ -3078,7 +3763,6 @@ void JNICALL Java_javax_media_j3d_GeometryArrayRetained_buildGAForByRef( glDisableClientState(GL_VERTEX_ARRAY); } - /* get color array */ if (floatColorsDefined) { glEnableClientState(GL_COLOR_ARRAY); @@ -3225,15 +3909,37 @@ void JNICALL Java_javax_media_j3d_GeometryArrayRetained_buildGAForByRef( vformat |= GA_WITH_ALPHA; } + +#ifdef VERBOSE + fprintf(stderr, "GeometryArrayRetained.buildGAForByRef() -- calling executeGeometryArrayVA\n"); +#endif /* VERBOSE */ + executeGeometryArrayVA(env, obj, ctxInfo, geo, geo_type, isNonUniformScale, JNI_FALSE, ignoreVertexColors, vcount, vformat, vdefined, initialCoordIndex, fvptr, dvptr, initialColorIndex, fcptr, bcptr, initialNormalIndex, - nptr, -1, texCoordMapLength, + nptr, + vertexAttrCount, vertexAttrSizes, + vertexAttrIndices, vertexAttrPointer, + -1, texCoordMapLength, tcoordsetmap, texCoordMapLength, tunitstatemap, texindices,texStride,texCoordPointer,0, sarray, strip_len, start_array); + + if (vattrDefined) { + for (i = 0; i < vertexAttrCount; i++) { + (*(table->ReleasePrimitiveArrayCritical))(env, vaobjs[i], vertexAttrPointer[i], 0); + } + } + + if (vaobjs != NULL) { + free(vaobjs); + } + if (vertexAttrPointer != NULL) { + free(vertexAttrPointer); + } + if (textureDefined) { if (tunitstatemap != NULL) { free(tunitstatemap); @@ -3245,6 +3951,13 @@ void JNICALL Java_javax_media_j3d_GeometryArrayRetained_buildGAForByRef( } } + if (texobjs != NULL) { + free(texobjs); + } + if (texCoordPointer != NULL) { + free(texCoordPointer); + } + if (normalsDefined) { (*env)->ReleasePrimitiveArrayCritical(env, ndata, norms, 0); if (tmpNormalArray != NULL) { @@ -3282,6 +3995,8 @@ void JNICALL Java_javax_media_j3d_GeometryArrayRetained_buildGAForByRef( } +/* NOTE: NIO buffers are no longer supported in display lists. */ +#if 0 /* execute geometry array with java array format */ JNIEXPORT void JNICALL Java_javax_media_j3d_GeometryArrayRetained_buildGAForBuffer( @@ -3332,8 +4047,8 @@ void JNICALL Java_javax_media_j3d_GeometryArrayRetained_buildGAForBuffer( jfloat* fvptr = NULL, *nptr = NULL, *fcptr = NULL; jdouble* dvptr = NULL; jbyte* bcptr = NULL; - jfloat* texCoordPointer[NUM_TEXTURE_UNITS]; - jarray texobjs[NUM_TEXTURE_UNITS]; + jfloat **texCoordPointer = NULL; + jarray *texobjs = NULL; jint *tunitstatemap = NULL; jboolean floatCoordDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_COORD_FLOAT) != 0); jboolean doubleCoordDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_COORD_DOUBLE) != 0); @@ -3347,7 +4062,11 @@ void JNICALL Java_javax_media_j3d_GeometryArrayRetained_buildGAForBuffer( jlong ctx = ctxProperties->context; table = *env; + if (textureDefined) { + texobjs = (jarray*)malloc(texCoordMapLength * sizeof(jarray)); + texCoordPointer = (jfloat**)malloc(texCoordMapLength * sizeof(jfloat*)); + for (i = 0; i < texCoordMapLength; i++) { texobjs[i] = (*(table->GetObjectArrayElement))(env, texCoords, i); } @@ -3416,6 +4135,9 @@ void JNICALL Java_javax_media_j3d_GeometryArrayRetained_buildGAForBuffer( if(fverts == NULL && dverts == NULL) { return; } + + /* TODO KCR : get vertex attr arrays */ + /* get color array */ if (floatColorsDefined) { glEnableClientState(GL_COLOR_ARRAY); @@ -3556,12 +4278,20 @@ void JNICALL Java_javax_media_j3d_GeometryArrayRetained_buildGAForBuffer( vformat |= GA_WITH_ALPHA; } + +#ifdef VERBOSE + fprintf(stderr, "GeometryArrayRetained.buildGAForBuffer() -- calling executeGeometryArrayVA\n"); +#endif /* VERBOSE */ + executeGeometryArrayVA(env, obj, ctxInfo, geo, geo_type, isNonUniformScale, JNI_FALSE, ignoreVertexColors, vcount, vformat, vdefined, initialCoordIndex, fvptr, dvptr, initialColorIndex, fcptr, bcptr, initialNormalIndex, - nptr, -1, texCoordMapLength, + nptr, + /* TODO: vertexAttrCount, vertexAttrSizes, */ + /* TODO: vertexAttrIndices, vertexAttrPointer, */ + -1, texCoordMapLength, tcoordsetmap, texCoordMapLength, tunitstatemap, texindices,texStride,texCoordPointer,0, sarray, strip_len, start_array); if (textureDefined) { @@ -3575,6 +4305,13 @@ void JNICALL Java_javax_media_j3d_GeometryArrayRetained_buildGAForBuffer( } } + if (texobjs != NULL) { + free(texobjs); + } + if (texCoordPointer != NULL) { + free(texCoordPointer); + } + if (tmpNormalArray != NULL) { free(tmpNormalArray); } @@ -3596,4 +4333,5 @@ void JNICALL Java_javax_media_j3d_GeometryArrayRetained_buildGAForBuffer( } } +#endif /* 0 */ diff --git a/src/native/ogl/GraphicsContext3D.c b/src/native/ogl/GraphicsContext3D.c index bdff363..b3772dd 100644 --- a/src/native/ogl/GraphicsContext3D.c +++ b/src/native/ogl/GraphicsContext3D.c @@ -15,6 +15,9 @@ #include "gldefs.h" +extern void throwAssert(JNIEnv *env, char *str); + + JNIEXPORT void JNICALL Java_javax_media_j3d_GraphicsContext3D_readRasterNative( JNIEnv *env, jobject obj, jlong ctxInfo, @@ -79,9 +82,11 @@ void JNICALL Java_javax_media_j3d_GraphicsContext3D_readRasterNative( case FORMAT_BYTE_LA: gltype = GL_LUMINANCE_ALPHA; break; + case FORMAT_BYTE_GRAY: case FORMAT_USHORT_GRAY: - /* TODO: throw exception */ + default: + throwAssert(env, "illegal format"); break; } byteData = (jbyte *)(*(table->GetPrimitiveArrayCritical))(env, diff --git a/src/native/ogl/MasterControl.c b/src/native/ogl/MasterControl.c index 03cb380..a7ce163 100644 --- a/src/native/ogl/MasterControl.c +++ b/src/native/ogl/MasterControl.c @@ -32,7 +32,7 @@ #include <winbase.h> #endif /* WIN32 */ -#if defined(SOLARIS) || defined(__linux__) +#if defined(UNIX) #include <unistd.h> #ifdef SOLARIS #include <thread.h> @@ -65,7 +65,7 @@ extern Bool XPanoramiXQueryExtension(Display *dpy, int *event_base, int *error_base); #endif /* SOLARIS && __sparc */ -#endif /* SOLARIS || __linux__ */ +#endif /* UNIX_ */ /* defined in Canvas3D.c */ extern int isExtensionSupported(const char *allExtensions, @@ -174,9 +174,9 @@ DWORD countBits(DWORD mask) JNIEXPORT jint JNICALL Java_javax_media_j3d_MasterControl_getNumberOfProcessor (JNIEnv *env, jobject obj) { -#if defined(SOLARIS) || defined(__linux__) +#if defined(UNIX) return sysconf(_SC_NPROCESSORS_ONLN); -#endif /* SOLARIS || __linux__ */ +#endif /* UNIX_ */ #ifdef WIN32 SYSTEM_INFO sysInfo; @@ -205,9 +205,9 @@ Java_javax_media_j3d_MasterControl_getThreadConcurrency(JNIEnv *env, return (jint) thr_getconcurrency(); #endif /* SOLARIS */ -#ifdef __linux__ +#ifdef LINUX return -1; -#endif /* __linux__ */ +#endif /* LINUX */ #ifdef WIN32 return -1; @@ -233,9 +233,9 @@ Java_javax_media_j3d_MasterControl_setThreadConcurrency(JNIEnv *env, /* No-op on windows */ #endif /* WIN32 */ -#ifdef __linux__ +#ifdef LINUX /* No-op on linux */ -#endif /* __linux__ */ +#endif /* LINUX */ } @@ -254,7 +254,7 @@ jint JNICALL Java_javax_media_j3d_MasterControl_getMaximumLights( return 8; #endif /* WIN32 */ -#ifdef __linux__ +#ifdef LINUX return 8; -#endif /* __linux__ */ +#endif /* LINUX */ } diff --git a/src/native/ogl/NativeAPIInfo.c b/src/native/ogl/NativeAPIInfo.c index e0559ed..5554dec 100644 --- a/src/native/ogl/NativeAPIInfo.c +++ b/src/native/ogl/NativeAPIInfo.c @@ -19,6 +19,7 @@ #include <jni.h> #include "javax_media_j3d_MasterControl.h" +#include "javax_media_j3d_NativeAPIInfo.h" JNIEXPORT jint JNICALL Java_javax_media_j3d_NativeAPIInfo_getRenderingAPI( @@ -32,7 +33,7 @@ jint JNICALL Java_javax_media_j3d_NativeAPIInfo_getRenderingAPI( return (jint)javax_media_j3d_MasterControl_RENDER_OPENGL_SOLARIS; #endif /* SOLARIS */ -#ifdef __linux__ +#ifdef LINUX return (jint)javax_media_j3d_MasterControl_RENDER_OPENGL_LINUX; -#endif /* __linux__ */ +#endif /* LINUX */ } diff --git a/src/native/ogl/NativeConfigTemplate3D.c b/src/native/ogl/NativeConfigTemplate3D.c index db14ba1..dd621ac 100644 --- a/src/native/ogl/NativeConfigTemplate3D.c +++ b/src/native/ogl/NativeConfigTemplate3D.c @@ -16,7 +16,7 @@ * of the Java 3D API. */ -#if defined(__linux__) +#if defined(LINUX) #define _GNU_SOURCE 1 #endif @@ -26,7 +26,7 @@ #include "gldefs.h" -#if defined(SOLARIS) || defined(__linux__) +#if defined(UNIX) #include <X11/X.h> #include <X11/Xlib.h> #include <X11/Xutil.h> @@ -43,41 +43,105 @@ extern int isExtensionSupported(const char *allExtensions, const char *extension /* by MIK OF CLASSX */ extern jboolean getJavaBoolEnv(JNIEnv *env, char* envStr); -#if defined(SOLARIS) || defined(__linux__) +#if defined(UNIX) /* Fix for issue 20 */ #define MAX_GLX_ATTRS_LENGTH 100 + GLXFBConfig *find_S_FBConfigs(jlong display, jint screen, int* glxAttrs, - int sVal, int sIndex) { + int stencilVal, + int sIndex) { + GLXFBConfig *fbConfigList = NULL; int numFBConfigs, index; MYPFNGLXCHOOSEFBCONFIG pGLXChooseFbConfig = NULL; + GLboolean userReq = GL_TRUE; pGLXChooseFbConfig = (MYPFNGLXCHOOSEFBCONFIG) dlsym(RTLD_DEFAULT, "glXChooseFBConfig"); J3D_ASSERT((sIndex+3) < MAX_GLX_ATTRS_LENGTH); + + /* if user not use stencil we will request one of internal use. */ + if (stencilVal < 1) { + userReq = GL_FALSE; + stencilVal = 1; + } + + index = sIndex; + glxAttrs[index++] = GLX_STENCIL_SIZE; + glxAttrs[index++] = stencilVal; + glxAttrs[index] = None; + + fbConfigList = pGLXChooseFbConfig((Display*)display, screen, + glxAttrs, &numFBConfigs); + + + if(fbConfigList != NULL) { + return fbConfigList; + } + + /* + fprintf(stderr, "Stencil : find_S_FBConfigs (TRY 1): FAIL -- stencilVal = %d\n", + stencilVal); + */ + + if (userReq == GL_TRUE) { + /* fprintf(stderr, " userReq : *** FAILED ***\n"); */ + return NULL; + } + + index = sIndex; + glxAttrs[index] = None; + + fbConfigList = pGLXChooseFbConfig((Display*)display, screen, + glxAttrs, &numFBConfigs); + + + if(fbConfigList != NULL) { + return fbConfigList; + } + + /* + fprintf(stderr, "Stencil : find_S_FBConfigs (TRY 2): FAIL -- stencilVal = %d\n", + stencilVal); + */ + + return NULL; + +} + +GLXFBConfig *find_S_S_FBConfigs(jlong display, + jint screen, + int* glxAttrs, + int stereoVal, + int stencilVal, + int sIndex) { + + GLXFBConfig *fbConfigList = NULL; + int numFBConfigs, index; + + J3D_ASSERT((sIndex+3) < MAX_GLX_ATTRS_LENGTH); - if (sVal == REQUIRED || sVal== PREFERRED) { + if (stereoVal == REQUIRED || stereoVal== PREFERRED) { index = sIndex; glxAttrs[index++] = GLX_STEREO; glxAttrs[index++] = True; glxAttrs[index] = None; + + fbConfigList = find_S_FBConfigs(display, screen, glxAttrs, stencilVal, index); - fbConfigList = pGLXChooseFbConfig((Display*)display, screen, - glxAttrs, &numFBConfigs); - if(fbConfigList != NULL) { return fbConfigList; } } - if (sVal == UNNECESSARY || sVal== PREFERRED) { + if (stereoVal == UNNECESSARY || stereoVal== PREFERRED) { /* This is a workaround to BugId : 5106472 in Solaris OGL. We can't set glxAttrs with GLX_STEREO follow by a boolean */ @@ -87,7 +151,7 @@ GLXFBConfig *find_S_FBConfigs(jlong display, /* For debug only { int i=0; - fprintf(stderr, "find_S_FBConfigs sVal = %d\n", sVal); + fprintf(stderr, "find_S_S_FBConfigs stereoVal = %d\n", stereoVal); while(glxAttrs[i] != None) { fprintf(stderr, "glxAttrs[%d] = %x", i, glxAttrs[i]); @@ -97,22 +161,25 @@ GLXFBConfig *find_S_FBConfigs(jlong display, } } */ - fbConfigList = pGLXChooseFbConfig((Display*)display, screen, - glxAttrs, &numFBConfigs); - + + fbConfigList = find_S_FBConfigs(display, screen, glxAttrs, stencilVal, index); + if(fbConfigList != NULL) { return fbConfigList; } } - if (sVal == UNNECESSARY) { + if (stereoVal == UNNECESSARY) { index = sIndex; glxAttrs[index++] = GLX_STEREO; glxAttrs[index++] = True; glxAttrs[index] = None; - fbConfigList = pGLXChooseFbConfig((Display*)display, screen, - glxAttrs, &numFBConfigs); + /* + fbConfigList = pGLXChooseFbConfig((Display*)display, screen, + glxAttrs, &numFBConfigs); + */ + fbConfigList = find_S_FBConfigs(display, screen, glxAttrs, stencilVal, index); if(fbConfigList != NULL) { return fbConfigList; @@ -122,11 +189,13 @@ GLXFBConfig *find_S_FBConfigs(jlong display, return NULL; } -GLXFBConfig *find_AA_S_FBConfigs(jlong display, - jint screen, - int* glxAttrs, - int sVal, - int antialiasVal, int antialiasIndex) { +GLXFBConfig *find_AA_S_S_FBConfigs(jlong display, + jint screen, + int* glxAttrs, + int stereoVal, + int antialiasVal, + int stencilVal, + int antialiasIndex) { const char *glxExtensions = NULL; GLXFBConfig *fbConfigList = NULL; @@ -151,10 +220,10 @@ GLXFBConfig *find_AA_S_FBConfigs(jlong display, glxAttrs[index] = None; for(i=0; i < SAMPLE_LENGTH; i++) { - /* fprintf(stderr, "find_AA_S_FBConfigs samples = %d\n", samples[i]); */ + /* fprintf(stderr, "find_AA_S_S_FBConfigs samples = %d\n", samples[i]); */ glxAttrs[samplesIndex] = samples[i]; - fbConfigList = find_S_FBConfigs(display, screen, - glxAttrs, sVal, index); + fbConfigList = find_S_S_FBConfigs(display, screen, glxAttrs, stereoVal, + stencilVal, index); if(fbConfigList != NULL) { return fbConfigList; @@ -173,8 +242,8 @@ GLXFBConfig *find_AA_S_FBConfigs(jlong display, glxAttrs[index++] = 8; glxAttrs[index] = None; - fbConfigList = find_S_FBConfigs(display, screen, - glxAttrs, sVal, index); + fbConfigList = find_S_S_FBConfigs(display, screen, glxAttrs, + stereoVal, stencilVal, index); if(fbConfigList != NULL) { return fbConfigList; @@ -184,8 +253,8 @@ GLXFBConfig *find_AA_S_FBConfigs(jlong display, glxAttrs[antialiasIndex] = None; if (antialiasVal == UNNECESSARY || antialiasVal == PREFERRED) { - fbConfigList = find_S_FBConfigs(display, screen, - glxAttrs, sVal, index); + fbConfigList = find_S_S_FBConfigs(display, screen, glxAttrs, + stereoVal, stencilVal, index); if(fbConfigList != NULL) { return fbConfigList; @@ -198,11 +267,13 @@ GLXFBConfig *find_AA_S_FBConfigs(jlong display, } -GLXFBConfig *find_DB_AA_S_FBConfigs(jlong display, +GLXFBConfig *find_DB_AA_S_S_FBConfigs(jlong display, jint screen, int* glxAttrs, - int sVal, int dbVal, - int antialiasVal, int dbIndex) { + int stereoVal, int dbVal, + int antialiasVal, + int stencilVal, + int dbIndex) { GLXFBConfig *fbConfigList = NULL; int index = dbIndex; @@ -216,9 +287,9 @@ GLXFBConfig *find_DB_AA_S_FBConfigs(jlong display, glxAttrs[index++] = True; glxAttrs[index] = None; - fbConfigList = find_AA_S_FBConfigs(display, screen, - glxAttrs, sVal, - antialiasVal, index); + fbConfigList = find_AA_S_S_FBConfigs(display, screen, glxAttrs, + stereoVal, antialiasVal, + stencilVal, index); if(fbConfigList != NULL) { return fbConfigList; @@ -230,31 +301,31 @@ GLXFBConfig *find_DB_AA_S_FBConfigs(jlong display, glxAttrs[index++] = GLX_DOUBLEBUFFER; glxAttrs[index++] = False; glxAttrs[index] = None; - - fbConfigList = find_AA_S_FBConfigs(display, screen, - glxAttrs, sVal, - antialiasVal, index); + + fbConfigList = find_AA_S_S_FBConfigs(display, screen, glxAttrs, + stereoVal, antialiasVal, + stencilVal, index); if(fbConfigList != NULL) { return fbConfigList; } } - + if (dbVal == UNNECESSARY) { index = dbIndex; glxAttrs[index++] = GLX_DOUBLEBUFFER; glxAttrs[index++] = True; glxAttrs[index] = None; - - fbConfigList = find_AA_S_FBConfigs(display, screen, - glxAttrs, sVal, - antialiasVal, index); + + fbConfigList = find_AA_S_S_FBConfigs(display, screen, glxAttrs, + stereoVal, antialiasVal, + stencilVal, index); if(fbConfigList != NULL) { return fbConfigList; } } - + return NULL; } @@ -279,9 +350,10 @@ jint JNICALL Java_javax_media_j3d_NativeConfigTemplate3D_chooseOglVisual( GLXFBConfig *fbConfigList = NULL; /* use to cycle through when attr is not REQUIRED */ - int sVal; - int dbVal; - int antialiasVal; + int dbVal; /* value for double buffering */ + int stereoVal; /* value for stereo */ + int antialiasVal; /* value for antialias */ + int stencilVal; /* value for stencil size */ int drawableIndex; @@ -330,32 +402,28 @@ jint JNICALL Java_javax_media_j3d_NativeConfigTemplate3D_chooseOglVisual( glxAttrs[index] = None; dbVal = mx_ptr[DOUBLEBUFFER]; - sVal = mx_ptr[STEREO]; + stereoVal = mx_ptr[STEREO]; antialiasVal = mx_ptr[ANTIALIASING]; + stencilVal = mx_ptr[STENCIL_SIZE]; (*env)->ReleaseIntArrayElements(env, attrList, mx_ptr, JNI_ABORT); - /* Get Pbuffer-capabale visual unless j3d.usePbuffer property is FALSE */ + /* Get Pbuffer-capable visual unless j3d.usePbuffer property is FALSE */ if (getJavaBoolEnv(env,"usePbuffer")) { - fbConfigList = find_DB_AA_S_FBConfigs(display, screen, glxAttrs, sVal, - dbVal, antialiasVal, index); + fbConfigList = find_DB_AA_S_S_FBConfigs(display, screen, glxAttrs, stereoVal, + dbVal, antialiasVal, stencilVal, index); } if(fbConfigList == NULL) { /* Try with Pixmap, if Pbuffer fail. */ - glxAttrs[drawableIndex] = (GLX_PIXMAP_BIT | GLX_WINDOW_BIT); - - fbConfigList = find_DB_AA_S_FBConfigs(display, screen, glxAttrs, sVal, - dbVal, antialiasVal, index); - + fbConfigList = find_DB_AA_S_S_FBConfigs(display, screen, glxAttrs, stereoVal, + dbVal, antialiasVal, stencilVal, index); } if(fbConfigList == NULL) { /* Try with Window only, if Pixmap fail. */ - glxAttrs[drawableIndex] = GLX_WINDOW_BIT; - - fbConfigList = find_DB_AA_S_FBConfigs(display, screen, glxAttrs, sVal, - dbVal, antialiasVal, index); - + glxAttrs[drawableIndex] = GLX_WINDOW_BIT; + fbConfigList = find_DB_AA_S_S_FBConfigs(display, screen, glxAttrs, stereoVal, + dbVal, antialiasVal, stencilVal, index); } fbConfigListPtr[0] = (jlong)fbConfigList; @@ -444,6 +512,29 @@ jboolean JNICALL Java_javax_media_j3d_NativeConfigTemplate3D_isStereoAvailable( return (stereoFlag ? JNI_TRUE : JNI_FALSE); } +JNIEXPORT jint JNICALL Java_javax_media_j3d_NativeConfigTemplate3D_getStencilSize( + JNIEnv *env, + jobject obj, + jlong display, + jint screen, + jint vid) +{ + Display *dpy = (Display*) display; + XVisualInfo *vinfo, template; + int nitems; + int stencilVal = 0; + + template.visualid = vid; + vinfo = XGetVisualInfo(dpy, VisualIDMask, &template, &nitems); + if (nitems != 1) { + fprintf(stderr, "Warning Canvas3D_getStencilSize got unexpected number of matching visuals %d\n", nitems); + } + + glXGetConfig(dpy, vinfo, GLX_STENCIL_SIZE, &stencilVal); + + return stencilVal; +} + JNIEXPORT jboolean JNICALL Java_javax_media_j3d_NativeConfigTemplate3D_isDoubleBufferAvailable( JNIEnv *env, @@ -543,7 +634,7 @@ jboolean JNICALL Java_javax_media_j3d_J3dGraphicsConfig_isValidVisualID( return (nitems == 1); } -#endif /* SOLARIS || __linux__ */ +#endif /* UNIX_ */ #ifdef WIN32 @@ -652,10 +743,12 @@ HDC getMonitorDC(int screen) return CreateDC("DISPLAY", NULL, NULL, NULL); } +/* NOTE : Since OpenGL 1.2 or greater is required. This is method will not be + * called. Need to remove in Java 3D 1.5 + */ int find_DB_S_STDPixelFormat(PIXELFORMATDESCRIPTOR* pfd, HDC hdc, - int *mx_ptr, GLboolean offScreen) -{ - + int *mx_ptr, GLboolean offScreen, int stencilVal) +{ int pf; PIXELFORMATDESCRIPTOR newpfd; @@ -669,6 +762,7 @@ int find_DB_S_STDPixelFormat(PIXELFORMATDESCRIPTOR* pfd, HDC hdc, (newpfd.cGreenBits < (unsigned char) mx_ptr[GREEN_SIZE]) || (newpfd.cBlueBits < (unsigned char) mx_ptr[BLUE_SIZE]) || (newpfd.cDepthBits < (unsigned char) mx_ptr[DEPTH_SIZE]) || + (newpfd.cStencilBits < (unsigned char) mx_ptr[STENCIL_SIZE]) || ((mx_ptr[DOUBLEBUFFER] == REQUIRED) && ((newpfd.dwFlags & PFD_DOUBLEBUFFER) == 0)) || ((mx_ptr[STEREO] == REQUIRED) && ((newpfd.dwFlags & PFD_STEREO) == 0))) @@ -706,17 +800,22 @@ void printErrorMessage(char *message) #define MAX_WGL_ATTRS_LENGTH 100 -int find_Stencil_PixelFormat(HDC hdc, PixelFormatInfo * pFormatInfo, - int* wglAttrs, int sIndex) { +int find_S_PixelFormat(HDC hdc, PixelFormatInfo * pFormatInfo, + int* wglAttrs, int stencilVal, int sIndex) { int pFormat, availableFormats, index; - + GLboolean userReq = GL_TRUE; + J3D_ASSERT((sIndex+4) < MAX_WGL_ATTRS_LENGTH); + /* if user not use stencil we will request one of internal use. */ + if (stencilVal < 1) { + userReq = GL_FALSE; + stencilVal = 1; + } - index = sIndex; wglAttrs[index++] = WGL_STENCIL_BITS_ARB; - wglAttrs[index++] = 1; + wglAttrs[index++] = stencilVal; /* * Terminate by 2 zeros to avoid driver bugs * that assume attributes always come in pairs. @@ -729,14 +828,25 @@ int find_Stencil_PixelFormat(HDC hdc, PixelFormatInfo * pFormatInfo, if ((pFormatInfo->wglChoosePixelFormatARB(hdc, wglAttrs, NULL, 1, &pFormat, &availableFormats)) && (availableFormats > 0)) { - /* fprintf(stderr, "wglChoosePixelFormatARB : pFormat %d availableFormats %d\n", - pFormat, availableFormats); */ + /* + fprintf(stderr, "Stencil : wglChoosePixelFormatARB : pFormat %d availableFormats %d\n", + pFormat, availableFormats); + */ return pFormat; } + + /* + fprintf(stderr, "Stencil : wglChoosePixelFormatARB (TRY 1): FAIL -- stencilVal = %d\n", + stencilVal); + */ - /* fprintf(stderr, "wglChoosePixelFormatARB (TRY 1): FAIL\n"); */ - + if (userReq == GL_TRUE) { + /* fprintf(stderr, " userReq : *** FAILED ***\n"); */ + return -1; + } + index = sIndex; + /* * Terminate by 2 zeros to avoid driver bugs * that assume attributes always come in pairs. @@ -745,28 +855,28 @@ int find_Stencil_PixelFormat(HDC hdc, PixelFormatInfo * pFormatInfo, wglAttrs[index+1] = 0; pFormat = -1; - + if ((pFormatInfo->wglChoosePixelFormatARB(hdc, wglAttrs, NULL, 1, &pFormat, &availableFormats)) && (availableFormats > 0)) { - + /* fprintf(stderr, "wglChoosePixelFormatARB : pFormat %d availableFormats %d\n", pFormat, availableFormats); */ - - return pFormat; + + return pFormat; } /* fprintf(stderr, "wglChoosePixelFormatARB (TRY 2): FAIL\n"); */ return -1; } -int find_S_PixelFormat(HDC hdc, PixelFormatInfo * pFormatInfo, - int* wglAttrs, int sVal, int sIndex) { +int find_S_S_PixelFormat(HDC hdc, PixelFormatInfo * pFormatInfo, int* wglAttrs, + int stereoVal, int stencilVal, int sIndex) { int pFormat, index; J3D_ASSERT((sIndex+4) < MAX_WGL_ATTRS_LENGTH); - if (sVal == REQUIRED || sVal== PREFERRED) { + if (stereoVal == REQUIRED || stereoVal== PREFERRED) { index = sIndex; wglAttrs[index++] = WGL_STEREO_ARB; @@ -778,8 +888,8 @@ int find_S_PixelFormat(HDC hdc, PixelFormatInfo * pFormatInfo, wglAttrs[index] = 0; wglAttrs[index+1] = 0; - pFormat = find_Stencil_PixelFormat(hdc, pFormatInfo, - wglAttrs, index); + pFormat = find_S_PixelFormat(hdc, pFormatInfo, wglAttrs, + stencilVal, index); /* fprintf(stderr,"STEREO REQUIRED or PREFERRED ***pFormat %d\n", pFormat); */ if(pFormat >= 0) { @@ -787,7 +897,7 @@ int find_S_PixelFormat(HDC hdc, PixelFormatInfo * pFormatInfo, } } - if (sVal == UNNECESSARY || sVal== PREFERRED) { + if (stereoVal == UNNECESSARY || stereoVal== PREFERRED) { index = sIndex; wglAttrs[index++] = WGL_STEREO_ARB; @@ -799,8 +909,8 @@ int find_S_PixelFormat(HDC hdc, PixelFormatInfo * pFormatInfo, wglAttrs[index] = 0; wglAttrs[index+1] = 0; - pFormat = find_Stencil_PixelFormat(hdc, pFormatInfo, - wglAttrs, index); + pFormat = find_S_PixelFormat(hdc, pFormatInfo, wglAttrs, + stencilVal, index); /* fprintf(stderr,"STEREO UNNECC. or PREFERRED ***pFormat %d\n", pFormat); */ @@ -809,7 +919,7 @@ int find_S_PixelFormat(HDC hdc, PixelFormatInfo * pFormatInfo, } } - if (sVal == UNNECESSARY) { + if (stereoVal == UNNECESSARY) { index = sIndex; wglAttrs[index++] = WGL_STEREO_ARB; wglAttrs[index++] = TRUE; @@ -820,8 +930,8 @@ int find_S_PixelFormat(HDC hdc, PixelFormatInfo * pFormatInfo, wglAttrs[index] = 0; wglAttrs[index+1] = 0; - pFormat = find_Stencil_PixelFormat(hdc, pFormatInfo, - wglAttrs, index); + pFormat = find_S_PixelFormat(hdc, pFormatInfo, wglAttrs, + stencilVal, index); /* fprintf(stderr,"STEREO UNNECC. ***pFormat %d\n", pFormat); */ @@ -834,9 +944,9 @@ int find_S_PixelFormat(HDC hdc, PixelFormatInfo * pFormatInfo, } -int find_AA_S_PixelFormat( HDC hdc, PixelFormatInfo * pFormatInfo, - int* wglAttrs, int sVal, - int antialiasVal, int antialiasIndex) { +int find_AA_S_S_PixelFormat( HDC hdc, PixelFormatInfo * pFormatInfo, + int* wglAttrs, int stereoVal, int antialiasVal, + int stencilVal, int antialiasIndex) { int index; int pFormat; @@ -879,11 +989,11 @@ int find_AA_S_PixelFormat( HDC hdc, PixelFormatInfo * pFormatInfo, for(i=0; i < SAMPLE_LENGTH; i++) { - /* fprintf(stderr, "find_AA_S_PixelFormat samples = %d\n", samples[i]); */ + /* fprintf(stderr, "find_AA_S_S_PixelFormat samples = %d\n", samples[i]); */ wglAttrs[samplesIndex] = samples[i]; - pFormat = find_S_PixelFormat(hdc, pFormatInfo, - wglAttrs, sVal, index); + pFormat = find_S_S_PixelFormat(hdc, pFormatInfo, wglAttrs, + stereoVal, stencilVal, index); if(pFormat >= 0) { return pFormat; } @@ -907,8 +1017,8 @@ int find_AA_S_PixelFormat( HDC hdc, PixelFormatInfo * pFormatInfo, wglAttrs[index] = 0; wglAttrs[index+1] = 0; - pFormat = find_S_PixelFormat(hdc, pFormatInfo, - wglAttrs, sVal, index); + pFormat = find_S_S_PixelFormat(hdc, pFormatInfo, wglAttrs, + stereoVal, stencilVal, index); if(pFormat >= 0) { return pFormat; @@ -925,8 +1035,8 @@ int find_AA_S_PixelFormat( HDC hdc, PixelFormatInfo * pFormatInfo, if (antialiasVal == UNNECESSARY || antialiasVal == PREFERRED) { - pFormat = find_S_PixelFormat(hdc, pFormatInfo, - wglAttrs, sVal, index); + pFormat = find_S_S_PixelFormat(hdc, pFormatInfo, wglAttrs, + stereoVal, stencilVal, index); if(pFormat >= 0) { return pFormat; @@ -939,9 +1049,9 @@ int find_AA_S_PixelFormat( HDC hdc, PixelFormatInfo * pFormatInfo, } -int find_DB_AA_S_PixelFormat( HDC hdc, PixelFormatInfo * pFormatInfo, - int* wglAttrs, int sVal, int dbVal, - int antialiasVal, int dbIndex) { +int find_DB_AA_S_S_PixelFormat( HDC hdc, PixelFormatInfo * pFormatInfo, + int* wglAttrs, int stereoVal, int dbVal, + int antialiasVal, int stencilVal, int dbIndex) { int index = dbIndex; int pFormat; @@ -960,9 +1070,9 @@ int find_DB_AA_S_PixelFormat( HDC hdc, PixelFormatInfo * pFormatInfo, wglAttrs[index] = 0; wglAttrs[index+1] = 0; - pFormat = find_AA_S_PixelFormat(hdc, pFormatInfo, - wglAttrs, sVal, - antialiasVal, index); + pFormat = find_AA_S_S_PixelFormat(hdc, pFormatInfo, + wglAttrs, stereoVal, + antialiasVal, stencilVal, index); if(pFormat >= 0) { return pFormat; @@ -972,7 +1082,7 @@ int find_DB_AA_S_PixelFormat( HDC hdc, PixelFormatInfo * pFormatInfo, if (dbVal == UNNECESSARY || dbVal== PREFERRED) { index = dbIndex; wglAttrs[index++] = WGL_DOUBLE_BUFFER_ARB; - wglAttrs[index++] = FALSE; // Partial fix to issue 100. + wglAttrs[index++] = FALSE; /* Partial fix to issue 100. */ /* * Terminate by 2 zeros to avoid driver bugs * that assume attributes always come in pairs. @@ -980,9 +1090,9 @@ int find_DB_AA_S_PixelFormat( HDC hdc, PixelFormatInfo * pFormatInfo, wglAttrs[index] = 0; wglAttrs[index+1] = 0; - pFormat = find_AA_S_PixelFormat(hdc, pFormatInfo, - wglAttrs, sVal, - antialiasVal, index); + pFormat = find_AA_S_S_PixelFormat(hdc, pFormatInfo, + wglAttrs, stereoVal, + antialiasVal, stencilVal, index); if(pFormat >= 0) { return pFormat; @@ -1000,9 +1110,9 @@ int find_DB_AA_S_PixelFormat( HDC hdc, PixelFormatInfo * pFormatInfo, wglAttrs[index] = 0; wglAttrs[index+1] = 0; - pFormat = find_AA_S_PixelFormat(hdc, pFormatInfo, - wglAttrs, sVal, - antialiasVal, index); + pFormat = find_AA_S_S_PixelFormat(hdc, pFormatInfo, + wglAttrs, stereoVal, + antialiasVal, stencilVal, index); if(pFormat >= 0) { return pFormat; @@ -1024,7 +1134,9 @@ void checkPixelFormat(HDC hdc, GLboolean hasMultisample = GL_FALSE; GLboolean hasStereo = GL_FALSE; GLboolean hasDoubleBuffer = GL_FALSE; - GLboolean hasAccum = GL_FALSE; + GLboolean hasAccum + = GL_FALSE; + int stencilSize = 0; PIXELFORMATDESCRIPTOR pfd; /* fprintf(stderr, "*** checkPixelFormat : offScreen = %d\n", offScreen); */ @@ -1069,10 +1181,12 @@ void checkPixelFormat(HDC hdc, if (pfd.cAccumRedBits > 0) { hasAccum = GL_TRUE; } - + + stencilSize = pfd.cStencilBits; + /* - fprintf(stderr, "hasStereo = %d, hasDoubleBuffer %d, hasAccum %d\n", - hasStereo, hasDoubleBuffer, hasAccum); + fprintf(stderr, "hasStereo = %d, hasDoubleBuffer %d, hasAccum %d stencilSize %d\n", + hasStereo, hasDoubleBuffer, hasAccum, pfd.cStencilBits); */ if(pFormatInfo->onScreenPFormat == pFormatInfo->offScreenPFormat) { @@ -1080,23 +1194,27 @@ void checkPixelFormat(HDC hdc, pFormatInfo->onScreenHasStereo = hasStereo; pFormatInfo->onScreenHasDoubleBuffer = hasDoubleBuffer; pFormatInfo->onScreenHasAccum = hasAccum; + pFormatInfo->onScreenStencilSize = stencilSize; pFormatInfo->offScreenHasMultisample = hasMultisample; pFormatInfo->offScreenHasStereo = hasStereo; pFormatInfo->offScreenHasDoubleBuffer = hasDoubleBuffer; pFormatInfo->offScreenHasAccum = hasAccum; + pFormatInfo->offScreenStencilSize = stencilSize; } else if(!offScreen) { pFormatInfo->onScreenHasMultisample = hasMultisample; pFormatInfo->onScreenHasStereo = hasStereo; pFormatInfo->onScreenHasDoubleBuffer = hasDoubleBuffer; pFormatInfo->onScreenHasAccum = hasAccum; + pFormatInfo->onScreenStencilSize = stencilSize; } else { pFormatInfo->offScreenHasMultisample = hasMultisample; pFormatInfo->offScreenHasStereo = hasStereo; pFormatInfo->offScreenHasDoubleBuffer = hasDoubleBuffer; pFormatInfo->offScreenHasAccum = hasAccum; + pFormatInfo->offScreenStencilSize = stencilSize; } } @@ -1111,16 +1229,18 @@ int chooseSTDPixelFormat( { int *mx_ptr; int dbVal; /* value for double buffering */ - int sVal; /* value for stereo */ + int stereoVal; /* value for stereo */ int pFormat = -1; /* PixelFormat */ PIXELFORMATDESCRIPTOR pfd; + int stencilVal = 0; /* value for stencil size */ + GLboolean userReq = GL_TRUE; /* fprintf(stderr, "chooseSTDPixelFormat : screen 0x%x, offScreen %d hdc 0x%x\n", screen, offScreen, hdc); */ ZeroMemory(&pfd, sizeof(PIXELFORMATDESCRIPTOR)); pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR); - pfd.nVersion = 1; /*TODO: when would this change? */ + pfd.nVersion = 1; /* When would this change? */ pfd.iPixelType = PFD_TYPE_RGBA; /* @@ -1140,16 +1260,23 @@ int chooseSTDPixelFormat( else dbVal = PFD_DOUBLEBUFFER_DONTCARE; - sVal = 0; + stereoVal = 0; if (mx_ptr[STEREO] == REQUIRED || mx_ptr[STEREO] == PREFERRED) { - sVal = PFD_STEREO; + stereoVal = PFD_STEREO; } else { - sVal = PFD_STEREO_DONTCARE; + stereoVal = PFD_STEREO_DONTCARE; } - pfd.dwFlags = dbVal | sVal | PFD_SUPPORT_OPENGL | PFD_DRAW_TO_WINDOW; + pfd.dwFlags = dbVal | stereoVal | PFD_SUPPORT_OPENGL | PFD_DRAW_TO_WINDOW; - pfd.cStencilBits = 1; + /* if user not use stencil we will request one of internal use. */ + stencilVal = mx_ptr[STENCIL_SIZE]; + if (stencilVal < 1) { + userReq = GL_FALSE; + stencilVal = 1; + } + + pfd.cStencilBits = stencilVal; if (mx_ptr[ANTIALIASING] == REQUIRED) { pfd.cAccumRedBits = 8; @@ -1161,6 +1288,8 @@ int chooseSTDPixelFormat( else { /* Offscreen setting. */ /* We are here b/c there is no support for Pbuffer on the HW. This is a fallback path, we will hardcore the value. */ + + /* NOTE : Stencil size isn't handle for Offscreen */ /* by MIK OF CLASSX */ pfd.iPixelType = PFD_TYPE_RGBA; @@ -1184,12 +1313,13 @@ int chooseSTDPixelFormat( } - pFormat = find_DB_S_STDPixelFormat(&pfd, hdc, mx_ptr, offScreen); + pFormat = find_DB_S_STDPixelFormat(&pfd, hdc, mx_ptr, offScreen, stencilVal); - if (pFormat == -1) { + if ((pFormat == -1) && (userReq == GL_FALSE)) { /* try disable stencil buffer */ pfd.cStencilBits = 0; - pFormat = find_DB_S_STDPixelFormat(&pfd, hdc, mx_ptr, offScreen); + stencilVal = 0; + pFormat = find_DB_S_STDPixelFormat(&pfd, hdc, mx_ptr, offScreen, stencilVal); } (*env)->ReleaseIntArrayElements(env, attrList, mx_ptr, JNI_ABORT); @@ -1208,12 +1338,14 @@ PixelFormatInfo * newPixelFormatInfo(HDC hdc, jboolean usePbuffer) pFormatInfo->onScreenHasStereo = GL_FALSE; pFormatInfo->onScreenHasDoubleBuffer = GL_FALSE; pFormatInfo->onScreenHasAccum = GL_FALSE; + pFormatInfo->onScreenStencilSize = 0; pFormatInfo->offScreenPFormat = -1; pFormatInfo->offScreenHasMultisample = GL_FALSE; pFormatInfo->offScreenHasStereo = GL_FALSE; pFormatInfo->offScreenHasDoubleBuffer = GL_FALSE; pFormatInfo->offScreenHasAccum = GL_FALSE; + pFormatInfo->offScreenStencilSize = 0; pFormatInfo->drawToPbuffer = GL_FALSE; pFormatInfo->supportARB = GL_FALSE; @@ -1307,9 +1439,10 @@ jint JNICALL Java_javax_media_j3d_NativeConfigTemplate3D_choosePixelFormat( int *mx_ptr; int dbVal; /* value for double buffering */ - int sVal; /* value for stereo */ + int stereoVal; /* value for stereo */ int antialiasVal; /* value for antialias */ - + int stencilVal; /* value for stencil size */ + HWND hwnd; HGLRC hrc; HDC hdc; @@ -1366,6 +1499,8 @@ jint JNICALL Java_javax_media_j3d_NativeConfigTemplate3D_choosePixelFormat( offScreenPFListPtr = (*env)->GetLongArrayElements(env, offScreenPFArray, NULL); if (pFormatInfo->supportARB) { + + /* fprintf(stderr, "Using non standard ChoosePixelFormat.\n"); */ mx_ptr = (*env)->GetIntArrayElements(env, attrList, NULL); @@ -1399,8 +1534,9 @@ jint JNICALL Java_javax_media_j3d_NativeConfigTemplate3D_choosePixelFormat( lastIndex = index; dbVal = mx_ptr[DOUBLEBUFFER]; - sVal = mx_ptr[STEREO]; + stereoVal = mx_ptr[STEREO]; antialiasVal = mx_ptr[ANTIALIASING]; + stencilVal = mx_ptr[STENCIL_SIZE]; (*env)->ReleaseIntArrayElements(env, attrList, mx_ptr, JNI_ABORT); @@ -1416,9 +1552,10 @@ jint JNICALL Java_javax_media_j3d_NativeConfigTemplate3D_choosePixelFormat( wglAttrs[index] = 0; wglAttrs[index+1] = 0; - pFormatInfo->onScreenPFormat = find_DB_AA_S_PixelFormat( hdc, pFormatInfo, - wglAttrs, sVal, dbVal, - antialiasVal, index); + pFormatInfo->onScreenPFormat = find_DB_AA_S_S_PixelFormat( hdc, pFormatInfo, + wglAttrs, stereoVal, + dbVal, antialiasVal, + stencilVal, index); if(pFormatInfo->onScreenPFormat >= 0) { /* Since the return pixel format support pbuffer, @@ -1453,12 +1590,13 @@ jint JNICALL Java_javax_media_j3d_NativeConfigTemplate3D_choosePixelFormat( wglAttrs[index] = 0; wglAttrs[index+1] = 0; - pFormatInfo->onScreenPFormat = find_DB_AA_S_PixelFormat( hdc, pFormatInfo, - wglAttrs, sVal, dbVal, - antialiasVal, index); + pFormatInfo->onScreenPFormat = find_DB_AA_S_S_PixelFormat( hdc, pFormatInfo, + wglAttrs, stereoVal, + dbVal, antialiasVal, + stencilVal, index); } else { - /* fprintf(stderr, "Fallback to use standard ChoosePixelFormat.\n"); */ + fprintf(stderr, "Fallback to use standard ChoosePixelFormat.\n"); pFormatInfo->onScreenPFormat = (jint) chooseSTDPixelFormat( env, screen, attrList, hdc, GL_FALSE); @@ -1567,6 +1705,29 @@ jboolean JNICALL Java_javax_media_j3d_NativeConfigTemplate3D_isStereoAvailable( } +JNIEXPORT jint JNICALL Java_javax_media_j3d_NativeConfigTemplate3D_getStencilSize( + JNIEnv *env, + jobject obj, + jlong pFormatInfo, + jboolean offScreen) +{ + + PixelFormatInfo *pfInfo = (PixelFormatInfo *) pFormatInfo; + if(offScreen) { + /* fprintf(stderr, "offScreen getStencilSize %d\n", + pfInfo->offScreenStencilSize); */ + + return pfInfo->offScreenStencilSize; + } + else { + /* fprintf(stderr, "onScreen getStencilSize %d\n", + pfInfo->onScreenStencilSize); */ + + return pfInfo->onScreenStencilSize; + } + +} + JNIEXPORT jboolean JNICALL Java_javax_media_j3d_NativeConfigTemplate3D_isDoubleBufferAvailable( diff --git a/src/native/ogl/NativeScreenInfo.c b/src/native/ogl/NativeScreenInfo.c index 1082770..ec14649 100644 --- a/src/native/ogl/NativeScreenInfo.c +++ b/src/native/ogl/NativeScreenInfo.c @@ -16,7 +16,7 @@ * of the Java 3D API. */ -#if defined(__linux__) +#if defined(LINUX) #define _GNU_SOURCE 1 #endif @@ -26,7 +26,7 @@ #include "gldefs.h" -#if defined(SOLARIS) || defined(__linux__) +#if defined(UNIX) #include <X11/X.h> #include <X11/Xlib.h> #include <X11/Xutil.h> @@ -37,7 +37,7 @@ #include <windows.h> #endif -#if defined(SOLARIS) || defined(__linux__) +#if defined(UNIX) /* @@ -94,38 +94,40 @@ Java_javax_media_j3d_NativeScreenInfo_queryGLX13( return JNI_FALSE; } -#if 0 /* Temporary disable this code segment because the ATI driver incorrectly - return 1.2 */ - - /* Check for glX 1.3 and higher */ - if (glXQueryVersion(dpy, &major, &minor)) { - /* fprintf(stderr, "Checking glX version : %d.%d\n",major, minor); */ - if (!(major == 1 && minor >= 3)) { - fprintf(stderr, "Java 3D ERROR : GLX version = %d.%d\n", major, minor); - fprintf(stderr, " GLX version 1.3 or higher is required\n"); - return JNI_FALSE; - } - } - else { + /* Query the GLX version number */ + if (!glXQueryVersion(dpy, &major, &minor)) { fprintf(stderr, "Java 3D ERROR : Unable to query GLX version\n"); fprintf(stderr, " GLX version 1.3 or higher is required\n"); return JNI_FALSE; } - -#elseif - + /*fprintf(stderr, "Checking GLX version : %d.%d\n", major, minor);*/ + tmpfp = (MYPFNGLXCHOOSEFBCONFIG)dlsym(RTLD_DEFAULT, "glXChooseFBConfig"); if (tmpfp == NULL) { - glXQueryVersion(dpy, &major, &minor); fprintf(stderr, "Java 3D ERROR : glXChooseFBConfig not found\n"); fprintf(stderr, " GLX version = %d.%d\n", major, minor); fprintf(stderr, " GLX version 1.3 or higher is required\n"); return JNI_FALSE; } -#endif - + /* Check for GLX 1.3 and higher */ + if (!(major == 1 && minor >= 3)) { + fprintf(stderr, "Java 3D WARNING : reported GLX version = %d.%d\n", major, minor); + fprintf(stderr, " GLX version 1.3 or higher is required\n"); + + fprintf(stderr, + " The reported version number may be incorrect. There is a known\n"); + fprintf(stderr, + " ATI driver bug in glXQueryVersion that incorrectly reports the GLX\n"); + fprintf(stderr, + " version as 1.2 when it really is 1.3, so Java 3D will attempt to\n"); + fprintf(stderr, + " run anyway.\n"); + + /*return JNI_FALSE;*/ + } + return JNI_TRUE; } diff --git a/src/native/ogl/NativeWSInfo.c b/src/native/ogl/NativeWSInfo.c index 46f1f56..de971d0 100644 --- a/src/native/ogl/NativeWSInfo.c +++ b/src/native/ogl/NativeWSInfo.c @@ -21,7 +21,7 @@ #include "gldefs.h" -#if defined(SOLARIS) || defined(__linux__) +#if defined(UNIX) #include <X11/X.h> #include <X11/Xlib.h> #include <X11/Xutil.h> diff --git a/src/native/ogl/RasterRetained.c b/src/native/ogl/RasterRetained.c index 2de7831..09d4e6d 100644 --- a/src/native/ogl/RasterRetained.c +++ b/src/native/ogl/RasterRetained.c @@ -21,6 +21,9 @@ #endif /* DEBUG */ +extern void throwAssert(JNIEnv *env, char *str); + + JNIEXPORT void JNICALL Java_javax_media_j3d_RasterRetained_execute(JNIEnv *env, jobject obj, jlong ctxInfo, jobject geo, @@ -149,9 +152,11 @@ void JNICALL Java_javax_media_j3d_RasterRetained_execute(JNIEnv *env, case FORMAT_BYTE_LA: glformat = GL_LUMINANCE_ALPHA; break; + case FORMAT_BYTE_GRAY: - case FORMAT_USHORT_GRAY: - /* TODO: throw exception */ + case FORMAT_USHORT_GRAY: + default: + throwAssert(env, "illegal format"); break; } glDrawPixels(w_raster, h_raster, glformat, GL_UNSIGNED_BYTE, @@ -374,7 +379,8 @@ void JNICALL Java_javax_media_j3d_RasterRetained_executeTiled(JNIEnv *env, break; case FORMAT_BYTE_GRAY: case FORMAT_USHORT_GRAY: - /* TODO: throw exception */ + default: + throwAssert(env, "illegal format"); break; } fprintf(stderr, "w_raster = %d, h_raster = %d, glformat = %d\n",w_raster, h_raster, glformat); diff --git a/src/native/ogl/build-linux-amd64.xml b/src/native/ogl/build-linux-amd64.xml index 55adffd..f2df165 100644 --- a/src/native/ogl/build-linux-amd64.xml +++ b/src/native/ogl/build-linux-amd64.xml @@ -18,6 +18,13 @@ <target name="compile"> + <!-- + /* + * TODO: To compile CG, add the following the the "link" command: + * -lCg -lCgGL -lGLU -lpthread + */ + --> + <echo message="Executing 64 bit native renderer build [${bldType}]"/> <!-- Create the build directories for linux --> @@ -29,12 +36,12 @@ <!-- Compile the c source files--> <!-- Inhibit all warning for 32 bit build. Any warning will be caught in the 64 bit build --> <exec dir="${build}/${platform}/${bldType}/native/ogl/objs" executable="gcc"> - <arg line="-m64 -march=k8 -I${java.home}/../include -I${java.home}/../include/linux -I${javahCoreTarget} -${bldFlag} -DLINUX -c ${oglsrc}/DrawingSurfaceObjectAWT.c ${oglsrc}/Canvas3D.c ${oglsrc}/GraphicsContext3D.c ${oglsrc}/NativeWSInfo.c ${oglsrc}/NativeScreenInfo.c ${oglsrc}/NativeConfigTemplate3D.c ${oglsrc}/MasterControl.c ${oglsrc}/RasterRetained.c ${oglsrc}/CompressedGeometryRetained.c ${oglsrc}/GeometryArrayRetained.c ${oglsrc}/Attributes.c ${oglsrc}/Lights.c ${oglsrc}/NativeAPIInfo.c"/> + <arg line="-m64 -march=k8 -I${java.home}/../include -I${java.home}/../include/linux -I${javahCoreTarget} ${bldFlag} -DLINUX -c ${oglsrc}/DrawingSurfaceObjectAWT.c ${oglsrc}/Canvas3D.c ${oglsrc}/GraphicsContext3D.c ${oglsrc}/NativeWSInfo.c ${oglsrc}/NativeScreenInfo.c ${oglsrc}/NativeConfigTemplate3D.c ${oglsrc}/MasterControl.c ${oglsrc}/RasterRetained.c ${oglsrc}/GeometryArrayRetained.c ${oglsrc}/Attributes.c ${oglsrc}/CgShaderProgram.c ${oglsrc}/GLSLShaderProgram.c ${oglsrc}/Lights.c ${oglsrc}/NativeAPIInfo.c"/> </exec> <!-- Create the library file--> <exec dir="${build}/${platform}/${bldType}/native/ogl/objs" executable="ld"> - <arg line="DrawingSurfaceObjectAWT.o Canvas3D.o GraphicsContext3D.o NativeWSInfo.o NativeScreenInfo.o NativeConfigTemplate3D.o MasterControl.o RasterRetained.o CompressedGeometryRetained.o GeometryArrayRetained.o Attributes.o Lights.o NativeAPIInfo.o -G -z defs -L/usr/X11R6/lib64 -ldl -lGL -lX11 -lXext -lm -lnsl -lc -R/usr/openwin/lib -L${java.home}/lib/amd64 -ljawt -L${java.home}/lib/amd64/server -ljvm -o libj3dcore-ogl.so"/> + <arg line="DrawingSurfaceObjectAWT.o Canvas3D.o GraphicsContext3D.o NativeWSInfo.o NativeScreenInfo.o NativeConfigTemplate3D.o MasterControl.o RasterRetained.o GeometryArrayRetained.o Attributes.o CgShaderProgram.o GLSLShaderProgram.o Lights.o NativeAPIInfo.o -G -z defs -L/usr/X11R6/lib64 -ldl -lGL -lX11 -lXext -lm -lnsl -lc -R/usr/openwin/lib -L${java.home}/lib/amd64 -ljawt -L${java.home}/lib/amd64/server -ljvm -o libj3dcore-ogl.so"/> </exec> <!-- Copy the copyright library file --> diff --git a/src/native/ogl/build-linux-i586.xml b/src/native/ogl/build-linux-i586.xml index a9524cf..f70e067 100644 --- a/src/native/ogl/build-linux-i586.xml +++ b/src/native/ogl/build-linux-i586.xml @@ -16,30 +16,59 @@ <!-- Ant file for building native ogl renderer files for Solaris --> <project name="Java 3D" default="compile"> - <target name="compile"> - - <echo message="Executing 32 bit native renderer build [${bldType}]"/> - + <target name="init" depends="init-cg,init-nocg"> <!-- Create the build directories for linux --> <mkdir dir="${build}/${platform}/${bldType}/native/ogl/objs"/> <mkdir dir="${build}/${platform}/${bldType}/lib/i386"/> <property name="oglsrc" location="${src}/native/ogl"/> + </target> + + <target name="init-cg" if="build.cg"> + <property name="cflags.cg" value="-DCOMPILE_CG_SHADERS=1"/> + </target> + + <target name="init-nocg" unless="build.cg"> + <property name="cflags.cg" value=""/> + </target> + + <target name="compile-ogl"> + <echo message="Executing 32 bit native renderer build [${bldType}]"/> <!-- Compile the c source files--> <!-- Inhibit all warning for 32 bit build. Any warning will be caught in the 64 bit build --> <exec dir="${build}/${platform}/${bldType}/native/ogl/objs" executable="gcc"> - <arg line="-w -m32 -mcpu=i386 -I${java.home}/../include -I${java.home}/../include/linux -I/usr/openwin/include -I${javahCoreTarget} -${bldFlag} -DLINUX -c ${oglsrc}/DrawingSurfaceObjectAWT.c ${oglsrc}/Canvas3D.c ${oglsrc}/GraphicsContext3D.c ${oglsrc}/NativeWSInfo.c ${oglsrc}/NativeScreenInfo.c ${oglsrc}/NativeConfigTemplate3D.c ${oglsrc}/MasterControl.c ${oglsrc}/RasterRetained.c ${oglsrc}/CompressedGeometryRetained.c ${oglsrc}/GeometryArrayRetained.c ${oglsrc}/Attributes.c ${oglsrc}/Lights.c ${oglsrc}/NativeAPIInfo.c"/> + <arg line="-w -m32 -mcpu=i386 -I${java.home}/../include -I${java.home}/../include/linux -I/usr/openwin/include -I${javahCoreTarget} ${bldFlag} -DLINUX ${cflags.cg} -c ${oglsrc}/DrawingSurfaceObjectAWT.c ${oglsrc}/Canvas3D.c ${oglsrc}/GraphicsContext3D.c ${oglsrc}/NativeWSInfo.c ${oglsrc}/NativeScreenInfo.c ${oglsrc}/NativeConfigTemplate3D.c ${oglsrc}/MasterControl.c ${oglsrc}/RasterRetained.c ${oglsrc}/GeometryArrayRetained.c ${oglsrc}/Attributes.c ${oglsrc}/CgShaderProgram.c ${oglsrc}/GLSLShaderProgram.c ${oglsrc}/Lights.c ${oglsrc}/NativeAPIInfo.c"/> </exec> <!-- Create the library file--> <exec dir="${build}/${platform}/${bldType}/native/ogl/objs" executable="ld"> - <arg line="DrawingSurfaceObjectAWT.o Canvas3D.o GraphicsContext3D.o NativeWSInfo.o NativeScreenInfo.o NativeConfigTemplate3D.o MasterControl.o RasterRetained.o CompressedGeometryRetained.o GeometryArrayRetained.o Attributes.o Lights.o NativeAPIInfo.o -G -z defs -L/usr/X11R6/lib -ldl -lGL -lX11 -lXext -lm -lnsl -lc -R/usr/openwin/lib -L${java.home}/lib/i386 -ljawt -L${java.home}/lib/i386/server -ljvm -o libj3dcore-ogl.so"/> + <arg line="DrawingSurfaceObjectAWT.o Canvas3D.o GraphicsContext3D.o NativeWSInfo.o NativeScreenInfo.o NativeConfigTemplate3D.o MasterControl.o RasterRetained.o GeometryArrayRetained.o Attributes.o CgShaderProgram.o GLSLShaderProgram.o Lights.o NativeAPIInfo.o -G -z defs -L/usr/X11R6/lib -ldl -lGL -lX11 -lXext -lm -lnsl -lc -R/usr/openwin/lib -L${java.home}/lib/i386 -ljawt -L${java.home}/lib/i386/server -ljvm -o libj3dcore-ogl.so"/> </exec> - <!-- Copy the copyright library file --> - <copy file="${build}/${platform}/${bldType}/native/ogl/objs/libj3dcore-ogl.so" - todir="${build}/${platform}/${bldType}/lib/i386"/> + </target> + + <target name="compile-ogl-cg" if="build.cg"> + <!-- Compile the wrapper --> + <exec dir="${build}/${platform}/${bldType}/native/ogl/objs" executable="gcc"> + <arg line="-w -m32 -mcpu=i386 -I${java.home}/../include -I${java.home}/../include/linux -I/usr/openwin/include -I${javahCoreTarget} ${bldFlag} -DLINUX ${cflags.cg} -c ${oglsrc}/CgWrapper.c"/> + </exec> + + <!-- Create the wrapper library --> + <exec dir="${build}/${platform}/${bldType}/native/ogl/objs" executable="ld"> + <arg line="CgWrapper.o -G -z defs -L/usr/X11R6/lib -ldl -lCg -lCgGL -lpthread -lGL -lX11 -lXext -lm -lnsl -lc -R/usr/openwin/lib -L${java.home}/lib/i386 -ljawt -L${java.home}/lib/i386/server -ljvm -o libj3dcore-ogl-cg.so"/> + </exec> + + </target> + + <target name="compile" depends="init,compile-ogl,compile-ogl-cg"> + + <!-- Copy the library file --> + <copy todir="${build}/${platform}/${bldType}/lib/i386"> + <fileset dir="${build}/${platform}/${bldType}/native/ogl/objs" + includes="libj3dcore-ogl*.so" + /> + </copy> </target> @@ -48,8 +77,11 @@ <mkdir dir="${dist}/${platform}/lib/i386"/> <!-- Copy the library files --> - <copy file="${build}/${platform}/opt/lib/i386/libj3dcore-ogl.so" - todir="${dist}/${platform}/lib/i386"/> + <copy todir="${dist}/${platform}/lib/i386"> + <fileset dir="${build}/${platform}/opt/lib/i386" + includes="libj3dcore-ogl*.so" + /> + </copy> </target> diff --git a/src/native/ogl/build-linux-ia64.xml b/src/native/ogl/build-linux-ia64.xml index ff24611..20d7f4d 100644 --- a/src/native/ogl/build-linux-ia64.xml +++ b/src/native/ogl/build-linux-ia64.xml @@ -18,6 +18,13 @@ <target name="compile"> + <!-- + /* + * TODO: To compile CG, add the following the the "link" command: + * -lCg -lCgGL -lGLU -lpthread + */ + --> + <echo message="Executing 64 bit native renderer build [${bldType}]"/> <!-- Create the build directories for linux --> @@ -28,14 +35,14 @@ <!-- Compile the c source files; based on build-linux-amd64.xml--> <exec dir="${build}/${platform}/${bldType}/native/ogl/objs" executable="gcc"> - <arg line="-I${java.home}/../include -I${java.home}/../include/linux -I${javahCoreTarget} -${bldFlag} -DLINUX -c ${oglsrc}/DrawingSurfaceObjectAWT.c ${oglsrc}/Canvas3D.c ${oglsrc}/GraphicsContext3D.c ${oglsrc}/NativeWSInfo.c ${oglsrc}/NativeScreenInfo.c ${oglsrc}/NativeConfigTemplate3D.c ${oglsrc}/MasterControl.c ${oglsrc}/RasterRetained.c ${oglsrc}/CompressedGeometryRetained.c ${oglsrc}/GeometryArrayRetained.c ${oglsrc}/Attributes.c ${oglsrc}/Lights.c ${oglsrc}/NativeAPIInfo.c"/> + <arg line="-I${java.home}/../include -I${java.home}/../include/linux -I${javahCoreTarget} ${bldFlag} -DLINUX -c ${oglsrc}/DrawingSurfaceObjectAWT.c ${oglsrc}/Canvas3D.c ${oglsrc}/GraphicsContext3D.c ${oglsrc}/NativeWSInfo.c ${oglsrc}/NativeScreenInfo.c ${oglsrc}/NativeConfigTemplate3D.c ${oglsrc}/MasterControl.c ${oglsrc}/RasterRetained.c ${oglsrc}/GeometryArrayRetained.c ${oglsrc}/Attributes.c ${oglsrc}/CgShaderProgram.c ${oglsrc}/GLSLShaderProgram.c ${oglsrc}/Lights.c ${oglsrc}/NativeAPIInfo.c"/> </exec> <!-- Create the library file; based on build-linux-amd64.xml--> <!-- Must use gcc to link, not ld, hence also need -shared; refer to http://www.gelato.unsw.edu.au/linux-ia64/0006/0212.html --> <!-- Removed -R/usr/openwin/lib - an ld specific option (should be a filename, not a dir?!?) --> <exec dir="${build}/${platform}/${bldType}/native/ogl/objs" executable="gcc"> - <arg line="DrawingSurfaceObjectAWT.o Canvas3D.o GraphicsContext3D.o NativeWSInfo.o NativeScreenInfo.o NativeConfigTemplate3D.o MasterControl.o RasterRetained.o CompressedGeometryRetained.o GeometryArrayRetained.o Attributes.o Lights.o NativeAPIInfo.o -G -z defs -shared -L/usr/X11R6/lib -ldl -lGL -lX11 -lXext -lm -lnsl -lc -L${java.home}/lib/ia64 -ljawt -L${java.home}/lib/ia64/server -ljvm -o libj3dcore-ogl.so"/> + <arg line="DrawingSurfaceObjectAWT.o Canvas3D.o GraphicsContext3D.o NativeWSInfo.o NativeScreenInfo.o NativeConfigTemplate3D.o MasterControl.o RasterRetained.o GeometryArrayRetained.o Attributes.o CgShaderProgram.o GLSLShaderProgram.o Lights.o NativeAPIInfo.o -G -z defs -shared -L/usr/X11R6/lib -ldl -lGL -lX11 -lXext -lm -lnsl -lc -L${java.home}/lib/ia64 -ljawt -L${java.home}/lib/ia64/server -ljvm -o libj3dcore-ogl.so"/> </exec> <!-- Copy the copyright library file --> diff --git a/src/native/ogl/build-linux-ppc.xml b/src/native/ogl/build-linux-ppc.xml new file mode 100644 index 0000000..1149d05 --- /dev/null +++ b/src/native/ogl/build-linux-ppc.xml @@ -0,0 +1,63 @@ +<?xml version="1.0"?> +<!-- +/* + * $RCSfile$ + * + * Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved. + * + * Use is subject to license terms. + * + * $Revision$ + * $Date$ + * $State$ + */ + --> + +<!-- Ant file for building native ogl renderer files for Solaris --> +<project name="Java 3D" default="compile"> + + <target name="compile"> + + <!-- + /* + * TODO: To compile CG, add the following the the "link" command: + * -lCg -lCgGL -lGLU -lpthread + */ + --> + + <echo message="Executing 32 bit native renderer build [${bldType}]"/> + + <!-- Create the build directories for linux --> + <mkdir dir="${build}/${platform}/${bldType}/native/ogl/objs"/> + <mkdir dir="${build}/${platform}/${bldType}/bin"/> + + <property name="oglsrc" location="${src}/native/ogl"/> + + <!-- Compile the c source files--> + <!-- Inhibit all warning for 32 bit build. Any warning will be caught in the 64 bit build --> + <exec dir="${build}/${platform}/${bldType}/native/ogl/objs" executable="gcc"> + <arg line="-w -I${java.home}/../include -I${java.home}/../include/linux -I/usr/X11R6/include -I${javahCoreTarget} ${bldFlag} -DLINUX -c ${oglsrc}/DrawingSurfaceObjectAWT.c ${oglsrc}/Canvas3D.c ${oglsrc}/GraphicsContext3D.c ${oglsrc}/NativeWSInfo.c ${oglsrc}/NativeScreenInfo.c ${oglsrc}/NativeConfigTemplate3D.c ${oglsrc}/MasterControl.c ${oglsrc}/RasterRetained.c ${oglsrc}/CompressedGeometryRetained.c ${oglsrc}/GeometryArrayRetained.c ${oglsrc}/Attributes.c ${oglsrc}/CgShaderProgram.c ${oglsrc}/GLSLShaderProgram.c ${oglsrc}/Lights.c ${oglsrc}/NativeAPIInfo.c"/> + </exec> + + <!-- Create the library file--> + <exec dir="${build}/${platform}/${bldType}/native/ogl/objs" executable="ld"> + <arg line="DrawingSurfaceObjectAWT.o Canvas3D.o GraphicsContext3D.o NativeWSInfo.o NativeScreenInfo.o NativeConfigTemplate3D.o MasterControl.o RasterRetained.o CompressedGeometryRetained.o GeometryArrayRetained.o Attributes.o CgShaderProgram.o GLSLShaderProgram.o Lights.o NativeAPIInfo.o -G -z defs -L/usr/X11R6/lib -ldl -lGL -lX11 -lXext -lm -lnsl -lc -R/usr/openwin/lib -L${java.home}/bin -ljawt -L${java.home}/bin/classic -ljvm -o libj3dcore-ogl.so"/> + </exec> + + <!-- Copy the copyright library file --> + <copy file="${build}/${platform}/${bldType}/native/ogl/objs/libj3dcore-ogl.so" + todir="${build}/${platform}/${bldType}/bin"/> + + </target> + + <target name="dist"> + <!-- Create the distribution directory --> + <mkdir dir="${dist}/${platform}/bin"/> + + <!-- Copy the library files --> + <copy file="${build}/${platform}/opt/bin/libj3dcore-ogl.so" + todir="${dist}/${platform}/bin"/> + + </target> + +</project> diff --git a/src/native/ogl/build-solaris-sparc-forte.xml b/src/native/ogl/build-solaris-sparc-forte.xml index 6eb2d53..453d493 100644 --- a/src/native/ogl/build-solaris-sparc-forte.xml +++ b/src/native/ogl/build-solaris-sparc-forte.xml @@ -30,12 +30,12 @@ <!-- Compile the c source files--> <!-- Inhibit all warning for 32 bit build. Any warning will be caught in the 64 bit build --> <exec dir="${build}/${platform}/${bldType}/native/ogl/objs" executable="cc"> - <arg line="-v -xCC -xchip=ultra -xarch=v8a -xcode=pic32 -I${java.home}/../include -I${java.home}/../include/solaris -I/usr/openwin/include -I${javahCoreTarget} -${bldFlag} -DSOLARIS -c ${oglsrc}/DrawingSurfaceObjectAWT.c ${oglsrc}/Canvas3D.c ${oglsrc}/GraphicsContext3D.c ${oglsrc}/NativeWSInfo.c ${oglsrc}/NativeScreenInfo.c ${oglsrc}/NativeConfigTemplate3D.c ${oglsrc}/MasterControl.c ${oglsrc}/RasterRetained.c ${oglsrc}/CompressedGeometryRetained.c ${oglsrc}/GeometryArrayRetained.c ${oglsrc}/Attributes.c ${oglsrc}/Lights.c ${oglsrc}/NativeAPIInfo.c"/> + <arg line="-v -xCC -xchip=ultra -xarch=v8a -xcode=pic32 -I${java.home}/../include -I${java.home}/../include/solaris -I/usr/openwin/include -I${javahCoreTarget} ${bldFlag} -DSOLARIS -c ${oglsrc}/DrawingSurfaceObjectAWT.c ${oglsrc}/Canvas3D.c ${oglsrc}/GraphicsContext3D.c ${oglsrc}/NativeWSInfo.c ${oglsrc}/NativeScreenInfo.c ${oglsrc}/NativeConfigTemplate3D.c ${oglsrc}/MasterControl.c ${oglsrc}/RasterRetained.c ${oglsrc}/GeometryArrayRetained.c ${oglsrc}/Attributes.c ${oglsrc}/CgShaderProgram.c ${oglsrc}/GLSLShaderProgram.c ${oglsrc}/Lights.c ${oglsrc}/NativeAPIInfo.c"/> </exec> <!-- Create the library file--> <exec dir="${build}/${platform}/${bldType}/native/ogl/objs" executable="ld"> - <arg line="DrawingSurfaceObjectAWT.o Canvas3D.o GraphicsContext3D.o NativeWSInfo.o NativeScreenInfo.o NativeConfigTemplate3D.o MasterControl.o RasterRetained.o CompressedGeometryRetained.o GeometryArrayRetained.o Attributes.o Lights.o NativeAPIInfo.o -G -z defs -L/usr/openwin/lib -ldga -ldl -lGL -lX11 -lXext -lm -lsocket -lnsl -lc -R/usr/openwin/lib -L${java.home}/lib/sparc -L${java.home}/lib/sparc/motif21 -ljawt -L${java.home}/lib/sparc/server -ljvm -o libj3dcore-ogl.so"/> + <arg line="DrawingSurfaceObjectAWT.o Canvas3D.o GraphicsContext3D.o NativeWSInfo.o NativeScreenInfo.o NativeConfigTemplate3D.o MasterControl.o RasterRetained.o GeometryArrayRetained.o Attributes.o CgShaderProgram.o GLSLShaderProgram.o Lights.o NativeAPIInfo.o -G -z defs -L/usr/openwin/lib -ldga -ldl -lGL -lX11 -lXext -lm -lsocket -lnsl -lc -R/usr/openwin/lib -L${java.home}/lib/sparc -L${java.home}/lib/sparc/motif21 -ljawt -L${java.home}/lib/sparc/server -ljvm -o libj3dcore-ogl.so"/> </exec> <!-- Copy the copyright library file --> @@ -51,12 +51,12 @@ <!-- Compile the c source files--> <exec dir="${build}/${platform}/${bldType}/native/ogl/objs/sparcv9" executable="cc"> - <arg line="-v -xCC -xchip=ultra -xarch=v9a -xcode=pic32 -I${java.home}/../include -I${java.home}/../include/solaris -I/usr/openwin/include -I${javahCoreTarget} -${bldFlag} -DSOLARIS -c ${oglsrc}/DrawingSurfaceObjectAWT.c ${oglsrc}/Canvas3D.c ${oglsrc}/GraphicsContext3D.c ${oglsrc}/NativeWSInfo.c ${oglsrc}/NativeScreenInfo.c ${oglsrc}/NativeConfigTemplate3D.c ${oglsrc}/MasterControl.c ${oglsrc}/RasterRetained.c ${oglsrc}/CompressedGeometryRetained.c ${oglsrc}/GeometryArrayRetained.c ${oglsrc}/Attributes.c ${oglsrc}/Lights.c ${oglsrc}/NativeAPIInfo.c"/> + <arg line="-v -xCC -xchip=ultra -xarch=v9a -xcode=pic32 -I${java.home}/../include -I${java.home}/../include/solaris -I/usr/openwin/include -I${javahCoreTarget} ${bldFlag} -DSOLARIS -c ${oglsrc}/DrawingSurfaceObjectAWT.c ${oglsrc}/Canvas3D.c ${oglsrc}/GraphicsContext3D.c ${oglsrc}/NativeWSInfo.c ${oglsrc}/NativeScreenInfo.c ${oglsrc}/NativeConfigTemplate3D.c ${oglsrc}/MasterControl.c ${oglsrc}/RasterRetained.c ${oglsrc}/GeometryArrayRetained.c ${oglsrc}/Attributes.c ${oglsrc}/CgShaderProgram.c ${oglsrc}/GLSLShaderProgram.c ${oglsrc}/Lights.c ${oglsrc}/NativeAPIInfo.c"/> </exec> <!-- Create the library file--> <exec dir="${build}/${platform}/${bldType}/native/ogl/objs/sparcv9" executable="ld"> - <arg line="DrawingSurfaceObjectAWT.o Canvas3D.o GraphicsContext3D.o NativeWSInfo.o NativeScreenInfo.o NativeConfigTemplate3D.o MasterControl.o RasterRetained.o CompressedGeometryRetained.o GeometryArrayRetained.o Attributes.o Lights.o NativeAPIInfo.o -G -z defs -L/usr/openwin/lib/sparcv9 -ldga -ldl -lGL -lX11 -lXext -lm -lsocket -lnsl -lc -R/usr/openwin/lib/sparcv9 -L${java.home}/lib/sparcv9 -L${java.home}/lib/sparcv9/motif21 -ljawt -L${java.home}/lib/sparcv9/server -ljvm -o libj3dcore-ogl.so"/> + <arg line="DrawingSurfaceObjectAWT.o Canvas3D.o GraphicsContext3D.o NativeWSInfo.o NativeScreenInfo.o NativeConfigTemplate3D.o MasterControl.o RasterRetained.o GeometryArrayRetained.o Attributes.o CgShaderProgram.o GLSLShaderProgram.o Lights.o NativeAPIInfo.o -G -z defs -L/usr/openwin/lib/sparcv9 -ldga -ldl -lGL -lX11 -lXext -lm -lsocket -lnsl -lc -R/usr/openwin/lib/sparcv9 -L${java.home}/lib/sparcv9 -L${java.home}/lib/sparcv9/motif21 -ljawt -L${java.home}/lib/sparcv9/server -ljvm -o libj3dcore-ogl.so"/> </exec> <!-- Copy the copyright library file --> diff --git a/src/native/ogl/build-solaris-sparc-gcc.xml b/src/native/ogl/build-solaris-sparc-gcc.xml index 1bd4575..fdf7a97 100644 --- a/src/native/ogl/build-solaris-sparc-gcc.xml +++ b/src/native/ogl/build-solaris-sparc-gcc.xml @@ -30,12 +30,12 @@ <!-- Compile the c source files--> <!-- Inhibit all warning for 32 bit build. Any warning will be caught in the 64 bit build --> <exec dir="${build}/${platform}/${bldType}/native/ogl/objs" executable="gcc"> - <arg line="-w -m32 -mcpu=v9 -I${java.home}/../include -I${java.home}/../include/solaris -I/usr/openwin/include -I${javahCoreTarget} -${bldFlag} -DSOLARIS -c ${oglsrc}/DrawingSurfaceObjectAWT.c ${oglsrc}/Canvas3D.c ${oglsrc}/GraphicsContext3D.c ${oglsrc}/NativeWSInfo.c ${oglsrc}/NativeScreenInfo.c ${oglsrc}/NativeConfigTemplate3D.c ${oglsrc}/MasterControl.c ${oglsrc}/RasterRetained.c ${oglsrc}/CompressedGeometryRetained.c ${oglsrc}/GeometryArrayRetained.c ${oglsrc}/Attributes.c ${oglsrc}/Lights.c ${oglsrc}/NativeAPIInfo.c"/> + <arg line="-w -m32 -mcpu=v9 -I${java.home}/../include -I${java.home}/../include/solaris -I/usr/openwin/include -I${javahCoreTarget} ${bldFlag} -DSOLARIS -c ${oglsrc}/DrawingSurfaceObjectAWT.c ${oglsrc}/Canvas3D.c ${oglsrc}/GraphicsContext3D.c ${oglsrc}/NativeWSInfo.c ${oglsrc}/NativeScreenInfo.c ${oglsrc}/NativeConfigTemplate3D.c ${oglsrc}/MasterControl.c ${oglsrc}/RasterRetained.c ${oglsrc}/GeometryArrayRetained.c ${oglsrc}/Attributes.c ${oglsrc}/CgShaderProgram.c ${oglsrc}/GLSLShaderProgram.c ${oglsrc}/Lights.c ${oglsrc}/NativeAPIInfo.c"/> </exec> <!-- Create the library file--> <exec dir="${build}/${platform}/${bldType}/native/ogl/objs" executable="ld"> - <arg line="DrawingSurfaceObjectAWT.o Canvas3D.o GraphicsContext3D.o NativeWSInfo.o NativeScreenInfo.o NativeConfigTemplate3D.o MasterControl.o RasterRetained.o CompressedGeometryRetained.o GeometryArrayRetained.o Attributes.o Lights.o NativeAPIInfo.o -G -z defs -L/usr/openwin/lib -ldga -ldl -lGL -lX11 -lXext -lm -lsocket -lnsl -lc -R/usr/openwin/lib -L${java.home}/lib/sparc -L${java.home}/lib/sparc/motif21 -ljawt -L${java.home}/lib/sparc/server -ljvm -o libj3dcore-ogl.so"/> + <arg line="DrawingSurfaceObjectAWT.o Canvas3D.o GraphicsContext3D.o NativeWSInfo.o NativeScreenInfo.o NativeConfigTemplate3D.o MasterControl.o RasterRetained.o GeometryArrayRetained.o Attributes.o CgShaderProgram.o GLSLShaderProgram.o Lights.o NativeAPIInfo.o -G -z defs -L/usr/openwin/lib -ldga -ldl -lGL -lX11 -lXext -lm -lsocket -lnsl -lc -R/usr/openwin/lib -L${java.home}/lib/sparc -L${java.home}/lib/sparc/motif21 -ljawt -L${java.home}/lib/sparc/server -ljvm -o libj3dcore-ogl.so"/> </exec> <!-- Copy the copyright library file --> @@ -51,12 +51,12 @@ <!-- Compile the c source files--> <exec dir="${build}/${platform}/${bldType}/native/ogl/objs/sparcv9" executable="gcc"> - <arg line="-m64 -mcpu=v9 -I${java.home}/../include -I${java.home}/../include/solaris -I/usr/openwin/include -I${javahCoreTarget} -${bldFlag} -DSOLARIS -c ${oglsrc}/DrawingSurfaceObjectAWT.c ${oglsrc}/Canvas3D.c ${oglsrc}/GraphicsContext3D.c ${oglsrc}/NativeWSInfo.c ${oglsrc}/NativeScreenInfo.c ${oglsrc}/NativeConfigTemplate3D.c ${oglsrc}/MasterControl.c ${oglsrc}/RasterRetained.c ${oglsrc}/CompressedGeometryRetained.c ${oglsrc}/GeometryArrayRetained.c ${oglsrc}/Attributes.c ${oglsrc}/Lights.c ${oglsrc}/NativeAPIInfo.c"/> + <arg line="-m64 -mcpu=v9 -I${java.home}/../include -I${java.home}/../include/solaris -I/usr/openwin/include -I${javahCoreTarget} ${bldFlag} -DSOLARIS -c ${oglsrc}/DrawingSurfaceObjectAWT.c ${oglsrc}/Canvas3D.c ${oglsrc}/GraphicsContext3D.c ${oglsrc}/NativeWSInfo.c ${oglsrc}/NativeScreenInfo.c ${oglsrc}/NativeConfigTemplate3D.c ${oglsrc}/MasterControl.c ${oglsrc}/RasterRetained.c ${oglsrc}/GeometryArrayRetained.c ${oglsrc}/Attributes.c ${oglsrc}/CgShaderProgram.c ${oglsrc}/GLSLShaderProgram.c ${oglsrc}/Lights.c ${oglsrc}/NativeAPIInfo.c"/> </exec> <!-- Create the library file--> <exec dir="${build}/${platform}/${bldType}/native/ogl/objs/sparcv9" executable="ld"> - <arg line="DrawingSurfaceObjectAWT.o Canvas3D.o GraphicsContext3D.o NativeWSInfo.o NativeScreenInfo.o NativeConfigTemplate3D.o MasterControl.o RasterRetained.o CompressedGeometryRetained.o GeometryArrayRetained.o Attributes.o Lights.o NativeAPIInfo.o -G -z defs -L/usr/openwin/lib/sparcv9 -ldga -ldl -lGL -lX11 -lXext -lm -lsocket -lnsl -lc -R/usr/openwin/lib/sparcv9 -L${java.home}/lib/sparcv9 -L${java.home}/lib/sparcv9/motif21 -ljawt -L${java.home}/lib/sparcv9/server -ljvm -o libj3dcore-ogl.so"/> + <arg line="DrawingSurfaceObjectAWT.o Canvas3D.o GraphicsContext3D.o NativeWSInfo.o NativeScreenInfo.o NativeConfigTemplate3D.o MasterControl.o RasterRetained.o GeometryArrayRetained.o Attributes.o CgShaderProgram.o GLSLShaderProgram.o Lights.o NativeAPIInfo.o -G -z defs -L/usr/openwin/lib/sparcv9 -ldga -ldl -lGL -lX11 -lXext -lm -lsocket -lnsl -lc -R/usr/openwin/lib/sparcv9 -L${java.home}/lib/sparcv9 -L${java.home}/lib/sparcv9/motif21 -ljawt -L${java.home}/lib/sparcv9/server -ljvm -o libj3dcore-ogl.so"/> </exec> <!-- Copy the copyright library file --> diff --git a/src/native/ogl/build-solaris-x86-forte.xml b/src/native/ogl/build-solaris-x86-forte.xml new file mode 100644 index 0000000..942319a --- /dev/null +++ b/src/native/ogl/build-solaris-x86-forte.xml @@ -0,0 +1,88 @@ +<?xml version="1.0"?> + +<!-- +/* + * $RCSfile$ + * + * Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved. + * + * Use is subject to license terms. + * + * $Revision$ + * $Date$ + * $State$ + */ + --> + +<!-- Ant file for building native ogl renderer files for Solaris --> +<project name="Java 3D" default="compile"> + + <target name="compile"> + + <echo message="Executing 32 bit native renderer build [${bldType}]"/> + + <!-- Create the build directories for i386 --> + <mkdir dir="${build}/${platform}/${bldType}/native/ogl/objs"/> + <mkdir dir="${build}/${platform}/${bldType}/lib/i386"/> + + <property name="oglsrc" location="${src}/native/ogl"/> + + <!-- Compile the c source files--> + <!-- Inhibit all warning for 32 bit build. Any warning will be caught in the 64 bit build --> + <exec dir="${build}/${platform}/${bldType}/native/ogl/objs" executable="cc"> + <arg line="-v -xCC -xchip=pentium3 -xarch=generic -KPIC -I${java.home}/../include -I${java.home}/../include/solaris -I/usr/openwin/include -I${javahCoreTarget} ${bldFlag} -DSOLARIS -c ${oglsrc}/DrawingSurfaceObjectAWT.c ${oglsrc}/Canvas3D.c ${oglsrc}/GraphicsContext3D.c ${oglsrc}/NativeWSInfo.c ${oglsrc}/NativeScreenInfo.c ${oglsrc}/NativeConfigTemplate3D.c ${oglsrc}/MasterControl.c ${oglsrc}/RasterRetained.c ${oglsrc}/GeometryArrayRetained.c ${oglsrc}/Attributes.c ${oglsrc}/CgShaderProgram.c ${oglsrc}/GLSLShaderProgram.c ${oglsrc}/Lights.c ${oglsrc}/NativeAPIInfo.c"/> + </exec> + + <!-- Create the library file--> + <exec dir="${build}/${platform}/${bldType}/native/ogl/objs" executable="ld"> + <arg line="DrawingSurfaceObjectAWT.o Canvas3D.o GraphicsContext3D.o NativeWSInfo.o NativeScreenInfo.o NativeConfigTemplate3D.o MasterControl.o RasterRetained.o GeometryArrayRetained.o Attributes.o CgShaderProgram.o GLSLShaderProgram.o Lights.o NativeAPIInfo.o -G -z defs -L/usr/openwin/lib -ldl -lGL -lX11 -lXext -lm -lsocket -lnsl -lc -R/usr/openwin/lib -L${java.home}/lib/i386 -L${java.home}/lib/i386/motif21 -ljawt -L${java.home}/lib/i386/server -ljvm -o libj3dcore-ogl.so"/> + </exec> + + <!-- Copy the copyright library file --> + <copy file="${build}/${platform}/${bldType}/native/ogl/objs/libj3dcore-ogl.so" + todir="${build}/${platform}/${bldType}/lib/i386"/> + + <!-- + /* + * TODO: only do the 64-bit build if isSolarisOnX86_64 property is + * set, indicating that a 64-bit JVM is available + */ + --> + +<!-- ********************************************************************** --> + <echo message="Executing 64 bit native renderer build [${bldType}]"/> + + <!-- Create the build directories for amd64 --> + <mkdir dir="${build}/${platform}/${bldType}/native/ogl/objs/amd64"/> + <mkdir dir="${build}/${platform}/${bldType}/lib/amd64"/> + + <!-- Compile the c source files--> + <exec dir="${build}/${platform}/${bldType}/native/ogl/objs/amd64" executable="cc"> + <arg line="-v -xCC -xchip=opteron -xarch=generic64 -KPIC -I${java.home}/../include -I${java.home}/../include/solaris -I/usr/openwin/include -I${javahCoreTarget} ${bldFlag} -DSOLARIS -c ${oglsrc}/DrawingSurfaceObjectAWT.c ${oglsrc}/Canvas3D.c ${oglsrc}/GraphicsContext3D.c ${oglsrc}/NativeWSInfo.c ${oglsrc}/NativeScreenInfo.c ${oglsrc}/NativeConfigTemplate3D.c ${oglsrc}/MasterControl.c ${oglsrc}/RasterRetained.c ${oglsrc}/GeometryArrayRetained.c ${oglsrc}/Attributes.c ${oglsrc}/CgShaderProgram.c ${oglsrc}/GLSLShaderProgram.c ${oglsrc}/Lights.c ${oglsrc}/NativeAPIInfo.c"/> + </exec> + + <!-- Create the library file--> + <exec dir="${build}/${platform}/${bldType}/native/ogl/objs/amd64" executable="ld"> + <arg line="DrawingSurfaceObjectAWT.o Canvas3D.o GraphicsContext3D.o NativeWSInfo.o NativeScreenInfo.o NativeConfigTemplate3D.o MasterControl.o RasterRetained.o GeometryArrayRetained.o Attributes.o CgShaderProgram.o GLSLShaderProgram.o Lights.o NativeAPIInfo.o -G -z defs -L/usr/openwin/lib/amd64 -ldl -lGL -lX11 -lXext -lm -lsocket -lnsl -lc -R/usr/openwin/lib/amd64 -L${java.home}/lib/amd64 -L${java.home}/lib/amd64/motif21 -ljawt -L${java.home}/lib/amd64/server -ljvm -o libj3dcore-ogl.so"/> + </exec> + + <!-- Copy the copyright library file --> + <copy file="${build}/${platform}/${bldType}/native/ogl/objs/amd64/libj3dcore-ogl.so" + todir="${build}/${platform}/${bldType}/lib/amd64"/> + + </target> + + <target name="dist"> + <!-- Create the distribution directory --> + <mkdir dir="${dist}/${platform}/lib/i386"/> + <mkdir dir="${dist}/${platform}/lib/amd64"/> + + <!-- Copy the library files --> + <copy file="${build}/${platform}/opt/lib/i386/libj3dcore-ogl.so" + todir="${dist}/${platform}/lib/i386"/> + + <copy file="${build}/${platform}/opt/lib/amd64/libj3dcore-ogl.so" + todir="${dist}/${platform}/lib/amd64"/> + </target> + +</project> diff --git a/src/native/ogl/build-solaris-x86-gcc.xml b/src/native/ogl/build-solaris-x86-gcc.xml new file mode 100644 index 0000000..7131d06 --- /dev/null +++ b/src/native/ogl/build-solaris-x86-gcc.xml @@ -0,0 +1,88 @@ +<?xml version="1.0"?> + +<!-- +/* + * $RCSfile$ + * + * Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved. + * + * Use is subject to license terms. + * + * $Revision$ + * $Date$ + * $State$ + */ + --> + +<!-- Ant file for building native ogl renderer files for Solaris --> +<project name="Java 3D" default="compile"> + + <target name="compile"> + + <echo message="Executing 32 bit native renderer build [${bldType}]"/> + + <!-- Create the build directories for i386 --> + <mkdir dir="${build}/${platform}/${bldType}/native/ogl/objs"/> + <mkdir dir="${build}/${platform}/${bldType}/lib/i386"/> + + <property name="oglsrc" location="${src}/native/ogl"/> + + <!-- Compile the c source files--> + <!-- Inhibit all warning for 32 bit build. Any warning will be caught in the 64 bit build --> + <exec dir="${build}/${platform}/${bldType}/native/ogl/objs" executable="gcc"> + <arg line="-w -m32 -I${java.home}/../include -I${java.home}/../include/solaris -I/usr/openwin/include -I${javahCoreTarget} ${bldFlag} -DSOLARIS -c ${oglsrc}/DrawingSurfaceObjectAWT.c ${oglsrc}/Canvas3D.c ${oglsrc}/GraphicsContext3D.c ${oglsrc}/NativeWSInfo.c ${oglsrc}/NativeScreenInfo.c ${oglsrc}/NativeConfigTemplate3D.c ${oglsrc}/MasterControl.c ${oglsrc}/RasterRetained.c ${oglsrc}/GeometryArrayRetained.c ${oglsrc}/Attributes.c ${oglsrc}/CgShaderProgram.c ${oglsrc}/GLSLShaderProgram.c ${oglsrc}/Lights.c ${oglsrc}/NativeAPIInfo.c"/> + </exec> + + <!-- Create the library file--> + <exec dir="${build}/${platform}/${bldType}/native/ogl/objs" executable="ld"> + <arg line="DrawingSurfaceObjectAWT.o Canvas3D.o GraphicsContext3D.o NativeWSInfo.o NativeScreenInfo.o NativeConfigTemplate3D.o MasterControl.o RasterRetained.o GeometryArrayRetained.o Attributes.o CgShaderProgram.o GLSLShaderProgram.o Lights.o NativeAPIInfo.o -G -z defs -L/usr/openwin/lib -ldl -lGL -lX11 -lXext -lm -lsocket -lnsl -lc -R/usr/openwin/lib -L${java.home}/lib/i386 -L${java.home}/lib/i386/motif21 -ljawt -L${java.home}/lib/i386/server -ljvm -o libj3dcore-ogl.so"/> + </exec> + + <!-- Copy the copyright library file --> + <copy file="${build}/${platform}/${bldType}/native/ogl/objs/libj3dcore-ogl.so" + todir="${build}/${platform}/${bldType}/lib/i386"/> + + <!-- + /* + * TODO: only do the 64-bit build if isSolarisOnX86_64 property is + * set, indicating that a 64-bit JVM is available + */ + --> + +<!-- ********************************************************************** --> + <echo message="Executing 64 bit native renderer build [${bldType}]"/> + + <!-- Create the build directories for amd64 --> + <mkdir dir="${build}/${platform}/${bldType}/native/ogl/objs/amd64"/> + <mkdir dir="${build}/${platform}/${bldType}/lib/amd64"/> + + <!-- Compile the c source files--> + <exec dir="${build}/${platform}/${bldType}/native/ogl/objs/amd64" executable="gcc"> + <arg line="-m64 -I${java.home}/../include -I${java.home}/../include/solaris -I/usr/openwin/include -I${javahCoreTarget} ${bldFlag} -DSOLARIS -c ${oglsrc}/DrawingSurfaceObjectAWT.c ${oglsrc}/Canvas3D.c ${oglsrc}/GraphicsContext3D.c ${oglsrc}/NativeWSInfo.c ${oglsrc}/NativeScreenInfo.c ${oglsrc}/NativeConfigTemplate3D.c ${oglsrc}/MasterControl.c ${oglsrc}/RasterRetained.c ${oglsrc}/GeometryArrayRetained.c ${oglsrc}/Attributes.c ${oglsrc}/CgShaderProgram.c ${oglsrc}/GLSLShaderProgram.c ${oglsrc}/Lights.c ${oglsrc}/NativeAPIInfo.c"/> + </exec> + + <!-- Create the library file--> + <exec dir="${build}/${platform}/${bldType}/native/ogl/objs/amd64" executable="ld"> + <arg line="DrawingSurfaceObjectAWT.o Canvas3D.o GraphicsContext3D.o NativeWSInfo.o NativeScreenInfo.o NativeConfigTemplate3D.o MasterControl.o RasterRetained.o GeometryArrayRetained.o Attributes.o CgShaderProgram.o GLSLShaderProgram.o Lights.o NativeAPIInfo.o -G -z defs -L/usr/openwin/lib/amd64 -ldl -lGL -lX11 -lXext -lm -lsocket -lnsl -lc -R/usr/openwin/lib/amd64 -L${java.home}/lib/amd64 -L${java.home}/lib/amd64/motif21 -ljawt -L${java.home}/lib/amd64/server -ljvm -o libj3dcore-ogl.so"/> + </exec> + + <!-- Copy the copyright library file --> + <copy file="${build}/${platform}/${bldType}/native/ogl/objs/amd64/libj3dcore-ogl.so" + todir="${build}/${platform}/${bldType}/lib/amd64"/> + + </target> + + <target name="dist"> + <!-- Create the distribution directory --> + <mkdir dir="${dist}/${platform}/lib/i386"/> + <mkdir dir="${dist}/${platform}/lib/amd64"/> + + <!-- Copy the library files --> + <copy file="${build}/${platform}/opt/lib/i386/libj3dcore-ogl.so" + todir="${dist}/${platform}/lib/i386"/> + + <copy file="${build}/${platform}/opt/lib/amd64/libj3dcore-ogl.so" + todir="${dist}/${platform}/lib/amd64"/> + </target> + +</project> diff --git a/src/native/ogl/build-windows-i586-gcc.xml b/src/native/ogl/build-windows-i586-gcc.xml index 74de03e..08c07db 100644 --- a/src/native/ogl/build-windows-i586-gcc.xml +++ b/src/native/ogl/build-windows-i586-gcc.xml @@ -19,6 +19,21 @@ <target name="compile"> + <!-- + /* + * TODO: To compile CG, do the following steps: + * + * 1. define the following property: + * <property name="cg_home" location="c:/Program Files/NVIDIA Corporation/Cg"/> + * + * 2. Add the following to the "compile" command: + * -I"${cg_home}\include" + * + * 3. Add the following the the "link" command: + * -L"${cg_home}\lib" -lcg -lcgGL + */ + --> + <echo message="Executing 32 bit native renderer build [${bldType}]"/> <!-- Create the build directories for sparc --> @@ -37,12 +52,12 @@ <!-- Inhibit all warning for native build. Remove -w to switch warning on --> <exec dir="${build}/${platform}/${bldType}/native/ogl/objs" executable="gcc"> - <arg line="-w -D_WINGDI_ -D_JNI_IMPLEMENTATION_ -I"${javaInclude}" -I"${javaWin32Include}" -I"${javahCoreTarget}" ${bldFlag} -c "${oglsrc}/DrawingSurfaceObjectAWT.c" "${oglsrc}/Canvas3D.c" "${oglsrc}/GraphicsContext3D.c" "${oglsrc}/NativeWSInfo.c" "${oglsrc}/NativeScreenInfo.c" "${oglsrc}/NativeConfigTemplate3D.c" "${oglsrc}/MasterControl.c" "${oglsrc}/RasterRetained.c" "${oglsrc}/CompressedGeometryRetained.c" "${oglsrc}/GeometryArrayRetained.c" "${oglsrc}/Attributes.c" "${oglsrc}/Lights.c" "${oglsrc}/NativeAPIInfo.c""/> + <arg line="-w -D_WINGDI_ -D_JNI_IMPLEMENTATION_ -I"${javaInclude}" -I"${javaWin32Include}" -I"${javahCoreTarget}" ${bldFlag} -c "${oglsrc}/DrawingSurfaceObjectAWT.c" "${oglsrc}/Canvas3D.c" "${oglsrc}/GraphicsContext3D.c" "${oglsrc}/NativeWSInfo.c" "${oglsrc}/NativeScreenInfo.c" "${oglsrc}/NativeConfigTemplate3D.c" "${oglsrc}/MasterControl.c" "${oglsrc}/RasterRetained.c" "${oglsrc}/GeometryArrayRetained.c" "${oglsrc}/Attributes.c" "${oglsrc}/CgShaderProgram.c" "${oglsrc}/GLSLShaderProgram.c" "${oglsrc}/Lights.c" "${oglsrc}/NativeAPIInfo.c""/> </exec> <!-- Create the library file--> <exec dir="${build}/${platform}/${bldType}/native/ogl/objs" executable="gcc"> - <arg line="-shared -o j3dcore-ogl.dll DrawingSurfaceObjectAWT.o Canvas3D.o GraphicsContext3D.o NativeWSInfo.o NativeScreenInfo.o NativeConfigTemplate3D.o MasterControl.o RasterRetained.o CompressedGeometryRetained.o GeometryArrayRetained.o Attributes.o Lights.o NativeAPIInfo.o -Wl,--kill-at -L"${java.home}\..\lib" -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -luuid -lodbc32 -lodbccp32 -lopengl32 -ljawt"/> + <arg line="-shared -o j3dcore-ogl.dll DrawingSurfaceObjectAWT.o Canvas3D.o GraphicsContext3D.o NativeWSInfo.o NativeScreenInfo.o NativeConfigTemplate3D.o MasterControl.o RasterRetained.o GeometryArrayRetained.o Attributes.o CgShaderProgram.o GLSLShaderProgram.o Lights.o NativeAPIInfo.o -Wl,--kill-at -L"${java.home}\..\lib" -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -luuid -lodbc32 -lodbccp32 -lopengl32 -ljawt"/> </exec> <!-- Copy the copyright library file --> diff --git a/src/native/ogl/build-windows-i586-vc.xml b/src/native/ogl/build-windows-i586-vc.xml index 55b65ee..284362e 100644 --- a/src/native/ogl/build-windows-i586-vc.xml +++ b/src/native/ogl/build-windows-i586-vc.xml @@ -14,17 +14,25 @@ */ --> +<!-- +/* 1. define the following property to change the location of the CG library: + * + * ant -Dcg.home="path-to-cg-installation" + */ + --> + <!-- Ant file for building native ogl renderer files for Windows-i586 --> <project name="Java 3D" default="compile"> - <target name="compile"> - <echo message="Executing 32 bit native renderer build [${bldType}]"/> - <!-- Create the build directories for sparc --> + <target name="init" depends="init-cg,init-nocg"> + <!-- Create the build directories for win32 --> <mkdir dir="${build}/${platform}/${bldType}/native/ogl/objs"/> <mkdir dir="${build}/${platform}/${bldType}/bin"/> + <echo message="Executing 32 bit native renderer build [${bldType}]"/> + <property name="javaInclude" location="${java.home}/../include"/> @@ -32,20 +40,55 @@ location="${java.home}/../include/win32"/> <property name="oglsrc" location="${src}/native/ogl"/> + </target> + + <target name="init-cg" if="build.cg"> + <property name="cflags.cg" value="-DCOMPILE_CG_SHADERS=1"/> + <property name="cg.home" location="c:/Program Files/NVIDIA Corporation/Cg"/> + </target> + <target name="init-nocg" unless="build.cg"> + <property name="cflags.cg" value=""/> + <property name="cg.home" value=""/> + </target> + + <target name="compile-ogl"> <!-- Compile the c source files--> <exec dir="${build}/${platform}/${bldType}/native/ogl/objs" executable="cl"> - <arg line="-I"${javaInclude}" -I"${javaWin32Include}" -I"${javahCoreTarget}" -nologo -MT -W3 -GX -Ox -YX -FD ${bldFlag} -c "${oglsrc}/DrawingSurfaceObjectAWT.c" "${oglsrc}/Canvas3D.c" "${oglsrc}/GraphicsContext3D.c" "${oglsrc}/NativeWSInfo.c" "${oglsrc}/NativeScreenInfo.c" "${oglsrc}/NativeConfigTemplate3D.c" "${oglsrc}/MasterControl.c" "${oglsrc}/RasterRetained.c" "${oglsrc}/CompressedGeometryRetained.c" "${oglsrc}/GeometryArrayRetained.c" "${oglsrc}/Attributes.c" "${oglsrc}/Lights.c" "${oglsrc}/NativeAPIInfo.c""/> + <arg line="-I"${javaInclude}" -I"${javaWin32Include}" -I"${javahCoreTarget}" -I"${cg.home}\include" -nologo -MT -W3 -GX -Ox -YX -FD ${bldFlag} ${cflags.cg} -c "${oglsrc}/DrawingSurfaceObjectAWT.c" "${oglsrc}/Canvas3D.c" "${oglsrc}/GraphicsContext3D.c" "${oglsrc}/NativeWSInfo.c" "${oglsrc}/NativeScreenInfo.c" "${oglsrc}/NativeConfigTemplate3D.c" "${oglsrc}/MasterControl.c" "${oglsrc}/RasterRetained.c" "${oglsrc}/GeometryArrayRetained.c" "${oglsrc}/Attributes.c" "${oglsrc}/CgShaderProgram.c" "${oglsrc}/GLSLShaderProgram.c" "${oglsrc}/Lights.c" "${oglsrc}/NativeAPIInfo.c""/> </exec> <!-- Create the library file--> <exec dir="${build}/${platform}/${bldType}/native/ogl/objs" executable="link"> - <arg line="-nologo -dll -subsystem:windows -pdb:none -machine:I386 -out:j3dcore-ogl.dll DrawingSurfaceObjectAWT.obj Canvas3D.obj GraphicsContext3D.obj NativeWSInfo.obj NativeScreenInfo.obj NativeConfigTemplate3D.obj MasterControl.obj RasterRetained.obj CompressedGeometryRetained.obj GeometryArrayRetained.obj Attributes.obj Lights.obj NativeAPIInfo.obj kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib opengl32.lib delayimp.lib -DELAYLOAD:jawt.dll -LIBPATH:"${java.home}\..\lib" jawt.lib"/> + <arg line="-nologo -dll -subsystem:windows -pdb:none -machine:I386 -out:j3dcore-ogl.dll DrawingSurfaceObjectAWT.obj Canvas3D.obj GraphicsContext3D.obj NativeWSInfo.obj NativeScreenInfo.obj NativeConfigTemplate3D.obj MasterControl.obj RasterRetained.obj GeometryArrayRetained.obj Attributes.obj CgShaderProgram.obj GLSLShaderProgram.obj Lights.obj NativeAPIInfo.obj kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib opengl32.lib delayimp.lib -DELAYLOAD:jawt.dll -LIBPATH:"${java.home}\..\lib" jawt.lib"/> </exec> - <!-- Copy the copyright library file --> - <copy file="${build}/${platform}/${bldType}/native/ogl/objs/j3dcore-ogl.dll" - todir="${build}/${platform}/${bldType}/bin"/> + </target> + + + <target name="compile-ogl-cg" if="build.cg"> + <!-- Compile the c source files--> + <exec dir="${build}/${platform}/${bldType}/native/ogl/objs" executable="cl"> + <arg line="-I"${javaInclude}" -I"${javaWin32Include}" -I"${javahCoreTarget}" -I"${cg.home}\include" -nologo -MT -W3 -GX -Ox -YX -FD ${bldFlag} ${cflags.cg} -c "${oglsrc}/CgWrapper.c""/> + </exec> + + <!-- Create the library file--> + <exec dir="${build}/${platform}/${bldType}/native/ogl/objs" executable="link"> + <arg line="-nologo -dll -subsystem:windows -pdb:none -machine:I386 -out:j3dcore-ogl-cg.dll CgWrapper.obj kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib opengl32.lib delayimp.lib -DELAYLOAD:jawt.dll -LIBPATH:"${java.home}\..\lib" jawt.lib -LIBPATH:"${cg.home}\lib" cg.lib cgGL.lib"/> + </exec> + + </target> + + + + <target name="compile" depends="init,compile-ogl,compile-ogl-cg"> + + <!-- Copy the library file --> + <copy todir="${build}/${platform}/${bldType}/bin"> + <fileset dir="${build}/${platform}/${bldType}/native/ogl/objs" + includes="j3dcore-ogl*.dll" + /> + </copy> </target> @@ -54,8 +97,11 @@ <mkdir dir="${dist}/${platform}/bin"/> <!-- Copy the library files --> - <copy file="${build}/${platform}/opt/bin/j3dcore-ogl.dll" - todir="${dist}/${platform}/bin"/> + <copy todir="${dist}/${platform}/bin"> + <fileset dir="${build}/${platform}/opt/bin" + includes="j3dcore-ogl*.dll" + /> + </copy> </target> diff --git a/src/native/ogl/gl_1_2.h b/src/native/ogl/gl_1_2.h deleted file mode 100644 index a251c15..0000000 --- a/src/native/ogl/gl_1_2.h +++ /dev/null @@ -1,123 +0,0 @@ -/* - * $RCSfile$ - * - * Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved. - * - * Use is subject to license terms. - * - * $Revision$ - * $Date$ - * $State$ - */ - -#ifndef __gl_1_2_h_ -#define __gl_1_2_h_ - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Portions of this code were derived from work done by the Blackdown - * group (www.blackdown.org), who did the initial Linux implementation - * of the Java 3D API. - */ - -#ifndef GL_VERSION_1_2 - -#ifndef GL_BGR -#define GL_BGR 0x80E0 -#endif - -#ifndef GL_BGRA -#define GL_BGRA 0x80E1 -#endif - - -#ifndef GL_LIGHT_MODEL_COLOR_CONTROL -#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 -#endif - -#ifndef GL_SEPARATE_SPECULAR_COLOR -#define GL_SEPARATE_SPECULAR_COLOR 0x81FA -#endif - -#ifndef GL_SINGLE_COLOR -#define GL_SINGLE_COLOR 0x81F9 -#endif - -#endif /* GL_VERSION_1_2 */ - - -#ifndef GL_ARB_texture_env_combine -#define GL_COMBINE_ARB 0x8570 -#define GL_COMBINE_RGB_ARB 0x8571 -#define GL_COMBINE_ALPHA_ARB 0x8572 -#define GL_RGB_SCALE_ARB 0x8573 -#define GL_ADD_SIGNED_ARB 0x8574 -#define GL_INTERPOLATE_ARB 0x8575 -#define GL_SUBTRACT_ARB 0x84E7 -#define GL_CONSTANT_ARB 0x8576 -#define GL_PRIMARY_COLOR_ARB 0x8577 -#define GL_PREVIOUS_ARB 0x8578 -#define GL_SOURCE0_RGB_ARB 0x8580 -#define GL_SOURCE1_RGB_ARB 0x8581 -#define GL_SOURCE2_RGB_ARB 0x8582 -#define GL_SOURCE0_ALPHA_ARB 0x8588 -#define GL_SOURCE1_ALPHA_ARB 0x8589 -#define GL_SOURCE2_ALPHA_ARB 0x858A -#define GL_OPERAND0_RGB_ARB 0x8590 -#define GL_OPERAND1_RGB_ARB 0x8591 -#define GL_OPERAND2_RGB_ARB 0x8592 -#define GL_OPERAND0_ALPHA_ARB 0x8598 -#define GL_OPERAND1_ALPHA_ARB 0x8599 -#define GL_OPERAND2_ALPHA_ARB 0x859A -#endif /* GL_ARB_texture_env_combine */ - - -#ifndef GL_ARB_texture_env_dot3 -#define GL_DOT3_RGB_ARB 0x86AE -#define GL_DOT3_RGBA_ARB 0x86AF -#endif /* GL_ARB_texture_env_dot3 */ - - -#ifndef GL_EXT_texture_env_dot3 -#define GL_DOT3_RGB_EXT 0x8740 -#define GL_DOT3_RGBA_EXT 0x8741 -#endif /* GL_EXT_texture_env_dot3 */ - -#ifndef GL_EXT_texture_edge_clamp -#define GL_CLAMP_TO_EDGE_EXT 0x812F -#endif - -#ifndef GL_ARB_texture_border_clamp -#define GL_CLAMP_TO_BORDER_ARB 0x812D -#endif - -#if defined(SOLARIS) || defined(__linux__) -#ifndef GL_ARB_multisample -#define GLX_SAMPLE_BUFFERS_ARB 100000 -#define GLX_SAMPLES_ARB 100001 - -#define MULTISAMPLE_ARB 0x809D -#define SAMPLE_ALPHA_TO_COVERATE_ARB 0x809E -#define SAMPLE_ALPHA_TO_ONE_ARB 0x809F -#define SAMPLE_COVERAGE_ARB 0x80A0 -#define MULTISAMPLE_BIT_ARB 0x20000000 -#define SAMPLE_BUFFERS_ARB 0x80A8 -#define SAMPLES_ARB 0x80A9 -#define SAMPLE_COVERAGE_VALUE_ARB 0x80AA -#define SAMPLE_COVERAGE_INVERT_ARB 0x80AB -#endif /* GL_ARB_multisample */ -#endif /* SOLARIS */ - -#ifndef MULTISAMPLE_ARB -#define MULTISAMPLE_ARB 0x809D -#endif - - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/src/native/ogl/gldefs.h b/src/native/ogl/gldefs.h index 2411f4f..2e5246f 100644 --- a/src/native/ogl/gldefs.h +++ b/src/native/ogl/gldefs.h @@ -23,15 +23,16 @@ #include <stdlib.h> #include <string.h> -#if defined(SOLARIS) || defined(__linux__) +#if defined(SOLARIS) || defined(LINUX) #define GLX_GLEXT_PROTOTYPES #define GLX_GLXEXT_PROTOTYPES +#define UNIX + #include <limits.h> #include <X11/Xlib.h> #include <X11/Xutil.h> #include <GL/gl.h> #include <GL/glx.h> -#include "gl_1_2.h" #include "glext.h" #endif @@ -73,7 +74,6 @@ #ifndef D3D #include <GL/gl.h> #include "wglext.h" -#include "gl_1_2.h" #include "glext.h" #endif @@ -84,7 +84,6 @@ #include "javax_media_j3d_Canvas3D.h" #include "javax_media_j3d_ColoringAttributes.h" #include "javax_media_j3d_ColoringAttributesRetained.h" -#include "javax_media_j3d_CompressedGeometryRetained.h" #include "javax_media_j3d_DepthComponentRetained.h" #include "javax_media_j3d_DetailTextureImage.h" #include "javax_media_j3d_DirectionalLightRetained.h" @@ -106,6 +105,7 @@ #include "javax_media_j3d_Material.h" #include "javax_media_j3d_MaterialRetained.h" #include "javax_media_j3d_ModelClipRetained.h" +#include "javax_media_j3d_NativeAPIInfo.h" #include "javax_media_j3d_NativeConfigTemplate3D.h" #include "javax_media_j3d_NodeRetained.h" #include "javax_media_j3d_PointAttributesRetained.h" @@ -132,10 +132,11 @@ #include "javax_media_j3d_TextureUnitStateRetained.h" #include "javax_media_j3d_TransparencyAttributes.h" #include "javax_media_j3d_TransparencyAttributesRetained.h" - -#ifndef GL_SUNX_geometry_compression -#define GL_COMPRESSED_GEOM_ACCELERATED_SUNX 0x81D0 -#endif /* GL_SUNX_geometry_compression */ +#include "javax_media_j3d_GLSLShaderProgramRetained.h" +#include "javax_media_j3d_CgShaderProgramRetained.h" +#include "javax_media_j3d_Shader.h" +#include "javax_media_j3d_ShaderAttributeObjectRetained.h" +#include "javax_media_j3d_ShaderError.h" /* * Define these constants here as a workaround for conflicting @@ -259,9 +260,25 @@ #define GA_TEXTURE_COORDINATE_3 javax_media_j3d_GeometryArray_TEXTURE_COORDINATE_3 #define GA_TEXTURE_COORDINATE_4 javax_media_j3d_GeometryArray_TEXTURE_COORDINATE_4 #define GA_TEXTURE_COORDINATE javax_media_j3d_GeometryArray_TEXTURE_COORDINATE +#define GA_VERTEX_ATTRIBUTES javax_media_j3d_GeometryArray_VERTEX_ATTRIBUTES #define GA_BY_REFERENCE javax_media_j3d_GeometryArray_BY_REFERENCE +/* + * These match the constants in ShaderAttributeObjectRetained + */ + +#define TYPE_INTEGER javax_media_j3d_ShaderAttributeObjectRetained_TYPE_INTEGER +#define TYPE_FLOAT javax_media_j3d_ShaderAttributeObjectRetained_TYPE_FLOAT +#define TYPE_TUPLE2I javax_media_j3d_ShaderAttributeObjectRetained_TYPE_TUPLE2I +#define TYPE_TUPLE2F javax_media_j3d_ShaderAttributeObjectRetained_TYPE_TUPLE2F +#define TYPE_TUPLE3I javax_media_j3d_ShaderAttributeObjectRetained_TYPE_TUPLE3I +#define TYPE_TUPLE3F javax_media_j3d_ShaderAttributeObjectRetained_TYPE_TUPLE3F +#define TYPE_TUPLE4I javax_media_j3d_ShaderAttributeObjectRetained_TYPE_TUPLE4I +#define TYPE_TUPLE4F javax_media_j3d_ShaderAttributeObjectRetained_TYPE_TUPLE4F +#define TYPE_MATRIX3F javax_media_j3d_ShaderAttributeObjectRetained_TYPE_MATRIX3F +#define TYPE_MATRIX4F javax_media_j3d_ShaderAttributeObjectRetained_TYPE_MATRIX4F + /* * These match the constants in NativeConfigTemplate3D @@ -281,7 +298,7 @@ #define DOUBLEBUFFER javax_media_j3d_NativeConfigTemplate3D_DOUBLEBUFFER #define STEREO javax_media_j3d_NativeConfigTemplate3D_STEREO #define ANTIALIASING javax_media_j3d_NativeConfigTemplate3D_ANTIALIASING - +#define STENCIL_SIZE javax_media_j3d_NativeConfigTemplate3D_STENCIL_SIZE /* set this to the number of indices (from above) */ #define NUM_ITEMS (javax_media_j3d_NativeConfigTemplate3D_NUM_ITEMS + 2) @@ -302,8 +319,26 @@ #define J3D_RGB javax_media_j3d_Texture_RGB #define J3D_RGBA javax_media_j3d_Texture_RGBA + +/* + * These match the constants in TransparencyAttributes.java + */ +#define BLEND_ZERO javax_media_j3d_TransparencyAttributes_BLEND_ZERO +#define BLEND_ONE javax_media_j3d_TransparencyAttributes_BLEND_ONE +#define BLEND_SRC_ALPHA javax_media_j3d_TransparencyAttributes_BLEND_SRC_ALPHA +#define BLEND_ONE_MINUS_SRC_ALPHA javax_media_j3d_TransparencyAttributes_BLEND_ONE_MINUS_SRC_ALPHA +#define BLEND_DST_COLOR javax_media_j3d_TransparencyAttributes_BLEND_DST_COLOR +#define BLEND_ONE_MINUS_DST_COLOR javax_media_j3d_TransparencyAttributes_BLEND_ONE_MINUS_DST_COLOR +#define BLEND_SRC_COLOR javax_media_j3d_TransparencyAttributes_BLEND_SRC_COLOR +#define BLEND_ONE_MINUS_SRC_COLOR javax_media_j3d_TransparencyAttributes_BLEND_ONE_MINUS_SRC_COLOR +#define BLEND_CONSTANT_COLOR javax_media_j3d_TransparencyAttributes_BLEND_CONSTANT_COLOR +#define MAX_BLEND_FUNC_TABLE_SIZE javax_media_j3d_TransparencyAttributes_MAX_BLEND_FUNC_TABLE_SIZE + + + + #ifndef D3D -#if defined(SOLARIS) || defined(__linux__) +#if defined(UNIX) extern void APIENTRY glBlendColor (GLclampf, GLclampf, GLclampf, GLclampf); extern void APIENTRY glBlendColorEXT (GLclampf, GLclampf, GLclampf, GLclampf); extern void APIENTRY glColorTable (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *); @@ -347,7 +382,7 @@ extern void APIENTRY glTexSubImage3DEXT (GLenum, GLint, GLint, GLint, GLint, GLs extern int glXVideoResizeSUN( Display *, GLXDrawable, float); #endif -#endif /* SOLARIS || __linux__ */ +#endif /* UNIX_ */ #ifndef APIENTRY #define APIENTRY @@ -389,14 +424,41 @@ typedef void (APIENTRY * MYPFNGLSHARPENTEXFUNCSGI) (GLenum target, GLsizei n, co typedef void (APIENTRY * MYPFNGLDETAILTEXFUNCSGI) (GLenum target, GLsizei n, const GLfloat *points); typedef void (APIENTRY * MYPFNGLTEXFILTERFUNCSGI) (GLenum target, GLenum filter, GLsizei n, const GLfloat *points); -#if defined(SOLARIS) || defined(__linux__) +#if defined(UNIX) typedef GLXFBConfig * (APIENTRY * MYPFNGLXCHOOSEFBCONFIG) (Display *dpy, int screen, const int *attrib_list, int *nelements); typedef int (APIENTRY * MYPFNGLXVIDEORESIZESUN) (Display * dpy, GLXDrawable draw, float factor); -#endif /* SOLARIS || __linux__ */ +#endif /* UNIX_ */ + + +/* Typedef for context properties struct */ +typedef struct GraphicsContextPropertiesInfoRec GraphicsContextPropertiesInfo; + +/* Typedefs for language-independent vertex attribute functions */ +typedef void (*MYPFNVERTEXATTRPOINTER)(GraphicsContextPropertiesInfo *ctxProperties, + int index, int size, int type, int stride, + const void *pointer); +typedef void (*MYPFNENABLEVERTEXATTRARRAY)(GraphicsContextPropertiesInfo *ctxProperties, + int index); +typedef void (*MYPFNDISABLEVERTEXATTRARRAY)(GraphicsContextPropertiesInfo *ctxProperties, + int index); +typedef void (*MYPFNVERTEXATTR1FV)(GraphicsContextPropertiesInfo *ctxProperties, + int index, const float *v); +typedef void (*MYPFNVERTEXATTR2FV)(GraphicsContextPropertiesInfo *ctxProperties, + int index, const float *v); +typedef void (*MYPFNVERTEXATTR3FV)(GraphicsContextPropertiesInfo *ctxProperties, + int index, const float *v); +typedef void (*MYPFNVERTEXATTR4FV)(GraphicsContextPropertiesInfo *ctxProperties, + int index, const float *v); +/* Typedefs for (opaque) GLSL context info */ +typedef struct GLSLCtxInfoRec GLSLCtxInfo; + +/* Typedefs for (opaque) Cg context info */ +typedef struct CgCtxInfoRec CgCtxInfo; + /* define the structure to hold the properties of graphics context */ -typedef struct { +struct GraphicsContextPropertiesInfoRec { jlong context; /* version and extension info */ @@ -423,7 +485,8 @@ typedef struct { /* GL_ARB_imaging subset */ /* GL_EXT_blend_color or GL_BLEND_COLOR */ jboolean blend_color_ext; - GLenum blendFunctionTable[8]; + GLenum blendFunctionTable[MAX_BLEND_FUNC_TABLE_SIZE]; + /* GL_SGI_color_table or GL_COLOR_TABLE */ jboolean color_table_ext; @@ -461,8 +524,6 @@ typedef struct { jboolean global_alpha_sun; /* GL_SUNX_constant_data */ jboolean constant_data_sun; - /* GL_SUNX_geometry_compression */ - jboolean geometry_compression_sunx; /* GL_EXT_abgr */ jboolean abgr_ext; @@ -477,7 +538,11 @@ typedef struct { /* GL_ARB_multitexture */ jboolean arb_multitexture; - int textureUnitCount; + int maxTexCoordSets; /* maximum number of texture coordinate sets */ + int maxTextureUnits; /* number of fixed-function texture units */ + int maxTextureImageUnits; /* number of fragment shader texture units */ + int maxVertexTextureImageUnits; /* number of vertex shader texture units */ + int maxCombinedTextureImageUnits; /* total number of shader texture units */ /* GL_SGI_texture_color_table */ jboolean textureColorTableAvailable; @@ -557,16 +622,11 @@ typedef struct { /* GL_SGIX_texture_lod_bias */ jboolean textureLodBiasAvailable; - - jboolean geometry_compression_accelerated; - int geometry_compression_accelerated_major_version; - int geometry_compression_accelerated_minor_version; - int geometry_compression_accelerated_subminor_version; - + /* extension mask */ jint extMask; jint textureExtMask; - + /* function pointers */ MYPFNGLBLENDCOLORPROC glBlendColor; MYPFNGLBLENDCOLOREXTPROC glBlendColorEXT; @@ -599,11 +659,36 @@ typedef struct { MYPFNGLDETAILTEXFUNCSGI glDetailTexFuncSGIS; MYPFNGLTEXFILTERFUNCSGI glTexFilterFuncSGIS; -#if defined(SOLARIS) || defined(__linux__) +#if defined(UNIX) MYPFNGLXVIDEORESIZESUN glXVideoResizeSUN; -#endif /* SOLARIS || __linux__ */ +#endif /* UNIX_ */ + + /* Shading language support */ + jboolean shadingLanguageGLSL; + jboolean shadingLanguageCg; -} GraphicsContextPropertiesInfo; + /* Function pointers for language-independent vertex attribute functions */ + MYPFNVERTEXATTRPOINTER vertexAttrPointer; + MYPFNENABLEVERTEXATTRARRAY enableVertexAttrArray; + MYPFNDISABLEVERTEXATTRARRAY disableVertexAttrArray; + MYPFNVERTEXATTR1FV vertexAttr1fv; + MYPFNVERTEXATTR2FV vertexAttr2fv; + MYPFNVERTEXATTR3FV vertexAttr3fv; + MYPFNVERTEXATTR4FV vertexAttr4fv; + + /* Pointer to currently bound shader program */ + jlong shaderProgramId; + + /* Implementation-dependent maximum number of vertex attributes */ + int maxVertexAttrs; + + /* GLSL shader context information */ + GLSLCtxInfo *glslCtxInfo; + + /* Cg shader context information */ + CgCtxInfo *cgCtxInfo; + +}; #ifdef WIN32 @@ -619,6 +704,8 @@ struct PixelFormatInfoRec { GLboolean onScreenHasStereo; GLboolean onScreenHasDoubleBuffer; GLboolean onScreenHasAccum; + int onScreenStencilSize; + /* Information about onScreen pixel format */ int offScreenPFormat; /* PixelFormat for offScreen */ GLboolean offScreenHasMultisample; /* TRUE if WGL_SAMPLE_BUFFERS_ARB is TRUE and @@ -626,6 +713,8 @@ struct PixelFormatInfoRec { GLboolean offScreenHasStereo; GLboolean offScreenHasDoubleBuffer; GLboolean offScreenHasAccum; + int offScreenStencilSize; + GLboolean drawToPbuffer; /* value of DRAW_TO_PBUFFER attr for offScreenPFormat */ /* Information about extension support */ @@ -652,7 +741,7 @@ typedef struct OffScreenBufferInfoRec OffScreenBufferInfo; struct OffScreenBufferInfoRec { GLboolean isPbuffer; /* GL_TRUE if Pbuffer is used. */ -#if defined(SOLARIS) || defined(__linux__) +#if defined(UNIX) #endif #ifdef WIN32 diff --git a/src/native/ogl/glext.h b/src/native/ogl/glext.h index 9549427..9e88dd9 100644 --- a/src/native/ogl/glext.h +++ b/src/native/ogl/glext.h @@ -1,15 +1,3 @@ -/* - * $RCSfile$ - * - * Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved. - * - * Use is subject to license terms. - * - * $Revision$ - * $Date$ - * $State$ - */ - #ifndef __glext_h_ #define __glext_h_ @@ -18,12 +6,6 @@ extern "C" { #endif /* - * Portions of this code were derived from work done by the Blackdown - * group (www.blackdown.org), who did the initial Linux implementation - * of the Java 3D API. - */ - -/* ** License Applicability. Except to the extent portions of this file are ** made subject to an alternative license as permitted in the SGI Free ** Software License B, Version 1.1 (the "License"), the contents of this @@ -42,7 +24,7 @@ extern "C" { ** ** Original Code. The Original Code is: OpenGL Sample Implementation, ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics, -** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc. +** Inc. The Original Code is Copyright (c) 1991-2004 Silicon Graphics, Inc. ** Copyright in any portions created by third parties is as indicated ** elsewhere herein. All Rights Reserved. ** @@ -52,7 +34,7 @@ extern "C" { ** version 1.2.1 Specification. */ -#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) +#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) #define WIN32_LEAN_AND_MEAN 1 #include <windows.h> #endif @@ -60,13 +42,65 @@ extern "C" { #ifndef APIENTRY #define APIENTRY #endif +#ifndef APIENTRYP +#define APIENTRYP APIENTRY * +#endif +#ifndef GLAPI +#define GLAPI extern +#endif /*************************************************************/ /* Header file version number, required by OpenGL ABI for Linux */ -#define GL_GLEXT_VERSION 7 +/* glext.h last updated 2005/01/07 */ +/* Current version at http://oss.sgi.com/projects/ogl-sample/registry/ */ +#define GL_GLEXT_VERSION 25 #ifndef GL_VERSION_1_2 +#define GL_UNSIGNED_BYTE_3_3_2 0x8032 +#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 +#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 +#define GL_UNSIGNED_INT_8_8_8_8 0x8035 +#define GL_UNSIGNED_INT_10_10_10_2 0x8036 +#define GL_RESCALE_NORMAL 0x803A +#define GL_TEXTURE_BINDING_3D 0x806A +#define GL_PACK_SKIP_IMAGES 0x806B +#define GL_PACK_IMAGE_HEIGHT 0x806C +#define GL_UNPACK_SKIP_IMAGES 0x806D +#define GL_UNPACK_IMAGE_HEIGHT 0x806E +#define GL_TEXTURE_3D 0x806F +#define GL_PROXY_TEXTURE_3D 0x8070 +#define GL_TEXTURE_DEPTH 0x8071 +#define GL_TEXTURE_WRAP_R 0x8072 +#define GL_MAX_3D_TEXTURE_SIZE 0x8073 +#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 +#define GL_UNSIGNED_SHORT_5_6_5 0x8363 +#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 +#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 +#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 +#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 +#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 +#define GL_BGR 0x80E0 +#define GL_BGRA 0x80E1 +#define GL_MAX_ELEMENTS_VERTICES 0x80E8 +#define GL_MAX_ELEMENTS_INDICES 0x80E9 +#define GL_CLAMP_TO_EDGE 0x812F +#define GL_TEXTURE_MIN_LOD 0x813A +#define GL_TEXTURE_MAX_LOD 0x813B +#define GL_TEXTURE_BASE_LEVEL 0x813C +#define GL_TEXTURE_MAX_LEVEL 0x813D +#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 +#define GL_SINGLE_COLOR 0x81F9 +#define GL_SEPARATE_SPECULAR_COLOR 0x81FA +#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 +#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 +#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 +#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 +#define GL_ALIASED_POINT_SIZE_RANGE 0x846D +#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E +#endif + +#ifndef GL_ARB_imaging #define GL_CONSTANT_COLOR 0x8001 #define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 #define GL_CONSTANT_ALPHA 0x8003 @@ -112,19 +146,6 @@ extern "C" { #define GL_MINMAX_FORMAT 0x802F #define GL_MINMAX_SINK 0x8030 #define GL_TABLE_TOO_LARGE 0x8031 -#define GL_UNSIGNED_BYTE_3_3_2 0x8032 -#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 -#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 -#define GL_UNSIGNED_INT_8_8_8_8 0x8035 -#define GL_UNSIGNED_INT_10_10_10_2 0x8036 -#define GL_RESCALE_NORMAL 0x803A -#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 -#define GL_UNSIGNED_SHORT_5_6_5 0x8363 -#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 -#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 -#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 -#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 -#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 #define GL_COLOR_MATRIX 0x80B1 #define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 #define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 @@ -135,6 +156,7 @@ extern "C" { #define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 #define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 #define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA +#define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB #define GL_COLOR_TABLE 0x80D0 #define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 #define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 @@ -151,11 +173,290 @@ extern "C" { #define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD #define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE #define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF -#define GL_CLAMP_TO_EDGE 0x812F -#define GL_TEXTURE_MIN_LOD 0x813A -#define GL_TEXTURE_MAX_LOD 0x813B -#define GL_TEXTURE_BASE_LEVEL 0x813C -#define GL_TEXTURE_MAX_LEVEL 0x813D +#define GL_CONSTANT_BORDER 0x8151 +#define GL_REPLICATE_BORDER 0x8153 +#define GL_CONVOLUTION_BORDER_COLOR 0x8154 +#endif + +#ifndef GL_VERSION_1_3 +#define GL_TEXTURE0 0x84C0 +#define GL_TEXTURE1 0x84C1 +#define GL_TEXTURE2 0x84C2 +#define GL_TEXTURE3 0x84C3 +#define GL_TEXTURE4 0x84C4 +#define GL_TEXTURE5 0x84C5 +#define GL_TEXTURE6 0x84C6 +#define GL_TEXTURE7 0x84C7 +#define GL_TEXTURE8 0x84C8 +#define GL_TEXTURE9 0x84C9 +#define GL_TEXTURE10 0x84CA +#define GL_TEXTURE11 0x84CB +#define GL_TEXTURE12 0x84CC +#define GL_TEXTURE13 0x84CD +#define GL_TEXTURE14 0x84CE +#define GL_TEXTURE15 0x84CF +#define GL_TEXTURE16 0x84D0 +#define GL_TEXTURE17 0x84D1 +#define GL_TEXTURE18 0x84D2 +#define GL_TEXTURE19 0x84D3 +#define GL_TEXTURE20 0x84D4 +#define GL_TEXTURE21 0x84D5 +#define GL_TEXTURE22 0x84D6 +#define GL_TEXTURE23 0x84D7 +#define GL_TEXTURE24 0x84D8 +#define GL_TEXTURE25 0x84D9 +#define GL_TEXTURE26 0x84DA +#define GL_TEXTURE27 0x84DB +#define GL_TEXTURE28 0x84DC +#define GL_TEXTURE29 0x84DD +#define GL_TEXTURE30 0x84DE +#define GL_TEXTURE31 0x84DF +#define GL_ACTIVE_TEXTURE 0x84E0 +#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 +#define GL_MAX_TEXTURE_UNITS 0x84E2 +#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 +#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 +#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 +#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 +#define GL_MULTISAMPLE 0x809D +#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE 0x809F +#define GL_SAMPLE_COVERAGE 0x80A0 +#define GL_SAMPLE_BUFFERS 0x80A8 +#define GL_SAMPLES 0x80A9 +#define GL_SAMPLE_COVERAGE_VALUE 0x80AA +#define GL_SAMPLE_COVERAGE_INVERT 0x80AB +#define GL_MULTISAMPLE_BIT 0x20000000 +#define GL_NORMAL_MAP 0x8511 +#define GL_REFLECTION_MAP 0x8512 +#define GL_TEXTURE_CUBE_MAP 0x8513 +#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A +#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C +#define GL_COMPRESSED_ALPHA 0x84E9 +#define GL_COMPRESSED_LUMINANCE 0x84EA +#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB +#define GL_COMPRESSED_INTENSITY 0x84EC +#define GL_COMPRESSED_RGB 0x84ED +#define GL_COMPRESSED_RGBA 0x84EE +#define GL_TEXTURE_COMPRESSION_HINT 0x84EF +#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 +#define GL_TEXTURE_COMPRESSED 0x86A1 +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 +#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 +#define GL_CLAMP_TO_BORDER 0x812D +#define GL_COMBINE 0x8570 +#define GL_COMBINE_RGB 0x8571 +#define GL_COMBINE_ALPHA 0x8572 +#define GL_SOURCE0_RGB 0x8580 +#define GL_SOURCE1_RGB 0x8581 +#define GL_SOURCE2_RGB 0x8582 +#define GL_SOURCE0_ALPHA 0x8588 +#define GL_SOURCE1_ALPHA 0x8589 +#define GL_SOURCE2_ALPHA 0x858A +#define GL_OPERAND0_RGB 0x8590 +#define GL_OPERAND1_RGB 0x8591 +#define GL_OPERAND2_RGB 0x8592 +#define GL_OPERAND0_ALPHA 0x8598 +#define GL_OPERAND1_ALPHA 0x8599 +#define GL_OPERAND2_ALPHA 0x859A +#define GL_RGB_SCALE 0x8573 +#define GL_ADD_SIGNED 0x8574 +#define GL_INTERPOLATE 0x8575 +#define GL_SUBTRACT 0x84E7 +#define GL_CONSTANT 0x8576 +#define GL_PRIMARY_COLOR 0x8577 +#define GL_PREVIOUS 0x8578 +#define GL_DOT3_RGB 0x86AE +#define GL_DOT3_RGBA 0x86AF +#endif + +#ifndef GL_VERSION_1_4 +#define GL_BLEND_DST_RGB 0x80C8 +#define GL_BLEND_SRC_RGB 0x80C9 +#define GL_BLEND_DST_ALPHA 0x80CA +#define GL_BLEND_SRC_ALPHA 0x80CB +#define GL_POINT_SIZE_MIN 0x8126 +#define GL_POINT_SIZE_MAX 0x8127 +#define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 +#define GL_POINT_DISTANCE_ATTENUATION 0x8129 +#define GL_GENERATE_MIPMAP 0x8191 +#define GL_GENERATE_MIPMAP_HINT 0x8192 +#define GL_DEPTH_COMPONENT16 0x81A5 +#define GL_DEPTH_COMPONENT24 0x81A6 +#define GL_DEPTH_COMPONENT32 0x81A7 +#define GL_MIRRORED_REPEAT 0x8370 +#define GL_FOG_COORDINATE_SOURCE 0x8450 +#define GL_FOG_COORDINATE 0x8451 +#define GL_FRAGMENT_DEPTH 0x8452 +#define GL_CURRENT_FOG_COORDINATE 0x8453 +#define GL_FOG_COORDINATE_ARRAY_TYPE 0x8454 +#define GL_FOG_COORDINATE_ARRAY_STRIDE 0x8455 +#define GL_FOG_COORDINATE_ARRAY_POINTER 0x8456 +#define GL_FOG_COORDINATE_ARRAY 0x8457 +#define GL_COLOR_SUM 0x8458 +#define GL_CURRENT_SECONDARY_COLOR 0x8459 +#define GL_SECONDARY_COLOR_ARRAY_SIZE 0x845A +#define GL_SECONDARY_COLOR_ARRAY_TYPE 0x845B +#define GL_SECONDARY_COLOR_ARRAY_STRIDE 0x845C +#define GL_SECONDARY_COLOR_ARRAY_POINTER 0x845D +#define GL_SECONDARY_COLOR_ARRAY 0x845E +#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD +#define GL_TEXTURE_FILTER_CONTROL 0x8500 +#define GL_TEXTURE_LOD_BIAS 0x8501 +#define GL_INCR_WRAP 0x8507 +#define GL_DECR_WRAP 0x8508 +#define GL_TEXTURE_DEPTH_SIZE 0x884A +#define GL_DEPTH_TEXTURE_MODE 0x884B +#define GL_TEXTURE_COMPARE_MODE 0x884C +#define GL_TEXTURE_COMPARE_FUNC 0x884D +#define GL_COMPARE_R_TO_TEXTURE 0x884E +#endif + +#ifndef GL_VERSION_1_5 +#define GL_BUFFER_SIZE 0x8764 +#define GL_BUFFER_USAGE 0x8765 +#define GL_QUERY_COUNTER_BITS 0x8864 +#define GL_CURRENT_QUERY 0x8865 +#define GL_QUERY_RESULT 0x8866 +#define GL_QUERY_RESULT_AVAILABLE 0x8867 +#define GL_ARRAY_BUFFER 0x8892 +#define GL_ELEMENT_ARRAY_BUFFER 0x8893 +#define GL_ARRAY_BUFFER_BINDING 0x8894 +#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 +#define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896 +#define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897 +#define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898 +#define GL_INDEX_ARRAY_BUFFER_BINDING 0x8899 +#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A +#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B +#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C +#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D +#define GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E +#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F +#define GL_READ_ONLY 0x88B8 +#define GL_WRITE_ONLY 0x88B9 +#define GL_READ_WRITE 0x88BA +#define GL_BUFFER_ACCESS 0x88BB +#define GL_BUFFER_MAPPED 0x88BC +#define GL_BUFFER_MAP_POINTER 0x88BD +#define GL_STREAM_DRAW 0x88E0 +#define GL_STREAM_READ 0x88E1 +#define GL_STREAM_COPY 0x88E2 +#define GL_STATIC_DRAW 0x88E4 +#define GL_STATIC_READ 0x88E5 +#define GL_STATIC_COPY 0x88E6 +#define GL_DYNAMIC_DRAW 0x88E8 +#define GL_DYNAMIC_READ 0x88E9 +#define GL_DYNAMIC_COPY 0x88EA +#define GL_SAMPLES_PASSED 0x8914 +#define GL_FOG_COORD_SRC GL_FOG_COORDINATE_SOURCE +#define GL_FOG_COORD GL_FOG_COORDINATE +#define GL_CURRENT_FOG_COORD GL_CURRENT_FOG_COORDINATE +#define GL_FOG_COORD_ARRAY_TYPE GL_FOG_COORDINATE_ARRAY_TYPE +#define GL_FOG_COORD_ARRAY_STRIDE GL_FOG_COORDINATE_ARRAY_STRIDE +#define GL_FOG_COORD_ARRAY_POINTER GL_FOG_COORDINATE_ARRAY_POINTER +#define GL_FOG_COORD_ARRAY GL_FOG_COORDINATE_ARRAY +#define GL_FOG_COORD_ARRAY_BUFFER_BINDING GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING +#define GL_SRC0_RGB GL_SOURCE0_RGB +#define GL_SRC1_RGB GL_SOURCE1_RGB +#define GL_SRC2_RGB GL_SOURCE2_RGB +#define GL_SRC0_ALPHA GL_SOURCE0_ALPHA +#define GL_SRC1_ALPHA GL_SOURCE1_ALPHA +#define GL_SRC2_ALPHA GL_SOURCE2_ALPHA +#endif + +#ifndef GL_VERSION_2_0 +#define GL_BLEND_EQUATION_RGB GL_BLEND_EQUATION +#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 +#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 +#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 +#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 +#define GL_CURRENT_VERTEX_ATTRIB 0x8626 +#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 +#define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643 +#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 +#define GL_STENCIL_BACK_FUNC 0x8800 +#define GL_STENCIL_BACK_FAIL 0x8801 +#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 +#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 +#define GL_MAX_DRAW_BUFFERS 0x8824 +#define GL_DRAW_BUFFER0 0x8825 +#define GL_DRAW_BUFFER1 0x8826 +#define GL_DRAW_BUFFER2 0x8827 +#define GL_DRAW_BUFFER3 0x8828 +#define GL_DRAW_BUFFER4 0x8829 +#define GL_DRAW_BUFFER5 0x882A +#define GL_DRAW_BUFFER6 0x882B +#define GL_DRAW_BUFFER7 0x882C +#define GL_DRAW_BUFFER8 0x882D +#define GL_DRAW_BUFFER9 0x882E +#define GL_DRAW_BUFFER10 0x882F +#define GL_DRAW_BUFFER11 0x8830 +#define GL_DRAW_BUFFER12 0x8831 +#define GL_DRAW_BUFFER13 0x8832 +#define GL_DRAW_BUFFER14 0x8833 +#define GL_DRAW_BUFFER15 0x8834 +#define GL_BLEND_EQUATION_ALPHA 0x883D +#define GL_POINT_SPRITE 0x8861 +#define GL_COORD_REPLACE 0x8862 +#define GL_MAX_VERTEX_ATTRIBS 0x8869 +#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A +#define GL_MAX_TEXTURE_COORDS 0x8871 +#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 +#define GL_FRAGMENT_SHADER 0x8B30 +#define GL_VERTEX_SHADER 0x8B31 +#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 +#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A +#define GL_MAX_VARYING_FLOATS 0x8B4B +#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C +#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D +#define GL_SHADER_TYPE 0x8B4F +#define GL_FLOAT_VEC2 0x8B50 +#define GL_FLOAT_VEC3 0x8B51 +#define GL_FLOAT_VEC4 0x8B52 +#define GL_INT_VEC2 0x8B53 +#define GL_INT_VEC3 0x8B54 +#define GL_INT_VEC4 0x8B55 +#define GL_BOOL 0x8B56 +#define GL_BOOL_VEC2 0x8B57 +#define GL_BOOL_VEC3 0x8B58 +#define GL_BOOL_VEC4 0x8B59 +#define GL_FLOAT_MAT2 0x8B5A +#define GL_FLOAT_MAT3 0x8B5B +#define GL_FLOAT_MAT4 0x8B5C +#define GL_SAMPLER_1D 0x8B5D +#define GL_SAMPLER_2D 0x8B5E +#define GL_SAMPLER_3D 0x8B5F +#define GL_SAMPLER_CUBE 0x8B60 +#define GL_SAMPLER_1D_SHADOW 0x8B61 +#define GL_SAMPLER_2D_SHADOW 0x8B62 +#define GL_DELETE_STATUS 0x8B80 +#define GL_COMPILE_STATUS 0x8B81 +#define GL_LINK_STATUS 0x8B82 +#define GL_VALIDATE_STATUS 0x8B83 +#define GL_INFO_LOG_LENGTH 0x8B84 +#define GL_ATTACHED_SHADERS 0x8B85 +#define GL_ACTIVE_UNIFORMS 0x8B86 +#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 +#define GL_SHADER_SOURCE_LENGTH 0x8B88 +#define GL_ACTIVE_ATTRIBUTES 0x8B89 +#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B +#define GL_SHADING_LANGUAGE_VERSION 0x8B8C +#define GL_CURRENT_PROGRAM 0x8B8D +#define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 +#define GL_LOWER_LEFT 0x8CA1 +#define GL_UPPER_LEFT 0x8CA2 +#define GL_STENCIL_BACK_REF 0x8CA3 +#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 +#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 #endif #ifndef GL_ARB_multitexture @@ -215,6 +516,9 @@ extern "C" { #define GL_MULTISAMPLE_BIT_ARB 0x20000000 #endif +#ifndef GL_ARB_texture_env_add +#endif + #ifndef GL_ARB_texture_cube_map #define GL_NORMAL_MAP_ARB 0x8511 #define GL_REFLECTION_MAP_ARB 0x8512 @@ -238,12 +542,23 @@ extern "C" { #define GL_COMPRESSED_RGB_ARB 0x84ED #define GL_COMPRESSED_RGBA_ARB 0x84EE #define GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF -#define GL_TEXTURE_IMAGE_SIZE_ARB 0x86A0 +#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0 #define GL_TEXTURE_COMPRESSED_ARB 0x86A1 #define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2 #define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3 #endif +#ifndef GL_ARB_texture_border_clamp +#define GL_CLAMP_TO_BORDER_ARB 0x812D +#endif + +#ifndef GL_ARB_point_parameters +#define GL_POINT_SIZE_MIN_ARB 0x8126 +#define GL_POINT_SIZE_MAX_ARB 0x8127 +#define GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128 +#define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129 +#endif + #ifndef GL_ARB_vertex_blend #define GL_MAX_VERTEX_UNITS_ARB 0x86A4 #define GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5 @@ -289,6 +604,356 @@ extern "C" { #define GL_MODELVIEW31_ARB 0x873F #endif +#ifndef GL_ARB_matrix_palette +#define GL_MATRIX_PALETTE_ARB 0x8840 +#define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841 +#define GL_MAX_PALETTE_MATRICES_ARB 0x8842 +#define GL_CURRENT_PALETTE_MATRIX_ARB 0x8843 +#define GL_MATRIX_INDEX_ARRAY_ARB 0x8844 +#define GL_CURRENT_MATRIX_INDEX_ARB 0x8845 +#define GL_MATRIX_INDEX_ARRAY_SIZE_ARB 0x8846 +#define GL_MATRIX_INDEX_ARRAY_TYPE_ARB 0x8847 +#define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB 0x8848 +#define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849 +#endif + +#ifndef GL_ARB_texture_env_combine +#define GL_COMBINE_ARB 0x8570 +#define GL_COMBINE_RGB_ARB 0x8571 +#define GL_COMBINE_ALPHA_ARB 0x8572 +#define GL_SOURCE0_RGB_ARB 0x8580 +#define GL_SOURCE1_RGB_ARB 0x8581 +#define GL_SOURCE2_RGB_ARB 0x8582 +#define GL_SOURCE0_ALPHA_ARB 0x8588 +#define GL_SOURCE1_ALPHA_ARB 0x8589 +#define GL_SOURCE2_ALPHA_ARB 0x858A +#define GL_OPERAND0_RGB_ARB 0x8590 +#define GL_OPERAND1_RGB_ARB 0x8591 +#define GL_OPERAND2_RGB_ARB 0x8592 +#define GL_OPERAND0_ALPHA_ARB 0x8598 +#define GL_OPERAND1_ALPHA_ARB 0x8599 +#define GL_OPERAND2_ALPHA_ARB 0x859A +#define GL_RGB_SCALE_ARB 0x8573 +#define GL_ADD_SIGNED_ARB 0x8574 +#define GL_INTERPOLATE_ARB 0x8575 +#define GL_SUBTRACT_ARB 0x84E7 +#define GL_CONSTANT_ARB 0x8576 +#define GL_PRIMARY_COLOR_ARB 0x8577 +#define GL_PREVIOUS_ARB 0x8578 +#endif + +#ifndef GL_ARB_texture_env_crossbar +#endif + +#ifndef GL_ARB_texture_env_dot3 +#define GL_DOT3_RGB_ARB 0x86AE +#define GL_DOT3_RGBA_ARB 0x86AF +#endif + +#ifndef GL_ARB_texture_mirrored_repeat +#define GL_MIRRORED_REPEAT_ARB 0x8370 +#endif + +#ifndef GL_ARB_depth_texture +#define GL_DEPTH_COMPONENT16_ARB 0x81A5 +#define GL_DEPTH_COMPONENT24_ARB 0x81A6 +#define GL_DEPTH_COMPONENT32_ARB 0x81A7 +#define GL_TEXTURE_DEPTH_SIZE_ARB 0x884A +#define GL_DEPTH_TEXTURE_MODE_ARB 0x884B +#endif + +#ifndef GL_ARB_shadow +#define GL_TEXTURE_COMPARE_MODE_ARB 0x884C +#define GL_TEXTURE_COMPARE_FUNC_ARB 0x884D +#define GL_COMPARE_R_TO_TEXTURE_ARB 0x884E +#endif + +#ifndef GL_ARB_shadow_ambient +#define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF +#endif + +#ifndef GL_ARB_window_pos +#endif + +#ifndef GL_ARB_vertex_program +#define GL_COLOR_SUM_ARB 0x8458 +#define GL_VERTEX_PROGRAM_ARB 0x8620 +#define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622 +#define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623 +#define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624 +#define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625 +#define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626 +#define GL_PROGRAM_LENGTH_ARB 0x8627 +#define GL_PROGRAM_STRING_ARB 0x8628 +#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E +#define GL_MAX_PROGRAM_MATRICES_ARB 0x862F +#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640 +#define GL_CURRENT_MATRIX_ARB 0x8641 +#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642 +#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643 +#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645 +#define GL_PROGRAM_ERROR_POSITION_ARB 0x864B +#define GL_PROGRAM_BINDING_ARB 0x8677 +#define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869 +#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A +#define GL_PROGRAM_ERROR_STRING_ARB 0x8874 +#define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875 +#define GL_PROGRAM_FORMAT_ARB 0x8876 +#define GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0 +#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1 +#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2 +#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3 +#define GL_PROGRAM_TEMPORARIES_ARB 0x88A4 +#define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5 +#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6 +#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7 +#define GL_PROGRAM_PARAMETERS_ARB 0x88A8 +#define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9 +#define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA +#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB +#define GL_PROGRAM_ATTRIBS_ARB 0x88AC +#define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD +#define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE +#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF +#define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0 +#define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1 +#define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2 +#define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3 +#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4 +#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5 +#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6 +#define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7 +#define GL_MATRIX0_ARB 0x88C0 +#define GL_MATRIX1_ARB 0x88C1 +#define GL_MATRIX2_ARB 0x88C2 +#define GL_MATRIX3_ARB 0x88C3 +#define GL_MATRIX4_ARB 0x88C4 +#define GL_MATRIX5_ARB 0x88C5 +#define GL_MATRIX6_ARB 0x88C6 +#define GL_MATRIX7_ARB 0x88C7 +#define GL_MATRIX8_ARB 0x88C8 +#define GL_MATRIX9_ARB 0x88C9 +#define GL_MATRIX10_ARB 0x88CA +#define GL_MATRIX11_ARB 0x88CB +#define GL_MATRIX12_ARB 0x88CC +#define GL_MATRIX13_ARB 0x88CD +#define GL_MATRIX14_ARB 0x88CE +#define GL_MATRIX15_ARB 0x88CF +#define GL_MATRIX16_ARB 0x88D0 +#define GL_MATRIX17_ARB 0x88D1 +#define GL_MATRIX18_ARB 0x88D2 +#define GL_MATRIX19_ARB 0x88D3 +#define GL_MATRIX20_ARB 0x88D4 +#define GL_MATRIX21_ARB 0x88D5 +#define GL_MATRIX22_ARB 0x88D6 +#define GL_MATRIX23_ARB 0x88D7 +#define GL_MATRIX24_ARB 0x88D8 +#define GL_MATRIX25_ARB 0x88D9 +#define GL_MATRIX26_ARB 0x88DA +#define GL_MATRIX27_ARB 0x88DB +#define GL_MATRIX28_ARB 0x88DC +#define GL_MATRIX29_ARB 0x88DD +#define GL_MATRIX30_ARB 0x88DE +#define GL_MATRIX31_ARB 0x88DF +#endif + +#ifndef GL_ARB_fragment_program +#define GL_FRAGMENT_PROGRAM_ARB 0x8804 +#define GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805 +#define GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806 +#define GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807 +#define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808 +#define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809 +#define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A +#define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B +#define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C +#define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D +#define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E +#define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F +#define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810 +#define GL_MAX_TEXTURE_COORDS_ARB 0x8871 +#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872 +#endif + +#ifndef GL_ARB_vertex_buffer_object +#define GL_BUFFER_SIZE_ARB 0x8764 +#define GL_BUFFER_USAGE_ARB 0x8765 +#define GL_ARRAY_BUFFER_ARB 0x8892 +#define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893 +#define GL_ARRAY_BUFFER_BINDING_ARB 0x8894 +#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895 +#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896 +#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897 +#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898 +#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899 +#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A +#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B +#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C +#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D +#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E +#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F +#define GL_READ_ONLY_ARB 0x88B8 +#define GL_WRITE_ONLY_ARB 0x88B9 +#define GL_READ_WRITE_ARB 0x88BA +#define GL_BUFFER_ACCESS_ARB 0x88BB +#define GL_BUFFER_MAPPED_ARB 0x88BC +#define GL_BUFFER_MAP_POINTER_ARB 0x88BD +#define GL_STREAM_DRAW_ARB 0x88E0 +#define GL_STREAM_READ_ARB 0x88E1 +#define GL_STREAM_COPY_ARB 0x88E2 +#define GL_STATIC_DRAW_ARB 0x88E4 +#define GL_STATIC_READ_ARB 0x88E5 +#define GL_STATIC_COPY_ARB 0x88E6 +#define GL_DYNAMIC_DRAW_ARB 0x88E8 +#define GL_DYNAMIC_READ_ARB 0x88E9 +#define GL_DYNAMIC_COPY_ARB 0x88EA +#endif + +#ifndef GL_ARB_occlusion_query +#define GL_QUERY_COUNTER_BITS_ARB 0x8864 +#define GL_CURRENT_QUERY_ARB 0x8865 +#define GL_QUERY_RESULT_ARB 0x8866 +#define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867 +#define GL_SAMPLES_PASSED_ARB 0x8914 +#endif + +#ifndef GL_ARB_shader_objects +#define GL_PROGRAM_OBJECT_ARB 0x8B40 +#define GL_SHADER_OBJECT_ARB 0x8B48 +#define GL_OBJECT_TYPE_ARB 0x8B4E +#define GL_OBJECT_SUBTYPE_ARB 0x8B4F +#define GL_FLOAT_VEC2_ARB 0x8B50 +#define GL_FLOAT_VEC3_ARB 0x8B51 +#define GL_FLOAT_VEC4_ARB 0x8B52 +#define GL_INT_VEC2_ARB 0x8B53 +#define GL_INT_VEC3_ARB 0x8B54 +#define GL_INT_VEC4_ARB 0x8B55 +#define GL_BOOL_ARB 0x8B56 +#define GL_BOOL_VEC2_ARB 0x8B57 +#define GL_BOOL_VEC3_ARB 0x8B58 +#define GL_BOOL_VEC4_ARB 0x8B59 +#define GL_FLOAT_MAT2_ARB 0x8B5A +#define GL_FLOAT_MAT3_ARB 0x8B5B +#define GL_FLOAT_MAT4_ARB 0x8B5C +#define GL_SAMPLER_1D_ARB 0x8B5D +#define GL_SAMPLER_2D_ARB 0x8B5E +#define GL_SAMPLER_3D_ARB 0x8B5F +#define GL_SAMPLER_CUBE_ARB 0x8B60 +#define GL_SAMPLER_1D_SHADOW_ARB 0x8B61 +#define GL_SAMPLER_2D_SHADOW_ARB 0x8B62 +#define GL_SAMPLER_2D_RECT_ARB 0x8B63 +#define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64 +#define GL_OBJECT_DELETE_STATUS_ARB 0x8B80 +#define GL_OBJECT_COMPILE_STATUS_ARB 0x8B81 +#define GL_OBJECT_LINK_STATUS_ARB 0x8B82 +#define GL_OBJECT_VALIDATE_STATUS_ARB 0x8B83 +#define GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8B84 +#define GL_OBJECT_ATTACHED_OBJECTS_ARB 0x8B85 +#define GL_OBJECT_ACTIVE_UNIFORMS_ARB 0x8B86 +#define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87 +#define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88 +#endif + +#ifndef GL_ARB_vertex_shader +#define GL_VERTEX_SHADER_ARB 0x8B31 +#define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A +#define GL_MAX_VARYING_FLOATS_ARB 0x8B4B +#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C +#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D +#define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8B89 +#define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A +#endif + +#ifndef GL_ARB_fragment_shader +#define GL_FRAGMENT_SHADER_ARB 0x8B30 +#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49 +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B +#endif + +#ifndef GL_ARB_shading_language_100 +#define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C +#endif + +#ifndef GL_ARB_texture_non_power_of_two +#endif + +#ifndef GL_ARB_point_sprite +#define GL_POINT_SPRITE_ARB 0x8861 +#define GL_COORD_REPLACE_ARB 0x8862 +#endif + +#ifndef GL_ARB_fragment_program_shadow +#endif + +#ifndef GL_ARB_draw_buffers +#define GL_MAX_DRAW_BUFFERS_ARB 0x8824 +#define GL_DRAW_BUFFER0_ARB 0x8825 +#define GL_DRAW_BUFFER1_ARB 0x8826 +#define GL_DRAW_BUFFER2_ARB 0x8827 +#define GL_DRAW_BUFFER3_ARB 0x8828 +#define GL_DRAW_BUFFER4_ARB 0x8829 +#define GL_DRAW_BUFFER5_ARB 0x882A +#define GL_DRAW_BUFFER6_ARB 0x882B +#define GL_DRAW_BUFFER7_ARB 0x882C +#define GL_DRAW_BUFFER8_ARB 0x882D +#define GL_DRAW_BUFFER9_ARB 0x882E +#define GL_DRAW_BUFFER10_ARB 0x882F +#define GL_DRAW_BUFFER11_ARB 0x8830 +#define GL_DRAW_BUFFER12_ARB 0x8831 +#define GL_DRAW_BUFFER13_ARB 0x8832 +#define GL_DRAW_BUFFER14_ARB 0x8833 +#define GL_DRAW_BUFFER15_ARB 0x8834 +#endif + +#ifndef GL_ARB_texture_rectangle +#define GL_TEXTURE_RECTANGLE_ARB 0x84F5 +#define GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84F6 +#define GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84F7 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8 +#endif + +#ifndef GL_ARB_color_buffer_float +#define GL_RGBA_FLOAT_MODE_ARB 0x8820 +#define GL_CLAMP_VERTEX_COLOR_ARB 0x891A +#define GL_CLAMP_FRAGMENT_COLOR_ARB 0x891A +#define GL_CLAMP_READ_COLOR_ARB 0x891C +#define GL_FIXED_ONLY_ARB 0x891D +#endif + +#ifndef GL_ARB_half_float_pixel +#define GL_HALF_FLOAT_ARB 0x140B +#endif + +#ifndef GL_ARB_texture_float +#define GL_TEXTURE_RED_TYPE_ARB 0x8C10 +#define GL_TEXTURE_GREEN_TYPE_ARB 0x8C11 +#define GL_TEXTURE_BLUE_TYPE_ARB 0x8C12 +#define GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13 +#define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14 +#define GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15 +#define GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16 +#define GL_UNSIGNED_NORMALIZED_ARB 0x8C17 +#define GL_RGBA32F_ARB 0x8814 +#define GL_RGB32F_ARB 0x8815 +#define GL_ALPHA32F_ARB 0x8816 +#define GL_INTENSITY32F_ARB 0x8817 +#define GL_LUMINANCE32F_ARB 0x8818 +#define GL_LUMINANCE_ALPHA32F_ARB 0x8819 +#define GL_RGBA16F_ARB 0x881A +#define GL_RGB16F_ARB 0x881B +#define GL_ALPHA16F_ARB 0x881C +#define GL_INTENSITY16F_ARB 0x881D +#define GL_LUMINANCE16F_ARB 0x881E +#define GL_LUMINANCE_ALPHA16F_ARB 0x881F +#endif + +#ifndef GL_ARB_pixel_buffer_object +#define GL_PIXEL_PACK_BUFFER_ARB 0x88EB +#define GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC +#define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED +#define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF +#endif + #ifndef GL_EXT_abgr #define GL_ABGR_EXT 0x8000 #endif @@ -354,23 +1019,14 @@ extern "C" { #endif #ifndef GL_EXT_texture3D -#define GL_PACK_SKIP_IMAGES 0x806B #define GL_PACK_SKIP_IMAGES_EXT 0x806B -#define GL_PACK_IMAGE_HEIGHT 0x806C #define GL_PACK_IMAGE_HEIGHT_EXT 0x806C -#define GL_UNPACK_SKIP_IMAGES 0x806D #define GL_UNPACK_SKIP_IMAGES_EXT 0x806D -#define GL_UNPACK_IMAGE_HEIGHT 0x806E #define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E -#define GL_TEXTURE_3D 0x806F #define GL_TEXTURE_3D_EXT 0x806F -#define GL_PROXY_TEXTURE_3D 0x8070 #define GL_PROXY_TEXTURE_3D_EXT 0x8070 -#define GL_TEXTURE_DEPTH 0x8071 #define GL_TEXTURE_DEPTH_EXT 0x8071 -#define GL_TEXTURE_WRAP_R 0x8072 #define GL_TEXTURE_WRAP_R_EXT 0x8072 -#define GL_MAX_3D_TEXTURE_SIZE 0x8073 #define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073 #endif @@ -701,14 +1357,17 @@ extern "C" { #define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E #endif -#ifndef GL_SGIS_point_parameters +#ifndef GL_EXT_point_parameters #define GL_POINT_SIZE_MIN_EXT 0x8126 -#define GL_POINT_SIZE_MIN_SGIS 0x8126 #define GL_POINT_SIZE_MAX_EXT 0x8127 -#define GL_POINT_SIZE_MAX_SGIS 0x8127 #define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128 -#define GL_POINT_FADE_THRESHOLD_SIZE_SGIS 0x8128 #define GL_DISTANCE_ATTENUATION_EXT 0x8129 +#endif + +#ifndef GL_SGIS_point_parameters +#define GL_POINT_SIZE_MIN_SGIS 0x8126 +#define GL_POINT_SIZE_MAX_SGIS 0x8127 +#define GL_POINT_FADE_THRESHOLD_SIZE_SGIS 0x8128 #define GL_DISTANCE_ATTENUATION_SGIS 0x8129 #endif @@ -996,6 +1655,16 @@ extern "C" { #define GL_ALPHA_MAX_SGIX 0x8321 #endif +#ifndef GL_SGIX_impact_pixel_texture +#define GL_PIXEL_TEX_GEN_Q_CEILING_SGIX 0x8184 +#define GL_PIXEL_TEX_GEN_Q_ROUND_SGIX 0x8185 +#define GL_PIXEL_TEX_GEN_Q_FLOOR_SGIX 0x8186 +#define GL_PIXEL_TEX_GEN_ALPHA_REPLACE_SGIX 0x8187 +#define GL_PIXEL_TEX_GEN_ALPHA_NO_REPLACE_SGIX 0x8188 +#define GL_PIXEL_TEX_GEN_ALPHA_LS_SGIX 0x8189 +#define GL_PIXEL_TEX_GEN_ALPHA_MS_SGIX 0x818A +#endif + #ifndef GL_EXT_bgra #define GL_BGR_EXT 0x80E0 #define GL_BGRA_EXT 0x80E1 @@ -1124,35 +1793,15 @@ extern "C" { #define GL_SOURCE0_RGB_EXT 0x8580 #define GL_SOURCE1_RGB_EXT 0x8581 #define GL_SOURCE2_RGB_EXT 0x8582 -#define GL_SOURCE3_RGB_EXT 0x8583 -#define GL_SOURCE4_RGB_EXT 0x8584 -#define GL_SOURCE5_RGB_EXT 0x8585 -#define GL_SOURCE6_RGB_EXT 0x8586 -#define GL_SOURCE7_RGB_EXT 0x8587 #define GL_SOURCE0_ALPHA_EXT 0x8588 #define GL_SOURCE1_ALPHA_EXT 0x8589 #define GL_SOURCE2_ALPHA_EXT 0x858A -#define GL_SOURCE3_ALPHA_EXT 0x858B -#define GL_SOURCE4_ALPHA_EXT 0x858C -#define GL_SOURCE5_ALPHA_EXT 0x858D -#define GL_SOURCE6_ALPHA_EXT 0x858E -#define GL_SOURCE7_ALPHA_EXT 0x858F #define GL_OPERAND0_RGB_EXT 0x8590 #define GL_OPERAND1_RGB_EXT 0x8591 #define GL_OPERAND2_RGB_EXT 0x8592 -#define GL_OPERAND3_RGB_EXT 0x8593 -#define GL_OPERAND4_RGB_EXT 0x8594 -#define GL_OPERAND5_RGB_EXT 0x8595 -#define GL_OPERAND6_RGB_EXT 0x8596 -#define GL_OPERAND7_RGB_EXT 0x8597 #define GL_OPERAND0_ALPHA_EXT 0x8598 #define GL_OPERAND1_ALPHA_EXT 0x8599 #define GL_OPERAND2_ALPHA_EXT 0x859A -#define GL_OPERAND3_ALPHA_EXT 0x859B -#define GL_OPERAND4_ALPHA_EXT 0x859C -#define GL_OPERAND5_ALPHA_EXT 0x859D -#define GL_OPERAND6_ALPHA_EXT 0x859E -#define GL_OPERAND7_ALPHA_EXT 0x859F #endif #ifndef GL_APPLE_specular_vector @@ -1179,9 +1828,9 @@ extern "C" { #endif #ifndef GL_SUN_triangle_list -#define GL_RESTART_SUN 0x01 -#define GL_REPLACE_MIDDLE_SUN 0x02 -#define GL_REPLACE_OLDEST_SUN 0x03 +#define GL_RESTART_SUN 0x0001 +#define GL_REPLACE_MIDDLE_SUN 0x0002 +#define GL_REPLACE_OLDEST_SUN 0x0003 #define GL_TRIANGLE_LIST_SUN 0x81D7 #define GL_REPLACEMENT_CODE_SUN 0x81D8 #define GL_REPLACEMENT_CODE_ARRAY_SUN 0x85C0 @@ -1198,13 +1847,6 @@ extern "C" { #define GL_R1UI_T2F_C4F_N3F_V3F_SUN 0x85CB #endif - /* DVR support --This is a temporary solution. Hopefully the new - glext.h from ARB will have GL_SUN_video_resize_compensation - defined. */ -#ifndef GL_SUN_video_resize_compensation -#define GL_VIDEO_RESIZE_COMPENSATION_SUN 0x85CD -#endif - #ifndef GL_SUN_vertex #endif @@ -1284,7 +1926,7 @@ extern "C" { #define GL_MODELVIEW0_STACK_DEPTH_EXT GL_MODELVIEW_STACK_DEPTH #define GL_MODELVIEW1_STACK_DEPTH_EXT 0x8502 #define GL_MODELVIEW0_MATRIX_EXT GL_MODELVIEW_MATRIX -#define GL_MODELVIEW_MATRIX1_EXT 0x8506 +#define GL_MODELVIEW1_MATRIX_EXT 0x8506 #define GL_VERTEX_WEIGHTING_EXT 0x8509 #define GL_MODELVIEW0_EXT GL_MODELVIEW #define GL_MODELVIEW1_EXT 0x850A @@ -1485,6 +2127,7 @@ extern "C" { #define GL_SAMPLE_MASK_VALUE_EXT 0x80AA #define GL_SAMPLE_MASK_INVERT_EXT 0x80AB #define GL_SAMPLE_PATTERN_EXT 0x80AC +#define GL_MULTISAMPLE_BIT_EXT 0x20000000 #endif #ifndef GL_SGIX_vertex_preclip @@ -1519,188 +2162,1457 @@ extern "C" { #define GL_TEXTURE_COLOR_WRITEMASK_SGIS 0x81EF #endif +#ifndef GL_EXT_texture_env_dot3 +#define GL_DOT3_RGB_EXT 0x8740 +#define GL_DOT3_RGBA_EXT 0x8741 +#endif + +#ifndef GL_ATI_texture_mirror_once +#define GL_MIRROR_CLAMP_ATI 0x8742 +#define GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743 +#endif + +#ifndef GL_NV_fence +#define GL_ALL_COMPLETED_NV 0x84F2 +#define GL_FENCE_STATUS_NV 0x84F3 +#define GL_FENCE_CONDITION_NV 0x84F4 +#endif + +#ifndef GL_IBM_texture_mirrored_repeat +#define GL_MIRRORED_REPEAT_IBM 0x8370 +#endif + +#ifndef GL_NV_evaluators +#define GL_EVAL_2D_NV 0x86C0 +#define GL_EVAL_TRIANGULAR_2D_NV 0x86C1 +#define GL_MAP_TESSELLATION_NV 0x86C2 +#define GL_MAP_ATTRIB_U_ORDER_NV 0x86C3 +#define GL_MAP_ATTRIB_V_ORDER_NV 0x86C4 +#define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5 +#define GL_EVAL_VERTEX_ATTRIB0_NV 0x86C6 +#define GL_EVAL_VERTEX_ATTRIB1_NV 0x86C7 +#define GL_EVAL_VERTEX_ATTRIB2_NV 0x86C8 +#define GL_EVAL_VERTEX_ATTRIB3_NV 0x86C9 +#define GL_EVAL_VERTEX_ATTRIB4_NV 0x86CA +#define GL_EVAL_VERTEX_ATTRIB5_NV 0x86CB +#define GL_EVAL_VERTEX_ATTRIB6_NV 0x86CC +#define GL_EVAL_VERTEX_ATTRIB7_NV 0x86CD +#define GL_EVAL_VERTEX_ATTRIB8_NV 0x86CE +#define GL_EVAL_VERTEX_ATTRIB9_NV 0x86CF +#define GL_EVAL_VERTEX_ATTRIB10_NV 0x86D0 +#define GL_EVAL_VERTEX_ATTRIB11_NV 0x86D1 +#define GL_EVAL_VERTEX_ATTRIB12_NV 0x86D2 +#define GL_EVAL_VERTEX_ATTRIB13_NV 0x86D3 +#define GL_EVAL_VERTEX_ATTRIB14_NV 0x86D4 +#define GL_EVAL_VERTEX_ATTRIB15_NV 0x86D5 +#define GL_MAX_MAP_TESSELLATION_NV 0x86D6 +#define GL_MAX_RATIONAL_EVAL_ORDER_NV 0x86D7 +#endif + +#ifndef GL_NV_packed_depth_stencil +#define GL_DEPTH_STENCIL_NV 0x84F9 +#define GL_UNSIGNED_INT_24_8_NV 0x84FA +#endif + +#ifndef GL_NV_register_combiners2 +#define GL_PER_STAGE_CONSTANTS_NV 0x8535 +#endif + +#ifndef GL_NV_texture_compression_vtc +#endif + +#ifndef GL_NV_texture_rectangle +#define GL_TEXTURE_RECTANGLE_NV 0x84F5 +#define GL_TEXTURE_BINDING_RECTANGLE_NV 0x84F6 +#define GL_PROXY_TEXTURE_RECTANGLE_NV 0x84F7 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV 0x84F8 +#endif + +#ifndef GL_NV_texture_shader +#define GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864C +#define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D +#define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E +#define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9 +#define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA +#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB +#define GL_DSDT_MAG_INTENSITY_NV 0x86DC +#define GL_SHADER_CONSISTENT_NV 0x86DD +#define GL_TEXTURE_SHADER_NV 0x86DE +#define GL_SHADER_OPERATION_NV 0x86DF +#define GL_CULL_MODES_NV 0x86E0 +#define GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1 +#define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2 +#define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3 +#define GL_OFFSET_TEXTURE_2D_MATRIX_NV GL_OFFSET_TEXTURE_MATRIX_NV +#define GL_OFFSET_TEXTURE_2D_SCALE_NV GL_OFFSET_TEXTURE_SCALE_NV +#define GL_OFFSET_TEXTURE_2D_BIAS_NV GL_OFFSET_TEXTURE_BIAS_NV +#define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86E4 +#define GL_CONST_EYE_NV 0x86E5 +#define GL_PASS_THROUGH_NV 0x86E6 +#define GL_CULL_FRAGMENT_NV 0x86E7 +#define GL_OFFSET_TEXTURE_2D_NV 0x86E8 +#define GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86E9 +#define GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86EA +#define GL_DOT_PRODUCT_NV 0x86EC +#define GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ED +#define GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86EE +#define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0 +#define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1 +#define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2 +#define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3 +#define GL_HILO_NV 0x86F4 +#define GL_DSDT_NV 0x86F5 +#define GL_DSDT_MAG_NV 0x86F6 +#define GL_DSDT_MAG_VIB_NV 0x86F7 +#define GL_HILO16_NV 0x86F8 +#define GL_SIGNED_HILO_NV 0x86F9 +#define GL_SIGNED_HILO16_NV 0x86FA +#define GL_SIGNED_RGBA_NV 0x86FB +#define GL_SIGNED_RGBA8_NV 0x86FC +#define GL_SIGNED_RGB_NV 0x86FE +#define GL_SIGNED_RGB8_NV 0x86FF +#define GL_SIGNED_LUMINANCE_NV 0x8701 +#define GL_SIGNED_LUMINANCE8_NV 0x8702 +#define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703 +#define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704 +#define GL_SIGNED_ALPHA_NV 0x8705 +#define GL_SIGNED_ALPHA8_NV 0x8706 +#define GL_SIGNED_INTENSITY_NV 0x8707 +#define GL_SIGNED_INTENSITY8_NV 0x8708 +#define GL_DSDT8_NV 0x8709 +#define GL_DSDT8_MAG8_NV 0x870A +#define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B +#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C +#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D +#define GL_HI_SCALE_NV 0x870E +#define GL_LO_SCALE_NV 0x870F +#define GL_DS_SCALE_NV 0x8710 +#define GL_DT_SCALE_NV 0x8711 +#define GL_MAGNITUDE_SCALE_NV 0x8712 +#define GL_VIBRANCE_SCALE_NV 0x8713 +#define GL_HI_BIAS_NV 0x8714 +#define GL_LO_BIAS_NV 0x8715 +#define GL_DS_BIAS_NV 0x8716 +#define GL_DT_BIAS_NV 0x8717 +#define GL_MAGNITUDE_BIAS_NV 0x8718 +#define GL_VIBRANCE_BIAS_NV 0x8719 +#define GL_TEXTURE_BORDER_VALUES_NV 0x871A +#define GL_TEXTURE_HI_SIZE_NV 0x871B +#define GL_TEXTURE_LO_SIZE_NV 0x871C +#define GL_TEXTURE_DS_SIZE_NV 0x871D +#define GL_TEXTURE_DT_SIZE_NV 0x871E +#define GL_TEXTURE_MAG_SIZE_NV 0x871F +#endif + +#ifndef GL_NV_texture_shader2 +#define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF +#endif + +#ifndef GL_NV_vertex_array_range2 +#define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533 +#endif + +#ifndef GL_NV_vertex_program +#define GL_VERTEX_PROGRAM_NV 0x8620 +#define GL_VERTEX_STATE_PROGRAM_NV 0x8621 +#define GL_ATTRIB_ARRAY_SIZE_NV 0x8623 +#define GL_ATTRIB_ARRAY_STRIDE_NV 0x8624 +#define GL_ATTRIB_ARRAY_TYPE_NV 0x8625 +#define GL_CURRENT_ATTRIB_NV 0x8626 +#define GL_PROGRAM_LENGTH_NV 0x8627 +#define GL_PROGRAM_STRING_NV 0x8628 +#define GL_MODELVIEW_PROJECTION_NV 0x8629 +#define GL_IDENTITY_NV 0x862A +#define GL_INVERSE_NV 0x862B +#define GL_TRANSPOSE_NV 0x862C +#define GL_INVERSE_TRANSPOSE_NV 0x862D +#define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E +#define GL_MAX_TRACK_MATRICES_NV 0x862F +#define GL_MATRIX0_NV 0x8630 +#define GL_MATRIX1_NV 0x8631 +#define GL_MATRIX2_NV 0x8632 +#define GL_MATRIX3_NV 0x8633 +#define GL_MATRIX4_NV 0x8634 +#define GL_MATRIX5_NV 0x8635 +#define GL_MATRIX6_NV 0x8636 +#define GL_MATRIX7_NV 0x8637 +#define GL_CURRENT_MATRIX_STACK_DEPTH_NV 0x8640 +#define GL_CURRENT_MATRIX_NV 0x8641 +#define GL_VERTEX_PROGRAM_POINT_SIZE_NV 0x8642 +#define GL_VERTEX_PROGRAM_TWO_SIDE_NV 0x8643 +#define GL_PROGRAM_PARAMETER_NV 0x8644 +#define GL_ATTRIB_ARRAY_POINTER_NV 0x8645 +#define GL_PROGRAM_TARGET_NV 0x8646 +#define GL_PROGRAM_RESIDENT_NV 0x8647 +#define GL_TRACK_MATRIX_NV 0x8648 +#define GL_TRACK_MATRIX_TRANSFORM_NV 0x8649 +#define GL_VERTEX_PROGRAM_BINDING_NV 0x864A +#define GL_PROGRAM_ERROR_POSITION_NV 0x864B +#define GL_VERTEX_ATTRIB_ARRAY0_NV 0x8650 +#define GL_VERTEX_ATTRIB_ARRAY1_NV 0x8651 +#define GL_VERTEX_ATTRIB_ARRAY2_NV 0x8652 +#define GL_VERTEX_ATTRIB_ARRAY3_NV 0x8653 +#define GL_VERTEX_ATTRIB_ARRAY4_NV 0x8654 +#define GL_VERTEX_ATTRIB_ARRAY5_NV 0x8655 +#define GL_VERTEX_ATTRIB_ARRAY6_NV 0x8656 +#define GL_VERTEX_ATTRIB_ARRAY7_NV 0x8657 +#define GL_VERTEX_ATTRIB_ARRAY8_NV 0x8658 +#define GL_VERTEX_ATTRIB_ARRAY9_NV 0x8659 +#define GL_VERTEX_ATTRIB_ARRAY10_NV 0x865A +#define GL_VERTEX_ATTRIB_ARRAY11_NV 0x865B +#define GL_VERTEX_ATTRIB_ARRAY12_NV 0x865C +#define GL_VERTEX_ATTRIB_ARRAY13_NV 0x865D +#define GL_VERTEX_ATTRIB_ARRAY14_NV 0x865E +#define GL_VERTEX_ATTRIB_ARRAY15_NV 0x865F +#define GL_MAP1_VERTEX_ATTRIB0_4_NV 0x8660 +#define GL_MAP1_VERTEX_ATTRIB1_4_NV 0x8661 +#define GL_MAP1_VERTEX_ATTRIB2_4_NV 0x8662 +#define GL_MAP1_VERTEX_ATTRIB3_4_NV 0x8663 +#define GL_MAP1_VERTEX_ATTRIB4_4_NV 0x8664 +#define GL_MAP1_VERTEX_ATTRIB5_4_NV 0x8665 +#define GL_MAP1_VERTEX_ATTRIB6_4_NV 0x8666 +#define GL_MAP1_VERTEX_ATTRIB7_4_NV 0x8667 +#define GL_MAP1_VERTEX_ATTRIB8_4_NV 0x8668 +#define GL_MAP1_VERTEX_ATTRIB9_4_NV 0x8669 +#define GL_MAP1_VERTEX_ATTRIB10_4_NV 0x866A +#define GL_MAP1_VERTEX_ATTRIB11_4_NV 0x866B +#define GL_MAP1_VERTEX_ATTRIB12_4_NV 0x866C +#define GL_MAP1_VERTEX_ATTRIB13_4_NV 0x866D +#define GL_MAP1_VERTEX_ATTRIB14_4_NV 0x866E +#define GL_MAP1_VERTEX_ATTRIB15_4_NV 0x866F +#define GL_MAP2_VERTEX_ATTRIB0_4_NV 0x8670 +#define GL_MAP2_VERTEX_ATTRIB1_4_NV 0x8671 +#define GL_MAP2_VERTEX_ATTRIB2_4_NV 0x8672 +#define GL_MAP2_VERTEX_ATTRIB3_4_NV 0x8673 +#define GL_MAP2_VERTEX_ATTRIB4_4_NV 0x8674 +#define GL_MAP2_VERTEX_ATTRIB5_4_NV 0x8675 +#define GL_MAP2_VERTEX_ATTRIB6_4_NV 0x8676 +#define GL_MAP2_VERTEX_ATTRIB7_4_NV 0x8677 +#define GL_MAP2_VERTEX_ATTRIB8_4_NV 0x8678 +#define GL_MAP2_VERTEX_ATTRIB9_4_NV 0x8679 +#define GL_MAP2_VERTEX_ATTRIB10_4_NV 0x867A +#define GL_MAP2_VERTEX_ATTRIB11_4_NV 0x867B +#define GL_MAP2_VERTEX_ATTRIB12_4_NV 0x867C +#define GL_MAP2_VERTEX_ATTRIB13_4_NV 0x867D +#define GL_MAP2_VERTEX_ATTRIB14_4_NV 0x867E +#define GL_MAP2_VERTEX_ATTRIB15_4_NV 0x867F +#endif + +#ifndef GL_SGIX_texture_coordinate_clamp +#define GL_TEXTURE_MAX_CLAMP_S_SGIX 0x8369 +#define GL_TEXTURE_MAX_CLAMP_T_SGIX 0x836A +#define GL_TEXTURE_MAX_CLAMP_R_SGIX 0x836B +#endif + +#ifndef GL_SGIX_scalebias_hint +#define GL_SCALEBIAS_HINT_SGIX 0x8322 +#endif + +#ifndef GL_OML_interlace +#define GL_INTERLACE_OML 0x8980 +#define GL_INTERLACE_READ_OML 0x8981 +#endif + +#ifndef GL_OML_subsample +#define GL_FORMAT_SUBSAMPLE_24_24_OML 0x8982 +#define GL_FORMAT_SUBSAMPLE_244_244_OML 0x8983 +#endif + +#ifndef GL_OML_resample +#define GL_PACK_RESAMPLE_OML 0x8984 +#define GL_UNPACK_RESAMPLE_OML 0x8985 +#define GL_RESAMPLE_REPLICATE_OML 0x8986 +#define GL_RESAMPLE_ZERO_FILL_OML 0x8987 +#define GL_RESAMPLE_AVERAGE_OML 0x8988 +#define GL_RESAMPLE_DECIMATE_OML 0x8989 +#endif + +#ifndef GL_NV_copy_depth_to_color +#define GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E +#define GL_DEPTH_STENCIL_TO_BGRA_NV 0x886F +#endif + +#ifndef GL_ATI_envmap_bumpmap +#define GL_BUMP_ROT_MATRIX_ATI 0x8775 +#define GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776 +#define GL_BUMP_NUM_TEX_UNITS_ATI 0x8777 +#define GL_BUMP_TEX_UNITS_ATI 0x8778 +#define GL_DUDV_ATI 0x8779 +#define GL_DU8DV8_ATI 0x877A +#define GL_BUMP_ENVMAP_ATI 0x877B +#define GL_BUMP_TARGET_ATI 0x877C +#endif + +#ifndef GL_ATI_fragment_shader +#define GL_FRAGMENT_SHADER_ATI 0x8920 +#define GL_REG_0_ATI 0x8921 +#define GL_REG_1_ATI 0x8922 +#define GL_REG_2_ATI 0x8923 +#define GL_REG_3_ATI 0x8924 +#define GL_REG_4_ATI 0x8925 +#define GL_REG_5_ATI 0x8926 +#define GL_REG_6_ATI 0x8927 +#define GL_REG_7_ATI 0x8928 +#define GL_REG_8_ATI 0x8929 +#define GL_REG_9_ATI 0x892A +#define GL_REG_10_ATI 0x892B +#define GL_REG_11_ATI 0x892C +#define GL_REG_12_ATI 0x892D +#define GL_REG_13_ATI 0x892E +#define GL_REG_14_ATI 0x892F +#define GL_REG_15_ATI 0x8930 +#define GL_REG_16_ATI 0x8931 +#define GL_REG_17_ATI 0x8932 +#define GL_REG_18_ATI 0x8933 +#define GL_REG_19_ATI 0x8934 +#define GL_REG_20_ATI 0x8935 +#define GL_REG_21_ATI 0x8936 +#define GL_REG_22_ATI 0x8937 +#define GL_REG_23_ATI 0x8938 +#define GL_REG_24_ATI 0x8939 +#define GL_REG_25_ATI 0x893A +#define GL_REG_26_ATI 0x893B +#define GL_REG_27_ATI 0x893C +#define GL_REG_28_ATI 0x893D +#define GL_REG_29_ATI 0x893E +#define GL_REG_30_ATI 0x893F +#define GL_REG_31_ATI 0x8940 +#define GL_CON_0_ATI 0x8941 +#define GL_CON_1_ATI 0x8942 +#define GL_CON_2_ATI 0x8943 +#define GL_CON_3_ATI 0x8944 +#define GL_CON_4_ATI 0x8945 +#define GL_CON_5_ATI 0x8946 +#define GL_CON_6_ATI 0x8947 +#define GL_CON_7_ATI 0x8948 +#define GL_CON_8_ATI 0x8949 +#define GL_CON_9_ATI 0x894A +#define GL_CON_10_ATI 0x894B +#define GL_CON_11_ATI 0x894C +#define GL_CON_12_ATI 0x894D +#define GL_CON_13_ATI 0x894E +#define GL_CON_14_ATI 0x894F +#define GL_CON_15_ATI 0x8950 +#define GL_CON_16_ATI 0x8951 +#define GL_CON_17_ATI 0x8952 +#define GL_CON_18_ATI 0x8953 +#define GL_CON_19_ATI 0x8954 +#define GL_CON_20_ATI 0x8955 +#define GL_CON_21_ATI 0x8956 +#define GL_CON_22_ATI 0x8957 +#define GL_CON_23_ATI 0x8958 +#define GL_CON_24_ATI 0x8959 +#define GL_CON_25_ATI 0x895A +#define GL_CON_26_ATI 0x895B +#define GL_CON_27_ATI 0x895C +#define GL_CON_28_ATI 0x895D +#define GL_CON_29_ATI 0x895E +#define GL_CON_30_ATI 0x895F +#define GL_CON_31_ATI 0x8960 +#define GL_MOV_ATI 0x8961 +#define GL_ADD_ATI 0x8963 +#define GL_MUL_ATI 0x8964 +#define GL_SUB_ATI 0x8965 +#define GL_DOT3_ATI 0x8966 +#define GL_DOT4_ATI 0x8967 +#define GL_MAD_ATI 0x8968 +#define GL_LERP_ATI 0x8969 +#define GL_CND_ATI 0x896A +#define GL_CND0_ATI 0x896B +#define GL_DOT2_ADD_ATI 0x896C +#define GL_SECONDARY_INTERPOLATOR_ATI 0x896D +#define GL_NUM_FRAGMENT_REGISTERS_ATI 0x896E +#define GL_NUM_FRAGMENT_CONSTANTS_ATI 0x896F +#define GL_NUM_PASSES_ATI 0x8970 +#define GL_NUM_INSTRUCTIONS_PER_PASS_ATI 0x8971 +#define GL_NUM_INSTRUCTIONS_TOTAL_ATI 0x8972 +#define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973 +#define GL_NUM_LOOPBACK_COMPONENTS_ATI 0x8974 +#define GL_COLOR_ALPHA_PAIRING_ATI 0x8975 +#define GL_SWIZZLE_STR_ATI 0x8976 +#define GL_SWIZZLE_STQ_ATI 0x8977 +#define GL_SWIZZLE_STR_DR_ATI 0x8978 +#define GL_SWIZZLE_STQ_DQ_ATI 0x8979 +#define GL_SWIZZLE_STRQ_ATI 0x897A +#define GL_SWIZZLE_STRQ_DQ_ATI 0x897B +#define GL_RED_BIT_ATI 0x00000001 +#define GL_GREEN_BIT_ATI 0x00000002 +#define GL_BLUE_BIT_ATI 0x00000004 +#define GL_2X_BIT_ATI 0x00000001 +#define GL_4X_BIT_ATI 0x00000002 +#define GL_8X_BIT_ATI 0x00000004 +#define GL_HALF_BIT_ATI 0x00000008 +#define GL_QUARTER_BIT_ATI 0x00000010 +#define GL_EIGHTH_BIT_ATI 0x00000020 +#define GL_SATURATE_BIT_ATI 0x00000040 +#define GL_COMP_BIT_ATI 0x00000002 +#define GL_NEGATE_BIT_ATI 0x00000004 +#define GL_BIAS_BIT_ATI 0x00000008 +#endif + +#ifndef GL_ATI_pn_triangles +#define GL_PN_TRIANGLES_ATI 0x87F0 +#define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1 +#define GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2 +#define GL_PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3 +#define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4 +#define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5 +#define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6 +#define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7 +#define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8 +#endif + +#ifndef GL_ATI_vertex_array_object +#define GL_STATIC_ATI 0x8760 +#define GL_DYNAMIC_ATI 0x8761 +#define GL_PRESERVE_ATI 0x8762 +#define GL_DISCARD_ATI 0x8763 +#define GL_OBJECT_BUFFER_SIZE_ATI 0x8764 +#define GL_OBJECT_BUFFER_USAGE_ATI 0x8765 +#define GL_ARRAY_OBJECT_BUFFER_ATI 0x8766 +#define GL_ARRAY_OBJECT_OFFSET_ATI 0x8767 +#endif + +#ifndef GL_EXT_vertex_shader +#define GL_VERTEX_SHADER_EXT 0x8780 +#define GL_VERTEX_SHADER_BINDING_EXT 0x8781 +#define GL_OP_INDEX_EXT 0x8782 +#define GL_OP_NEGATE_EXT 0x8783 +#define GL_OP_DOT3_EXT 0x8784 +#define GL_OP_DOT4_EXT 0x8785 +#define GL_OP_MUL_EXT 0x8786 +#define GL_OP_ADD_EXT 0x8787 +#define GL_OP_MADD_EXT 0x8788 +#define GL_OP_FRAC_EXT 0x8789 +#define GL_OP_MAX_EXT 0x878A +#define GL_OP_MIN_EXT 0x878B +#define GL_OP_SET_GE_EXT 0x878C +#define GL_OP_SET_LT_EXT 0x878D +#define GL_OP_CLAMP_EXT 0x878E +#define GL_OP_FLOOR_EXT 0x878F +#define GL_OP_ROUND_EXT 0x8790 +#define GL_OP_EXP_BASE_2_EXT 0x8791 +#define GL_OP_LOG_BASE_2_EXT 0x8792 +#define GL_OP_POWER_EXT 0x8793 +#define GL_OP_RECIP_EXT 0x8794 +#define GL_OP_RECIP_SQRT_EXT 0x8795 +#define GL_OP_SUB_EXT 0x8796 +#define GL_OP_CROSS_PRODUCT_EXT 0x8797 +#define GL_OP_MULTIPLY_MATRIX_EXT 0x8798 +#define GL_OP_MOV_EXT 0x8799 +#define GL_OUTPUT_VERTEX_EXT 0x879A +#define GL_OUTPUT_COLOR0_EXT 0x879B +#define GL_OUTPUT_COLOR1_EXT 0x879C +#define GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D +#define GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E +#define GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F +#define GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0 +#define GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1 +#define GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2 +#define GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3 +#define GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4 +#define GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5 +#define GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6 +#define GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7 +#define GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8 +#define GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9 +#define GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA +#define GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB +#define GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC +#define GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD +#define GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE +#define GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF +#define GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0 +#define GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1 +#define GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2 +#define GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3 +#define GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4 +#define GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5 +#define GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6 +#define GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7 +#define GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8 +#define GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9 +#define GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA +#define GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB +#define GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC +#define GL_OUTPUT_FOG_EXT 0x87BD +#define GL_SCALAR_EXT 0x87BE +#define GL_VECTOR_EXT 0x87BF +#define GL_MATRIX_EXT 0x87C0 +#define GL_VARIANT_EXT 0x87C1 +#define GL_INVARIANT_EXT 0x87C2 +#define GL_LOCAL_CONSTANT_EXT 0x87C3 +#define GL_LOCAL_EXT 0x87C4 +#define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5 +#define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6 +#define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7 +#define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8 +#define GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9 +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CC +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CD +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE +#define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF +#define GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0 +#define GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1 +#define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2 +#define GL_VERTEX_SHADER_LOCALS_EXT 0x87D3 +#define GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4 +#define GL_X_EXT 0x87D5 +#define GL_Y_EXT 0x87D6 +#define GL_Z_EXT 0x87D7 +#define GL_W_EXT 0x87D8 +#define GL_NEGATIVE_X_EXT 0x87D9 +#define GL_NEGATIVE_Y_EXT 0x87DA +#define GL_NEGATIVE_Z_EXT 0x87DB +#define GL_NEGATIVE_W_EXT 0x87DC +#define GL_ZERO_EXT 0x87DD +#define GL_ONE_EXT 0x87DE +#define GL_NEGATIVE_ONE_EXT 0x87DF +#define GL_NORMALIZED_RANGE_EXT 0x87E0 +#define GL_FULL_RANGE_EXT 0x87E1 +#define GL_CURRENT_VERTEX_EXT 0x87E2 +#define GL_MVP_MATRIX_EXT 0x87E3 +#define GL_VARIANT_VALUE_EXT 0x87E4 +#define GL_VARIANT_DATATYPE_EXT 0x87E5 +#define GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6 +#define GL_VARIANT_ARRAY_TYPE_EXT 0x87E7 +#define GL_VARIANT_ARRAY_EXT 0x87E8 +#define GL_VARIANT_ARRAY_POINTER_EXT 0x87E9 +#define GL_INVARIANT_VALUE_EXT 0x87EA +#define GL_INVARIANT_DATATYPE_EXT 0x87EB +#define GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC +#define GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED +#endif + +#ifndef GL_ATI_vertex_streams +#define GL_MAX_VERTEX_STREAMS_ATI 0x876B +#define GL_VERTEX_STREAM0_ATI 0x876C +#define GL_VERTEX_STREAM1_ATI 0x876D +#define GL_VERTEX_STREAM2_ATI 0x876E +#define GL_VERTEX_STREAM3_ATI 0x876F +#define GL_VERTEX_STREAM4_ATI 0x8770 +#define GL_VERTEX_STREAM5_ATI 0x8771 +#define GL_VERTEX_STREAM6_ATI 0x8772 +#define GL_VERTEX_STREAM7_ATI 0x8773 +#define GL_VERTEX_SOURCE_ATI 0x8774 +#endif + +#ifndef GL_ATI_element_array +#define GL_ELEMENT_ARRAY_ATI 0x8768 +#define GL_ELEMENT_ARRAY_TYPE_ATI 0x8769 +#define GL_ELEMENT_ARRAY_POINTER_ATI 0x876A +#endif + +#ifndef GL_SUN_mesh_array +#define GL_QUAD_MESH_SUN 0x8614 +#define GL_TRIANGLE_MESH_SUN 0x8615 +#endif + +#ifndef GL_SUN_slice_accum +#define GL_SLICE_ACCUM_SUN 0x85CC +#endif + +#ifndef GL_NV_multisample_filter_hint +#define GL_MULTISAMPLE_FILTER_HINT_NV 0x8534 +#endif + +#ifndef GL_NV_depth_clamp +#define GL_DEPTH_CLAMP_NV 0x864F +#endif + +#ifndef GL_NV_occlusion_query +#define GL_PIXEL_COUNTER_BITS_NV 0x8864 +#define GL_CURRENT_OCCLUSION_QUERY_ID_NV 0x8865 +#define GL_PIXEL_COUNT_NV 0x8866 +#define GL_PIXEL_COUNT_AVAILABLE_NV 0x8867 +#endif + +#ifndef GL_NV_point_sprite +#define GL_POINT_SPRITE_NV 0x8861 +#define GL_COORD_REPLACE_NV 0x8862 +#define GL_POINT_SPRITE_R_MODE_NV 0x8863 +#endif + +#ifndef GL_NV_texture_shader3 +#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850 +#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851 +#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852 +#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853 +#define GL_OFFSET_HILO_TEXTURE_2D_NV 0x8854 +#define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855 +#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856 +#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857 +#define GL_DEPENDENT_HILO_TEXTURE_2D_NV 0x8858 +#define GL_DEPENDENT_RGB_TEXTURE_3D_NV 0x8859 +#define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A +#define GL_DOT_PRODUCT_PASS_THROUGH_NV 0x885B +#define GL_DOT_PRODUCT_TEXTURE_1D_NV 0x885C +#define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D +#define GL_HILO8_NV 0x885E +#define GL_SIGNED_HILO8_NV 0x885F +#define GL_FORCE_BLUE_TO_ONE_NV 0x8860 +#endif + +#ifndef GL_NV_vertex_program1_1 +#endif + +#ifndef GL_EXT_shadow_funcs +#endif + +#ifndef GL_EXT_stencil_two_side +#define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910 +#define GL_ACTIVE_STENCIL_FACE_EXT 0x8911 +#endif + +#ifndef GL_ATI_text_fragment_shader +#define GL_TEXT_FRAGMENT_SHADER_ATI 0x8200 +#endif + +#ifndef GL_APPLE_client_storage +#define GL_UNPACK_CLIENT_STORAGE_APPLE 0x85B2 +#endif + +#ifndef GL_APPLE_element_array +#define GL_ELEMENT_ARRAY_APPLE 0x8768 +#define GL_ELEMENT_ARRAY_TYPE_APPLE 0x8769 +#define GL_ELEMENT_ARRAY_POINTER_APPLE 0x876A +#endif + +#ifndef GL_APPLE_fence +#define GL_DRAW_PIXELS_APPLE 0x8A0A +#define GL_FENCE_APPLE 0x8A0B +#endif + +#ifndef GL_APPLE_vertex_array_object +#define GL_VERTEX_ARRAY_BINDING_APPLE 0x85B5 +#endif + +#ifndef GL_APPLE_vertex_array_range +#define GL_VERTEX_ARRAY_RANGE_APPLE 0x851D +#define GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE 0x851E +#define GL_VERTEX_ARRAY_STORAGE_HINT_APPLE 0x851F +#define GL_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521 +#define GL_STORAGE_CACHED_APPLE 0x85BE +#define GL_STORAGE_SHARED_APPLE 0x85BF +#endif + +#ifndef GL_APPLE_ycbcr_422 +#define GL_YCBCR_422_APPLE 0x85B9 +#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA +#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB +#endif + +#ifndef GL_S3_s3tc +#define GL_RGB_S3TC 0x83A0 +#define GL_RGB4_S3TC 0x83A1 +#define GL_RGBA_S3TC 0x83A2 +#define GL_RGBA4_S3TC 0x83A3 +#endif + +#ifndef GL_ATI_draw_buffers +#define GL_MAX_DRAW_BUFFERS_ATI 0x8824 +#define GL_DRAW_BUFFER0_ATI 0x8825 +#define GL_DRAW_BUFFER1_ATI 0x8826 +#define GL_DRAW_BUFFER2_ATI 0x8827 +#define GL_DRAW_BUFFER3_ATI 0x8828 +#define GL_DRAW_BUFFER4_ATI 0x8829 +#define GL_DRAW_BUFFER5_ATI 0x882A +#define GL_DRAW_BUFFER6_ATI 0x882B +#define GL_DRAW_BUFFER7_ATI 0x882C +#define GL_DRAW_BUFFER8_ATI 0x882D +#define GL_DRAW_BUFFER9_ATI 0x882E +#define GL_DRAW_BUFFER10_ATI 0x882F +#define GL_DRAW_BUFFER11_ATI 0x8830 +#define GL_DRAW_BUFFER12_ATI 0x8831 +#define GL_DRAW_BUFFER13_ATI 0x8832 +#define GL_DRAW_BUFFER14_ATI 0x8833 +#define GL_DRAW_BUFFER15_ATI 0x8834 +#endif + +#ifndef GL_ATI_pixel_format_float +#define GL_TYPE_RGBA_FLOAT_ATI 0x8820 +#define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835 +#endif + +#ifndef GL_ATI_texture_env_combine3 +#define GL_MODULATE_ADD_ATI 0x8744 +#define GL_MODULATE_SIGNED_ADD_ATI 0x8745 +#define GL_MODULATE_SUBTRACT_ATI 0x8746 +#endif + +#ifndef GL_ATI_texture_float +#define GL_RGBA_FLOAT32_ATI 0x8814 +#define GL_RGB_FLOAT32_ATI 0x8815 +#define GL_ALPHA_FLOAT32_ATI 0x8816 +#define GL_INTENSITY_FLOAT32_ATI 0x8817 +#define GL_LUMINANCE_FLOAT32_ATI 0x8818 +#define GL_LUMINANCE_ALPHA_FLOAT32_ATI 0x8819 +#define GL_RGBA_FLOAT16_ATI 0x881A +#define GL_RGB_FLOAT16_ATI 0x881B +#define GL_ALPHA_FLOAT16_ATI 0x881C +#define GL_INTENSITY_FLOAT16_ATI 0x881D +#define GL_LUMINANCE_FLOAT16_ATI 0x881E +#define GL_LUMINANCE_ALPHA_FLOAT16_ATI 0x881F +#endif + +#ifndef GL_NV_float_buffer +#define GL_FLOAT_R_NV 0x8880 +#define GL_FLOAT_RG_NV 0x8881 +#define GL_FLOAT_RGB_NV 0x8882 +#define GL_FLOAT_RGBA_NV 0x8883 +#define GL_FLOAT_R16_NV 0x8884 +#define GL_FLOAT_R32_NV 0x8885 +#define GL_FLOAT_RG16_NV 0x8886 +#define GL_FLOAT_RG32_NV 0x8887 +#define GL_FLOAT_RGB16_NV 0x8888 +#define GL_FLOAT_RGB32_NV 0x8889 +#define GL_FLOAT_RGBA16_NV 0x888A +#define GL_FLOAT_RGBA32_NV 0x888B +#define GL_TEXTURE_FLOAT_COMPONENTS_NV 0x888C +#define GL_FLOAT_CLEAR_COLOR_VALUE_NV 0x888D +#define GL_FLOAT_RGBA_MODE_NV 0x888E +#endif + +#ifndef GL_NV_fragment_program +#define GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV 0x8868 +#define GL_FRAGMENT_PROGRAM_NV 0x8870 +#define GL_MAX_TEXTURE_COORDS_NV 0x8871 +#define GL_MAX_TEXTURE_IMAGE_UNITS_NV 0x8872 +#define GL_FRAGMENT_PROGRAM_BINDING_NV 0x8873 +#define GL_PROGRAM_ERROR_STRING_NV 0x8874 +#endif + +#ifndef GL_NV_half_float +#define GL_HALF_FLOAT_NV 0x140B +#endif + +#ifndef GL_NV_pixel_data_range +#define GL_WRITE_PIXEL_DATA_RANGE_NV 0x8878 +#define GL_READ_PIXEL_DATA_RANGE_NV 0x8879 +#define GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV 0x887A +#define GL_READ_PIXEL_DATA_RANGE_LENGTH_NV 0x887B +#define GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV 0x887C +#define GL_READ_PIXEL_DATA_RANGE_POINTER_NV 0x887D +#endif + +#ifndef GL_NV_primitive_restart +#define GL_PRIMITIVE_RESTART_NV 0x8558 +#define GL_PRIMITIVE_RESTART_INDEX_NV 0x8559 +#endif + +#ifndef GL_NV_texture_expand_normal +#define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F +#endif + +#ifndef GL_NV_vertex_program2 +#endif + +#ifndef GL_ATI_map_object_buffer +#endif + +#ifndef GL_ATI_separate_stencil +#define GL_STENCIL_BACK_FUNC_ATI 0x8800 +#define GL_STENCIL_BACK_FAIL_ATI 0x8801 +#define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802 +#define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803 +#endif + +#ifndef GL_ATI_vertex_attrib_array_object +#endif + +#ifndef GL_EXT_depth_bounds_test +#define GL_DEPTH_BOUNDS_TEST_EXT 0x8890 +#define GL_DEPTH_BOUNDS_EXT 0x8891 +#endif + +#ifndef GL_EXT_texture_mirror_clamp +#define GL_MIRROR_CLAMP_EXT 0x8742 +#define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743 +#define GL_MIRROR_CLAMP_TO_BORDER_EXT 0x8912 +#endif + +#ifndef GL_EXT_blend_equation_separate +#define GL_BLEND_EQUATION_RGB_EXT GL_BLEND_EQUATION +#define GL_BLEND_EQUATION_ALPHA_EXT 0x883D +#endif + +#ifndef GL_MESA_pack_invert +#define GL_PACK_INVERT_MESA 0x8758 +#endif + +#ifndef GL_MESA_ycbcr_texture +#define GL_UNSIGNED_SHORT_8_8_MESA 0x85BA +#define GL_UNSIGNED_SHORT_8_8_REV_MESA 0x85BB +#define GL_YCBCR_MESA 0x8757 +#endif + +#ifndef GL_EXT_pixel_buffer_object +#define GL_PIXEL_PACK_BUFFER_EXT 0x88EB +#define GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC +#define GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED +#define GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF +#endif + +#ifndef GL_NV_fragment_program_option +#endif + +#ifndef GL_NV_fragment_program2 +#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 +#define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 +#define GL_MAX_PROGRAM_IF_DEPTH_NV 0x88F6 +#define GL_MAX_PROGRAM_LOOP_DEPTH_NV 0x88F7 +#define GL_MAX_PROGRAM_LOOP_COUNT_NV 0x88F8 +#endif + +#ifndef GL_NV_vertex_program2_option +/* reuse GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV */ +/* reuse GL_MAX_PROGRAM_CALL_DEPTH_NV */ +#endif + +#ifndef GL_NV_vertex_program3 +/* reuse GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB */ +#endif + /*************************************************************/ +#include <stddef.h> +#ifndef GL_VERSION_2_0 +/* GL types for andling program/shader text */ +typedef char GLchar; /* native character */ +#endif + +#ifndef GL_VERSION_1_5 +/* GL types for handling large vertex buffer objects */ +typedef ptrdiff_t GLintptr; +typedef ptrdiff_t GLsizeiptr; +#endif + +#ifndef GL_ARB_vertex_buffer_object +/* GL types for handling large vertex buffer objects */ +typedef ptrdiff_t GLintptrARB; +typedef ptrdiff_t GLsizeiptrARB; +#endif + +#ifndef GL_ARB_shader_objects +/* GL types for handling shader object handles and characters */ +typedef char GLcharARB; /* native character */ +typedef unsigned int GLhandleARB; /* shader object handle */ +#endif + +#ifndef GL_NV_half_float +/* GL type for representing NVIDIA "half" floating point type in host memory */ +typedef unsigned short GLhalfNV; +#endif + #ifndef GL_VERSION_1_2 - /* #define GL_VERSION_1_2 1, I am not sure about this one */ - -#ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glBlendColor (GLclampf, GLclampf, GLclampf, GLclampf); -extern void APIENTRY glBlendEquation (GLenum); -extern void APIENTRY glDrawRangeElements (GLenum, GLuint, GLuint, GLsizei, GLenum, const GLvoid *); -extern void APIENTRY glColorTable (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *); -extern void APIENTRY glColorTableParameterfv (GLenum, GLenum, const GLfloat *); -extern void APIENTRY glColorTableParameteriv (GLenum, GLenum, const GLint *); -extern void APIENTRY glCopyColorTable (GLenum, GLenum, GLint, GLint, GLsizei); -extern void APIENTRY glGetColorTable (GLenum, GLenum, GLenum, GLvoid *); -extern void APIENTRY glGetColorTableParameterfv (GLenum, GLenum, GLfloat *); -extern void APIENTRY glGetColorTableParameteriv (GLenum, GLenum, GLint *); -extern void APIENTRY glColorSubTable (GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); -extern void APIENTRY glCopyColorSubTable (GLenum, GLsizei, GLint, GLint, GLsizei); -extern void APIENTRY glConvolutionFilter1D (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *); -extern void APIENTRY glConvolutionFilter2D (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); -extern void APIENTRY glConvolutionParameterf (GLenum, GLenum, GLfloat); -extern void APIENTRY glConvolutionParameterfv (GLenum, GLenum, const GLfloat *); -extern void APIENTRY glConvolutionParameteri (GLenum, GLenum, GLint); -extern void APIENTRY glConvolutionParameteriv (GLenum, GLenum, const GLint *); -extern void APIENTRY glCopyConvolutionFilter1D (GLenum, GLenum, GLint, GLint, GLsizei); -extern void APIENTRY glCopyConvolutionFilter2D (GLenum, GLenum, GLint, GLint, GLsizei, GLsizei); -extern void APIENTRY glGetConvolutionFilter (GLenum, GLenum, GLenum, GLvoid *); -extern void APIENTRY glGetConvolutionParameterfv (GLenum, GLenum, GLfloat *); -extern void APIENTRY glGetConvolutionParameteriv (GLenum, GLenum, GLint *); -extern void APIENTRY glGetSeparableFilter (GLenum, GLenum, GLenum, GLvoid *, GLvoid *, GLvoid *); -extern void APIENTRY glSeparableFilter2D (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *, const GLvoid *); -extern void APIENTRY glGetHistogram (GLenum, GLboolean, GLenum, GLenum, GLvoid *); -extern void APIENTRY glGetHistogramParameterfv (GLenum, GLenum, GLfloat *); -extern void APIENTRY glGetHistogramParameteriv (GLenum, GLenum, GLint *); -extern void APIENTRY glGetMinmax (GLenum, GLboolean, GLenum, GLenum, GLvoid *); -extern void APIENTRY glGetMinmaxParameterfv (GLenum, GLenum, GLfloat *); -extern void APIENTRY glGetMinmaxParameteriv (GLenum, GLenum, GLint *); -extern void APIENTRY glHistogram (GLenum, GLsizei, GLenum, GLboolean); -extern void APIENTRY glMinmax (GLenum, GLenum, GLboolean); -extern void APIENTRY glResetHistogram (GLenum); -extern void APIENTRY glResetMinmax (GLenum); -extern void APIENTRY glTexImage3D (GLenum, GLint, GLint, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *); -extern void APIENTRY glTexSubImage3D (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); -extern void APIENTRY glCopyTexSubImage3D (GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLBLENDCOLORPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); -typedef void (APIENTRY * PFNGLBLENDEQUATIONPROC) (GLenum mode); -typedef void (APIENTRY * PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); -typedef void (APIENTRY * PFNGLCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); -typedef void (APIENTRY * PFNGLCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRY * PFNGLCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRY * PFNGLCOPYCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (APIENTRY * PFNGLGETCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table); -typedef void (APIENTRY * PFNGLGETCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRY * PFNGLGETCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRY * PFNGLCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data); -typedef void (APIENTRY * PFNGLCOPYCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -typedef void (APIENTRY * PFNGLCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image); -typedef void (APIENTRY * PFNGLCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image); -typedef void (APIENTRY * PFNGLCONVOLUTIONPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat params); -typedef void (APIENTRY * PFNGLCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRY * PFNGLCONVOLUTIONPARAMETERIPROC) (GLenum target, GLenum pname, GLint params); -typedef void (APIENTRY * PFNGLCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRY * PFNGLCOPYCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (APIENTRY * PFNGLCOPYCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRY * PFNGLGETCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image); -typedef void (APIENTRY * PFNGLGETCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRY * PFNGLGETCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRY * PFNGLGETSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span); -typedef void (APIENTRY * PFNGLSEPARABLEFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column); -typedef void (APIENTRY * PFNGLGETHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -typedef void (APIENTRY * PFNGLGETHISTOGRAMPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRY * PFNGLGETHISTOGRAMPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRY * PFNGLGETMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -typedef void (APIENTRY * PFNGLGETMINMAXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRY * PFNGLGETMINMAXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRY * PFNGLHISTOGRAMPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); -typedef void (APIENTRY * PFNGLMINMAXPROC) (GLenum target, GLenum internalformat, GLboolean sink); -typedef void (APIENTRY * PFNGLRESETHISTOGRAMPROC) (GLenum target); -typedef void (APIENTRY * PFNGLRESETMINMAXPROC) (GLenum target); -typedef void (APIENTRY * PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRY * PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRY * PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +#define GL_VERSION_1_2 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendColor (GLclampf, GLclampf, GLclampf, GLclampf); +GLAPI void APIENTRY glBlendEquation (GLenum); +GLAPI void APIENTRY glDrawRangeElements (GLenum, GLuint, GLuint, GLsizei, GLenum, const GLvoid *); +GLAPI void APIENTRY glColorTable (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *); +GLAPI void APIENTRY glColorTableParameterfv (GLenum, GLenum, const GLfloat *); +GLAPI void APIENTRY glColorTableParameteriv (GLenum, GLenum, const GLint *); +GLAPI void APIENTRY glCopyColorTable (GLenum, GLenum, GLint, GLint, GLsizei); +GLAPI void APIENTRY glGetColorTable (GLenum, GLenum, GLenum, GLvoid *); +GLAPI void APIENTRY glGetColorTableParameterfv (GLenum, GLenum, GLfloat *); +GLAPI void APIENTRY glGetColorTableParameteriv (GLenum, GLenum, GLint *); +GLAPI void APIENTRY glColorSubTable (GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); +GLAPI void APIENTRY glCopyColorSubTable (GLenum, GLsizei, GLint, GLint, GLsizei); +GLAPI void APIENTRY glConvolutionFilter1D (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *); +GLAPI void APIENTRY glConvolutionFilter2D (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); +GLAPI void APIENTRY glConvolutionParameterf (GLenum, GLenum, GLfloat); +GLAPI void APIENTRY glConvolutionParameterfv (GLenum, GLenum, const GLfloat *); +GLAPI void APIENTRY glConvolutionParameteri (GLenum, GLenum, GLint); +GLAPI void APIENTRY glConvolutionParameteriv (GLenum, GLenum, const GLint *); +GLAPI void APIENTRY glCopyConvolutionFilter1D (GLenum, GLenum, GLint, GLint, GLsizei); +GLAPI void APIENTRY glCopyConvolutionFilter2D (GLenum, GLenum, GLint, GLint, GLsizei, GLsizei); +GLAPI void APIENTRY glGetConvolutionFilter (GLenum, GLenum, GLenum, GLvoid *); +GLAPI void APIENTRY glGetConvolutionParameterfv (GLenum, GLenum, GLfloat *); +GLAPI void APIENTRY glGetConvolutionParameteriv (GLenum, GLenum, GLint *); +GLAPI void APIENTRY glGetSeparableFilter (GLenum, GLenum, GLenum, GLvoid *, GLvoid *, GLvoid *); +GLAPI void APIENTRY glSeparableFilter2D (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *, const GLvoid *); +GLAPI void APIENTRY glGetHistogram (GLenum, GLboolean, GLenum, GLenum, GLvoid *); +GLAPI void APIENTRY glGetHistogramParameterfv (GLenum, GLenum, GLfloat *); +GLAPI void APIENTRY glGetHistogramParameteriv (GLenum, GLenum, GLint *); +GLAPI void APIENTRY glGetMinmax (GLenum, GLboolean, GLenum, GLenum, GLvoid *); +GLAPI void APIENTRY glGetMinmaxParameterfv (GLenum, GLenum, GLfloat *); +GLAPI void APIENTRY glGetMinmaxParameteriv (GLenum, GLenum, GLint *); +GLAPI void APIENTRY glHistogram (GLenum, GLsizei, GLenum, GLboolean); +GLAPI void APIENTRY glMinmax (GLenum, GLenum, GLboolean); +GLAPI void APIENTRY glResetHistogram (GLenum); +GLAPI void APIENTRY glResetMinmax (GLenum); +GLAPI void APIENTRY glTexImage3D (GLenum, GLint, GLint, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *); +GLAPI void APIENTRY glTexSubImage3D (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); +GLAPI void APIENTRY glCopyTexSubImage3D (GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLBLENDCOLORPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); +typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode); +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); +typedef void (APIENTRYP PFNGLCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); +typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLCOPYCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image); +typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIPROC) (GLenum target, GLenum pname, GLint params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span); +typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); +typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLHISTOGRAMPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); +typedef void (APIENTRYP PFNGLMINMAXPROC) (GLenum target, GLenum internalformat, GLboolean sink); +typedef void (APIENTRYP PFNGLRESETHISTOGRAMPROC) (GLenum target); +typedef void (APIENTRYP PFNGLRESETMINMAXPROC) (GLenum target); +typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); +typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +#endif + +#ifndef GL_VERSION_1_3 +#define GL_VERSION_1_3 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glActiveTexture (GLenum); +GLAPI void APIENTRY glClientActiveTexture (GLenum); +GLAPI void APIENTRY glMultiTexCoord1d (GLenum, GLdouble); +GLAPI void APIENTRY glMultiTexCoord1dv (GLenum, const GLdouble *); +GLAPI void APIENTRY glMultiTexCoord1f (GLenum, GLfloat); +GLAPI void APIENTRY glMultiTexCoord1fv (GLenum, const GLfloat *); +GLAPI void APIENTRY glMultiTexCoord1i (GLenum, GLint); +GLAPI void APIENTRY glMultiTexCoord1iv (GLenum, const GLint *); +GLAPI void APIENTRY glMultiTexCoord1s (GLenum, GLshort); +GLAPI void APIENTRY glMultiTexCoord1sv (GLenum, const GLshort *); +GLAPI void APIENTRY glMultiTexCoord2d (GLenum, GLdouble, GLdouble); +GLAPI void APIENTRY glMultiTexCoord2dv (GLenum, const GLdouble *); +GLAPI void APIENTRY glMultiTexCoord2f (GLenum, GLfloat, GLfloat); +GLAPI void APIENTRY glMultiTexCoord2fv (GLenum, const GLfloat *); +GLAPI void APIENTRY glMultiTexCoord2i (GLenum, GLint, GLint); +GLAPI void APIENTRY glMultiTexCoord2iv (GLenum, const GLint *); +GLAPI void APIENTRY glMultiTexCoord2s (GLenum, GLshort, GLshort); +GLAPI void APIENTRY glMultiTexCoord2sv (GLenum, const GLshort *); +GLAPI void APIENTRY glMultiTexCoord3d (GLenum, GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glMultiTexCoord3dv (GLenum, const GLdouble *); +GLAPI void APIENTRY glMultiTexCoord3f (GLenum, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glMultiTexCoord3fv (GLenum, const GLfloat *); +GLAPI void APIENTRY glMultiTexCoord3i (GLenum, GLint, GLint, GLint); +GLAPI void APIENTRY glMultiTexCoord3iv (GLenum, const GLint *); +GLAPI void APIENTRY glMultiTexCoord3s (GLenum, GLshort, GLshort, GLshort); +GLAPI void APIENTRY glMultiTexCoord3sv (GLenum, const GLshort *); +GLAPI void APIENTRY glMultiTexCoord4d (GLenum, GLdouble, GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glMultiTexCoord4dv (GLenum, const GLdouble *); +GLAPI void APIENTRY glMultiTexCoord4f (GLenum, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glMultiTexCoord4fv (GLenum, const GLfloat *); +GLAPI void APIENTRY glMultiTexCoord4i (GLenum, GLint, GLint, GLint, GLint); +GLAPI void APIENTRY glMultiTexCoord4iv (GLenum, const GLint *); +GLAPI void APIENTRY glMultiTexCoord4s (GLenum, GLshort, GLshort, GLshort, GLshort); +GLAPI void APIENTRY glMultiTexCoord4sv (GLenum, const GLshort *); +GLAPI void APIENTRY glLoadTransposeMatrixf (const GLfloat *); +GLAPI void APIENTRY glLoadTransposeMatrixd (const GLdouble *); +GLAPI void APIENTRY glMultTransposeMatrixf (const GLfloat *); +GLAPI void APIENTRY glMultTransposeMatrixd (const GLdouble *); +GLAPI void APIENTRY glSampleCoverage (GLclampf, GLboolean); +GLAPI void APIENTRY glCompressedTexImage3D (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *); +GLAPI void APIENTRY glCompressedTexImage2D (GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *); +GLAPI void APIENTRY glCompressedTexImage1D (GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, const GLvoid *); +GLAPI void APIENTRY glCompressedTexSubImage3D (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *); +GLAPI void APIENTRY glCompressedTexSubImage2D (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *); +GLAPI void APIENTRY glCompressedTexSubImage1D (GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, const GLvoid *); +GLAPI void APIENTRY glGetCompressedTexImage (GLenum, GLint, GLvoid *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DPROC) (GLenum target, GLdouble s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FPROC) (GLenum target, GLfloat s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IPROC) (GLenum target, GLint s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SPROC) (GLenum target, GLshort s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DPROC) (GLenum target, GLdouble s, GLdouble t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FPROC) (GLenum target, GLfloat s, GLfloat t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IPROC) (GLenum target, GLint s, GLint t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SPROC) (GLenum target, GLshort s, GLshort t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IPROC) (GLenum target, GLint s, GLint t, GLint r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SPROC) (GLenum target, GLshort s, GLshort t, GLshort r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFPROC) (const GLfloat *m); +typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDPROC) (const GLdouble *m); +typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFPROC) (const GLfloat *m); +typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDPROC) (const GLdouble *m); +typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLclampf value, GLboolean invert); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, GLvoid *img); +#endif + +#ifndef GL_VERSION_1_4 +#define GL_VERSION_1_4 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendFuncSeparate (GLenum, GLenum, GLenum, GLenum); +GLAPI void APIENTRY glFogCoordf (GLfloat); +GLAPI void APIENTRY glFogCoordfv (const GLfloat *); +GLAPI void APIENTRY glFogCoordd (GLdouble); +GLAPI void APIENTRY glFogCoorddv (const GLdouble *); +GLAPI void APIENTRY glFogCoordPointer (GLenum, GLsizei, const GLvoid *); +GLAPI void APIENTRY glMultiDrawArrays (GLenum, GLint *, GLsizei *, GLsizei); +GLAPI void APIENTRY glMultiDrawElements (GLenum, const GLsizei *, GLenum, const GLvoid* *, GLsizei); +GLAPI void APIENTRY glPointParameterf (GLenum, GLfloat); +GLAPI void APIENTRY glPointParameterfv (GLenum, const GLfloat *); +GLAPI void APIENTRY glPointParameteri (GLenum, GLint); +GLAPI void APIENTRY glPointParameteriv (GLenum, const GLint *); +GLAPI void APIENTRY glSecondaryColor3b (GLbyte, GLbyte, GLbyte); +GLAPI void APIENTRY glSecondaryColor3bv (const GLbyte *); +GLAPI void APIENTRY glSecondaryColor3d (GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glSecondaryColor3dv (const GLdouble *); +GLAPI void APIENTRY glSecondaryColor3f (GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glSecondaryColor3fv (const GLfloat *); +GLAPI void APIENTRY glSecondaryColor3i (GLint, GLint, GLint); +GLAPI void APIENTRY glSecondaryColor3iv (const GLint *); +GLAPI void APIENTRY glSecondaryColor3s (GLshort, GLshort, GLshort); +GLAPI void APIENTRY glSecondaryColor3sv (const GLshort *); +GLAPI void APIENTRY glSecondaryColor3ub (GLubyte, GLubyte, GLubyte); +GLAPI void APIENTRY glSecondaryColor3ubv (const GLubyte *); +GLAPI void APIENTRY glSecondaryColor3ui (GLuint, GLuint, GLuint); +GLAPI void APIENTRY glSecondaryColor3uiv (const GLuint *); +GLAPI void APIENTRY glSecondaryColor3us (GLushort, GLushort, GLushort); +GLAPI void APIENTRY glSecondaryColor3usv (const GLushort *); +GLAPI void APIENTRY glSecondaryColorPointer (GLint, GLenum, GLsizei, const GLvoid *); +GLAPI void APIENTRY glWindowPos2d (GLdouble, GLdouble); +GLAPI void APIENTRY glWindowPos2dv (const GLdouble *); +GLAPI void APIENTRY glWindowPos2f (GLfloat, GLfloat); +GLAPI void APIENTRY glWindowPos2fv (const GLfloat *); +GLAPI void APIENTRY glWindowPos2i (GLint, GLint); +GLAPI void APIENTRY glWindowPos2iv (const GLint *); +GLAPI void APIENTRY glWindowPos2s (GLshort, GLshort); +GLAPI void APIENTRY glWindowPos2sv (const GLshort *); +GLAPI void APIENTRY glWindowPos3d (GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glWindowPos3dv (const GLdouble *); +GLAPI void APIENTRY glWindowPos3f (GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glWindowPos3fv (const GLfloat *); +GLAPI void APIENTRY glWindowPos3i (GLint, GLint, GLint); +GLAPI void APIENTRY glWindowPos3iv (const GLint *); +GLAPI void APIENTRY glWindowPos3s (GLshort, GLshort, GLshort); +GLAPI void APIENTRY glWindowPos3sv (const GLshort *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +typedef void (APIENTRYP PFNGLFOGCOORDFPROC) (GLfloat coord); +typedef void (APIENTRYP PFNGLFOGCOORDFVPROC) (const GLfloat *coord); +typedef void (APIENTRYP PFNGLFOGCOORDDPROC) (GLdouble coord); +typedef void (APIENTRYP PFNGLFOGCOORDDVPROC) (const GLdouble *coord); +typedef void (APIENTRYP PFNGLFOGCOORDPOINTERPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC) (GLenum mode, GLint *first, GLsizei *count, GLsizei primcount); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLPOINTPARAMETERIPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERIVPROC) (GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BPROC) (GLbyte red, GLbyte green, GLbyte blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVPROC) (const GLbyte *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DPROC) (GLdouble red, GLdouble green, GLdouble blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FPROC) (GLfloat red, GLfloat green, GLfloat blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IPROC) (GLint red, GLint green, GLint blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SPROC) (GLshort red, GLshort green, GLshort blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBPROC) (GLubyte red, GLubyte green, GLubyte blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVPROC) (const GLubyte *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIPROC) (GLuint red, GLuint green, GLuint blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVPROC) (const GLuint *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USPROC) (GLushort red, GLushort green, GLushort blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVPROC) (const GLushort *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); +typedef void (APIENTRYP PFNGLWINDOWPOS2DPROC) (GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLWINDOWPOS2DVPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2FPROC) (GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLWINDOWPOS2FVPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2IPROC) (GLint x, GLint y); +typedef void (APIENTRYP PFNGLWINDOWPOS2IVPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2SPROC) (GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLWINDOWPOS2SVPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3DPROC) (GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLWINDOWPOS3DVPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3FPROC) (GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLWINDOWPOS3FVPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3IPROC) (GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLWINDOWPOS3IVPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3SPROC) (GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLWINDOWPOS3SVPROC) (const GLshort *v); +#endif + +#ifndef GL_VERSION_1_5 +#define GL_VERSION_1_5 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenQueries (GLsizei, GLuint *); +GLAPI void APIENTRY glDeleteQueries (GLsizei, const GLuint *); +GLAPI GLboolean APIENTRY glIsQuery (GLuint); +GLAPI void APIENTRY glBeginQuery (GLenum, GLuint); +GLAPI void APIENTRY glEndQuery (GLenum); +GLAPI void APIENTRY glGetQueryiv (GLenum, GLenum, GLint *); +GLAPI void APIENTRY glGetQueryObjectiv (GLuint, GLenum, GLint *); +GLAPI void APIENTRY glGetQueryObjectuiv (GLuint, GLenum, GLuint *); +GLAPI void APIENTRY glBindBuffer (GLenum, GLuint); +GLAPI void APIENTRY glDeleteBuffers (GLsizei, const GLuint *); +GLAPI void APIENTRY glGenBuffers (GLsizei, GLuint *); +GLAPI GLboolean APIENTRY glIsBuffer (GLuint); +GLAPI void APIENTRY glBufferData (GLenum, GLsizeiptr, const GLvoid *, GLenum); +GLAPI void APIENTRY glBufferSubData (GLenum, GLintptr, GLsizeiptr, const GLvoid *); +GLAPI void APIENTRY glGetBufferSubData (GLenum, GLintptr, GLsizeiptr, GLvoid *); +GLAPI GLvoid* APIENTRY glMapBuffer (GLenum, GLenum); +GLAPI GLboolean APIENTRY glUnmapBuffer (GLenum); +GLAPI void APIENTRY glGetBufferParameteriv (GLenum, GLenum, GLint *); +GLAPI void APIENTRY glGetBufferPointerv (GLenum, GLenum, GLvoid* *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLGENQUERIESPROC) (GLsizei n, GLuint *ids); +typedef void (APIENTRYP PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint *ids); +typedef GLboolean (APIENTRYP PFNGLISQUERYPROC) (GLuint id); +typedef void (APIENTRYP PFNGLBEGINQUERYPROC) (GLenum target, GLuint id); +typedef void (APIENTRYP PFNGLENDQUERYPROC) (GLenum target); +typedef void (APIENTRYP PFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVPROC) (GLuint id, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer); +typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers); +typedef void (APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers); +typedef GLboolean (APIENTRYP PFNGLISBUFFERPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage); +typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data); +typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data); +typedef GLvoid* (APIENTRYP PFNGLMAPBUFFERPROC) (GLenum target, GLenum access); +typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERPROC) (GLenum target); +typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, GLvoid* *params); +#endif + +#ifndef GL_VERSION_2_0 +#define GL_VERSION_2_0 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendEquationSeparate (GLenum, GLenum); +GLAPI void APIENTRY glDrawBuffers (GLsizei, const GLenum *); +GLAPI void APIENTRY glStencilOpSeparate (GLenum, GLenum, GLenum, GLenum); +GLAPI void APIENTRY glStencilFuncSeparate (GLenum, GLenum, GLint, GLuint); +GLAPI void APIENTRY glStencilMaskSeparate (GLenum, GLuint); +GLAPI void APIENTRY glAttachShader (GLuint, GLuint); +GLAPI void APIENTRY glBindAttribLocation (GLuint, GLuint, const GLchar *); +GLAPI void APIENTRY glCompileShader (GLuint); +GLAPI GLuint APIENTRY glCreateProgram (void); +GLAPI GLuint APIENTRY glCreateShader (GLenum); +GLAPI void APIENTRY glDeleteProgram (GLuint); +GLAPI void APIENTRY glDeleteShader (GLuint); +GLAPI void APIENTRY glDetachShader (GLuint, GLuint); +GLAPI void APIENTRY glDisableVertexAttribArray (GLuint); +GLAPI void APIENTRY glEnableVertexAttribArray (GLuint); +GLAPI void APIENTRY glGetActiveAttrib (GLuint, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLchar *); +GLAPI void APIENTRY glGetActiveUniform (GLuint, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLchar *); +GLAPI void APIENTRY glGetAttachedShaders (GLuint, GLsizei, GLsizei *, GLuint *); +GLAPI GLint APIENTRY glGetAttribLocation (GLuint, const GLchar *); +GLAPI void APIENTRY glGetProgramiv (GLuint, GLenum, GLint *); +GLAPI void APIENTRY glGetProgramInfoLog (GLuint, GLsizei, GLsizei *, GLchar *); +GLAPI void APIENTRY glGetShaderiv (GLuint, GLenum, GLint *); +GLAPI void APIENTRY glGetShaderInfoLog (GLuint, GLsizei, GLsizei *, GLchar *); +GLAPI void APIENTRY glGetShaderSource (GLuint, GLsizei, GLsizei *, GLchar *); +GLAPI GLint APIENTRY glGetUniformLocation (GLuint, const GLchar *); +GLAPI void APIENTRY glGetUniformfv (GLuint, GLint, GLfloat *); +GLAPI void APIENTRY glGetUniformiv (GLuint, GLint, GLint *); +GLAPI void APIENTRY glGetVertexAttribdv (GLuint, GLenum, GLdouble *); +GLAPI void APIENTRY glGetVertexAttribfv (GLuint, GLenum, GLfloat *); +GLAPI void APIENTRY glGetVertexAttribiv (GLuint, GLenum, GLint *); +GLAPI void APIENTRY glGetVertexAttribPointerv (GLuint, GLenum, GLvoid* *); +GLAPI GLboolean APIENTRY glIsProgram (GLuint); +GLAPI GLboolean APIENTRY glIsShader (GLuint); +GLAPI void APIENTRY glLinkProgram (GLuint); +GLAPI void APIENTRY glShaderSource (GLuint, GLsizei, const GLchar* *, const GLint *); +GLAPI void APIENTRY glUseProgram (GLuint); +GLAPI void APIENTRY glUniform1f (GLint, GLfloat); +GLAPI void APIENTRY glUniform2f (GLint, GLfloat, GLfloat); +GLAPI void APIENTRY glUniform3f (GLint, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glUniform4f (GLint, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glUniform1i (GLint, GLint); +GLAPI void APIENTRY glUniform2i (GLint, GLint, GLint); +GLAPI void APIENTRY glUniform3i (GLint, GLint, GLint, GLint); +GLAPI void APIENTRY glUniform4i (GLint, GLint, GLint, GLint, GLint); +GLAPI void APIENTRY glUniform1fv (GLint, GLsizei, const GLfloat *); +GLAPI void APIENTRY glUniform2fv (GLint, GLsizei, const GLfloat *); +GLAPI void APIENTRY glUniform3fv (GLint, GLsizei, const GLfloat *); +GLAPI void APIENTRY glUniform4fv (GLint, GLsizei, const GLfloat *); +GLAPI void APIENTRY glUniform1iv (GLint, GLsizei, const GLint *); +GLAPI void APIENTRY glUniform2iv (GLint, GLsizei, const GLint *); +GLAPI void APIENTRY glUniform3iv (GLint, GLsizei, const GLint *); +GLAPI void APIENTRY glUniform4iv (GLint, GLsizei, const GLint *); +GLAPI void APIENTRY glUniformMatrix2fv (GLint, GLsizei, GLboolean, const GLfloat *); +GLAPI void APIENTRY glUniformMatrix3fv (GLint, GLsizei, GLboolean, const GLfloat *); +GLAPI void APIENTRY glUniformMatrix4fv (GLint, GLsizei, GLboolean, const GLfloat *); +GLAPI void APIENTRY glValidateProgram (GLuint); +GLAPI void APIENTRY glVertexAttrib1d (GLuint, GLdouble); +GLAPI void APIENTRY glVertexAttrib1dv (GLuint, const GLdouble *); +GLAPI void APIENTRY glVertexAttrib1f (GLuint, GLfloat); +GLAPI void APIENTRY glVertexAttrib1fv (GLuint, const GLfloat *); +GLAPI void APIENTRY glVertexAttrib1s (GLuint, GLshort); +GLAPI void APIENTRY glVertexAttrib1sv (GLuint, const GLshort *); +GLAPI void APIENTRY glVertexAttrib2d (GLuint, GLdouble, GLdouble); +GLAPI void APIENTRY glVertexAttrib2dv (GLuint, const GLdouble *); +GLAPI void APIENTRY glVertexAttrib2f (GLuint, GLfloat, GLfloat); +GLAPI void APIENTRY glVertexAttrib2fv (GLuint, const GLfloat *); +GLAPI void APIENTRY glVertexAttrib2s (GLuint, GLshort, GLshort); +GLAPI void APIENTRY glVertexAttrib2sv (GLuint, const GLshort *); +GLAPI void APIENTRY glVertexAttrib3d (GLuint, GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glVertexAttrib3dv (GLuint, const GLdouble *); +GLAPI void APIENTRY glVertexAttrib3f (GLuint, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glVertexAttrib3fv (GLuint, const GLfloat *); +GLAPI void APIENTRY glVertexAttrib3s (GLuint, GLshort, GLshort, GLshort); +GLAPI void APIENTRY glVertexAttrib3sv (GLuint, const GLshort *); +GLAPI void APIENTRY glVertexAttrib4Nbv (GLuint, const GLbyte *); +GLAPI void APIENTRY glVertexAttrib4Niv (GLuint, const GLint *); +GLAPI void APIENTRY glVertexAttrib4Nsv (GLuint, const GLshort *); +GLAPI void APIENTRY glVertexAttrib4Nub (GLuint, GLubyte, GLubyte, GLubyte, GLubyte); +GLAPI void APIENTRY glVertexAttrib4Nubv (GLuint, const GLubyte *); +GLAPI void APIENTRY glVertexAttrib4Nuiv (GLuint, const GLuint *); +GLAPI void APIENTRY glVertexAttrib4Nusv (GLuint, const GLushort *); +GLAPI void APIENTRY glVertexAttrib4bv (GLuint, const GLbyte *); +GLAPI void APIENTRY glVertexAttrib4d (GLuint, GLdouble, GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glVertexAttrib4dv (GLuint, const GLdouble *); +GLAPI void APIENTRY glVertexAttrib4f (GLuint, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glVertexAttrib4fv (GLuint, const GLfloat *); +GLAPI void APIENTRY glVertexAttrib4iv (GLuint, const GLint *); +GLAPI void APIENTRY glVertexAttrib4s (GLuint, GLshort, GLshort, GLshort, GLshort); +GLAPI void APIENTRY glVertexAttrib4sv (GLuint, const GLshort *); +GLAPI void APIENTRY glVertexAttrib4ubv (GLuint, const GLubyte *); +GLAPI void APIENTRY glVertexAttrib4uiv (GLuint, const GLuint *); +GLAPI void APIENTRY glVertexAttrib4usv (GLuint, const GLushort *); +GLAPI void APIENTRY glVertexAttribPointer (GLuint, GLint, GLenum, GLboolean, GLsizei, const GLvoid *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha); +typedef void (APIENTRYP PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum *bufs); +typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); +typedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask); +typedef void (APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader); +typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name); +typedef void (APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader); +typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC) (void); +typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC) (GLenum type); +typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader); +typedef void (APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader); +typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index); +typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index); +typedef void (APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +typedef void (APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *obj); +typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +typedef void (APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +typedef void (APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); +typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params); +typedef void (APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVPROC) (GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, GLvoid* *pointer); +typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC) (GLuint program); +typedef GLboolean (APIENTRYP PFNGLISSHADERPROC) (GLuint shader); +typedef void (APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar* *string, const GLint *length); +typedef void (APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0); +typedef void (APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1); +typedef void (APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0); +typedef void (APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1); +typedef void (APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2); +typedef void (APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DPROC) (GLuint index, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SPROC) (GLuint index, GLshort x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SPROC) (GLuint index, GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SPROC) (GLuint index, GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer); #endif #ifndef GL_ARB_multitexture #define GL_ARB_multitexture 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glActiveTextureARB (GLenum); -extern void APIENTRY glClientActiveTextureARB (GLenum); -extern void APIENTRY glMultiTexCoord1dARB (GLenum, GLdouble); -extern void APIENTRY glMultiTexCoord1dvARB (GLenum, const GLdouble *); -extern void APIENTRY glMultiTexCoord1fARB (GLenum, GLfloat); -extern void APIENTRY glMultiTexCoord1fvARB (GLenum, const GLfloat *); -extern void APIENTRY glMultiTexCoord1iARB (GLenum, GLint); -extern void APIENTRY glMultiTexCoord1ivARB (GLenum, const GLint *); -extern void APIENTRY glMultiTexCoord1sARB (GLenum, GLshort); -extern void APIENTRY glMultiTexCoord1svARB (GLenum, const GLshort *); -extern void APIENTRY glMultiTexCoord2dARB (GLenum, GLdouble, GLdouble); -extern void APIENTRY glMultiTexCoord2dvARB (GLenum, const GLdouble *); -extern void APIENTRY glMultiTexCoord2fARB (GLenum, GLfloat, GLfloat); -extern void APIENTRY glMultiTexCoord2fvARB (GLenum, const GLfloat *); -extern void APIENTRY glMultiTexCoord2iARB (GLenum, GLint, GLint); -extern void APIENTRY glMultiTexCoord2ivARB (GLenum, const GLint *); -extern void APIENTRY glMultiTexCoord2sARB (GLenum, GLshort, GLshort); -extern void APIENTRY glMultiTexCoord2svARB (GLenum, const GLshort *); -extern void APIENTRY glMultiTexCoord3dARB (GLenum, GLdouble, GLdouble, GLdouble); -extern void APIENTRY glMultiTexCoord3dvARB (GLenum, const GLdouble *); -extern void APIENTRY glMultiTexCoord3fARB (GLenum, GLfloat, GLfloat, GLfloat); -extern void APIENTRY glMultiTexCoord3fvARB (GLenum, const GLfloat *); -extern void APIENTRY glMultiTexCoord3iARB (GLenum, GLint, GLint, GLint); -extern void APIENTRY glMultiTexCoord3ivARB (GLenum, const GLint *); -extern void APIENTRY glMultiTexCoord3sARB (GLenum, GLshort, GLshort, GLshort); -extern void APIENTRY glMultiTexCoord3svARB (GLenum, const GLshort *); -extern void APIENTRY glMultiTexCoord4dARB (GLenum, GLdouble, GLdouble, GLdouble, GLdouble); -extern void APIENTRY glMultiTexCoord4dvARB (GLenum, const GLdouble *); -extern void APIENTRY glMultiTexCoord4fARB (GLenum, GLfloat, GLfloat, GLfloat, GLfloat); -extern void APIENTRY glMultiTexCoord4fvARB (GLenum, const GLfloat *); -extern void APIENTRY glMultiTexCoord4iARB (GLenum, GLint, GLint, GLint, GLint); -extern void APIENTRY glMultiTexCoord4ivARB (GLenum, const GLint *); -extern void APIENTRY glMultiTexCoord4sARB (GLenum, GLshort, GLshort, GLshort, GLshort); -extern void APIENTRY glMultiTexCoord4svARB (GLenum, const GLshort *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLACTIVETEXTUREARBPROC) (GLenum texture); -typedef void (APIENTRY * PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture); -typedef void (APIENTRY * PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s); -typedef void (APIENTRY * PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRY * PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s); -typedef void (APIENTRY * PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRY * PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s); -typedef void (APIENTRY * PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRY * PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s); -typedef void (APIENTRY * PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRY * PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t); -typedef void (APIENTRY * PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRY * PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t); -typedef void (APIENTRY * PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRY * PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t); -typedef void (APIENTRY * PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRY * PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t); -typedef void (APIENTRY * PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRY * PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); -typedef void (APIENTRY * PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRY * PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); -typedef void (APIENTRY * PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRY * PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r); -typedef void (APIENTRY * PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRY * PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r); -typedef void (APIENTRY * PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRY * PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -typedef void (APIENTRY * PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRY * PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -typedef void (APIENTRY * PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRY * PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); -typedef void (APIENTRY * PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRY * PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -typedef void (APIENTRY * PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v); +GLAPI void APIENTRY glActiveTextureARB (GLenum); +GLAPI void APIENTRY glClientActiveTextureARB (GLenum); +GLAPI void APIENTRY glMultiTexCoord1dARB (GLenum, GLdouble); +GLAPI void APIENTRY glMultiTexCoord1dvARB (GLenum, const GLdouble *); +GLAPI void APIENTRY glMultiTexCoord1fARB (GLenum, GLfloat); +GLAPI void APIENTRY glMultiTexCoord1fvARB (GLenum, const GLfloat *); +GLAPI void APIENTRY glMultiTexCoord1iARB (GLenum, GLint); +GLAPI void APIENTRY glMultiTexCoord1ivARB (GLenum, const GLint *); +GLAPI void APIENTRY glMultiTexCoord1sARB (GLenum, GLshort); +GLAPI void APIENTRY glMultiTexCoord1svARB (GLenum, const GLshort *); +GLAPI void APIENTRY glMultiTexCoord2dARB (GLenum, GLdouble, GLdouble); +GLAPI void APIENTRY glMultiTexCoord2dvARB (GLenum, const GLdouble *); +GLAPI void APIENTRY glMultiTexCoord2fARB (GLenum, GLfloat, GLfloat); +GLAPI void APIENTRY glMultiTexCoord2fvARB (GLenum, const GLfloat *); +GLAPI void APIENTRY glMultiTexCoord2iARB (GLenum, GLint, GLint); +GLAPI void APIENTRY glMultiTexCoord2ivARB (GLenum, const GLint *); +GLAPI void APIENTRY glMultiTexCoord2sARB (GLenum, GLshort, GLshort); +GLAPI void APIENTRY glMultiTexCoord2svARB (GLenum, const GLshort *); +GLAPI void APIENTRY glMultiTexCoord3dARB (GLenum, GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glMultiTexCoord3dvARB (GLenum, const GLdouble *); +GLAPI void APIENTRY glMultiTexCoord3fARB (GLenum, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glMultiTexCoord3fvARB (GLenum, const GLfloat *); +GLAPI void APIENTRY glMultiTexCoord3iARB (GLenum, GLint, GLint, GLint); +GLAPI void APIENTRY glMultiTexCoord3ivARB (GLenum, const GLint *); +GLAPI void APIENTRY glMultiTexCoord3sARB (GLenum, GLshort, GLshort, GLshort); +GLAPI void APIENTRY glMultiTexCoord3svARB (GLenum, const GLshort *); +GLAPI void APIENTRY glMultiTexCoord4dARB (GLenum, GLdouble, GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glMultiTexCoord4dvARB (GLenum, const GLdouble *); +GLAPI void APIENTRY glMultiTexCoord4fARB (GLenum, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glMultiTexCoord4fvARB (GLenum, const GLfloat *); +GLAPI void APIENTRY glMultiTexCoord4iARB (GLenum, GLint, GLint, GLint, GLint); +GLAPI void APIENTRY glMultiTexCoord4ivARB (GLenum, const GLint *); +GLAPI void APIENTRY glMultiTexCoord4sARB (GLenum, GLshort, GLshort, GLshort, GLshort); +GLAPI void APIENTRY glMultiTexCoord4svARB (GLenum, const GLshort *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLACTIVETEXTUREARBPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v); #endif #ifndef GL_ARB_transpose_matrix #define GL_ARB_transpose_matrix 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glLoadTransposeMatrixfARB (const GLfloat *); -extern void APIENTRY glLoadTransposeMatrixdARB (const GLdouble *); -extern void APIENTRY glMultTransposeMatrixfARB (const GLfloat *); -extern void APIENTRY glMultTransposeMatrixdARB (const GLdouble *); +GLAPI void APIENTRY glLoadTransposeMatrixfARB (const GLfloat *); +GLAPI void APIENTRY glLoadTransposeMatrixdARB (const GLdouble *); +GLAPI void APIENTRY glMultTransposeMatrixfARB (const GLfloat *); +GLAPI void APIENTRY glMultTransposeMatrixdARB (const GLdouble *); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLLOADTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); -typedef void (APIENTRY * PFNGLLOADTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); -typedef void (APIENTRY * PFNGLMULTTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); -typedef void (APIENTRY * PFNGLMULTTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); +typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); +typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); +typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); +typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); #endif #ifndef GL_ARB_multisample #define GL_ARB_multisample 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glSampleCoverageARB (GLclampf, GLboolean); -extern void APIENTRY glSamplePassARB (GLenum); +GLAPI void APIENTRY glSampleCoverageARB (GLclampf, GLboolean); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLSAMPLECOVERAGEARBPROC) (GLclampf value, GLboolean invert); -typedef void (APIENTRY * PFNGLSAMPLEPASSARBPROC) (GLenum pass); +typedef void (APIENTRYP PFNGLSAMPLECOVERAGEARBPROC) (GLclampf value, GLboolean invert); #endif #ifndef GL_ARB_texture_env_add @@ -1714,21 +3626,476 @@ typedef void (APIENTRY * PFNGLSAMPLEPASSARBPROC) (GLenum pass); #ifndef GL_ARB_texture_compression #define GL_ARB_texture_compression 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glCompressedTexImage3DARB (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *); -extern void APIENTRY glCompressedTexImage2DARB (GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *); -extern void APIENTRY glCompressedTexImage1DARB (GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, const GLvoid *); -extern void APIENTRY glCompressedTexSubImage3DARB (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *); -extern void APIENTRY glCompressedTexSubImage2DARB (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *); -extern void APIENTRY glCompressedTexSubImage1DARB (GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, const GLvoid *); -extern void APIENTRY glGetCompressedTexImageARB (GLenum, GLint, void *); +GLAPI void APIENTRY glCompressedTexImage3DARB (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *); +GLAPI void APIENTRY glCompressedTexImage2DARB (GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *); +GLAPI void APIENTRY glCompressedTexImage1DARB (GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, const GLvoid *); +GLAPI void APIENTRY glCompressedTexSubImage3DARB (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *); +GLAPI void APIENTRY glCompressedTexSubImage2DARB (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *); +GLAPI void APIENTRY glCompressedTexSubImage1DARB (GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, const GLvoid *); +GLAPI void APIENTRY glGetCompressedTexImageARB (GLenum, GLint, GLvoid *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint level, GLvoid *img); +#endif + +#ifndef GL_ARB_texture_border_clamp +#define GL_ARB_texture_border_clamp 1 +#endif + +#ifndef GL_ARB_point_parameters +#define GL_ARB_point_parameters 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPointParameterfARB (GLenum, GLfloat); +GLAPI void APIENTRY glPointParameterfvARB (GLenum, const GLfloat *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLPOINTPARAMETERFARBPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFVARBPROC) (GLenum pname, const GLfloat *params); +#endif + +#ifndef GL_ARB_vertex_blend +#define GL_ARB_vertex_blend 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glWeightbvARB (GLint, const GLbyte *); +GLAPI void APIENTRY glWeightsvARB (GLint, const GLshort *); +GLAPI void APIENTRY glWeightivARB (GLint, const GLint *); +GLAPI void APIENTRY glWeightfvARB (GLint, const GLfloat *); +GLAPI void APIENTRY glWeightdvARB (GLint, const GLdouble *); +GLAPI void APIENTRY glWeightubvARB (GLint, const GLubyte *); +GLAPI void APIENTRY glWeightusvARB (GLint, const GLushort *); +GLAPI void APIENTRY glWeightuivARB (GLint, const GLuint *); +GLAPI void APIENTRY glWeightPointerARB (GLint, GLenum, GLsizei, const GLvoid *); +GLAPI void APIENTRY glVertexBlendARB (GLint); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLWEIGHTBVARBPROC) (GLint size, const GLbyte *weights); +typedef void (APIENTRYP PFNGLWEIGHTSVARBPROC) (GLint size, const GLshort *weights); +typedef void (APIENTRYP PFNGLWEIGHTIVARBPROC) (GLint size, const GLint *weights); +typedef void (APIENTRYP PFNGLWEIGHTFVARBPROC) (GLint size, const GLfloat *weights); +typedef void (APIENTRYP PFNGLWEIGHTDVARBPROC) (GLint size, const GLdouble *weights); +typedef void (APIENTRYP PFNGLWEIGHTUBVARBPROC) (GLint size, const GLubyte *weights); +typedef void (APIENTRYP PFNGLWEIGHTUSVARBPROC) (GLint size, const GLushort *weights); +typedef void (APIENTRYP PFNGLWEIGHTUIVARBPROC) (GLint size, const GLuint *weights); +typedef void (APIENTRYP PFNGLWEIGHTPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); +typedef void (APIENTRYP PFNGLVERTEXBLENDARBPROC) (GLint count); +#endif + +#ifndef GL_ARB_matrix_palette +#define GL_ARB_matrix_palette 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCurrentPaletteMatrixARB (GLint); +GLAPI void APIENTRY glMatrixIndexubvARB (GLint, const GLubyte *); +GLAPI void APIENTRY glMatrixIndexusvARB (GLint, const GLushort *); +GLAPI void APIENTRY glMatrixIndexuivARB (GLint, const GLuint *); +GLAPI void APIENTRY glMatrixIndexPointerARB (GLint, GLenum, GLsizei, const GLvoid *); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLCOMPRESSEDTEXIMAGE3DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRY * PFNGLCOMPRESSEDTEXIMAGE2DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRY * PFNGLCOMPRESSEDTEXIMAGE1DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRY * PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint level, void *img); +typedef void (APIENTRYP PFNGLCURRENTPALETTEMATRIXARBPROC) (GLint index); +typedef void (APIENTRYP PFNGLMATRIXINDEXUBVARBPROC) (GLint size, const GLubyte *indices); +typedef void (APIENTRYP PFNGLMATRIXINDEXUSVARBPROC) (GLint size, const GLushort *indices); +typedef void (APIENTRYP PFNGLMATRIXINDEXUIVARBPROC) (GLint size, const GLuint *indices); +typedef void (APIENTRYP PFNGLMATRIXINDEXPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); +#endif + +#ifndef GL_ARB_texture_env_combine +#define GL_ARB_texture_env_combine 1 +#endif + +#ifndef GL_ARB_texture_env_crossbar +#define GL_ARB_texture_env_crossbar 1 +#endif + +#ifndef GL_ARB_texture_env_dot3 +#define GL_ARB_texture_env_dot3 1 +#endif + +#ifndef GL_ARB_texture_mirrored_repeat +#define GL_ARB_texture_mirrored_repeat 1 +#endif + +#ifndef GL_ARB_depth_texture +#define GL_ARB_depth_texture 1 +#endif + +#ifndef GL_ARB_shadow +#define GL_ARB_shadow 1 +#endif + +#ifndef GL_ARB_shadow_ambient +#define GL_ARB_shadow_ambient 1 +#endif + +#ifndef GL_ARB_window_pos +#define GL_ARB_window_pos 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glWindowPos2dARB (GLdouble, GLdouble); +GLAPI void APIENTRY glWindowPos2dvARB (const GLdouble *); +GLAPI void APIENTRY glWindowPos2fARB (GLfloat, GLfloat); +GLAPI void APIENTRY glWindowPos2fvARB (const GLfloat *); +GLAPI void APIENTRY glWindowPos2iARB (GLint, GLint); +GLAPI void APIENTRY glWindowPos2ivARB (const GLint *); +GLAPI void APIENTRY glWindowPos2sARB (GLshort, GLshort); +GLAPI void APIENTRY glWindowPos2svARB (const GLshort *); +GLAPI void APIENTRY glWindowPos3dARB (GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glWindowPos3dvARB (const GLdouble *); +GLAPI void APIENTRY glWindowPos3fARB (GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glWindowPos3fvARB (const GLfloat *); +GLAPI void APIENTRY glWindowPos3iARB (GLint, GLint, GLint); +GLAPI void APIENTRY glWindowPos3ivARB (const GLint *); +GLAPI void APIENTRY glWindowPos3sARB (GLshort, GLshort, GLshort); +GLAPI void APIENTRY glWindowPos3svARB (const GLshort *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLWINDOWPOS2DARBPROC) (GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLWINDOWPOS2DVARBPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2FARBPROC) (GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLWINDOWPOS2FVARBPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2IARBPROC) (GLint x, GLint y); +typedef void (APIENTRYP PFNGLWINDOWPOS2IVARBPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2SARBPROC) (GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLWINDOWPOS2SVARBPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3DARBPROC) (GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLWINDOWPOS3DVARBPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3FARBPROC) (GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLWINDOWPOS3FVARBPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3IARBPROC) (GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLWINDOWPOS3IVARBPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3SARBPROC) (GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLWINDOWPOS3SVARBPROC) (const GLshort *v); +#endif + +#ifndef GL_ARB_vertex_program +#define GL_ARB_vertex_program 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttrib1dARB (GLuint, GLdouble); +GLAPI void APIENTRY glVertexAttrib1dvARB (GLuint, const GLdouble *); +GLAPI void APIENTRY glVertexAttrib1fARB (GLuint, GLfloat); +GLAPI void APIENTRY glVertexAttrib1fvARB (GLuint, const GLfloat *); +GLAPI void APIENTRY glVertexAttrib1sARB (GLuint, GLshort); +GLAPI void APIENTRY glVertexAttrib1svARB (GLuint, const GLshort *); +GLAPI void APIENTRY glVertexAttrib2dARB (GLuint, GLdouble, GLdouble); +GLAPI void APIENTRY glVertexAttrib2dvARB (GLuint, const GLdouble *); +GLAPI void APIENTRY glVertexAttrib2fARB (GLuint, GLfloat, GLfloat); +GLAPI void APIENTRY glVertexAttrib2fvARB (GLuint, const GLfloat *); +GLAPI void APIENTRY glVertexAttrib2sARB (GLuint, GLshort, GLshort); +GLAPI void APIENTRY glVertexAttrib2svARB (GLuint, const GLshort *); +GLAPI void APIENTRY glVertexAttrib3dARB (GLuint, GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glVertexAttrib3dvARB (GLuint, const GLdouble *); +GLAPI void APIENTRY glVertexAttrib3fARB (GLuint, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glVertexAttrib3fvARB (GLuint, const GLfloat *); +GLAPI void APIENTRY glVertexAttrib3sARB (GLuint, GLshort, GLshort, GLshort); +GLAPI void APIENTRY glVertexAttrib3svARB (GLuint, const GLshort *); +GLAPI void APIENTRY glVertexAttrib4NbvARB (GLuint, const GLbyte *); +GLAPI void APIENTRY glVertexAttrib4NivARB (GLuint, const GLint *); +GLAPI void APIENTRY glVertexAttrib4NsvARB (GLuint, const GLshort *); +GLAPI void APIENTRY glVertexAttrib4NubARB (GLuint, GLubyte, GLubyte, GLubyte, GLubyte); +GLAPI void APIENTRY glVertexAttrib4NubvARB (GLuint, const GLubyte *); +GLAPI void APIENTRY glVertexAttrib4NuivARB (GLuint, const GLuint *); +GLAPI void APIENTRY glVertexAttrib4NusvARB (GLuint, const GLushort *); +GLAPI void APIENTRY glVertexAttrib4bvARB (GLuint, const GLbyte *); +GLAPI void APIENTRY glVertexAttrib4dARB (GLuint, GLdouble, GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glVertexAttrib4dvARB (GLuint, const GLdouble *); +GLAPI void APIENTRY glVertexAttrib4fARB (GLuint, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glVertexAttrib4fvARB (GLuint, const GLfloat *); +GLAPI void APIENTRY glVertexAttrib4ivARB (GLuint, const GLint *); +GLAPI void APIENTRY glVertexAttrib4sARB (GLuint, GLshort, GLshort, GLshort, GLshort); +GLAPI void APIENTRY glVertexAttrib4svARB (GLuint, const GLshort *); +GLAPI void APIENTRY glVertexAttrib4ubvARB (GLuint, const GLubyte *); +GLAPI void APIENTRY glVertexAttrib4uivARB (GLuint, const GLuint *); +GLAPI void APIENTRY glVertexAttrib4usvARB (GLuint, const GLushort *); +GLAPI void APIENTRY glVertexAttribPointerARB (GLuint, GLint, GLenum, GLboolean, GLsizei, const GLvoid *); +GLAPI void APIENTRY glEnableVertexAttribArrayARB (GLuint); +GLAPI void APIENTRY glDisableVertexAttribArrayARB (GLuint); +GLAPI void APIENTRY glProgramStringARB (GLenum, GLenum, GLsizei, const GLvoid *); +GLAPI void APIENTRY glBindProgramARB (GLenum, GLuint); +GLAPI void APIENTRY glDeleteProgramsARB (GLsizei, const GLuint *); +GLAPI void APIENTRY glGenProgramsARB (GLsizei, GLuint *); +GLAPI void APIENTRY glProgramEnvParameter4dARB (GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glProgramEnvParameter4dvARB (GLenum, GLuint, const GLdouble *); +GLAPI void APIENTRY glProgramEnvParameter4fARB (GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glProgramEnvParameter4fvARB (GLenum, GLuint, const GLfloat *); +GLAPI void APIENTRY glProgramLocalParameter4dARB (GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glProgramLocalParameter4dvARB (GLenum, GLuint, const GLdouble *); +GLAPI void APIENTRY glProgramLocalParameter4fARB (GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glProgramLocalParameter4fvARB (GLenum, GLuint, const GLfloat *); +GLAPI void APIENTRY glGetProgramEnvParameterdvARB (GLenum, GLuint, GLdouble *); +GLAPI void APIENTRY glGetProgramEnvParameterfvARB (GLenum, GLuint, GLfloat *); +GLAPI void APIENTRY glGetProgramLocalParameterdvARB (GLenum, GLuint, GLdouble *); +GLAPI void APIENTRY glGetProgramLocalParameterfvARB (GLenum, GLuint, GLfloat *); +GLAPI void APIENTRY glGetProgramivARB (GLenum, GLenum, GLint *); +GLAPI void APIENTRY glGetProgramStringARB (GLenum, GLenum, GLvoid *); +GLAPI void APIENTRY glGetVertexAttribdvARB (GLuint, GLenum, GLdouble *); +GLAPI void APIENTRY glGetVertexAttribfvARB (GLuint, GLenum, GLfloat *); +GLAPI void APIENTRY glGetVertexAttribivARB (GLuint, GLenum, GLint *); +GLAPI void APIENTRY glGetVertexAttribPointervARB (GLuint, GLenum, GLvoid* *); +GLAPI GLboolean APIENTRY glIsProgramARB (GLuint); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DARBPROC) (GLuint index, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVARBPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FARBPROC) (GLuint index, GLfloat x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVARBPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SARBPROC) (GLuint index, GLshort x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVARBPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DARBPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVARBPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FARBPROC) (GLuint index, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVARBPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SARBPROC) (GLuint index, GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVARBPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVARBPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVARBPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVARBPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVARBPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVARBPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVARBPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBARBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVARBPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVARBPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVARBPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVARBPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVARBPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVARBPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVARBPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVARBPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVARBPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVARBPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVARBPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERARBPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer); +typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); +typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); +typedef void (APIENTRYP PFNGLPROGRAMSTRINGARBPROC) (GLenum target, GLenum format, GLsizei len, const GLvoid *string); +typedef void (APIENTRYP PFNGLBINDPROGRAMARBPROC) (GLenum target, GLuint program); +typedef void (APIENTRYP PFNGLDELETEPROGRAMSARBPROC) (GLsizei n, const GLuint *programs); +typedef void (APIENTRYP PFNGLGENPROGRAMSARBPROC) (GLsizei n, GLuint *programs); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params); +typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params); +typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params); +typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params); +typedef void (APIENTRYP PFNGLGETPROGRAMIVARBPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGARBPROC) (GLenum target, GLenum pname, GLvoid *string); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVARBPROC) (GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVARBPROC) (GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVARBPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVARBPROC) (GLuint index, GLenum pname, GLvoid* *pointer); +typedef GLboolean (APIENTRYP PFNGLISPROGRAMARBPROC) (GLuint program); +#endif + +#ifndef GL_ARB_fragment_program +#define GL_ARB_fragment_program 1 +/* All ARB_fragment_program entry points are shared with ARB_vertex_program. */ +#endif + +#ifndef GL_ARB_vertex_buffer_object +#define GL_ARB_vertex_buffer_object 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindBufferARB (GLenum, GLuint); +GLAPI void APIENTRY glDeleteBuffersARB (GLsizei, const GLuint *); +GLAPI void APIENTRY glGenBuffersARB (GLsizei, GLuint *); +GLAPI GLboolean APIENTRY glIsBufferARB (GLuint); +GLAPI void APIENTRY glBufferDataARB (GLenum, GLsizeiptrARB, const GLvoid *, GLenum); +GLAPI void APIENTRY glBufferSubDataARB (GLenum, GLintptrARB, GLsizeiptrARB, const GLvoid *); +GLAPI void APIENTRY glGetBufferSubDataARB (GLenum, GLintptrARB, GLsizeiptrARB, GLvoid *); +GLAPI GLvoid* APIENTRY glMapBufferARB (GLenum, GLenum); +GLAPI GLboolean APIENTRY glUnmapBufferARB (GLenum); +GLAPI void APIENTRY glGetBufferParameterivARB (GLenum, GLenum, GLint *); +GLAPI void APIENTRY glGetBufferPointervARB (GLenum, GLenum, GLvoid* *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer); +typedef void (APIENTRYP PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint *buffers); +typedef void (APIENTRYP PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint *buffers); +typedef GLboolean (APIENTRYP PFNGLISBUFFERARBPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLBUFFERDATAARBPROC) (GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage); +typedef void (APIENTRYP PFNGLBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data); +typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid *data); +typedef GLvoid* (APIENTRYP PFNGLMAPBUFFERARBPROC) (GLenum target, GLenum access); +typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERARBPROC) (GLenum target); +typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVARBPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVARBPROC) (GLenum target, GLenum pname, GLvoid* *params); +#endif + +#ifndef GL_ARB_occlusion_query +#define GL_ARB_occlusion_query 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenQueriesARB (GLsizei, GLuint *); +GLAPI void APIENTRY glDeleteQueriesARB (GLsizei, const GLuint *); +GLAPI GLboolean APIENTRY glIsQueryARB (GLuint); +GLAPI void APIENTRY glBeginQueryARB (GLenum, GLuint); +GLAPI void APIENTRY glEndQueryARB (GLenum); +GLAPI void APIENTRY glGetQueryivARB (GLenum, GLenum, GLint *); +GLAPI void APIENTRY glGetQueryObjectivARB (GLuint, GLenum, GLint *); +GLAPI void APIENTRY glGetQueryObjectuivARB (GLuint, GLenum, GLuint *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLGENQUERIESARBPROC) (GLsizei n, GLuint *ids); +typedef void (APIENTRYP PFNGLDELETEQUERIESARBPROC) (GLsizei n, const GLuint *ids); +typedef GLboolean (APIENTRYP PFNGLISQUERYARBPROC) (GLuint id); +typedef void (APIENTRYP PFNGLBEGINQUERYARBPROC) (GLenum target, GLuint id); +typedef void (APIENTRYP PFNGLENDQUERYARBPROC) (GLenum target); +typedef void (APIENTRYP PFNGLGETQUERYIVARBPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVARBPROC) (GLuint id, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVARBPROC) (GLuint id, GLenum pname, GLuint *params); +#endif + +#ifndef GL_ARB_shader_objects +#define GL_ARB_shader_objects 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDeleteObjectARB (GLhandleARB); +GLAPI GLhandleARB APIENTRY glGetHandleARB (GLenum); +GLAPI void APIENTRY glDetachObjectARB (GLhandleARB, GLhandleARB); +GLAPI GLhandleARB APIENTRY glCreateShaderObjectARB (GLenum); +GLAPI void APIENTRY glShaderSourceARB (GLhandleARB, GLsizei, const GLcharARB* *, const GLint *); +GLAPI void APIENTRY glCompileShaderARB (GLhandleARB); +GLAPI GLhandleARB APIENTRY glCreateProgramObjectARB (void); +GLAPI void APIENTRY glAttachObjectARB (GLhandleARB, GLhandleARB); +GLAPI void APIENTRY glLinkProgramARB (GLhandleARB); +GLAPI void APIENTRY glUseProgramObjectARB (GLhandleARB); +GLAPI void APIENTRY glValidateProgramARB (GLhandleARB); +GLAPI void APIENTRY glUniform1fARB (GLint, GLfloat); +GLAPI void APIENTRY glUniform2fARB (GLint, GLfloat, GLfloat); +GLAPI void APIENTRY glUniform3fARB (GLint, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glUniform4fARB (GLint, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glUniform1iARB (GLint, GLint); +GLAPI void APIENTRY glUniform2iARB (GLint, GLint, GLint); +GLAPI void APIENTRY glUniform3iARB (GLint, GLint, GLint, GLint); +GLAPI void APIENTRY glUniform4iARB (GLint, GLint, GLint, GLint, GLint); +GLAPI void APIENTRY glUniform1fvARB (GLint, GLsizei, const GLfloat *); +GLAPI void APIENTRY glUniform2fvARB (GLint, GLsizei, const GLfloat *); +GLAPI void APIENTRY glUniform3fvARB (GLint, GLsizei, const GLfloat *); +GLAPI void APIENTRY glUniform4fvARB (GLint, GLsizei, const GLfloat *); +GLAPI void APIENTRY glUniform1ivARB (GLint, GLsizei, const GLint *); +GLAPI void APIENTRY glUniform2ivARB (GLint, GLsizei, const GLint *); +GLAPI void APIENTRY glUniform3ivARB (GLint, GLsizei, const GLint *); +GLAPI void APIENTRY glUniform4ivARB (GLint, GLsizei, const GLint *); +GLAPI void APIENTRY glUniformMatrix2fvARB (GLint, GLsizei, GLboolean, const GLfloat *); +GLAPI void APIENTRY glUniformMatrix3fvARB (GLint, GLsizei, GLboolean, const GLfloat *); +GLAPI void APIENTRY glUniformMatrix4fvARB (GLint, GLsizei, GLboolean, const GLfloat *); +GLAPI void APIENTRY glGetObjectParameterfvARB (GLhandleARB, GLenum, GLfloat *); +GLAPI void APIENTRY glGetObjectParameterivARB (GLhandleARB, GLenum, GLint *); +GLAPI void APIENTRY glGetInfoLogARB (GLhandleARB, GLsizei, GLsizei *, GLcharARB *); +GLAPI void APIENTRY glGetAttachedObjectsARB (GLhandleARB, GLsizei, GLsizei *, GLhandleARB *); +GLAPI GLint APIENTRY glGetUniformLocationARB (GLhandleARB, const GLcharARB *); +GLAPI void APIENTRY glGetActiveUniformARB (GLhandleARB, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLcharARB *); +GLAPI void APIENTRY glGetUniformfvARB (GLhandleARB, GLint, GLfloat *); +GLAPI void APIENTRY glGetUniformivARB (GLhandleARB, GLint, GLint *); +GLAPI void APIENTRY glGetShaderSourceARB (GLhandleARB, GLsizei, GLsizei *, GLcharARB *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLDELETEOBJECTARBPROC) (GLhandleARB obj); +typedef GLhandleARB (APIENTRYP PFNGLGETHANDLEARBPROC) (GLenum pname); +typedef void (APIENTRYP PFNGLDETACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB attachedObj); +typedef GLhandleARB (APIENTRYP PFNGLCREATESHADEROBJECTARBPROC) (GLenum shaderType); +typedef void (APIENTRYP PFNGLSHADERSOURCEARBPROC) (GLhandleARB shaderObj, GLsizei count, const GLcharARB* *string, const GLint *length); +typedef void (APIENTRYP PFNGLCOMPILESHADERARBPROC) (GLhandleARB shaderObj); +typedef GLhandleARB (APIENTRYP PFNGLCREATEPROGRAMOBJECTARBPROC) (void); +typedef void (APIENTRYP PFNGLATTACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj); +typedef void (APIENTRYP PFNGLLINKPROGRAMARBPROC) (GLhandleARB programObj); +typedef void (APIENTRYP PFNGLUSEPROGRAMOBJECTARBPROC) (GLhandleARB programObj); +typedef void (APIENTRYP PFNGLVALIDATEPROGRAMARBPROC) (GLhandleARB programObj); +typedef void (APIENTRYP PFNGLUNIFORM1FARBPROC) (GLint location, GLfloat v0); +typedef void (APIENTRYP PFNGLUNIFORM2FARBPROC) (GLint location, GLfloat v0, GLfloat v1); +typedef void (APIENTRYP PFNGLUNIFORM3FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (APIENTRYP PFNGLUNIFORM4FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (APIENTRYP PFNGLUNIFORM1IARBPROC) (GLint location, GLint v0); +typedef void (APIENTRYP PFNGLUNIFORM2IARBPROC) (GLint location, GLint v0, GLint v1); +typedef void (APIENTRYP PFNGLUNIFORM3IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2); +typedef void (APIENTRYP PFNGLUNIFORM4IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (APIENTRYP PFNGLUNIFORM1FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM2FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM3FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM4FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM1IVARBPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM2IVARBPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM3IVARBPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM4IVARBPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERFVARBPROC) (GLhandleARB obj, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVARBPROC) (GLhandleARB obj, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETINFOLOGARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog); +typedef void (APIENTRYP PFNGLGETATTACHEDOBJECTSARBPROC) (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj); +typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); +typedef void (APIENTRYP PFNGLGETUNIFORMFVARBPROC) (GLhandleARB programObj, GLint location, GLfloat *params); +typedef void (APIENTRYP PFNGLGETUNIFORMIVARBPROC) (GLhandleARB programObj, GLint location, GLint *params); +typedef void (APIENTRYP PFNGLGETSHADERSOURCEARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source); +#endif + +#ifndef GL_ARB_vertex_shader +#define GL_ARB_vertex_shader 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindAttribLocationARB (GLhandleARB, GLuint, const GLcharARB *); +GLAPI void APIENTRY glGetActiveAttribARB (GLhandleARB, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLcharARB *); +GLAPI GLint APIENTRY glGetAttribLocationARB (GLhandleARB, const GLcharARB *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONARBPROC) (GLhandleARB programObj, GLuint index, const GLcharARB *name); +typedef void (APIENTRYP PFNGLGETACTIVEATTRIBARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); +typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name); +#endif + +#ifndef GL_ARB_fragment_shader +#define GL_ARB_fragment_shader 1 +#endif + +#ifndef GL_ARB_shading_language_100 +#define GL_ARB_shading_language_100 1 +#endif + +#ifndef GL_ARB_texture_non_power_of_two +#define GL_ARB_texture_non_power_of_two 1 +#endif + +#ifndef GL_ARB_point_sprite +#define GL_ARB_point_sprite 1 +#endif + +#ifndef GL_ARB_fragment_program_shadow +#define GL_ARB_fragment_program_shadow 1 +#endif + +#ifndef GL_ARB_draw_buffers +#define GL_ARB_draw_buffers 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawBuffersARB (GLsizei, const GLenum *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLDRAWBUFFERSARBPROC) (GLsizei n, const GLenum *bufs); +#endif + +#ifndef GL_ARB_texture_rectangle +#define GL_ARB_texture_rectangle 1 +#endif + +#ifndef GL_ARB_color_buffer_float +#define GL_ARB_color_buffer_float 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glClampColorARB (GLenum, GLenum); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLCLAMPCOLORARBPROC) (GLenum target, GLenum clamp); +#endif + +#ifndef GL_ARB_half_float_pixel +#define GL_ARB_half_float_pixel 1 +#endif + +#ifndef GL_ARB_texture_float +#define GL_ARB_texture_float 1 +#endif + +#ifndef GL_ARB_pixel_buffer_object +#define GL_ARB_pixel_buffer_object 1 #endif #ifndef GL_EXT_abgr @@ -1738,17 +4105,17 @@ typedef void (APIENTRY * PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLin #ifndef GL_EXT_blend_color #define GL_EXT_blend_color 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glBlendColorEXT (GLclampf, GLclampf, GLclampf, GLclampf); +GLAPI void APIENTRY glBlendColorEXT (GLclampf, GLclampf, GLclampf, GLclampf); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLBLENDCOLOREXTPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); +typedef void (APIENTRYP PFNGLBLENDCOLOREXTPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); #endif #ifndef GL_EXT_polygon_offset #define GL_EXT_polygon_offset 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glPolygonOffsetEXT (GLfloat, GLfloat); +GLAPI void APIENTRY glPolygonOffsetEXT (GLfloat, GLfloat); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bias); +typedef void (APIENTRYP PFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bias); #endif #ifndef GL_EXT_texture @@ -1758,105 +4125,105 @@ typedef void (APIENTRY * PFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bia #ifndef GL_EXT_texture3D #define GL_EXT_texture3D 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glTexImage3DEXT (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *); -extern void APIENTRY glTexSubImage3DEXT (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); +GLAPI void APIENTRY glTexImage3DEXT (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *); +GLAPI void APIENTRY glTexSubImage3DEXT (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRY * PFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); +typedef void (APIENTRYP PFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); +typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); #endif #ifndef GL_SGIS_texture_filter4 #define GL_SGIS_texture_filter4 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glGetTexFilterFuncSGIS (GLenum, GLenum, GLfloat *); -extern void APIENTRY glTexFilterFuncSGIS (GLenum, GLenum, GLsizei, const GLfloat *); +GLAPI void APIENTRY glGetTexFilterFuncSGIS (GLenum, GLenum, GLfloat *); +GLAPI void APIENTRY glTexFilterFuncSGIS (GLenum, GLenum, GLsizei, const GLfloat *); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLGETTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLfloat *weights); -typedef void (APIENTRY * PFNGLTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights); +typedef void (APIENTRYP PFNGLGETTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLfloat *weights); +typedef void (APIENTRYP PFNGLTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights); #endif #ifndef GL_EXT_subtexture #define GL_EXT_subtexture 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glTexSubImage1DEXT (GLenum, GLint, GLint, GLsizei, GLenum, GLenum, const GLvoid *); -extern void APIENTRY glTexSubImage2DEXT (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); +GLAPI void APIENTRY glTexSubImage1DEXT (GLenum, GLint, GLint, GLsizei, GLenum, GLenum, const GLvoid *); +GLAPI void APIENTRY glTexSubImage2DEXT (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRY * PFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); +typedef void (APIENTRYP PFNGLTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); +typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); #endif #ifndef GL_EXT_copy_texture #define GL_EXT_copy_texture 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glCopyTexImage1DEXT (GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLint); -extern void APIENTRY glCopyTexImage2DEXT (GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLsizei, GLint); -extern void APIENTRY glCopyTexSubImage1DEXT (GLenum, GLint, GLint, GLint, GLint, GLsizei); -extern void APIENTRY glCopyTexSubImage2DEXT (GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei); -extern void APIENTRY glCopyTexSubImage3DEXT (GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei); +GLAPI void APIENTRY glCopyTexImage1DEXT (GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLint); +GLAPI void APIENTRY glCopyTexImage2DEXT (GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLsizei, GLint); +GLAPI void APIENTRY glCopyTexSubImage1DEXT (GLenum, GLint, GLint, GLint, GLint, GLsizei); +GLAPI void APIENTRY glCopyTexSubImage2DEXT (GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei); +GLAPI void APIENTRY glCopyTexSubImage3DEXT (GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLCOPYTEXIMAGE1DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -typedef void (APIENTRY * PFNGLCOPYTEXIMAGE2DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -typedef void (APIENTRY * PFNGLCOPYTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -typedef void (APIENTRY * PFNGLCOPYTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRY * PFNGLCOPYTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLCOPYTEXIMAGE1DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); #endif #ifndef GL_EXT_histogram #define GL_EXT_histogram 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glGetHistogramEXT (GLenum, GLboolean, GLenum, GLenum, GLvoid *); -extern void APIENTRY glGetHistogramParameterfvEXT (GLenum, GLenum, GLfloat *); -extern void APIENTRY glGetHistogramParameterivEXT (GLenum, GLenum, GLint *); -extern void APIENTRY glGetMinmaxEXT (GLenum, GLboolean, GLenum, GLenum, GLvoid *); -extern void APIENTRY glGetMinmaxParameterfvEXT (GLenum, GLenum, GLfloat *); -extern void APIENTRY glGetMinmaxParameterivEXT (GLenum, GLenum, GLint *); -extern void APIENTRY glHistogramEXT (GLenum, GLsizei, GLenum, GLboolean); -extern void APIENTRY glMinmaxEXT (GLenum, GLenum, GLboolean); -extern void APIENTRY glResetHistogramEXT (GLenum); -extern void APIENTRY glResetMinmaxEXT (GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLGETHISTOGRAMEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -typedef void (APIENTRY * PFNGLGETHISTOGRAMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRY * PFNGLGETHISTOGRAMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRY * PFNGLGETMINMAXEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -typedef void (APIENTRY * PFNGLGETMINMAXPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRY * PFNGLGETMINMAXPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRY * PFNGLHISTOGRAMEXTPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); -typedef void (APIENTRY * PFNGLMINMAXEXTPROC) (GLenum target, GLenum internalformat, GLboolean sink); -typedef void (APIENTRY * PFNGLRESETHISTOGRAMEXTPROC) (GLenum target); -typedef void (APIENTRY * PFNGLRESETMINMAXEXTPROC) (GLenum target); +GLAPI void APIENTRY glGetHistogramEXT (GLenum, GLboolean, GLenum, GLenum, GLvoid *); +GLAPI void APIENTRY glGetHistogramParameterfvEXT (GLenum, GLenum, GLfloat *); +GLAPI void APIENTRY glGetHistogramParameterivEXT (GLenum, GLenum, GLint *); +GLAPI void APIENTRY glGetMinmaxEXT (GLenum, GLboolean, GLenum, GLenum, GLvoid *); +GLAPI void APIENTRY glGetMinmaxParameterfvEXT (GLenum, GLenum, GLfloat *); +GLAPI void APIENTRY glGetMinmaxParameterivEXT (GLenum, GLenum, GLint *); +GLAPI void APIENTRY glHistogramEXT (GLenum, GLsizei, GLenum, GLboolean); +GLAPI void APIENTRY glMinmaxEXT (GLenum, GLenum, GLboolean); +GLAPI void APIENTRY glResetHistogramEXT (GLenum); +GLAPI void APIENTRY glResetMinmaxEXT (GLenum); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLGETHISTOGRAMEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMINMAXEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); +typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLHISTOGRAMEXTPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); +typedef void (APIENTRYP PFNGLMINMAXEXTPROC) (GLenum target, GLenum internalformat, GLboolean sink); +typedef void (APIENTRYP PFNGLRESETHISTOGRAMEXTPROC) (GLenum target); +typedef void (APIENTRYP PFNGLRESETMINMAXEXTPROC) (GLenum target); #endif #ifndef GL_EXT_convolution #define GL_EXT_convolution 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glConvolutionFilter1DEXT (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *); -extern void APIENTRY glConvolutionFilter2DEXT (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); -extern void APIENTRY glConvolutionParameterfEXT (GLenum, GLenum, GLfloat); -extern void APIENTRY glConvolutionParameterfvEXT (GLenum, GLenum, const GLfloat *); -extern void APIENTRY glConvolutionParameteriEXT (GLenum, GLenum, GLint); -extern void APIENTRY glConvolutionParameterivEXT (GLenum, GLenum, const GLint *); -extern void APIENTRY glCopyConvolutionFilter1DEXT (GLenum, GLenum, GLint, GLint, GLsizei); -extern void APIENTRY glCopyConvolutionFilter2DEXT (GLenum, GLenum, GLint, GLint, GLsizei, GLsizei); -extern void APIENTRY glGetConvolutionFilterEXT (GLenum, GLenum, GLenum, GLvoid *); -extern void APIENTRY glGetConvolutionParameterfvEXT (GLenum, GLenum, GLfloat *); -extern void APIENTRY glGetConvolutionParameterivEXT (GLenum, GLenum, GLint *); -extern void APIENTRY glGetSeparableFilterEXT (GLenum, GLenum, GLenum, GLvoid *, GLvoid *, GLvoid *); -extern void APIENTRY glSeparableFilter2DEXT (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image); -typedef void (APIENTRY * PFNGLCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image); -typedef void (APIENTRY * PFNGLCONVOLUTIONPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat params); -typedef void (APIENTRY * PFNGLCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRY * PFNGLCONVOLUTIONPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint params); -typedef void (APIENTRY * PFNGLCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRY * PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (APIENTRY * PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRY * PFNGLGETCONVOLUTIONFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image); -typedef void (APIENTRY * PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRY * PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRY * PFNGLGETSEPARABLEFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span); -typedef void (APIENTRY * PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column); +GLAPI void APIENTRY glConvolutionFilter1DEXT (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *); +GLAPI void APIENTRY glConvolutionFilter2DEXT (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); +GLAPI void APIENTRY glConvolutionParameterfEXT (GLenum, GLenum, GLfloat); +GLAPI void APIENTRY glConvolutionParameterfvEXT (GLenum, GLenum, const GLfloat *); +GLAPI void APIENTRY glConvolutionParameteriEXT (GLenum, GLenum, GLint); +GLAPI void APIENTRY glConvolutionParameterivEXT (GLenum, GLenum, const GLint *); +GLAPI void APIENTRY glCopyConvolutionFilter1DEXT (GLenum, GLenum, GLint, GLint, GLsizei); +GLAPI void APIENTRY glCopyConvolutionFilter2DEXT (GLenum, GLenum, GLint, GLint, GLsizei, GLsizei); +GLAPI void APIENTRY glGetConvolutionFilterEXT (GLenum, GLenum, GLenum, GLvoid *); +GLAPI void APIENTRY glGetConvolutionParameterfvEXT (GLenum, GLenum, GLfloat *); +GLAPI void APIENTRY glGetConvolutionParameterivEXT (GLenum, GLenum, GLint *); +GLAPI void APIENTRY glGetSeparableFilterEXT (GLenum, GLenum, GLenum, GLvoid *, GLvoid *, GLvoid *); +GLAPI void APIENTRY glSeparableFilter2DEXT (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *, const GLvoid *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image); +typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSEPARABLEFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span); +typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column); #endif #ifndef GL_EXT_color_matrix @@ -1866,57 +4233,57 @@ typedef void (APIENTRY * PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum i #ifndef GL_SGI_color_table #define GL_SGI_color_table 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glColorTableSGI (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *); -extern void APIENTRY glColorTableParameterfvSGI (GLenum, GLenum, const GLfloat *); -extern void APIENTRY glColorTableParameterivSGI (GLenum, GLenum, const GLint *); -extern void APIENTRY glCopyColorTableSGI (GLenum, GLenum, GLint, GLint, GLsizei); -extern void APIENTRY glGetColorTableSGI (GLenum, GLenum, GLenum, GLvoid *); -extern void APIENTRY glGetColorTableParameterfvSGI (GLenum, GLenum, GLfloat *); -extern void APIENTRY glGetColorTableParameterivSGI (GLenum, GLenum, GLint *); +GLAPI void APIENTRY glColorTableSGI (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *); +GLAPI void APIENTRY glColorTableParameterfvSGI (GLenum, GLenum, const GLfloat *); +GLAPI void APIENTRY glColorTableParameterivSGI (GLenum, GLenum, const GLint *); +GLAPI void APIENTRY glCopyColorTableSGI (GLenum, GLenum, GLint, GLint, GLsizei); +GLAPI void APIENTRY glGetColorTableSGI (GLenum, GLenum, GLenum, GLvoid *); +GLAPI void APIENTRY glGetColorTableParameterfvSGI (GLenum, GLenum, GLfloat *); +GLAPI void APIENTRY glGetColorTableParameterivSGI (GLenum, GLenum, GLint *); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); -typedef void (APIENTRY * PFNGLCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRY * PFNGLCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRY * PFNGLCOPYCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (APIENTRY * PFNGLGETCOLORTABLESGIPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table); -typedef void (APIENTRY * PFNGLGETCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRY * PFNGLGETCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); +typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLCOPYCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLGETCOLORTABLESGIPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, GLint *params); #endif #ifndef GL_SGIX_pixel_texture #define GL_SGIX_pixel_texture 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glPixelTexGenSGIX (GLenum); +GLAPI void APIENTRY glPixelTexGenSGIX (GLenum); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLPIXELTEXGENSGIXPROC) (GLenum mode); +typedef void (APIENTRYP PFNGLPIXELTEXGENSGIXPROC) (GLenum mode); #endif #ifndef GL_SGIS_pixel_texture #define GL_SGIS_pixel_texture 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glPixelTexGenParameteriSGIS (GLenum, GLint); -extern void APIENTRY glPixelTexGenParameterivSGIS (GLenum, const GLint *); -extern void APIENTRY glPixelTexGenParameterfSGIS (GLenum, GLfloat); -extern void APIENTRY glPixelTexGenParameterfvSGIS (GLenum, const GLfloat *); -extern void APIENTRY glGetPixelTexGenParameterivSGIS (GLenum, GLint *); -extern void APIENTRY glGetPixelTexGenParameterfvSGIS (GLenum, GLfloat *); +GLAPI void APIENTRY glPixelTexGenParameteriSGIS (GLenum, GLint); +GLAPI void APIENTRY glPixelTexGenParameterivSGIS (GLenum, const GLint *); +GLAPI void APIENTRY glPixelTexGenParameterfSGIS (GLenum, GLfloat); +GLAPI void APIENTRY glPixelTexGenParameterfvSGIS (GLenum, const GLfloat *); +GLAPI void APIENTRY glGetPixelTexGenParameterivSGIS (GLenum, GLint *); +GLAPI void APIENTRY glGetPixelTexGenParameterfvSGIS (GLenum, GLfloat *); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLPIXELTEXGENPARAMETERISGISPROC) (GLenum pname, GLint param); -typedef void (APIENTRY * PFNGLPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, const GLint *params); -typedef void (APIENTRY * PFNGLPIXELTEXGENPARAMETERFSGISPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRY * PFNGLPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRY * PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, GLint *params); -typedef void (APIENTRY * PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERISGISPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFSGISPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, GLfloat *params); #endif #ifndef GL_SGIS_texture4D #define GL_SGIS_texture4D 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glTexImage4DSGIS (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *); -extern void APIENTRY glTexSubImage4DSGIS (GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); +GLAPI void APIENTRY glTexImage4DSGIS (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *); +GLAPI void APIENTRY glTexSubImage4DSGIS (GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLTEXIMAGE4DSGISPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRY * PFNGLTEXSUBIMAGE4DSGISPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const GLvoid *pixels); +typedef void (APIENTRYP PFNGLTEXIMAGE4DSGISPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const GLvoid *pixels); +typedef void (APIENTRYP PFNGLTEXSUBIMAGE4DSGISPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const GLvoid *pixels); #endif #ifndef GL_SGI_texture_color_table @@ -1930,39 +4297,39 @@ typedef void (APIENTRY * PFNGLTEXSUBIMAGE4DSGISPROC) (GLenum target, GLint level #ifndef GL_EXT_texture_object #define GL_EXT_texture_object 1 #ifdef GL_GLEXT_PROTOTYPES -extern GLboolean APIENTRY glAreTexturesResidentEXT (GLsizei, const GLuint *, GLboolean *); -extern void APIENTRY glBindTextureEXT (GLenum, GLuint); -extern void APIENTRY glDeleteTexturesEXT (GLsizei, const GLuint *); -extern void APIENTRY glGenTexturesEXT (GLsizei, GLuint *); -extern GLboolean APIENTRY glIsTextureEXT (GLuint); -extern void APIENTRY glPrioritizeTexturesEXT (GLsizei, const GLuint *, const GLclampf *); +GLAPI GLboolean APIENTRY glAreTexturesResidentEXT (GLsizei, const GLuint *, GLboolean *); +GLAPI void APIENTRY glBindTextureEXT (GLenum, GLuint); +GLAPI void APIENTRY glDeleteTexturesEXT (GLsizei, const GLuint *); +GLAPI void APIENTRY glGenTexturesEXT (GLsizei, GLuint *); +GLAPI GLboolean APIENTRY glIsTextureEXT (GLuint); +GLAPI void APIENTRY glPrioritizeTexturesEXT (GLsizei, const GLuint *, const GLclampf *); #endif /* GL_GLEXT_PROTOTYPES */ -typedef GLboolean (APIENTRY * PFNGLARETEXTURESRESIDENTEXTPROC) (GLsizei n, const GLuint *textures, GLboolean *residences); -typedef void (APIENTRY * PFNGLBINDTEXTUREEXTPROC) (GLenum target, GLuint texture); -typedef void (APIENTRY * PFNGLDELETETEXTURESEXTPROC) (GLsizei n, const GLuint *textures); -typedef void (APIENTRY * PFNGLGENTEXTURESEXTPROC) (GLsizei n, GLuint *textures); -typedef GLboolean (APIENTRY * PFNGLISTEXTUREEXTPROC) (GLuint texture); -typedef void (APIENTRY * PFNGLPRIORITIZETEXTURESEXTPROC) (GLsizei n, const GLuint *textures, const GLclampf *priorities); +typedef GLboolean (APIENTRYP PFNGLARETEXTURESRESIDENTEXTPROC) (GLsizei n, const GLuint *textures, GLboolean *residences); +typedef void (APIENTRYP PFNGLBINDTEXTUREEXTPROC) (GLenum target, GLuint texture); +typedef void (APIENTRYP PFNGLDELETETEXTURESEXTPROC) (GLsizei n, const GLuint *textures); +typedef void (APIENTRYP PFNGLGENTEXTURESEXTPROC) (GLsizei n, GLuint *textures); +typedef GLboolean (APIENTRYP PFNGLISTEXTUREEXTPROC) (GLuint texture); +typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESEXTPROC) (GLsizei n, const GLuint *textures, const GLclampf *priorities); #endif #ifndef GL_SGIS_detail_texture #define GL_SGIS_detail_texture 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glDetailTexFuncSGIS (GLenum, GLsizei, const GLfloat *); -extern void APIENTRY glGetDetailTexFuncSGIS (GLenum, GLfloat *); +GLAPI void APIENTRY glDetailTexFuncSGIS (GLenum, GLsizei, const GLfloat *); +GLAPI void APIENTRY glGetDetailTexFuncSGIS (GLenum, GLfloat *); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLDETAILTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); -typedef void (APIENTRY * PFNGLGETDETAILTEXFUNCSGISPROC) (GLenum target, GLfloat *points); +typedef void (APIENTRYP PFNGLDETAILTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); +typedef void (APIENTRYP PFNGLGETDETAILTEXFUNCSGISPROC) (GLenum target, GLfloat *points); #endif #ifndef GL_SGIS_sharpen_texture #define GL_SGIS_sharpen_texture 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glSharpenTexFuncSGIS (GLenum, GLsizei, const GLfloat *); -extern void APIENTRY glGetSharpenTexFuncSGIS (GLenum, GLfloat *); +GLAPI void APIENTRY glSharpenTexFuncSGIS (GLenum, GLsizei, const GLfloat *); +GLAPI void APIENTRY glGetSharpenTexFuncSGIS (GLenum, GLfloat *); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLSHARPENTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); -typedef void (APIENTRY * PFNGLGETSHARPENTEXFUNCSGISPROC) (GLenum target, GLfloat *points); +typedef void (APIENTRYP PFNGLSHARPENTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); +typedef void (APIENTRYP PFNGLGETSHARPENTEXFUNCSGISPROC) (GLenum target, GLfloat *points); #endif #ifndef GL_EXT_packed_pixels @@ -1976,11 +4343,11 @@ typedef void (APIENTRY * PFNGLGETSHARPENTEXFUNCSGISPROC) (GLenum target, GLfloat #ifndef GL_SGIS_multisample #define GL_SGIS_multisample 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glSampleMaskSGIS (GLclampf, GLboolean); -extern void APIENTRY glSamplePatternSGIS (GLenum); +GLAPI void APIENTRY glSampleMaskSGIS (GLclampf, GLboolean); +GLAPI void APIENTRY glSamplePatternSGIS (GLenum); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLSAMPLEMASKSGISPROC) (GLclampf value, GLboolean invert); -typedef void (APIENTRY * PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern); +typedef void (APIENTRYP PFNGLSAMPLEMASKSGISPROC) (GLclampf value, GLboolean invert); +typedef void (APIENTRYP PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern); #endif #ifndef GL_EXT_rescale_normal @@ -1990,25 +4357,25 @@ typedef void (APIENTRY * PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern); #ifndef GL_EXT_vertex_array #define GL_EXT_vertex_array 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glArrayElementEXT (GLint); -extern void APIENTRY glColorPointerEXT (GLint, GLenum, GLsizei, GLsizei, const GLvoid *); -extern void APIENTRY glDrawArraysEXT (GLenum, GLint, GLsizei); -extern void APIENTRY glEdgeFlagPointerEXT (GLsizei, GLsizei, const GLboolean *); -extern void APIENTRY glGetPointervEXT (GLenum, GLvoid* *); -extern void APIENTRY glIndexPointerEXT (GLenum, GLsizei, GLsizei, const GLvoid *); -extern void APIENTRY glNormalPointerEXT (GLenum, GLsizei, GLsizei, const GLvoid *); -extern void APIENTRY glTexCoordPointerEXT (GLint, GLenum, GLsizei, GLsizei, const GLvoid *); -extern void APIENTRY glVertexPointerEXT (GLint, GLenum, GLsizei, GLsizei, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLARRAYELEMENTEXTPROC) (GLint i); -typedef void (APIENTRY * PFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -typedef void (APIENTRY * PFNGLDRAWARRAYSEXTPROC) (GLenum mode, GLint first, GLsizei count); -typedef void (APIENTRY * PFNGLEDGEFLAGPOINTEREXTPROC) (GLsizei stride, GLsizei count, const GLboolean *pointer); -typedef void (APIENTRY * PFNGLGETPOINTERVEXTPROC) (GLenum pname, GLvoid* *params); -typedef void (APIENTRY * PFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -typedef void (APIENTRY * PFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -typedef void (APIENTRY * PFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -typedef void (APIENTRY * PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); +GLAPI void APIENTRY glArrayElementEXT (GLint); +GLAPI void APIENTRY glColorPointerEXT (GLint, GLenum, GLsizei, GLsizei, const GLvoid *); +GLAPI void APIENTRY glDrawArraysEXT (GLenum, GLint, GLsizei); +GLAPI void APIENTRY glEdgeFlagPointerEXT (GLsizei, GLsizei, const GLboolean *); +GLAPI void APIENTRY glGetPointervEXT (GLenum, GLvoid* *); +GLAPI void APIENTRY glIndexPointerEXT (GLenum, GLsizei, GLsizei, const GLvoid *); +GLAPI void APIENTRY glNormalPointerEXT (GLenum, GLsizei, GLsizei, const GLvoid *); +GLAPI void APIENTRY glTexCoordPointerEXT (GLint, GLenum, GLsizei, GLsizei, const GLvoid *); +GLAPI void APIENTRY glVertexPointerEXT (GLint, GLenum, GLsizei, GLsizei, const GLvoid *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLARRAYELEMENTEXTPROC) (GLint i); +typedef void (APIENTRYP PFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); +typedef void (APIENTRYP PFNGLDRAWARRAYSEXTPROC) (GLenum mode, GLint first, GLsizei count); +typedef void (APIENTRYP PFNGLEDGEFLAGPOINTEREXTPROC) (GLsizei stride, GLsizei count, const GLboolean *pointer); +typedef void (APIENTRYP PFNGLGETPOINTERVEXTPROC) (GLenum pname, GLvoid* *params); +typedef void (APIENTRYP PFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); +typedef void (APIENTRYP PFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); +typedef void (APIENTRYP PFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); +typedef void (APIENTRYP PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); #endif #ifndef GL_EXT_misc_attribute @@ -2038,9 +4405,9 @@ typedef void (APIENTRY * PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GL #ifndef GL_EXT_blend_minmax #define GL_EXT_blend_minmax 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glBlendEquationEXT (GLenum); +GLAPI void APIENTRY glBlendEquationEXT (GLenum); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLBLENDEQUATIONEXTPROC) (GLenum mode); +typedef void (APIENTRYP PFNGLBLENDEQUATIONEXTPROC) (GLenum mode); #endif #ifndef GL_EXT_blend_subtract @@ -2066,15 +4433,15 @@ typedef void (APIENTRY * PFNGLBLENDEQUATIONEXTPROC) (GLenum mode); #ifndef GL_SGIX_sprite #define GL_SGIX_sprite 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glSpriteParameterfSGIX (GLenum, GLfloat); -extern void APIENTRY glSpriteParameterfvSGIX (GLenum, const GLfloat *); -extern void APIENTRY glSpriteParameteriSGIX (GLenum, GLint); -extern void APIENTRY glSpriteParameterivSGIX (GLenum, const GLint *); +GLAPI void APIENTRY glSpriteParameterfSGIX (GLenum, GLfloat); +GLAPI void APIENTRY glSpriteParameterfvSGIX (GLenum, const GLfloat *); +GLAPI void APIENTRY glSpriteParameteriSGIX (GLenum, GLint); +GLAPI void APIENTRY glSpriteParameterivSGIX (GLenum, const GLint *); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLSPRITEPARAMETERFSGIXPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRY * PFNGLSPRITEPARAMETERFVSGIXPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRY * PFNGLSPRITEPARAMETERISGIXPROC) (GLenum pname, GLint param); -typedef void (APIENTRY * PFNGLSPRITEPARAMETERIVSGIXPROC) (GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLSPRITEPARAMETERFSGIXPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLSPRITEPARAMETERFVSGIXPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLSPRITEPARAMETERISGIXPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLSPRITEPARAMETERIVSGIXPROC) (GLenum pname, const GLint *params); #endif #ifndef GL_SGIX_texture_multi_buffer @@ -2084,33 +4451,39 @@ typedef void (APIENTRY * PFNGLSPRITEPARAMETERIVSGIXPROC) (GLenum pname, const GL #ifndef GL_EXT_point_parameters #define GL_EXT_point_parameters 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glPointParameterfEXT (GLenum, GLfloat); -extern void APIENTRY glPointParameterfvEXT (GLenum, const GLfloat *); -extern void APIENTRY glPointParameterfSGIS (GLenum, GLfloat); -extern void APIENTRY glPointParameterfvSGIS (GLenum, const GLfloat *); +GLAPI void APIENTRY glPointParameterfEXT (GLenum, GLfloat); +GLAPI void APIENTRY glPointParameterfvEXT (GLenum, const GLfloat *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const GLfloat *params); +#endif + +#ifndef GL_SGIS_point_parameters +#define GL_SGIS_point_parameters 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPointParameterfSGIS (GLenum, GLfloat); +GLAPI void APIENTRY glPointParameterfvSGIS (GLenum, const GLfloat *); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRY * PFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRY * PFNGLPOINTPARAMETERFSGISPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRY * PFNGLPOINTPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFSGISPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); #endif #ifndef GL_SGIX_instruments #define GL_SGIX_instruments 1 #ifdef GL_GLEXT_PROTOTYPES -extern GLint APIENTRY glGetInstrumentsSGIX (void); -extern void APIENTRY glInstrumentsBufferSGIX (GLsizei, GLint *); -extern GLint APIENTRY glPollInstrumentsSGIX (GLint *); -extern void APIENTRY glReadInstrumentsSGIX (GLint); -extern void APIENTRY glStartInstrumentsSGIX (void); -extern void APIENTRY glStopInstrumentsSGIX (GLint); +GLAPI GLint APIENTRY glGetInstrumentsSGIX (void); +GLAPI void APIENTRY glInstrumentsBufferSGIX (GLsizei, GLint *); +GLAPI GLint APIENTRY glPollInstrumentsSGIX (GLint *); +GLAPI void APIENTRY glReadInstrumentsSGIX (GLint); +GLAPI void APIENTRY glStartInstrumentsSGIX (void); +GLAPI void APIENTRY glStopInstrumentsSGIX (GLint); #endif /* GL_GLEXT_PROTOTYPES */ -typedef GLint (APIENTRY * PFNGLGETINSTRUMENTSSGIXPROC) (void); -typedef void (APIENTRY * PFNGLINSTRUMENTSBUFFERSGIXPROC) (GLsizei size, GLint *buffer); -typedef GLint (APIENTRY * PFNGLPOLLINSTRUMENTSSGIXPROC) (GLint *marker_p); -typedef void (APIENTRY * PFNGLREADINSTRUMENTSSGIXPROC) (GLint marker); -typedef void (APIENTRY * PFNGLSTARTINSTRUMENTSSGIXPROC) (void); -typedef void (APIENTRY * PFNGLSTOPINSTRUMENTSSGIXPROC) (GLint marker); +typedef GLint (APIENTRYP PFNGLGETINSTRUMENTSSGIXPROC) (void); +typedef void (APIENTRYP PFNGLINSTRUMENTSBUFFERSGIXPROC) (GLsizei size, GLint *buffer); +typedef GLint (APIENTRYP PFNGLPOLLINSTRUMENTSSGIXPROC) (GLint *marker_p); +typedef void (APIENTRYP PFNGLREADINSTRUMENTSSGIXPROC) (GLint marker); +typedef void (APIENTRYP PFNGLSTARTINSTRUMENTSSGIXPROC) (void); +typedef void (APIENTRYP PFNGLSTOPINSTRUMENTSSGIXPROC) (GLint marker); #endif #ifndef GL_SGIX_texture_scale_bias @@ -2120,47 +4493,47 @@ typedef void (APIENTRY * PFNGLSTOPINSTRUMENTSSGIXPROC) (GLint marker); #ifndef GL_SGIX_framezoom #define GL_SGIX_framezoom 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glFrameZoomSGIX (GLint); +GLAPI void APIENTRY glFrameZoomSGIX (GLint); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLFRAMEZOOMSGIXPROC) (GLint factor); +typedef void (APIENTRYP PFNGLFRAMEZOOMSGIXPROC) (GLint factor); #endif #ifndef GL_SGIX_tag_sample_buffer #define GL_SGIX_tag_sample_buffer 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glTagSampleBufferSGIX (void); +GLAPI void APIENTRY glTagSampleBufferSGIX (void); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLTAGSAMPLEBUFFERSGIXPROC) (void); +typedef void (APIENTRYP PFNGLTAGSAMPLEBUFFERSGIXPROC) (void); #endif #ifndef GL_SGIX_polynomial_ffd #define GL_SGIX_polynomial_ffd 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glDeformationMap3dSGIX (GLenum, GLdouble, GLdouble, GLint, GLint, GLdouble, GLdouble, GLint, GLint, GLdouble, GLdouble, GLint, GLint, const GLdouble *); -extern void APIENTRY glDeformationMap3fSGIX (GLenum, GLfloat, GLfloat, GLint, GLint, GLfloat, GLfloat, GLint, GLint, GLfloat, GLfloat, GLint, GLint, const GLfloat *); -extern void APIENTRY glDeformSGIX (GLbitfield); -extern void APIENTRY glLoadIdentityDeformationMapSGIX (GLbitfield); +GLAPI void APIENTRY glDeformationMap3dSGIX (GLenum, GLdouble, GLdouble, GLint, GLint, GLdouble, GLdouble, GLint, GLint, GLdouble, GLdouble, GLint, GLint, const GLdouble *); +GLAPI void APIENTRY glDeformationMap3fSGIX (GLenum, GLfloat, GLfloat, GLint, GLint, GLfloat, GLfloat, GLint, GLint, GLfloat, GLfloat, GLint, GLint, const GLfloat *); +GLAPI void APIENTRY glDeformSGIX (GLbitfield); +GLAPI void APIENTRY glLoadIdentityDeformationMapSGIX (GLbitfield); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLDEFORMATIONMAP3DSGIXPROC) (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points); -typedef void (APIENTRY * PFNGLDEFORMATIONMAP3FSGIXPROC) (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points); -typedef void (APIENTRY * PFNGLDEFORMSGIXPROC) (GLbitfield mask); -typedef void (APIENTRY * PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC) (GLbitfield mask); +typedef void (APIENTRYP PFNGLDEFORMATIONMAP3DSGIXPROC) (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points); +typedef void (APIENTRYP PFNGLDEFORMATIONMAP3FSGIXPROC) (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points); +typedef void (APIENTRYP PFNGLDEFORMSGIXPROC) (GLbitfield mask); +typedef void (APIENTRYP PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC) (GLbitfield mask); #endif #ifndef GL_SGIX_reference_plane #define GL_SGIX_reference_plane 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glReferencePlaneSGIX (const GLdouble *); +GLAPI void APIENTRY glReferencePlaneSGIX (const GLdouble *); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLREFERENCEPLANESGIXPROC) (const GLdouble *equation); +typedef void (APIENTRYP PFNGLREFERENCEPLANESGIXPROC) (const GLdouble *equation); #endif #ifndef GL_SGIX_flush_raster #define GL_SGIX_flush_raster 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glFlushRasterSGIX (void); +GLAPI void APIENTRY glFlushRasterSGIX (void); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLFLUSHRASTERSGIXPROC) (void); +typedef void (APIENTRYP PFNGLFLUSHRASTERSGIXPROC) (void); #endif #ifndef GL_SGIX_depth_texture @@ -2170,11 +4543,11 @@ typedef void (APIENTRY * PFNGLFLUSHRASTERSGIXPROC) (void); #ifndef GL_SGIS_fog_function #define GL_SGIS_fog_function 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glFogFuncSGIS (GLsizei, const GLfloat *); -extern void APIENTRY glGetFogFuncSGIS (const GLfloat *); +GLAPI void APIENTRY glFogFuncSGIS (GLsizei, const GLfloat *); +GLAPI void APIENTRY glGetFogFuncSGIS (GLfloat *); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLFOGFUNCSGISPROC) (GLsizei n, const GLfloat *points); -typedef void (APIENTRY * PFNGLGETFOGFUNCSGISPROC) (const GLfloat *points); +typedef void (APIENTRYP PFNGLFOGFUNCSGISPROC) (GLsizei n, const GLfloat *points); +typedef void (APIENTRYP PFNGLGETFOGFUNCSGISPROC) (GLfloat *points); #endif #ifndef GL_SGIX_fog_offset @@ -2184,19 +4557,19 @@ typedef void (APIENTRY * PFNGLGETFOGFUNCSGISPROC) (const GLfloat *points); #ifndef GL_HP_image_transform #define GL_HP_image_transform 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glImageTransformParameteriHP (GLenum, GLenum, GLint); -extern void APIENTRY glImageTransformParameterfHP (GLenum, GLenum, GLfloat); -extern void APIENTRY glImageTransformParameterivHP (GLenum, GLenum, const GLint *); -extern void APIENTRY glImageTransformParameterfvHP (GLenum, GLenum, const GLfloat *); -extern void APIENTRY glGetImageTransformParameterivHP (GLenum, GLenum, GLint *); -extern void APIENTRY glGetImageTransformParameterfvHP (GLenum, GLenum, GLfloat *); +GLAPI void APIENTRY glImageTransformParameteriHP (GLenum, GLenum, GLint); +GLAPI void APIENTRY glImageTransformParameterfHP (GLenum, GLenum, GLfloat); +GLAPI void APIENTRY glImageTransformParameterivHP (GLenum, GLenum, const GLint *); +GLAPI void APIENTRY glImageTransformParameterfvHP (GLenum, GLenum, const GLfloat *); +GLAPI void APIENTRY glGetImageTransformParameterivHP (GLenum, GLenum, GLint *); +GLAPI void APIENTRY glGetImageTransformParameterfvHP (GLenum, GLenum, GLfloat *); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLIMAGETRANSFORMPARAMETERIHPPROC) (GLenum target, GLenum pname, GLint param); -typedef void (APIENTRY * PFNGLIMAGETRANSFORMPARAMETERFHPPROC) (GLenum target, GLenum pname, GLfloat param); -typedef void (APIENTRY * PFNGLIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRY * PFNGLIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRY * PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRY * PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIHPPROC) (GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFHPPROC) (GLenum target, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, GLfloat *params); #endif #ifndef GL_HP_convolution_border_modes @@ -2210,11 +4583,11 @@ typedef void (APIENTRY * PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target #ifndef GL_EXT_color_subtable #define GL_EXT_color_subtable 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glColorSubTableEXT (GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); -extern void APIENTRY glCopyColorSubTableEXT (GLenum, GLsizei, GLint, GLint, GLsizei); +GLAPI void APIENTRY glColorSubTableEXT (GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *); +GLAPI void APIENTRY glCopyColorSubTableEXT (GLenum, GLsizei, GLint, GLint, GLsizei); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data); -typedef void (APIENTRY * PFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); #endif #ifndef GL_PGI_vertex_hints @@ -2224,23 +4597,23 @@ typedef void (APIENTRY * PFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei #ifndef GL_PGI_misc_hints #define GL_PGI_misc_hints 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glHintPGI (GLenum, GLint); +GLAPI void APIENTRY glHintPGI (GLenum, GLint); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLHINTPGIPROC) (GLenum target, GLint mode); +typedef void (APIENTRYP PFNGLHINTPGIPROC) (GLenum target, GLint mode); #endif #ifndef GL_EXT_paletted_texture #define GL_EXT_paletted_texture 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glColorTableEXT (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *); -extern void APIENTRY glGetColorTableEXT (GLenum, GLenum, GLenum, GLvoid *); -extern void APIENTRY glGetColorTableParameterivEXT (GLenum, GLenum, GLint *); -extern void APIENTRY glGetColorTableParameterfvEXT (GLenum, GLenum, GLfloat *); +GLAPI void APIENTRY glColorTableEXT (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *); +GLAPI void APIENTRY glGetColorTableEXT (GLenum, GLenum, GLenum, GLvoid *); +GLAPI void APIENTRY glGetColorTableParameterivEXT (GLenum, GLenum, GLint *); +GLAPI void APIENTRY glGetColorTableParameterfvEXT (GLenum, GLenum, GLfloat *); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); -typedef void (APIENTRY * PFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *data); -typedef void (APIENTRY * PFNGLGETCOLORTABLEPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRY * PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); +typedef void (APIENTRYP PFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *data); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); #endif #ifndef GL_EXT_clip_volume_hint @@ -2250,19 +4623,19 @@ typedef void (APIENTRY * PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, G #ifndef GL_SGIX_list_priority #define GL_SGIX_list_priority 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glGetListParameterfvSGIX (GLuint, GLenum, GLfloat *); -extern void APIENTRY glGetListParameterivSGIX (GLuint, GLenum, GLint *); -extern void APIENTRY glListParameterfSGIX (GLuint, GLenum, GLfloat); -extern void APIENTRY glListParameterfvSGIX (GLuint, GLenum, const GLfloat *); -extern void APIENTRY glListParameteriSGIX (GLuint, GLenum, GLint); -extern void APIENTRY glListParameterivSGIX (GLuint, GLenum, const GLint *); +GLAPI void APIENTRY glGetListParameterfvSGIX (GLuint, GLenum, GLfloat *); +GLAPI void APIENTRY glGetListParameterivSGIX (GLuint, GLenum, GLint *); +GLAPI void APIENTRY glListParameterfSGIX (GLuint, GLenum, GLfloat); +GLAPI void APIENTRY glListParameterfvSGIX (GLuint, GLenum, const GLfloat *); +GLAPI void APIENTRY glListParameteriSGIX (GLuint, GLenum, GLint); +GLAPI void APIENTRY glListParameterivSGIX (GLuint, GLenum, const GLint *); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLGETLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, GLfloat *params); -typedef void (APIENTRY * PFNGLGETLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, GLint *params); -typedef void (APIENTRY * PFNGLLISTPARAMETERFSGIXPROC) (GLuint list, GLenum pname, GLfloat param); -typedef void (APIENTRY * PFNGLLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, const GLfloat *params); -typedef void (APIENTRY * PFNGLLISTPARAMETERISGIXPROC) (GLuint list, GLenum pname, GLint param); -typedef void (APIENTRY * PFNGLLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLGETLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLLISTPARAMETERFSGIXPROC) (GLuint list, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLLISTPARAMETERISGIXPROC) (GLuint list, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, const GLint *params); #endif #ifndef GL_SGIX_ir_instrument1 @@ -2288,17 +4661,17 @@ typedef void (APIENTRY * PFNGLLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pnam #ifndef GL_EXT_index_material #define GL_EXT_index_material 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glIndexMaterialEXT (GLenum, GLenum); +GLAPI void APIENTRY glIndexMaterialEXT (GLenum, GLenum); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode); +typedef void (APIENTRYP PFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode); #endif #ifndef GL_EXT_index_func #define GL_EXT_index_func 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glIndexFuncEXT (GLenum, GLclampf); +GLAPI void APIENTRY glIndexFuncEXT (GLenum, GLclampf); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLINDEXFUNCEXTPROC) (GLenum func, GLclampf ref); +typedef void (APIENTRYP PFNGLINDEXFUNCEXTPROC) (GLenum func, GLclampf ref); #endif #ifndef GL_EXT_index_array_formats @@ -2308,21 +4681,21 @@ typedef void (APIENTRY * PFNGLINDEXFUNCEXTPROC) (GLenum func, GLclampf ref); #ifndef GL_EXT_compiled_vertex_array #define GL_EXT_compiled_vertex_array 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glLockArraysEXT (GLint, GLsizei); -extern void APIENTRY glUnlockArraysEXT (void); +GLAPI void APIENTRY glLockArraysEXT (GLint, GLsizei); +GLAPI void APIENTRY glUnlockArraysEXT (void); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count); -typedef void (APIENTRY * PFNGLUNLOCKARRAYSEXTPROC) (void); +typedef void (APIENTRYP PFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count); +typedef void (APIENTRYP PFNGLUNLOCKARRAYSEXTPROC) (void); #endif #ifndef GL_EXT_cull_vertex #define GL_EXT_cull_vertex 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glCullParameterdvEXT (GLenum, GLdouble *); -extern void APIENTRY glCullParameterfvEXT (GLenum, GLfloat *); +GLAPI void APIENTRY glCullParameterdvEXT (GLenum, GLdouble *); +GLAPI void APIENTRY glCullParameterfvEXT (GLenum, GLfloat *); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLCULLPARAMETERDVEXTPROC) (GLenum pname, GLdouble *params); -typedef void (APIENTRY * PFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLCULLPARAMETERDVEXTPROC) (GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat *params); #endif #ifndef GL_SGIX_ycrcb @@ -2332,43 +4705,43 @@ typedef void (APIENTRY * PFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat *pa #ifndef GL_SGIX_fragment_lighting #define GL_SGIX_fragment_lighting 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glFragmentColorMaterialSGIX (GLenum, GLenum); -extern void APIENTRY glFragmentLightfSGIX (GLenum, GLenum, GLfloat); -extern void APIENTRY glFragmentLightfvSGIX (GLenum, GLenum, const GLfloat *); -extern void APIENTRY glFragmentLightiSGIX (GLenum, GLenum, GLint); -extern void APIENTRY glFragmentLightivSGIX (GLenum, GLenum, const GLint *); -extern void APIENTRY glFragmentLightModelfSGIX (GLenum, GLfloat); -extern void APIENTRY glFragmentLightModelfvSGIX (GLenum, const GLfloat *); -extern void APIENTRY glFragmentLightModeliSGIX (GLenum, GLint); -extern void APIENTRY glFragmentLightModelivSGIX (GLenum, const GLint *); -extern void APIENTRY glFragmentMaterialfSGIX (GLenum, GLenum, GLfloat); -extern void APIENTRY glFragmentMaterialfvSGIX (GLenum, GLenum, const GLfloat *); -extern void APIENTRY glFragmentMaterialiSGIX (GLenum, GLenum, GLint); -extern void APIENTRY glFragmentMaterialivSGIX (GLenum, GLenum, const GLint *); -extern void APIENTRY glGetFragmentLightfvSGIX (GLenum, GLenum, GLfloat *); -extern void APIENTRY glGetFragmentLightivSGIX (GLenum, GLenum, GLint *); -extern void APIENTRY glGetFragmentMaterialfvSGIX (GLenum, GLenum, GLfloat *); -extern void APIENTRY glGetFragmentMaterialivSGIX (GLenum, GLenum, GLint *); -extern void APIENTRY glLightEnviSGIX (GLenum, GLint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLFRAGMENTCOLORMATERIALSGIXPROC) (GLenum face, GLenum mode); -typedef void (APIENTRY * PFNGLFRAGMENTLIGHTFSGIXPROC) (GLenum light, GLenum pname, GLfloat param); -typedef void (APIENTRY * PFNGLFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, const GLfloat *params); -typedef void (APIENTRY * PFNGLFRAGMENTLIGHTISGIXPROC) (GLenum light, GLenum pname, GLint param); -typedef void (APIENTRY * PFNGLFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, const GLint *params); -typedef void (APIENTRY * PFNGLFRAGMENTLIGHTMODELFSGIXPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRY * PFNGLFRAGMENTLIGHTMODELFVSGIXPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRY * PFNGLFRAGMENTLIGHTMODELISGIXPROC) (GLenum pname, GLint param); -typedef void (APIENTRY * PFNGLFRAGMENTLIGHTMODELIVSGIXPROC) (GLenum pname, const GLint *params); -typedef void (APIENTRY * PFNGLFRAGMENTMATERIALFSGIXPROC) (GLenum face, GLenum pname, GLfloat param); -typedef void (APIENTRY * PFNGLFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat *params); -typedef void (APIENTRY * PFNGLFRAGMENTMATERIALISGIXPROC) (GLenum face, GLenum pname, GLint param); -typedef void (APIENTRY * PFNGLFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint *params); -typedef void (APIENTRY * PFNGLGETFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, GLfloat *params); -typedef void (APIENTRY * PFNGLGETFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, GLint *params); -typedef void (APIENTRY * PFNGLGETFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, GLfloat *params); -typedef void (APIENTRY * PFNGLGETFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, GLint *params); -typedef void (APIENTRY * PFNGLLIGHTENVISGIXPROC) (GLenum pname, GLint param); +GLAPI void APIENTRY glFragmentColorMaterialSGIX (GLenum, GLenum); +GLAPI void APIENTRY glFragmentLightfSGIX (GLenum, GLenum, GLfloat); +GLAPI void APIENTRY glFragmentLightfvSGIX (GLenum, GLenum, const GLfloat *); +GLAPI void APIENTRY glFragmentLightiSGIX (GLenum, GLenum, GLint); +GLAPI void APIENTRY glFragmentLightivSGIX (GLenum, GLenum, const GLint *); +GLAPI void APIENTRY glFragmentLightModelfSGIX (GLenum, GLfloat); +GLAPI void APIENTRY glFragmentLightModelfvSGIX (GLenum, const GLfloat *); +GLAPI void APIENTRY glFragmentLightModeliSGIX (GLenum, GLint); +GLAPI void APIENTRY glFragmentLightModelivSGIX (GLenum, const GLint *); +GLAPI void APIENTRY glFragmentMaterialfSGIX (GLenum, GLenum, GLfloat); +GLAPI void APIENTRY glFragmentMaterialfvSGIX (GLenum, GLenum, const GLfloat *); +GLAPI void APIENTRY glFragmentMaterialiSGIX (GLenum, GLenum, GLint); +GLAPI void APIENTRY glFragmentMaterialivSGIX (GLenum, GLenum, const GLint *); +GLAPI void APIENTRY glGetFragmentLightfvSGIX (GLenum, GLenum, GLfloat *); +GLAPI void APIENTRY glGetFragmentLightivSGIX (GLenum, GLenum, GLint *); +GLAPI void APIENTRY glGetFragmentMaterialfvSGIX (GLenum, GLenum, GLfloat *); +GLAPI void APIENTRY glGetFragmentMaterialivSGIX (GLenum, GLenum, GLint *); +GLAPI void APIENTRY glLightEnviSGIX (GLenum, GLint); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLFRAGMENTCOLORMATERIALSGIXPROC) (GLenum face, GLenum mode); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFSGIXPROC) (GLenum light, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTISGIXPROC) (GLenum light, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFSGIXPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFVSGIXPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELISGIXPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELIVSGIXPROC) (GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFSGIXPROC) (GLenum face, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLFRAGMENTMATERIALISGIXPROC) (GLenum face, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLLIGHTENVISGIXPROC) (GLenum pname, GLint param); #endif #ifndef GL_IBM_rasterpos_clip @@ -2382,9 +4755,9 @@ typedef void (APIENTRY * PFNGLLIGHTENVISGIXPROC) (GLenum pname, GLint param); #ifndef GL_EXT_draw_range_elements #define GL_EXT_draw_range_elements 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glDrawRangeElementsEXT (GLenum, GLuint, GLuint, GLsizei, GLenum, const GLvoid *); +GLAPI void APIENTRY glDrawRangeElementsEXT (GLenum, GLuint, GLuint, GLsizei, GLenum, const GLvoid *); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); #endif #ifndef GL_WIN_phong_shading @@ -2398,13 +4771,13 @@ typedef void (APIENTRY * PFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint sta #ifndef GL_EXT_light_texture #define GL_EXT_light_texture 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glApplyTextureEXT (GLenum); -extern void APIENTRY glTextureLightEXT (GLenum); -extern void APIENTRY glTextureMaterialEXT (GLenum, GLenum); +GLAPI void APIENTRY glApplyTextureEXT (GLenum); +GLAPI void APIENTRY glTextureLightEXT (GLenum); +GLAPI void APIENTRY glTextureMaterialEXT (GLenum, GLenum); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLAPPLYTEXTUREEXTPROC) (GLenum mode); -typedef void (APIENTRY * PFNGLTEXTURELIGHTEXTPROC) (GLenum pname); -typedef void (APIENTRY * PFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mode); +typedef void (APIENTRYP PFNGLAPPLYTEXTUREEXTPROC) (GLenum mode); +typedef void (APIENTRYP PFNGLTEXTURELIGHTEXTPROC) (GLenum pname); +typedef void (APIENTRYP PFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mode); #endif #ifndef GL_SGIX_blend_alpha_minmax @@ -2418,19 +4791,19 @@ typedef void (APIENTRY * PFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mode) #ifndef GL_SGIX_async #define GL_SGIX_async 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glAsyncMarkerSGIX (GLuint); -extern GLint APIENTRY glFinishAsyncSGIX (GLuint *); -extern GLint APIENTRY glPollAsyncSGIX (GLuint *); -extern GLuint APIENTRY glGenAsyncMarkersSGIX (GLsizei); -extern void APIENTRY glDeleteAsyncMarkersSGIX (GLuint, GLsizei); -extern GLboolean APIENTRY glIsAsyncMarkerSGIX (GLuint); +GLAPI void APIENTRY glAsyncMarkerSGIX (GLuint); +GLAPI GLint APIENTRY glFinishAsyncSGIX (GLuint *); +GLAPI GLint APIENTRY glPollAsyncSGIX (GLuint *); +GLAPI GLuint APIENTRY glGenAsyncMarkersSGIX (GLsizei); +GLAPI void APIENTRY glDeleteAsyncMarkersSGIX (GLuint, GLsizei); +GLAPI GLboolean APIENTRY glIsAsyncMarkerSGIX (GLuint); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLASYNCMARKERSGIXPROC) (GLuint marker); -typedef GLint (APIENTRY * PFNGLFINISHASYNCSGIXPROC) (GLuint *markerp); -typedef GLint (APIENTRY * PFNGLPOLLASYNCSGIXPROC) (GLuint *markerp); -typedef GLuint (APIENTRY * PFNGLGENASYNCMARKERSSGIXPROC) (GLsizei range); -typedef void (APIENTRY * PFNGLDELETEASYNCMARKERSSGIXPROC) (GLuint marker, GLsizei range); -typedef GLboolean (APIENTRY * PFNGLISASYNCMARKERSGIXPROC) (GLuint marker); +typedef void (APIENTRYP PFNGLASYNCMARKERSGIXPROC) (GLuint marker); +typedef GLint (APIENTRYP PFNGLFINISHASYNCSGIXPROC) (GLuint *markerp); +typedef GLint (APIENTRYP PFNGLPOLLASYNCSGIXPROC) (GLuint *markerp); +typedef GLuint (APIENTRYP PFNGLGENASYNCMARKERSSGIXPROC) (GLsizei range); +typedef void (APIENTRYP PFNGLDELETEASYNCMARKERSSGIXPROC) (GLuint marker, GLsizei range); +typedef GLboolean (APIENTRYP PFNGLISASYNCMARKERSGIXPROC) (GLuint marker); #endif #ifndef GL_SGIX_async_pixel @@ -2444,15 +4817,15 @@ typedef GLboolean (APIENTRY * PFNGLISASYNCMARKERSGIXPROC) (GLuint marker); #ifndef GL_INTEL_parallel_arrays #define GL_INTEL_parallel_arrays 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glVertexPointervINTEL (GLint, GLenum, const GLvoid* *); -extern void APIENTRY glNormalPointervINTEL (GLenum, const GLvoid* *); -extern void APIENTRY glColorPointervINTEL (GLint, GLenum, const GLvoid* *); -extern void APIENTRY glTexCoordPointervINTEL (GLint, GLenum, const GLvoid* *); +GLAPI void APIENTRY glVertexPointervINTEL (GLint, GLenum, const GLvoid* *); +GLAPI void APIENTRY glNormalPointervINTEL (GLenum, const GLvoid* *); +GLAPI void APIENTRY glColorPointervINTEL (GLint, GLenum, const GLvoid* *); +GLAPI void APIENTRY glTexCoordPointervINTEL (GLint, GLenum, const GLvoid* *); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLVERTEXPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer); -typedef void (APIENTRY * PFNGLNORMALPOINTERVINTELPROC) (GLenum type, const GLvoid* *pointer); -typedef void (APIENTRY * PFNGLCOLORPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer); -typedef void (APIENTRY * PFNGLTEXCOORDPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer); +typedef void (APIENTRYP PFNGLVERTEXPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer); +typedef void (APIENTRYP PFNGLNORMALPOINTERVINTELPROC) (GLenum type, const GLvoid* *pointer); +typedef void (APIENTRYP PFNGLCOLORPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer); +typedef void (APIENTRYP PFNGLTEXCOORDPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer); #endif #ifndef GL_HP_occlusion_test @@ -2462,15 +4835,15 @@ typedef void (APIENTRY * PFNGLTEXCOORDPOINTERVINTELPROC) (GLint size, GLenum typ #ifndef GL_EXT_pixel_transform #define GL_EXT_pixel_transform 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glPixelTransformParameteriEXT (GLenum, GLenum, GLint); -extern void APIENTRY glPixelTransformParameterfEXT (GLenum, GLenum, GLfloat); -extern void APIENTRY glPixelTransformParameterivEXT (GLenum, GLenum, const GLint *); -extern void APIENTRY glPixelTransformParameterfvEXT (GLenum, GLenum, const GLfloat *); +GLAPI void APIENTRY glPixelTransformParameteriEXT (GLenum, GLenum, GLint); +GLAPI void APIENTRY glPixelTransformParameterfEXT (GLenum, GLenum, GLfloat); +GLAPI void APIENTRY glPixelTransformParameterivEXT (GLenum, GLenum, const GLint *); +GLAPI void APIENTRY glPixelTransformParameterfvEXT (GLenum, GLenum, const GLfloat *); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLPIXELTRANSFORMPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint param); -typedef void (APIENTRY * PFNGLPIXELTRANSFORMPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat param); -typedef void (APIENTRY * PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRY * PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); #endif #ifndef GL_EXT_pixel_transform_color_table @@ -2488,75 +4861,75 @@ typedef void (APIENTRY * PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, #ifndef GL_EXT_secondary_color #define GL_EXT_secondary_color 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glSecondaryColor3bEXT (GLbyte, GLbyte, GLbyte); -extern void APIENTRY glSecondaryColor3bvEXT (const GLbyte *); -extern void APIENTRY glSecondaryColor3dEXT (GLdouble, GLdouble, GLdouble); -extern void APIENTRY glSecondaryColor3dvEXT (const GLdouble *); -extern void APIENTRY glSecondaryColor3fEXT (GLfloat, GLfloat, GLfloat); -extern void APIENTRY glSecondaryColor3fvEXT (const GLfloat *); -extern void APIENTRY glSecondaryColor3iEXT (GLint, GLint, GLint); -extern void APIENTRY glSecondaryColor3ivEXT (const GLint *); -extern void APIENTRY glSecondaryColor3sEXT (GLshort, GLshort, GLshort); -extern void APIENTRY glSecondaryColor3svEXT (const GLshort *); -extern void APIENTRY glSecondaryColor3ubEXT (GLubyte, GLubyte, GLubyte); -extern void APIENTRY glSecondaryColor3ubvEXT (const GLubyte *); -extern void APIENTRY glSecondaryColor3uiEXT (GLuint, GLuint, GLuint); -extern void APIENTRY glSecondaryColor3uivEXT (const GLuint *); -extern void APIENTRY glSecondaryColor3usEXT (GLushort, GLushort, GLushort); -extern void APIENTRY glSecondaryColor3usvEXT (const GLushort *); -extern void APIENTRY glSecondaryColorPointerEXT (GLint, GLenum, GLsizei, GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue); -typedef void (APIENTRY * PFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte *v); -typedef void (APIENTRY * PFNGLSECONDARYCOLOR3DEXTPROC) (GLdouble red, GLdouble green, GLdouble blue); -typedef void (APIENTRY * PFNGLSECONDARYCOLOR3DVEXTPROC) (const GLdouble *v); -typedef void (APIENTRY * PFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue); -typedef void (APIENTRY * PFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat *v); -typedef void (APIENTRY * PFNGLSECONDARYCOLOR3IEXTPROC) (GLint red, GLint green, GLint blue); -typedef void (APIENTRY * PFNGLSECONDARYCOLOR3IVEXTPROC) (const GLint *v); -typedef void (APIENTRY * PFNGLSECONDARYCOLOR3SEXTPROC) (GLshort red, GLshort green, GLshort blue); -typedef void (APIENTRY * PFNGLSECONDARYCOLOR3SVEXTPROC) (const GLshort *v); -typedef void (APIENTRY * PFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue); -typedef void (APIENTRY * PFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte *v); -typedef void (APIENTRY * PFNGLSECONDARYCOLOR3UIEXTPROC) (GLuint red, GLuint green, GLuint blue); -typedef void (APIENTRY * PFNGLSECONDARYCOLOR3UIVEXTPROC) (const GLuint *v); -typedef void (APIENTRY * PFNGLSECONDARYCOLOR3USEXTPROC) (GLushort red, GLushort green, GLushort blue); -typedef void (APIENTRY * PFNGLSECONDARYCOLOR3USVEXTPROC) (const GLushort *v); -typedef void (APIENTRY * PFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLvoid *pointer); +GLAPI void APIENTRY glSecondaryColor3bEXT (GLbyte, GLbyte, GLbyte); +GLAPI void APIENTRY glSecondaryColor3bvEXT (const GLbyte *); +GLAPI void APIENTRY glSecondaryColor3dEXT (GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glSecondaryColor3dvEXT (const GLdouble *); +GLAPI void APIENTRY glSecondaryColor3fEXT (GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glSecondaryColor3fvEXT (const GLfloat *); +GLAPI void APIENTRY glSecondaryColor3iEXT (GLint, GLint, GLint); +GLAPI void APIENTRY glSecondaryColor3ivEXT (const GLint *); +GLAPI void APIENTRY glSecondaryColor3sEXT (GLshort, GLshort, GLshort); +GLAPI void APIENTRY glSecondaryColor3svEXT (const GLshort *); +GLAPI void APIENTRY glSecondaryColor3ubEXT (GLubyte, GLubyte, GLubyte); +GLAPI void APIENTRY glSecondaryColor3ubvEXT (const GLubyte *); +GLAPI void APIENTRY glSecondaryColor3uiEXT (GLuint, GLuint, GLuint); +GLAPI void APIENTRY glSecondaryColor3uivEXT (const GLuint *); +GLAPI void APIENTRY glSecondaryColor3usEXT (GLushort, GLushort, GLushort); +GLAPI void APIENTRY glSecondaryColor3usvEXT (const GLushort *); +GLAPI void APIENTRY glSecondaryColorPointerEXT (GLint, GLenum, GLsizei, const GLvoid *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DEXTPROC) (GLdouble red, GLdouble green, GLdouble blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVEXTPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IEXTPROC) (GLint red, GLint green, GLint blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVEXTPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SEXTPROC) (GLshort red, GLshort green, GLshort blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVEXTPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIEXTPROC) (GLuint red, GLuint green, GLuint blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVEXTPROC) (const GLuint *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USEXTPROC) (GLushort red, GLushort green, GLushort blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVEXTPROC) (const GLushort *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); #endif #ifndef GL_EXT_texture_perturb_normal #define GL_EXT_texture_perturb_normal 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glTextureNormalEXT (GLenum); +GLAPI void APIENTRY glTextureNormalEXT (GLenum); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLTEXTURENORMALEXTPROC) (GLenum mode); +typedef void (APIENTRYP PFNGLTEXTURENORMALEXTPROC) (GLenum mode); #endif #ifndef GL_EXT_multi_draw_arrays #define GL_EXT_multi_draw_arrays 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glMultiDrawArraysEXT (GLenum, GLint *, GLsizei *, GLsizei); -extern void APIENTRY glMultiDrawElementsEXT (GLenum, const GLsizei *, GLenum, const GLvoid* *, GLsizei); +GLAPI void APIENTRY glMultiDrawArraysEXT (GLenum, GLint *, GLsizei *, GLsizei); +GLAPI void APIENTRY glMultiDrawElementsEXT (GLenum, const GLsizei *, GLenum, const GLvoid* *, GLsizei); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, GLint *first, GLsizei *count, GLsizei primcount); -typedef void (APIENTRY * PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount); +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, GLint *first, GLsizei *count, GLsizei primcount); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount); #endif #ifndef GL_EXT_fog_coord #define GL_EXT_fog_coord 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glFogCoordfEXT (GLfloat); -extern void APIENTRY glFogCoordfvEXT (const GLfloat *); -extern void APIENTRY glFogCoorddEXT (GLdouble); -extern void APIENTRY glFogCoorddvEXT (const GLdouble *); -extern void APIENTRY glFogCoordPointerEXT (GLenum, GLsizei, const GLvoid *); +GLAPI void APIENTRY glFogCoordfEXT (GLfloat); +GLAPI void APIENTRY glFogCoordfvEXT (const GLfloat *); +GLAPI void APIENTRY glFogCoorddEXT (GLdouble); +GLAPI void APIENTRY glFogCoorddvEXT (const GLdouble *); +GLAPI void APIENTRY glFogCoordPointerEXT (GLenum, GLsizei, const GLvoid *); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLFOGCOORDFEXTPROC) (GLfloat coord); -typedef void (APIENTRY * PFNGLFOGCOORDFVEXTPROC) (const GLfloat *coord); -typedef void (APIENTRY * PFNGLFOGCOORDDEXTPROC) (GLdouble coord); -typedef void (APIENTRY * PFNGLFOGCOORDDVEXTPROC) (const GLdouble *coord); -typedef void (APIENTRY * PFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); +typedef void (APIENTRYP PFNGLFOGCOORDFEXTPROC) (GLfloat coord); +typedef void (APIENTRYP PFNGLFOGCOORDFVEXTPROC) (const GLfloat *coord); +typedef void (APIENTRYP PFNGLFOGCOORDDEXTPROC) (GLdouble coord); +typedef void (APIENTRYP PFNGLFOGCOORDDVEXTPROC) (const GLdouble *coord); +typedef void (APIENTRYP PFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); #endif #ifndef GL_REND_screen_coordinates @@ -2566,51 +4939,51 @@ typedef void (APIENTRY * PFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei stri #ifndef GL_EXT_coordinate_frame #define GL_EXT_coordinate_frame 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glTangent3bEXT (GLbyte, GLbyte, GLbyte); -extern void APIENTRY glTangent3bvEXT (const GLbyte *); -extern void APIENTRY glTangent3dEXT (GLdouble, GLdouble, GLdouble); -extern void APIENTRY glTangent3dvEXT (const GLdouble *); -extern void APIENTRY glTangent3fEXT (GLfloat, GLfloat, GLfloat); -extern void APIENTRY glTangent3fvEXT (const GLfloat *); -extern void APIENTRY glTangent3iEXT (GLint, GLint, GLint); -extern void APIENTRY glTangent3ivEXT (const GLint *); -extern void APIENTRY glTangent3sEXT (GLshort, GLshort, GLshort); -extern void APIENTRY glTangent3svEXT (const GLshort *); -extern void APIENTRY glBinormal3bEXT (GLbyte, GLbyte, GLbyte); -extern void APIENTRY glBinormal3bvEXT (const GLbyte *); -extern void APIENTRY glBinormal3dEXT (GLdouble, GLdouble, GLdouble); -extern void APIENTRY glBinormal3dvEXT (const GLdouble *); -extern void APIENTRY glBinormal3fEXT (GLfloat, GLfloat, GLfloat); -extern void APIENTRY glBinormal3fvEXT (const GLfloat *); -extern void APIENTRY glBinormal3iEXT (GLint, GLint, GLint); -extern void APIENTRY glBinormal3ivEXT (const GLint *); -extern void APIENTRY glBinormal3sEXT (GLshort, GLshort, GLshort); -extern void APIENTRY glBinormal3svEXT (const GLshort *); -extern void APIENTRY glTangentPointerEXT (GLenum, GLsizei, const GLvoid *); -extern void APIENTRY glBinormalPointerEXT (GLenum, GLsizei, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLTANGENT3BEXTPROC) (GLbyte tx, GLbyte ty, GLbyte tz); -typedef void (APIENTRY * PFNGLTANGENT3BVEXTPROC) (const GLbyte *v); -typedef void (APIENTRY * PFNGLTANGENT3DEXTPROC) (GLdouble tx, GLdouble ty, GLdouble tz); -typedef void (APIENTRY * PFNGLTANGENT3DVEXTPROC) (const GLdouble *v); -typedef void (APIENTRY * PFNGLTANGENT3FEXTPROC) (GLfloat tx, GLfloat ty, GLfloat tz); -typedef void (APIENTRY * PFNGLTANGENT3FVEXTPROC) (const GLfloat *v); -typedef void (APIENTRY * PFNGLTANGENT3IEXTPROC) (GLint tx, GLint ty, GLint tz); -typedef void (APIENTRY * PFNGLTANGENT3IVEXTPROC) (const GLint *v); -typedef void (APIENTRY * PFNGLTANGENT3SEXTPROC) (GLshort tx, GLshort ty, GLshort tz); -typedef void (APIENTRY * PFNGLTANGENT3SVEXTPROC) (const GLshort *v); -typedef void (APIENTRY * PFNGLBINORMAL3BEXTPROC) (GLbyte bx, GLbyte by, GLbyte bz); -typedef void (APIENTRY * PFNGLBINORMAL3BVEXTPROC) (const GLbyte *v); -typedef void (APIENTRY * PFNGLBINORMAL3DEXTPROC) (GLdouble bx, GLdouble by, GLdouble bz); -typedef void (APIENTRY * PFNGLBINORMAL3DVEXTPROC) (const GLdouble *v); -typedef void (APIENTRY * PFNGLBINORMAL3FEXTPROC) (GLfloat bx, GLfloat by, GLfloat bz); -typedef void (APIENTRY * PFNGLBINORMAL3FVEXTPROC) (const GLfloat *v); -typedef void (APIENTRY * PFNGLBINORMAL3IEXTPROC) (GLint bx, GLint by, GLint bz); -typedef void (APIENTRY * PFNGLBINORMAL3IVEXTPROC) (const GLint *v); -typedef void (APIENTRY * PFNGLBINORMAL3SEXTPROC) (GLshort bx, GLshort by, GLshort bz); -typedef void (APIENTRY * PFNGLBINORMAL3SVEXTPROC) (const GLshort *v); -typedef void (APIENTRY * PFNGLTANGENTPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRY * PFNGLBINORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); +GLAPI void APIENTRY glTangent3bEXT (GLbyte, GLbyte, GLbyte); +GLAPI void APIENTRY glTangent3bvEXT (const GLbyte *); +GLAPI void APIENTRY glTangent3dEXT (GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glTangent3dvEXT (const GLdouble *); +GLAPI void APIENTRY glTangent3fEXT (GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glTangent3fvEXT (const GLfloat *); +GLAPI void APIENTRY glTangent3iEXT (GLint, GLint, GLint); +GLAPI void APIENTRY glTangent3ivEXT (const GLint *); +GLAPI void APIENTRY glTangent3sEXT (GLshort, GLshort, GLshort); +GLAPI void APIENTRY glTangent3svEXT (const GLshort *); +GLAPI void APIENTRY glBinormal3bEXT (GLbyte, GLbyte, GLbyte); +GLAPI void APIENTRY glBinormal3bvEXT (const GLbyte *); +GLAPI void APIENTRY glBinormal3dEXT (GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glBinormal3dvEXT (const GLdouble *); +GLAPI void APIENTRY glBinormal3fEXT (GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glBinormal3fvEXT (const GLfloat *); +GLAPI void APIENTRY glBinormal3iEXT (GLint, GLint, GLint); +GLAPI void APIENTRY glBinormal3ivEXT (const GLint *); +GLAPI void APIENTRY glBinormal3sEXT (GLshort, GLshort, GLshort); +GLAPI void APIENTRY glBinormal3svEXT (const GLshort *); +GLAPI void APIENTRY glTangentPointerEXT (GLenum, GLsizei, const GLvoid *); +GLAPI void APIENTRY glBinormalPointerEXT (GLenum, GLsizei, const GLvoid *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLTANGENT3BEXTPROC) (GLbyte tx, GLbyte ty, GLbyte tz); +typedef void (APIENTRYP PFNGLTANGENT3BVEXTPROC) (const GLbyte *v); +typedef void (APIENTRYP PFNGLTANGENT3DEXTPROC) (GLdouble tx, GLdouble ty, GLdouble tz); +typedef void (APIENTRYP PFNGLTANGENT3DVEXTPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLTANGENT3FEXTPROC) (GLfloat tx, GLfloat ty, GLfloat tz); +typedef void (APIENTRYP PFNGLTANGENT3FVEXTPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLTANGENT3IEXTPROC) (GLint tx, GLint ty, GLint tz); +typedef void (APIENTRYP PFNGLTANGENT3IVEXTPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLTANGENT3SEXTPROC) (GLshort tx, GLshort ty, GLshort tz); +typedef void (APIENTRYP PFNGLTANGENT3SVEXTPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLBINORMAL3BEXTPROC) (GLbyte bx, GLbyte by, GLbyte bz); +typedef void (APIENTRYP PFNGLBINORMAL3BVEXTPROC) (const GLbyte *v); +typedef void (APIENTRYP PFNGLBINORMAL3DEXTPROC) (GLdouble bx, GLdouble by, GLdouble bz); +typedef void (APIENTRYP PFNGLBINORMAL3DVEXTPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLBINORMAL3FEXTPROC) (GLfloat bx, GLfloat by, GLfloat bz); +typedef void (APIENTRYP PFNGLBINORMAL3FVEXTPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLBINORMAL3IEXTPROC) (GLint bx, GLint by, GLint bz); +typedef void (APIENTRYP PFNGLBINORMAL3IVEXTPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLBINORMAL3SEXTPROC) (GLshort bx, GLshort by, GLshort bz); +typedef void (APIENTRYP PFNGLBINORMAL3SVEXTPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLTANGENTPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); +typedef void (APIENTRYP PFNGLBINORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); #endif #ifndef GL_EXT_texture_env_combine @@ -2632,145 +5005,153 @@ typedef void (APIENTRY * PFNGLBINORMALPOINTEREXTPROC) (GLenum type, GLsizei stri #ifndef GL_SUNX_constant_data #define GL_SUNX_constant_data 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glFinishTextureSUNX (void); +GLAPI void APIENTRY glFinishTextureSUNX (void); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLFINISHTEXTURESUNXPROC) (void); +typedef void (APIENTRYP PFNGLFINISHTEXTURESUNXPROC) (void); #endif #ifndef GL_SUN_global_alpha #define GL_SUN_global_alpha 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glGlobalAlphaFactorbSUN (GLbyte); -extern void APIENTRY glGlobalAlphaFactorsSUN (GLshort); -extern void APIENTRY glGlobalAlphaFactoriSUN (GLint); -extern void APIENTRY glGlobalAlphaFactorfSUN (GLfloat); -extern void APIENTRY glGlobalAlphaFactordSUN (GLdouble); -extern void APIENTRY glGlobalAlphaFactorubSUN (GLubyte); -extern void APIENTRY glGlobalAlphaFactorusSUN (GLushort); -extern void APIENTRY glGlobalAlphaFactoruiSUN (GLuint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLGLOBALALPHAFACTORBSUNPROC) (GLbyte factor); -typedef void (APIENTRY * PFNGLGLOBALALPHAFACTORSSUNPROC) (GLshort factor); -typedef void (APIENTRY * PFNGLGLOBALALPHAFACTORISUNPROC) (GLint factor); -typedef void (APIENTRY * PFNGLGLOBALALPHAFACTORFSUNPROC) (GLfloat factor); -typedef void (APIENTRY * PFNGLGLOBALALPHAFACTORDSUNPROC) (GLdouble factor); -typedef void (APIENTRY * PFNGLGLOBALALPHAFACTORUBSUNPROC) (GLubyte factor); -typedef void (APIENTRY * PFNGLGLOBALALPHAFACTORUSSUNPROC) (GLushort factor); -typedef void (APIENTRY * PFNGLGLOBALALPHAFACTORUISUNPROC) (GLuint factor); +GLAPI void APIENTRY glGlobalAlphaFactorbSUN (GLbyte); +GLAPI void APIENTRY glGlobalAlphaFactorsSUN (GLshort); +GLAPI void APIENTRY glGlobalAlphaFactoriSUN (GLint); +GLAPI void APIENTRY glGlobalAlphaFactorfSUN (GLfloat); +GLAPI void APIENTRY glGlobalAlphaFactordSUN (GLdouble); +GLAPI void APIENTRY glGlobalAlphaFactorubSUN (GLubyte); +GLAPI void APIENTRY glGlobalAlphaFactorusSUN (GLushort); +GLAPI void APIENTRY glGlobalAlphaFactoruiSUN (GLuint); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORBSUNPROC) (GLbyte factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORSSUNPROC) (GLshort factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORISUNPROC) (GLint factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORFSUNPROC) (GLfloat factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORDSUNPROC) (GLdouble factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUBSUNPROC) (GLubyte factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUSSUNPROC) (GLushort factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUISUNPROC) (GLuint factor); #endif #ifndef GL_SUN_triangle_list #define GL_SUN_triangle_list 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glReplacementCodeuiSUN (GLuint); -extern void APIENTRY glReplacementCodeusSUN (GLushort); -extern void APIENTRY glReplacementCodeubSUN (GLubyte); -extern void APIENTRY glReplacementCodeuivSUN (const GLuint *); -extern void APIENTRY glReplacementCodeusvSUN (const GLushort *); -extern void APIENTRY glReplacementCodeubvSUN (const GLubyte *); -extern void APIENTRY glReplacementCodePointerSUN (GLenum, GLsizei, const GLvoid* *); +GLAPI void APIENTRY glReplacementCodeuiSUN (GLuint); +GLAPI void APIENTRY glReplacementCodeusSUN (GLushort); +GLAPI void APIENTRY glReplacementCodeubSUN (GLubyte); +GLAPI void APIENTRY glReplacementCodeuivSUN (const GLuint *); +GLAPI void APIENTRY glReplacementCodeusvSUN (const GLushort *); +GLAPI void APIENTRY glReplacementCodeubvSUN (const GLubyte *); +GLAPI void APIENTRY glReplacementCodePointerSUN (GLenum, GLsizei, const GLvoid* *); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLREPLACEMENTCODEUISUNPROC) (GLuint code); -typedef void (APIENTRY * PFNGLREPLACEMENTCODEUSSUNPROC) (GLushort code); -typedef void (APIENTRY * PFNGLREPLACEMENTCODEUBSUNPROC) (GLubyte code); -typedef void (APIENTRY * PFNGLREPLACEMENTCODEUIVSUNPROC) (const GLuint *code); -typedef void (APIENTRY * PFNGLREPLACEMENTCODEUSVSUNPROC) (const GLushort *code); -typedef void (APIENTRY * PFNGLREPLACEMENTCODEUBVSUNPROC) (const GLubyte *code); -typedef void (APIENTRY * PFNGLREPLACEMENTCODEPOINTERSUNPROC) (GLenum type, GLsizei stride, const GLvoid* *pointer); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUISUNPROC) (GLuint code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSSUNPROC) (GLushort code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBSUNPROC) (GLubyte code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVSUNPROC) (const GLuint *code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSVSUNPROC) (const GLushort *code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBVSUNPROC) (const GLubyte *code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEPOINTERSUNPROC) (GLenum type, GLsizei stride, const GLvoid* *pointer); #endif #ifndef GL_SUN_vertex #define GL_SUN_vertex 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glColor4ubVertex2fSUN (GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat); -extern void APIENTRY glColor4ubVertex2fvSUN (const GLubyte *, const GLfloat *); -extern void APIENTRY glColor4ubVertex3fSUN (GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat); -extern void APIENTRY glColor4ubVertex3fvSUN (const GLubyte *, const GLfloat *); -extern void APIENTRY glColor3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -extern void APIENTRY glColor3fVertex3fvSUN (const GLfloat *, const GLfloat *); -extern void APIENTRY glNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -extern void APIENTRY glNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *); -extern void APIENTRY glColor4fNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -extern void APIENTRY glColor4fNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *); -extern void APIENTRY glTexCoord2fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -extern void APIENTRY glTexCoord2fVertex3fvSUN (const GLfloat *, const GLfloat *); -extern void APIENTRY glTexCoord4fVertex4fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -extern void APIENTRY glTexCoord4fVertex4fvSUN (const GLfloat *, const GLfloat *); -extern void APIENTRY glTexCoord2fColor4ubVertex3fSUN (GLfloat, GLfloat, GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat); -extern void APIENTRY glTexCoord2fColor4ubVertex3fvSUN (const GLfloat *, const GLubyte *, const GLfloat *); -extern void APIENTRY glTexCoord2fColor3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -extern void APIENTRY glTexCoord2fColor3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *); -extern void APIENTRY glTexCoord2fNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -extern void APIENTRY glTexCoord2fNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *); -extern void APIENTRY glTexCoord2fColor4fNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -extern void APIENTRY glTexCoord2fColor4fNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *, const GLfloat *); -extern void APIENTRY glTexCoord4fColor4fNormal3fVertex4fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -extern void APIENTRY glTexCoord4fColor4fNormal3fVertex4fvSUN (const GLfloat *, const GLfloat *, const GLfloat *, const GLfloat *); -extern void APIENTRY glReplacementCodeuiVertex3fSUN (GLenum, GLfloat, GLfloat, GLfloat); -extern void APIENTRY glReplacementCodeuiVertex3fvSUN (const GLenum *, const GLfloat *); -extern void APIENTRY glReplacementCodeuiColor4ubVertex3fSUN (GLenum, GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat); -extern void APIENTRY glReplacementCodeuiColor4ubVertex3fvSUN (const GLenum *, const GLubyte *, const GLfloat *); -extern void APIENTRY glReplacementCodeuiColor3fVertex3fSUN (GLenum, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -extern void APIENTRY glReplacementCodeuiColor3fVertex3fvSUN (const GLenum *, const GLfloat *, const GLfloat *); -extern void APIENTRY glReplacementCodeuiNormal3fVertex3fSUN (GLenum, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -extern void APIENTRY glReplacementCodeuiNormal3fVertex3fvSUN (const GLenum *, const GLfloat *, const GLfloat *); -extern void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fSUN (GLenum, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -extern void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fvSUN (const GLenum *, const GLfloat *, const GLfloat *, const GLfloat *); -extern void APIENTRY glReplacementCodeuiTexCoord2fVertex3fSUN (GLenum, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -extern void APIENTRY glReplacementCodeuiTexCoord2fVertex3fvSUN (const GLenum *, const GLfloat *, const GLfloat *); -extern void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (GLenum, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -extern void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (const GLenum *, const GLfloat *, const GLfloat *, const GLfloat *); -extern void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (GLenum, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); -extern void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (const GLenum *, const GLfloat *, const GLfloat *, const GLfloat *, const GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLCOLOR4UBVERTEX2FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); -typedef void (APIENTRY * PFNGLCOLOR4UBVERTEX2FVSUNPROC) (const GLubyte *c, const GLfloat *v); -typedef void (APIENTRY * PFNGLCOLOR4UBVERTEX3FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRY * PFNGLCOLOR4UBVERTEX3FVSUNPROC) (const GLubyte *c, const GLfloat *v); -typedef void (APIENTRY * PFNGLCOLOR3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRY * PFNGLCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *v); -typedef void (APIENTRY * PFNGLNORMAL3FVERTEX3FSUNPROC) (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRY * PFNGLNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *n, const GLfloat *v); -typedef void (APIENTRY * PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRY * PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRY * PFNGLTEXCOORD2FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRY * PFNGLTEXCOORD2FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *v); -typedef void (APIENTRY * PFNGLTEXCOORD4FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRY * PFNGLTEXCOORD4FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *v); -typedef void (APIENTRY * PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRY * PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC) (const GLfloat *tc, const GLubyte *c, const GLfloat *v); -typedef void (APIENTRY * PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRY * PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *v); -typedef void (APIENTRY * PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRY * PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRY * PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRY * PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRY * PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRY * PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRY * PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC) (GLenum rc, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRY * PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC) (const GLenum *rc, const GLfloat *v); -typedef void (APIENTRY * PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC) (GLenum rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRY * PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC) (const GLenum *rc, const GLubyte *c, const GLfloat *v); -typedef void (APIENTRY * PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC) (GLenum rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRY * PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC) (const GLenum *rc, const GLfloat *c, const GLfloat *v); -typedef void (APIENTRY * PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC) (GLenum rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRY * PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC) (const GLenum *rc, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRY * PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLenum rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRY * PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLenum *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC) (GLenum rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC) (const GLenum *rc, const GLfloat *tc, const GLfloat *v); -typedef void (APIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLenum rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLenum *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLenum rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLenum *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glColor4ubVertex2fSUN (GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat); +GLAPI void APIENTRY glColor4ubVertex2fvSUN (const GLubyte *, const GLfloat *); +GLAPI void APIENTRY glColor4ubVertex3fSUN (GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glColor4ubVertex3fvSUN (const GLubyte *, const GLfloat *); +GLAPI void APIENTRY glColor3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glColor3fVertex3fvSUN (const GLfloat *, const GLfloat *); +GLAPI void APIENTRY glNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *); +GLAPI void APIENTRY glColor4fNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glColor4fNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *); +GLAPI void APIENTRY glTexCoord2fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glTexCoord2fVertex3fvSUN (const GLfloat *, const GLfloat *); +GLAPI void APIENTRY glTexCoord4fVertex4fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glTexCoord4fVertex4fvSUN (const GLfloat *, const GLfloat *); +GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fSUN (GLfloat, GLfloat, GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fvSUN (const GLfloat *, const GLubyte *, const GLfloat *); +GLAPI void APIENTRY glTexCoord2fColor3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glTexCoord2fColor3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *); +GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *); +GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *, const GLfloat *); +GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fvSUN (const GLfloat *, const GLfloat *, const GLfloat *, const GLfloat *); +GLAPI void APIENTRY glReplacementCodeuiVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glReplacementCodeuiVertex3fvSUN (const GLuint *, const GLfloat *); +GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fSUN (GLuint, GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fvSUN (const GLuint *, const GLubyte *, const GLfloat *); +GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *); +GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *); +GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *, const GLfloat *); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *, const GLfloat *); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (const GLuint *, const GLfloat *, const GLfloat *, const GLfloat *, const GLfloat *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FVSUNPROC) (const GLubyte *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FVSUNPROC) (const GLubyte *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FSUNPROC) (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC) (const GLfloat *tc, const GLubyte *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC) (GLuint rc, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC) (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC) (const GLuint *rc, const GLubyte *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); #endif #ifndef GL_EXT_blend_func_separate #define GL_EXT_blend_func_separate 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glBlendFuncSeparateEXT (GLenum, GLenum, GLenum, GLenum); +GLAPI void APIENTRY glBlendFuncSeparateEXT (GLenum, GLenum, GLenum, GLenum); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +#endif + +#ifndef GL_INGR_blend_func_separate +#define GL_INGR_blend_func_separate 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendFuncSeparateINGR (GLenum, GLenum, GLenum, GLenum); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINGRPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); #endif #ifndef GL_INGR_color_clamp @@ -2812,13 +5193,13 @@ typedef void (APIENTRY * PFNGLBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLen #ifndef GL_EXT_vertex_weighting #define GL_EXT_vertex_weighting 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glVertexWeightfEXT (GLfloat); -extern void APIENTRY glVertexWeightfvEXT (const GLfloat *); -extern void APIENTRY glVertexWeightPointerEXT (GLsizei, GLenum, GLsizei, const GLvoid *); +GLAPI void APIENTRY glVertexWeightfEXT (GLfloat); +GLAPI void APIENTRY glVertexWeightfvEXT (const GLfloat *); +GLAPI void APIENTRY glVertexWeightPointerEXT (GLsizei, GLenum, GLsizei, const GLvoid *); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLVERTEXWEIGHTFEXTPROC) (GLfloat weight); -typedef void (APIENTRY * PFNGLVERTEXWEIGHTFVEXTPROC) (const GLfloat *weight); -typedef void (APIENTRY * PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLsizei size, GLenum type, GLsizei stride, const GLvoid *pointer); +typedef void (APIENTRYP PFNGLVERTEXWEIGHTFEXTPROC) (GLfloat weight); +typedef void (APIENTRYP PFNGLVERTEXWEIGHTFVEXTPROC) (const GLfloat *weight); +typedef void (APIENTRYP PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLsizei size, GLenum type, GLsizei stride, const GLvoid *pointer); #endif #ifndef GL_NV_light_max_exponent @@ -2828,43 +5209,43 @@ typedef void (APIENTRY * PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLsizei size, GLenum #ifndef GL_NV_vertex_array_range #define GL_NV_vertex_array_range 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glFlushVertexArrayRangeNV (void); -extern void APIENTRY glVertexArrayRangeNV (GLsizei, const GLvoid *); +GLAPI void APIENTRY glFlushVertexArrayRangeNV (void); +GLAPI void APIENTRY glVertexArrayRangeNV (GLsizei, const GLvoid *); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLFLUSHVERTEXARRAYRANGENVPROC) (void); -typedef void (APIENTRY * PFNGLVERTEXARRAYRANGENVPROC) (GLsizei size, const GLvoid *pointer); +typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGENVPROC) (void); +typedef void (APIENTRYP PFNGLVERTEXARRAYRANGENVPROC) (GLsizei length, const GLvoid *pointer); #endif #ifndef GL_NV_register_combiners #define GL_NV_register_combiners 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glCombinerParameterfvNV (GLenum, const GLfloat *); -extern void APIENTRY glCombinerParameterfNV (GLenum, GLfloat); -extern void APIENTRY glCombinerParameterivNV (GLenum, const GLint *); -extern void APIENTRY glCombinerParameteriNV (GLenum, GLint); -extern void APIENTRY glCombinerInputNV (GLenum, GLenum, GLenum, GLenum, GLenum, GLenum); -extern void APIENTRY glCombinerOutputNV (GLenum, GLenum, GLenum, GLenum, GLenum, GLenum, GLenum, GLboolean, GLboolean, GLboolean); -extern void APIENTRY glFinalCombinerInputNV (GLenum, GLenum, GLenum, GLenum); -extern void APIENTRY glGetCombinerInputParameterfvNV (GLenum, GLenum, GLenum, GLenum, GLfloat *); -extern void APIENTRY glGetCombinerInputParameterivNV (GLenum, GLenum, GLenum, GLenum, GLint *); -extern void APIENTRY glGetCombinerOutputParameterfvNV (GLenum, GLenum, GLenum, GLfloat *); -extern void APIENTRY glGetCombinerOutputParameterivNV (GLenum, GLenum, GLenum, GLint *); -extern void APIENTRY glGetFinalCombinerInputParameterfvNV (GLenum, GLenum, GLfloat *); -extern void APIENTRY glGetFinalCombinerInputParameterivNV (GLenum, GLenum, GLint *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLCOMBINERPARAMETERFVNVPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRY * PFNGLCOMBINERPARAMETERFNVPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRY * PFNGLCOMBINERPARAMETERIVNVPROC) (GLenum pname, const GLint *params); -typedef void (APIENTRY * PFNGLCOMBINERPARAMETERINVPROC) (GLenum pname, GLint param); -typedef void (APIENTRY * PFNGLCOMBINERINPUTNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); -typedef void (APIENTRY * PFNGLCOMBINEROUTPUTNVPROC) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); -typedef void (APIENTRY * PFNGLFINALCOMBINERINPUTNVPROC) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); -typedef void (APIENTRY * PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params); -typedef void (APIENTRY * PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params); -typedef void (APIENTRY * PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLfloat *params); -typedef void (APIENTRY * PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLint *params); -typedef void (APIENTRY * PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) (GLenum variable, GLenum pname, GLfloat *params); -typedef void (APIENTRY * PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) (GLenum variable, GLenum pname, GLint *params); +GLAPI void APIENTRY glCombinerParameterfvNV (GLenum, const GLfloat *); +GLAPI void APIENTRY glCombinerParameterfNV (GLenum, GLfloat); +GLAPI void APIENTRY glCombinerParameterivNV (GLenum, const GLint *); +GLAPI void APIENTRY glCombinerParameteriNV (GLenum, GLint); +GLAPI void APIENTRY glCombinerInputNV (GLenum, GLenum, GLenum, GLenum, GLenum, GLenum); +GLAPI void APIENTRY glCombinerOutputNV (GLenum, GLenum, GLenum, GLenum, GLenum, GLenum, GLenum, GLboolean, GLboolean, GLboolean); +GLAPI void APIENTRY glFinalCombinerInputNV (GLenum, GLenum, GLenum, GLenum); +GLAPI void APIENTRY glGetCombinerInputParameterfvNV (GLenum, GLenum, GLenum, GLenum, GLfloat *); +GLAPI void APIENTRY glGetCombinerInputParameterivNV (GLenum, GLenum, GLenum, GLenum, GLint *); +GLAPI void APIENTRY glGetCombinerOutputParameterfvNV (GLenum, GLenum, GLenum, GLfloat *); +GLAPI void APIENTRY glGetCombinerOutputParameterivNV (GLenum, GLenum, GLenum, GLint *); +GLAPI void APIENTRY glGetFinalCombinerInputParameterfvNV (GLenum, GLenum, GLfloat *); +GLAPI void APIENTRY glGetFinalCombinerInputParameterivNV (GLenum, GLenum, GLint *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFVNVPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFNVPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLCOMBINERPARAMETERIVNVPROC) (GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLCOMBINERPARAMETERINVPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLCOMBINERINPUTNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); +typedef void (APIENTRYP PFNGLCOMBINEROUTPUTNVPROC) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); +typedef void (APIENTRYP PFNGLFINALCOMBINERINPUTNVPROC) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); +typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) (GLenum variable, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) (GLenum variable, GLenum pname, GLint *params); #endif #ifndef GL_NV_fog_distance @@ -2886,63 +5267,63 @@ typedef void (APIENTRY * PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) (GLenum va #ifndef GL_MESA_resize_buffers #define GL_MESA_resize_buffers 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glResizeBuffersMESA (void); +GLAPI void APIENTRY glResizeBuffersMESA (void); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLRESIZEBUFFERSMESAPROC) (void); +typedef void (APIENTRYP PFNGLRESIZEBUFFERSMESAPROC) (void); #endif #ifndef GL_MESA_window_pos #define GL_MESA_window_pos 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glWindowPos2dMESA (GLdouble, GLdouble); -extern void APIENTRY glWindowPos2dvMESA (const GLdouble *); -extern void APIENTRY glWindowPos2fMESA (GLfloat, GLfloat); -extern void APIENTRY glWindowPos2fvMESA (const GLfloat *); -extern void APIENTRY glWindowPos2iMESA (GLint, GLint); -extern void APIENTRY glWindowPos2ivMESA (const GLint *); -extern void APIENTRY glWindowPos2sMESA (GLshort, GLshort); -extern void APIENTRY glWindowPos2svMESA (const GLshort *); -extern void APIENTRY glWindowPos3dMESA (GLdouble, GLdouble, GLdouble); -extern void APIENTRY glWindowPos3dvMESA (const GLdouble *); -extern void APIENTRY glWindowPos3fMESA (GLfloat, GLfloat, GLfloat); -extern void APIENTRY glWindowPos3fvMESA (const GLfloat *); -extern void APIENTRY glWindowPos3iMESA (GLint, GLint, GLint); -extern void APIENTRY glWindowPos3ivMESA (const GLint *); -extern void APIENTRY glWindowPos3sMESA (GLshort, GLshort, GLshort); -extern void APIENTRY glWindowPos3svMESA (const GLshort *); -extern void APIENTRY glWindowPos4dMESA (GLdouble, GLdouble, GLdouble, GLdouble); -extern void APIENTRY glWindowPos4dvMESA (const GLdouble *); -extern void APIENTRY glWindowPos4fMESA (GLfloat, GLfloat, GLfloat, GLfloat); -extern void APIENTRY glWindowPos4fvMESA (const GLfloat *); -extern void APIENTRY glWindowPos4iMESA (GLint, GLint, GLint, GLint); -extern void APIENTRY glWindowPos4ivMESA (const GLint *); -extern void APIENTRY glWindowPos4sMESA (GLshort, GLshort, GLshort, GLshort); -extern void APIENTRY glWindowPos4svMESA (const GLshort *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLWINDOWPOS2DMESAPROC) (GLdouble x, GLdouble y); -typedef void (APIENTRY * PFNGLWINDOWPOS2DVMESAPROC) (const GLdouble *v); -typedef void (APIENTRY * PFNGLWINDOWPOS2FMESAPROC) (GLfloat x, GLfloat y); -typedef void (APIENTRY * PFNGLWINDOWPOS2FVMESAPROC) (const GLfloat *v); -typedef void (APIENTRY * PFNGLWINDOWPOS2IMESAPROC) (GLint x, GLint y); -typedef void (APIENTRY * PFNGLWINDOWPOS2IVMESAPROC) (const GLint *v); -typedef void (APIENTRY * PFNGLWINDOWPOS2SMESAPROC) (GLshort x, GLshort y); -typedef void (APIENTRY * PFNGLWINDOWPOS2SVMESAPROC) (const GLshort *v); -typedef void (APIENTRY * PFNGLWINDOWPOS3DMESAPROC) (GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRY * PFNGLWINDOWPOS3DVMESAPROC) (const GLdouble *v); -typedef void (APIENTRY * PFNGLWINDOWPOS3FMESAPROC) (GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRY * PFNGLWINDOWPOS3FVMESAPROC) (const GLfloat *v); -typedef void (APIENTRY * PFNGLWINDOWPOS3IMESAPROC) (GLint x, GLint y, GLint z); -typedef void (APIENTRY * PFNGLWINDOWPOS3IVMESAPROC) (const GLint *v); -typedef void (APIENTRY * PFNGLWINDOWPOS3SMESAPROC) (GLshort x, GLshort y, GLshort z); -typedef void (APIENTRY * PFNGLWINDOWPOS3SVMESAPROC) (const GLshort *v); -typedef void (APIENTRY * PFNGLWINDOWPOS4DMESAPROC) (GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRY * PFNGLWINDOWPOS4DVMESAPROC) (const GLdouble *v); -typedef void (APIENTRY * PFNGLWINDOWPOS4FMESAPROC) (GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRY * PFNGLWINDOWPOS4FVMESAPROC) (const GLfloat *v); -typedef void (APIENTRY * PFNGLWINDOWPOS4IMESAPROC) (GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRY * PFNGLWINDOWPOS4IVMESAPROC) (const GLint *v); -typedef void (APIENTRY * PFNGLWINDOWPOS4SMESAPROC) (GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRY * PFNGLWINDOWPOS4SVMESAPROC) (const GLshort *v); +GLAPI void APIENTRY glWindowPos2dMESA (GLdouble, GLdouble); +GLAPI void APIENTRY glWindowPos2dvMESA (const GLdouble *); +GLAPI void APIENTRY glWindowPos2fMESA (GLfloat, GLfloat); +GLAPI void APIENTRY glWindowPos2fvMESA (const GLfloat *); +GLAPI void APIENTRY glWindowPos2iMESA (GLint, GLint); +GLAPI void APIENTRY glWindowPos2ivMESA (const GLint *); +GLAPI void APIENTRY glWindowPos2sMESA (GLshort, GLshort); +GLAPI void APIENTRY glWindowPos2svMESA (const GLshort *); +GLAPI void APIENTRY glWindowPos3dMESA (GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glWindowPos3dvMESA (const GLdouble *); +GLAPI void APIENTRY glWindowPos3fMESA (GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glWindowPos3fvMESA (const GLfloat *); +GLAPI void APIENTRY glWindowPos3iMESA (GLint, GLint, GLint); +GLAPI void APIENTRY glWindowPos3ivMESA (const GLint *); +GLAPI void APIENTRY glWindowPos3sMESA (GLshort, GLshort, GLshort); +GLAPI void APIENTRY glWindowPos3svMESA (const GLshort *); +GLAPI void APIENTRY glWindowPos4dMESA (GLdouble, GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glWindowPos4dvMESA (const GLdouble *); +GLAPI void APIENTRY glWindowPos4fMESA (GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glWindowPos4fvMESA (const GLfloat *); +GLAPI void APIENTRY glWindowPos4iMESA (GLint, GLint, GLint, GLint); +GLAPI void APIENTRY glWindowPos4ivMESA (const GLint *); +GLAPI void APIENTRY glWindowPos4sMESA (GLshort, GLshort, GLshort, GLshort); +GLAPI void APIENTRY glWindowPos4svMESA (const GLshort *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLWINDOWPOS2DMESAPROC) (GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLWINDOWPOS2DVMESAPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2FMESAPROC) (GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLWINDOWPOS2FVMESAPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2IMESAPROC) (GLint x, GLint y); +typedef void (APIENTRYP PFNGLWINDOWPOS2IVMESAPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2SMESAPROC) (GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLWINDOWPOS2SVMESAPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3DMESAPROC) (GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLWINDOWPOS3DVMESAPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3FMESAPROC) (GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLWINDOWPOS3FVMESAPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3IMESAPROC) (GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLWINDOWPOS3IVMESAPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3SMESAPROC) (GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLWINDOWPOS3SVMESAPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLWINDOWPOS4DMESAPROC) (GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLWINDOWPOS4DVMESAPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS4FMESAPROC) (GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLWINDOWPOS4FVMESAPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS4IMESAPROC) (GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLWINDOWPOS4IVMESAPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS4SMESAPROC) (GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLWINDOWPOS4SVMESAPROC) (const GLshort *v); #endif #ifndef GL_IBM_cull_vertex @@ -2952,33 +5333,33 @@ typedef void (APIENTRY * PFNGLWINDOWPOS4SVMESAPROC) (const GLshort *v); #ifndef GL_IBM_multimode_draw_arrays #define GL_IBM_multimode_draw_arrays 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glMultiModeDrawArraysIBM (GLenum, const GLint *, const GLsizei *, GLsizei, GLint); -extern void APIENTRY glMultiModeDrawElementsIBM (const GLenum *, const GLsizei *, GLenum, const GLvoid* *, GLsizei, GLint); +GLAPI void APIENTRY glMultiModeDrawArraysIBM (const GLenum *, const GLint *, const GLsizei *, GLsizei, GLint); +GLAPI void APIENTRY glMultiModeDrawElementsIBM (const GLenum *, const GLsizei *, GLenum, const GLvoid* const *, GLsizei, GLint); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLMULTIMODEDRAWARRAYSIBMPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); -typedef void (APIENTRY * PFNGLMULTIMODEDRAWELEMENTSIBMPROC) (const GLenum *mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount, GLint modestride); +typedef void (APIENTRYP PFNGLMULTIMODEDRAWARRAYSIBMPROC) (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); +typedef void (APIENTRYP PFNGLMULTIMODEDRAWELEMENTSIBMPROC) (const GLenum *mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei primcount, GLint modestride); #endif #ifndef GL_IBM_vertex_array_lists #define GL_IBM_vertex_array_lists 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glColorPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint); -extern void APIENTRY glSecondaryColorPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint); -extern void APIENTRY glEdgeFlagPointerListIBM (GLint, const GLboolean* *, GLint); -extern void APIENTRY glFogCoordPointerListIBM (GLenum, GLint, const GLvoid* *, GLint); -extern void APIENTRY glIndexPointerListIBM (GLenum, GLint, const GLvoid* *, GLint); -extern void APIENTRY glNormalPointerListIBM (GLenum, GLint, const GLvoid* *, GLint); -extern void APIENTRY glTexCoordPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint); -extern void APIENTRY glVertexPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -typedef void (APIENTRY * PFNGLSECONDARYCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -typedef void (APIENTRY * PFNGLEDGEFLAGPOINTERLISTIBMPROC) (GLint stride, const GLboolean* *pointer, GLint ptrstride); -typedef void (APIENTRY * PFNGLFOGCOORDPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -typedef void (APIENTRY * PFNGLINDEXPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -typedef void (APIENTRY * PFNGLNORMALPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -typedef void (APIENTRY * PFNGLTEXCOORDPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -typedef void (APIENTRY * PFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); +GLAPI void APIENTRY glColorPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint); +GLAPI void APIENTRY glSecondaryColorPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint); +GLAPI void APIENTRY glEdgeFlagPointerListIBM (GLint, const GLboolean* *, GLint); +GLAPI void APIENTRY glFogCoordPointerListIBM (GLenum, GLint, const GLvoid* *, GLint); +GLAPI void APIENTRY glIndexPointerListIBM (GLenum, GLint, const GLvoid* *, GLint); +GLAPI void APIENTRY glNormalPointerListIBM (GLenum, GLint, const GLvoid* *, GLint); +GLAPI void APIENTRY glTexCoordPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint); +GLAPI void APIENTRY glVertexPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLEDGEFLAGPOINTERLISTIBMPROC) (GLint stride, const GLboolean* *pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLFOGCOORDPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLINDEXPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLNORMALPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLTEXCOORDPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); #endif #ifndef GL_SGIX_subsample @@ -3008,23 +5389,23 @@ typedef void (APIENTRY * PFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum type #ifndef GL_3DFX_tbuffer #define GL_3DFX_tbuffer 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glTbufferMask3DFX (GLuint); +GLAPI void APIENTRY glTbufferMask3DFX (GLuint); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLTBUFFERMASK3DFXPROC) (GLuint mask); +typedef void (APIENTRYP PFNGLTBUFFERMASK3DFXPROC) (GLuint mask); #endif #ifndef GL_EXT_multisample #define GL_EXT_multisample 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glSampleMaskEXT (GLclampf, GLboolean); -extern void APIENTRY glSamplePatternEXT (GLenum); +GLAPI void APIENTRY glSampleMaskEXT (GLclampf, GLboolean); +GLAPI void APIENTRY glSamplePatternEXT (GLenum); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLSAMPLEMASKEXTPROC) (GLclampf value, GLboolean invert); -typedef void (APIENTRY * PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern); +typedef void (APIENTRYP PFNGLSAMPLEMASKEXTPROC) (GLclampf value, GLboolean invert); +typedef void (APIENTRYP PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern); #endif -#ifndef GL_SGI_vertex_preclip -#define GL_SGI_vertex_preclip 1 +#ifndef GL_SGIX_vertex_preclip +#define GL_SGIX_vertex_preclip 1 #endif #ifndef GL_SGIX_convolution_accuracy @@ -3042,17 +5423,949 @@ typedef void (APIENTRY * PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern); #ifndef GL_SGIS_texture_color_mask #define GL_SGIS_texture_color_mask 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glTextureColorMaskSGIS (GLboolean, GLboolean, GLboolean, GLboolean); +GLAPI void APIENTRY glTextureColorMaskSGIS (GLboolean, GLboolean, GLboolean, GLboolean); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLTEXTURECOLORMASKSGISPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); +typedef void (APIENTRYP PFNGLTEXTURECOLORMASKSGISPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); #endif #ifndef GL_SGIX_igloo_interface #define GL_SGIX_igloo_interface 1 #ifdef GL_GLEXT_PROTOTYPES -extern void APIENTRY glIglooInterfaceSGIX (GLenum, const GLvoid *); +GLAPI void APIENTRY glIglooInterfaceSGIX (GLenum, const GLvoid *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLIGLOOINTERFACESGIXPROC) (GLenum pname, const GLvoid *params); +#endif + +#ifndef GL_EXT_texture_env_dot3 +#define GL_EXT_texture_env_dot3 1 +#endif + +#ifndef GL_ATI_texture_mirror_once +#define GL_ATI_texture_mirror_once 1 +#endif + +#ifndef GL_NV_fence +#define GL_NV_fence 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDeleteFencesNV (GLsizei, const GLuint *); +GLAPI void APIENTRY glGenFencesNV (GLsizei, GLuint *); +GLAPI GLboolean APIENTRY glIsFenceNV (GLuint); +GLAPI GLboolean APIENTRY glTestFenceNV (GLuint); +GLAPI void APIENTRY glGetFenceivNV (GLuint, GLenum, GLint *); +GLAPI void APIENTRY glFinishFenceNV (GLuint); +GLAPI void APIENTRY glSetFenceNV (GLuint, GLenum); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences); +typedef void (APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences); +typedef GLboolean (APIENTRYP PFNGLISFENCENVPROC) (GLuint fence); +typedef GLboolean (APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence); +typedef void (APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence); +typedef void (APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition); +#endif + +#ifndef GL_NV_evaluators +#define GL_NV_evaluators 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMapControlPointsNV (GLenum, GLuint, GLenum, GLsizei, GLsizei, GLint, GLint, GLboolean, const GLvoid *); +GLAPI void APIENTRY glMapParameterivNV (GLenum, GLenum, const GLint *); +GLAPI void APIENTRY glMapParameterfvNV (GLenum, GLenum, const GLfloat *); +GLAPI void APIENTRY glGetMapControlPointsNV (GLenum, GLuint, GLenum, GLsizei, GLsizei, GLboolean, GLvoid *); +GLAPI void APIENTRY glGetMapParameterivNV (GLenum, GLenum, GLint *); +GLAPI void APIENTRY glGetMapParameterfvNV (GLenum, GLenum, GLfloat *); +GLAPI void APIENTRY glGetMapAttribParameterivNV (GLenum, GLuint, GLenum, GLint *); +GLAPI void APIENTRY glGetMapAttribParameterfvNV (GLenum, GLuint, GLenum, GLfloat *); +GLAPI void APIENTRY glEvalMapsNV (GLenum, GLenum); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const GLvoid *points); +typedef void (APIENTRYP PFNGLMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, GLvoid *points); +typedef void (APIENTRYP PFNGLGETMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERIVNVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLEVALMAPSNVPROC) (GLenum target, GLenum mode); +#endif + +#ifndef GL_NV_packed_depth_stencil +#define GL_NV_packed_depth_stencil 1 +#endif + +#ifndef GL_NV_register_combiners2 +#define GL_NV_register_combiners2 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCombinerStageParameterfvNV (GLenum, GLenum, const GLfloat *); +GLAPI void APIENTRY glGetCombinerStageParameterfvNV (GLenum, GLenum, GLfloat *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, GLfloat *params); +#endif + +#ifndef GL_NV_texture_compression_vtc +#define GL_NV_texture_compression_vtc 1 +#endif + +#ifndef GL_NV_texture_rectangle +#define GL_NV_texture_rectangle 1 +#endif + +#ifndef GL_NV_texture_shader +#define GL_NV_texture_shader 1 +#endif + +#ifndef GL_NV_texture_shader2 +#define GL_NV_texture_shader2 1 +#endif + +#ifndef GL_NV_vertex_array_range2 +#define GL_NV_vertex_array_range2 1 +#endif + +#ifndef GL_NV_vertex_program +#define GL_NV_vertex_program 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLboolean APIENTRY glAreProgramsResidentNV (GLsizei, const GLuint *, GLboolean *); +GLAPI void APIENTRY glBindProgramNV (GLenum, GLuint); +GLAPI void APIENTRY glDeleteProgramsNV (GLsizei, const GLuint *); +GLAPI void APIENTRY glExecuteProgramNV (GLenum, GLuint, const GLfloat *); +GLAPI void APIENTRY glGenProgramsNV (GLsizei, GLuint *); +GLAPI void APIENTRY glGetProgramParameterdvNV (GLenum, GLuint, GLenum, GLdouble *); +GLAPI void APIENTRY glGetProgramParameterfvNV (GLenum, GLuint, GLenum, GLfloat *); +GLAPI void APIENTRY glGetProgramivNV (GLuint, GLenum, GLint *); +GLAPI void APIENTRY glGetProgramStringNV (GLuint, GLenum, GLubyte *); +GLAPI void APIENTRY glGetTrackMatrixivNV (GLenum, GLuint, GLenum, GLint *); +GLAPI void APIENTRY glGetVertexAttribdvNV (GLuint, GLenum, GLdouble *); +GLAPI void APIENTRY glGetVertexAttribfvNV (GLuint, GLenum, GLfloat *); +GLAPI void APIENTRY glGetVertexAttribivNV (GLuint, GLenum, GLint *); +GLAPI void APIENTRY glGetVertexAttribPointervNV (GLuint, GLenum, GLvoid* *); +GLAPI GLboolean APIENTRY glIsProgramNV (GLuint); +GLAPI void APIENTRY glLoadProgramNV (GLenum, GLuint, GLsizei, const GLubyte *); +GLAPI void APIENTRY glProgramParameter4dNV (GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glProgramParameter4dvNV (GLenum, GLuint, const GLdouble *); +GLAPI void APIENTRY glProgramParameter4fNV (GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glProgramParameter4fvNV (GLenum, GLuint, const GLfloat *); +GLAPI void APIENTRY glProgramParameters4dvNV (GLenum, GLuint, GLuint, const GLdouble *); +GLAPI void APIENTRY glProgramParameters4fvNV (GLenum, GLuint, GLuint, const GLfloat *); +GLAPI void APIENTRY glRequestResidentProgramsNV (GLsizei, const GLuint *); +GLAPI void APIENTRY glTrackMatrixNV (GLenum, GLuint, GLenum, GLenum); +GLAPI void APIENTRY glVertexAttribPointerNV (GLuint, GLint, GLenum, GLsizei, const GLvoid *); +GLAPI void APIENTRY glVertexAttrib1dNV (GLuint, GLdouble); +GLAPI void APIENTRY glVertexAttrib1dvNV (GLuint, const GLdouble *); +GLAPI void APIENTRY glVertexAttrib1fNV (GLuint, GLfloat); +GLAPI void APIENTRY glVertexAttrib1fvNV (GLuint, const GLfloat *); +GLAPI void APIENTRY glVertexAttrib1sNV (GLuint, GLshort); +GLAPI void APIENTRY glVertexAttrib1svNV (GLuint, const GLshort *); +GLAPI void APIENTRY glVertexAttrib2dNV (GLuint, GLdouble, GLdouble); +GLAPI void APIENTRY glVertexAttrib2dvNV (GLuint, const GLdouble *); +GLAPI void APIENTRY glVertexAttrib2fNV (GLuint, GLfloat, GLfloat); +GLAPI void APIENTRY glVertexAttrib2fvNV (GLuint, const GLfloat *); +GLAPI void APIENTRY glVertexAttrib2sNV (GLuint, GLshort, GLshort); +GLAPI void APIENTRY glVertexAttrib2svNV (GLuint, const GLshort *); +GLAPI void APIENTRY glVertexAttrib3dNV (GLuint, GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glVertexAttrib3dvNV (GLuint, const GLdouble *); +GLAPI void APIENTRY glVertexAttrib3fNV (GLuint, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glVertexAttrib3fvNV (GLuint, const GLfloat *); +GLAPI void APIENTRY glVertexAttrib3sNV (GLuint, GLshort, GLshort, GLshort); +GLAPI void APIENTRY glVertexAttrib3svNV (GLuint, const GLshort *); +GLAPI void APIENTRY glVertexAttrib4dNV (GLuint, GLdouble, GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glVertexAttrib4dvNV (GLuint, const GLdouble *); +GLAPI void APIENTRY glVertexAttrib4fNV (GLuint, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glVertexAttrib4fvNV (GLuint, const GLfloat *); +GLAPI void APIENTRY glVertexAttrib4sNV (GLuint, GLshort, GLshort, GLshort, GLshort); +GLAPI void APIENTRY glVertexAttrib4svNV (GLuint, const GLshort *); +GLAPI void APIENTRY glVertexAttrib4ubNV (GLuint, GLubyte, GLubyte, GLubyte, GLubyte); +GLAPI void APIENTRY glVertexAttrib4ubvNV (GLuint, const GLubyte *); +GLAPI void APIENTRY glVertexAttribs1dvNV (GLuint, GLsizei, const GLdouble *); +GLAPI void APIENTRY glVertexAttribs1fvNV (GLuint, GLsizei, const GLfloat *); +GLAPI void APIENTRY glVertexAttribs1svNV (GLuint, GLsizei, const GLshort *); +GLAPI void APIENTRY glVertexAttribs2dvNV (GLuint, GLsizei, const GLdouble *); +GLAPI void APIENTRY glVertexAttribs2fvNV (GLuint, GLsizei, const GLfloat *); +GLAPI void APIENTRY glVertexAttribs2svNV (GLuint, GLsizei, const GLshort *); +GLAPI void APIENTRY glVertexAttribs3dvNV (GLuint, GLsizei, const GLdouble *); +GLAPI void APIENTRY glVertexAttribs3fvNV (GLuint, GLsizei, const GLfloat *); +GLAPI void APIENTRY glVertexAttribs3svNV (GLuint, GLsizei, const GLshort *); +GLAPI void APIENTRY glVertexAttribs4dvNV (GLuint, GLsizei, const GLdouble *); +GLAPI void APIENTRY glVertexAttribs4fvNV (GLuint, GLsizei, const GLfloat *); +GLAPI void APIENTRY glVertexAttribs4svNV (GLuint, GLsizei, const GLshort *); +GLAPI void APIENTRY glVertexAttribs4ubvNV (GLuint, GLsizei, const GLubyte *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef GLboolean (APIENTRYP PFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n, const GLuint *programs, GLboolean *residences); +typedef void (APIENTRYP PFNGLBINDPROGRAMNVPROC) (GLenum target, GLuint id); +typedef void (APIENTRYP PFNGLDELETEPROGRAMSNVPROC) (GLsizei n, const GLuint *programs); +typedef void (APIENTRYP PFNGLEXECUTEPROGRAMNVPROC) (GLenum target, GLuint id, const GLfloat *params); +typedef void (APIENTRYP PFNGLGENPROGRAMSNVPROC) (GLsizei n, GLuint *programs); +typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERDVNVPROC) (GLenum target, GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETPROGRAMIVNVPROC) (GLuint id, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGNVPROC) (GLuint id, GLenum pname, GLubyte *program); +typedef void (APIENTRYP PFNGLGETTRACKMATRIXIVNVPROC) (GLenum target, GLuint address, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVNVPROC) (GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVNVPROC) (GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVNVPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVNVPROC) (GLuint index, GLenum pname, GLvoid* *pointer); +typedef GLboolean (APIENTRYP PFNGLISPROGRAMNVPROC) (GLuint id); +typedef void (APIENTRYP PFNGLLOADPROGRAMNVPROC) (GLenum target, GLuint id, GLsizei len, const GLubyte *program); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DNVPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DVNVPROC) (GLenum target, GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FNVPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FVNVPROC) (GLenum target, GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4DVNVPROC) (GLenum target, GLuint index, GLuint count, const GLdouble *v); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4FVNVPROC) (GLenum target, GLuint index, GLuint count, const GLfloat *v); +typedef void (APIENTRYP PFNGLREQUESTRESIDENTPROGRAMSNVPROC) (GLsizei n, const GLuint *programs); +typedef void (APIENTRYP PFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform); +typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint fsize, GLenum type, GLsizei stride, const GLvoid *pointer); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DNVPROC) (GLuint index, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVNVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FNVPROC) (GLuint index, GLfloat x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVNVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SNVPROC) (GLuint index, GLshort x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVNVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DNVPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVNVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FNVPROC) (GLuint index, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVNVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SNVPROC) (GLuint index, GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVNVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVNVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVNVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVNVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVNVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVNVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVNVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBNVPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVNVPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS1DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS1FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS1SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS2DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS2FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS2SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS3DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS3FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS3SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS4DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS4FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS4SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS4UBVNVPROC) (GLuint index, GLsizei count, const GLubyte *v); +#endif + +#ifndef GL_SGIX_texture_coordinate_clamp +#define GL_SGIX_texture_coordinate_clamp 1 +#endif + +#ifndef GL_SGIX_scalebias_hint +#define GL_SGIX_scalebias_hint 1 +#endif + +#ifndef GL_OML_interlace +#define GL_OML_interlace 1 +#endif + +#ifndef GL_OML_subsample +#define GL_OML_subsample 1 +#endif + +#ifndef GL_OML_resample +#define GL_OML_resample 1 +#endif + +#ifndef GL_NV_copy_depth_to_color +#define GL_NV_copy_depth_to_color 1 +#endif + +#ifndef GL_ATI_envmap_bumpmap +#define GL_ATI_envmap_bumpmap 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexBumpParameterivATI (GLenum, const GLint *); +GLAPI void APIENTRY glTexBumpParameterfvATI (GLenum, const GLfloat *); +GLAPI void APIENTRY glGetTexBumpParameterivATI (GLenum, GLint *); +GLAPI void APIENTRY glGetTexBumpParameterfvATI (GLenum, GLfloat *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERIVATIPROC) (GLenum pname, const GLint *param); +typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERFVATIPROC) (GLenum pname, const GLfloat *param); +typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint *param); +typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat *param); +#endif + +#ifndef GL_ATI_fragment_shader +#define GL_ATI_fragment_shader 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLuint APIENTRY glGenFragmentShadersATI (GLuint); +GLAPI void APIENTRY glBindFragmentShaderATI (GLuint); +GLAPI void APIENTRY glDeleteFragmentShaderATI (GLuint); +GLAPI void APIENTRY glBeginFragmentShaderATI (void); +GLAPI void APIENTRY glEndFragmentShaderATI (void); +GLAPI void APIENTRY glPassTexCoordATI (GLuint, GLuint, GLenum); +GLAPI void APIENTRY glSampleMapATI (GLuint, GLuint, GLenum); +GLAPI void APIENTRY glColorFragmentOp1ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint); +GLAPI void APIENTRY glColorFragmentOp2ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint); +GLAPI void APIENTRY glColorFragmentOp3ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint); +GLAPI void APIENTRY glAlphaFragmentOp1ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint); +GLAPI void APIENTRY glAlphaFragmentOp2ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint); +GLAPI void APIENTRY glAlphaFragmentOp3ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint); +GLAPI void APIENTRY glSetFragmentShaderConstantATI (GLuint, const GLfloat *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef GLuint (APIENTRYP PFNGLGENFRAGMENTSHADERSATIPROC) (GLuint range); +typedef void (APIENTRYP PFNGLBINDFRAGMENTSHADERATIPROC) (GLuint id); +typedef void (APIENTRYP PFNGLDELETEFRAGMENTSHADERATIPROC) (GLuint id); +typedef void (APIENTRYP PFNGLBEGINFRAGMENTSHADERATIPROC) (void); +typedef void (APIENTRYP PFNGLENDFRAGMENTSHADERATIPROC) (void); +typedef void (APIENTRYP PFNGLPASSTEXCOORDATIPROC) (GLuint dst, GLuint coord, GLenum swizzle); +typedef void (APIENTRYP PFNGLSAMPLEMAPATIPROC) (GLuint dst, GLuint interp, GLenum swizzle); +typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); +typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); +typedef void (APIENTRYP PFNGLSETFRAGMENTSHADERCONSTANTATIPROC) (GLuint dst, const GLfloat *value); +#endif + +#ifndef GL_ATI_pn_triangles +#define GL_ATI_pn_triangles 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPNTrianglesiATI (GLenum, GLint); +GLAPI void APIENTRY glPNTrianglesfATI (GLenum, GLfloat); #endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRY * PFNGLIGLOOINTERFACESGIXPROC) (GLenum pname, const GLvoid *params); +typedef void (APIENTRYP PFNGLPNTRIANGLESIATIPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLPNTRIANGLESFATIPROC) (GLenum pname, GLfloat param); +#endif + +#ifndef GL_ATI_vertex_array_object +#define GL_ATI_vertex_array_object 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLuint APIENTRY glNewObjectBufferATI (GLsizei, const GLvoid *, GLenum); +GLAPI GLboolean APIENTRY glIsObjectBufferATI (GLuint); +GLAPI void APIENTRY glUpdateObjectBufferATI (GLuint, GLuint, GLsizei, const GLvoid *, GLenum); +GLAPI void APIENTRY glGetObjectBufferfvATI (GLuint, GLenum, GLfloat *); +GLAPI void APIENTRY glGetObjectBufferivATI (GLuint, GLenum, GLint *); +GLAPI void APIENTRY glFreeObjectBufferATI (GLuint); +GLAPI void APIENTRY glArrayObjectATI (GLenum, GLint, GLenum, GLsizei, GLuint, GLuint); +GLAPI void APIENTRY glGetArrayObjectfvATI (GLenum, GLenum, GLfloat *); +GLAPI void APIENTRY glGetArrayObjectivATI (GLenum, GLenum, GLint *); +GLAPI void APIENTRY glVariantArrayObjectATI (GLuint, GLenum, GLsizei, GLuint, GLuint); +GLAPI void APIENTRY glGetVariantArrayObjectfvATI (GLuint, GLenum, GLfloat *); +GLAPI void APIENTRY glGetVariantArrayObjectivATI (GLuint, GLenum, GLint *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef GLuint (APIENTRYP PFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, const GLvoid *pointer, GLenum usage); +typedef GLboolean (APIENTRYP PFNGLISOBJECTBUFFERATIPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLUPDATEOBJECTBUFFERATIPROC) (GLuint buffer, GLuint offset, GLsizei size, const GLvoid *pointer, GLenum preserve); +typedef void (APIENTRYP PFNGLGETOBJECTBUFFERFVATIPROC) (GLuint buffer, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETOBJECTBUFFERIVATIPROC) (GLuint buffer, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLFREEOBJECTBUFFERATIPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLARRAYOBJECTATIPROC) (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); +typedef void (APIENTRYP PFNGLGETARRAYOBJECTFVATIPROC) (GLenum array, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETARRAYOBJECTIVATIPROC) (GLenum array, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLVARIANTARRAYOBJECTATIPROC) (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); +typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTFVATIPROC) (GLuint id, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTIVATIPROC) (GLuint id, GLenum pname, GLint *params); +#endif + +#ifndef GL_EXT_vertex_shader +#define GL_EXT_vertex_shader 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginVertexShaderEXT (void); +GLAPI void APIENTRY glEndVertexShaderEXT (void); +GLAPI void APIENTRY glBindVertexShaderEXT (GLuint); +GLAPI GLuint APIENTRY glGenVertexShadersEXT (GLuint); +GLAPI void APIENTRY glDeleteVertexShaderEXT (GLuint); +GLAPI void APIENTRY glShaderOp1EXT (GLenum, GLuint, GLuint); +GLAPI void APIENTRY glShaderOp2EXT (GLenum, GLuint, GLuint, GLuint); +GLAPI void APIENTRY glShaderOp3EXT (GLenum, GLuint, GLuint, GLuint, GLuint); +GLAPI void APIENTRY glSwizzleEXT (GLuint, GLuint, GLenum, GLenum, GLenum, GLenum); +GLAPI void APIENTRY glWriteMaskEXT (GLuint, GLuint, GLenum, GLenum, GLenum, GLenum); +GLAPI void APIENTRY glInsertComponentEXT (GLuint, GLuint, GLuint); +GLAPI void APIENTRY glExtractComponentEXT (GLuint, GLuint, GLuint); +GLAPI GLuint APIENTRY glGenSymbolsEXT (GLenum, GLenum, GLenum, GLuint); +GLAPI void APIENTRY glSetInvariantEXT (GLuint, GLenum, const GLvoid *); +GLAPI void APIENTRY glSetLocalConstantEXT (GLuint, GLenum, const GLvoid *); +GLAPI void APIENTRY glVariantbvEXT (GLuint, const GLbyte *); +GLAPI void APIENTRY glVariantsvEXT (GLuint, const GLshort *); +GLAPI void APIENTRY glVariantivEXT (GLuint, const GLint *); +GLAPI void APIENTRY glVariantfvEXT (GLuint, const GLfloat *); +GLAPI void APIENTRY glVariantdvEXT (GLuint, const GLdouble *); +GLAPI void APIENTRY glVariantubvEXT (GLuint, const GLubyte *); +GLAPI void APIENTRY glVariantusvEXT (GLuint, const GLushort *); +GLAPI void APIENTRY glVariantuivEXT (GLuint, const GLuint *); +GLAPI void APIENTRY glVariantPointerEXT (GLuint, GLenum, GLuint, const GLvoid *); +GLAPI void APIENTRY glEnableVariantClientStateEXT (GLuint); +GLAPI void APIENTRY glDisableVariantClientStateEXT (GLuint); +GLAPI GLuint APIENTRY glBindLightParameterEXT (GLenum, GLenum); +GLAPI GLuint APIENTRY glBindMaterialParameterEXT (GLenum, GLenum); +GLAPI GLuint APIENTRY glBindTexGenParameterEXT (GLenum, GLenum, GLenum); +GLAPI GLuint APIENTRY glBindTextureUnitParameterEXT (GLenum, GLenum); +GLAPI GLuint APIENTRY glBindParameterEXT (GLenum); +GLAPI GLboolean APIENTRY glIsVariantEnabledEXT (GLuint, GLenum); +GLAPI void APIENTRY glGetVariantBooleanvEXT (GLuint, GLenum, GLboolean *); +GLAPI void APIENTRY glGetVariantIntegervEXT (GLuint, GLenum, GLint *); +GLAPI void APIENTRY glGetVariantFloatvEXT (GLuint, GLenum, GLfloat *); +GLAPI void APIENTRY glGetVariantPointervEXT (GLuint, GLenum, GLvoid* *); +GLAPI void APIENTRY glGetInvariantBooleanvEXT (GLuint, GLenum, GLboolean *); +GLAPI void APIENTRY glGetInvariantIntegervEXT (GLuint, GLenum, GLint *); +GLAPI void APIENTRY glGetInvariantFloatvEXT (GLuint, GLenum, GLfloat *); +GLAPI void APIENTRY glGetLocalConstantBooleanvEXT (GLuint, GLenum, GLboolean *); +GLAPI void APIENTRY glGetLocalConstantIntegervEXT (GLuint, GLenum, GLint *); +GLAPI void APIENTRY glGetLocalConstantFloatvEXT (GLuint, GLenum, GLfloat *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLBEGINVERTEXSHADEREXTPROC) (void); +typedef void (APIENTRYP PFNGLENDVERTEXSHADEREXTPROC) (void); +typedef void (APIENTRYP PFNGLBINDVERTEXSHADEREXTPROC) (GLuint id); +typedef GLuint (APIENTRYP PFNGLGENVERTEXSHADERSEXTPROC) (GLuint range); +typedef void (APIENTRYP PFNGLDELETEVERTEXSHADEREXTPROC) (GLuint id); +typedef void (APIENTRYP PFNGLSHADEROP1EXTPROC) (GLenum op, GLuint res, GLuint arg1); +typedef void (APIENTRYP PFNGLSHADEROP2EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2); +typedef void (APIENTRYP PFNGLSHADEROP3EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); +typedef void (APIENTRYP PFNGLSWIZZLEEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); +typedef void (APIENTRYP PFNGLWRITEMASKEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); +typedef void (APIENTRYP PFNGLINSERTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); +typedef void (APIENTRYP PFNGLEXTRACTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); +typedef GLuint (APIENTRYP PFNGLGENSYMBOLSEXTPROC) (GLenum datatype, GLenum storagetype, GLenum range, GLuint components); +typedef void (APIENTRYP PFNGLSETINVARIANTEXTPROC) (GLuint id, GLenum type, const GLvoid *addr); +typedef void (APIENTRYP PFNGLSETLOCALCONSTANTEXTPROC) (GLuint id, GLenum type, const GLvoid *addr); +typedef void (APIENTRYP PFNGLVARIANTBVEXTPROC) (GLuint id, const GLbyte *addr); +typedef void (APIENTRYP PFNGLVARIANTSVEXTPROC) (GLuint id, const GLshort *addr); +typedef void (APIENTRYP PFNGLVARIANTIVEXTPROC) (GLuint id, const GLint *addr); +typedef void (APIENTRYP PFNGLVARIANTFVEXTPROC) (GLuint id, const GLfloat *addr); +typedef void (APIENTRYP PFNGLVARIANTDVEXTPROC) (GLuint id, const GLdouble *addr); +typedef void (APIENTRYP PFNGLVARIANTUBVEXTPROC) (GLuint id, const GLubyte *addr); +typedef void (APIENTRYP PFNGLVARIANTUSVEXTPROC) (GLuint id, const GLushort *addr); +typedef void (APIENTRYP PFNGLVARIANTUIVEXTPROC) (GLuint id, const GLuint *addr); +typedef void (APIENTRYP PFNGLVARIANTPOINTEREXTPROC) (GLuint id, GLenum type, GLuint stride, const GLvoid *addr); +typedef void (APIENTRYP PFNGLENABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); +typedef void (APIENTRYP PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); +typedef GLuint (APIENTRYP PFNGLBINDLIGHTPARAMETEREXTPROC) (GLenum light, GLenum value); +typedef GLuint (APIENTRYP PFNGLBINDMATERIALPARAMETEREXTPROC) (GLenum face, GLenum value); +typedef GLuint (APIENTRYP PFNGLBINDTEXGENPARAMETEREXTPROC) (GLenum unit, GLenum coord, GLenum value); +typedef GLuint (APIENTRYP PFNGLBINDTEXTUREUNITPARAMETEREXTPROC) (GLenum unit, GLenum value); +typedef GLuint (APIENTRYP PFNGLBINDPARAMETEREXTPROC) (GLenum value); +typedef GLboolean (APIENTRYP PFNGLISVARIANTENABLEDEXTPROC) (GLuint id, GLenum cap); +typedef void (APIENTRYP PFNGLGETVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); +typedef void (APIENTRYP PFNGLGETVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); +typedef void (APIENTRYP PFNGLGETVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); +typedef void (APIENTRYP PFNGLGETVARIANTPOINTERVEXTPROC) (GLuint id, GLenum value, GLvoid* *data); +typedef void (APIENTRYP PFNGLGETINVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); +typedef void (APIENTRYP PFNGLGETINVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); +typedef void (APIENTRYP PFNGLGETINVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); +typedef void (APIENTRYP PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); +typedef void (APIENTRYP PFNGLGETLOCALCONSTANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); +typedef void (APIENTRYP PFNGLGETLOCALCONSTANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); +#endif + +#ifndef GL_ATI_vertex_streams +#define GL_ATI_vertex_streams 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexStream1sATI (GLenum, GLshort); +GLAPI void APIENTRY glVertexStream1svATI (GLenum, const GLshort *); +GLAPI void APIENTRY glVertexStream1iATI (GLenum, GLint); +GLAPI void APIENTRY glVertexStream1ivATI (GLenum, const GLint *); +GLAPI void APIENTRY glVertexStream1fATI (GLenum, GLfloat); +GLAPI void APIENTRY glVertexStream1fvATI (GLenum, const GLfloat *); +GLAPI void APIENTRY glVertexStream1dATI (GLenum, GLdouble); +GLAPI void APIENTRY glVertexStream1dvATI (GLenum, const GLdouble *); +GLAPI void APIENTRY glVertexStream2sATI (GLenum, GLshort, GLshort); +GLAPI void APIENTRY glVertexStream2svATI (GLenum, const GLshort *); +GLAPI void APIENTRY glVertexStream2iATI (GLenum, GLint, GLint); +GLAPI void APIENTRY glVertexStream2ivATI (GLenum, const GLint *); +GLAPI void APIENTRY glVertexStream2fATI (GLenum, GLfloat, GLfloat); +GLAPI void APIENTRY glVertexStream2fvATI (GLenum, const GLfloat *); +GLAPI void APIENTRY glVertexStream2dATI (GLenum, GLdouble, GLdouble); +GLAPI void APIENTRY glVertexStream2dvATI (GLenum, const GLdouble *); +GLAPI void APIENTRY glVertexStream3sATI (GLenum, GLshort, GLshort, GLshort); +GLAPI void APIENTRY glVertexStream3svATI (GLenum, const GLshort *); +GLAPI void APIENTRY glVertexStream3iATI (GLenum, GLint, GLint, GLint); +GLAPI void APIENTRY glVertexStream3ivATI (GLenum, const GLint *); +GLAPI void APIENTRY glVertexStream3fATI (GLenum, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glVertexStream3fvATI (GLenum, const GLfloat *); +GLAPI void APIENTRY glVertexStream3dATI (GLenum, GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glVertexStream3dvATI (GLenum, const GLdouble *); +GLAPI void APIENTRY glVertexStream4sATI (GLenum, GLshort, GLshort, GLshort, GLshort); +GLAPI void APIENTRY glVertexStream4svATI (GLenum, const GLshort *); +GLAPI void APIENTRY glVertexStream4iATI (GLenum, GLint, GLint, GLint, GLint); +GLAPI void APIENTRY glVertexStream4ivATI (GLenum, const GLint *); +GLAPI void APIENTRY glVertexStream4fATI (GLenum, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glVertexStream4fvATI (GLenum, const GLfloat *); +GLAPI void APIENTRY glVertexStream4dATI (GLenum, GLdouble, GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glVertexStream4dvATI (GLenum, const GLdouble *); +GLAPI void APIENTRY glNormalStream3bATI (GLenum, GLbyte, GLbyte, GLbyte); +GLAPI void APIENTRY glNormalStream3bvATI (GLenum, const GLbyte *); +GLAPI void APIENTRY glNormalStream3sATI (GLenum, GLshort, GLshort, GLshort); +GLAPI void APIENTRY glNormalStream3svATI (GLenum, const GLshort *); +GLAPI void APIENTRY glNormalStream3iATI (GLenum, GLint, GLint, GLint); +GLAPI void APIENTRY glNormalStream3ivATI (GLenum, const GLint *); +GLAPI void APIENTRY glNormalStream3fATI (GLenum, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glNormalStream3fvATI (GLenum, const GLfloat *); +GLAPI void APIENTRY glNormalStream3dATI (GLenum, GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glNormalStream3dvATI (GLenum, const GLdouble *); +GLAPI void APIENTRY glClientActiveVertexStreamATI (GLenum); +GLAPI void APIENTRY glVertexBlendEnviATI (GLenum, GLint); +GLAPI void APIENTRY glVertexBlendEnvfATI (GLenum, GLfloat); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLVERTEXSTREAM1SATIPROC) (GLenum stream, GLshort x); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1SVATIPROC) (GLenum stream, const GLshort *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1IATIPROC) (GLenum stream, GLint x); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1IVATIPROC) (GLenum stream, const GLint *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1FATIPROC) (GLenum stream, GLfloat x); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1FVATIPROC) (GLenum stream, const GLfloat *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1DATIPROC) (GLenum stream, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1DVATIPROC) (GLenum stream, const GLdouble *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2SATIPROC) (GLenum stream, GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2SVATIPROC) (GLenum stream, const GLshort *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2IATIPROC) (GLenum stream, GLint x, GLint y); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2IVATIPROC) (GLenum stream, const GLint *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2FATIPROC) (GLenum stream, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2FVATIPROC) (GLenum stream, const GLfloat *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2DATIPROC) (GLenum stream, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2DVATIPROC) (GLenum stream, const GLdouble *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4SVATIPROC) (GLenum stream, const GLshort *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4IATIPROC) (GLenum stream, GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4IVATIPROC) (GLenum stream, const GLint *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4FVATIPROC) (GLenum stream, const GLfloat *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4DVATIPROC) (GLenum stream, const GLdouble *coords); +typedef void (APIENTRYP PFNGLNORMALSTREAM3BATIPROC) (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); +typedef void (APIENTRYP PFNGLNORMALSTREAM3BVATIPROC) (GLenum stream, const GLbyte *coords); +typedef void (APIENTRYP PFNGLNORMALSTREAM3SATIPROC) (GLenum stream, GLshort nx, GLshort ny, GLshort nz); +typedef void (APIENTRYP PFNGLNORMALSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); +typedef void (APIENTRYP PFNGLNORMALSTREAM3IATIPROC) (GLenum stream, GLint nx, GLint ny, GLint nz); +typedef void (APIENTRYP PFNGLNORMALSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); +typedef void (APIENTRYP PFNGLNORMALSTREAM3FATIPROC) (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); +typedef void (APIENTRYP PFNGLNORMALSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); +typedef void (APIENTRYP PFNGLNORMALSTREAM3DATIPROC) (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); +typedef void (APIENTRYP PFNGLNORMALSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); +typedef void (APIENTRYP PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC) (GLenum stream); +typedef void (APIENTRYP PFNGLVERTEXBLENDENVIATIPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLVERTEXBLENDENVFATIPROC) (GLenum pname, GLfloat param); +#endif + +#ifndef GL_ATI_element_array +#define GL_ATI_element_array 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glElementPointerATI (GLenum, const GLvoid *); +GLAPI void APIENTRY glDrawElementArrayATI (GLenum, GLsizei); +GLAPI void APIENTRY glDrawRangeElementArrayATI (GLenum, GLuint, GLuint, GLsizei); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLELEMENTPOINTERATIPROC) (GLenum type, const GLvoid *pointer); +typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYATIPROC) (GLenum mode, GLsizei count); +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYATIPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count); +#endif + +#ifndef GL_SUN_mesh_array +#define GL_SUN_mesh_array 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawMeshArraysSUN (GLenum, GLint, GLsizei, GLsizei); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLDRAWMESHARRAYSSUNPROC) (GLenum mode, GLint first, GLsizei count, GLsizei width); +#endif + +#ifndef GL_SUN_slice_accum +#define GL_SUN_slice_accum 1 +#endif + +#ifndef GL_NV_multisample_filter_hint +#define GL_NV_multisample_filter_hint 1 +#endif + +#ifndef GL_NV_depth_clamp +#define GL_NV_depth_clamp 1 +#endif + +#ifndef GL_NV_occlusion_query +#define GL_NV_occlusion_query 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenOcclusionQueriesNV (GLsizei, GLuint *); +GLAPI void APIENTRY glDeleteOcclusionQueriesNV (GLsizei, const GLuint *); +GLAPI GLboolean APIENTRY glIsOcclusionQueryNV (GLuint); +GLAPI void APIENTRY glBeginOcclusionQueryNV (GLuint); +GLAPI void APIENTRY glEndOcclusionQueryNV (void); +GLAPI void APIENTRY glGetOcclusionQueryivNV (GLuint, GLenum, GLint *); +GLAPI void APIENTRY glGetOcclusionQueryuivNV (GLuint, GLenum, GLuint *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLGENOCCLUSIONQUERIESNVPROC) (GLsizei n, GLuint *ids); +typedef void (APIENTRYP PFNGLDELETEOCCLUSIONQUERIESNVPROC) (GLsizei n, const GLuint *ids); +typedef GLboolean (APIENTRYP PFNGLISOCCLUSIONQUERYNVPROC) (GLuint id); +typedef void (APIENTRYP PFNGLBEGINOCCLUSIONQUERYNVPROC) (GLuint id); +typedef void (APIENTRYP PFNGLENDOCCLUSIONQUERYNVPROC) (void); +typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYIVNVPROC) (GLuint id, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYUIVNVPROC) (GLuint id, GLenum pname, GLuint *params); +#endif + +#ifndef GL_NV_point_sprite +#define GL_NV_point_sprite 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPointParameteriNV (GLenum, GLint); +GLAPI void APIENTRY glPointParameterivNV (GLenum, const GLint *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLPOINTPARAMETERINVPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERIVNVPROC) (GLenum pname, const GLint *params); +#endif + +#ifndef GL_NV_texture_shader3 +#define GL_NV_texture_shader3 1 +#endif + +#ifndef GL_NV_vertex_program1_1 +#define GL_NV_vertex_program1_1 1 +#endif + +#ifndef GL_EXT_shadow_funcs +#define GL_EXT_shadow_funcs 1 +#endif + +#ifndef GL_EXT_stencil_two_side +#define GL_EXT_stencil_two_side 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glActiveStencilFaceEXT (GLenum); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLACTIVESTENCILFACEEXTPROC) (GLenum face); +#endif + +#ifndef GL_ATI_text_fragment_shader +#define GL_ATI_text_fragment_shader 1 +#endif + +#ifndef GL_APPLE_client_storage +#define GL_APPLE_client_storage 1 +#endif + +#ifndef GL_APPLE_element_array +#define GL_APPLE_element_array 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glElementPointerAPPLE (GLenum, const GLvoid *); +GLAPI void APIENTRY glDrawElementArrayAPPLE (GLenum, GLint, GLsizei); +GLAPI void APIENTRY glDrawRangeElementArrayAPPLE (GLenum, GLuint, GLuint, GLint, GLsizei); +GLAPI void APIENTRY glMultiDrawElementArrayAPPLE (GLenum, const GLint *, const GLsizei *, GLsizei); +GLAPI void APIENTRY glMultiDrawRangeElementArrayAPPLE (GLenum, GLuint, GLuint, const GLint *, const GLsizei *, GLsizei); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLELEMENTPOINTERAPPLEPROC) (GLenum type, const GLvoid *pointer); +typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, GLint first, GLsizei count); +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); +typedef void (APIENTRYP PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount); +#endif + +#ifndef GL_APPLE_fence +#define GL_APPLE_fence 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenFencesAPPLE (GLsizei, GLuint *); +GLAPI void APIENTRY glDeleteFencesAPPLE (GLsizei, const GLuint *); +GLAPI void APIENTRY glSetFenceAPPLE (GLuint); +GLAPI GLboolean APIENTRY glIsFenceAPPLE (GLuint); +GLAPI GLboolean APIENTRY glTestFenceAPPLE (GLuint); +GLAPI void APIENTRY glFinishFenceAPPLE (GLuint); +GLAPI GLboolean APIENTRY glTestObjectAPPLE (GLenum, GLuint); +GLAPI void APIENTRY glFinishObjectAPPLE (GLenum, GLint); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLGENFENCESAPPLEPROC) (GLsizei n, GLuint *fences); +typedef void (APIENTRYP PFNGLDELETEFENCESAPPLEPROC) (GLsizei n, const GLuint *fences); +typedef void (APIENTRYP PFNGLSETFENCEAPPLEPROC) (GLuint fence); +typedef GLboolean (APIENTRYP PFNGLISFENCEAPPLEPROC) (GLuint fence); +typedef GLboolean (APIENTRYP PFNGLTESTFENCEAPPLEPROC) (GLuint fence); +typedef void (APIENTRYP PFNGLFINISHFENCEAPPLEPROC) (GLuint fence); +typedef GLboolean (APIENTRYP PFNGLTESTOBJECTAPPLEPROC) (GLenum object, GLuint name); +typedef void (APIENTRYP PFNGLFINISHOBJECTAPPLEPROC) (GLenum object, GLint name); +#endif + +#ifndef GL_APPLE_vertex_array_object +#define GL_APPLE_vertex_array_object 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindVertexArrayAPPLE (GLuint); +GLAPI void APIENTRY glDeleteVertexArraysAPPLE (GLsizei, const GLuint *); +GLAPI void APIENTRY glGenVertexArraysAPPLE (GLsizei, const GLuint *); +GLAPI GLboolean APIENTRY glIsVertexArrayAPPLE (GLuint); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLBINDVERTEXARRAYAPPLEPROC) (GLuint array); +typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint *arrays); +typedef void (APIENTRYP PFNGLGENVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint *arrays); +typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYAPPLEPROC) (GLuint array); +#endif + +#ifndef GL_APPLE_vertex_array_range +#define GL_APPLE_vertex_array_range 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexArrayRangeAPPLE (GLsizei, GLvoid *); +GLAPI void APIENTRY glFlushVertexArrayRangeAPPLE (GLsizei, GLvoid *); +GLAPI void APIENTRY glVertexArrayParameteriAPPLE (GLenum, GLint); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, GLvoid *pointer); +typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, GLvoid *pointer); +typedef void (APIENTRYP PFNGLVERTEXARRAYPARAMETERIAPPLEPROC) (GLenum pname, GLint param); +#endif + +#ifndef GL_APPLE_ycbcr_422 +#define GL_APPLE_ycbcr_422 1 +#endif + +#ifndef GL_S3_s3tc +#define GL_S3_s3tc 1 +#endif + +#ifndef GL_ATI_draw_buffers +#define GL_ATI_draw_buffers 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawBuffersATI (GLsizei, const GLenum *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLDRAWBUFFERSATIPROC) (GLsizei n, const GLenum *bufs); +#endif + +#ifndef GL_ATI_pixel_format_float +#define GL_ATI_pixel_format_float 1 +/* This is really a WGL extension, but defines some associated GL enums. + * ATI does not export "GL_ATI_pixel_format_float" in the GL_EXTENSIONS string. + */ +#endif + +#ifndef GL_ATI_texture_env_combine3 +#define GL_ATI_texture_env_combine3 1 +#endif + +#ifndef GL_ATI_texture_float +#define GL_ATI_texture_float 1 +#endif + +#ifndef GL_NV_float_buffer +#define GL_NV_float_buffer 1 +#endif + +#ifndef GL_NV_fragment_program +#define GL_NV_fragment_program 1 +/* Some NV_fragment_program entry points are shared with ARB_vertex_program. */ +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramNamedParameter4fNV (GLuint, GLsizei, const GLubyte *, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glProgramNamedParameter4dNV (GLuint, GLsizei, const GLubyte *, GLdouble, GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glProgramNamedParameter4fvNV (GLuint, GLsizei, const GLubyte *, const GLfloat *); +GLAPI void APIENTRY glProgramNamedParameter4dvNV (GLuint, GLsizei, const GLubyte *, const GLdouble *); +GLAPI void APIENTRY glGetProgramNamedParameterfvNV (GLuint, GLsizei, const GLubyte *, GLfloat *); +GLAPI void APIENTRY glGetProgramNamedParameterdvNV (GLuint, GLsizei, const GLubyte *, GLdouble *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v); +typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v); +typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params); +typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params); +#endif + +#ifndef GL_NV_half_float +#define GL_NV_half_float 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertex2hNV (GLhalfNV, GLhalfNV); +GLAPI void APIENTRY glVertex2hvNV (const GLhalfNV *); +GLAPI void APIENTRY glVertex3hNV (GLhalfNV, GLhalfNV, GLhalfNV); +GLAPI void APIENTRY glVertex3hvNV (const GLhalfNV *); +GLAPI void APIENTRY glVertex4hNV (GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV); +GLAPI void APIENTRY glVertex4hvNV (const GLhalfNV *); +GLAPI void APIENTRY glNormal3hNV (GLhalfNV, GLhalfNV, GLhalfNV); +GLAPI void APIENTRY glNormal3hvNV (const GLhalfNV *); +GLAPI void APIENTRY glColor3hNV (GLhalfNV, GLhalfNV, GLhalfNV); +GLAPI void APIENTRY glColor3hvNV (const GLhalfNV *); +GLAPI void APIENTRY glColor4hNV (GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV); +GLAPI void APIENTRY glColor4hvNV (const GLhalfNV *); +GLAPI void APIENTRY glTexCoord1hNV (GLhalfNV); +GLAPI void APIENTRY glTexCoord1hvNV (const GLhalfNV *); +GLAPI void APIENTRY glTexCoord2hNV (GLhalfNV, GLhalfNV); +GLAPI void APIENTRY glTexCoord2hvNV (const GLhalfNV *); +GLAPI void APIENTRY glTexCoord3hNV (GLhalfNV, GLhalfNV, GLhalfNV); +GLAPI void APIENTRY glTexCoord3hvNV (const GLhalfNV *); +GLAPI void APIENTRY glTexCoord4hNV (GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV); +GLAPI void APIENTRY glTexCoord4hvNV (const GLhalfNV *); +GLAPI void APIENTRY glMultiTexCoord1hNV (GLenum, GLhalfNV); +GLAPI void APIENTRY glMultiTexCoord1hvNV (GLenum, const GLhalfNV *); +GLAPI void APIENTRY glMultiTexCoord2hNV (GLenum, GLhalfNV, GLhalfNV); +GLAPI void APIENTRY glMultiTexCoord2hvNV (GLenum, const GLhalfNV *); +GLAPI void APIENTRY glMultiTexCoord3hNV (GLenum, GLhalfNV, GLhalfNV, GLhalfNV); +GLAPI void APIENTRY glMultiTexCoord3hvNV (GLenum, const GLhalfNV *); +GLAPI void APIENTRY glMultiTexCoord4hNV (GLenum, GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV); +GLAPI void APIENTRY glMultiTexCoord4hvNV (GLenum, const GLhalfNV *); +GLAPI void APIENTRY glFogCoordhNV (GLhalfNV); +GLAPI void APIENTRY glFogCoordhvNV (const GLhalfNV *); +GLAPI void APIENTRY glSecondaryColor3hNV (GLhalfNV, GLhalfNV, GLhalfNV); +GLAPI void APIENTRY glSecondaryColor3hvNV (const GLhalfNV *); +GLAPI void APIENTRY glVertexWeighthNV (GLhalfNV); +GLAPI void APIENTRY glVertexWeighthvNV (const GLhalfNV *); +GLAPI void APIENTRY glVertexAttrib1hNV (GLuint, GLhalfNV); +GLAPI void APIENTRY glVertexAttrib1hvNV (GLuint, const GLhalfNV *); +GLAPI void APIENTRY glVertexAttrib2hNV (GLuint, GLhalfNV, GLhalfNV); +GLAPI void APIENTRY glVertexAttrib2hvNV (GLuint, const GLhalfNV *); +GLAPI void APIENTRY glVertexAttrib3hNV (GLuint, GLhalfNV, GLhalfNV, GLhalfNV); +GLAPI void APIENTRY glVertexAttrib3hvNV (GLuint, const GLhalfNV *); +GLAPI void APIENTRY glVertexAttrib4hNV (GLuint, GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV); +GLAPI void APIENTRY glVertexAttrib4hvNV (GLuint, const GLhalfNV *); +GLAPI void APIENTRY glVertexAttribs1hvNV (GLuint, GLsizei, const GLhalfNV *); +GLAPI void APIENTRY glVertexAttribs2hvNV (GLuint, GLsizei, const GLhalfNV *); +GLAPI void APIENTRY glVertexAttribs3hvNV (GLuint, GLsizei, const GLhalfNV *); +GLAPI void APIENTRY glVertexAttribs4hvNV (GLuint, GLsizei, const GLhalfNV *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLVERTEX2HNVPROC) (GLhalfNV x, GLhalfNV y); +typedef void (APIENTRYP PFNGLVERTEX2HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEX3HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z); +typedef void (APIENTRYP PFNGLVERTEX3HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEX4HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); +typedef void (APIENTRYP PFNGLVERTEX4HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLNORMAL3HNVPROC) (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); +typedef void (APIENTRYP PFNGLNORMAL3HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); +typedef void (APIENTRYP PFNGLCOLOR3HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLCOLOR4HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); +typedef void (APIENTRYP PFNGLCOLOR4HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLTEXCOORD1HNVPROC) (GLhalfNV s); +typedef void (APIENTRYP PFNGLTEXCOORD1HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLTEXCOORD2HNVPROC) (GLhalfNV s, GLhalfNV t); +typedef void (APIENTRYP PFNGLTEXCOORD2HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLTEXCOORD3HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r); +typedef void (APIENTRYP PFNGLTEXCOORD3HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLTEXCOORD4HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); +typedef void (APIENTRYP PFNGLTEXCOORD4HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1HNVPROC) (GLenum target, GLhalfNV s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1HVNVPROC) (GLenum target, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2HVNVPROC) (GLenum target, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3HVNVPROC) (GLenum target, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4HVNVPROC) (GLenum target, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLFOGCOORDHNVPROC) (GLhalfNV fog); +typedef void (APIENTRYP PFNGLFOGCOORDHVNVPROC) (const GLhalfNV *fog); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXWEIGHTHNVPROC) (GLhalfNV weight); +typedef void (APIENTRYP PFNGLVERTEXWEIGHTHVNVPROC) (const GLhalfNV *weight); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1HNVPROC) (GLuint index, GLhalfNV x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1HVNVPROC) (GLuint index, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2HVNVPROC) (GLuint index, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3HVNVPROC) (GLuint index, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4HVNVPROC) (GLuint index, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS1HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS2HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS3HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS4HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); +#endif + +#ifndef GL_NV_pixel_data_range +#define GL_NV_pixel_data_range 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPixelDataRangeNV (GLenum, GLsizei, GLvoid *); +GLAPI void APIENTRY glFlushPixelDataRangeNV (GLenum); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLPIXELDATARANGENVPROC) (GLenum target, GLsizei length, GLvoid *pointer); +typedef void (APIENTRYP PFNGLFLUSHPIXELDATARANGENVPROC) (GLenum target); +#endif + +#ifndef GL_NV_primitive_restart +#define GL_NV_primitive_restart 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPrimitiveRestartNV (void); +GLAPI void APIENTRY glPrimitiveRestartIndexNV (GLuint); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLPRIMITIVERESTARTNVPROC) (void); +typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXNVPROC) (GLuint index); +#endif + +#ifndef GL_NV_texture_expand_normal +#define GL_NV_texture_expand_normal 1 +#endif + +#ifndef GL_NV_vertex_program2 +#define GL_NV_vertex_program2 1 +#endif + +#ifndef GL_ATI_map_object_buffer +#define GL_ATI_map_object_buffer 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLvoid* APIENTRY glMapObjectBufferATI (GLuint); +GLAPI void APIENTRY glUnmapObjectBufferATI (GLuint); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef GLvoid* (APIENTRYP PFNGLMAPOBJECTBUFFERATIPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLUNMAPOBJECTBUFFERATIPROC) (GLuint buffer); +#endif + +#ifndef GL_ATI_separate_stencil +#define GL_ATI_separate_stencil 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glStencilOpSeparateATI (GLenum, GLenum, GLenum, GLenum); +GLAPI void APIENTRY glStencilFuncSeparateATI (GLenum, GLenum, GLint, GLuint); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEATIPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEATIPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); +#endif + +#ifndef GL_ATI_vertex_attrib_array_object +#define GL_ATI_vertex_attrib_array_object 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribArrayObjectATI (GLuint, GLint, GLenum, GLboolean, GLsizei, GLuint, GLuint); +GLAPI void APIENTRY glGetVertexAttribArrayObjectfvATI (GLuint, GLenum, GLfloat *); +GLAPI void APIENTRY glGetVertexAttribArrayObjectivATI (GLuint, GLenum, GLint *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLVERTEXATTRIBARRAYOBJECTATIPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC) (GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC) (GLuint index, GLenum pname, GLint *params); +#endif + +#ifndef GL_EXT_depth_bounds_test +#define GL_EXT_depth_bounds_test 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDepthBoundsEXT (GLclampd, GLclampd); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLDEPTHBOUNDSEXTPROC) (GLclampd zmin, GLclampd zmax); +#endif + +#ifndef GL_EXT_texture_mirror_clamp +#define GL_EXT_texture_mirror_clamp 1 +#endif + +#ifndef GL_EXT_blend_equation_separate +#define GL_EXT_blend_equation_separate 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendEquationSeparateEXT (GLenum, GLenum); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEEXTPROC) (GLenum modeRGB, GLenum modeAlpha); +#endif + +#ifndef GL_MESA_pack_invert +#define GL_MESA_pack_invert 1 +#endif + +#ifndef GL_MESA_ycbcr_texture +#define GL_MESA_ycbcr_texture 1 +#endif + +#ifndef GL_EXT_pixel_buffer_object +#define GL_EXT_pixel_buffer_object 1 +#endif + +#ifndef GL_NV_fragment_program_option +#define GL_NV_fragment_program_option 1 +#endif + +#ifndef GL_NV_fragment_program2 +#define GL_NV_fragment_program2 1 +#endif + +#ifndef GL_NV_vertex_program2_option +#define GL_NV_vertex_program2_option 1 +#endif + +#ifndef GL_NV_vertex_program3 +#define GL_NV_vertex_program3 1 #endif diff --git a/src/native/ogl/wglext.h b/src/native/ogl/wglext.h index d1ab334..9dcee14 100644 --- a/src/native/ogl/wglext.h +++ b/src/native/ogl/wglext.h @@ -52,9 +52,9 @@ extern "C" { /*************************************************************/ /* Header file version number */ -/* wglext.h last updated 2004/07/26 */ +/* wglext.h last updated 2005/01/07 */ /* Current version at http://oss.sgi.com/projects/ogl-sample/registry/ */ -#define WGL_WGLEXT_VERSION 5 +#define WGL_WGLEXT_VERSION 6 #ifndef WGL_ARB_buffer_region #define WGL_FRONT_COLOR_BUFFER_BIT_ARB 0x00000001 @@ -175,6 +175,10 @@ extern "C" { #define WGL_AUX9_ARB 0x2090 #endif +#ifndef WGL_ARB_pixel_format_float +#define WGL_TYPE_RGBA_FLOAT_ARB 0x21A0 +#endif + #ifndef WGL_EXT_make_current_read #define ERROR_INVALID_PIXEL_TYPE_EXT 0x2043 #endif @@ -401,6 +405,10 @@ typedef BOOL (WINAPI * PFNWGLRELEASETEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int typedef BOOL (WINAPI * PFNWGLSETPBUFFERATTRIBARBPROC) (HPBUFFERARB hPbuffer, const int *piAttribList); #endif +#ifndef WGL_ARB_pixel_format_float +#define WGL_ARB_pixel_format_float 1 +#endif + #ifndef WGL_EXT_display_color_table #define WGL_EXT_display_color_table 1 #ifdef WGL_WGLEXT_PROTOTYPES @@ -611,6 +619,10 @@ typedef BOOL (WINAPI * PFNWGLQUERYFRAMETRACKINGI3DPROC) (DWORD *pFrameCount, DWO #define WGL_ATI_pixel_format_float 1 #endif +#ifndef WGL_NV_float_buffer +#define WGL_NV_float_buffer 1 +#endif + #ifdef __cplusplus } diff --git a/src/native/share/build-linux-amd64.xml b/src/native/share/build-linux-amd64.xml index d3ff24b..5f49d61 100644 --- a/src/native/share/build-linux-amd64.xml +++ b/src/native/share/build-linux-amd64.xml @@ -27,7 +27,7 @@ <!-- Compile the c source files--> <exec dir="${build}/${platform}/${bldType}/native/share/objs" executable="gcc"> - <arg line="-m64 -I/include -I${java.home}/../include -I${java.home}/../include/linux -I/usr/openwin/include -I${javahUtilsTarget} -${bldFlag} -DLINUX -c ${core_utils_src}/native/share/J3DTimer.c"/> + <arg line="-m64 -I/include -I${java.home}/../include -I${java.home}/../include/linux -I/usr/openwin/include -I${javahUtilsTarget} ${bldFlag} -DLINUX -c ${core_utils_src}/native/share/J3DTimer.c"/> </exec> <!-- Create the library file--> diff --git a/src/native/share/build-linux-i586.xml b/src/native/share/build-linux-i586.xml index 61d4434..29ee376 100644 --- a/src/native/share/build-linux-i586.xml +++ b/src/native/share/build-linux-i586.xml @@ -27,7 +27,7 @@ <!-- Compile the c source files--> <exec dir="${build}/${platform}/${bldType}/native/share/objs" executable="gcc"> - <arg line="-m32 -I/include -I${java.home}/../include -I${java.home}/../include/linux -I/usr/openwin/include -I${javahUtilsTarget} -${bldFlag} -DLINUX -c ${core_utils_src}/native/share/J3DTimer.c"/> + <arg line="-m32 -I/include -I${java.home}/../include -I${java.home}/../include/linux -I/usr/openwin/include -I${javahUtilsTarget} ${bldFlag} -DLINUX -c ${core_utils_src}/native/share/J3DTimer.c"/> </exec> <!-- Create the library file--> diff --git a/src/native/share/build-linux-ia64.xml b/src/native/share/build-linux-ia64.xml index 8188048..2457b35 100644 --- a/src/native/share/build-linux-ia64.xml +++ b/src/native/share/build-linux-ia64.xml @@ -27,7 +27,7 @@ <!-- Compile the c source files; based on build-linux-amd64.xml--> <exec dir="${build}/${platform}/${bldType}/native/share/objs" executable="gcc"> - <arg line=" -I/include -I${java.home}/../include -I${java.home}/../include/linux -I/usr/openwin/include -I${javahUtilsTarget} -${bldFlag} -DLINUX -c ${core_utils_src}/native/share/J3DTimer.c"/> + <arg line=" -I/include -I${java.home}/../include -I${java.home}/../include/linux -I/usr/openwin/include -I${javahUtilsTarget} ${bldFlag} -DLINUX -c ${core_utils_src}/native/share/J3DTimer.c"/> </exec> <!-- Create the library file; based on build-linux-amd64.xml--> diff --git a/src/native/share/build-linux-ppc.xml b/src/native/share/build-linux-ppc.xml new file mode 100644 index 0000000..50154d6 --- /dev/null +++ b/src/native/share/build-linux-ppc.xml @@ -0,0 +1,54 @@ +<?xml version="1.0"?> + +<!-- +/* + * $RCSfile$ + * + * Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved. + * + * Use is subject to license terms. + * + * $Revision$ + * $Date$ + * $State$ + */ + --> + +<!-- Ant file for building native utilities files for Linux --> +<project name="Java 3D" default="compile"> + + <target name="compile"> + + <echo message="Executing 64 bit native utilities build [${bldType}]"/> + + <!-- Create the build directories linux --> + <mkdir dir="${build}/${platform}/${bldType}/native/share/objs"/> + <mkdir dir="${build}/${platform}/${bldType}/bin"/> + + <!-- Compile the c source files--> + <exec dir="${build}/${platform}/${bldType}/native/share/objs" executable="gcc"> + <arg line="-I/include -I${java.home}/../include -I${java.home}/../include/linux -I${javahUtilsTarget} ${bldFlag} -DLINUX -c ${core_utils_src}/native/share/J3DTimer.c"/> + </exec> + + <!-- Create the library file--> + <exec dir="${build}/${platform}/${bldType}/native/share/objs" executable="ld"> + <arg line="J3DTimer.o -G -z lazyload -lc -o libj3dutils.so"/> + </exec> + + <!-- Copy the copyright library file --> + <copy file="${build}/${platform}/${bldType}/native/share/objs/libj3dutils.so" + todir="${build}/${platform}/${bldType}/bin"/> + + </target> + + <target name="dist"> + <!-- Create the distribution directory --> + <mkdir dir="${dist}/${platform}/bin"/> + + <!-- Copy the library files --> + <copy file="${build}/${platform}/opt/bin/libj3dutils.so" + todir="${dist}/${platform}/bin"/> + </target> + + +</project> diff --git a/src/native/share/build-solaris-sparc-forte.xml b/src/native/share/build-solaris-sparc-forte.xml index 3ffe83f..43b2ee1 100644 --- a/src/native/share/build-solaris-sparc-forte.xml +++ b/src/native/share/build-solaris-sparc-forte.xml @@ -27,7 +27,7 @@ <!-- Compile the c source files--> <exec dir="${build}/${platform}/${bldType}/native/share/objs" executable="cc"> - <arg line="-v -xCC -xchip=ultra -xarch=v8a -xcode=pic32 -I/include -I${java.home}/../include -I${java.home}/../include/solaris -I/usr/openwin/include -I${javahUtilsTarget} -${bldFlag} -DSOLARIS -c ${core_utils_src}/native/share/J3DTimer.c"/> + <arg line="-v -xCC -xchip=ultra -xarch=v8a -xcode=pic32 -I/include -I${java.home}/../include -I${java.home}/../include/solaris -I/usr/openwin/include -I${javahUtilsTarget} ${bldFlag} -DSOLARIS -c ${core_utils_src}/native/share/J3DTimer.c"/> </exec> <!-- Create the library file--> @@ -48,7 +48,7 @@ <!-- Compile the c source files--> <exec dir="${build}/${platform}/${bldType}/native/share/objs/sparcv9" executable="cc"> - <arg line="-v -xCC -xchip=ultra -xarch=v9a -xcode=pic32 -I/include -I${java.home}/../include -I${java.home}/../include/solaris -I/usr/openwin/include -I${javahUtilsTarget} -${bldFlag} -DSOLARIS -c ${core_utils_src}/native/share/J3DTimer.c"/> + <arg line="-v -xCC -xchip=ultra -xarch=v9a -xcode=pic32 -I/include -I${java.home}/../include -I${java.home}/../include/solaris -I/usr/openwin/include -I${javahUtilsTarget} ${bldFlag} -DSOLARIS -c ${core_utils_src}/native/share/J3DTimer.c"/> </exec> <!-- Create the library file--> diff --git a/src/native/share/build-solaris-sparc-gcc.xml b/src/native/share/build-solaris-sparc-gcc.xml index f179591..afe17b4 100644 --- a/src/native/share/build-solaris-sparc-gcc.xml +++ b/src/native/share/build-solaris-sparc-gcc.xml @@ -27,7 +27,7 @@ <!-- Compile the c source files--> <exec dir="${build}/${platform}/${bldType}/native/share/objs" executable="gcc"> - <arg line="-m32 -mcpu=v9 -mtune=v9 -I/include -I${java.home}/../include -I${java.home}/../include/solaris -I/usr/openwin/include -I${javahUtilsTarget} -${bldFlag} -DSOLARIS -c ${core_utils_src}/native/share/J3DTimer.c"/> + <arg line="-m32 -mcpu=v9 -mtune=v9 -I/include -I${java.home}/../include -I${java.home}/../include/solaris -I/usr/openwin/include -I${javahUtilsTarget} ${bldFlag} -DSOLARIS -c ${core_utils_src}/native/share/J3DTimer.c"/> </exec> <!-- Create the library file--> @@ -48,7 +48,7 @@ <!-- Compile the c source files--> <exec dir="${build}/${platform}/${bldType}/native/share/objs/sparcv9" executable="gcc"> - <arg line="-m64 -mcpu=v9 -mtune=v9 -I/include -I${java.home}/../include -I${java.home}/../include/solaris -I/usr/openwin/include -I${javahUtilsTarget} -${bldFlag} -DSOLARIS -c ${core_utils_src}/native/share/J3DTimer.c"/> + <arg line="-m64 -mcpu=v9 -mtune=v9 -I/include -I${java.home}/../include -I${java.home}/../include/solaris -I/usr/openwin/include -I${javahUtilsTarget} ${bldFlag} -DSOLARIS -c ${core_utils_src}/native/share/J3DTimer.c"/> </exec> <!-- Create the library file--> diff --git a/src/native/share/build-solaris-x86-forte.xml b/src/native/share/build-solaris-x86-forte.xml new file mode 100644 index 0000000..8f72eb7 --- /dev/null +++ b/src/native/share/build-solaris-x86-forte.xml @@ -0,0 +1,86 @@ +<?xml version="1.0"?> + +<!-- +/* + * $RCSfile$ + * + * Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved. + * + * Use is subject to license terms. + * + * $Revision$ + * $Date$ + * $State$ + */ + --> + +<!-- Ant file for building native utilities files for Solaris --> +<project name="Java 3D" default="compile"> + + <target name="compile"> + + <echo message="Executing 32 bit native utilities build [${bldType}]"/> + + <!-- Create the build directories i386 --> + <mkdir dir="${build}/${platform}/${bldType}/native/share/objs"/> + <mkdir dir="${build}/${platform}/${bldType}/lib/i386"/> + + <!-- Compile the c source files--> + <exec dir="${build}/${platform}/${bldType}/native/share/objs" executable="cc"> + <arg line="-v -xCC -xchip=pentium3 -xarch=generic -KPIC -I/include -I${java.home}/../include -I${java.home}/../include/solaris -I/usr/openwin/include -I${javahUtilsTarget} ${bldFlag} -DSOLARIS -c ${core_utils_src}/native/share/J3DTimer.c"/> + </exec> + + <!-- Create the library file--> + <exec dir="${build}/${platform}/${bldType}/native/share/objs" executable="ld"> + <arg line="J3DTimer.o -G -z lazyload -lposix4 -lc -o libj3dutils.so"/> + </exec> + + <!-- Copy the copyright library file --> + <copy file="${build}/${platform}/${bldType}/native/share/objs/libj3dutils.so" + todir="${build}/${platform}/${bldType}/lib/i386"/> + + <!-- + /* + * TODO: only do the 64-bit build if isSolarisOnX86_64 property is + * set, indicating that a 64-bit JVM is available + */ + --> + +<!-- ********************************************************************** --> + <echo message="Executing 64 bit native utilities build [${bldType}]"/> + + <!-- Create the build directories amd64 --> + <mkdir dir="${build}/${platform}/${bldType}/native/share/objs/amd64"/> + <mkdir dir="${build}/${platform}/${bldType}/lib/amd64"/> + + <!-- Compile the c source files--> + <exec dir="${build}/${platform}/${bldType}/native/share/objs/amd64" executable="cc"> + <arg line="-v -xCC -xchip=opteron -xarch=amd64 -KPIC -I/include -I${java.home}/../include -I${java.home}/../include/solaris -I/usr/openwin/include -I${javahUtilsTarget} ${bldFlag} -DSOLARIS -c ${core_utils_src}/native/share/J3DTimer.c"/> + </exec> + + <!-- Create the library file--> + <exec dir="${build}/${platform}/${bldType}/native/share/objs/amd64" executable="ld"> + <arg line="J3DTimer.o -G -z lazyload -lposix4 -lc -o libj3dutils.so"/> + </exec> + + <!-- Copy the copyright library file --> + <copy file="${build}/${platform}/${bldType}/native/share/objs/amd64/libj3dutils.so" + todir="${build}/${platform}/${bldType}/lib/amd64"/> + + </target> + + <target name="dist"> + <!-- Create the distribution directory --> + <mkdir dir="${dist}/${platform}/lib/i386"/> + <mkdir dir="${dist}/${platform}/lib/amd64"/> + + <!-- Copy the library files --> + <copy file="${build}/${platform}/opt/lib/i386/libj3dutils.so" + todir="${dist}/${platform}/lib/i386"/> + + <copy file="${build}/${platform}/opt/lib/amd64/libj3dutils.so" + todir="${dist}/${platform}/lib/amd64"/> + </target> + + +</project> diff --git a/src/native/share/build-solaris-x86-gcc.xml b/src/native/share/build-solaris-x86-gcc.xml new file mode 100644 index 0000000..01ffdc4 --- /dev/null +++ b/src/native/share/build-solaris-x86-gcc.xml @@ -0,0 +1,86 @@ +<?xml version="1.0"?> + +<!-- +/* + * $RCSfile$ + * + * Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved. + * + * Use is subject to license terms. + * + * $Revision$ + * $Date$ + * $State$ + */ + --> + +<!-- Ant file for building native utilities files for Solaris --> +<project name="Java 3D" default="compile"> + + <target name="compile"> + + <echo message="Executing 32 bit native utilities build [${bldType}]"/> + + <!-- Create the build directories i386 --> + <mkdir dir="${build}/${platform}/${bldType}/native/share/objs"/> + <mkdir dir="${build}/${platform}/${bldType}/lib/i386"/> + + <!-- Compile the c source files--> + <exec dir="${build}/${platform}/${bldType}/native/share/objs" executable="gcc"> + <arg line="-m32 -I/include -I${java.home}/../include -I${java.home}/../include/solaris -I/usr/openwin/include -I${javahUtilsTarget} ${bldFlag} -DSOLARIS -c ${core_utils_src}/native/share/J3DTimer.c"/> + </exec> + + <!-- Create the library file--> + <exec dir="${build}/${platform}/${bldType}/native/share/objs" executable="ld"> + <arg line="J3DTimer.o -G -z lazyload -lposix4 -lc -o libj3dutils.so"/> + </exec> + + <!-- Copy the copyright library file --> + <copy file="${build}/${platform}/${bldType}/native/share/objs/libj3dutils.so" + todir="${build}/${platform}/${bldType}/lib/i386"/> + + <!-- + /* + * TODO: only do the 64-bit build if isSolarisOnX86_64 property is + * set, indicating that a 64-bit JVM is available + */ + --> + +<!-- ********************************************************************** --> + <echo message="Executing 64 bit native utilities build [${bldType}]"/> + + <!-- Create the build directories amd64 --> + <mkdir dir="${build}/${platform}/${bldType}/native/share/objs/amd64"/> + <mkdir dir="${build}/${platform}/${bldType}/lib/amd64"/> + + <!-- Compile the c source files--> + <exec dir="${build}/${platform}/${bldType}/native/share/objs/amd64" executable="gcc"> + <arg line="-m64 -I/include -I${java.home}/../include -I${java.home}/../include/solaris -I/usr/openwin/include -I${javahUtilsTarget} ${bldFlag} -DSOLARIS -c ${core_utils_src}/native/share/J3DTimer.c"/> + </exec> + + <!-- Create the library file--> + <exec dir="${build}/${platform}/${bldType}/native/share/objs/amd64" executable="ld"> + <arg line="J3DTimer.o -G -z lazyload -lposix4 -lc -o libj3dutils.so"/> + </exec> + + <!-- Copy the copyright library file --> + <copy file="${build}/${platform}/${bldType}/native/share/objs/amd64/libj3dutils.so" + todir="${build}/${platform}/${bldType}/lib/amd64"/> + + </target> + + <target name="dist"> + <!-- Create the distribution directory --> + <mkdir dir="${dist}/${platform}/lib/i386"/> + <mkdir dir="${dist}/${platform}/lib/amd64"/> + + <!-- Copy the library files --> + <copy file="${build}/${platform}/opt/lib/i386/libj3dutils.so" + todir="${dist}/${platform}/lib/i386"/> + + <copy file="${build}/${platform}/opt/lib/amd64/libj3dutils.so" + todir="${dist}/${platform}/lib/amd64"/> + </target> + + +</project> |