diff options
Diffstat (limited to 'src/native')
54 files changed, 0 insertions, 56715 deletions
diff --git a/src/native/build.xml b/src/native/build.xml deleted file mode 100644 index 89b6d86..0000000 --- a/src/native/build.xml +++ /dev/null @@ -1,431 +0,0 @@ -<?xml version="1.0"?> - -<!-- Ant file for building native files --> -<project name="j3d-core native" default="compile-opt"> - - <target name="nativeSetup-debug-solaris" if="isSolarisOnSparc"> - <property name="bldFlag" value="-g -DDEBUG"/> - <property name="coreLibDependency" value="lib/sparc/libj3dcore-ogl.so"/> - <property name="osNativeConfigTemplate3D" value="X11NativeConfigTemplate3D"/> - <property name="osNativeScreenInfo" value="X11NativeScreenInfo"/> - </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="osNativeConfigTemplate3D" value="X11NativeConfigTemplate3D"/> - <property name="osNativeScreenInfo" value="X11NativeScreenInfo"/> - </target> - - <target name="nativeSetup-debug-linux" if="isLinuxOnX86"> - <property name="bldFlag" value="-g -DDEBUG"/> - <property name="coreLibDependency" value="lib/i386/libj3dcore-ogl.so"/> - <property name="osNativeConfigTemplate3D" value="X11NativeConfigTemplate3D"/> - <property name="osNativeScreenInfo" value="X11NativeScreenInfo"/> - </target> - - <target name="nativeSetup-debug-linux-amd64" if="isLinuxOnAmd64"> - <property name="bldFlag" value="-g -DDEBUG -fPIC -march=k8 -msse2 -mfpmath=sse"/> - <property name="coreLibDependency" value="lib/amd64/libj3dcore-ogl.so"/> - <property name="osNativeConfigTemplate3D" value="X11NativeConfigTemplate3D"/> - <property name="osNativeScreenInfo" value="X11NativeScreenInfo"/> - </target> - - <target name="nativeSetup-debug-linux-ia64" if="isLinuxOnIA64"> - <property name="bldFlag" value="-g -DDEBUG"/> - <property name="coreLibDependency" value="lib/ia64/libj3dcore-ogl.so"/> - <property name="osNativeConfigTemplate3D" value="X11NativeConfigTemplate3D"/> - <property name="osNativeScreenInfo" value="X11NativeScreenInfo"/> - </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="osNativeConfigTemplate3D" value="X11NativeConfigTemplate3D"/> - <property name="osNativeScreenInfo" value="X11NativeScreenInfo"/> - </target> - - <target name="nativeSetup-debug-win32" if="isWindowsOnX86"> - <property name="bldFlag" - value="-DDEBUG -DWIN32 -D_WINDOWS"/> - <property name="coreLibDependency" value="bin/j3dcore-${build.rend}.dll"/> - <property name="osNativeConfigTemplate3D" value="Win32NativeConfigTemplate3D"/> - <property name="osNativeScreenInfo" value="Win32NativeScreenInfo"/> - </target> - - - <target name="nativeSetup-debug-winamd64" if="isWindowsOnAmd64"> - <property name="bldFlag" - value="-DDEBUG -DWIN32 -D_WINDOWS"/> - <property name="coreLibDependency" value="bin/j3dcore-${build.rend}.dll"/> - <property name="osNativeConfigTemplate3D" value="Win32NativeConfigTemplate3D"/> - <property name="osNativeScreenInfo" value="Win32NativeScreenInfo"/> - </target> - - <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, nativeSetup-debug-winamd64"> - <property name="bldType" value="debug"/> - <property name="javahCoreSrc" - location="${src}/classes/share/javax/media/j3d"/> - <property name="javahCoreTarget" - location="${build}/${platform}/${bldType}/native/javah/j3dcore"/> - </target> - - <target name="nativeSetup-opt-solaris" if="isSolarisOnSparc"> - <property name="bldFlag" value="-O"/> - <property name="coreLibDependency" value="lib/sparc/libj3dcore-ogl.so"/> - <property name="osNativeConfigTemplate3D" value="X11NativeConfigTemplate3D"/> - <property name="osNativeScreenInfo" value="X11NativeScreenInfo"/> - </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="osNativeConfigTemplate3D" value="X11NativeConfigTemplate3D"/> - <property name="osNativeScreenInfo" value="X11NativeScreenInfo"/> - </target> - - <target name="nativeSetup-opt-linux" if="isLinuxOnX86"> - <property name="bldFlag" value="-O"/> - <property name="coreLibDependency" value="lib/i386/libj3dcore-ogl.so"/> - <property name="osNativeConfigTemplate3D" value="X11NativeConfigTemplate3D"/> - <property name="osNativeScreenInfo" value="X11NativeScreenInfo"/> - </target> - - <target name="nativeSetup-opt-linux-amd64" if="isLinuxOnAmd64"> - <property name="bldFlag" value="-O -fPIC -march=k8 -msse2 -mfpmath=sse"/> - <property name="coreLibDependency" value="lib/amd64/libj3dcore-ogl.so"/> - <property name="osNativeConfigTemplate3D" value="X11NativeConfigTemplate3D"/> - <property name="osNativeScreenInfo" value="X11NativeScreenInfo"/> - </target> - - <target name="nativeSetup-opt-linux-ia64" if="isLinuxOnIA64"> - <property name="bldFlag" value="-O"/> - <property name="coreLibDependency" value="lib/ia64/libj3dcore-ogl.so"/> - <property name="osNativeConfigTemplate3D" value="X11NativeConfigTemplate3D"/> - <property name="osNativeScreenInfo" value="X11NativeScreenInfo"/> - </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="osNativeConfigTemplate3D" value="X11NativeConfigTemplate3D"/> - <property name="osNativeScreenInfo" value="X11NativeScreenInfo"/> - </target> - - <target name="nativeSetup-opt-win32" if="isWindowsOnX86"> - <property name="bldFlag" - value="-DWIN32 -D_WINDOWS"/> - <property name="coreLibDependency" value="bin/j3dcore-${build.rend}.dll"/> - <property name="osNativeConfigTemplate3D" value="Win32NativeConfigTemplate3D"/> - <property name="osNativeScreenInfo" value="Win32NativeScreenInfo"/> - </target> - - <target name="nativeSetup-opt-winamd64" if="isWindowsOnAmd64"> - <property name="bldFlag" - value="-DWIN32 -D_WINDOWS"/> - <property name="coreLibDependency" value="bin/j3dcore-${build.rend}.dll"/> - <property name="osNativeConfigTemplate3D" value="Win32NativeConfigTemplate3D"/> - <property name="osNativeScreenInfo" value="Win32NativeScreenInfo"/> - </target> - - <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, nativeSetup-opt-winamd64"> - <property name="bldType" value="opt"/> - <property name="javahCoreSrc" - location="${src}/classes/share/javax/media/j3d"/> - <property name="javahCoreTarget" - location="${build}/${platform}/${bldType}/native/javah/j3dcore"/> - </target> - - <target name="dependencyCheck"> - - <!-- ==== source/target out-of-date checking for JNI header files ==== --> - <condition property="javahBuild.notRequired"> - <and> - <uptodate - srcfile="${javahCoreSrc}/Background.java" - targetfile="${javahCoreTarget}/javax_media_j3d_Background.h"/> - <uptodate - srcfile="${javahCoreSrc}/Canvas3D.java" - targetfile="${javahCoreTarget}/javax_media_j3d_Canvas3D.h"/> - <uptodate - srcfile="${javahCoreSrc}/ColoringAttributes.java" - targetfile="${javahCoreTarget}/javax_media_j3d_ColoringAttributes.h"/> - <uptodate - srcfile="${javahCoreSrc}/ColoringAttributesRetained.java" - targetfile="${javahCoreTarget}/javax_media_j3d_ColoringAttributesRetained.h"/> - <uptodate - srcfile="${javahCoreSrc}/CompressedGeometryRetained.java" - targetfile="${javahCoreTarget}/javax_media_j3d_CompressedGeometryRetained.h"/> - <uptodate - srcfile="${javahCoreSrc}/DepthComponentRetained.java" - targetfile="${javahCoreTarget}/javax_media_j3d_DepthComponentRetained.h"/> - <uptodate - srcfile="${javahCoreSrc}/DirectionalLightRetained.java" - targetfile="${javahCoreTarget}/javax_media_j3d_DirectionalLightRetained.h"/> - <uptodate - srcfile="${javahCoreSrc}/DisplayListRenderMethod.java" - targetfile="${javahCoreTarget}/javax_media_j3d_DisplayListRenderMethod.h"/> - <uptodate - srcfile="${javahCoreSrc}/DrawingSurfaceObjectAWT.java" - targetfile="${javahCoreTarget}/javax_media_j3d_DrawingSurfaceObjectAWT.h"/> - <uptodate - srcfile="${javahCoreSrc}/ExponentialFogRetained.java" - targetfile="${javahCoreTarget}/javax_media_j3d_ExponentialFogRetained.h"/> - <uptodate - srcfile="${javahCoreSrc}/GeometryArray.java" - targetfile="${javahCoreTarget}/javax_media_j3d_GeometryArray.h"/> - <uptodate - srcfile="${javahCoreSrc}/GeometryArrayRetained.java" - targetfile="${javahCoreTarget}/javax_media_j3d_GeometryArrayRetained.h"/> - <uptodate - srcfile="${javahCoreSrc}/GeometryRetained.java" - targetfile="${javahCoreTarget}/javax_media_j3d_GeometryRetained.h"/> - <uptodate - srcfile="${javahCoreSrc}/GraphicsContext3D.java" - targetfile="${javahCoreTarget}/javax_media_j3d_GraphicsContext3D.h"/> - <uptodate - srcfile="${javahCoreSrc}/ImageComponent.java" - targetfile="${javahCoreTarget}/javax_media_j3d_ImageComponent.h"/> - <uptodate - srcfile="${javahCoreSrc}/ImageComponent2DRetained.java" - targetfile="${javahCoreTarget}/javax_media_j3d_ImageComponent2DRetained.h"/> - <uptodate - srcfile="${javahCoreSrc}/ImageComponentRetained.java" - targetfile="${javahCoreTarget}/javax_media_j3d_ImageComponentRetained.h"/> - <uptodate - srcfile="${javahCoreSrc}/IndexedGeometryArrayRetained.java" - targetfile="${javahCoreTarget}/javax_media_j3d_IndexedGeometryArrayRetained.h"/> - <uptodate - srcfile="${javahCoreSrc}/LineAttributes.java" - targetfile="${javahCoreTarget}/javax_media_j3d_LineAttributes.h"/> - <uptodate - srcfile="${javahCoreSrc}/LineAttributesRetained.java" - targetfile="${javahCoreTarget}/javax_media_j3d_LineAttributesRetained.h"/> - <uptodate - srcfile="${javahCoreSrc}/LinearFogRetained.java" - targetfile="${javahCoreTarget}/javax_media_j3d_LinearFogRetained.h"/> - <uptodate - srcfile="${javahCoreSrc}/MasterControl.java" - targetfile="${javahCoreTarget}/javax_media_j3d_MasterControl.h"/> - <uptodate - srcfile="${javahCoreSrc}/Material.java" - targetfile="${javahCoreTarget}/javax_media_j3d_Material.h"/> - <uptodate - srcfile="${javahCoreSrc}/MaterialRetained.java" - targetfile="${javahCoreTarget}/javax_media_j3d_MaterialRetained.h"/> - <uptodate - srcfile="${javahCoreSrc}/ModelClipRetained.java" - targetfile="${javahCoreTarget}/javax_media_j3d_ModelClipRetained.h"/> - <uptodate - srcfile="${javahCoreSrc}/NativePipeline.java" - targetfile="${javahCoreTarget}/javax_media_j3d_NativePipeline.h"/> - <uptodate - srcfile="${javahCoreSrc}/NativeConfigTemplate3D.java" - targetfile="${javahCoreTarget}/javax_media_j3d_NativeConfigTemplate3D.h"/> - <uptodate - srcfile="${src}/classes/${wstype}/javax/media/j3d/${osNativeConfigTemplate3D}.java" - targetfile="${javahCoreTarget}/javax_media_j3d_${osNativeConfigTemplate3D}.h"/> - <uptodate - srcfile="${src}/classes/${wstype}/javax/media/j3d/${osNativeScreenInfo}.java" - targetfile="${javahCoreTarget}/javax_media_j3d_${osNativeScreenInfo}.h"/> - <uptodate - srcfile="${javahCoreSrc}/NodeRetained.java" - targetfile="${javahCoreTarget}/javax_media_j3d_NodeRetained.h"/> - <uptodate - srcfile="${javahCoreSrc}/PointAttributesRetained.java" - targetfile="${javahCoreTarget}/javax_media_j3d_PointAttributesRetained.h"/> - <uptodate - srcfile="${javahCoreSrc}/PointLightRetained.java" - targetfile="${javahCoreTarget}/javax_media_j3d_PointLightRetained.h"/> - <uptodate - srcfile="${javahCoreSrc}/PolygonAttributes.java" - targetfile="${javahCoreTarget}/javax_media_j3d_PolygonAttributes.h"/> - <uptodate - srcfile="${javahCoreSrc}/PolygonAttributesRetained.java" - targetfile="${javahCoreTarget}/javax_media_j3d_PolygonAttributesRetained.h"/> - <uptodate - srcfile="${javahCoreSrc}/Raster.java" - targetfile="${javahCoreTarget}/javax_media_j3d_Raster.h"/> - <uptodate - srcfile="${javahCoreSrc}/RasterRetained.java" - targetfile="${javahCoreTarget}/javax_media_j3d_RasterRetained.h"/> - <uptodate - srcfile="${javahCoreSrc}/RenderMolecule.java" - targetfile="${javahCoreTarget}/javax_media_j3d_RenderMolecule.h"/> - <uptodate - srcfile="${javahCoreSrc}/Renderer.java" - targetfile="${javahCoreTarget}/javax_media_j3d_Renderer.h"/> - <uptodate - srcfile="${javahCoreSrc}/RenderingAttributes.java" - targetfile="${javahCoreTarget}/javax_media_j3d_RenderingAttributes.h"/> - <uptodate - srcfile="${javahCoreSrc}/RenderingAttributesRetained.java" - targetfile="${javahCoreTarget}/javax_media_j3d_RenderingAttributesRetained.h"/> - <uptodate - srcfile="${javahCoreSrc}/SpotLightRetained.java" - targetfile="${javahCoreTarget}/javax_media_j3d_SpotLightRetained.h"/> - <uptodate - srcfile="${javahCoreSrc}/TexCoordGeneration.java" - targetfile="${javahCoreTarget}/javax_media_j3d_TexCoordGeneration.h"/> - <uptodate - srcfile="${javahCoreSrc}/TexCoordGenerationRetained.java" - targetfile="${javahCoreTarget}/javax_media_j3d_TexCoordGenerationRetained.h"/> - <uptodate - srcfile="${javahCoreSrc}/Texture.java" - targetfile="${javahCoreTarget}/javax_media_j3d_Texture.h"/> - <uptodate - srcfile="${javahCoreSrc}/Texture2D.java" - targetfile="${javahCoreTarget}/javax_media_j3d_Texture2D.h"/> - <uptodate - srcfile="${javahCoreSrc}/Texture2DRetained.java" - targetfile="${javahCoreTarget}/javax_media_j3d_Texture2DRetained.h"/> - <uptodate - srcfile="${javahCoreSrc}/Texture3DRetained.java" - targetfile="${javahCoreTarget}/javax_media_j3d_Texture3DRetained.h"/> - <uptodate - srcfile="${javahCoreSrc}/TextureAttributes.java" - targetfile="${javahCoreTarget}/javax_media_j3d_TextureAttributes.h"/> - <uptodate - srcfile="${javahCoreSrc}/TextureAttributesRetained.java" - targetfile="${javahCoreTarget}/javax_media_j3d_TextureAttributesRetained.h"/> - <uptodate - srcfile="${javahCoreSrc}/TextureCubeMapRetained.java" - targetfile="${javahCoreTarget}/javax_media_j3d_TextureCubeMapRetained.h"/> - <uptodate - srcfile="${javahCoreSrc}/TextureRetained.java" - targetfile="${javahCoreTarget}/javax_media_j3d_TextureRetained.h"/> - <uptodate - srcfile="${javahCoreSrc}/TextureUnitStateRetained.java" - targetfile="${javahCoreTarget}/javax_media_j3d_TextureUnitStateRetained.h"/> - <uptodate - srcfile="${javahCoreSrc}/TransparencyAttributes.java" - targetfile="${javahCoreTarget}/javax_media_j3d_TransparencyAttributes.h"/> - <uptodate - 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"/> - </and> - </condition> - <echo message="javahBuild.notRequired = ${javahBuild.notRequired}"/> - - <!-- ==== source/target out-of-date checking for JNI header files ==== --> - <!-- ==== and obj files ==== --> - <condition property="nativeOGLBuild.notRequired"> - <and> - <istrue value="${javahBuild.notRequired}"/> - <uptodate> - <srcfiles dir= "${src}/native/${build.rend}" includes="*.c,*.h,*.cpp,*.hpp"/> - <mapper type="merge" from="*.c,*.h,*.cpp,*.hpp" - to="${build}/${platform}/${bldType}/${coreLibDependency}"/> - </uptodate> - </and> - </condition> - <echo message="nativeOGLBuild.notRequired = ${nativeOGLBuild.notRequired}"/> - </target> - - <target name="genJavah" unless="javahBuild.notRequired"> - - <!-- Create the build directory structure used for JNI header --> - <mkdir dir="${javahCoreTarget}"/> - - <!-- Generate JNI headers from ${build}/${platform}/${bldType}/classes --> - <!-- into ${javahCoreTarget} --> - <javah destdir="${javahCoreTarget}" force="yes"> - <classpath> - <pathelement path="${build}/${platform}/${bldType}/classes"/> - </classpath> - - <class name="javax.media.j3d.Background"/> - <class name="javax.media.j3d.Canvas3D"/> - <class name="javax.media.j3d.ColoringAttributes"/> - <class name="javax.media.j3d.ColoringAttributesRetained"/> - <class name="javax.media.j3d.CompressedGeometryRetained"/> - <class name="javax.media.j3d.DepthComponentRetained"/> - <class name="javax.media.j3d.DirectionalLightRetained"/> - <class name="javax.media.j3d.DisplayListRenderMethod"/> - <class name="javax.media.j3d.DrawingSurfaceObjectAWT"/> - <class name="javax.media.j3d.ExponentialFogRetained"/> - <class name="javax.media.j3d.GeometryArray"/> - <class name="javax.media.j3d.GeometryArrayRetained"/> - <class name="javax.media.j3d.GeometryRetained"/> - <class name="javax.media.j3d.GraphicsContext3D"/> - <class name="javax.media.j3d.ImageComponent"/> - <class name="javax.media.j3d.ImageComponent2DRetained"/> - <class name="javax.media.j3d.ImageComponentRetained"/> - <class name="javax.media.j3d.IndexedGeometryArrayRetained"/> - <class name="javax.media.j3d.LineAttributes"/> - <class name="javax.media.j3d.LineAttributesRetained"/> - <class name="javax.media.j3d.LinearFogRetained"/> - <class name="javax.media.j3d.MasterControl"/> - <class name="javax.media.j3d.Material"/> - <class name="javax.media.j3d.MaterialRetained"/> - <class name="javax.media.j3d.ModelClipRetained"/> - <class name="javax.media.j3d.NativePipeline"/> - <class name="javax.media.j3d.NativeConfigTemplate3D"/> - <class name="javax.media.j3d.${osNativeConfigTemplate3D}"/> - <class name="javax.media.j3d.${osNativeScreenInfo}"/> - <class name="javax.media.j3d.NodeRetained"/> - <class name="javax.media.j3d.PointAttributesRetained"/> - <class name="javax.media.j3d.PointLightRetained"/> - <class name="javax.media.j3d.PolygonAttributes"/> - <class name="javax.media.j3d.PolygonAttributesRetained"/> - <class name="javax.media.j3d.Raster"/> - <class name="javax.media.j3d.RasterRetained"/> - <class name="javax.media.j3d.RenderMolecule"/> - <class name="javax.media.j3d.Renderer"/> - <class name="javax.media.j3d.RenderingAttributes"/> - <class name="javax.media.j3d.RenderingAttributesRetained"/> - <class name="javax.media.j3d.SpotLightRetained"/> - <class name="javax.media.j3d.TexCoordGeneration"/> - <class name="javax.media.j3d.TexCoordGenerationRetained"/> - <class name="javax.media.j3d.Texture"/> - <class name="javax.media.j3d.Texture2D"/> - <class name="javax.media.j3d.Texture2DRetained"/> - <class name="javax.media.j3d.Texture3DRetained"/> - <class name="javax.media.j3d.TextureAttributes"/> - <class name="javax.media.j3d.TextureAttributesRetained"/> - <class name="javax.media.j3d.TextureCubeMapRetained"/> - <class name="javax.media.j3d.TextureRetained"/> - <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> - - </target> - - <target name="compile-debug" depends="nativeSetup-debug, dependencyCheck, genJavah" unless="nativeOGLBuild.notRequired"> - <ant antfile="build-${platform}.xml" dir="${build.rend}" target="compile"/> - </target> - - <target name="compile-opt" depends="nativeSetup-opt, dependencyCheck, genJavah" - unless="nativeOGLBuild.notRequired"> - <ant antfile="build-${platform}.xml" dir="${build.rend}" target="compile"/> - </target> - - <target name="dist" unless="build.javaonly"> - <ant antfile="build-${platform}.xml" dir="${build.rend}" target="dist"/> - <chmod dir="${dist}/${platform}" perm="755" includes="**/*.dll, **/*.so"/> - </target> - -</project> - diff --git a/src/native/d3d/Attributes.cpp b/src/native/d3d/Attributes.cpp deleted file mode 100644 index 2dc0df9..0000000 --- a/src/native/d3d/Attributes.cpp +++ /dev/null @@ -1,3269 +0,0 @@ -/* - * $RCSfile$ - * - * Copyright 2000-2008 Sun Microsystems, Inc. All Rights Reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * $Revision$ - * $Date$ - * $State$ - */ - -#include "StdAfx.h" - - -const DWORD blendFunctionTable[] = -{ - D3DBLEND_ZERO, D3DBLEND_ONE, - D3DBLEND_SRCALPHA, D3DBLEND_INVSRCALPHA, - D3DBLEND_DESTCOLOR, D3DBLEND_SRCCOLOR, - D3DBLEND_INVSRCCOLOR, D3DBLEND_SRCCOLOR -}; - -const DWORD combineFunctionTable[] = -{ - D3DTOP_SELECTARG1, D3DTOP_SELECTARG1, D3DTOP_SELECTARG1, D3DTOP_SELECTARG1, - D3DTOP_MODULATE, D3DTOP_MODULATE2X, D3DTOP_MODULATE2X, D3DTOP_MODULATE4X, - D3DTOP_ADD, D3DTOP_ADD, D3DTOP_ADD, D3DTOP_ADD, - D3DTOP_ADDSIGNED, D3DTOP_ADDSIGNED2X, D3DTOP_ADDSIGNED2X, D3DTOP_ADDSIGNED2X, - D3DTOP_SUBTRACT, D3DTOP_SUBTRACT, D3DTOP_SUBTRACT, D3DTOP_SUBTRACT, - D3DTOP_LERP, D3DTOP_LERP, D3DTOP_LERP, D3DTOP_LERP, - D3DTOP_DOTPRODUCT3, D3DTOP_DOTPRODUCT3, D3DTOP_DOTPRODUCT3, D3DTOP_DOTPRODUCT3 -}; - -// Assume COMBINE_OBJECT_COLOR = 0 -// COMBINE_TEXTURE_COLOR = 1 -// COMBINE_CONSTANT_COLOR = 2 -// COMBINE_PREVIOUS_TEXTURE_UNIT_STATE = 3 -// -// COMBINE_SRC_COLOR = 0 -// COMBINE_ONE_MINUS_SRC_COLOR = 1 -// COMBINE_SRC_ALPHA = 2 -// COMBINE_ONE_MINUS_SRC_ALPHA = 3 -// -const DWORD combineSourceTable[] = -{ - D3DTA_DIFFUSE, - D3DTA_DIFFUSE | D3DTA_COMPLEMENT, - D3DTA_DIFFUSE | D3DTA_ALPHAREPLICATE, - D3DTA_DIFFUSE | D3DTA_COMPLEMENT | D3DTA_ALPHAREPLICATE, - D3DTA_TEXTURE, - D3DTA_TEXTURE | D3DTA_COMPLEMENT, - D3DTA_TEXTURE | D3DTA_ALPHAREPLICATE, - D3DTA_TEXTURE | D3DTA_COMPLEMENT | D3DTA_ALPHAREPLICATE, - D3DTA_TFACTOR, - D3DTA_TFACTOR | D3DTA_COMPLEMENT, - D3DTA_TFACTOR | D3DTA_ALPHAREPLICATE, - D3DTA_TFACTOR | D3DTA_COMPLEMENT | D3DTA_ALPHAREPLICATE, - D3DTA_CURRENT, - D3DTA_CURRENT | D3DTA_COMPLEMENT, - D3DTA_CURRENT | D3DTA_ALPHAREPLICATE, - D3DTA_CURRENT | D3DTA_COMPLEMENT | D3DTA_ALPHAREPLICATE -}; - -// Assume TEXTURE_COORDINATE_2 = 0 -// TEXTURE_COORDINATE_3 = 1; -// TEXTURE_COORDINATE_4 = 2; -const int coordFormatTable[] = {2, 3, 4}; - -BOOL isLineWidthMessOutput = false; -BOOL isBackFaceMessOutput = false; -BOOL isLinePatternMessOutput = false; -BOOL isTexBorderMessOutput = false; - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateLinearFog( - JNIEnv *env, - jobject obj, - jlong ctx, - jfloat red, - jfloat green, - jfloat blue, - jdouble fdist, - jdouble bdist) -{ - GetDevice(); - - float fstart = (float) fdist; - float fend = (float) bdist; - - device->SetRenderState(d3dCtx->deviceInfo->fogMode, - D3DFOG_LINEAR); - device->SetRenderState(D3DRS_FOGCOLOR, - D3DCOLOR_COLORVALUE(red, green, blue, 0)); - - device->SetRenderState(D3DRS_FOGSTART, - *((LPDWORD) (&fstart))); - device->SetRenderState(D3DRS_FOGEND, - *((LPDWORD) (&fend))); - device->SetRenderState(D3DRS_FOGENABLE, TRUE); - -} - - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateExponentialFog( - JNIEnv *env, - jobject obj, - jlong ctx, - jfloat red, - jfloat green, - jfloat blue, - jfloat density) -{ - GetDevice(); - - float d = (float) density; - - device->SetRenderState(d3dCtx->deviceInfo->fogMode, - D3DFOG_EXP); - device->SetRenderState(D3DRS_FOGCOLOR, - D3DCOLOR_COLORVALUE(red, green, blue, 0)); - device->SetRenderState(D3DRS_FOGDENSITY, - *((LPDWORD) (&d))); - device->SetRenderState(D3DRS_FOGENABLE, TRUE); - -} - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateModelClip( - JNIEnv *env, - jobject obj, - jlong ctx, - jint planeNum, - jboolean enableFlag, - jdouble A, - jdouble B, - jdouble C, - jdouble D) -{ - DWORD status; - float clip[4]; - - GetDevice(); - - clip[0] = -A; - clip[1] = -B; - clip[2] = -C; - clip[3] = -D; - - device->GetRenderState(D3DRS_CLIPPLANEENABLE, &status); - - if (enableFlag) { - device->SetClipPlane(planeNum, clip); - device->SetRenderState(D3DRS_CLIPPLANEENABLE, - status | (1 << planeNum)); - } else { - device->SetRenderState(D3DRS_CLIPPLANEENABLE, - status & ~(1 << planeNum)); - } -} - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_setModelViewMatrix( - JNIEnv * env, - jobject obj, - jlong ctx, - jdoubleArray viewMatrix, - jdoubleArray modelMatrix) -{ - D3DXMATRIX d3dMatrix; - - GetDevice(); - - - jdouble *matrix = reinterpret_cast<jdouble*>( - env->GetPrimitiveArrayCritical(modelMatrix, NULL)); - - CopyTranspose(d3dMatrix, matrix); - - env->ReleasePrimitiveArrayCritical(modelMatrix, matrix, 0); - - - device->SetTransform(D3DTS_WORLD,&d3dMatrix); - - matrix = reinterpret_cast<jdouble*>( - env->GetPrimitiveArrayCritical(viewMatrix, NULL)); - CopyTranspose(d3dMatrix, matrix); - - env->ReleasePrimitiveArrayCritical(viewMatrix, matrix, 0); - - // Because we negate the third row in projection matrix to - // make ._34 = 1. Here we negate the third column of View - // matrix to compensate it. - d3dMatrix._13 = -d3dMatrix._13; - d3dMatrix._23 = -d3dMatrix._23; - d3dMatrix._33 = -d3dMatrix._33; - d3dMatrix._43 = -d3dMatrix._43; - - device->SetTransform(D3DTS_VIEW, &d3dMatrix); -} - - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_setProjectionMatrix( - JNIEnv * env, - jobject obj, - jlong ctx, - jdoubleArray projMatrix) -{ - - GetDevice(); - - jdouble *s = reinterpret_cast<jdouble*>( - env->GetPrimitiveArrayCritical(projMatrix, NULL)); - - /* - * There are five steps we need to do in order that this - * matrix is useful by D3D - * - * (1) We need to transpose the matrix since in Java3D v' = M*v - * but in Direct3D v' = v*N where N is the transpose of M - * - * (2) Invert the Z value in clipping coordinates because OpenGL - * uses left-handed clipping coordinates, while Java3D defines - * right-handed coordinates everywhere. i.e. do the following - * after the transpose - * - * d3dMatrix._13 *= -1; - * d3dMatrix._23 *= -1; - * d3dMatrix._33 *= -1; - * d3dMatrix._43 *= -1; - * - * (3) In Direct3D, the z-depths range is [0,1] instead of - * OGL [-1, 1], so we need to multiple it by - * - * [1 0 0 0] - * R = [0 1 0 0] - * [0 0 0.5 0] - * [0 0 0.5 1] - * - * after the transpose and negate. i.e. N*R - * - * (4) We want w-friendly perspective matrix, i.e., d3dMatrix._34 = 1 - * We do this first by divide the whole matrix by - * 1/d3dMatrix._34 Since d3dMatrix._34 is always negative as - * input from Java3D. Now d3dMatrix._34 = -1 - * - * (5) To make d3dMatrix._34 = 1, we negate the third row of it. - * Because of this, we need to negate the third column in - * View matrix to compensate this. - * - * All of the above operation is combined together in this - * implementation for optimization. - */ - D3DXMATRIX m; - - if (s[14] != 0) { - // Perspective projection - // s[14] is always < 0 - float ratio = -1/s[14]; - m._12= m._13 = m._14 = m._21 = m._23 = - m._24 = m._41 = m._42 = m._44 = 0; - m._11 = s[0]*ratio; - m._22 = s[5]*ratio; - m._31 = -s[2]*ratio; - m._32 = -s[6]*ratio; - m._33 = -(s[14]-s[10])*ratio/2; - m._43 = -s[11]*ratio/2; - m._34 = 1; - } else { - // parallel projection - m._12 = m._13 = m._14 = m._21 = m._23 = - m._24 = m._31 = m._32 = m._34 = 0; - m._11 = s[0]; - m._22 = s[5]; - m._33 = s[10]/2; - m._41 = s[3]; - m._42 = s[7]; - m._43 = (s[15]-s[11])/2; - m._44 = s[15]; - } - - env->ReleasePrimitiveArrayCritical(projMatrix, s, 0); - device->SetTransform(D3DTS_PROJECTION, &m); -} - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_setViewport( - JNIEnv *env, - jobject obj, - jlong ctx, - jint x, - jint y, - jint width, - jint height) -{ - GetDevice(); - - if (d3dCtx->bFullScreen) { - width = d3dCtx->devmode.dmPelsWidth; - height = d3dCtx->devmode.dmPelsHeight; - } - D3DVIEWPORT9 vp = {x, y, width, height, 0.0f, 1.0f}; - - device->SetViewport(&vp); -} - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_setSceneAmbient( - JNIEnv *env, - jobject obj, - jlong ctx, - jfloat red, - jfloat green, - jfloat blue) -{ - GetDevice(); - /* - Clamp(red); - Clamp(green); - Clamp(blue); - */ - device->SetRenderState(D3DRS_AMBIENT, - D3DCOLOR_COLORVALUE(red, green, blue, 0)); -} - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_setLightEnables( - JNIEnv *env, - jobject obj, - jlong ctx, - jlong enable_mask, - jint nlights) -{ - GetDevice(); - -#pragma warning(disable:4244) // loss of data from __int64 to int - - for (int i=nlights-1; i>=0; i--) { - device->LightEnable(i, enable_mask & (long)(1L<<i)); - } -} - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_setLightingEnable( - JNIEnv *env, - jobject obj, - jlong ctx, - jboolean lightingOn) -{ - GetDevice(); - - d3dCtx->isLightEnable = lightingOn; - device->SetRenderState(D3DRS_LIGHTING, lightingOn); -} - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_disableFog( - JNIEnv *env, - jobject obj, - jlong ctx) -{ - GetDevice(); - device->SetRenderState(D3DRS_FOGENABLE, false); -} - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_disableModelClip( - JNIEnv *env, - jobject obj, - jlong ctx) -{ - GetDevice(); - device->SetRenderState(D3DRS_CLIPPLANEENABLE, 0); -} - -/** - * one of : - * STENCIL_KEEP - keeps the current value (no operation performed). This is the default setting. - * STENCIL_ZERO - Sets the stencil buffer value to 0. - * STENCIL_REPLACE - Sets the stencil buffer value to refValue, as specified by setStencilFunction. - * STENCIL_INCR - Increments the current stencil buffer value. - * STENCIL_DECR - Decrements the current stencil buffer value. - * STENCIL_INVERT - Bitwise inverts the current stencil buffer value. -*/ -DWORD getStencilOP(jint op) -{ - DWORD value = D3DSTENCILOP_KEEP; - switch(op) - { - case javax_media_j3d_RenderingAttributes_STENCIL_KEEP: - value = D3DSTENCILOP_KEEP; break; - case javax_media_j3d_RenderingAttributes_STENCIL_ZERO: - value = D3DSTENCILOP_ZERO; break; - case javax_media_j3d_RenderingAttributes_STENCIL_REPLACE: - value = D3DSTENCILOP_REPLACE; break; - case javax_media_j3d_RenderingAttributes_STENCIL_INCR: - value = D3DSTENCILOP_INCRSAT; break; - case javax_media_j3d_RenderingAttributes_STENCIL_DECR: - value = D3DSTENCILOP_DECRSAT; break; - case javax_media_j3d_RenderingAttributes_STENCIL_INVERT: - value = D3DSTENCILOP_INVERT; break; - default : - value = D3DSTENCILOP_KEEP; break; - } - - return value; -} - -/** - * ALWAYS - pixels are always drawn, irrespective of the stencil value. This effectively disables stencil testing. This is the default setting. - * NEVER - pixels are never drawn, irrespective of the stencil value. - * EQUAL - pixels are drawn if the stencil reference value is equal to the stored stencil value in the frame buffer. - * NOT_EQUAL - pixels are drawn if the stencil reference value is not equal to the stored stencil value in the frame buffer. - * LESS - pixels are drawn if the stencil reference value is less than the stored stencil value in the frame buffer. - * LESS_OR_EQUAL - pixels are drawn if the stencil reference value is less than or equal to the stored stencil value in the frame buffer. - * GREATER - pixels are drawn if the stencil reference value is greater than the stored stencil value in the frame buffer. - * GREATER_OR_EQUAL - pixels are drawn if the stencil reference value is greater than or equal to the stored stencil value in the frame buffer. -*/ -DWORD getStencilFunc(jint func) -{ - DWORD value = D3DCMP_ALWAYS; - switch(func) - { - case javax_media_j3d_RenderingAttributes_ALWAYS: - value = D3DCMP_ALWAYS; break; - case javax_media_j3d_RenderingAttributes_NEVER: - value = D3DCMP_NEVER; break; - case javax_media_j3d_RenderingAttributes_EQUAL: - value = D3DCMP_EQUAL; break; - case javax_media_j3d_RenderingAttributes_NOT_EQUAL: - value = D3DCMP_NOTEQUAL; break; - case javax_media_j3d_RenderingAttributes_LESS_OR_EQUAL: - value = D3DCMP_LESSEQUAL; break; - case javax_media_j3d_RenderingAttributes_GREATER: - value = D3DCMP_GREATER; break; - case javax_media_j3d_RenderingAttributes_GREATER_OR_EQUAL: - value = D3DCMP_GREATEREQUAL; break; - default : - value = D3DCMP_ALWAYS; break; - } - - return value; -} - -/** - * LESS_OR_EQUAL - DEFAULT pixels are drawn if the depth value is less than or equal to the stored depth value in the frame buffer. - * ALWAYS - pixels are always drawn, irrespective of the depth value. This effectively disables depth testing. - * NEVER - pixels are never drawn, irrespective of the depth value. - * EQUAL - pixels are drawn if the depth value is equal to the stored stencil value in the frame buffer. - * NOT_EQUAL - pixels are drawn if the depth value is not equal to the stored depth value in the frame buffer. - * LESS - pixels are drawn if the depth value is less than the stored stencil value in the frame buffer. - * GREATER - pixels are drawn if the depth value is greater than the stored stencil value in the frame buffer. - * GREATER_OR_EQUAL - pixels are drawn if the depth value is greater than or equal to the stored stencil value in the frame buffer. -*/ -DWORD getDepthFunc(jint func) -{ - DWORD value = D3DCMP_LESSEQUAL; - switch(func) - { - case javax_media_j3d_RenderingAttributes_ALWAYS: - value = D3DCMP_ALWAYS; break; - case javax_media_j3d_RenderingAttributes_NEVER: - value = D3DCMP_NEVER; break; - case javax_media_j3d_RenderingAttributes_EQUAL: - value = D3DCMP_EQUAL; break; - case javax_media_j3d_RenderingAttributes_NOT_EQUAL: - value = D3DCMP_NOTEQUAL; break; - case javax_media_j3d_RenderingAttributes_LESS_OR_EQUAL: - value = D3DCMP_LESSEQUAL; break; - case javax_media_j3d_RenderingAttributes_GREATER: - value = D3DCMP_GREATER; break; - case javax_media_j3d_RenderingAttributes_GREATER_OR_EQUAL: - value = D3DCMP_GREATEREQUAL; break; - default : - value = D3DCMP_LESSEQUAL; break; - } - - return value; -} - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_resetRenderingAttributes( - JNIEnv *env, - jobject obj, - jlong ctx, - jboolean db_write_enable_override, - jboolean db_enable_override) -{ - GetDevice(); - - if (!db_write_enable_override) { - d3dCtx->zWriteEnable = TRUE; - device->SetRenderState(D3DRS_ZWRITEENABLE, D3DZB_TRUE); - device->SetRenderState(D3DRS_ZFUNC, D3DCMP_LESSEQUAL); - } - - if (!db_enable_override) { - d3dCtx->zEnable = TRUE; - device->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE); - device->SetRenderState(D3DRS_ZFUNC, D3DCMP_LESSEQUAL); - } - - device->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_ALWAYS); - device->SetRenderState(D3DRS_ALPHAREF, 0); - if(d3dCtx->stencilWriteEnable) { - device->SetRenderState(D3DRS_STENCILFUNC, D3DCMP_ALWAYS); - device->SetRenderState( D3DRS_STENCILREF, 0); - device->SetRenderState( D3DRS_STENCILMASK, 0xFFFFFFFF); - device->SetRenderState( D3DRS_STENCILWRITEMASK, 0xFFFFFFFF ); - - // Always increment the stencil value - device->SetRenderState(D3DRS_STENCILFAIL, D3DSTENCILOP_KEEP); - device->SetRenderState(D3DRS_STENCILZFAIL, D3DSTENCILOP_KEEP); - device->SetRenderState(D3DRS_STENCILPASS, D3DSTENCILOP_KEEP); - - device->SetRenderState(D3DRS_STENCILENABLE, FALSE); - d3dCtx->stencilWriteEnable = false; - } - - /* setRasterOp(d3dCtx, R2_COPYPEN); */ - -} - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateRenderingAttributes( - JNIEnv *env, - jobject obj, - jlong ctx, - jboolean db_write_enable_override, - 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, - jboolean userStencilAvailable, - jboolean stencilEnable, - jint stencilFailOp, - jint stencilZFailOp, - jint stencilZPassOp, - jint stencilFunction, - jint stencilReferenceValue, - jint stencilCompareMask, - jint stencilWriteMask) -{ - - GetDevice(); - - DWORD alpha = (DWORD) (at_value * 255 + 0.5f); - - if (!db_enable_override) - { - if (db_enable) - { - d3dCtx->zEnable = TRUE; - device->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE); - device->SetRenderState(D3DRS_ZFUNC, getDepthFunc(db_func)); - } - else - { - d3dCtx->zEnable = FALSE; - device->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE); - } - } - - if (!db_write_enable_override) - { - d3dCtx->zWriteEnable = db_write_enable; - device->SetRenderState(D3DRS_ZWRITEENABLE, db_write_enable); - // disable ZFunc if ZBuffer is disabled ? no. - // ZFunc must work even when there is no z-buffer enable - device->SetRenderState(D3DRS_ZFUNC, getDepthFunc(db_func)); - } - - if (at_func == javax_media_j3d_RenderingAttributes_ALWAYS) - { - device->SetRenderState(D3DRS_ALPHATESTENABLE, FALSE); - } - else - { - device->SetRenderState(D3DRS_ALPHATESTENABLE, TRUE); - device->SetRenderState(D3DRS_ALPHAREF, alpha); - } - - switch (at_func) - { - case javax_media_j3d_RenderingAttributes_ALWAYS: - device->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_ALWAYS); - break; - case javax_media_j3d_RenderingAttributes_NEVER: - device->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_NEVER); - break; - case javax_media_j3d_RenderingAttributes_EQUAL: - device->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_EQUAL); - break; - case javax_media_j3d_RenderingAttributes_NOT_EQUAL: - device->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_NOTEQUAL); - break; - case javax_media_j3d_RenderingAttributes_LESS: - device->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_LESS); - break; - case javax_media_j3d_RenderingAttributes_LESS_OR_EQUAL: - device->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_LESSEQUAL); - break; - case javax_media_j3d_RenderingAttributes_GREATER: - device->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_GREATER); - break; - case javax_media_j3d_RenderingAttributes_GREATER_OR_EQUAL: - device->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUAL); - break; - } - -/* - stencilFailOp, * - stencilZFailOp, * - stencilZPassOp, * - stencilFunction, * - stencilReferenceValue, * - stencilCompareMask, * - stencilWriteMask * -*/ - if (userStencilAvailable == JNI_TRUE) - { - if (stencilEnable == JNI_TRUE) - { - // Turn on stenciling - device->SetRenderState( D3DRS_STENCILENABLE, TRUE ); - // printf("StencilEnable TRUE\n"); - // Set the function to always pass. - device->SetRenderState( D3DRS_STENCILFUNC, getStencilFunc(stencilFunction) ); - device->SetRenderState( D3DRS_STENCILREF, stencilReferenceValue ); - device->SetRenderState( D3DRS_STENCILMASK, stencilCompareMask ); - device->SetRenderState( D3DRS_STENCILWRITEMASK, stencilWriteMask ); - - // Always increment the stencil value - device->SetRenderState(D3DRS_STENCILFAIL, getStencilOP(stencilFailOp) ); - device->SetRenderState(D3DRS_STENCILZFAIL, getStencilOP(stencilZFailOp)); - device->SetRenderState(D3DRS_STENCILPASS, getStencilOP(stencilZPassOp) ); - } - else - { - device->SetRenderState( D3DRS_STENCILENABLE, FALSE ); - // printf("StencilEnable False\n"); - } - } - /* - else - { - printf("UserStencilEnable False\n"); - } - */ - -}// - - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_resetPolygonAttributes( - JNIEnv *env, - jobject obj, - jlong ctx) -{ - GetDevice(); - // D3D vertex order is reverse of OGL - d3dCtx->cullMode = D3DCULL_CW; - d3dCtx->fillMode = D3DFILL_SOLID; - device->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID); - device->SetRenderState(D3DRS_CULLMODE, D3DCULL_CW); - d3dCtx->twoSideLightingEnable = false; - device->SetRenderState(D3DRS_DEPTHBIAS, 0); -} - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updatePolygonAttributes( - JNIEnv *env, - jobject obj, - jlong ctx, - jint polygonMode, - jint cullFace, - jboolean backFaceNormalFlip, - jfloat polygonOffset, - jfloat polygonOffsetFactor) -{ - - GetDevice(); - - jfloat zbias = polygonOffset + polygonOffsetFactor; - DWORD zbias_w = 0; - /* - * DirectX support Z-bias from 0 to 16 only and the - * direction is opposite to OGL. If we pass negative - * Z-bias the polygon will not render at all. - * So we map -ve polygon offset to positive value - * and +ve offset to 0. (i.e. we don't support positive - * polygon offset) - */ - if (zbias <= -1) { - zbias_w = max(-zbias/50, 1); - - if (zbias_w > 16) { - zbias_w = 16; - } - } - - device->SetRenderState(D3DRS_DEPTHBIAS, zbias_w); - - if (cullFace == javax_media_j3d_PolygonAttributes_CULL_NONE) { - d3dCtx->cullMode = D3DCULL_NONE; - device->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE); - } else { - if (cullFace == javax_media_j3d_PolygonAttributes_CULL_BACK) { - d3dCtx->cullMode = D3DCULL_CW; - device->SetRenderState(D3DRS_CULLMODE, D3DCULL_CW); - } else { - d3dCtx->cullMode = D3DCULL_CCW; - device->SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW); - } - } - - if (polygonMode == javax_media_j3d_PolygonAttributes_POLYGON_POINT) { - d3dCtx->fillMode = D3DFILL_POINT; - device->SetRenderState(D3DRS_FILLMODE, D3DFILL_POINT); - } else if (polygonMode == javax_media_j3d_PolygonAttributes_POLYGON_LINE) { - d3dCtx->fillMode = D3DFILL_WIREFRAME; - device->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME); - } else { - d3dCtx->fillMode = D3DFILL_SOLID; - device->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID); - } - - /* - if (debug && !isBackFaceMessOutput && - (backFaceNormalFlip) && (cullFace != javax_media_j3d_PolygonAttributes_CULL_BACK)) { - isBackFaceMessOutput = true; - printf("BackFaceNormalFlip is not support !\n"); - } - */ -} - -/* -void printDepthFunc(jint func) -{ - DWORD value = D3DCMP_LESSEQUAL; - printf("DepthFunc: "); - switch(func) - { - case javax_media_j3d_RenderingAttributes_ALWAYS: - printf(" D3DCMP_ALWAYS\n"); break; - case javax_media_j3d_RenderingAttributes_NEVER: - printf(" D3DCMP_NEVER\n"); break; - case javax_media_j3d_RenderingAttributes_EQUAL: - printf(" D3DCMP_EQUAL\n"); break; - case javax_media_j3d_RenderingAttributes_NOT_EQUAL: - printf(" D3DCMP_NOTEQUAL\n"); break; - case javax_media_j3d_RenderingAttributes_LESS_OR_EQUAL: - printf(" D3DCMP_LESSEQUAL\n"); break; - case javax_media_j3d_RenderingAttributes_GREATER: - printf(" D3DCMP_GREATER\n"); break; - case javax_media_j3d_RenderingAttributes_GREATER_OR_EQUAL: - printf(" D3DCMP_GREATEREQUAL\n"); break; - default : - printf(" D3DCMP_LESSEQUAL\n"); break; - } -} - -*/ - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_resetLineAttributes( - JNIEnv *env, - jobject obj, - jlong ctx) -{ - // GetDevice(); - - // D3D don't support Line width - // glLineWidth(1); - // D3D9 doesnot support line Patterns - // @TODO must update this to use ID3DXLine Interface - /* - D3DLINEPATTERN pattern; - pattern.wRepeatFactor = 0; - pattern.wLinePattern = 0; - device->SetRenderState(D3DRS_LINEPATTERN, - *((LPDWORD) (&pattern))); - */ -} - - -// Note that some graphics card don't support it. -// In this case use RGB Emulation. -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateLineAttributes( - JNIEnv *env, - jobject obj, - jlong ctx, - jfloat lineWidth, - jint linePattern, - jint linePatternMask, - jint linePatternScaleFactor, - jboolean lineAntialiasing) -{ - // GetDevice(); - - //Alessandro - //D3DLINEPATTERN pattern; - - /* - if (lineWidth > 1) { - if (debug && !isLineWidthMessOutput) { - isLineWidthMessOutput = true; - printf("Line width > 1 not support !\n"); - } - } - */ - // 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) { - printf("Device not support line pattern !\n"); - isLinePatternMessOutput = false; - } - } - */ - /** alessandro - if (linePattern == javax_media_j3d_LineAttributes_PATTERN_DASH) { // dashed lines - pattern.wRepeatFactor = 1; - pattern.wLinePattern = 0x00ff; - } else if (linePattern == javax_media_j3d_LineAttributes_PATTERN_DOT) { // dotted lines - pattern.wRepeatFactor = 1; - pattern.wLinePattern = 0x0101; - } else if (linePattern == javax_media_j3d_LineAttributes_PATTERN_DASH_DOT) { // dash-dotted lines - pattern.wRepeatFactor = 1; - pattern.wLinePattern = 0x087f; - } else if (linePattern == javax_media_j3d_LineAttributes_PATTERN_USER_DEFINED) { // user-defined mask - pattern.wRepeatFactor = linePatternScaleFactor; - pattern.wLinePattern = (WORD) linePatternMask; - } - } - - device->SetRenderState(D3DRS_LINEPATTERN, - *((LPDWORD) (&pattern))); - **/ - /* - if (lineAntialiasing == JNI_TRUE) { - glEnable (GL_LINE_SMOOTH); - } else { - glDisable (GL_LINE_SMOOTH); - } - */ -} - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_resetPointAttributes( - JNIEnv *env, - jobject obj, - jlong ctx) -{ - GetDevice(); - - if (d3dCtx->pointSize != 1.0f) { - d3dCtx->pointSize = 1.0f; - device->SetRenderState(D3DRS_POINTSIZE, *((LPDWORD) &d3dCtx->pointSize)); - } -} - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updatePointAttributes( - JNIEnv *env, - jobject obj, - jlong ctx, - jfloat pointSize, - jboolean pointAntialiasing) -{ - // point Antialiasing not support by D3D - GetDevice(); - - if (pointSize < 1.0f) { - // We don't want to set pointSize unnecessary and - // trigger the software vertex processing mode in - // D3DVertexBuffer if possible. It is an error - // to set pointSize to zero under OGL. - pointSize = 1.0f; - } - - if (d3dCtx->pointSize != pointSize) { - device->SetRenderState(D3DRS_POINTSIZE, *((LPDWORD) - &pointSize)); - d3dCtx->pointSize = pointSize; - } -} - - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_resetTexCoordGeneration( - JNIEnv *env, - jobject obj, - jlong ctx) -{ - GetDevice(); - - int tus = d3dCtx->texUnitStage; - - if (tus >= d3dCtx->bindTextureIdLen) { - return; - } - - d3dCtx->texGenMode[tus] = TEX_GEN_NONE; - - if (d3dCtx->texTransformSet[tus]) { - device->SetTransform((D3DTRANSFORMSTATETYPE) - (D3DTS_TEXTURE0 + tus), - &(d3dCtx->texTransform[tus])); - } - - device->SetTextureStageState(tus, - D3DTSS_TEXCOORDINDEX, - D3DTSS_TCI_PASSTHRU); -} - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexCoordGeneration( - JNIEnv *env, - jobject obj, - jlong ctx, - jboolean enable, - jint genMode, - jint format, - jfloat planeSx, - jfloat planeSy, - jfloat planeSz, - jfloat planeSw, - jfloat planeTx, - jfloat planeTy, - jfloat planeTz, - jfloat planeTw, - jfloat planeRx, - jfloat planeRy, - jfloat planeRz, - jfloat planeRw, - jfloat planeQx, - jfloat planeQy, - jfloat planeQz, - jfloat planeQw, - jdoubleArray eyeToVworld) -{ - - D3DXMATRIX m; - jdouble *mv; - GetDevice(); - - int tus = d3dCtx->texUnitStage; - - - if (tus >= d3dCtx->bindTextureIdLen) { - return; - } - - if (!enable) { - device->SetTextureStageState(tus, - D3DTSS_TEXCOORDINDEX, - D3DTSS_TCI_PASSTHRU); - d3dCtx->texGenMode[tus] = TEX_GEN_NONE; - return; - } - - d3dCtx->texCoordFormat[tus] = coordFormatTable[format]; - -// printf("TexCoordGenerationRetained_updateNative texStage %d set Mode %d, format %d, texTransformSet %d\n", tus, genMode, format, d3dCtx->texTransformSet[tus]); - - switch (genMode) { - case javax_media_j3d_TexCoordGeneration_EYE_LINEAR: - // Generated Coordinate = p1'*x + p2'*y + p3'*z + p4'*w; - // where (p1', p2', p3', p4') = (p1 p2 p3 p4)*eyeToVworld - mv = (jdouble * ) env->GetPrimitiveArrayCritical(eyeToVworld, 0); - m._11 = planeSx*mv[0] + planeSy*mv[4] + planeSz*mv[8] + planeSw*mv[12]; - m._21 = planeSx*mv[1] + planeSy*mv[5] + planeSz*mv[9] + planeSw*mv[13]; - m._31 = planeSx*mv[2] + planeSy*mv[6] + planeSz*mv[10] + planeSw*mv[14]; - m._41 = planeSx*mv[3] + planeSy*mv[7] + planeSz*mv[11] + planeSw*mv[15]; - m._12 = planeTx*mv[0] + planeTy*mv[4] + planeTz*mv[8] + planeTw*mv[12]; - m._22 = planeTx*mv[1] + planeTy*mv[5] + planeTz*mv[9] + planeTw*mv[13]; - m._32 = planeTx*mv[2] + planeTy*mv[6] + planeTz*mv[10] + planeTw*mv[14]; - m._42 = planeTx*mv[3] + planeTy*mv[7] + planeTz*mv[11] + planeTw*mv[15]; - - - if (format >= javax_media_j3d_TexCoordGeneration_TEXTURE_COORDINATE_3) { - m._13 = planeRx*mv[0] + planeRy*mv[4] + planeRz*mv[8] + planeRw*mv[12]; - m._23 = planeRx*mv[1] + planeRy*mv[5] + planeRz*mv[9] + planeRw*mv[13]; - m._33 = planeRx*mv[2] + planeRy*mv[6] + planeRz*mv[10] + planeRw*mv[14]; - m._43 = planeRx*mv[3] + planeRy*mv[7] + planeRz*mv[11] + planeRw*mv[15]; - - if (format >= javax_media_j3d_TexCoordGeneration_TEXTURE_COORDINATE_4) { - m._14 = planeQx*mv[0] + planeQy*mv[4] + planeQz*mv[8] + planeQw*mv[12]; - m._24 = planeQx*mv[1] + planeQy*mv[5] + planeQz*mv[9] + planeQw*mv[13]; - m._34 = planeQx*mv[2] + planeQy*mv[6] + planeQz*mv[10] + planeQw*mv[14]; - m._44 = planeQx*mv[3] + planeQy*mv[7] + planeQz*mv[11] + planeQw*mv[15]; - } else { - m._14 = 0; - m._24 = 0; - m._34 = 0; - m._44 = 0; - } - } else { - m._13 = 0; - m._23 = 0; - m._33 = 0; - m._43 = 0; - m._14 = 0; - m._24 = 0; - m._34 = 0; - m._44 = 0; - } - - env->ReleasePrimitiveArrayCritical(eyeToVworld, mv, 0); - - if (d3dCtx->texTransformSet[tus]) { - device->MultiplyTransform((D3DTRANSFORMSTATETYPE) - (D3DTS_TEXTURE0 + tus) , &m); - } else { - device->SetTransform((D3DTRANSFORMSTATETYPE) - (D3DTS_TEXTURE0 + tus), &m); - d3dCtx->texTransformSet[tus] = true; - } - d3dCtx->texGenMode[tus] = TEX_EYE_LINEAR; - - break; - - case javax_media_j3d_TexCoordGeneration_SPHERE_MAP: - /* - The matrix has to scale and translate the texture coordinates - Since in sphere map Tx = Nx/2 + 0.5, Ty = Ny/2 + 0.5 - */ - m._11 = 0.5f; m._12 = 0.0f; m._13 = 0.0f; m._14 = 0.0f; - m._21 = 0.0f; m._22 = 0.5f; m._23 = 0.0f; m._24 = 0.0f; - m._31 = 0.0f; m._32 = 0.0f; m._33 = 1.0f; m._34 = 0.0f; - m._41 = 0.5f; m._42 = 0.5f; m._43 = 0.0f; m._44 = 1.0f; - - if (d3dCtx->texTransformSet[tus]) { - // If texture transform already set, multiple by this - // matrix. - device->MultiplyTransform((D3DTRANSFORMSTATETYPE) - (D3DTS_TEXTURE0 + tus) , &m); - } else { - device->SetTransform((D3DTRANSFORMSTATETYPE) - (D3DTS_TEXTURE0 + tus), &m); - d3dCtx->texTransformSet[tus] = true; - } - - d3dCtx->texGenMode[tus] = TEX_SPHERE_MAP; - break; - case javax_media_j3d_TexCoordGeneration_OBJECT_LINEAR: - // OBJECT_LINEAR not support by D3D, we'll do it ourselve. - d3dCtx->planeS[tus][0] = planeSx; - d3dCtx->planeS[tus][1] = planeSy; - d3dCtx->planeS[tus][2] = planeSz; - d3dCtx->planeS[tus][3] = planeSw; - d3dCtx->planeT[tus][0] = planeTx; - d3dCtx->planeT[tus][1] = planeTy; - d3dCtx->planeT[tus][2] = planeTz; - d3dCtx->planeT[tus][3] = planeTw; - d3dCtx->planeR[tus][0] = planeRx; - d3dCtx->planeR[tus][1] = planeRy; - d3dCtx->planeR[tus][2] = planeRz; - d3dCtx->planeR[tus][3] = planeRw; - d3dCtx->planeQ[tus][0] = planeQx; - d3dCtx->planeQ[tus][1] = planeQy; - d3dCtx->planeQ[tus][2] = planeQz; - d3dCtx->planeQ[tus][3] = planeQw; - d3dCtx->texGenMode[tus] = TEX_OBJ_LINEAR; - break; - case javax_media_j3d_TexCoordGeneration_NORMAL_MAP: - d3dCtx->texGenMode[tus] = TEX_NORMAL_MAP; - break; - case javax_media_j3d_TexCoordGeneration_REFLECTION_MAP: - d3dCtx->texGenMode[tus] = TEX_REFLECT_MAP; - break; - default: - printf("Unknown TexCoordinate Generation mode %d\n", genMode); - } -} - - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_resetTextureAttributes( - JNIEnv *env, - jobject obj, - jlong ctx) -{ - GetDevice(); - - int tus = d3dCtx->texUnitStage; - - if (tus >= d3dCtx->bindTextureIdLen) { - return; - } - - if (d3dCtx->texTransformSet[tus]) { - d3dCtx->texTransformSet[tus] = false; - device->SetTransform((D3DTRANSFORMSTATETYPE) - (D3DTS_TEXTURE0 + tus), - &identityMatrix); - } - - // perspCorrectionMode always turn on in DX8.0 if device support - - device->SetTextureStageState(tus, - D3DTSS_COLOROP, D3DTOP_SELECTARG1); - device->SetTextureStageState(tus, - D3DTSS_COLORARG1, D3DTA_TEXTURE); - device->SetTextureStageState(tus, - D3DTSS_ALPHAOP, D3DTOP_SELECTARG1); - device->SetTextureStageState(tus, - D3DTSS_ALPHAARG1, D3DTA_TEXTURE); -} - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTextureAttributes( - JNIEnv *env, - jobject obj, - jlong ctx, - jdoubleArray transform, jboolean isIdentityT, - jint textureMode, - jint perspCorrectionMode, - jfloat textureBlendColorRed, - jfloat textureBlendColorGreen, - jfloat textureBlendColorBlue, - jfloat textureBlendColorAlpha, - jint format) -{ - - D3DCOLOR textureBlendColor; - BOOL alphaDisable = FALSE; - - GetDevice(); - - int tus = d3dCtx->texUnitStage; - - if (tus >= d3dCtx->bindTextureIdLen) { - return; - } - - // perspCorrectionMode always turn on in DX8.0 if device support - - if (isIdentityT) { - d3dCtx->texTransformSet[tus] = false; - device->SetTransform((D3DTRANSFORMSTATETYPE) - (D3DTS_TEXTURE0 + tus), - &identityMatrix); - } else { - D3DXMATRIX *m = &(d3dCtx->texTransform[tus]); - jdouble *mx_ptr = reinterpret_cast<jdouble *>( - env->GetPrimitiveArrayCritical(transform, NULL)); - CopyTranspose((*m), mx_ptr); - - env->ReleasePrimitiveArrayCritical(transform, mx_ptr, 0); - /* - printf("set Tex Transform \n"); - printf("%f, %f, %f, %f\n", (*m)._11, (*m)._12, (*m)._13, (*m)._14); - printf("%f, %f, %f, %f\n", (*m)._21, (*m)._22, (*m)._23, (*m)._24); - printf("%f, %f, %f, %f\n", (*m)._31, (*m)._23, (*m)._33, (*m)._34); - printf("%f, %f, %f, %f\n", (*m)._41, (*m)._42, (*m)._43, (*m)._44); - */ - d3dCtx->texTransformSet[tus] = true; - d3dCtx->texTranslateSet[tus] = false; - device->SetTransform((D3DTRANSFORMSTATETYPE) - (D3DTS_TEXTURE0 + tus), m); - } - - /* set texture environment mode */ - - switch (textureMode) { - case javax_media_j3d_TextureAttributes_MODULATE: - switch (format) { - case J3D_RGBA: - case INTENSITY: - case LUMINANCE_ALPHA: - device->SetTextureStageState(tus, - D3DTSS_COLOROP, D3DTOP_MODULATE); - device->SetTextureStageState(tus, - D3DTSS_COLORARG1, D3DTA_TEXTURE); - device->SetTextureStageState(tus, - D3DTSS_COLORARG2, D3DTA_CURRENT); - device->SetTextureStageState(tus, - D3DTSS_ALPHAOP, D3DTOP_MODULATE); - device->SetTextureStageState(tus, - D3DTSS_ALPHAARG1, D3DTA_TEXTURE); - device->SetTextureStageState(tus, - D3DTSS_ALPHAARG2, D3DTA_CURRENT); - break; - case J3D_RGB: - case LUMINANCE: - device->SetTextureStageState(tus, - D3DTSS_COLOROP, D3DTOP_MODULATE); - device->SetTextureStageState(tus, - D3DTSS_COLORARG1, D3DTA_TEXTURE); - device->SetTextureStageState(tus, - D3DTSS_COLORARG2, D3DTA_CURRENT); - device->SetTextureStageState(tus, - D3DTSS_ALPHAOP, D3DTOP_DISABLE); - break; - case ALPHA: - device->SetTextureStageState(tus, - D3DTSS_COLOROP, D3DTOP_SELECTARG1); - device->SetTextureStageState(tus, - D3DTSS_COLORARG1, D3DTA_CURRENT); - device->SetTextureStageState(tus, - D3DTSS_ALPHAOP, D3DTOP_MODULATE); - device->SetTextureStageState(tus, - D3DTSS_ALPHAARG1, D3DTA_TEXTURE); - device->SetTextureStageState(tus, - D3DTSS_ALPHAARG2, D3DTA_CURRENT); - break; - default: - printf("Format %d not support\n", format); - } - break; - case javax_media_j3d_TextureAttributes_DECAL: - switch (format) { - case J3D_RGBA: - case INTENSITY: - case LUMINANCE_ALPHA: - device->SetTextureStageState(tus, - D3DTSS_COLOROP, D3DTOP_BLENDTEXTUREALPHA); - device->SetTextureStageState(tus, - D3DTSS_COLORARG1, D3DTA_TEXTURE); - device->SetTextureStageState(tus, - D3DTSS_COLORARG2, D3DTA_CURRENT); - device->SetTextureStageState(tus, - D3DTSS_ALPHAOP, D3DTOP_DISABLE); - break; - case J3D_RGB: - case LUMINANCE: - device->SetTextureStageState(tus, - D3DTSS_COLOROP, D3DTOP_SELECTARG1); - device->SetTextureStageState(tus, - D3DTSS_COLORARG1, D3DTA_TEXTURE); - device->SetTextureStageState(tus, - D3DTSS_ALPHAOP, D3DTOP_DISABLE); - break; - case ALPHA: - device->SetTextureStageState(tus, - D3DTSS_COLOROP, D3DTOP_SELECTARG1); - device->SetTextureStageState(tus, - D3DTSS_COLORARG1, D3DTA_CURRENT); - device->SetTextureStageState(tus, - D3DTSS_ALPHAOP, D3DTOP_SELECTARG1); - device->SetTextureStageState(tus, - D3DTSS_ALPHAARG1, D3DTA_TEXTURE); - break; - default: - printf("Format %d not support\n", format); - } - break; - case javax_media_j3d_TextureAttributes_BLEND: - // Two pass is needed for this mode, the first pass - // will - - textureBlendColor = D3DCOLOR_COLORVALUE(textureBlendColorRed, - textureBlendColorGreen, - textureBlendColorBlue, - textureBlendColorAlpha); - - device->SetRenderState(D3DRS_TEXTUREFACTOR, - *((LPDWORD) &textureBlendColor)); - - switch (format) { - case ALPHA: - device->SetTextureStageState(tus, - D3DTSS_COLOROP, D3DTOP_SELECTARG1); - device->SetTextureStageState(tus, - D3DTSS_COLORARG1, D3DTA_CURRENT); - device->SetTextureStageState(tus, - D3DTSS_ALPHAOP, D3DTOP_MODULATE); - device->SetTextureStageState(tus, - D3DTSS_ALPHAARG1, D3DTA_TEXTURE); - device->SetTextureStageState(tus, - D3DTSS_ALPHAARG2, D3DTA_CURRENT); - break; - case INTENSITY: - device->SetTextureStageState(tus, - D3DTSS_COLOROP, D3DTOP_BLENDTEXTUREALPHA); - device->SetTextureStageState(tus, - D3DTSS_COLORARG1, D3DTA_CURRENT); - device->SetTextureStageState(tus, - D3DTSS_COLORARG2, D3DTA_TFACTOR); - device->SetTextureStageState(tus, - D3DTSS_ALPHAOP, D3DTOP_BLENDTEXTUREALPHA); - device->SetTextureStageState(tus, - D3DTSS_ALPHAARG1, D3DTA_CURRENT); - device->SetTextureStageState(tus, - D3DTSS_ALPHAARG2, D3DTA_TFACTOR); - break; - case J3D_RGB: - case LUMINANCE: - device->SetTextureStageState(0, - D3DTSS_ALPHAOP, - D3DTOP_DISABLE); - alphaDisable = TRUE; - // fallthrough - case J3D_RGBA: - case LUMINANCE_ALPHA: - - if (!d3dCtx->deviceInfo->texLerpSupport) { - // Use two pass, first pass will enable specular and - // compute Cf*(1 - Ct), second pass will disable specular and - // comptue Cc*Ct. Note that multi-texturing is disable - // in this case, so stage 0 is always use. - device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE); - device->SetTextureStageState(0, D3DTSS_COLORARG1, - D3DTA_TEXTURE|D3DTA_COMPLEMENT); - device->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_CURRENT); - - if (!alphaDisable) { - device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE); - device->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE); - device->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_CURRENT); - } - } else { - device->SetTextureStageState(tus, D3DTSS_COLOROP, D3DTOP_LERP); - device->SetTextureStageState(tus, D3DTSS_COLORARG0, D3DTA_TEXTURE); - device->SetTextureStageState(tus, D3DTSS_COLORARG1, D3DTA_TFACTOR); - device->SetTextureStageState(tus, D3DTSS_COLORARG2, D3DTA_CURRENT); - - if (!alphaDisable) { - device->SetTextureStageState(tus, D3DTSS_ALPHAOP, D3DTOP_LERP); - device->SetTextureStageState(tus, D3DTSS_ALPHAARG0, D3DTA_TEXTURE); - device->SetTextureStageState(tus, D3DTSS_ALPHAARG1, D3DTA_TFACTOR); - device->SetTextureStageState(tus, D3DTSS_ALPHAARG2, D3DTA_CURRENT); - } - } - break; - default: - printf("Format %d not support\n", format); - } - - - break; - case javax_media_j3d_TextureAttributes_REPLACE: - switch (format) { - case J3D_RGBA: - case INTENSITY: - case LUMINANCE_ALPHA: - device->SetTextureStageState(tus, - D3DTSS_COLOROP, D3DTOP_SELECTARG1); - device->SetTextureStageState(tus, - D3DTSS_COLORARG1, D3DTA_TEXTURE); - device->SetTextureStageState(tus, - D3DTSS_ALPHAOP, D3DTOP_SELECTARG1); - device->SetTextureStageState(tus, - D3DTSS_ALPHAARG1, D3DTA_TEXTURE); - break; - case J3D_RGB: - case LUMINANCE: - device->SetTextureStageState(tus, - D3DTSS_COLOROP, D3DTOP_SELECTARG1); - device->SetTextureStageState(tus, - D3DTSS_COLORARG1, D3DTA_TEXTURE); - device->SetTextureStageState(tus, - D3DTSS_ALPHAOP, D3DTOP_DISABLE); - break; - case ALPHA: - device->SetTextureStageState(tus, - D3DTSS_COLOROP, D3DTOP_SELECTARG1); - device->SetTextureStageState(tus, - D3DTSS_COLORARG1, D3DTA_CURRENT); - device->SetTextureStageState(tus, - D3DTSS_ALPHAOP, D3DTOP_SELECTARG1); - device->SetTextureStageState(tus, - D3DTSS_ALPHAARG1, D3DTA_TEXTURE); - break; - default: - printf("Format %d not support\n", format); - } - break; - default: - // TEXTURE COMBINER case - break; - } -} - - -// // This procedure is invoked after Blend2Pass to restore the original value -// extern "C" JNIEXPORT -// void JNICALL Java_javax_media_j3d_NativePipeline_restoreBlend1Pass( -// JNIEnv *env, -// jobject obj, -// jlong ctx) -// { -// GetDevice(); - -// device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE); -// device->SetTextureStageState(0, D3DTSS_COLORARG1, -// D3DTA_TEXTURE|D3DTA_COMPLEMENT); -// device->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_CURRENT); - -// device->SetRenderState(D3DRS_SRCBLEND, -// d3dCtx->srcBlendFunc); -// device->SetRenderState(D3DRS_DESTBLEND, -// d3dCtx->dstBlendFunc); -// device->SetRenderState(D3DRS_ALPHABLENDENABLE, -// d3dCtx->blendEnable); -// } - - -// extern "C" JNIEXPORT -// void JNICALL Java_javax_media_j3d_NativePipeline_updateBlend2Pass( -// JNIEnv *env, -// jobject obj, -// jlong ctx) -// { -// GetDevice(); -// device->GetRenderState(D3DRS_SRCBLEND, -// &d3dCtx->srcBlendFunc); -// device->GetRenderState(D3DRS_DESTBLEND, -// &d3dCtx->dstBlendFunc); -// device->GetRenderState(D3DRS_ALPHABLENDENABLE, -// &d3dCtx->blendEnable); - -// device->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE); -// device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ONE); -// device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE); -// device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE); -// device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE); -// device->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_TFACTOR); -// } - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateCombiner( - JNIEnv *env, - jobject obj, - jlong ctx, - jint combineRgbMode, - jint combineAlphaMode, - jintArray combineRgbSrc, - jintArray combineAlphaSrc, - jintArray combineRgbFcn, - jintArray combineAlphaFcn, - jint combineRgbScale, - jint combineAlphaScale) -{ - - GetDevice(); - - DWORD ts = d3dCtx->texUnitStage; - - jint *rgbSrc = (jint *) env->GetPrimitiveArrayCritical(combineRgbSrc, NULL); - jint *alphaSrc = (jint *) env->GetPrimitiveArrayCritical(combineAlphaSrc, NULL); - jint *rgbFcn = (jint *) env->GetPrimitiveArrayCritical(combineRgbFcn, NULL); - jint *alphaFcn = (jint *) env->GetPrimitiveArrayCritical(combineAlphaFcn, NULL); - - - device->SetTextureStageState(ts, D3DTSS_COLOROP, - combineFunctionTable[(combineRgbMode << 2) + combineRgbScale - 1]); - - if (combineRgbMode != javax_media_j3d_TextureAttributes_COMBINE_INTERPOLATE) { - device->SetTextureStageState(ts, D3DTSS_COLORARG1, - combineSourceTable[(rgbSrc[0] << 2) + rgbFcn[0]]); - if (combineRgbMode != javax_media_j3d_TextureAttributes_COMBINE_REPLACE) { - device->SetTextureStageState(ts, D3DTSS_COLORARG2, - combineSourceTable[(rgbSrc[1] << 2) + rgbFcn[1]]); - } - } else { - device->SetTextureStageState(ts, D3DTSS_COLORARG1, - combineSourceTable[(rgbSrc[2] << 2) + rgbFcn[2]]); - device->SetTextureStageState(ts, D3DTSS_COLORARG2, - combineSourceTable[(rgbSrc[0] << 2) + rgbFcn[0]]); - device->SetTextureStageState(ts, D3DTSS_COLORARG0, - combineSourceTable[(rgbSrc[1] << 2) + rgbFcn[1]]); - } - - device->SetTextureStageState(ts, D3DTSS_ALPHAOP, - combineFunctionTable[(combineAlphaMode << 2) + combineAlphaScale - 1]); - - if (combineAlphaMode != javax_media_j3d_TextureAttributes_COMBINE_INTERPOLATE) { - device->SetTextureStageState(ts, D3DTSS_ALPHAARG1, - combineSourceTable[(alphaSrc[0] << 2) + alphaFcn[0]]); - if (combineAlphaMode != javax_media_j3d_TextureAttributes_COMBINE_REPLACE) { - device->SetTextureStageState(ts, D3DTSS_ALPHAARG2, - combineSourceTable[(alphaSrc[1] << 2) + alphaFcn[1]]); - } - } else { - device->SetTextureStageState(ts, D3DTSS_ALPHAARG0, - combineSourceTable[(alphaSrc[2] << 2) + alphaFcn[2]]); - device->SetTextureStageState(ts, D3DTSS_ALPHAARG1, - combineSourceTable[(alphaSrc[0] << 2) + alphaFcn[0]]); - device->SetTextureStageState(ts, D3DTSS_ALPHAARG2, - combineSourceTable[(alphaSrc[1] << 2) + alphaFcn[1]]); - } - - env->ReleasePrimitiveArrayCritical(combineRgbSrc, rgbSrc, 0); - env->ReleasePrimitiveArrayCritical(combineAlphaSrc, alphaSrc, 0); - env->ReleasePrimitiveArrayCritical(combineRgbFcn, rgbFcn, 0); - env->ReleasePrimitiveArrayCritical(combineAlphaFcn, alphaFcn, 0); -} - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTextureColorTable( - JNIEnv *env, - jobject obj, - jlong ctx, - jint numComponents, - jint colorTableSize, - jintArray textureColorTable) -{ - // Not support by D3D -} - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateMaterialColor( - JNIEnv *env, - jobject obj, - jlong ctx, - jfloat colorRed, - jfloat colorGreen, - jfloat colorBlue, - jfloat transparency) -{ - GetDevice(); - - d3dCtx->currentColor_r = colorRed; - d3dCtx->currentColor_g = colorGreen; - d3dCtx->currentColor_b = colorBlue; - d3dCtx->currentColor_a = transparency; - - d3dCtx->isLightEnable = false; - device->SetRenderState(D3DRS_LIGHTING, false); - if (d3dCtx->resetColorTarget) { - device->SetRenderState(D3DRS_DIFFUSEMATERIALSOURCE, - D3DMCS_COLOR1); - device->SetRenderState(D3DRS_SPECULARMATERIALSOURCE, - D3DMCS_MATERIAL); - device->SetRenderState(D3DRS_AMBIENTMATERIALSOURCE, - D3DMCS_MATERIAL); - device->SetRenderState(D3DRS_EMISSIVEMATERIALSOURCE, - D3DMCS_MATERIAL); - d3dCtx->resetColorTarget = false; - } -} - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateMaterial( - JNIEnv *env, - jobject obj, - jlong ctx, - jfloat colorRed, - jfloat colorGreen, - jfloat colorBlue, - jfloat transparency, - jfloat aRed, - jfloat aGreen, - jfloat aBlue, - jfloat eRed, - jfloat eGreen, - jfloat eBlue, - jfloat dRed, - jfloat dGreen, - jfloat dBlue, - jfloat sRed, - jfloat sGreen, - jfloat sBlue, - jfloat shininess, - jint colorTarget, - jboolean lightEnable) -{ - D3DMATERIAL9 material; - - GetDevice(); - - switch (colorTarget) { - case javax_media_j3d_Material_DIFFUSE: - device->SetRenderState(D3DRS_DIFFUSEMATERIALSOURCE, - D3DMCS_COLOR1); - break; - case javax_media_j3d_Material_SPECULAR: - device->SetRenderState(D3DRS_SPECULARMATERIALSOURCE, - D3DMCS_COLOR1); - d3dCtx->resetColorTarget = true; - break; - case javax_media_j3d_Material_AMBIENT: - device->SetRenderState(D3DRS_AMBIENTMATERIALSOURCE, - D3DMCS_COLOR1); - d3dCtx->resetColorTarget = true; - break; - case javax_media_j3d_Material_AMBIENT_AND_DIFFUSE: - device->SetRenderState(D3DRS_AMBIENTMATERIALSOURCE, - D3DMCS_COLOR1); - device->SetRenderState(D3DRS_DIFFUSEMATERIALSOURCE, - D3DMCS_COLOR1); - d3dCtx->resetColorTarget = true; - break; - case javax_media_j3d_Material_EMISSIVE: - device->SetRenderState(D3DRS_EMISSIVEMATERIALSOURCE, - D3DMCS_COLOR1); - d3dCtx->resetColorTarget = true; - break; - default: - printf("Material updateNative: Uknown colorTarget %d\n", colorTarget); - } - - material.Power = shininess; - - CopyColor(material.Emissive, eRed, eGreen, eBlue, 1.0f); - CopyColor(material.Ambient, aRed, aGreen, aBlue, 1.0f); - CopyColor(material.Specular, sRed, sGreen, sBlue, 1.0f); - - d3dCtx->currentColor_a = transparency; - - if (lightEnable) { - d3dCtx->currentColor_r = dRed; - d3dCtx->currentColor_g = dGreen; - d3dCtx->currentColor_b = dBlue; - - CopyColor(material.Diffuse, dRed, dGreen, dBlue, - transparency); - - } else { - d3dCtx->currentColor_r = colorRed; - d3dCtx->currentColor_g = colorGreen; - d3dCtx->currentColor_b = colorBlue; - - CopyColor(material.Diffuse, colorRed, colorGreen, - colorBlue, transparency); - } - - - d3dCtx->isLightEnable = lightEnable; - device->SetRenderState(D3DRS_LIGHTING, lightEnable); - device->SetMaterial(&material); -} - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_resetTransparency( - JNIEnv *env, - jobject obj, - jlong ctx, - jint geometryType, - jint polygonMode, - jboolean lineAA, - jboolean pointAA) -{ - GetDevice(); - - // Line/Point Antialiasing not support - - /* - if (((((geometryType & LINE) != 0) || polygonMode == POLYGON_LINE) - && lineAA == JNI_TRUE) || - ((((geometryType & _POINT) != 0) || polygonMode == POLYGON_POINT) - && pointAA == JNI_TRUE)) { - device->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE); - device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA); - device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA); - } else { - */ - device->SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE); - // } -} - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTransparencyAttributes( - JNIEnv *env, - jobject tr, - jlong ctx, - jfloat transparency, - jint geometryType, - jint polygonMode, - jboolean lineAA, - jboolean pointAA, - jint transparencyMode, - jint srcBlendFunction, - jint dstBlendFunction) -{ - - GetDevice(); - - // No screen door transparency in D3D, use BLENDED - // Don't know how to use STIPPLEDALPHA either. - /* - if (transparencyMode != TRANS_SCREEN_DOOR) { - device->SetRenderState(D3DRS_STIPPLEDALPHA, FALSE); - } else { - device->SetRenderState(D3DRS_STIPPLEDALPHA, TRUE); - } - */ - - if (transparencyMode < javax_media_j3d_TransparencyAttributes_NONE) { - /* - ((((geometryType & LINE) != 0) || polygonMode == POLYGON_LINE) - && lineAA == JNI_TRUE) || - ((((geometryType & _POINT) != 0) || polygonMode == POLYGON_POINT) - && pointAA == JNI_TRUE)) { - */ - device->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE); - device->SetRenderState(D3DRS_SRCBLEND, - blendFunctionTable[srcBlendFunction]); - device->SetRenderState(D3DRS_DESTBLEND, - blendFunctionTable[dstBlendFunction]); - } else { - device->SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE); - } -} - - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_resetColoringAttributes( - JNIEnv *env, - jobject obj, - jlong ctx, - jfloat colorRed, - jfloat colorGreen, - jfloat colorBlue, - jfloat transparency, - jboolean lightEnable) -{ - - GetDevice(); - - if (!lightEnable) { - d3dCtx->currentColor_r = colorRed; - d3dCtx->currentColor_g = colorGreen; - d3dCtx->currentColor_b = colorBlue; - d3dCtx->currentColor_a = transparency; - } - device->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD); - // No line smooth in D3D -} - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateColoringAttributes( - JNIEnv *env, - jobject obj, - jlong ctx, - jfloat dRed, - jfloat dGreen, - jfloat dBlue, - jfloat colorRed, - jfloat colorGreen, - jfloat colorBlue, - jfloat transparency, - jboolean lightEnable, - jint shadeModel) -{ - - GetDevice(); - - d3dCtx->currentColor_a = transparency; - if (lightEnable) { - d3dCtx->currentColor_r = dRed; - d3dCtx->currentColor_g = dGreen; - d3dCtx->currentColor_b = dBlue; - } else { - d3dCtx->currentColor_r = colorRed; - d3dCtx->currentColor_g = colorGreen; - d3dCtx->currentColor_b = colorBlue; - } - - - if (shadeModel == javax_media_j3d_ColoringAttributes_SHADE_FLAT) { - device->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_FLAT); - } else { - device->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD); - } -} - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_resetTextureNative( - JNIEnv *env, - jobject obj, - jlong ctx, - jint texUnitIndex) -{ - GetDevice(); - - if (texUnitIndex < 0) { - texUnitIndex = 0; - } - - d3dCtx->texUnitStage = texUnitIndex; - - if (texUnitIndex >= d3dCtx->bindTextureIdLen) { - return; - } - device->SetTexture(texUnitIndex, NULL); - d3dCtx->bindTextureId[texUnitIndex] = -1; - - if (d3dCtx->texTransformSet[texUnitIndex]) { - d3dCtx->texTransformSet[texUnitIndex] = false; - device->SetTransform((D3DTRANSFORMSTATETYPE) - (D3DTS_TEXTURE0 + texUnitIndex), - &identityMatrix); - } - d3dCtx->texGenMode[texUnitIndex] = TEX_GEN_NONE; - device->SetTextureStageState(texUnitIndex, - D3DTSS_TEXCOORDINDEX, - D3DTSS_TCI_PASSTHRU); - device->SetTextureStageState(texUnitIndex, - D3DTSS_COLOROP, D3DTOP_SELECTARG1); - device->SetTextureStageState(texUnitIndex, - D3DTSS_COLORARG1, D3DTA_TEXTURE); - device->SetTextureStageState(texUnitIndex, - D3DTSS_ALPHAOP, D3DTOP_SELECTARG1); - device->SetTextureStageState(texUnitIndex, - D3DTSS_ALPHAARG1, D3DTA_TEXTURE); -} - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_bindTexture2D( - JNIEnv *env, - jobject obj, - jlong ctx, - jint objectId, - jboolean enable) -{ - GetDevice(); - - if (d3dCtx->texUnitStage >= d3dCtx->bindTextureIdLen) { - return; - } - - if (!enable) { - device->SetTexture(d3dCtx->texUnitStage, NULL); - d3dCtx->bindTextureId[d3dCtx->texUnitStage] = -1; - } else { - if (d3dCtx->bindTextureId[d3dCtx->texUnitStage] == objectId) { - return; - } - - if (objectId >= d3dCtx->textureTableLen) { - DWORD i; - DWORD len = max(objectId+1, d3dCtx->textureTableLen << 1); - LPDIRECT3DTEXTURE9 *newTable = (LPDIRECT3DTEXTURE9 *) - malloc(sizeof(LPDIRECT3DTEXTURE9) * len); - - if (newTable == NULL) { - printf("Not enough memory to alloc texture table of size %d.\n", len); - return; - } - for (i=0; i < d3dCtx->textureTableLen; i++) { - newTable[i] = d3dCtx->textureTable[i]; - } - for (i=d3dCtx->textureTableLen; i < len; i++) { - newTable[i] = NULL; - } - d3dCtx->textureTableLen = len; - SafeFree(d3dCtx->textureTable); - d3dCtx->textureTable = newTable; - } - - d3dCtx->bindTextureId[d3dCtx->texUnitStage] = objectId; - if (d3dCtx->textureTable[objectId] != NULL) { - device->SetTexture(d3dCtx->texUnitStage, - d3dCtx->textureTable[objectId]); - } - // else we will bind this in updateTextureImage - } -} - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture2DFilterModes( - JNIEnv *env, - jobject obj, - jlong ctx, - jint minFilter, - jint magFilter) -{ - GetDevice(); - - - if (d3dCtx->texUnitStage >= d3dCtx->bindTextureIdLen) { - return; - } - - d3dCtx->texLinearMode = false; - - /* set texture min filter */ - switch (minFilter) { - case javax_media_j3d_Texture_FASTEST: - case javax_media_j3d_Texture_BASE_LEVEL_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->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->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->SetSamplerState (d3dCtx->texUnitStage, - D3DSAMP_MINFILTER, D3DTEXF_LINEAR); - device->SetSamplerState (d3dCtx->texUnitStage, - D3DSAMP_MIPFILTER, D3DTEXF_LINEAR); - break; - } - - /* set texture mag filter */ - switch (magFilter) { - case javax_media_j3d_Texture_FASTEST: - case javax_media_j3d_Texture_BASE_LEVEL_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->SetSamplerState (d3dCtx->texUnitStage, - D3DSAMP_MAGFILTER, D3DTEXF_LINEAR); - break; - } - - return; -} - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture2DLodRange( - JNIEnv *env, - jobject obj, - jlong ctx, - jint baseLevel, - jint maximumLevel, - jfloat minimumLod, - jfloat maximumLod) -{ -} - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture2DLodOffset( - JNIEnv *env, - jobject obj, - jlong ctx, - jfloat lodOffsetS, - jfloat lodOffsetT, - jfloat lodOffsetR) -{ - /* not supported */ -} - -void updateTextureBoundary(JNIEnv *env, - jobject obj, - jlong ctx, - jint boundaryModeS, - jint boundaryModeT, - jint boundaryModeR, - jfloat boundaryRed, - jfloat boundaryGreen, - jfloat boundaryBlue, - jfloat boundaryAlpha) -{ - GetDevice(); - - - if (d3dCtx->texUnitStage >= d3dCtx->bindTextureIdLen) { - return; - } - - /* set texture wrap parameter */ - BOOL useBorderMode = FALSE; - - // D3D ignored border color in CLAMP mode. - // Instead D3D use Border color in D3DTADDRESS_BORDER only. - // So we approximate the effect by using D3DTADDRESS_BORDER - // mode if linear filtering mode is used. - - switch (boundaryModeS) { - case javax_media_j3d_Texture_WRAP: - device->SetSamplerState (d3dCtx->texUnitStage, - D3DSAMP_ADDRESSU, - D3DTADDRESS_WRAP); - break; - case javax_media_j3d_Texture_CLAMP: - if (!d3dCtx->texLinearMode || !d3dCtx->deviceInfo->texBorderModeSupport) { - device->SetSamplerState (d3dCtx->texUnitStage, - D3DSAMP_ADDRESSU, - D3DTADDRESS_CLAMP); - } else { - useBorderMode = TRUE; - device->SetSamplerState (d3dCtx->texUnitStage, - D3DSAMP_ADDRESSU, - D3DTADDRESS_BORDER); - } - break; - } - - switch (boundaryModeT) { - case javax_media_j3d_Texture_WRAP: - device->SetSamplerState (d3dCtx->texUnitStage, - D3DSAMP_ADDRESSV, - D3DTADDRESS_WRAP); - break; - case javax_media_j3d_Texture_CLAMP: - if (!d3dCtx->texLinearMode || !d3dCtx->deviceInfo->texBorderModeSupport) { - device->SetSamplerState (d3dCtx->texUnitStage, - D3DSAMP_ADDRESSV, - D3DTADDRESS_CLAMP); - } else { - useBorderMode = TRUE; - device->SetSamplerState (d3dCtx->texUnitStage, - D3DSAMP_ADDRESSV, - D3DTADDRESS_BORDER); - } - break; - } - - if (boundaryModeR >= 0) { - switch (boundaryModeR) { - case javax_media_j3d_Texture_WRAP: - device->SetSamplerState (d3dCtx->texUnitStage, - D3DSAMP_ADDRESSW, - D3DTADDRESS_WRAP); - break; - case javax_media_j3d_Texture_CLAMP: - if (!d3dCtx->texLinearMode || !d3dCtx->deviceInfo->texBorderModeSupport) { - device->SetSamplerState (d3dCtx->texUnitStage, - D3DSAMP_ADDRESSW, - D3DTADDRESS_CLAMP); - } else { - useBorderMode = TRUE; - device->SetSamplerState (d3dCtx->texUnitStage, - D3DSAMP_ADDRESSW, - D3DTADDRESS_BORDER); - } - break; - } - } - - if (useBorderMode) { - D3DCOLOR color = D3DCOLOR_COLORVALUE(boundaryRed, boundaryGreen, - boundaryBlue, boundaryAlpha); - - device->SetSamplerState (d3dCtx->texUnitStage, - D3DSAMP_BORDERCOLOR, - *((DWORD *) &color)); - } -} - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture2DBoundary( - JNIEnv *env, - jobject obj, - jlong ctx, - jint boundaryModeS, - jint boundaryModeT, - jfloat boundaryRed, - jfloat boundaryGreen, - jfloat boundaryBlue, - jfloat boundaryAlpha) -{ - updateTextureBoundary(env, obj, ctx, boundaryModeS, - boundaryModeT, -1, - boundaryRed, boundaryGreen, - boundaryBlue, boundaryAlpha); - -} - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture2DSharpenFunc( - JNIEnv *env, - jobject obj, - jlong ctx, - jint numPts, - jfloatArray pts) -{ -} - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture2DFilter4Func( - JNIEnv *env, - jobject obj, - jlong ctx, - jint numPts, - jfloatArray pts) -{ -} - - -void updateTextureAnisotropicFilter( - jlong ctx, - jfloat degree) -{ - GetDevice(); - - if (degree > 1) { - DWORD deg = degree + 0.5f; // round float to int - // This will overwrite the previous setting in - // updateTextureFilterModes() - device->SetSamplerState (d3dCtx->texUnitStage, - D3DSAMP_MINFILTER, - D3DTEXF_ANISOTROPIC); - device->SetSamplerState (d3dCtx->texUnitStage, - D3DSAMP_MAGFILTER, - D3DTEXF_ANISOTROPIC); - device->SetSamplerState (d3dCtx->texUnitStage, - D3DSAMP_MIPFILTER, - D3DTEXF_ANISOTROPIC); - - device->SetSamplerState (d3dCtx->texUnitStage, - D3DSAMP_MAXANISOTROPY, deg); - } else { - // updateTextureFilterModes() will always invoke before - // updateTextureAnisotropicFilter() to set Filter mode - // correctly. - device->SetSamplerState (d3dCtx->texUnitStage, - D3DSAMP_MAXANISOTROPY, 1); - } - -} - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture2DAnisotropicFilter( - JNIEnv *env, - jobject obj, - jlong ctx, - jfloat degree) -{ - updateTextureAnisotropicFilter(ctx, degree); -} - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture3DAnisotropicFilter( - JNIEnv *env, - jobject obj, - jlong ctx, - jfloat degree) -{ - GetCtx(); - - if (d3dCtx->deviceInfo->maxTextureDepth > 0) { - updateTextureAnisotropicFilter(ctx, degree); - } - -} - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTextureCubeMapAnisotropicFilter( - JNIEnv *env, - jobject obj, - jlong ctx, - jfloat degree) -{ - updateTextureAnisotropicFilter(ctx, degree); -} - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture2DSubImage( - JNIEnv *env, - jobject obj, - jlong ctx, - jint level, - jint xoffset, - jint yoffset, - jint textureFormat, - jint imageFormat, - jint imgXOffset, - jint imgYOffset, - jint tilew, - jint width, - jint height, - jint dataType, - jobject data, - jboolean useAutoMipMap) -{ - /* Note: useAutoMipMap is not use for SubImage in the d3d pipe */ - GetDevice(); - - if (d3dCtx->texUnitStage >= d3dCtx->bindTextureIdLen) { - return; - } - - INT currBindTex = d3dCtx->bindTextureId[d3dCtx->texUnitStage]; - - if ((currBindTex < 1) || - (currBindTex >= d3dCtx->textureTableLen)) { - if (debug) { - printf("Internal Error : UpdateTextureSubImage bind texture ID %d, textureTableLen %d, texUnitStage = %d \n", currBindTex, d3dCtx->textureTableLen, d3dCtx->texUnitStage); - } - return; - } - - LPDIRECT3DTEXTURE9 surf = d3dCtx->textureTable[currBindTex]; - - if ((surf == NULL) || - ((level > 0) && (!d3dCtx->deviceInfo->supportMipmap))) { - return; - } - - void *imageObjPtr; - jbyte *dataBuffer; - - if((dataType == IMAGE_DATA_TYPE_BYTE_ARRAY) || - (dataType == IMAGE_DATA_TYPE_INT_ARRAY)) { - imageObjPtr = (void *) env->GetPrimitiveArrayCritical((jarray)data, NULL); - } - else { - imageObjPtr = (void *)env->GetDirectBufferAddress(data); - } - - // update Image data - switch (imageFormat) { - case IMAGE_FORMAT_BYTE_BGR: - case IMAGE_FORMAT_BYTE_RGB: - case IMAGE_FORMAT_BYTE_ABGR: - case IMAGE_FORMAT_BYTE_RGBA: - case IMAGE_FORMAT_BYTE_LA: - case IMAGE_FORMAT_BYTE_GRAY: - case IMAGE_FORMAT_INT_BGR: - case IMAGE_FORMAT_INT_RGB: - case IMAGE_FORMAT_INT_ARGB: - dataBuffer = (jbyte *) imageObjPtr; - copyDataToSurface(imageFormat, textureFormat, xoffset, yoffset, - imgXOffset, imgYOffset, - width, height, tilew, dataBuffer, - surf, level); - break; - case IMAGE_FORMAT_USHORT_GRAY: - default: - throwAssert(env, "updateTexture2DSubImage : imageFormat illegal format"); - return; - } - - if((dataType == IMAGE_DATA_TYPE_BYTE_ARRAY) || - (dataType == IMAGE_DATA_TYPE_INT_ARRAY)) { - env->ReleasePrimitiveArrayCritical((jarray)data, imageObjPtr, 0); - } - -} - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture2DImage( - JNIEnv *env, - jobject obj, - jlong ctx, - jint numLevels, - jint level, - jint textureFormat, - jint imageFormat, - jint width, - jint height, - jint boundaryWidth, - jint dataType, - jobject data, - jboolean useAutoMipMap) -{ - GetDevice(); - - if (d3dCtx->texUnitStage >= d3dCtx->bindTextureIdLen) { - if (debug) { - printf("Internal Error: texUnitState %d, bindTextureIDLen %d\n", - d3dCtx->texUnitStage, d3dCtx->bindTextureIdLen); - } - return; - } - - INT currBindTex = d3dCtx->bindTextureId[d3dCtx->texUnitStage]; - - if ((currBindTex < 1) || - (currBindTex >= d3dCtx->textureTableLen)) { - if (debug) { - printf("Internal Error : UpdateTextureImage bind texture ID %d, textureTableLen %d, texUnitStage = %d \n", currBindTex, d3dCtx->textureTableLen, d3dCtx->texUnitStage); - } - return; - } - - LPDIRECT3DTEXTURE9 surf = d3dCtx->textureTable[currBindTex]; - - if (level == 0) { - if (surf != NULL) { - // see if no. of mipmap level change - - if (surf->GetLevelCount() != numLevels) { - d3dCtx->freeResource(surf); - d3dCtx->textureTable[currBindTex] = NULL; - surf = NULL; - } - } - - if (surf == NULL) { - // Need to create surface - surf = createTextureSurface(d3dCtx, numLevels, textureFormat, - width, height, useAutoMipMap); - - if (surf == NULL) { - return; - } - - d3dCtx->textureTable[currBindTex] = surf; - } - } else { - if (surf == NULL) { - return; - } - } - - if ((level > 0) && (!d3dCtx->deviceInfo->supportMipmap)) { - if (debug) { - printf("mipmap not support\n"); - } - return; - } - - // update Image data - if (data != NULL) { - void *imageObjPtr; - jbyte *dataBuffer; - - if((dataType == IMAGE_DATA_TYPE_BYTE_ARRAY) || - (dataType == IMAGE_DATA_TYPE_INT_ARRAY)) { - imageObjPtr = (void *) env->GetPrimitiveArrayCritical((jarray)data, NULL); - } - else { - imageObjPtr = (void *)env->GetDirectBufferAddress(data); - } - - switch (imageFormat) { - case IMAGE_FORMAT_BYTE_BGR: - case IMAGE_FORMAT_BYTE_RGB: - case IMAGE_FORMAT_BYTE_ABGR: - case IMAGE_FORMAT_BYTE_RGBA: - case IMAGE_FORMAT_BYTE_LA: - case IMAGE_FORMAT_BYTE_GRAY: - case IMAGE_FORMAT_INT_BGR: - case IMAGE_FORMAT_INT_RGB: - case IMAGE_FORMAT_INT_ARGB: - dataBuffer = (jbyte *) imageObjPtr; - copyDataToSurface(imageFormat, textureFormat, 0, 0, 0, 0, - width, height, width, dataBuffer, - surf, level); - break; - case IMAGE_FORMAT_USHORT_GRAY: - default: - throwAssert(env, "updateTexture2DImage : imageFormat illegal format"); - return; - } - - if((dataType == IMAGE_DATA_TYPE_BYTE_ARRAY) || - (dataType == IMAGE_DATA_TYPE_INT_ARRAY)) { - env->ReleasePrimitiveArrayCritical((jarray)data, imageObjPtr, 0); - } - } - device->SetTexture(d3dCtx->texUnitStage, surf); -} - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_bindTexture3D( - JNIEnv *env, - jobject obj, - jlong ctx, - jint objectId, - jboolean enable) -{ - GetDevice(); - - if ((d3dCtx->deviceInfo->maxTextureDepth <= 0) || - (d3dCtx->texUnitStage >= d3dCtx->bindTextureIdLen)) { - return; - } - - if (!enable) { - device->SetTexture(d3dCtx->texUnitStage, NULL); - d3dCtx->bindTextureId[d3dCtx->texUnitStage] = -1; - } else { - if (d3dCtx->bindTextureId[d3dCtx->texUnitStage] == objectId) { - return; - } - if (objectId >= d3dCtx->volumeTableLen) { - DWORD i; - DWORD len = max(objectId+1, d3dCtx->volumeTableLen << 1); - LPDIRECT3DVOLUMETEXTURE9 *newTable = (LPDIRECT3DVOLUMETEXTURE9 *) - malloc(sizeof(LPDIRECT3DVOLUMETEXTURE9) * len); - - if (newTable == NULL) { - printf("Not enough memory to alloc volume texture table of size %d.\n", len); - return; - } - for (i=0; i < d3dCtx->volumeTableLen; i++) { - newTable[i] = d3dCtx->volumeTable[i]; - } - for (i=d3dCtx->volumeTableLen; i < len; i++) { - newTable[i] = NULL; - } - d3dCtx->volumeTableLen = len; - SafeFree(d3dCtx->volumeTable); - d3dCtx->volumeTable = newTable; - } - - d3dCtx->bindTextureId[d3dCtx->texUnitStage] = objectId; - if (d3dCtx->volumeTable[objectId] != NULL) { - device->SetTexture(d3dCtx->texUnitStage, - d3dCtx->volumeTable[objectId]); - } - // else we will bind this in updateTextureImage - } - -} - - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture3DFilterModes( - JNIEnv *env, - jobject obj, - jlong ctx, - jint minFilter, - jint magFilter) -{ - GetCtx(); - - if (d3dCtx->deviceInfo->maxTextureDepth > 0) { - Java_javax_media_j3d_NativePipeline_updateTexture2DFilterModes( - env, obj, ctx, minFilter, magFilter); - } -} - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture3DLodRange( - JNIEnv *env, - jobject obj, - jlong ctx, - jint baseLevel, - jint maximumLevel, - jfloat minimumLod, - jfloat maximumLod) -{ - // Not support -} - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture3DLodOffset( - JNIEnv *env, - jobject obj, - jlong ctx, - jfloat lodOffsetS, - jfloat lodOffsetT, - jfloat lodOffsetR) -{ - /* not supported */ -} - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture3DBoundary( - JNIEnv *env, - jobject obj, - jlong ctx, - jint boundaryModeS, - jint boundaryModeT, - jint boundaryModeR, - jfloat boundaryRed, - jfloat boundaryGreen, - jfloat boundaryBlue, - jfloat boundaryAlpha) -{ - - GetCtx(); - - if (d3dCtx->deviceInfo->maxTextureDepth > 0) { - - updateTextureBoundary( - env, obj, ctx, - boundaryModeS, - boundaryModeT, - boundaryModeR, - boundaryRed, - boundaryGreen, - boundaryBlue, - boundaryAlpha); - } -} - - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture3DImage( - JNIEnv *env, - jobject obj, - jlong ctx, - jint numLevels, - jint level, - jint textureFormat, - jint imageFormat, - jint width, - jint height, - jint depth, - jint boundaryWidth, - jint dataType, - jobject data, - jboolean useAutoMipMap) -{ - GetDevice(); - - if (d3dCtx->deviceInfo->maxTextureDepth <= 0) { - return; - } - - if (d3dCtx->texUnitStage >= d3dCtx->bindTextureIdLen) { - if (debug) { - printf("Internal Error: texUnitState %d, bindTextureIDLen %d\n", - d3dCtx->texUnitStage, d3dCtx->bindTextureIdLen); - } - return; - } - - - INT currBindTex = d3dCtx->bindTextureId[d3dCtx->texUnitStage]; - - if ((currBindTex < 1) || - (currBindTex >= d3dCtx->volumeTableLen)) { - if (debug) { - printf("Internal Error : UpdateTexture3DImage bind texture ID %d, volumeTableLen %d, texUnitStage = %d \n", currBindTex, d3dCtx->volumeTableLen, d3dCtx->texUnitStage); - } - return; - } - - LPDIRECT3DVOLUMETEXTURE9 surf = d3dCtx->volumeTable[currBindTex]; - - if (level == 0) { - if (surf != NULL) { - // see if no. of mipmap level change - - if (surf->GetLevelCount() != numLevels) { - d3dCtx->freeResource(surf); - d3dCtx->volumeTable[currBindTex] = NULL; - surf = NULL; - } - } - - if (surf == NULL) { - surf = createVolumeTexture(d3dCtx, numLevels, textureFormat, - width, height, depth, useAutoMipMap); - if (surf == NULL) { - return; - } - - d3dCtx->volumeTable[currBindTex] = surf; - } - } else { - if (surf == NULL) { - return; - } - } - - if ((level > 0) && (!d3dCtx->deviceInfo->supportMipmap)) { - if (debug) { - printf("mipmap not support\n"); - } - return; - } - - // update Image data - if (data != NULL) { - void *imageObjPtr; - jbyte *dataBuffer; - - if((dataType == IMAGE_DATA_TYPE_BYTE_ARRAY) || - (dataType == IMAGE_DATA_TYPE_INT_ARRAY)) { - imageObjPtr = (void *) env->GetPrimitiveArrayCritical((jarray)data, NULL); - } - else { - imageObjPtr = (void *)env->GetDirectBufferAddress(data); - } - - switch (imageFormat) { - case IMAGE_FORMAT_BYTE_BGR: - case IMAGE_FORMAT_BYTE_RGB: - case IMAGE_FORMAT_BYTE_ABGR: - case IMAGE_FORMAT_BYTE_RGBA: - case IMAGE_FORMAT_BYTE_LA: - case IMAGE_FORMAT_BYTE_GRAY: - case IMAGE_FORMAT_INT_BGR: - case IMAGE_FORMAT_INT_RGB: - case IMAGE_FORMAT_INT_ARGB: - dataBuffer = (jbyte *) imageObjPtr; - copyDataToVolume(imageFormat, textureFormat, 0, 0, 0, 0, 0, 0, - width, height, depth, width, height, dataBuffer, - surf, level); - break; - case IMAGE_FORMAT_USHORT_GRAY: - default: - throwAssert(env, "updateTexture3DImage : imageFormat illegal format"); - return; - } - - if((dataType == IMAGE_DATA_TYPE_BYTE_ARRAY) || - (dataType == IMAGE_DATA_TYPE_INT_ARRAY)) { - env->ReleasePrimitiveArrayCritical((jarray)data, imageObjPtr, 0); - } - } - device->SetTexture(d3dCtx->texUnitStage, surf); - -} - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture3DSubImage( - JNIEnv *env, - jobject obj, - jlong ctx, - jint level, - jint xoffset, - jint yoffset, - jint zoffset, - jint textureFormat, - jint imageFormat, - jint imgXOffset, - jint imgYOffset, - jint imgZOffset, - jint tilew, - jint tileh, - jint width, - jint height, - jint depth, - jint dataType, - jobject data, - jboolean useAutoMipMap) -{ - /* Note: useAutoMipMap is not use for SubImage in the d3d pipe */ - - GetDevice(); - - if ((d3dCtx->deviceInfo->maxTextureDepth <= 0) || - (d3dCtx->texUnitStage >= d3dCtx->bindTextureIdLen)) { - return; - } - - INT currBindTex = d3dCtx->bindTextureId[d3dCtx->texUnitStage]; - - if ((currBindTex < 1) || - (currBindTex >= d3dCtx->volumeTableLen)) { - if (debug) { - printf("Internal Error : UpdateTexture3DSubImage bind texture ID %d, volumeableLen %d, texUnitStage = %d \n", currBindTex, d3dCtx->volumeTableLen, d3dCtx->texUnitStage); - } - return; - } - - LPDIRECT3DVOLUMETEXTURE9 surf = d3dCtx->volumeTable[currBindTex]; - - if ((surf == NULL) || - ((level > 0) && (!d3dCtx->deviceInfo->supportMipmap))) { - return; - } - - void *imageObjPtr; - jbyte *dataBuffer; - - if((dataType == IMAGE_DATA_TYPE_BYTE_ARRAY) || - (dataType == IMAGE_DATA_TYPE_INT_ARRAY)) { - imageObjPtr = (void *) env->GetPrimitiveArrayCritical((jarray)data, NULL); - } - else { - imageObjPtr = (void *)env->GetDirectBufferAddress(data); - } - - // update Image data - switch (imageFormat) { - case IMAGE_FORMAT_BYTE_BGR: - case IMAGE_FORMAT_BYTE_RGB: - case IMAGE_FORMAT_BYTE_ABGR: - case IMAGE_FORMAT_BYTE_RGBA: - case IMAGE_FORMAT_BYTE_LA: - case IMAGE_FORMAT_BYTE_GRAY: - case IMAGE_FORMAT_INT_BGR: - case IMAGE_FORMAT_INT_RGB: - case IMAGE_FORMAT_INT_ARGB: - dataBuffer = (jbyte *) imageObjPtr; - copyDataToVolume(imageFormat, textureFormat, xoffset, - yoffset, zoffset, imgXOffset, imgYOffset, - imgZOffset, width, height, depth, - tilew, tileh, dataBuffer, - surf, level); - break; - case IMAGE_FORMAT_USHORT_GRAY: - default: - throwAssert(env, "updateTexture3DSubImage : imageFormat illegal format"); - return; - } - - if((dataType == IMAGE_DATA_TYPE_BYTE_ARRAY) || - (dataType == IMAGE_DATA_TYPE_INT_ARRAY)) { - env->ReleasePrimitiveArrayCritical((jarray)data, imageObjPtr, 0); - } - -} - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_bindTextureCubeMap( - JNIEnv *env, - jobject obj, - jlong ctx, - jint objectId, - jboolean enable) -{ - GetDevice(); - - if (d3dCtx->texUnitStage >= d3dCtx->bindTextureIdLen) { - return; - } - - if (!enable) { - device->SetTexture(d3dCtx->texUnitStage, NULL); - d3dCtx->bindTextureId[d3dCtx->texUnitStage] = -1; - } else { - - if (d3dCtx->bindTextureId[d3dCtx->texUnitStage] == objectId) { - return; - } - - if (objectId >= d3dCtx->cubeMapTableLen) { - DWORD i; - DWORD len = max(objectId+1, d3dCtx->cubeMapTableLen << 1); - LPDIRECT3DCUBETEXTURE9 *newTable = (LPDIRECT3DCUBETEXTURE9 *) - malloc(sizeof(LPDIRECT3DCUBETEXTURE9) * len); - - if (newTable == NULL) { - printf("Not enough memory to alloc cubeMap table of size %d.\n", len); - return; - } - for (i=0; i < d3dCtx->cubeMapTableLen; i++) { - newTable[i] = d3dCtx->cubeMapTable[i]; - } - for (i=d3dCtx->cubeMapTableLen; i < len; i++) { - newTable[i] = NULL; - } - d3dCtx->cubeMapTableLen = len; - SafeFree(d3dCtx->cubeMapTable); - d3dCtx->cubeMapTable = newTable; - } - - d3dCtx->bindTextureId[d3dCtx->texUnitStage] = objectId; - if (d3dCtx->cubeMapTable[objectId] != NULL) { - device->SetTexture(d3dCtx->texUnitStage, - d3dCtx->cubeMapTable[objectId]); - } - // else we will bind this in updateTextureImage - } -} - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTextureCubeMapFilterModes( - JNIEnv *env, - jobject obj, - jlong ctx, - jint minFilter, - jint magFilter) -{ - Java_javax_media_j3d_NativePipeline_updateTexture2DFilterModes(env, - obj, ctx, minFilter, magFilter); -} - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTextureCubeMapLodRange( - JNIEnv *env, - jobject obj, - jlong ctx, - jint baseLevel, - jint maximumLevel, - jfloat minimumLod, - jfloat maximumLod) -{ - // not support -} - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTextureCubeMapLodOffset( - JNIEnv *env, - jobject obj, - jlong ctx, - jfloat lodOffsetS, - jfloat lodOffsetT, - jfloat lodOffsetR) -{ - /* not supported */ -} - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTextureCubeMapBoundary( - JNIEnv *env, - jobject obj, - jlong ctx, - jint boundaryModeS, - jint boundaryModeT, - jfloat boundaryRed, - jfloat boundaryGreen, - jfloat boundaryBlue, - jfloat boundaryAlpha) -{ - updateTextureBoundary(env, obj, ctx, boundaryModeS, - boundaryModeT, -1, boundaryRed, - boundaryGreen, boundaryBlue, - boundaryAlpha); - -} - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTextureCubeMapSubImage( - JNIEnv *env, - jobject obj, - jlong ctx, - jint face, - jint level, - jint xoffset, - jint yoffset, - jint textureFormat, - jint imageFormat, - jint imgXOffset, - jint imgYOffset, - jint tilew, - jint width, - jint height, - jint dataType, - jobject data, - jboolean useAutoMipMap) -{ - /* Note: useAutoMipMap is not use for SubImage in the d3d pipe */ - - GetDevice(); - - if (d3dCtx->texUnitStage >= d3dCtx->bindTextureIdLen) { - return; - } - - INT currBindTex = d3dCtx->bindTextureId[d3dCtx->texUnitStage]; - - if ((currBindTex < 1) || - (currBindTex >= d3dCtx->cubeMapTableLen)) { - if (debug) { - printf("Internal Error : UpdateCubeMapSubImage bind texture ID %d, cubeMapTableLen %d, texUnitStage = %d \n", currBindTex, d3dCtx->cubeMapTableLen, d3dCtx->texUnitStage); - } - return; - } - - LPDIRECT3DCUBETEXTURE9 surf = d3dCtx->cubeMapTable[currBindTex]; - - if ((surf == NULL) || - ((level > 0) && (!d3dCtx->deviceInfo->supportMipmap))) { - return; - } - - void *imageObjPtr; - jbyte *dataBuffer; - - if((dataType == IMAGE_DATA_TYPE_BYTE_ARRAY) || - (dataType == IMAGE_DATA_TYPE_INT_ARRAY)) { - imageObjPtr = (void *) env->GetPrimitiveArrayCritical((jarray)data, NULL); - } - else { - imageObjPtr = (void *)env->GetDirectBufferAddress(data); - } - - // update Image data - switch (imageFormat) { - case IMAGE_FORMAT_BYTE_BGR: - case IMAGE_FORMAT_BYTE_RGB: - case IMAGE_FORMAT_BYTE_ABGR: - case IMAGE_FORMAT_BYTE_RGBA: - case IMAGE_FORMAT_BYTE_LA: - case IMAGE_FORMAT_BYTE_GRAY: - case IMAGE_FORMAT_INT_BGR: - case IMAGE_FORMAT_INT_RGB: - case IMAGE_FORMAT_INT_ARGB: - dataBuffer = (jbyte *) imageObjPtr; - copyDataToCubeMap(imageFormat, textureFormat, - xoffset, yoffset, - imgXOffset, imgYOffset, - width, height, - tilew, dataBuffer, - surf, level, face); - break; - case IMAGE_FORMAT_USHORT_GRAY: - default: - throwAssert(env, "updateTextureCubeMapSubImage : imageFormat illegal format"); - return; - } - - if((dataType == IMAGE_DATA_TYPE_BYTE_ARRAY) || - (dataType == IMAGE_DATA_TYPE_INT_ARRAY)) { - env->ReleasePrimitiveArrayCritical((jarray)data, imageObjPtr, 0); - } -} - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTextureCubeMapImage( - JNIEnv *env, - jobject obj, - jlong ctx, - jint face, - jint numLevels, - jint level, - jint textureFormat, - jint imageFormat, - jint width, - jint height, - jint boundaryWidth, - jint dataType, - jobject data, - jboolean useAutoMipMap) -{ - GetDevice(); - - if (d3dCtx->texUnitStage >= d3dCtx->bindTextureIdLen) { - if (debug) { - printf("Internal Error: texUnitState %d, bindTextureIDLen %d\n", - d3dCtx->texUnitStage, d3dCtx->bindTextureIdLen); - } - return; - } - - - INT currBindTex = d3dCtx->bindTextureId[d3dCtx->texUnitStage]; - - if ((currBindTex < 1) || - (currBindTex >= d3dCtx->cubeMapTableLen)) { - if (debug) { - printf("Internal Error : UpdateCubeMapImage bind texture ID %d, cubeMapTableLen %d, texUnitStage = %d \n", currBindTex, d3dCtx->cubeMapTableLen, d3dCtx->texUnitStage); - } - return; - } - - LPDIRECT3DCUBETEXTURE9 surf = d3dCtx->cubeMapTable[currBindTex]; - - if (level == 0) { - if (surf != NULL) { - // see if no. of mipmap level change - - if (surf->GetLevelCount() != numLevels) { - d3dCtx->freeResource(surf); - d3dCtx->cubeMapTable[currBindTex] = NULL; - surf = NULL; - } - } - - if (surf == NULL) { - // Need to create surface - surf = createCubeMapTexture(d3dCtx, numLevels, textureFormat, - width, height, useAutoMipMap); - if (surf == NULL) { - return; - } - - d3dCtx->cubeMapTable[currBindTex] = surf; - } - } else { - if (surf == NULL) { - return; - } - } - - if ((level > 0) && (!d3dCtx->deviceInfo->supportMipmap)) { - if (debug) { - printf("mipmap not support\n"); - } - return; - } - - // update Image data - if (data != NULL) { - void *imageObjPtr; - jbyte *dataBuffer; - - if((dataType == IMAGE_DATA_TYPE_BYTE_ARRAY) || - (dataType == IMAGE_DATA_TYPE_INT_ARRAY)) { - imageObjPtr = (void *) env->GetPrimitiveArrayCritical((jarray)data, NULL); - } - else { - imageObjPtr = (void *)env->GetDirectBufferAddress(data); - } - - switch (imageFormat) { - case IMAGE_FORMAT_BYTE_BGR: - case IMAGE_FORMAT_BYTE_RGB: - case IMAGE_FORMAT_BYTE_ABGR: - case IMAGE_FORMAT_BYTE_RGBA: - case IMAGE_FORMAT_BYTE_LA: - case IMAGE_FORMAT_BYTE_GRAY: - case IMAGE_FORMAT_INT_BGR: - case IMAGE_FORMAT_INT_RGB: - case IMAGE_FORMAT_INT_ARGB: - dataBuffer = (jbyte *) imageObjPtr; - copyDataToCubeMap(imageFormat, textureFormat, 0, 0, 0, 0, - width, height, width, dataBuffer, - surf, level, face); - break; - case IMAGE_FORMAT_USHORT_GRAY: - default: - throwAssert(env, "updateTextureCubeMapImage : imageFormat illegal format"); - return; - } - - if((dataType == IMAGE_DATA_TYPE_BYTE_ARRAY) || - (dataType == IMAGE_DATA_TYPE_INT_ARRAY)) { - env->ReleasePrimitiveArrayCritical((jarray)data, imageObjPtr, 0); - } - - } - - device->SetTexture(d3dCtx->texUnitStage, surf); -} - - -extern "C" JNIEXPORT -jboolean JNICALL Java_javax_media_j3d_NativePipeline_decal1stChildSetup( - JNIEnv *env, - jobject obj, - jlong ctx) -{ - GetDevice2(); - - device->SetRenderState(D3DRS_STENCILENABLE, TRUE); - device->Clear(0, NULL, D3DCLEAR_STENCIL, 0, 1.0, 0); - device->SetRenderState(D3DRS_STENCILFUNC, D3DCMP_ALWAYS); - device->SetRenderState(D3DRS_STENCILREF, 0x1); - device->SetRenderState(D3DRS_STENCILMASK, 0x1); - device->SetRenderState(D3DRS_STENCILFAIL, - D3DSTENCILOP_KEEP); - device->SetRenderState(D3DRS_STENCILZFAIL, - D3DSTENCILOP_KEEP); - device->SetRenderState(D3DRS_STENCILPASS, - D3DSTENCILOP_REPLACE); - return d3dCtx->zEnable; -} - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_decalNthChildSetup( - JNIEnv *env, - jobject obj, - jlong ctx) - -{ - GetDevice(); - - d3dCtx->zEnable = FALSE; - device->SetRenderState(D3DRS_ZENABLE, FALSE); - device->SetRenderState(D3DRS_STENCILFUNC, D3DCMP_EQUAL); - device->SetRenderState(D3DRS_STENCILREF, 0x1); - device->SetRenderState(D3DRS_STENCILMASK, 0x1); - device->SetRenderState(D3DRS_STENCILFAIL, - D3DSTENCILOP_KEEP); - device->SetRenderState(D3DRS_STENCILZFAIL, - D3DSTENCILOP_KEEP); - device->SetRenderState(D3DRS_STENCILPASS, - D3DSTENCILOP_KEEP); -} - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_decalReset( - JNIEnv *env, - jobject obj, - jlong ctx, - jboolean depthBufferEnable) -{ - GetDevice(); - - device->SetRenderState(D3DRS_STENCILENABLE, FALSE); - - if (depthBufferEnable) { - d3dCtx->zEnable = TRUE; - device->SetRenderState(D3DRS_ZENABLE, TRUE); - } -} - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_ctxUpdateEyeLightingEnable( - JNIEnv *env, - jobject obj, - jlong ctx, - jboolean localEyeLightingEnable) -{ - GetDevice(); - device->SetRenderState(D3DRS_LOCALVIEWER, localEyeLightingEnable); -} - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_activeTextureUnit( - JNIEnv *env, - jobject obj, - jlong ctx, - jint index) -{ - GetDevice(); - // If this index is greater than max support stage, - // then subsequence texture operation will ignore. - if (index < 0) { - index = 0; - } - - d3dCtx->texUnitStage = index; -} - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTextureUnitState( - JNIEnv *env, - jobject obj, - jlong ctx, - jint index, - jboolean enable) -{ - GetDevice(); - // If this index is greater than max support stage, - // then subsequence texture operation will ignore. - if (index <= 0) { - index = 0; - } - - d3dCtx->texUnitStage = index; - - if (!enable && (index < d3dCtx->bindTextureIdLen)) { - device->SetTexture(index, NULL); - d3dCtx->bindTextureId[index] = -1; - } -} - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_setDepthFunc( - JNIEnv * env, - jobject obj, - jlong ctx, - jint func) -{ - GetDevice(); - - if (func == javax_media_j3d_RenderingAttributesRetained_LESS) { - device->SetRenderState(D3DRS_ZFUNC, D3DCMP_LESS); - } else if (func == - javax_media_j3d_RenderingAttributesRetained_LEQUAL) { - device->SetRenderState(D3DRS_ZFUNC, D3DCMP_LESSEQUAL); - } - -} - - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_setBlendColor( - JNIEnv *env, - jobject obj, - jlong ctx, - jfloat colorRed, - jfloat colorGreen, - jfloat colorBlue, - jfloat colorAlpha) -{ - // Not support in D3D -} - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_setBlendFunc( - JNIEnv * env, - jobject obj, - jlong ctx, - jint srcBlendFunction, - jint dstBlendFunction) -{ - GetDevice(); - - device->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE); - device->SetRenderState(D3DRS_SRCBLEND, - blendFunctionTable[srcBlendFunction]); - device->SetRenderState(D3DRS_DESTBLEND, - blendFunctionTable[dstBlendFunction]); -} - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_setFogEnableFlag( - JNIEnv * env, - jobject obj, - jlong ctx, - jboolean enable) -{ - GetDevice(); - - device->SetRenderState(D3DRS_FOGENABLE, enable); -} - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateSeparateSpecularColorEnable( - JNIEnv *env, - jobject obj, - jlong ctx, - jboolean enable) -{ -} - - -// Fix issue 221 : Temporary stub until Cg is implemented -/* - * Class: javax_media_j3d_NativePipeline - * Method: loadNativeCgLibrary - * Signature: ([Ljava/lang/String;)Z - */ -JNIEXPORT jboolean JNICALL -Java_javax_media_j3d_NativePipeline_loadNativeCgLibrary( - JNIEnv *env, - jobject thiz, - jobjectArray libpath) -{ - return JNI_FALSE; -} diff --git a/src/native/d3d/Canvas3D.cpp b/src/native/d3d/Canvas3D.cpp deleted file mode 100644 index 9d847e9..0000000 --- a/src/native/d3d/Canvas3D.cpp +++ /dev/null @@ -1,1325 +0,0 @@ -/* - * $RCSfile$ - * - * Copyright 2000-2008 Sun Microsystems, Inc. All Rights Reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * $Revision$ - * $Date$ - * $State$ - */ - -#include "StdAfx.h" - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_setDrawActive( - JNIEnv *env, - jobject obj, - jint fd) -{ - // This function is only used for Solaris OpenGL -} - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_widSync( - JNIEnv *env, - jobject obj, - jint fd, - jint numWindows) -{ - // This function is only used for Solaris OpenGL -} - - - -extern "C" JNIEXPORT -jboolean JNICALL Java_javax_media_j3d_NativePipeline_useSharedCtx( - JNIEnv *env, - jobject obj) -{ - return JNI_FALSE; -} - - - -extern "C" JNIEXPORT -jlong JNICALL Java_javax_media_j3d_NativePipeline_createNewContext( - JNIEnv *env, - jobject obj, - jobject cv, - jlong display, - jlong window, - jlong fbConfigListPtr, - jlong sharedCtx, - jboolean isSharedCtx, - jboolean offScreen, - jboolean glslLibraryAvailable, - jboolean cgLibraryAvailable) -{ - HWND hwnd = WindowFromDC(reinterpret_cast<HDC>(window)); - - lock(); - int vid = 0; // TODO: get needed info from fbConfigListPtr - D3dCtx* ctx = new D3dCtx(env, cv, hwnd, offScreen, vid); - if (ctx == NULL) { - printf("%s", getErrorMessage(OUTOFMEMORY)); - unlock(); - return 0; - } - - if (offScreen) - { - jclass cls = (jclass) env->GetObjectClass(cv); - jfieldID fieldId = env->GetFieldID(cls, - "offScreenCanvasSize", - "Ljava/awt/Dimension;"); - jobject dimObj = env->GetObjectField(cv, fieldId); - if (dimObj == NULL) - { - // user invoke queryProperties() - ctx->offScreenWidth = 1; - ctx->offScreenHeight = 1; - } - else - { - cls = (jclass) env->GetObjectClass(dimObj); - fieldId = env->GetFieldID(cls, "width", "I"); - ctx->offScreenWidth = env->GetIntField(dimObj, fieldId); - fieldId = env->GetFieldID(cls, "height", "I"); - ctx->offScreenHeight = env->GetIntField(dimObj, fieldId); - } - } - - if (!ctx->initialize(env, cv)) - { - delete ctx; - unlock(); - return 0; - } - d3dCtxList.push_back(ctx); - - unlock(); - return reinterpret_cast<jlong>(ctx); -} - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_createQueryContext( - JNIEnv *env, - jobject obj, - jobject cv, - jlong display, - jlong window, - jlong fbConfigListPtr, - jboolean offScreen, - jint width, - jint height, - jboolean glslLibraryAvailable, - jboolean cgLibraryAvailable) -{ - HWND hwnd = WindowFromDC(reinterpret_cast<HDC>(window)); - - lock(); - // always use offscreen for property since it - // makes no difference in D3D and this will also - // instruct initialize() to use offScreenWidth/Height - // instead of current window width/height to create - // context. - - int vid = 0; // TODO: get needed info from fbConfigListPtr - D3dCtx* ctx = new D3dCtx(env, cv, hwnd, true, vid); - if (ctx == NULL) { - printf("%s", getErrorMessage(OUTOFMEMORY)); - unlock(); - return; - } - - ctx->offScreenWidth = width; - ctx->offScreenHeight = height; - - ctx->initialize(env, cv); - delete ctx; - unlock(); -} - -extern "C" JNIEXPORT -jboolean JNICALL Java_javax_media_j3d_NativePipeline_useCtx( - JNIEnv *env, - jobject obj, - jlong ctx, - jlong display, - jlong window) -{ - return JNI_TRUE; - // D3D doesn't have notation of current context -} - - -extern "C" JNIEXPORT -jint JNICALL Java_javax_media_j3d_NativePipeline_getNumCtxLights( - JNIEnv *env, - jobject obj, - jlong ctx) -{ - GetDevice2(); - - int nlight = d3dCtx->deviceInfo->maxActiveLights; - if (nlight <= 0) { - // In emulation & referene mode, D3D return -1 - // work around by setting 8. - nlight = 8; - } - return nlight; -} - -extern "C" JNIEXPORT -jboolean JNICALL Java_javax_media_j3d_NativePipeline_initTexturemapping( - JNIEnv *env, - jobject texture, - jlong ctx, - jint texWidth, - jint texHeight, - jint objectId) -{ - GetCtx2(); - - - if ((objectId >= 0) && - (objectId < d3dCtx->textureTableLen) && - (d3dCtx->textureTable[objectId] != NULL)) { - // delete the previous texture reference - // when canvas resize - Java_javax_media_j3d_NativePipeline_freeTexture(env, - NULL, - ctx, - objectId); - } - - Java_javax_media_j3d_NativePipeline_bindTexture2D(env, texture, ctx, objectId, TRUE); - - Java_javax_media_j3d_NativePipeline_updateTexture2DImage(env, texture, ctx, 1, 0, - J3D_RGBA, 0, texWidth, - texHeight, 0, 0, NULL, JNI_FALSE); - return (d3dCtx->textureTable[objectId] != NULL); -} - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_texturemapping( - JNIEnv *env, - jobject texture, - jlong ctx, - jint px, - jint py, - jint minX, - jint minY, - jint maxX, - jint maxY, - jint texWidth, - jint texHeight, - jint rasWidth, - jint format, - jint objectId, - jbyteArray byteData, - jint winWidth, - jint winHeight) -{ - GetDevice(); - - Java_javax_media_j3d_NativePipeline_bindTexture2D( - env, texture, ctx, objectId, TRUE); - - Java_javax_media_j3d_NativePipeline_updateTexture2DSubImage( - env, texture, ctx, 0, minX, minY, J3D_RGBA, format, - minX, minY, rasWidth, maxX-minX, maxY-minY, IMAGE_DATA_TYPE_BYTE_ARRAY, - byteData, JNI_FALSE); - - LPDIRECT3DTEXTURE9 surf = d3dCtx->textureTable[objectId]; - - if (surf == NULL) { - if (debug) { - printf("[Java 3D] Fail to apply texture in J3DGraphics2D !\n"); - } - return; - } - - D3DTLVERTEX screenCoord; - DWORD zcmpfunc; - - screenCoord.sx = (px + minX) - 0.5f; - screenCoord.sy = (py + minY) - 0.5f; - - // sz can be any number since we will disable z buffer - // However rhw can't be 0, otherwise texture will not shown - screenCoord.sz = 0.999f; - screenCoord.rhw = 1; - - DWORD blendEnable; - DWORD srcBlend; - DWORD dstBlend; - - // disable z buffer - device->GetRenderState(D3DRS_ZFUNC, &zcmpfunc); - device->SetRenderState(D3DRS_ZWRITEENABLE, FALSE); - device->SetRenderState(D3DRS_ZFUNC, D3DCMP_ALWAYS); - - device->GetRenderState(D3DRS_ALPHABLENDENABLE, &blendEnable); - device->GetRenderState(D3DRS_SRCBLEND, &srcBlend); - device->GetRenderState(D3DRS_DESTBLEND, &dstBlend); - - device->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE); - device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA); - device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA); - - drawTextureRect(d3dCtx, device, surf, screenCoord, - minX, minY, maxX, maxY, - maxX - minX, maxY - minY, false); - - Java_javax_media_j3d_NativePipeline_bindTexture2D( - env, texture, ctx, objectId, FALSE); - - device->SetRenderState(D3DRS_ALPHABLENDENABLE, blendEnable); - device->SetRenderState(D3DRS_SRCBLEND, srcBlend); - device->SetRenderState(D3DRS_DESTBLEND, dstBlend); - device->SetRenderState(D3DRS_ZFUNC, zcmpfunc); - device->SetRenderState(D3DRS_ZWRITEENABLE, - d3dCtx->zWriteEnable); -} - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_clear( - JNIEnv *env, - jobject obj, - jlong ctx, - jfloat r, - jfloat g, - jfloat b, - jboolean clearStencil) -{ - - GetDevice(); - -// TODO ACES: The d3dCtx->stencilEnable and d3dCtx->stencilWriteEnable flags -// are not used in the rest of the code. They are never set to a value, and -// they are not looked at by most of the code. - - /* Java 3D always clears the Z-buffer */ - - if (!d3dCtx->zWriteEnable) { - device->SetRenderState(D3DRS_ZWRITEENABLE, TRUE); - } - - // Issue 239 - clear stencil, if requested - if (clearStencil) { - device->SetRenderState(D3DRS_STENCILENABLE, TRUE); - device->SetRenderState(D3DRS_STENCILWRITEMASK, ~0); - - // clear stencil and ZBuffer - HRESULT hr = device->Clear(0, NULL, - D3DCLEAR_STENCIL | D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, - D3DCOLOR_COLORVALUE(r, g, b, 1.0f), 1.0, 0); - if (hr == D3DERR_INVALIDCALL) { - printf("[Java3D] Error cleaning Canvas3D stencil & ZBuffer\n"); - } - // printf("canvas3D clear stencil & ZBuffer\n"); - - // TODO: DO WE NEED TO RESTORE THE STENCIL ENABLE AND WRITE MASK??? -// if (!d3dCtx->stencilEnable) { -// device->SetRenderState(D3DRS_STENCILENABLE, FALSE); -// } -// if (!d3dCtx->stencilWriteEnable) { -// device->SetRenderState(D3DRS_STENCILWRITEMASK, 0); -// } - - } - else { - // clear ZBuffer only - HRESULT hr = device->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, - D3DCOLOR_COLORVALUE(r, g, b, 1.0f), 1.0, 0); - if (hr == D3DERR_INVALIDCALL) { - printf("[Java3D] Error cleaning Canvas3D ZBuffer\n"); - } - // printf("canvas3D clear ZBuffer\n"); - } - - if (!d3dCtx->zWriteEnable) { - device->SetRenderState(D3DRS_ZWRITEENABLE, FALSE); - } - -} - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_textureFillBackground( - JNIEnv *env, - jobject obj, - jlong ctx, - jfloat texMinU, - jfloat texMaxU, - jfloat texMinV, - jfloat texMaxV, - jfloat mapMinX, - jfloat mapMaxX, - jfloat mapMinY, - jfloat mapMaxY, - jboolean useBilinearFilter) -{ - - DWORD alphaTest, alphaBlend, cull, zBuffer, - fog, lighting, stencil, specular; - - D3DXMATRIX Ortho2D; - D3DXMATRIX ptm, wtm, vtm; - COORDTEXVERTEX verts[4]; - D3DXMATRIX texMatrix; - int tus; - - GetDevice(); - - device->GetRenderState(D3DRS_ALPHATESTENABLE, &alphaTest); - device->SetRenderState(D3DRS_ALPHATESTENABLE, FALSE); - - device->GetRenderState(D3DRS_ALPHABLENDENABLE, &alphaBlend); - device->SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE); - - device->GetRenderState(D3DRS_CULLMODE, &cull); - device->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE); - - device->GetRenderState(D3DRS_ZENABLE, &zBuffer); - device->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE); - - device->GetRenderState(D3DRS_FOGENABLE, &fog); - device->SetRenderState(D3DRS_FOGENABLE, FALSE); - - device->GetRenderState(D3DRS_LIGHTING, &lighting); - device->SetRenderState(D3DRS_LIGHTING, FALSE); - - device->GetRenderState(D3DRS_STENCILENABLE, &stencil); - device->SetRenderState(D3DRS_STENCILENABLE, FALSE); - - device->GetRenderState(D3DRS_SPECULARENABLE, &specular); - device->SetRenderState(D3DRS_SPECULARENABLE, FALSE); - - tus = d3dCtx->texUnitStage; - - if (tus >= d3dCtx->bindTextureIdLen) { - if (debug) { - printf("Internal Error: texUnitState %d, bindTextureIDLen %d\n", - d3dCtx->texUnitStage, d3dCtx->bindTextureIdLen); - } - return; - } - - if (d3dCtx->texTransformSet[tus]) { - device->GetTransform((D3DTRANSFORMSTATETYPE) - (D3DTS_TEXTURE0 + tus), - &texMatrix); - - device->SetTransform((D3DTRANSFORMSTATETYPE) - (D3DTS_TEXTURE0 + tus), - &identityMatrix); - } - - // TextureStage will be restore by caller. - device->SetTextureStageState(tus, - D3DTSS_TEXCOORDINDEX, - D3DTSS_TCI_PASSTHRU); - - /* Setup filter mode if needed */ - if(useBilinearFilter) { - /* fprintf(stderr, "Background : use bilinear filter\n"); */ - device->SetSamplerState (tus, D3DSAMP_MINFILTER, D3DTEXF_LINEAR); - device->SetSamplerState (tus, D3DSAMP_MIPFILTER, D3DTEXF_POINT); - device->SetSamplerState (tus, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR); - } - /* For debugging only - else { - fprintf(stderr, "Background : Not use bilinear filter\n"); - } - */ - - device->GetTransform(D3DTS_PROJECTION, &ptm); - device->GetTransform(D3DTS_WORLD, &wtm); - device->GetTransform(D3DTS_VIEW, &vtm); - - Ortho2D._11 = 1.0; - Ortho2D._12 = 0.0; - Ortho2D._13 = 0.0; - Ortho2D._14 = 0.0; - - Ortho2D._21 = 0.0; - Ortho2D._22 = 1.0; - Ortho2D._23 = 0.0; - Ortho2D._24 = 0.0; - - Ortho2D._31 = 0.0; - Ortho2D._32 = 0.0; - Ortho2D._33 = 0.5; - Ortho2D._34 = 0.0; - - Ortho2D._41 = 0.0; - Ortho2D._42 = 0.0; - Ortho2D._43 = 0.5; - Ortho2D._44 = 1.0; - - /* - printf("Ortho2D matix : \n"); - printf("%f, %f, %f, %f\n", Ortho2D._11, Ortho2D._12, Ortho2D._13, Ortho2D._14); - printf("%f, %f, %f, %f\n", Ortho2D._21, Ortho2D._22, Ortho2D._23, Ortho2D._24); - printf("%f, %f, %f, %f\n", Ortho2D._31, Ortho2D._32, Ortho2D._33, Ortho2D._34); - printf("%f, %f, %f, %f\n", Ortho2D._41, Ortho2D._42, Ortho2D._43, Ortho2D._44); - */ - - device->SetTransform(D3DTS_PROJECTION, &Ortho2D); - device->SetTransform(D3DTS_WORLD, &identityMatrix); - device->SetTransform(D3DTS_VIEW, &identityMatrix); - - verts[0].tu = texMinU; /* tumin; */ - verts[0].tv = texMaxV; /* tvmax; */ - verts[1].tu = texMinU; /* tumin; */ - verts[1].tv = texMinV; /* tvmin; */ - verts[2].tu = texMaxU; /* tumax; */ - verts[2].tv = texMaxV; /* tvmax; */ - verts[3].tu = texMaxU; /* tumax; */ - verts[3].tv = texMinV; /* tvmin; */ - - verts[0].sx = mapMinX; - verts[0].sy = mapMaxY; - verts[0].sz = 0.999f; - - verts[1].sx = mapMinX; - verts[1].sy = mapMinY; - verts[1].sz = 0.999f; - - verts[2].sx = mapMaxX; - verts[2].sy = mapMaxY; - verts[2].sz = 0.999f; - - verts[3].sx = mapMaxX; - verts[3].sy = mapMinY; - verts[3].sz = 0.999f; - - /* - printf("(texMinU,texMinV,texMaxU,texMaxV) = (%3.2f,%3.2f,%3.2f,%3.2f)\n", - texMinU,texMinV,texMaxU,texMaxV); - printf("(mapMinX,mapMinY,mapMaxX,mapMaxY) = (%3.2f,%3.2f,%3.2f,%3.2f)\n", - mapMinX,mapMinY,mapMaxX,mapMaxY); - */ - - device->SetVertexShader(NULL); - - device->SetFVF(D3DFVF_XYZ | D3DFVF_TEX1 | D3DFVF_TEXCOORDSIZE2(0)); - - device->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, - 2, verts, sizeof(COORDTEXVERTEX)); - - - /* Restore renderstates */ - device->SetRenderState(D3DRS_ALPHATESTENABLE, alphaTest); - device->SetRenderState(D3DRS_CULLMODE, cull); - device->SetRenderState(D3DRS_ZENABLE, zBuffer); - device->SetRenderState(D3DRS_FOGENABLE, fog); - device->SetRenderState(D3DRS_LIGHTING, lighting); - device->SetRenderState(D3DRS_STENCILENABLE, stencil); - device->SetRenderState(D3DRS_SPECULARENABLE, specular); - - /* Restore texture Matrix transform */ - if (d3dCtx->texTransformSet[tus]) { - device->SetTransform((D3DTRANSFORMSTATETYPE) - (D3DTS_TEXTURE0 + tus), - &texMatrix); - } - - device->SetTransform(D3DTS_PROJECTION, &ptm); - device->SetTransform(D3DTS_WORLD, &wtm); - device->SetTransform(D3DTS_VIEW, &vtm); - -} - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_textureFillRaster(JNIEnv *env, - jobject obj, - jlong ctx, - jfloat texMinU, - jfloat texMaxU, - jfloat texMinV, - jfloat texMaxV, - jfloat mapMinX, - jfloat mapMaxX, - jfloat mapMinY, - jfloat mapMaxY, - jfloat mapZ, - jfloat alpha, - jboolean useBilinearFilter) -{ - - DWORD cull, lighting; - D3DXMATRIX Ortho2D; - D3DXMATRIX ptm, wtm, vtm; - COORDCLRTEXVERTEX verts[4]; - D3DXMATRIX texMatrix; - int tus; - - GetDevice(); - - device->GetRenderState(D3DRS_CULLMODE, &cull); - device->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE); - - device->GetRenderState(D3DRS_LIGHTING, &lighting); - device->SetRenderState(D3DRS_LIGHTING, FALSE); - - tus = d3dCtx->texUnitStage; - - if (tus >= d3dCtx->bindTextureIdLen) { - if (debug) { - printf("Internal Error: texUnitState %d, bindTextureIDLen %d\n", - d3dCtx->texUnitStage, d3dCtx->bindTextureIdLen); - } - return; - } - - // TextureStage will be restore by caller. - device->SetTextureStageState(tus, D3DTSS_ALPHAOP, D3DTOP_MODULATE); - device->SetTextureStageState(tus, D3DTSS_ALPHAARG1, D3DTA_TEXTURE); - device->SetTextureStageState(tus, D3DTSS_ALPHAARG2, D3DTA_CURRENT); - - /* Setup filter mode if needed */ - if(useBilinearFilter) { - /* fprintf(stderr, "Raster : use bilinear filter\n"); */ - device->SetSamplerState (tus, D3DSAMP_MINFILTER, D3DTEXF_LINEAR); - device->SetSamplerState (tus, D3DSAMP_MIPFILTER, D3DTEXF_POINT); - device->SetSamplerState (tus, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR); - } - /* For debugging only - else { - fprintf(stderr, "Raster : Not use bilinear filter\n"); - } - */ - - device->GetTransform(D3DTS_PROJECTION, &ptm); - device->GetTransform(D3DTS_WORLD, &wtm); - device->GetTransform(D3DTS_VIEW, &vtm); - - Ortho2D._11 = 2.0; - Ortho2D._12 = 0.0; - Ortho2D._13 = 0.0; - Ortho2D._14 = 0.0; - - Ortho2D._21 = 0.0; - Ortho2D._22 = 2.0; - Ortho2D._23 = 0.0; - Ortho2D._24 = 0.0; - - Ortho2D._31 = 0.0; - Ortho2D._32 = 0.0; - Ortho2D._33 = -1.0; - Ortho2D._34 = 0.0; - - Ortho2D._41 = -1.0; - Ortho2D._42 = -1.0; - Ortho2D._43 = 0.0; - Ortho2D._44 = 1.0; - - /* - printf("Ortho2D matix : \n"); - printf("%f, %f, %f, %f\n", Ortho2D._11, Ortho2D._12, Ortho2D._13, Ortho2D._14); - printf("%f, %f, %f, %f\n", Ortho2D._21, Ortho2D._22, Ortho2D._23, Ortho2D._24); - printf("%f, %f, %f, %f\n", Ortho2D._31, Ortho2D._32, Ortho2D._33, Ortho2D._34); - printf("%f, %f, %f, %f\n", Ortho2D._41, Ortho2D._42, Ortho2D._43, Ortho2D._44); - */ - - device->SetTransform(D3DTS_WORLD, &identityMatrix); - device->SetTransform(D3DTS_VIEW, &identityMatrix); - device->SetTransform(D3DTS_PROJECTION, &Ortho2D); - - verts[0].tu = texMinU; /* tumin; */ - verts[0].tv = texMaxV; /* tvmax; */ - verts[1].tu = texMinU; /* tumin; */ - verts[1].tv = texMinV; /* tvmin; */ - verts[2].tu = texMaxU; /* tumax; */ - verts[2].tv = texMaxV; /* tvmax; */ - verts[3].tu = texMaxU; /* tumax; */ - verts[3].tv = texMinV; /* tvmin; */ - - D3DCOLOR alphaColor = 0xffffff | ((int)(alpha * 255.0f) << 24); - - verts[0].color = alphaColor; - verts[0].sx = mapMinX; - verts[0].sy = mapMaxY; - verts[0].sz = mapZ; - - verts[1].color = alphaColor; - verts[1].sx = mapMinX; - verts[1].sy = mapMinY; - verts[1].sz = mapZ; - - verts[2].color = alphaColor; - verts[2].sx = mapMaxX; - verts[2].sy = mapMaxY; - verts[2].sz = mapZ; - - verts[3].color = alphaColor; - verts[3].sx = mapMaxX; - verts[3].sy = mapMinY; - verts[3].sz = mapZ; - - /* - printf("(texMinU,texMinV,texMaxU,texMaxV) = (%3.2f,%3.2f,%3.2f,%3.2f)\n", - texMinU,texMinV,texMaxU,texMaxV); - printf("(mapMinX,mapMinY,mapMaxX,mapMaxY) = (%3.2f,%3.2f,%3.2f,%3.2f)\n", - mapMinX,mapMinY,mapMaxX,mapMaxY); - - printf("(mapZ) = (%3.2f)\n",mapZ); - */ - device->SetVertexShader(NULL); - - device->SetFVF(D3DFVF_XYZ | D3DFVF_TEX1 | - D3DFVF_DIFFUSE | D3DFVF_TEXCOORDSIZE2(0)); - - device->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, - 2, verts, sizeof(COORDCLRTEXVERTEX)); - - - /* Restore renderstates */ - device->SetRenderState(D3DRS_CULLMODE, cull); - device->SetRenderState(D3DRS_LIGHTING, lighting); - - /* Restore texture Matrix transform */ - device->SetTransform(D3DTS_PROJECTION, &ptm); - device->SetTransform(D3DTS_WORLD, &wtm); - device->SetTransform(D3DTS_VIEW, &vtm); -} - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_executeRasterDepth(JNIEnv *env, - jobject obj, - jlong ctx, - jfloat posX, - jfloat posY, - jfloat posZ, - jint srcOffsetX, - jint srcOffsetY, - jint rasterWidth, - jint rasterHeight, - jint depthWidth, - jint depthHeight, - jint depthFormat, - jobject depthData) -{ - void *depthObjPtr; - D3DVERTEX worldCoord; - D3DTLVERTEX screenCoord; - int endx = srcOffsetX + rasterWidth; - int endy = srcOffsetY + rasterHeight; - - GetDevice(); - /* printf("*** Canvas3D.executeRasterDepth() ***\n"); */ - - // clipping - if (srcOffsetX > depthWidth) { - srcOffsetX = depthWidth; - } else if (srcOffsetX < 0) { - srcOffsetX = 0; - } - if (srcOffsetY > depthHeight) { - srcOffsetY = depthHeight; - } else if (srcOffsetY < 0) { - srcOffsetY = 0; - } - - if (endx > depthWidth) { - endx = depthWidth; - } else if (endx < 0) { - endx = 0; - } - if (endy > depthHeight) { - endy = depthHeight; - } else if (endy < 0) { - endy = 0; - } - - int h = endy - srcOffsetY; - int w = endx - srcOffsetX; - - // raster position is upper left corner, default for Java3D - // ImageComponent currently has the data reverse in Y - if ((h > 0) && (w > 0)) { - worldCoord.x = posX; - worldCoord.y = posY; - worldCoord.z = posZ; - - d3dCtx->transform(&worldCoord, &screenCoord); - - if (d3dCtx->depthStencilSurface == NULL) { - HRESULT hr = - device->GetDepthStencilSurface(&d3dCtx->depthStencilSurface); - if (FAILED(hr)) { - if (debug) { - printf("[Java3D] Fail to get depth stencil surface %s\n", - DXGetErrorString9(hr)); - } - return; - } - } - - depthObjPtr = (void *) env->GetPrimitiveArrayCritical((jarray)depthData, NULL); - - if (depthFormat == javax_media_j3d_DepthComponentRetained_DEPTH_COMPONENT_TYPE_INT) { - copyDepthToSurface(d3dCtx, - device, - (int)(screenCoord.sx), - (int)(screenCoord.sy), - srcOffsetX, srcOffsetY, - w, h, depthWidth, depthHeight, - (jint *)depthObjPtr, d3dCtx->depthStencilSurface); - - } else { // javax_media_j3d_DepthComponentRetained_DEPTH_COMPONENT_TYPE_FLOAT - - copyDepthToSurface(d3dCtx, - device, - (int)(screenCoord.sx), - (int)(screenCoord.sy), - srcOffsetX, srcOffsetY, - w, h, depthWidth, depthHeight, - (jfloat *)depthObjPtr, d3dCtx->depthStencilSurface); - } - env->ReleasePrimitiveArrayCritical((jarray)depthData, depthObjPtr, 0); - - } -} - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_setRenderMode( - JNIEnv *env, - jobject obj, - jlong ctx, - jint mode, - jboolean dbEnable) -{ - // D3D v8.0 doesn't support stereo -} - - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_clearAccum( - JNIEnv *env, - jobject obj, - jlong ctx) -{ - // D3D use full-scene antialiasing capbilities in device - // instead of accumulation buffer (which it didn't support) -} - - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_accum( - JNIEnv *env, - jobject obj, - jlong ctx, - jfloat value) -{ - // D3D use full-scene antialiasing capbilities in device - // instead of accumulation buffer (which didn't support) -} - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_accumReturn( - JNIEnv *env, - jobject obj, - jlong ctx) -{ - // D3D use full-scene antialiasing capbilities in device - // instead of accumulation buffer (which it didn't support) -} - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_setDepthBufferWriteEnable( - JNIEnv *env, - jobject obj, - jlong ctx, - jboolean mode) -{ - GetDevice(); - - d3dCtx->zWriteEnable = mode; - device->SetRenderState(D3DRS_ZWRITEENABLE, mode); -} - - -VOID freePointerList() -{ - if (useFreePointerList0) { - if (freePointerList1.size() > 0) { - lockSurfaceList(); - for (ITER_VOID p = freePointerList1.begin(); - p != freePointerList1.end(); ++p) { - delete (*p); - } - - freePointerList1.clear(); - unlockSurfaceList(); - } - useFreePointerList0 = false; - } else { - if (freePointerList0.size() > 0) { - lockSurfaceList(); - for (ITER_VOID p = freePointerList0.begin(); - p != freePointerList0.end(); ++p) { - delete (*p); - } - - freePointerList0.clear(); - unlockSurfaceList(); - } - useFreePointerList0 = true; - - } -} - - -extern "C" JNIEXPORT -jint JNICALL Java_javax_media_j3d_NativePipeline_swapBuffers( - JNIEnv *env, - jobject obj, - jobject cv, - jlong ctx, - jlong display, - jlong window) -{ - GetDevice2(); - - int retCode = NOCHANGE; - - HRESULT hr = device->Present(NULL, NULL, NULL, NULL); - - if (FAILED(hr)) { - hr = device->TestCooperativeLevel(); - if (D3DERR_DEVICELOST == hr) { - return NOCHANGE; - } - if (D3DERR_DEVICENOTRESET == hr) { - if (debug) { - printf("Buffer swap error %s, try Reset() the surface... \n", - DXGetErrorString9(hr)); - } - retCode = d3dCtx->resetSurface(env, cv); - GetDevice2(); - hr = device->Present(NULL, NULL, NULL, NULL); - if (FAILED(hr)) { - if (debug) { - printf("Buffer swap error %s \n", - DXGetErrorString9(hr)); - } - } - } - - } - - d3dCtx->freeList(); - freePointerList(); - return retCode; -} - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_syncRender( - JNIEnv *env, - jobject obj, - jlong ctx, - jboolean waitFlag) -{ - // do nothing since D3D always wait in Blt -} - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_newDisplayList( - JNIEnv *env, - jobject obj, - jlong ctx, - jint id) -{ - GetCtx(); - - if (id <= 0) { - if (debug) { - printf("In Canvas3D.newDisplayList id pass in = %d !\n", id); - } - return; - } - - if (id >= d3dCtx->dlTableSize) { - int newSize = d3dCtx->dlTableSize << 1; - if (id >= newSize) { - newSize = id+1; - } - int i=0; - LPD3DDISPLAYLIST *newTable = new LPD3DDISPLAYLIST[newSize]; - - if (newTable == NULL) { - printf("%s", getErrorMessage(OUTOFMEMORY)); - exit(1); - } - // entry 0 is not used - newTable[0] = NULL; - while (++i < d3dCtx->dlTableSize) { - newTable[i] = d3dCtx->displayListTable[i]; - } - while (i < newSize) { - newTable[i++] = NULL; - } - d3dCtx->dlTableSize = newSize; - SafeDelete(d3dCtx->displayListTable); - d3dCtx->displayListTable = newTable; - } - - if (d3dCtx->displayListTable[id] != NULL) { - SafeDelete(d3dCtx->displayListTable[id]); - } - d3dCtx->displayListTable[id] = new D3dDisplayList(); - if (d3dCtx->displayListTable[id] == NULL) { - printf("%s", getErrorMessage(OUTOFMEMORY)); - exit(1); - } - d3dCtx->currDisplayListID = id; -} - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_endDisplayList( - JNIEnv *env, - jobject obj, - jlong ctx) -{ - GetDevice(); - d3dCtx->displayListTable[d3dCtx->currDisplayListID]->optimize(d3dCtx); - d3dCtx->currDisplayListID = 0; -} - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_callDisplayList( - JNIEnv *env, - jobject obj, - jlong ctx, - jint id, - jboolean isNonUniformScale) -{ - GetDevice(); - - // TODO: Remove this two safe checks when release - // d3dCtx->displayListTable[id]->render(d3dCtx); - - - if ((id <= 0) || (id >= d3dCtx->dlTableSize)) { - if (debug) { - if (id <= 0) { - printf("[Java 3D] Invalid Display List ID %d is invoked !\n", id); - } else { - printf("[Java 3D] Display List ID %d not yet initialize !\n", id); - } - } - return; - } - - LPD3DDISPLAYLIST dl = d3dCtx->displayListTable[id]; - - if (dl == NULL) { - if (debug) { - printf("[Java 3D] Display List ID %d not yet initialize !\n", id); - } - return; - } - dl->render(d3dCtx); - -} - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_freeDisplayList( - JNIEnv *env, - jobject obj, - jlong ctx, - jint id) -{ - GetCtx(); - - if ((id < 0) || (id >= d3dCtx->dlTableSize)) { - if (debug) { - printf("[Java 3D] FreeDisplayList, id %d not within table range %d!\n", id, - d3dCtx->dlTableSize); - } - return; - } - - SafeDelete(d3dCtx->displayListTable[id]); -} - - -/* - Native function to delete OGL texture object after j3d texture object - has been deleted by java garbage collector. - */ -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_freeTexture( - JNIEnv *env, - jobject obj, - jlong ctx, - jint id) -{ - GetDevice(); - - for (int i=0; i < d3dCtx->bindTextureIdLen; i++) { - if (d3dCtx->bindTextureId[i] == id) { - device->SetTexture(i, NULL); - d3dCtx->bindTextureId[i] = -1; - } - } - - if ((id >= d3dCtx->textureTableLen) || (id < 1)) { - if (debug) { - printf("Internal Error : freeTexture ID %d, textureTableLen %d \n", - id, d3dCtx->textureTableLen); - } - return; - } - - d3dCtx->freeResource(d3dCtx->textureTable[id]); - d3dCtx->textureTable[id] = NULL; -} - - -extern "C" JNIEXPORT -jint JNICALL Java_javax_media_j3d_NativePipeline_getTextureUnitCount( - JNIEnv *env, - jobject obj, - jlong ctx) -{ - GetCtx2(); - return d3dCtx->deviceInfo->maxTextureUnitStageSupport; -} - - -extern "C" JNIEXPORT -jlong JNICALL Java_javax_media_j3d_NativePipeline_createOffScreenBuffer( - JNIEnv *env, - jobject obj, - jobject cv, - jlong ctx, - jlong display, - jlong fbConfigListPtr, - jint width, - jint height) - { - // Issue 396. - // createContext() will be invoked later in Renderer - return 1; -} - - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_destroyContext( - JNIEnv *env, - jobject obj, - jlong display, - jlong window, - jlong ctx) -{ - GetDevice(); - - lock(); - d3dCtxList.erase(find(d3dCtxList.begin(), d3dCtxList.end(), d3dCtx)); - delete d3dCtx; - unlock(); - - Java_javax_media_j3d_NativePipeline_cleanupRenderer(env, obj); -} - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_destroyOffScreenBuffer( - JNIEnv *env, - jobject obj, - jobject cv, - jlong ctx, - jlong display, - jlong fbConfigListPtr, - jlong window) -{ - // do nothing, since the old buffer will destory - // in createOffScreenBuffer - - // TODO : this means that we will hold onto the last off-screen buffer; - // we should clean this up at some point -} - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_readOffScreenBuffer( - JNIEnv *env, - jobject obj, - jobject cv, - jlong ctx, - jint format, - jint dataType, - jobject data, - jint width, - jint height) -{ - void *imageObjPtr; - - GetDevice(); - - if (format == IMAGE_FORMAT_USHORT_GRAY) { - printf("[Java 3D] readOffScreenBuffer not support IMAGE_FORMAT_USHORT_GRAY\n"); - return; - } - - if (d3dCtx->backSurface == NULL) { - HRESULT hr = device->GetBackBuffer(0,0, D3DBACKBUFFER_TYPE_MONO, //iSwapChain is 0 - &d3dCtx->backSurface); - if (FAILED(hr)) { - printf("[Java 3D] GetBackBuffer fail %s\n", - DXGetErrorString9(hr)); - return; - } - } - - if((dataType == IMAGE_DATA_TYPE_BYTE_ARRAY) || (dataType == IMAGE_DATA_TYPE_INT_ARRAY)) { - imageObjPtr = (void *)env->GetPrimitiveArrayCritical((jarray)data, NULL); - } - else { - imageObjPtr = (void *)env->GetDirectBufferAddress(data); - } - - copyDataFromSurface(format, 0, 0, width, height, (jbyte *)imageObjPtr, - d3dCtx->backSurface); - - if((dataType == IMAGE_DATA_TYPE_BYTE_ARRAY) || (dataType == IMAGE_DATA_TYPE_INT_ARRAY)) { - env->ReleasePrimitiveArrayCritical((jarray)data, imageObjPtr, 0); - } - return; -} - - -extern "C" JNIEXPORT -jint JNICALL Java_javax_media_j3d_NativePipeline_resizeD3DCanvas( - JNIEnv *env, - jobject obj, - jobject cv, - jlong ctx) -{ - int status; - - GetCtx2(); - lock(); - status = d3dCtx->resize(env, cv); - unlock(); - - return status; -} - - -extern "C" JNIEXPORT -jint JNICALL Java_javax_media_j3d_NativePipeline_toggleFullScreenMode( - JNIEnv *env, - jobject obj, - jobject cv, - jlong ctx) -{ - int status; - - GetCtx2(); - lock(); - status = d3dCtx->toggleMode(!d3dCtx->bFullScreen, env, cv); - unlock(); - if (status == RECREATEDFAIL) { - return RECREATEDDRAW; - } - return status; -} - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_setFullSceneAntialiasing( - JNIEnv *env, - jobject obj, - jlong ctx, - jboolean enable) -{ - GetDevice(); - - if (!implicitMultisample) { - device->SetRenderState(D3DRS_MULTISAMPLEANTIALIAS, enable); - } -} - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_cleanupRenderer( - JNIEnv *env, - jobject obj) -{ - lock(); - if (d3dCtxList.empty()) { - D3dDriverInfo::release(); - } - unlock(); - - // Need to call it two times to free both list0 and list1 - freePointerList(); - freePointerList(); -} - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_beginScene( - JNIEnv *env, - jobject obj, - jlong ctx) -{ - GetDevice(); - device->BeginScene(); -} - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_endScene( - JNIEnv *env, - jobject obj, - jlong ctx) -{ - GetDevice(); - device->EndScene(); -} - - -extern "C" JNIEXPORT -jboolean JNICALL Java_javax_media_j3d_NativePipeline_validGraphicsMode( - JNIEnv *env, - jobject obj) -{ - DEVMODE devMode; - - EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &devMode); - return (devMode.dmBitsPerPel > 8); -} diff --git a/src/native/d3d/D3dCtx.cpp b/src/native/d3d/D3dCtx.cpp deleted file mode 100644 index bc8990a..0000000 --- a/src/native/d3d/D3dCtx.cpp +++ /dev/null @@ -1,2207 +0,0 @@ -/* - * $RCSfile$ - * - * Copyright 2000-2008 Sun Microsystems, Inc. All Rights Reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * $Revision$ - * $Date$ - * $State$ - */ - -/* j3dsys.h needs to be included before any other include files to suppres VC warning */ -#include "j3dsys.h" - -#include "Stdafx.h" - -D3dCtxVector d3dCtxList; - -/* - * Use the following code to initialize ctx property : - * - * 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; - * - */ - -const D3DXMATRIX identityMatrix = D3DXMATRIX(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - -D3dCtx::D3dCtx(JNIEnv* env, jobject obj, HWND _hwnd, BOOL _offScreen, - jint vid) -{ - int i; - jniEnv = env; - monitor = NULL; - hwnd = _hwnd; - pD3D = NULL; - pDevice = NULL; - offScreen = _offScreen; - offScreenWidth = 0; - offScreenHeight = 0; - - driverInfo = NULL; - deviceInfo = NULL; - - depthStencilSurface = NULL; - frontSurface = NULL; - backSurface = NULL; - resetColorTarget = false; - forceResize = false; - inToggle = false; - useFreeList0 = true; - reIndexifyTable = NULL; - bFastDrawQuads = getSystemProperty(env,"j3d.d3dForceFastQuads","true"); - - // set default RenderingState variable - cullMode = D3DCULL_CW; - fillMode = D3DFILL_SOLID; - zWriteEnable = TRUE; - zEnable = TRUE; - - // TODO: THIS NEEDS TO BE REDONE WITH INFO FROM THE FBCONFIG PTR - // this is the pixelFormat return from NativeConfigTemplate. - minZDepth = vid & 0x3fffffff; - if (vid & 0x80000000) - { - antialiasing = REQUIRED; - } - else - if (vid & 0x40000000) - { - antialiasing = PREFERRED; - } - else - { - antialiasing = UNNECESSARY; - } - - setFullScreenFromProperty(env); - - if (offScreen) { - // disable fullscreen mode for offscreen - bFullScreen = false; - bFullScreenRequired = false; - } - - dlTableSize = DISPLAYLIST_INITSIZE; - displayListTable = new LPD3DDISPLAYLIST[dlTableSize]; - if (displayListTable == NULL) { - error(OUTOFMEMORY); - exit(1); - } - for (i=0; i < dlTableSize; i++) { - displayListTable[i] = NULL; - } - - currDisplayListID = 0; - quadIndexBuffer = NULL; - quadIndexBufferSize = 0; - lineModeIndexBuffer = NULL; - - srcVertexBuffer = NULL; - dstVertexBuffer = NULL; - - - multiTextureSupport = false; - texUnitStage = 0; - twoSideLightingEnable = false; - bindTextureId = NULL; - bindTextureIdLen = 0; - - textureTable = (LPDIRECT3DTEXTURE9 *) malloc( - sizeof(LPDIRECT3DTEXTURE9) * TEXTURETABLESIZE); - - if (textureTable == NULL) { - error(OUTOFMEMORY); - exit(1); - } - ZeroMemory(textureTable, sizeof(LPDIRECT3DTEXTURE9)*TEXTURETABLESIZE); - textureTableLen = TEXTURETABLESIZE; - - bindTextureId = NULL; - - volumeTable = (LPDIRECT3DVOLUMETEXTURE9 *) malloc( - sizeof(LPDIRECT3DVOLUMETEXTURE9) * TEXTURETABLESIZE); - - if (volumeTable == NULL) { - error(OUTOFMEMORY); - exit(1); - } - ZeroMemory(volumeTable, sizeof(LPDIRECT3DVOLUMETEXTURE9)*TEXTURETABLESIZE); - volumeTableLen = TEXTURETABLESIZE; - - - cubeMapTable = (LPDIRECT3DCUBETEXTURE9 *) malloc( - sizeof(LPDIRECT3DCUBETEXTURE9) * TEXTURETABLESIZE); - - if (cubeMapTable == NULL) { - error(OUTOFMEMORY); - exit(1); - } - ZeroMemory(cubeMapTable, sizeof(LPDIRECT3DCUBETEXTURE9)*TEXTURETABLESIZE); - cubeMapTableLen = TEXTURETABLESIZE; - - - if (hwnd == 0) { - // Offscreen rendering - hwnd = GetDesktopWindow(); - topHwnd = hwnd; - } else { - topHwnd = getTopWindow(hwnd); - } - - if (d3dDriverList == NULL) { - - // keep trying to initialize even though - // last time it fail. - D3dDriverInfo::initialize(env); - } - - if (d3dDriverList == NULL) { - /* - * This happen when either - * (1) D3D v9.0 not install or - * (2) Not enough memory or - * (3) No adapter found in the system. - */ - SafeRelease(pD3D); - error(D3DNOTFOUND); - return; - } - - pD3D = Direct3DCreate9( D3D_SDK_VERSION ); - - if (pD3D == NULL) { - error(D3DNOTFOUND); - return; - } - // find current monitor handle before - // get current display mode - monitor = findMonitor(); - - // check current display mode - enumDisplayMode(&devmode); - - if (devmode.dmBitsPerPel < 16) { - // tell user switch to at least 16 bit color next time - warning(NEEDSWITCHMODE); - } - - // find the adapter for this - setDriverInfo(); - - GetWindowRect(topHwnd, &savedTopRect); - winStyle = GetWindowLong(topHwnd, GWL_STYLE); - - for (i=0; i < 4; i++) { - rasterRect[i].sx = 0; - rasterRect[i].sy = 0; - rasterRect[i].sz = 0; - rasterRect[i].rhw = 0; - } - - rasterRect[0].tu = 0; - rasterRect[0].tv = 1; - rasterRect[1].tu = 0; - rasterRect[1].tv = 0; - rasterRect[2].tu = 1; - rasterRect[2].tv = 1; - rasterRect[3].tu = 1; - rasterRect[3].tv = 0; - - // initialize Ambient Material - ambientMaterial.Power = 0; - CopyColor(ambientMaterial.Emissive, 0, 0, 0, 1.0f); - CopyColor(ambientMaterial.Diffuse, 0, 0, 0, 1.0f); - CopyColor(ambientMaterial.Ambient, 1.0f, 1.0f, 1.0f, 1.0f); - CopyColor(ambientMaterial.Specular, 0, 0, 0, 1.0f); - GetWindowRect(hwnd, &windowRect); -} - -D3dCtx::~D3dCtx() -{ - release(); - SafeRelease(pD3D); -} - -VOID D3dCtx::releaseTexture() -{ - - for (int i=0; i < bindTextureIdLen; i++) { - if (bindTextureId[i] > 0) { - pDevice->SetTexture(i, NULL); - } - } - - lockSurfaceList(); - if (textureTable != NULL) { - // free all textures - for (int i=0; i < textureTableLen; i++) { - SafeRelease(textureTable[i]); - } - SafeFree(textureTable); - } - - if (volumeTable != NULL) { - for (int i=0; i < volumeTableLen; i++) { - SafeRelease(volumeTable[i]); - } - SafeFree(volumeTable); - - } - - - if (cubeMapTable != NULL) { - for (int i=0; i < cubeMapTableLen; i++) { - SafeRelease(cubeMapTable[i]); - } - SafeFree(cubeMapTable); - - } - - textureTableLen = 0; - volumeTableLen = 0; - cubeMapTableLen = 0; - unlockSurfaceList(); - - // free list0 - freeList(); - // free list1 - freeList(); -} - -VOID D3dCtx::setViewport() -{ - int renderWidth = getWidth(); - int renderHeight = getHeight(); - HRESULT hr; - D3DVIEWPORT9 vp = {0, 0, renderWidth, renderHeight, 0.0f, 1.0f}; - - hr = pDevice->SetViewport( &vp ); - - if (FAILED(hr)) { - // Use the previous Viewport if fail - error(VIEWPORTFAIL, hr); - } -} - -VOID D3dCtx::releaseVB() -{ - - if (displayListTable != NULL) { - // entry 0 is not used - for (int i=1; i < dlTableSize; i++) { - SafeDelete(displayListTable[i]); - } - SafeFree(displayListTable); - dlTableSize = 0; - } - - - lockGeometry(); - - D3dVertexBuffer *p = vertexBufferTable.next; - D3dVertexBuffer *q, **r; - D3dVertexBufferVector *vbVector; - boolean found = false; - - while (p != NULL) { - vbVector = p->vbVector; - if (vbVector != NULL) { - 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; - } - - vertexBufferTable.next = NULL; - - freeVBList0.clear(); - freeVBList1.clear(); - - unlockGeometry(); - -} - -VOID D3dCtx::release() -{ - - releaseTexture(); - SafeFree(bindTextureId); - bindTextureIdLen = 0; - - - SafeRelease(srcVertexBuffer); - SafeRelease(dstVertexBuffer); - SafeRelease(quadIndexBuffer); - SafeRelease(lineModeIndexBuffer); - quadIndexBufferSize = 0; - releaseVB(); - - // trying to free VertexBuffer - // This will crash the driver if Indices/StreamSource - // Not set before. - // pDevice->SetIndices(NULL, 0); - // pDevice->SetStreamSource(0, NULL, 0); - SafeRelease(depthStencilSurface); - SafeRelease(frontSurface); - SafeRelease(backSurface); - - SafeRelease(pDevice); - currDisplayListID = 0; - multiTextureSupport = false; - texUnitStage = 0; - twoSideLightingEnable = false; - freePointerList(); - freePointerList(); -} - - - -/* - * Application should delete ctx when this function return false. - */ -BOOL D3dCtx::initialize(JNIEnv *env, jobject obj) -{ - HRESULT hr; - // int oldWidth, oldHeight; - // BOOL needBiggerRenderSurface = false; - - // It is possible that last time Emulation mode is used. - // If this is the case we will try Hardware mode first. - deviceInfo = setDeviceInfo(driverInfo, &bFullScreen, minZDepth, minZDepthStencil); - - if ((pD3D == NULL) || (driverInfo == NULL)) { - return false; - } - /* - if (offScreenWidth > driverInfo->desktopMode.Width) { - if (debug) { - printf("OffScreen width cannot greater than %d\n", - driverInfo->desktopMode.Width); - } - oldWidth = offScreenWidth; - offScreenWidth = driverInfo->desktopMode.Width; - needBiggerRenderSurface = true; - - } - - if (offScreenHeight > driverInfo->desktopMode.Height) { - if (debug) { - printf("OffScreen Height cannot greater than %d\n", - driverInfo->desktopMode.Height); - } - oldHeight = offScreenHeight; - offScreenHeight = driverInfo->desktopMode.Height; - needBiggerRenderSurface = true; - } - */ - - if (!bFullScreen) { - getScreenRect(hwnd, &savedClientRect); - CopyMemory(&screenRect, &savedClientRect, sizeof (RECT)); - } - - dwBehavior = findBehavior(); - - - if (debug) { - printf("[Java3D]: Use %s, ", driverInfo->adapterIdentifier.Description); - - if (deviceInfo->isHardwareTnL && - (dwBehavior & D3DCREATE_SOFTWARE_VERTEXPROCESSING)!=0) - { - // user select non-TnL device - printf("Hardware Rasterizer\n"); - } else { - printf("%s (TnL) \n", deviceInfo->deviceName); - } - } - - setPresentParams(env, obj); - - if (debug) { - printf("\n[Java3D]: Create device :\n"); - printInfo(&d3dPresent); - } - - - if ((d3dPresent.BackBufferWidth <= 0) || - (d3dPresent.BackBufferHeight <= 0)) { - if (debug) { - printf("[Java3D]: D3D: Can't create device of buffer size %dx%d\n", - d3dPresent.BackBufferWidth, - d3dPresent.BackBufferHeight); - } - //return false; - // Issue #578 fix on zero dimension window size - d3dPresent.BackBufferWidth = 1; - d3dPresent.BackBufferHeight = 1; - // end fix - } - - -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(debug){ - char* ok = SUCCEEDED(hr) ? " Successful ! " : " Failed !"; - char* devTypeName = deviceInfo->deviceType==D3DDEVTYPE_HAL ? " HAL " : "REF"; - printf("\n[Java3D] CreateDevice using \"%s\" was %s (%s) \n", deviceInfo->deviceName, ok, devTypeName ); - } - - if(SUCCEEDED(hr) && deviceInfo->deviceType==D3DDEVTYPE_REF){ - // error(HALDEVICENOTFOUND); - error(NOHARDWAREACCEL); - } - -} - - - 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,minZDepthStencil); - d3dPresent.AutoDepthStencilFormat = - deviceInfo->depthStencilFormat; - if (deviceInfo->depthStencilFormat == D3DFMT_UNKNOWN) { - // should not happen since reference mode will - // support all depth stencil format - error(DEPTHSTENCILNOTFOUND); - return false; - } - if (debug) { - printf("[Java3D]: Fallback to create reference device :\n"); - printInfo(&d3dPresent); - } - - hr = pD3D->CreateDevice(driverInfo->iAdapter, - deviceInfo->deviceType, - topHwnd, - dwBehavior, - &d3dPresent, - &pDevice); - - if(SUCCEEDED(hr)){ - // error(HALDEVICENOTFOUND); - error(NOHARDWAREACCEL); - } - } - } - - /* - if (offScreen && needBiggerRenderSurface) { - IDirect3DSurface9 *pRenderTarget; - IDirect3DSurface9 *pStencilDepthTarget; - - hr = pDevice->CreateRenderTarget(oldWidth, - oldHeight, - driverInfo->desktopMode.Format, - D3DMULTISAMPLE_NONE, - true, - &pRenderTarget); - - if (FAILED(hr)) { - printf("Fail to CreateRenderTarget %s\n", DXGetErrorString9(hr)); - } else { - hr = pDevice->CreateDepthStencilSurface(oldWidth, - oldHeight, - deviceInfo->depthStencilFormat, - D3DMULTISAMPLE_NONE, - &pStencilDepthTarget); - if (FAILED(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", DXGetErrorString9(hr)); - pRenderTarget->Release(); - pStencilDepthTarget->Release(); - } else { - printf("Successfully set bigger buffer\n"); - } - } - } - } - */ - - - setWindowMode(); - - if (FAILED(hr)) { - release(); - if (!inToggle) { - if(debug){ - error(PLEASEUPDATEDRIVERS, hr); - }else{ - error(PLEASEUPDATEDRIVERS); - } - } else { - warning(PLEASEUPDATEDRIVERS, hr); - } - return false; - } - - if (deviceInfo != NULL) { - bindTextureIdLen = deviceInfo->maxTextureUnitStageSupport; - } else { - bindTextureIdLen = 1; - } - - - 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) { - if (bindTextureIdLen > TEXSTAGESUPPORT) { - // D3D only support max. 8 stages. - bindTextureIdLen = TEXSTAGESUPPORT; - } - multiTextureSupport = true; - id = env->GetFieldID(canvasCls, "multiTexAccelerated", "Z"); - env->SetBooleanField(obj, id, JNI_TRUE); - - // TODO check it !!!! - id = env->GetFieldID(canvasCls, "maxTextureUnits", "I"); //was numTexUnitSupported - env->SetIntField(obj, id, bindTextureIdLen); - } else { - bindTextureIdLen = 1; - } - - bindTextureId = (INT *) malloc(sizeof(INT) * bindTextureIdLen); - if (bindTextureId == NULL) { - release(); - error(OUTOFMEMORY); - return false; - } - - setViewport(); - setDefaultAttributes(); - - // Issue 400: initialize local viewer (for lighting) to false - pDevice->SetRenderState(D3DRS_LOCALVIEWER, FALSE); - - createVertexBuffer(); - - if (debug && (deviceInfo != NULL)) { - if (multiTextureSupport) { - printf("Max Texture Unit Stage support : %d \n", - deviceInfo->maxTextureBlendStages); - - printf("Max Simultaneous Texture unit support : %d \n", - deviceInfo->maxSimultaneousTextures); - } else { - printf("MultiTexture support : false\n"); - } - } - return true; -} - -// canvas size change, get new back buffer -INT D3dCtx::resize(JNIEnv *env, jobject obj) -{ - int retValue; - - if ((pDevice == NULL) || bFullScreen) { - return false; // not yet ready when startup - } - - if (forceResize) { - // ignore first resize request after screen toggle - forceResize = false; - return NOCHANGE; - } - // we don't want resize to do twice but when window toggle - // between fullscreen and window mode, the move event will got - // first. Thus it will get size correctly without doing resize. - - BOOL moveRequest; - - - GetWindowRect(hwnd, &windowRect); - - if ((windowRect.right == screenRect.right) && - (windowRect.left == screenRect.left) && - (windowRect.bottom == screenRect.bottom) && - (windowRect.top == screenRect.top)) { - return NOCHANGE; - } - - if (((windowRect.left - windowRect.right) - == (screenRect.left - screenRect.right)) && - ((windowRect.bottom - windowRect.top) - == (screenRect.bottom - screenRect.top))) { - moveRequest = true; - } else { - moveRequest = false; - } - - - HMONITOR oldMonitor = monitor; - monitor = findMonitor(); - - getScreenRect(hwnd, &screenRect); - - if (monitor != oldMonitor) { - enumDisplayMode(&devmode); - setDriverInfo(); - release(); - initialize(env, obj); - return RECREATEDDRAW; - } - - if (!moveRequest) { - - retValue = resetSurface(env, obj); - if (retValue != RECREATEDFAIL) { - return retValue; - } else { - return RECREATEDDRAW; - } - } - return NOCHANGE; -} - - -INT D3dCtx::toggleMode(BOOL _bFullScreen, JNIEnv *env, jobject obj) -{ - INT retValue; - - if ((pDevice == NULL) || - (!_bFullScreen && - !deviceInfo->canRenderWindowed)) { - // driver did not support window mode - return NOCHANGE; - } - - int onScreenCount = 0; - - 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 - // in the same screen - return false; - } - } - - - inToggle = true; - bFullScreen = _bFullScreen; - - retValue = resetSurface(env, obj); - - if (retValue != RECREATEDFAIL) { - forceResize = true; - } else { - // Switch back to window mode if fall to toggle fullscreen - // and vice versa - bFullScreen = !bFullScreen; - release(); - if (initialize(env, obj)) { - retValue = RECREATEDDRAW; - forceResize = true; - } else { - retValue = RECREATEDFAIL; - } - } - if (retValue != RECREATEDFAIL) { - setViewport(); - } - - inToggle = false; - return retValue; -} - -VOID D3dCtx::setPresentParams(JNIEnv *env, jobject obj) -{ - setCanvasProperty(env, obj); - - d3dPresent.AutoDepthStencilFormat = deviceInfo->depthStencilFormat; - d3dPresent.EnableAutoDepthStencil = true; - - // Fix to Issue 226 : D3D - fail on stress test for the creation and destruction of Canvases - bool useMultisample = (antialiasing != UNNECESSARY) && deviceInfo->supportAntialiasing(); - - if (useMultisample) { - d3dPresent.MultiSampleType = deviceInfo->getBestMultiSampleType(); - d3dPresent.MultiSampleQuality = 0; - } else { - d3dPresent.MultiSampleType = D3DMULTISAMPLE_NONE; - d3dPresent.MultiSampleQuality = 0; - } - d3dPresent.BackBufferCount = 1; - d3dPresent.Flags = D3DPRESENTFLAG_LOCKABLE_BACKBUFFER; - - // We can't use Discard, otherwise readRaster will fail as - // content of backbuffer will discard after swap unless - // we always call readRaster() just before swap. - // However in this way we can't use multisample effect - - // FULLSCREEN - if (bFullScreen) { - GetWindowRect(topHwnd, &savedTopRect); - GetWindowRect(hwnd, &savedClientRect); - - d3dPresent.Windowed = false; - d3dPresent.hDeviceWindow = topHwnd; - - if (useMultisample) { - d3dPresent.SwapEffect = D3DSWAPEFFECT_DISCARD; - } else { - d3dPresent.SwapEffect = D3DSWAPEFFECT_FLIP; - } - d3dPresent.BackBufferWidth = driverInfo->desktopMode.Width; - d3dPresent.BackBufferHeight = driverInfo->desktopMode.Height; - d3dPresent.BackBufferFormat = driverInfo->desktopMode.Format; - d3dPresent.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT; - if (deviceInfo->supportRasterPresImmediate) - d3dPresent.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; - else - d3dPresent.PresentationInterval = D3DPRESENT_INTERVAL_ONE; - - } else { - // WINDOWED mode - d3dPresent.Windowed = true; - d3dPresent.hDeviceWindow = hwnd; - - if (useMultisample) { - d3dPresent.SwapEffect = D3DSWAPEFFECT_DISCARD; - } else { - d3dPresent.SwapEffect = D3DSWAPEFFECT_COPY; - } - d3dPresent.BackBufferWidth = getWidth(); - d3dPresent.BackBufferHeight = getHeight(); - d3dPresent.BackBufferFormat = driverInfo->desktopMode.Format; - d3dPresent.FullScreen_RefreshRateInHz = 0; - - if (deviceInfo->supportRasterPresImmediate) - d3dPresent.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; - else - d3dPresent.PresentationInterval = D3DPRESENT_INTERVAL_ONE; - - } - -} - -INT D3dCtx::resetSurface(JNIEnv *env, jobject obj) -{ - D3dDeviceInfo* oldDevice = deviceInfo; - HRESULT hr; - - - deviceInfo = setDeviceInfo(driverInfo, &bFullScreen, minZDepth, minZDepthStencil); - - if (deviceInfo == NULL) { - return NOCHANGE; - } - if (deviceInfo != oldDevice) { - // we fall back to Reference mode last time, - // try to see if we can run in hardware mode after - // the surface size change. - release(); - if (initialize(env, obj)) { - return RECREATEDDRAW; - } else { - return RECREATEDFAIL; - } - } else { - setPresentParams(env, obj); - if (debug) { - printf("\nReset Device :\n"); - printInfo(&d3dPresent); - } - - // Must release any non default pool surface, otherwise - // Reset() will fail - SafeRelease(depthStencilSurface); - SafeRelease(frontSurface); - SafeRelease(backSurface); - - releaseVB(); - SafeRelease(lineModeIndexBuffer); - quadIndexBufferSize = 0; - - hr = pDevice->Reset(&d3dPresent); - if (FAILED(hr)) { - warning(RESETFAIL, hr); - // try to recreate Surface, if still fail, try Reference mode - release(); - if (initialize(env, obj)) { - return RECREATEDDRAW; - } else { - return RECREATEDFAIL; - } - } else { - setWindowMode(); - setDefaultAttributes(); - return RESETSURFACE; - } - } - - return NOCHANGE; -} - - -VOID D3dCtx::error(int idx) -{ - error(getErrorMessage(idx)); -} - -VOID D3dCtx::error(int idx, HRESULT hr) -{ - error(getErrorMessage(idx), hr); -} - - -VOID D3dCtx::warning(int idx) -{ - printf("[Java3D] Warning : %s\n", getErrorMessage(idx)); -} - -VOID D3dCtx::warning(int idx, HRESULT hr) -{ - printf("[Java3D] Warning : %s - %s\n", getErrorMessage(idx), DXGetErrorString9(hr)); -} - - -VOID D3dCtx::error(char *s) -{ - showError(hwnd, s, bFullScreen); -} - -VOID D3dCtx::error(char *s, HRESULT hr) -{ - char message[400]; - sprintf(message, "%s - %s", s, DXGetErrorString9(hr)); - showError(hwnd, message, bFullScreen); -} - - -VOID D3dCtx::d3dWarning(int idx) -{ - printf("[Java3D] Warning: %s\n", getErrorMessage(idx)); -} - -VOID D3dCtx::d3dWarning(int idx, HRESULT hr) -{ - printf("[Java3D] Warning: %s - %s\n", - getErrorMessage(idx), DXGetErrorString9(hr)); - -} - -VOID D3dCtx::d3dError(char *s) -{ - showError(GetDesktopWindow(), s, false); -} - - -VOID D3dCtx::d3dError(int idx) -{ - d3dError(getErrorMessage(idx)); -} - - -// Only display message box for the first error, since -// Java3D will continue to invoke createContext() when it fail -VOID D3dCtx::showError(HWND hwnd, char *s, BOOL bFullScreen) -{ - if (firstError) { - firstError = false; - if (bFullScreen) { - // In full screen mode, we can't see message box - printf("[Java3D] Error: %s\n", s); - exit(1); - } else { - MessageBox(hwnd, s, "Java 3D", MB_OK|MB_ICONERROR); - } - } -} - - -DWORD D3dCtx::getWidth() -{ - if (!offScreen) { - return screenRect.right - screenRect.left; - } else { - return offScreenWidth; - } - -} - - -DWORD D3dCtx::getHeight() -{ - if (!offScreen) { - return screenRect.bottom - screenRect.top; - } else { - return offScreenHeight; - } - -} - -D3dDeviceInfo* D3dCtx::selectDevice(int deviceID, - D3dDriverInfo *driverInfo, - BOOL *bFullScreen, - int minZDepth, - int minZDepthStencil) -{ - D3dDeviceInfo *pDevice; - - for (int i=0; i < numDeviceTypes; i++) - { - pDevice = driverInfo->d3dDeviceList[i]; - if ((((deviceID == DEVICE_HAL) || (deviceID == DEVICE_HAL_TnL)) && - (pDevice->deviceType == D3DDEVTYPE_HAL)) || - (deviceID == DEVICE_REF) && - (pDevice->deviceType == D3DDEVTYPE_REF)) - { - if ((*bFullScreen && !pDevice->fullscreenCompatible) || - (!*bFullScreen && !pDevice->desktopCompatible)) - { - if (pDevice->deviceType == D3DDEVTYPE_HAL) - { - d3dError(HALDEVICENOTFOUND); - } - else - { - // should not happen, REF device always support - d3dError(DEVICENOTFOUND); - } - // exit is not allowed on applets - //exit(1); - return NULL; - } - if (pDevice->maxZBufferDepthSize == 0) - { - if (pDevice->deviceType == D3DDEVTYPE_HAL) - { - d3dError(HALNOTCOMPATIBLE); - } - else - { - // should not happen, REF device always support - d3dError(DEVICENOTFOUND); - } - // exit is not allowed on applets - //exit(1); - return NULL; - } - if (pDevice->deviceType == D3DDEVTYPE_HAL) - { - if ((deviceID == DEVICE_HAL_TnL) && - !pDevice->isHardwareTnL) - { - d3dError(TNLHALDEVICENOTFOUND); - // exit is not allowed on applets - //exit(1); - return NULL; - } - } - - pDevice->findDepthStencilFormat(minZDepth, minZDepthStencil); - if (pDevice->depthStencilFormat == D3DFMT_UNKNOWN) - { - d3dError(DEPTHSTENCILNOTFOUND); - // exit is not allowed on applets - //exit(1); - return NULL; - } - return pDevice; - } - } - - // should not happen - d3dError(DEVICENOTFOUND); - // exit is not allowed on applets - //exit(1); - return NULL; -} - - - -D3dDeviceInfo* D3dCtx::selectBestDevice(D3dDriverInfo *driverInfo, - BOOL *bFullScreen, - int minZDepth, - int minZDepthStencil) -{ - D3dDeviceInfo *pDevice; - D3dDeviceInfo *bestDevice = NULL; - int i; - - for (i=0; i < numDeviceTypes; i++) - { - pDevice = driverInfo->d3dDeviceList[i]; - if (pDevice->maxZBufferDepthSize > 0) - { - pDevice->findDepthStencilFormat(minZDepth, minZDepthStencil); - - if (pDevice->depthStencilFormat == D3DFMT_UNKNOWN) - { - if (pDevice->deviceType == D3DDEVTYPE_REF) - { - d3dError(DEPTHSTENCILNOTFOUND); - return NULL; - } else { - continue; - } - } - if (*bFullScreen) { - if (pDevice->fullscreenCompatible) { - bestDevice = pDevice; - break; - } - } else { - if (pDevice->canRenderWindowed) { - if (pDevice->desktopCompatible) { - bestDevice = pDevice; - break; - } - } else { - if (pDevice->fullscreenCompatible) { - // switch to fullscreen mode - *bFullScreen = true; - bestDevice = pDevice; - break; - } - } - } - } - } - - if (bestDevice == NULL) { - // should not happen - d3dError(DEVICENOTFOUND); - return NULL; - } - - // TODO: suggest another display mode for user - /* - if (bestDevice->deviceType == D3DDEVTYPE_REF) { - // Recomend other display mode that support - // hardware accerated rendering if any. - int numModes = pD3D->GetAdapterModeCount(driverInfo->iAdapter); - D3DDISPLAYMODE dmode; - - for (i=0; i < numModes; i++) { - pD3D->EnumAdapterModes(pDriverInfo->iAdapter, i, &dmode); - if ((dmode.Width < 640) || (dmode.Height < 400)) { - // filter out low resolution modes - continue; - } - } - .... - } - */ - return bestDevice; -} - - -VOID D3dCtx::setDeviceFromProperty(JNIEnv *env) -{ - - 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( "j3d.d3ddevice" ); - jstring property = reinterpret_cast<jstring>( - env->CallStaticObjectMethod( - systemClass, method, name )); - jboolean isCopy; - - if ( property != NULL ) - { - const char* chars = env->GetStringUTFChars( - property, &isCopy ); - if ( chars != 0 ) - { - if (stricmp(chars, "reference") == 0) { - // There is no emulation device anymore in v8.0 - requiredDeviceID = DEVICE_REF; - } else if (stricmp(chars, "hardware") == 0) { - requiredDeviceID = DEVICE_HAL; - } else if (stricmp(chars, "TnLhardware") == 0) { - requiredDeviceID = DEVICE_HAL_TnL; - } else { - d3dError(UNKNOWNDEVICE); - //switch to default - requiredDeviceID = 0; - //exit(1); - - } - env->ReleaseStringUTFChars( property, chars ); - } - } - name = env->NewStringUTF( "j3d.d3ddriver" ); - property = reinterpret_cast<jstring>( - env->CallStaticObjectMethod( - systemClass, method, name )); - if ( property != NULL ) - { - const char* chars = env->GetStringUTFChars( - property, &isCopy); - if ( chars != 0 ) - { - // atoi() return 0, our default value, on error. - requiredDriverID = atoi(chars); - } - } - } - } -} - -VOID D3dCtx::setFullScreenFromProperty(JNIEnv *env) -{ - - jclass systemClass = env->FindClass( "javax/media/j3d/MasterControl" ); - - bFullScreenRequired = false; - bFullScreen = false; - - if ( systemClass != NULL ) - { - 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( - systemClass, method, name )); - if ( property != NULL ) - { - jboolean isCopy; - const char * chars = env->GetStringUTFChars( - property, &isCopy ); - if ( chars != 0 ) - { - if ( stricmp( chars, "required" ) == 0 ) { - bFullScreenRequired = true; - bFullScreen = true; - } else if ( stricmp( chars, "preferred" ) == 0 ) { - bFullScreen = true; - } - // "UNNECESSARY" is the default - env->ReleaseStringUTFChars( property, chars ); - } - } - } - } - -} - -VOID D3dCtx::setVBLimitProperty(JNIEnv *env) -{ - 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( "j3d.vertexbufferlimit" ); - 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 ) - { - long vbLimit = atol(chars); - env->ReleaseStringUTFChars( property, chars ); - if (vbLimit >= 6) { - // Has to be at least 6 since for Quad the - // limit reset to 2*vbLimit/3 >= 4 - printf("Java 3D: VertexBuffer limit set to %ld\n", vbLimit); - vertexBufferMaxVertexLimit = vbLimit; - } else { - printf("Java 3D: VertexBuffer limit should be an integer >= 6 !\n"); - } - - } - } - } - } -} - -VOID D3dCtx::setDebugProperty(JNIEnv *env) -{ - jclass systemClass = env->FindClass( "javax/media/j3d/MasterControl" ); - - debug = false; - - if ( systemClass != NULL ) - { - 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( - systemClass, method, name )); - if ( property != NULL ) - { - jboolean isCopy; - const char * chars = env->GetStringUTFChars( - property, &isCopy ); - if ( chars != 0 ) - { - if ( stricmp( chars, "true" ) == 0 ) { - debug = true; - } else { - debug = false; - } - // "UNNECESSARY" is the default - env->ReleaseStringUTFChars( property, chars ); - } - } - } - } -} - -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"); - - if (cls == NULL) { - implicitMultisample = false; - return; - } - - jfieldID fieldID = env->GetStaticFieldID(cls, "mc", "Ljavax/media/j3d/MasterControl;"); - - if (fieldID == NULL) { - implicitMultisample = false; - return; - } - - jobject obj = env->GetStaticObjectField(cls, fieldID); - - if (obj == NULL) { - implicitMultisample = false; - return; - } - - cls = env->FindClass("javax/media/j3d/MasterControl"); - - if (cls == NULL) { - implicitMultisample = false; - return; - } - - fieldID = env->GetFieldID(cls, "implicitAntialiasing", "Z"); - - if (fieldID == NULL ) { - implicitMultisample = false; - return; - } - - implicitMultisample = env->GetBooleanField(obj, fieldID); - return; -} - - -// Callback to notify Canvas3D which mode it is currently running -VOID D3dCtx::setCanvasProperty(JNIEnv *env, jobject obj) -{ - int mask = javax_media_j3d_Canvas3D_EXT_ABGR | - javax_media_j3d_Canvas3D_EXT_BGR; - - if ((deviceInfo->depthStencilFormat == D3DFMT_D24S8) || - (deviceInfo->depthStencilFormat == D3DFMT_D24X4S4)) - { - // The other format D3DFMT_D15S1 with 1 bit - // stencil buffer has no use for Decal group so it - // is ignored. - mask |= javax_media_j3d_Canvas3D_STENCIL_BUFFER; - } - - - jclass canvasCls = env->GetObjectClass(obj); - jfieldID id = env->GetFieldID(canvasCls, "fullScreenMode", "Z"); - env->SetBooleanField(obj, id, bFullScreen); - - id = env->GetFieldID(canvasCls, "fullscreenWidth", "I"); - env->SetIntField(obj, id, driverInfo->desktopMode.Width); - - id = env->GetFieldID(canvasCls, "fullscreenHeight", "I"); - env->SetIntField(obj, id, driverInfo->desktopMode.Height); - - //id = env->GetFieldID(canvasCls, "userStencilAvailable", "Z"); - //env->SetBooleanField(obj, id, deviceInfo->supportStencil ); - - - id = env->GetFieldID(canvasCls, "textureExtendedFeatures", "I"); - int texMask = deviceInfo->getTextureFeaturesMask(); - jboolean enforcePowerOfTwo = getJavaBoolEnv(env, "enforcePowerOfTwo"); - if(enforcePowerOfTwo) { - // printf("DEBUG enforcePowerOfTwo is true"); - texMask &= ~javax_media_j3d_Canvas3D_TEXTURE_NON_POWER_OF_TWO; - } - env->SetIntField(obj, id, texMask); - - - - id = env->GetFieldID(canvasCls, "extensionsSupported", "I"); - env->SetIntField(obj, id, mask); - - - id = env->GetFieldID(canvasCls, "nativeGraphicsVersion", "Ljava/lang/String;"); - char *version = "DirectX 9.0 or above"; - env->SetObjectField(obj, id, env->NewStringUTF(version)); - - 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); - - id = env->GetFieldID(canvasCls, "textureHeightMax", "I"); - env->SetIntField(obj, id, deviceInfo->maxTextureHeight); - - if (deviceInfo->maxTextureDepth > 0) { - id = env->GetFieldID(canvasCls, "texture3DWidthMax", "I"); - env->SetIntField(obj, id, deviceInfo->maxTextureWidth); - - id = env->GetFieldID(canvasCls, "texture3DHeightMax", "I"); - 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() -{ - if (srcVertexBuffer != NULL) { - // Each pDevice has its own vertex buffer, - // so if different pDevice create vertex buffer has to - // recreate again. - srcVertexBuffer->Release(); - } - - 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), - usage_D3DVERTEX, - D3DFVF_XYZ, - D3DPOOL_MANAGED, - &srcVertexBuffer, - NULL); - - if (FAILED(hr)) { - printf("\n[Java3D] Failed to create VertexBuffer (D3DVERTEX)\n"); - error(CREATEVERTEXBUFFER, hr); - - } - - hr = pDevice->CreateVertexBuffer(sizeof(D3DTLVERTEX), - usage_D3DTLVERTEX, - D3DFVF_XYZRHW|D3DFVF_TEX1, - D3DPOOL_MANAGED, - &dstVertexBuffer,NULL); - if (FAILED(hr)) { - printf("\n[Java3D] Warning: Failed to create VertexBuffer (D3DTLVERTEX)\n"); - error(CREATEVERTEXBUFFER, hr); - } -} - - -VOID D3dCtx::transform(D3DVERTEX *worldCoord, D3DTLVERTEX *screenCoord) { - D3DVERTEX *pv; - D3DTLVERTEX *tlpv; - HRESULT hr; - - if (srcVertexBuffer != NULL) { - // Need to disable Texture state, otherwise - // ProcessVertices() will fail with debug message : - // - // "Number of output texture coordintes and their format should - // be the same in the destination vertex buffer and as - // computed for current D3D settings." - // - // when multiple texture is used. - DWORD texState; - // save original texture state - pDevice->GetTextureStageState(0, D3DTSS_COLOROP, &texState); - // disable texture processing - pDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_DISABLE); - - if (!softwareVertexProcessing) { - // ProcessVertices() only work in software vertex - // processing mode - //pDevice->SetRenderState(D3DRS_SOFTWAREVERTEXPROCESSING, TRUE); - pDevice->SetSoftwareVertexProcessing(TRUE); - } - - pDevice->SetRenderState(D3DRS_CLIPPING, FALSE); - hr = srcVertexBuffer->Lock(0, 0, (VOID **)&pv, 0); - if (FAILED(hr)) { - if (debug) { - 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,0, sizeof(D3DVERTEX)); - - //pDevice->SetVertexShader(D3DFVF_XYZ); - pDevice->SetVertexShader(NULL); - pDevice->SetFVF(D3DFVF_XYZ); - - hr = pDevice->ProcessVertices(0, 0, 1, - dstVertexBuffer, - NULL, - 0); - - if (FAILED(hr)) { - if (debug) { - printf("[Java3D] Fail to processVertices %s\n", DXGetErrorString9(hr)); - } - } else { - hr = dstVertexBuffer->Lock(0, 0, (VOID **)&tlpv, D3DLOCK_READONLY); - if (SUCCEEDED(hr)) { - screenCoord->sx = tlpv[0].sx; - screenCoord->sy = tlpv[0].sy; - screenCoord->sz = tlpv[0].sz; - screenCoord->rhw = tlpv[0].rhw; - dstVertexBuffer->Unlock(); - } else { - if (debug) { - error("Fail to lock surface in transform", hr); - } - } - } - } - pDevice->SetRenderState(D3DRS_CLIPPING, TRUE); - if (!softwareVertexProcessing) { - //pDevice->SetRenderState(D3DRS_SOFTWAREVERTEXPROCESSING, FALSE); - pDevice->SetSoftwareVertexProcessing(FALSE); - } - // restore original texture state - pDevice->SetTextureStageState(0, D3DTSS_COLOROP, texState); - } -} - - - -VOID D3dCtx::getScreenRect(HWND hwnd, RECT *rect) { - - GetWindowRect(hwnd, rect); - - if ((deviceInfo->isHardware) && - (numDriver > 1)) { - - MONITORINFO info; - HMONITOR hMonitor = driverInfo->hMonitor; - - info.cbSize = sizeof(MONITORINFO); - if (hMonitor == NULL) { - hMonitor = MonitorFromWindow(hwnd, - MONITOR_DEFAULTTONEAREST); - } - GetMonitorInfo(hMonitor, &info); - monitorLeft = info.rcMonitor.left; - monitorTop = info.rcMonitor.top; - rect->left -= monitorLeft; - rect->right -= monitorLeft; - rect->top -= monitorTop; - rect->bottom -= monitorTop; - } else { - monitorLeft = 0; - monitorTop = 0; - } -} - -/* - * Search the monitor that this window competely enclosed. - * Return NULL if this window intersect several monitor - */ - -HMONITOR D3dCtx::findMonitor() -{ - - if ((osvi.dwMajorVersion < 4) || - (numDriver < 2)) { - return NULL; - } - - RECT rect; - MONITORINFO info; - HMONITOR hmonitor = MonitorFromWindow(hwnd, - MONITOR_DEFAULTTONEAREST); - info.cbSize = sizeof(MONITORINFO); - GetMonitorInfo(hmonitor, &info); - GetWindowRect(hwnd, &rect); - - if ((info.rcMonitor.left <= rect.left) && - (info.rcMonitor.right >= rect.right) && - (info.rcMonitor.top <= rect.top) && - (info.rcMonitor.bottom >= rect.bottom)) { - if (info.dwFlags & MONITORINFOF_PRIMARY) { - // Pass NULL is same as passing the guid of the - // first monitor. This can avoid recreate when - // window drag between screen borders from first - // screen. - return NULL; - } else { - return hmonitor; - } - } - return NULL; -} - - -D3dDeviceInfo* D3dCtx::setDeviceInfo(D3dDriverInfo *driverInfo, - BOOL *bFullScreen, - int minZDepth, - int minZDepthStencil) -{ - if (requiredDeviceID >= 0) - { - return selectDevice(requiredDeviceID, - driverInfo, - bFullScreen, - minZDepth, - minZDepthStencil); - } - else - { - return selectBestDevice(driverInfo, - bFullScreen, - minZDepth, - minZDepthStencil); - } -} - -// Find the adapter that this window belongs to -// and set driverInfo to this -VOID D3dCtx::setDriverInfo() -{ - D3dDriverInfo *newDriver = NULL; - - if (requiredDriverID <= 0) { - if ((numDriver < 2) || - (monitor == NULL) || - (osvi.dwMajorVersion < 4)) { - // windows 95 don't support multiple monitors - // Use Primary display driver - newDriver = d3dDriverList[0]; - } else { - for (int i=0; i < numDriver; i++) { - if (d3dDriverList[i]->hMonitor == monitor) { - newDriver = d3dDriverList[i]; - break; - } - } - } - } else { - if (requiredDriverID > numDriver) { - requiredDriverID = numDriver; - } - newDriver = d3dDriverList[requiredDriverID-1]; - } - - driverInfo = newDriver; -} - - -VOID D3dCtx::setDefaultAttributes() -{ - - /*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 - 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 - - // Set Range based fog - pDevice->SetRenderState(D3DRS_RANGEFOGENABLE, - deviceInfo->rangeFogEnable); - - // disable antialiasing (default is true in D3D) - if (!implicitMultisample) { - pDevice->SetRenderState(D3DRS_MULTISAMPLEANTIALIAS, FALSE); - } - - pointSize = 1; - cullMode = D3DCULL_CW; - fillMode = D3DFILL_SOLID; - zWriteEnable = TRUE; - zEnable = TRUE; - - if ((pDevice != NULL) && (bindTextureId != NULL)) { - for (int i=0; i < bindTextureIdLen; i++) { - pDevice->SetTextureStageState(i, D3DTSS_COLOROP, D3DTOP_SELECTARG1); - 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); - bindTextureId[i] = -1; - } - } - - - for (int i=0; i < TEXSTAGESUPPORT; i++) { - texGenMode[i] = TEX_GEN_NONE; - texTransformSet[i] = false; - texCoordFormat[i] = 2; - texTransform[i] = identityMatrix; - texStride[i] = 0; - texTranslateSet[i] = false; - } -} - -VOID D3dCtx::enumDisplayMode(DEVMODE* dmode) -{ - - MONITORINFOEX mi; - - if (monitor == NULL) { - EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, dmode ); - } else { - mi.cbSize = sizeof(MONITORINFOEX); - GetMonitorInfo(monitor, (MONITORINFOEX *) &mi); - dmode->dmSize = sizeof(DEVMODE); - EnumDisplaySettings( mi.szDevice, ENUM_CURRENT_SETTINGS, dmode); - } -} -// 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"); - - //Issue #560 - use D3DCREATE_FPU_PRESERV - //This is just way to disable it, as FPUPreserv is enabled by default - boolean useD3D_FPU_PRESERV = !(getSystemProperty(jniEnv,"j3d.d3dFPUPreserv","false")); - - int behavior = 0; - - if(useD3D_FPU_PRESERV){ - behavior = D3DCREATE_FPU_PRESERVE; - }else{ - printf("\n[Java3D]: Disabled D3DCREATE_FPU_PRESERVE \n"); - } - - - - if (bUseNvPerfHUD) // must have bForceHwdVertexProcess as true - { - printf("\n[Java3D]: using j3d.useNvPerfHUD=true and HARDWARE_VERTEXPROCESSING \n"); - bForceHwdVertexProcess = true; - bForceMixVertexProcess = false; - bForceSWVertexProcess = false; - } - - if (bForceHwdVertexProcess) - { - softwareVertexProcessing = FALSE; - printf("\n[Java3D]: using d3dVertexProcess=hardware\n"); - return D3DCREATE_HARDWARE_VERTEXPROCESSING | behavior; - } - - if (bForceMixVertexProcess) - { - printf("\n[Java3D]: using d3dVertexProcess=mixed\n"); - softwareVertexProcessing = FALSE; - return D3DCREATE_MIXED_VERTEXPROCESSING | behavior; - } - - if (bForceSWVertexProcess) - { - printf("\n[Java3D]: using d3dVertexProcess=software\n"); - softwareVertexProcessing = TRUE; - return D3DCREATE_SOFTWARE_VERTEXPROCESSING | behavior; - } - - // Issue #629 - Intel vcards must use Software Vertex Processing - if(!bForceHwdVertexProcess && !bForceMixVertexProcess && deviceInfo->vendorID == 0x8086 ){ - softwareVertexProcessing = TRUE; - return D3DCREATE_SOFTWARE_VERTEXPROCESSING | behavior; - } - - - // below is the default path. - // Rule : Shader capable videocards uses Hardware - // Low end devices (No shaders support) uses Software - // Middle end devices (TnL but no Shader) uses Mixed - - // 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 | behavior; - } - - // middle-end video cards - if (deviceInfo->isHardwareTnL && - ((requiredDeviceID < 0) || (requiredDeviceID == DEVICE_HAL_TnL))) - { - if (debug){printf("\n[Java3D]: using mixed Vertex Processing.\n");} - softwareVertexProcessing = FALSE; - return D3DCREATE_MIXED_VERTEXPROCESSING | behavior ; - } - else // low-end vcards use Software Vertex Processing - { - if (debug){printf("\n[Java3D]: using software Vertex Processing.\n");} - softwareVertexProcessing = TRUE; - return D3DCREATE_SOFTWARE_VERTEXPROCESSING | behavior; - } -} - -VOID D3dCtx::printInfo(D3DPRESENT_PARAMETERS *d3dPresent) -{ - - if (d3dPresent->Windowed) { - printf("Window "); - } else { - printf("FullScreen "); - } - - printf("%dx%d %s, handle=%p, MultiSampleType %s, SwapEffect %s, AutoDepthStencilFormat: %s\n", - d3dPresent->BackBufferWidth, - d3dPresent->BackBufferHeight, - getPixelFormatName(d3dPresent->BackBufferFormat), - d3dPresent->hDeviceWindow, - getMultiSampleName(d3dPresent->MultiSampleType), - getSwapEffectName(d3dPresent->SwapEffect), - getPixelFormatName(d3dPresent->AutoDepthStencilFormat)); -} - -VOID D3dCtx::setWindowMode() -{ - if (inToggle) { - if (!bFullScreen) { - SetWindowLong(topHwnd, GWL_STYLE, winStyle); - SetWindowPos(topHwnd, HWND_NOTOPMOST, savedTopRect.left, savedTopRect.top, - savedTopRect.right - savedTopRect.left, - savedTopRect.bottom - savedTopRect.top, - SWP_SHOWWINDOW); - } else { - SetWindowLong(topHwnd, GWL_STYLE, - WS_POPUP|WS_SYSMENU|WS_VISIBLE); - } - } - -} - -VOID D3dCtx::setAmbientLightMaterial() -{ - // We need to set a constant per vertex color - // There is no way in D3D to do this. It is workaround - // by adding Ambient light and set Ambient Material - // color temporary - pDevice->GetLight(0, &savedLight); - pDevice->GetMaterial(&savedMaterial); - pDevice->GetLightEnable(0, &savedLightEnable); - - CopyColor(ambientMaterial.Ambient, - currentColor_r, - currentColor_g, - currentColor_b, - currentColor_a); - - - // This is what the specification say it should set - ambientMaterial.Specular.a = currentColor_a; - - // This is what we found after testing - spec. is not correct - ambientMaterial.Diffuse.a = currentColor_a; - - pDevice->SetLight(0, &ambientLight); - pDevice->SetMaterial(&ambientMaterial); - pDevice->SetRenderState(D3DRS_LIGHTING, TRUE); - pDevice->LightEnable(0, TRUE); -} - -VOID D3dCtx::restoreDefaultLightMaterial() -{ - // restore original values after setAmbientLightMaterial() - pDevice->SetLight(0, &savedLight); - pDevice->SetMaterial(&savedMaterial); - pDevice->SetRenderState(D3DRS_LIGHTING, FALSE); - pDevice->LightEnable(0, savedLightEnable); -} - -VOID D3dCtx::freeVBList(D3dVertexBufferVector *v) -{ - //LPD3DVERTEXBUFFER *p; - LPD3DVERTEXBUFFER r; - - lockGeometry(); - - 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); - } - v->clear(); - unlockGeometry(); -} - - -VOID D3dCtx::freeResourceList(LPDIRECT3DRESOURCE9Vector *v) -{ - ITER_LPDIRECT3DRESOURCE9 s; - - lockSurfaceList(); - for (s = v->begin(); s != v->end(); ++s) { - (*s)->Release(); - } - v->clear(); - unlockSurfaceList(); -} - -VOID D3dCtx::freeList() -{ - if (useFreeList0) { - if (freeResourceList1.size() > 0) { - freeResourceList(&freeResourceList1); - } - if (freeVBList1.size() > 0) { - freeVBList(&freeVBList1); - } - useFreeList0 = false; - } else { - if (freeResourceList0.size() > 0) { - freeResourceList(&freeResourceList0); - } - if (freeVBList0.size() > 0) { - freeVBList(&freeVBList0); - } - useFreeList0 = true; - } -} - -VOID D3dCtx::freeVB(LPD3DVERTEXBUFFER vb) -{ - if (vb != NULL) { - lockSurfaceList(); - if (useFreeList0) { - freeVBList0.push_back(vb); - } else { - freeVBList1.push_back(vb); - } - unlockSurfaceList(); - } -} - - -VOID D3dCtx::freeResource(LPDIRECT3DRESOURCE9 res) -{ - if (res != NULL) { - lockSurfaceList(); - if (useFreeList0) { - freeResourceList0.push_back(res); - } else { - freeResourceList1.push_back(res); - } - unlockSurfaceList(); - } -} - -BOOL D3dCtx::createFrontBuffer() -{ - HRESULT hr; - - /*CreateImageSurface*/ - hr = pDevice->CreateOffscreenPlainSurface( - driverInfo->desktopMode.Width, - driverInfo->desktopMode.Height, - D3DFMT_A8R8G8B8, - D3DPOOL_SCRATCH, - &frontSurface, - NULL); - if (FAILED(hr)) { - if (debug) { - printf("[Java3D] Fail to CreateOffscreenPlainSurface %s\n", - DXGetErrorString9(hr)); - } - frontSurface = NULL; - return false; - } - return true; -} - -jboolean D3dCtx::getJavaBoolEnv(JNIEnv *env, char* envStr) -{ - - jclass cls; - jfieldID fieldID; - jobject obj; - - cls = env->FindClass( "javax/media/j3d/VirtualUniverse" ); - - if (cls == NULL) { - return JNI_FALSE; - } - - fieldID = (jfieldID) env->GetStaticFieldID( cls, "mc", - "Ljavax/media/j3d/MasterControl;"); - if (fieldID == NULL) { - return JNI_FALSE; - } - - obj = env->GetStaticObjectField( cls, fieldID); - - if (obj == NULL) { - return JNI_FALSE; - } - - cls = (jclass) env->FindClass("javax/media/j3d/MasterControl"); - - if (cls == NULL) { - return JNI_FALSE; - } - - fieldID = (jfieldID) env->GetFieldID( cls, envStr, "Z"); - - if (fieldID == NULL ) { - return JNI_FALSE; - } - - return env->GetBooleanField( obj, fieldID); - -} - -/** -// 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 deleted file mode 100644 index d503821..0000000 --- a/src/native/d3d/D3dCtx.hpp +++ /dev/null @@ -1,387 +0,0 @@ -/* - * $RCSfile$ - * - * Copyright 2000-2008 Sun Microsystems, Inc. All Rights Reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * $Revision$ - * $Date$ - * $State$ - */ - -#if !defined(D3DCTX_H) -#define D3DCTX_H - - -#include "StdAfx.h" -#include "D3dVertexBuffer.hpp" -#include "D3dDisplayList.hpp" - -#define TEXTURETABLESIZE 8 -#define TEXSTAGESUPPORT 8 -#define DISPLAYLIST_INITSIZE 8 -#define NOCHANGE 0 -#define RESETSURFACE 1 -#define RECREATEDDRAW 2 -#define RECREATEDFAIL -1 - -#undef javax_media_j3d_Canvas3D_STENCIL_BUFFER -#define javax_media_j3d_Canvas3D_STENCIL_BUFFER 4096L - - -// Use in texCoordPosition[] -// Must be negative number -#define TEX_GEN_NONE 0 -#define TEX_EYE_LINEAR -1 -#define TEX_SPHERE_MAP -2 -#define TEX_NORMAL_MAP -3 -#define TEX_REFLECT_MAP -4 -#define TEX_OBJ_LINEAR -5 -#define TEX_GEN_INVALID -6 -#define TEX_GEN_AUTO -7 - -typedef struct _D3DVERTEX { - float x, y, z; -} D3DVERTEX; - - -typedef struct _D3DTLVERTEX { - float sx, sy, sz, rhw; - float tu, tv; -} D3DTLVERTEX; - -typedef struct _COORDTEXVERTEX { - float sx, sy, sz; - float tu, tv; -} COORDTEXVERTEX; - -typedef struct _COORDCLRTEXVERTEX { - float sx, sy, sz; - D3DCOLOR color; - float tu, tv; -} COORDCLRTEXVERTEX; - - -typedef vector<LPDIRECT3DRESOURCE9> LPDIRECT3DRESOURCE9Vector; -typedef vector<LPDIRECT3DVERTEXBUFFER9> LPDIRECT3DVERTEXBUFFER9Vector; -//issue 135 iterator for vectors -typedef vector<LPDIRECT3DRESOURCE9>::iterator ITER_LPDIRECT3DRESOURCE9; -typedef vector<LPDIRECT3DVERTEXBUFFER9>::iterator ITER_LPDIRECT3DVERTEXBUFFER9; - -class D3dCtx { -public: - - HWND hwnd; // window handle - HWND topHwnd; // Top window handle - D3dDriverInfo *driverInfo; // Driver use - D3dDeviceInfo *deviceInfo; // Device use - - LPDIRECT3D9 pD3D; // Direct3D interface - LPDIRECT3DDEVICE9 pDevice; // Instance of D3D Device - - LPDIRECT3DSURFACE9 depthStencilSurface; - - // This is used for readRaster and offscreen rendering - // Only allocate the memory area if necessary - LPDIRECT3DSURFACE9 frontSurface; - - LPDIRECT3DSURFACE9 backSurface; - - // Parameters use for CreateDevice() - D3DPRESENT_PARAMETERS d3dPresent; - DWORD dwBehavior; - BOOL bForceHwdVertexProcess; // true if j3d.d3dVertexProcess is hardware - BOOL bForceMixVertexProcess; // true if j3d.d3dVertexProcess is mixed - BOOL bForceSWVertexProcess; // true if j3d.d3dVertexProcess is software - - BOOL bUseNvPerfHUD; // true if j3d.useNvPerfHUD is true - // it also makes bForceHwdVertexProcess true - - BOOL offScreen; // true if it is offScreen rendering - // in this case only backSurface is used - BOOL bFastDrawQuads; - DWORD offScreenWidth; - DWORD offScreenHeight; - - BOOL bFullScreen; // true if in full screen mode - BOOL bFullScreenRequired; // true if must run in full - // screen mode or die - BOOL inToggle; // in toggle fullscreen/window mode - RECT screenRect; // coordinate of window relative to - // the whole desktop in multiple monitor - RECT windowRect; // coordinate of window relative to - // the current monitor desktop only - INT minZDepth; // min Z depth set in NativeConfigTemplate - INT minZDepthStencil; // min Stencil depth set in NativeConfigTemplate - DEVMODE devmode; // current display mode - DWORD antialiasing; // PREFERRED, REQUIRED or UNNECESSARY - - - // Store current color as in OGL glColor() - float currentColor_r; - float currentColor_g; - float currentColor_b; - float currentColor_a; - - // Two side light is used. Note that D3D don't support two side - // lighting. - BOOL twoSideLightingEnable; - - // True if lighting is currently enable - // Save the current RenderingState to avoid GetRenderState() - // call during Rendering. - BOOL isLightEnable; - DWORD cullMode; - DWORD fillMode; - DWORD softwareVertexProcessing; - DWORD zWriteEnable; - DWORD zEnable; - -// TODO ACES: The following two stencil enable flags are not used -// consistently throughout the pipeline. They are never set to a value, -// and they are not looked at by most of the code. - DWORD stencilWriteEnable; // new on 1.4 - DWORD stencilEnable; // new on 1.4 - - // Ambient material used when coloring Attributes - D3DMATERIAL9 ambientMaterial; - - // temporary variables for ambient light setting - D3DLIGHT9 savedLight; - D3DMATERIAL9 savedMaterial; - BOOL savedLightEnable; - - // temporary variables used for building VertexBuffer - LPD3DVERTEXBUFFER pVB; // point to the current VB being update - DWORD texSetUsed; - DWORD texStride[TEXSTAGESUPPORT]; - - // true when in toggle mode - BOOL forceResize; - - // Texture related variables - INT *bindTextureId; - DWORD bindTextureIdLen; - - LPDIRECT3DTEXTURE9 *textureTable; - DWORD textureTableLen; - - // Volume Texture related variables - // Since 2d & 3d texture ID can't be the same from Java3D. - // We don't need bindVolumeId - LPDIRECT3DVOLUMETEXTURE9 *volumeTable; - DWORD volumeTableLen; - - // Texture Cube Mapping related variables - LPDIRECT3DCUBETEXTURE9 *cubeMapTable; - DWORD cubeMapTableLen; - - // true if hardware support MultiTexture - BOOL multiTextureSupport; - - // handle to monitor that this ctx belongs to. This is equal to - // NULL if this window is a primary display screen or it covers - // more than one screen. - HMONITOR monitor; - - // D3D don't have concept of current texture unit stage, - // instead, the texture unit stage is pass in as argument - // for all texture call. - INT texUnitStage; - - // true if linear filtering is to be used - BOOL texLinearMode; - - - // This is used temporary to store the blend function - // when two pass texture is used to simulate BLEND mode - DWORD srcBlendFunc; - DWORD dstBlendFunc; - DWORD blendEnable; - - - // This is used for to transform vertex - // from world to screen coordinate - LPDIRECT3DVERTEXBUFFER9 srcVertexBuffer; - LPDIRECT3DVERTEXBUFFER9 dstVertexBuffer; - - // For Rect of texture map in Raster write - D3DTLVERTEX rasterRect[4]; - - // Set automatic Texture coordinate generation type - // TEX_xxx_xxx as defined in GeometryArrayRetained.cpp - INT texGenMode[TEXSTAGESUPPORT]; - - // Whether TEXTURE_COORDINATE_2/3/4 is used in this state - INT texCoordFormat[TEXSTAGESUPPORT]; - - // Whether texture transform matrix is set in this state or not - BOOL texTransformSet[TEXSTAGESUPPORT]; - - // Remember the last Texture Transform pass down, since - // TexCoordGen may destroy it in some mode so we have to - // restore it later manually. - D3DXMATRIX texTransform[TEXSTAGESUPPORT]; - - // True if we copy m._41, m._42 elment to m._31, m._32 - // as a workaround that 2D texture translation did not work. - BOOL texTranslateSet[TEXSTAGESUPPORT]; - - float planeS[TEXSTAGESUPPORT][4]; - float planeT[TEXSTAGESUPPORT][4]; - float planeR[TEXSTAGESUPPORT][4]; - float planeQ[TEXSTAGESUPPORT][4]; - - // Display List ID (start from 1) => VertexBuffer pointer table - LPD3DDISPLAYLIST *displayListTable; - int dlTableSize; - - // For immediate mode rendering, we save the vertexBuffer pointer - // in variable pVertexBuffer of GeometryArrayRetained to reuse it. - D3dVertexBuffer vertexBufferTable; - - int currDisplayListID; - - // True if colorTarget need to reset - BOOL resetColorTarget; - - // Use for QuadArray - LPDIRECT3DINDEXBUFFER9 quadIndexBuffer; - DWORD quadIndexBufferSize; - - // Use for Quad Polygon Line mode - LPDIRECT3DINDEXBUFFER9 lineModeIndexBuffer; - - // Use temporary for reindexing - DWORD *reIndexifyTable; - - // True if Direcct Draw context is being destroy and recreate - // again during resize/toggle - BOOL recreateDDraw; - - // Screen coordinate of current monitor in use - // When hardware accleerated mode is used. For Emulation mode - // they are always zero; - INT monitorLeft; - INT monitorTop; - float pointSize; - - // Use to free resource surface in swap() - BOOL useFreeList0; - LPDIRECT3DRESOURCE9Vector freeResourceList0; - LPDIRECT3DRESOURCE9Vector freeResourceList1; - D3dVertexBufferVector freeVBList0; - D3dVertexBufferVector freeVBList1; - - D3dCtx(JNIEnv *env, jobject obj, HWND hwnd, BOOL offScreen, jint vid); - ~D3dCtx(); - - BOOL initialize(JNIEnv *env, jobject obj); - INT resize(JNIEnv *env, jobject obj); - VOID error(char *s, HRESULT hr); - VOID error(int idx, HRESULT hr); - VOID error(int idx); - VOID error(char *s); - VOID warning(int idx, HRESULT hr); - VOID warning(int idx); - - static VOID d3dError(int idx); - static VOID d3dError(char *s); - static VOID d3dWarning(int idx, HRESULT hr); - static VOID d3dWarning(int idx); - - INT toggleMode(BOOL fullScreen, JNIEnv *env, jobject obj); - DWORD getWidth(); - DWORD getHeight(); - - VOID release(); - VOID releaseTexture(); - VOID releaseVB(); - VOID setViewport(); - VOID transform(D3DVERTEX *worldCoord, D3DTLVERTEX *screenCoord); - VOID getScreenRect(HWND hwnd, RECT *rect); - HMONITOR findMonitor(); - VOID setDriverInfo(); - static D3dDeviceInfo* setDeviceInfo(D3dDriverInfo *driverInfo, - BOOL *bFullScreen, - int minZDepth, - int minZDepthStencil); - DWORD findBehavior(); - VOID setPresentParams(); - INT resetSurface(JNIEnv *env, jobject obj); - VOID setPresentParams(JNIEnv *env, jobject obj); - VOID setAmbientLightMaterial(); - VOID restoreDefaultLightMaterial(); - VOID freeResource(LPDIRECT3DRESOURCE9 surf); - VOID freeVB(LPD3DVERTEXBUFFER vb); - - VOID freeList(); - VOID freeResourceList(LPDIRECT3DRESOURCE9Vector *v); - VOID freeVBList(D3dVertexBufferVector *v); - BOOL createFrontBuffer(); - - static D3dDeviceInfo* selectDevice(int deviceID, - D3dDriverInfo *driverInfo, - BOOL *bFullScreen, - int minZDepth, - int minZDepthStencil); - static D3dDeviceInfo* selectBestDevice(D3dDriverInfo *driverInfo, - BOOL *bFullScreen, - int minZDepth, - int minZDepthStencil); - static VOID setDeviceFromProperty(JNIEnv *env); - static BOOL getSystemProperty(JNIEnv *env, char *strName, char *strValue); - static VOID setDebugProperty(JNIEnv *env); - static VOID setVBLimitProperty(JNIEnv *env); - static VOID setImplicitMultisamplingProperty(JNIEnv *env); - - - -private: - - RECT savedTopRect; // for toggle between fullscreen mode - RECT savedClientRect; - DWORD winStyle; - // a private reference for JNIEnv - JNIEnv* jniEnv; - - VOID createVertexBuffer(); - - VOID setCanvasProperty(JNIEnv *env, jobject obj); - VOID setFullScreenFromProperty(JNIEnv *env); - VOID enumDisplayMode(DEVMODE *devmode); - - static VOID printWarningMessage(D3dDeviceInfo *deviceInfo); - static VOID showError(HWND hwnd, char *s, BOOL bFullScreen); - VOID setDefaultAttributes(); - VOID printInfo(D3DPRESENT_PARAMETERS *d3dPresent); - VOID setWindowMode(); - jboolean getJavaBoolEnv(JNIEnv *env, char* envStr); -}; - -typedef vector<D3dCtx *> D3dCtxVector; -//issue 135 added iterator for D3dCtxVector -typedef vector<D3dCtx *>::iterator ITER_D3dCtxVector; -extern D3dCtxVector d3dCtxList; -const extern D3DXMATRIX identityMatrix; -#endif diff --git a/src/native/d3d/D3dDeviceInfo.cpp b/src/native/d3d/D3dDeviceInfo.cpp deleted file mode 100644 index 60af3a9..0000000 --- a/src/native/d3d/D3dDeviceInfo.cpp +++ /dev/null @@ -1,320 +0,0 @@ -/* - * $RCSfile$ - * - * Copyright 2000-2008 Sun Microsystems, Inc. All Rights Reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * $Revision$ - * $Date$ - * $State$ - */ - -#include "Stdafx.h" - -// return true if device is capable of hardware accelerated - -D3dDeviceInfo::D3dDeviceInfo() -{ -} - -D3dDeviceInfo::~D3dDeviceInfo() -{ -} - -VOID D3dDeviceInfo::setCaps(D3DCAPS9 *d3dCaps) { - - BOOL supportNPOT; - if (deviceType == D3DDEVTYPE_HAL ){ - isHardware = true; - isHardwareTnL = (d3dCaps->DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT); - } - else // D3DDEVTYPE_REF - { - isHardware = false; - isHardwareTnL = false; - } - - - // D3DTEXTURECAPS_NONPOW2CONDITIONAL caps-bit indicates "conditional" - // Non Power of Two (NPOT) - // textures that only support CLAMP addressing and don't - // support mipmaps or compressed textures. - // But some new vcards supports NP2 unconditional (GF6 and above). - // Correct test for any kind of NP2 support: - // If both unconditional and conditional support is - // unavailable then NP2 is not possible anyway. - // ------------------------------------------- - // POW2 | NP2_CONDITIONAL | result - // ------------------------------------------- - // true | true | CONDITIONAL NPOT(*) - // true | false | POW2 Only - // false| any | UNConditional NPOT (**) // - // --------------------------------------------- - // (**)OpenGL like, Java3D preferred. - // (*) below test: - /* - * if (((d3dCaps->TextureCaps & D3DPTEXTURECAPS_POW2) != 0) && // POW2 is true - * ((d3dCaps->TextureCaps & D3DPTEXTURECAPS_NONPOW2CONDITIONAL) == 0)){ //NPOT_Cond is false - * //Pow2 Only - * supportNPOT = false; - * } - * else{ - * // both conditional and unconditional - * supportNPOT = true; - * } - */ - if(d3dCaps->TextureCaps & D3DPTEXTURECAPS_POW2){ - supportNPOT = false; - if(d3dCaps->TextureCaps & D3DPTEXTURECAPS_NONPOW2CONDITIONAL){ - // NPOT conditionl But, in certain cases textures can ignore the power of 2 limitation - // As OpenGL is UNCONDITIONAL, it is not used by Java3D - //supportNPOT = true; - } - } else { - //UNconditional: Textures do not need to be a power of 2 in size - supportNPOT = true; - } - - // 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 \n", - 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 = 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); - - maxTextureHeight = d3dCaps->MaxTextureHeight; - maxTextureWidth = d3dCaps->MaxTextureWidth; - maxTextureDepth = d3dCaps->MaxVolumeExtent; - - maxActiveLights = d3dCaps->MaxActiveLights; - maxPointSize = DWORD(d3dCaps->MaxPointSize); - maxAnisotropy = d3dCaps->MaxAnisotropy; - - 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_LINE_STRIP_SET] = min(vertexBufferMaxVertexLimit, - maxPrimitiveCount +1); - maxVertexCount[GEO_TYPE_INDEXED_QUAD_SET] = maxVertexCount[GEO_TYPE_QUAD_SET]; - maxVertexCount[GEO_TYPE_INDEXED_TRI_SET] = maxVertexCount[GEO_TYPE_TRI_SET]; - maxVertexCount[GEO_TYPE_INDEXED_POINT_SET] = maxVertexCount[GEO_TYPE_POINT_SET]; - maxVertexCount[GEO_TYPE_INDEXED_LINE_SET] = maxVertexCount[GEO_TYPE_LINE_SET]; - maxVertexCount[GEO_TYPE_INDEXED_TRI_STRIP_SET] = maxVertexCount[GEO_TYPE_TRI_STRIP_SET]; - 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)) { - // 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"); - } - } - - texMask = 0; - if(supportNPOT){ - texMask |= javax_media_j3d_Canvas3D_TEXTURE_NON_POWER_OF_TWO; - } - - if((d3dCaps->Caps2 & D3DCAPS2_CANAUTOGENMIPMAP) != 0) { - texMask |= javax_media_j3d_Canvas3D_TEXTURE_AUTO_MIPMAP_GENERATION; - } - - if ((d3dCaps->TextureCaps & D3DPTEXTURECAPS_VOLUMEMAP) && - (maxTextureDepth > 0)) { - texMask |= javax_media_j3d_Canvas3D_TEXTURE_3D; - } - - if (d3dCaps->TextureCaps & D3DPTEXTURECAPS_CUBEMAP) { - texMask |= javax_media_j3d_Canvas3D_TEXTURE_CUBE_MAP; - } - - if (maxTextureUnitStageSupport > 1) { - texMask |= javax_media_j3d_Canvas3D_TEXTURE_MULTI_TEXTURE; - } - - - if (d3dCaps->TextureOpCaps & D3DTEXOPCAPS_DOTPRODUCT3) { - texMask |= javax_media_j3d_Canvas3D_TEXTURE_COMBINE_DOT3; - } - - 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 & - (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; - } - -} - -BOOL D3dDeviceInfo::supportAntialiasing() { - return (multiSampleSupport != 0); -} - - -void D3dDeviceInfo::findDepthStencilFormat(int minZDepth, int minZDepthStencil) -{ - // Fix to Issue 226 : D3D - fail on stress test for the creation and destruction of Canvases - //sanity check of stencil and depth - minZDepthStencil = min(minZDepthStencil, 8); - minZDepth = min(minZDepth, 32); - - depthStencilFormat = D3DFMT_UNKNOWN; - - for (int i=0; i < D3DDEPTHFORMATSIZE; i++) { - //printf("\ndepthFormatSupport %s, %b",getPixelFormatName(d3dDepthFormat[i]), depthFormatSupport[i]); - if (depthFormatSupport[i]){ - // prefer one with stencil buffer, follow by D3DFMT_D16_LOCKABLE, - // printf("\n ZDepth %d, Stencil %d ",d3dDepthTable[i],d3dStencilDepthTable[i]); - if (d3dDepthTable[i] >= minZDepth && d3dStencilDepthTable[i] >= minZDepthStencil ) { - depthStencilFormat = (D3DFORMAT) d3dDepthFormat[i]; - break; - } - }//if - }// for - // if none suitable found -} - - -D3DMULTISAMPLE_TYPE D3dDeviceInfo::getBestMultiSampleType() -{ - DWORD bitmask = 0; - UINT i; - - // Fix to Issue 226 : D3D - fail on stress test for the creation and destruction of Canvases - // start with 4 and up, if none found, try 3 and 2 - for (i=4; i <= 16; i++) { - bitmask = (1 << i); - if (multiSampleSupport & bitmask) { - return (D3DMULTISAMPLE_TYPE) i; - } - } - - // try 3 and 2 - for (i=3; i >= 2; i--) { - bitmask = (1 << i); - if (multiSampleSupport & bitmask) { - return (D3DMULTISAMPLE_TYPE) i; - } - } - - // Should not happen - return D3DMULTISAMPLE_NONE; -} - -int D3dDeviceInfo::getTextureFeaturesMask() -{ - return texMask; -} diff --git a/src/native/d3d/D3dDeviceInfo.hpp b/src/native/d3d/D3dDeviceInfo.hpp deleted file mode 100644 index f48433c..0000000 --- a/src/native/d3d/D3dDeviceInfo.hpp +++ /dev/null @@ -1,122 +0,0 @@ -/* - * $RCSfile$ - * - * Copyright 2000-2008 Sun Microsystems, Inc. All Rights Reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * $Revision$ - * $Date$ - * $State$ - */ - -#if !defined(D3DDEVICEINFO_H) -#define D3DDEVICEINFO_H - -#include "StdAfx.h" - -extern UINT vertexBufferMaxVertexLimit; - -// Fix to Issue 226 : D3D - fail on stress test for the creation and destruction of Canvases -#define D3DDEPTHFORMATSIZE 7 - -class D3dDeviceInfo { - public: - // Hardware Rasterizer - // Transform & Light Hardware Rasterizer - // Reference Rasterizer - 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; - // #Issue 629 vendor ID - UINT vendorID; - - // each bitmask correspond to the support of - // D3DMULTISAMPLE_i_SAMPLES type, i = 2...16 - DWORD multiSampleSupport; - - // TRUE when d3dDepthFormat[i] support - BOOL depthFormatSupport[D3DDEPTHFORMATSIZE]; - - // depth format select - D3DFORMAT depthStencilFormat; - - // max z buffer depth support - UINT maxZBufferDepthSize; - - // max stencil buffer depth support - UINT maxStencilDepthSize; // new on 1.4 - - // Max vertex count support for each primitive - DWORD maxVertexCount[GEO_TYPE_INDEXED_LINE_STRIP_SET+1]; - - BOOL supportStencil; // new on 1.4 - BOOL supportShaders11; - BOOL isHardware; - BOOL isHardwareTnL; - BOOL supportDepthBias; - BOOL supportRasterPresImmediate; - BOOL canRenderWindowed; - BOOL supportMipmap; - BOOL texturePow2Only; - BOOL textureSquareOnly; - BOOL linePatternSupport; - BOOL texBorderModeSupport; - BOOL texLerpSupport; - DWORD maxTextureUnitStageSupport; - DWORD maxTextureBlendStages; - DWORD maxSimultaneousTextures; - DWORD maxTextureWidth; - DWORD maxTextureHeight; - DWORD maxTextureDepth; - DWORD maxPrimitiveCount; - DWORD maxVertexIndex; - DWORD maxActiveLights; - DWORD maxPointSize; - DWORD rangeFogEnable; - D3DRENDERSTATETYPE fogMode; - int texMask; - int maxAnisotropy; - - BOOL supportStreamOffset; - - D3dDeviceInfo(); - ~D3dDeviceInfo(); - - // set capabilities of this device - VOID setCaps(D3DCAPS9 *d3dCaps); - BOOL supportAntialiasing(); - D3DMULTISAMPLE_TYPE getBestMultiSampleType(); - int getTextureFeaturesMask(); - void findDepthStencilFormat(int minZDepth, int minZDepthStencil); - - -}; - -#endif - diff --git a/src/native/d3d/D3dDisplayList.cpp b/src/native/d3d/D3dDisplayList.cpp deleted file mode 100644 index 9c99164..0000000 --- a/src/native/d3d/D3dDisplayList.cpp +++ /dev/null @@ -1,353 +0,0 @@ -/* - * $RCSfile$ - * - * Copyright 2000-2008 Sun Microsystems, Inc. All Rights Reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * $Revision$ - * $Date$ - * $State$ - */ - -#include "StdAfx.h" -#include "D3dDisplayList.hpp" - -D3dDisplayList::D3dDisplayList() -{ -} - -D3dDisplayList::~D3dDisplayList() -{ - for (ITER_LPD3DVERTEXBUFFER p = vBufferVec.begin(); - p != vBufferVec.end(); p++) { - SafeDelete(*p); - } - vBufferVec.empty(); -} - -VOID D3dDisplayList::render(D3dCtx *d3dCtx) -{ - for (ITER_LPD3DVERTEXBUFFER p = vBufferVec.begin(); - p != vBufferVec.end(); p++) { - (*p)->render(d3dCtx); - } -} - -VOID D3dDisplayList::add(LPD3DVERTEXBUFFER vbuffer) -{ - vBufferVec.push_back(vbuffer); -} - - -BOOL D3dDisplayList::isQuad(LPD3DVERTEXBUFFER p) -{ - return (!p->isIndexPrimitive && (p->indexBuffer != NULL)); -} - -VOID D3dDisplayList::optimize(D3dCtx *d3dCtx) -{ - - D3dVertexBufferVector vCloneBufferVec; - 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 **q = vbegin; - D3dVertexBuffer **p; - int primitiveType, vcounts, climit; - int indexCounts = 0; - BOOL merge; - LPD3DVERTEXBUFFER mergedVB; - BOOL isPointFlagUsed; - DWORD vertexFormat; - BOOL isIndexPrimitive; - BOOL quadFlag; - - while (q != vend) { - primitiveType = (*q)->primitiveType; - climit = (*q)->maxVertexLimit; - vcounts = (*q)->vcount; - isPointFlagUsed = (*q)->isPointFlagUsed; - vertexFormat = (*q)->vertexFormat; - isIndexPrimitive = (*q)->isIndexPrimitive; - quadFlag = isQuad(*q); - - if ((*q)->indexBuffer != NULL) { - indexCounts = (*q)->indexCount; - } - merge = false; - p = q + 1; - - while (p != vend) { - if (((*p)->primitiveType == primitiveType) && - ((*p)->vertexFormat == vertexFormat) && - ((*p)->isIndexPrimitive == isIndexPrimitive) && - (isQuad(*p) == quadFlag) && - ((*p)->isPointFlagUsed == isPointFlagUsed) && - // This means Mutliple VBs already use - ((*p)->totalVertexCount == (*p)->vcount)) { - vcounts += (*p)->totalVertexCount; - if ((*p)->indexBuffer != NULL) { - indexCounts += (*p)->totalIndexCount; - } - if ((vcounts > climit) || (indexCounts > climit)) { - break; - } - p++; - merge = true; - } else { - break; - } - } - - if (merge) { - mergedVB = createMergedVB(d3dCtx, q, p, vcounts, indexCounts); - if (mergedVB != NULL) { - for (r = q; r != p; r++) { - SafeDelete(*r); - } - vBufferVec.push_back(mergedVB); - } else { - for (r = q; r != p; r++) { - vBufferVec.push_back(*r); - } - } - } else { - vBufferVec.push_back(*q); - } - q = p; - } - - vCloneBufferVec.erase(vCloneBufferVec.begin(), vCloneBufferVec.end()); -} - - - - -LPD3DVERTEXBUFFER D3dDisplayList::createMergedVB(D3dCtx *d3dCtx, - D3dVertexBuffer **vstart, - D3dVertexBuffer **vend, - DWORD vcount, - DWORD indexCount) -{ - LPDIRECT3DDEVICE9 device = d3dCtx->pDevice; - D3dVertexBuffer **r; - UINT i; - HRESULT hr; - LPD3DVERTEXBUFFER vb = new D3dVertexBuffer(); - - vb->primitiveType = (*vstart)->primitiveType; - vb->isIndexPrimitive = (*vstart)->isIndexPrimitive; - vb->isPointFlagUsed = (*vstart)->isPointFlagUsed; - vb->vertexFormat = (*vstart)->vertexFormat; - vb->stride = (*vstart)->stride; - vb->ctx = (*vstart)->ctx; - vb->vcount = vb->totalVertexCount = vcount; - vb->indexCount = vb->totalIndexCount = indexCount; - vb->maxVertexLimit = (*vstart)->maxVertexLimit; - - if (!vb->isPointFlagUsed) { - hr = device->CreateVertexBuffer(vb->stride*vcount, - D3DUSAGE_WRITEONLY, - vb->vertexFormat, - D3DPOOL_DEFAULT, - &vb->buffer, - NULL); - } else { - hr = device->CreateVertexBuffer(vb->stride*vcount, - D3DUSAGE_WRITEONLY|D3DUSAGE_POINTS, - vb->vertexFormat, - D3DPOOL_DEFAULT, - &vb->buffer, - NULL); - } - - if (FAILED(hr)) { - return NULL; - } - BYTE *bdst = NULL; - WORD *wdst = NULL; - UINT *idst = NULL; - - hr = vb->buffer->Lock(0, 0,(VOID**) &bdst , 0); - if (FAILED(hr)) { - SafeRelease(vb->buffer); - return NULL; - } - - if (indexCount > 0) { - if (indexCount < 0xffff) { - hr = device->CreateIndexBuffer(indexCount*sizeof(WORD), - D3DUSAGE_WRITEONLY, - D3DFMT_INDEX16, - D3DPOOL_DEFAULT, - &vb->indexBuffer, - NULL); - - } else { - hr = device->CreateIndexBuffer(indexCount*sizeof(UINT), - D3DUSAGE_WRITEONLY, - D3DFMT_INDEX32, - D3DPOOL_DEFAULT, - &vb->indexBuffer, - NULL); - } - if (FAILED(hr)) { - vb->buffer->Unlock(); - SafeRelease(vb->buffer); - return NULL; - } - if (indexCount <= 0xffff) { - hr = vb->indexBuffer->Lock(0, 0,(VOID**) &wdst, 0); - } else { - hr = vb->indexBuffer->Lock(0, 0,(VOID**) &idst, 0); - } - if (FAILED(hr)) { - vb->buffer->Unlock(); - SafeRelease(vb->buffer); - SafeRelease(vb->indexBuffer); - return NULL; - } - } - - BYTE *bsrc = NULL; - WORD *wsrc = NULL; - UINT *isrc = NULL; - UINT offset = 0; - DWORD len; - BOOL stripType = true; - - if ((vb->primitiveType == D3DPT_POINTLIST) || - (vb->primitiveType == D3DPT_LINELIST) || - (vb->primitiveType == D3DPT_TRIANGLELIST)) { - vb->numVertices = new USHORT[1]; - if (indexCount <= 0) { - vb->numVertices[0] = vcount; - } else { - vb->numVertices[0] = indexCount; - } - vb->numVerticesLen = 1; - vb->stripLen = 1; - stripType = false; - } - - for (r = vstart; r != vend; r++) { - 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; - } - - if (indexCount > 0) { - if (indexCount <= 0xffff) { - hr = (*r)->indexBuffer->Lock(0, 0, (VOID**)&wsrc, 0); - } else { - hr = (*r)->indexBuffer->Lock(0, 0,(VOID**) &isrc, 0); - } - if (FAILED(hr)) { - (*r)->buffer->Unlock(); - vb->buffer->Unlock(); - SafeRelease(vb->buffer); - SafeRelease(vb->indexBuffer); - return NULL; - } - } - len = (*r)->vcount*(*r)->stride; - CopyMemory(bdst, bsrc, len); - if (stripType) { - vb->appendStrides((*r)->stripLen, (*r)->numVertices); - } - if (indexCount > 0) { - if (wdst != NULL) { - if (wsrc != NULL) { - for (i=0; i < (*r)->indexCount; i++) { - *wdst++ = offset + *wsrc++; - } - } else { - // should not happen - printf("[Java3D] Error in merging index vertex buffer\n"); - } - - } else { - if (wsrc != NULL) { - for (i=0; i < (*r)->indexCount; i++) { - *idst++ = offset + *wsrc++; - } - } else { - for (i=0; i < (*r)->indexCount; i++) { - *idst++ = offset + *isrc++; - } - } - } - offset += (*r)->vcount; - } - bdst += len; - (*r)->buffer->Unlock(); - if (indexCount > 0) { - (*r)->indexBuffer->Unlock(); - wsrc = NULL; - isrc = NULL; - } - } - - - vb->buffer->Unlock(); - if (indexCount > 0) { - vb->indexBuffer->Unlock(); - } - - if (vb->isIndexPrimitive && (indexCount <= 0)) { - // QUAD is used, adjust size of index - createQuadIndices(d3dCtx, vcount); - } - - for (i=0; i < D3DDP_MAXTEXCOORD; i++) { - vb->texCoordPosition[i] = -9999; - } - - - if (debug) { - int n = 0; - for (r = vstart; r != vend; r++) { - n++; - } - printf("Merge %d VB with primitiveType %d, vcount %d, indexCount %d\n", - n, vb->primitiveType, vcount, indexCount); - } - return vb; - -} - diff --git a/src/native/d3d/D3dDisplayList.hpp b/src/native/d3d/D3dDisplayList.hpp deleted file mode 100644 index c01a729..0000000 --- a/src/native/d3d/D3dDisplayList.hpp +++ /dev/null @@ -1,57 +0,0 @@ -/* - * $RCSfile$ - * - * Copyright 2000-2008 Sun Microsystems, Inc. All Rights Reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * $Revision$ - * $Date$ - * $State$ - */ - -#if !defined(D3DDISPLAYLIST_H) -#define D3DDISPLAYLIST_H - -#include "StdAfx.h" -#include "D3dVertexBuffer.hpp" - - -class D3dDisplayList { -public: - D3dDisplayList(); - ~D3dDisplayList(); - VOID add(LPD3DVERTEXBUFFER vBuffer); - VOID render(D3dCtx *d3dCtx); - VOID optimize(D3dCtx *d3dCtx); - BOOL isQuad(LPD3DVERTEXBUFFER p); - LPD3DVERTEXBUFFER createMergedVB(D3dCtx *d3dCtx, - D3dVertexBuffer **p, - D3dVertexBuffer **q, - DWORD vcount, - DWORD indexCount); - -private: - D3dVertexBufferVector vBufferVec; -}; -typedef D3dDisplayList* LPD3DDISPLAYLIST; -#endif diff --git a/src/native/d3d/D3dDriverInfo.cpp b/src/native/d3d/D3dDriverInfo.cpp deleted file mode 100644 index 35b978d..0000000 --- a/src/native/d3d/D3dDriverInfo.cpp +++ /dev/null @@ -1,467 +0,0 @@ -/* - * $RCSfile$ - * - * Copyright 2000-2008 Sun Microsystems, Inc. All Rights Reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * $Revision$ - * $Date$ - * $State$ - */ - -/* j3dsys.h needs to be included before any other include files to suppres VC warning */ -#include "j3dsys.h" -#include "Stdafx.h" - - -const DWORD numDeviceTypes = 2; -const D3DDEVTYPE deviceTypes[2] = { D3DDEVTYPE_HAL, D3DDEVTYPE_REF }; -D3dDriverInfo **d3dDriverList = NULL; -int numDriver = 0; // size of above array list - -int requiredDeviceID = -1; // must use this Device or die - -// If this number is greater than zero, J3D must use the -// adapter index in the order of GetAdapterIdentifier() starting from one. -// Otherwise, the first driver found with monitor matching the display -// driver is used. -int requiredDriverID = -1; -OSVERSIONINFO osvi; - -// There is bug in Nvidia driver which prevent VB too big -// in TnL hardware vertex processing mode. -// When the index is greater than 65535, the nvidia driver will -// consider it to be N % 65535. However it works fine in -// hardware vertex processing mode. -//@TODO check this with Cap Bits -UINT vertexBufferMaxVertexLimit = 65535; - -// True to disable setting D3DRS_MULTISAMPLEANTIALIAS -// Rendering state. -BOOL implicitMultisample; - -// Fix to Issue 226 : D3D - fail on stress test for the creation and destruction of Canvases -D3DFORMAT d3dDepthFormat[D3DDEPTHFORMATSIZE] = { D3DFMT_D24S8, // this is the best choice - D3DFMT_D24X4S4, - D3DFMT_D15S1, - D3DFMT_D24X8, - D3DFMT_D16_LOCKABLE, - D3DFMT_D16, - D3DFMT_D32 -}; - -// This should match the depth bit in the above array -int d3dDepthTable[D3DDEPTHFORMATSIZE] = {24, 24, 15, 24, 16, 16, 32}; -int d3dStencilDepthTable[D3DDEPTHFORMATSIZE] = { 8, 4, 1, 0, 0, 0, 0}; - -D3DLIGHT9 ambientLight; - -D3dDriverInfo::D3dDriverInfo() -{ - for (int i=0; i < numDeviceTypes; i++) { - d3dDeviceList[i] = new D3dDeviceInfo(); - } -} - -D3dDriverInfo::~D3dDriverInfo() -{ - for (int i=0; i < numDeviceTypes; i++) { - SafeDelete(d3dDeviceList[i]); - } -} - -VOID computeRGBDepth(D3dDriverInfo *pDriver) -{ - switch (pDriver->desktopMode.Format) { - case D3DFMT_R8G8B8: - case D3DFMT_A8R8G8B8: - case D3DFMT_X8R8G8B8: - pDriver->redDepth = pDriver->greenDepth = - pDriver->blueDepth = 8; - break; - case D3DFMT_R5G6B5: - pDriver->redDepth = pDriver->blueDepth = 5; - pDriver->greenDepth = 6; - break; - case D3DFMT_X1R5G5B5: - case D3DFMT_A1R5G5B5: - pDriver->redDepth = pDriver->blueDepth = - pDriver->greenDepth = 5; - break; - case D3DFMT_A4R4G4B4: - case D3DFMT_X4R4G4B4: - pDriver->redDepth = pDriver->blueDepth = - pDriver->greenDepth = 4; - break; - case D3DFMT_R3G3B2: - case D3DFMT_A8R3G3B2: - pDriver->redDepth = pDriver->greenDepth = 3; - pDriver->blueDepth = 2; - break; - default: // 8 color indexed or less - pDriver->redDepth = pDriver->blueDepth = - pDriver->greenDepth = 0; - } - -} - - -VOID setInfo(D3dDeviceInfo* pDevice, D3DADAPTER_IDENTIFIER9 *identifier) -{ - char* str = (char *)"UNKNOW VGA Vendor."; - switch( identifier->VendorId ) - { - // A more complete list can be found from http://www.pcidatabase.com/vendors.php?sort=id - case 0x0000: str = (char *) "RDP Remote Desktop DirectDraw"; break; - case 0x1002: str = (char *) "ATI Technologies Inc."; break; - case 0x1004: str = (char *) "VLSI Technology."; break; - case 0x100B: str = (char *) "National Semiconductors."; break; - case 0x1013: str = (char *) "Cirrus Logic."; break; - case 0x1014: str = (char *) "IBM"; break; - case 0x1017: str = (char *) "Spea Software AG."; break; - - case 0x1022: str = (char *) "Advanced Micro Devices (AMD)."; break; - case 0x1025: str = (char *) "ALI Acer Labs Inc."; break; - case 0x1023: str = (char *) "Trident Microsistems."; break; - case 0x102C: str = (char *) "Asiliant (Chips And Technologies)."; break; - case 0x102B: str = (char *) "Matrox Electronic Systems Ltd."; break; - case 0x1031: str = (char *) "MIRO Computer Products AG"; break; - case 0x1033: str = (char *) "NEC Electronics."; break; - case 0x1039: str = (char *) "SiS Silicon Integrated Systems."; break; - case 0x1045: str = (char *) "OPTi"; break; - case 0x104C: str = (char *) "Texas Instruments."; break; - case 0x104E: str = (char *) "Oak Technology."; break; - case 0x1050: str = (char *) "Winbond Electronics Corp."; break; - case 0x105D: str = (char *) "Number Nine Visual Technology"; break; - case 0x1060: str = (char *) "United Microelectronics."; break; - case 0x106B: str = (char *) "Apple Computer,Inc."; break; - case 0x1073: str = (char *) "Yamaha Corporation."; break; - - case 0x108E: str = (char *) "Sun Microsystems."; break; - case 0x1091: str = (char *) "Intergraph Corporation."; break; - - case 0x10DE: str = (char *) "NVIDIA Corporation."; break; - case 0x10EA: str = (char *) "Tvia, Inc."; break; - case 0x10ED: str = (char *) "Ascii Corporation"; break; - case 0x1092: str = (char *) "Diamond Multimedia"; break; - case 0x1102: str = (char *) "Creative Technology LTD."; break; - case 0x1117: str = (char *) "Datacube Inc."; break; - case 0x1106: str = (char *) "VIA Technology. "; break; - case 0x1135: str = (char *) "Fuji Xerox Co Ltd."; break; - case 0x1142: str = (char *) "Alliance Semiconductor"; break; - case 0x117f: str = (char *) "Integrated Circuit Systems."; break; - case 0x11AE: str = (char *) "Scitex Corporation Ltd."; break; - - case 0x121A: str = (char *) "3dfx Interactive Inc."; break; - case 0x1251: str = (char *) "VLSI Solution OY."; break; - case 0x126F: str = (char *) "Silicon Motion."; break; - case 0x1295: str = (char *) "Imagination Technologies."; break; - case 0x1414: str = (char *) "MicroSoft."; break; - case 0x15AD: str = (char *) "VMware Inc."; break; - case 0x18CA: str = (char *) "XGI xgitech."; break; - case 0x1888: str = (char *) "Varisys Limited"; break; - - case 0x1B13: str = (char *) "Jaton Corporation USA."; 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; - case 0xAA42: str = (char *) "Scitex Digital Video"; break; - - case 0xDEAF: str = (char *) "Middle Digital, Inc."; break; - case 0xEDD8: str = (char *) "ARK Logic, Inc."; break; - case 0xFFF3: str = (char *) "VMWare Inc.(Legacy)"; break; - } - pDevice->vendorID = identifier->VendorId; - pDevice->deviceVendor = str; - - pDevice->deviceRenderer = identifier->Description; - // better handling of RDP - Remote Desktop - if(identifier->VendorId==0 && identifier->DeviceId==0){ - pDevice->deviceRenderer = (char *) "RDP - No Hardware D3D"; - } - - char version[ 128 ]; - sprintf( version, "%x.%x.%x.%x", 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(); - if (numDriver <= 0) { - // keep d3dDriverList = NULL for checking later - D3dCtx::d3dError(DRIVERNOTFOUND); - return; - } - - d3dDriverList = new LPD3dDriverInfo[numDriver]; - - if (d3dDriverList == NULL) { - D3dCtx::d3dError(OUTOFMEMORY); - return; - } - - D3dDriverInfo *pDriver; - - for (int i = 0; i < numDriver; i++ ) { - pDriver = new D3dDriverInfo(); - d3dDriverList[i] = pDriver; - 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++ ) { - D3DCAPS9 d3dCaps; - D3dDeviceInfo* pDevice = pDriver->d3dDeviceList[j]; - pDevice->deviceType = deviceTypes[j]; - pD3D->GetDeviceCaps(i, deviceTypes[j], &d3dCaps); - pDevice->setCaps(&d3dCaps); - - pDevice->desktopCompatible = - SUCCEEDED(pD3D->CheckDeviceType(i, deviceTypes[j], - pDriver->desktopMode.Format, - pDriver->desktopMode.Format, - TRUE)); - - pDevice->fullscreenCompatible = - SUCCEEDED(pD3D->CheckDeviceType(i, deviceTypes[j], - pDriver->desktopMode.Format, - pDriver->desktopMode.Format, - FALSE)); - - pDevice->maxZBufferDepthSize = 0; - - - if (pDevice->isHardwareTnL) { - strcpy(pDevice->deviceName, "Transform & Light Hardware Rasterizer"); - } else if (pDevice->isHardware) { - 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] = - SUCCEEDED(pD3D->CheckDeviceFormat(i, deviceTypes[j], - pDriver->desktopMode.Format, - D3DUSAGE_DEPTHSTENCIL, - D3DRTYPE_SURFACE, - d3dDepthFormat[k])) - && - SUCCEEDED(pD3D->CheckDepthStencilMatch(i, deviceTypes[j], - pDriver->desktopMode.Format, - pDriver->desktopMode.Format, - d3dDepthFormat[k])); - if (pDevice->depthFormatSupport[k]) { - if (d3dDepthTable[k] > pDevice->maxZBufferDepthSize) { - pDevice->maxZBufferDepthSize = d3dDepthTable[k]; - pDevice->maxStencilDepthSize = d3dStencilDepthTable[k]; - if (d3dStencilDepthTable[k]>0) { - pDevice->supportStencil = true; - } - else { - pDevice->supportStencil = false; - } - } - } - } - // Fix to Issue 226 : D3D - fail on stress test for the creation and destruction of Canvases - DWORD bitmask = 0; - pDevice->multiSampleSupport = 0; - for (int mtype = D3DMULTISAMPLE_2_SAMPLES; - mtype <= D3DMULTISAMPLE_16_SAMPLES; mtype++) { - // consider desktop mode only for multisampling - HRESULT hrMSBack; - // HRESULT hrMSDepth; // should also check DephStencil ??? TODO - aces - - bitmask = 1 << mtype; - hrMSBack = pD3D->CheckDeviceMultiSampleType(i, deviceTypes[j], - pDriver->desktopMode.Format, - TRUE, - (D3DMULTISAMPLE_TYPE) mtype, NULL); - if(SUCCEEDED(hrMSBack)) { - pDevice->multiSampleSupport |= bitmask; - if(debug){ - /* - printf("Multisample: Back %s uses %s at bitmask %d, mtype %d, multiSampleSupport %d \n", - getPixelFormatName(pDriver->desktopMode.Format), - getMultiSampleName((D3DMULTISAMPLE_TYPE) mtype), - bitmask, mtype, pDevice->multiSampleSupport ); - */ - } - }//if hrMSBack - - }// for mtype - }//for j - device Types - }// for i - numDriver - -} - - - -// Cleanup when no more ctx exists -VOID D3dDriverInfo::release() -{ - for (int i = 0; i < numDriver; i++ ) { - SafeDelete(d3dDriverList[i]); - } - SafeDelete(d3dDriverList); - numDriver = 0; -} - -VOID printInfo() -{ - printf("javax.media.j3d 1.6.0, Windows version is %d.%d ", - osvi.dwMajorVersion, osvi.dwMinorVersion); - printf("Build: %d, ", LOWORD(osvi.dwBuildNumber)); - - switch(osvi.dwPlatformId) { - case VER_PLATFORM_WIN32s: - printf("Windows3.1"); - break; - case VER_PLATFORM_WIN32_WINDOWS: - printf("Windows 95/98"); - break; - case VER_PLATFORM_WIN32_NT: - //printf("Windows NT/2000/XP"); - if(osvi.dwMajorVersion==5){ - printf("Windows NT/2000/XP"); - } - if(osvi.dwMajorVersion==6){ - printf("Windows Server 2008/Vista"); - } - break; - } - - printf(" %s", osvi.szCSDVersion); - - D3dDriverInfo *pDriver; - for (int i=0; i < numDriver; i++) { - pDriver = d3dDriverList[i]; - D3DADAPTER_IDENTIFIER9 *id = &pDriver->adapterIdentifier; - D3DDISPLAYMODE *dm = &pDriver->desktopMode; - printf("\n[Display Driver] %s, %s, Product %d\n", - id->Driver, id->Description, - HIWORD(id->DriverVersion.HighPart)); - printf(" Version %d.%d, Build %d, VendorId %x\n", - LOWORD(id->DriverVersion.HighPart), - HIWORD(id->DriverVersion.LowPart), - LOWORD(id->DriverVersion.LowPart), - id->VendorId); - printf(" DeviceId %x, SubSysId %x, Revision %d\n", - id->VendorId, id->DeviceId, - id->SubSysId, id->Revision); - printf(" [Desktop Mode] %dx%d ", - dm->Width, dm->Height); - - if (dm->RefreshRate != 0) { - printf("%d MHz", dm->RefreshRate); - } - printf(", %s\n", getPixelFormatName(dm->Format)); - - for (int j=0; j < numDeviceTypes; j++) { - D3dDeviceInfo *pDevice = pDriver->d3dDeviceList[j]; - printf("\t[Device] %s ", pDevice->deviceName); - if (pDevice->multiSampleSupport) { - printf("(AA)"); - } - printf("\n"); - } - } - printf("\n"); -} - - -// Construct the D3dDriverList by enumerate all the drivers -VOID D3dDriverInfo::initialize(JNIEnv *env) -{ - HINSTANCE hD3D9DLL = LoadLibrary( "D3D9.DLL" ); - - // Simply see if D3D9.dll exists. - if ( hD3D9DLL == NULL ) - { - D3dCtx::d3dError(D3DNOTFOUND); - return; - } - FreeLibrary(hD3D9DLL); - - LPDIRECT3D9 pD3D = Direct3DCreate9( D3D_SDK_VERSION ); - if (debug && pD3D != NULL){ - printf("[j3d] Using DirectX D3D 9.0 or higher.\n"); - printf("[j3d] DirectX D3D renderer build 1.6.0\n"); - } - if (pD3D == NULL) { - D3dCtx::d3dError(D3DNOTFOUND); - return; - } - - // must appear before buildDriverList in order to - // set VertexBufferLimit correctly in D3dDeviceInfo - D3dCtx::setVBLimitProperty(env); - buildDriverList(pD3D); - - SafeRelease(pD3D); - - //D3dCtx::setDebugProperty(env); - D3dCtx::setDebugProperty(env); - - osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); - GetVersionEx(&osvi); - - if (debug) { - printInfo(); - } - - // compute requiredGUID - D3dCtx::setDeviceFromProperty(env); - - D3dCtx::setImplicitMultisamplingProperty(env); - - /* - RasterList.init(); - BackgroundImageList.init(); - */ - - // Setup Global constant Ambient light - ambientLight.Type = D3DLIGHT_DIRECTIONAL; - ambientLight.Direction.x = 0; - ambientLight.Direction.y = 0; - ambientLight.Direction.z = 1; - CopyColor(ambientLight.Diffuse, 0, 0, 0, 1.0f); - CopyColor(ambientLight.Ambient, 1.0f, 1.0f, 1.0f, 1.0f); - CopyColor(ambientLight.Specular, 0, 0, 0, 1.0f); -} - - - diff --git a/src/native/d3d/D3dDriverInfo.hpp b/src/native/d3d/D3dDriverInfo.hpp deleted file mode 100644 index 73b5761..0000000 --- a/src/native/d3d/D3dDriverInfo.hpp +++ /dev/null @@ -1,81 +0,0 @@ -/* - * $RCSfile$ - * - * Copyright 2000-2008 Sun Microsystems, Inc. All Rights Reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * $Revision$ - * $Date$ - * $State$ - */ - -#if !defined(D3DDRIVERINFO_H) -#define D3DDRIVERINFO_H - -#include "StdAfx.h" - - -#define DEVICE_HAL 0 -#define DEVICE_REF 1 -#define DEVICE_HAL_TnL 2 - -extern D3DFORMAT d3dDepthFormat[D3DDEPTHFORMATSIZE]; -extern int d3dDepthTable[D3DDEPTHFORMATSIZE]; -extern int d3dStencilDepthTable[D3DDEPTHFORMATSIZE]; - -class D3dDriverInfo { -public: - // DDraw Driver info - D3DADAPTER_IDENTIFIER9 adapterIdentifier; - // Desktop display mode for this adapter - D3DDISPLAYMODE desktopMode; - // monitor handle for this adapter - HMONITOR hMonitor; - - // Index position in the adapter list - UINT iAdapter; - - // Support devices : HAL or REF - D3dDeviceInfo* d3dDeviceList[2]; - - // Use for NativeConfigTemplate to - // determine the min. config support - UINT redDepth, greenDepth, blueDepth; - - D3dDriverInfo(); - ~D3dDriverInfo(); - - static VOID initialize(JNIEnv *env); - static VOID release(); -}; - -typedef D3dDriverInfo* LPD3dDriverInfo; -extern int numDriver; // size of above array list -extern D3dDriverInfo **d3dDriverList; -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 D3DLIGHT9 ambientLight; // constant ambient light -extern BOOL implicitMultisample; -#endif diff --git a/src/native/d3d/D3dUtil.cpp b/src/native/d3d/D3dUtil.cpp deleted file mode 100644 index 3bb495a..0000000 --- a/src/native/d3d/D3dUtil.cpp +++ /dev/null @@ -1,12500 +0,0 @@ -/* - * $RCSfile$ - * - * Copyright 2000-2008 Sun Microsystems, Inc. All Rights Reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * $Revision$ - * $Date$ - * $State$ - */ - -#include "StdAfx.h" - -HANDLE hSema = CreateSemaphore(NULL, 1, 1, "Java3d_Ctx"); - -HANDLE geometrySema = CreateSemaphore(NULL, 1, 1, - "Java3d_GeometryArrayLock"); -HANDLE surfaceListSema = CreateSemaphore(NULL, 1, 1, "Java3d_SurfaceListLock"); - -BOOL firstError = true; -BOOL firstWarning = true; -BOOL debug = false; - - -vector<void *> freePointerList0; -vector<void *> freePointerList1; -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 9.0c 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 !", - "Fail to create hardware D3D Device, switch to use reference rasterizer.", - "Fail to create reference rasterizer 3D Device.", - "Fail to set Viewport", - "Fail to get attach back buffer", - "256 color mode not support !", - "Out of memory !", - "Unknown 3D device specified in property j3d.d3ddevice, please use either \"reference\" or \"hardware\".", - "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. 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.", - "No compatible depth buffer found in your system, please switch to other display mode or try reference rasterizer.", - "Depth buffer with the required bit depth is not support, please try the default.", - "Fail to lock Vertex Buffer", - "Fail to create Vertex Buffer", - "Fail to create Index Buffer", - "Fail to lock Index Buffer", - "Graphics card doesn't support Hardware Acceleration. \n Java3D will use DirectX Reference Rasterizer (Soft).", - "Unable to create DirectX D3D context.\n Neither Hardware and Software Renderer are available.\n Please update your video card drivers\n and get the latest DirectX available at http://microsoft.com/directx \n" -}; - -D3DTRANSFORMSTATETYPE transformState[] = { - D3DTS_TEXTURE0, - D3DTS_TEXTURE1, - D3DTS_TEXTURE2, - D3DTS_TEXTURE3, - D3DTS_TEXTURE4, - D3DTS_TEXTURE5, - D3DTS_TEXTURE6, - D3DTS_TEXTURE7}; - -#define D3DFORMATTABLESIZE 40 - -D3DFORMAT d3dFormatTable[] = { - D3DFMT_UNKNOWN, //01 - D3DFMT_R8G8B8, //02 - D3DFMT_A8R8G8B8, //03 - D3DFMT_X8R8G8B8, //04 - D3DFMT_R5G6B5, //05 - D3DFMT_X1R5G5B5, //06 - D3DFMT_A1R5G5B5, //07 - D3DFMT_A4R4G4B4, //08 - D3DFMT_R3G3B2, //09 - D3DFMT_A8, //10 - D3DFMT_A8R3G3B2, //11 - D3DFMT_X4R4G4B4, //12 - D3DFMT_A8P8, //13 - D3DFMT_P8, //14 - D3DFMT_L8, //15 - D3DFMT_A8L8, //16 - D3DFMT_A4L4, //17 - D3DFMT_V8U8, //18 - D3DFMT_L6V5U5, //19 - D3DFMT_X8L8V8U8, //20 - D3DFMT_Q8W8V8U8, //21 - D3DFMT_V16U16, //22 - // D3DFMT_W11V11U10, //XX - D3DFMT_UYVY, //23 - D3DFMT_YUY2, //24 - D3DFMT_DXT1, //25 - D3DFMT_DXT2, //26 - D3DFMT_DXT3, //27 - D3DFMT_DXT4, //28 - D3DFMT_DXT5, //29 - D3DFMT_D16_LOCKABLE, //30 - D3DFMT_D32, //31 - D3DFMT_D15S1, //32 - D3DFMT_D24S8, //33 - D3DFMT_D16, //34 - D3DFMT_D24X8, //35 - D3DFMT_D24X4S4, //36 - D3DFMT_VERTEXDATA, //37 - D3DFMT_INDEX16, //38 - D3DFMT_INDEX32 //39 -}; - -char *d3dFormatTableChar[] = { - "D3DFMT_UNKNOWN", //01 - "D3DFMT_R8G8B8", //02 - "D3DFMT_A8R8G8B8", //03 - "D3DFMT_X8R8G8B8", //04 - "D3DFMT_R5G6B5", //05 - "D3DFMT_X1R5G5B5", //06 - "D3DFMT_A1R5G5B5", //07 - "D3DFMT_A4R4G4B4", //08 - "D3DFMT_R3G3B2", //09 - "D3DFMT_A8", //10 - "D3DFMT_A8R3G3B2", //11 - "D3DFMT_X4R4G4B4", //12 - "D3DFMT_A8P8", //13 - "D3DFMT_P8", //14 - "D3DFMT_L8", //15 - "D3DFMT_A8L8", //16 - "D3DFMT_A4L4", //17 - "D3DFMT_V8U8", //18 - "D3DFMT_L6V5U5", //19 - "D3DFMT_X8L8V8U8", //20 - "D3DFMT_Q8W8V8U8", //21 - "D3DFMT_V16U16", //22 - // "D3DFMT_W11V11U10", //XX - "D3DFMT_UYVY", //23 - "D3DFMT_YUY2", //24 - "D3DFMT_DXT1", //25 - "D3DFMT_DXT2", //26 - "D3DFMT_DXT3", //27 - "D3DFMT_DXT4", //28 - "D3DFMT_DXT5", //29 - "D3DFMT_D16_LOCKABLE",//30 - "D3DFMT_D32", //31 - "D3DFMT_D15S1", //32 - "D3DFMT_D24S8", //33 - "D3DFMT_D16", //34 - "D3DFMT_D24X8", //35 - "D3DFMT_D24X4S4", //36 - "D3DFMT_VERTEXDATA", //37 - "D3DFMT_INDEX16", //38 - "D3DFMT_INDEX32" //39 -}; - -char* multipleSampleTypeTable[] = { - "D3DMULTISAMPLE_NONE", - "D3DMULTISAMPLE_UNKNOWN", - "D3DMULTISAMPLE_2_SAMPLES", - "D3DMULTISAMPLE_3_SAMPLES", - "D3DMULTISAMPLE_4_SAMPLES", - "D3DMULTISAMPLE_5_SAMPLES", - "D3DMULTISAMPLE_6_SAMPLES", - "D3DMULTISAMPLE_7_SAMPLES", - "D3DMULTISAMPLE_8_SAMPLES", - "D3DMULTISAMPLE_9_SAMPLES", - "D3DMULTISAMPLE_10_SAMPLES", - "D3DMULTISAMPLE_11_SAMPLES", - "D3DMULTISAMPLE_12_SAMPLES", - "D3DMULTISAMPLE_13_SAMPLES", - "D3DMULTISAMPLE_14_SAMPLES", - "D3DMULTISAMPLE_15_SAMPLES", - "D3DMULTISAMPLE_16_SAMPLES" -}; - -char* swapEffectTable[] = { - "D3DSWAPEFFECT_UNKNOWN", - "D3DSWAPEFFECT_DISCARD", - "D3DSWAPEFFECT_FLIP", - "D3DSWAPEFFECT_COPY", - "D3DSWAPEFFECT_COPY_VSYNC" -}; - - -// mapping from java enum to d3d enum - -D3DCUBEMAP_FACES textureCubeMapFace[] = { - D3DCUBEMAP_FACE_POSITIVE_X, - D3DCUBEMAP_FACE_NEGATIVE_X, - D3DCUBEMAP_FACE_POSITIVE_Y, - D3DCUBEMAP_FACE_NEGATIVE_Y, - D3DCUBEMAP_FACE_NEGATIVE_Z, - D3DCUBEMAP_FACE_POSITIVE_Z, -}; - -typedef struct _PIXELFORMAT { - DWORD dwRGBBitCount; - DWORD dwRBitMask; - DWORD dwGBitMask; - DWORD dwBBitMask; - DWORD dwRGBAlphaBitMask; - BOOL noAlpha; -} PIXELFORMAT; - - -typedef struct _DEPTHPIXELFORMAT { - DWORD dwZBufferBitDepth; - DWORD dwZBitMask; - DWORD dwStencilBitDepth; - DWORD dwStencilBitMask; -} DEPTHPIXELFORMAT; - -void throwAssert(JNIEnv *env, char *str) -{ - jclass rte; - if ((rte = (jclass)env->FindClass("java/lang/AssertionError")) != NULL) { - (void *)env->ThrowNew(rte, str); - } -} - -char *getSwapEffectName(D3DSWAPEFFECT swapEffect) -{ - int t = (int) swapEffect; - if ((t < 0) || (t > 4)) { - return swapEffectTable[0]; - } - return swapEffectTable[t]; -} - -char *getMultiSampleName(D3DMULTISAMPLE_TYPE mtype) -{ - int t = (int) mtype; - if ((t < 0) || (t > 16)) { - // UNKNOWN - return multipleSampleTypeTable[1]; - } - return multipleSampleTypeTable[t]; -} - -char* getPixelFormatName(D3DFORMAT f) -{ - for (int i=0; i < D3DFORMATTABLESIZE; i++) { - if (f == d3dFormatTable[i]) { - return d3dFormatTableChar[i]; - } - } - // should not happen - return d3dFormatTableChar[0]; -} - -// If there is a new D3DFORMAT, just add it here and -// our copy procedures can handle any format specific -// as bit mask. -//@TODO add floating point pixelFormats -VOID computePixelFormat(PIXELFORMAT *ddpf, D3DFORMAT format) -{ - switch (format) { - case D3DFMT_R8G8B8: - ddpf->dwRGBBitCount = 24; - ddpf->dwRGBAlphaBitMask = 0; - ddpf->dwRBitMask = 0x00ff0000; - ddpf->dwGBitMask = 0x0000ff00; - ddpf->dwBBitMask = 0x000000ff; - ddpf->noAlpha = true; - break; - case D3DFMT_A8R8G8B8: - ddpf->dwRGBBitCount = 32; - ddpf->dwRGBAlphaBitMask = 0xff000000; - ddpf->dwRBitMask = 0x00ff0000; - ddpf->dwGBitMask = 0x0000ff00; - ddpf->dwBBitMask = 0x000000ff; - ddpf->noAlpha = false; - break; - case D3DFMT_X8R8G8B8: - ddpf->dwRGBBitCount = 32; - ddpf->dwRGBAlphaBitMask = 0; - ddpf->dwRBitMask = 0x00ff0000; - ddpf->dwGBitMask = 0x0000ff00; - ddpf->dwBBitMask = 0x000000ff; - ddpf->noAlpha = true; - break; - case D3DFMT_R5G6B5: - ddpf->dwRGBBitCount = 16; - ddpf->dwRGBAlphaBitMask = 0; - ddpf->dwRBitMask = 0xf800; - ddpf->dwGBitMask = 0x07e0; - ddpf->dwBBitMask = 0x001f; - ddpf->noAlpha = true; - break; - case D3DFMT_X1R5G5B5: - ddpf->dwRGBBitCount = 16; - ddpf->dwRGBAlphaBitMask = 0; - ddpf->dwRBitMask = 0x7c00; - ddpf->dwGBitMask = 0x03e0; - ddpf->dwBBitMask = 0x001f; - ddpf->noAlpha = true; - break; - case D3DFMT_A1R5G5B5: - ddpf->dwRGBBitCount = 16; - ddpf->dwRGBAlphaBitMask = 0x8000; - ddpf->dwRBitMask = 0x7c00; - ddpf->dwGBitMask = 0x03e0; - ddpf->dwBBitMask = 0x001f; - ddpf->noAlpha = false; - break; - case D3DFMT_A4R4G4B4: - ddpf->dwRGBBitCount = 16; - ddpf->dwRGBAlphaBitMask = 0xf000; - ddpf->dwRBitMask = 0x0f00; - ddpf->dwGBitMask = 0x00f0; - ddpf->dwBBitMask = 0x000f; - ddpf->noAlpha = false; - break; - case D3DFMT_X4R4G4B4: - ddpf->dwRGBBitCount = 16; - ddpf->dwRGBAlphaBitMask = 0; - ddpf->dwRBitMask = 0x0f00; - ddpf->dwGBitMask = 0x00f0; - ddpf->dwBBitMask = 0x000f; - ddpf->noAlpha = true; - break; - case D3DFMT_R3G3B2: - ddpf->dwRGBBitCount = 8; - ddpf->dwRGBAlphaBitMask = 0; - ddpf->dwRBitMask = 0xe0; - ddpf->dwGBitMask = 0x1c; - ddpf->dwBBitMask = 0x03; - ddpf->noAlpha = true; - break; - case D3DFMT_A8R3G3B2: - ddpf->dwRGBBitCount = 16; - ddpf->dwRGBAlphaBitMask = 0xff00; - ddpf->dwRBitMask = 0x00e0; - ddpf->dwGBitMask = 0x001c; - ddpf->dwBBitMask = 0x0003; - ddpf->noAlpha = false; - break; - case D3DFMT_A8: - ddpf->dwRGBBitCount = 8; - ddpf->dwRGBAlphaBitMask = 0xff; - ddpf->dwRBitMask = 0; - ddpf->dwGBitMask = 0; - ddpf->dwBBitMask = 0; - ddpf->noAlpha = false; - break; - case D3DFMT_L8: - ddpf->dwRGBBitCount = 8; - ddpf->dwRGBAlphaBitMask = 0; - ddpf->dwRBitMask = 0xff; - ddpf->dwGBitMask = 0; - ddpf->dwBBitMask = 0; - ddpf->noAlpha = true; - break; - case D3DFMT_A8L8: - ddpf->dwRGBBitCount = 16; - ddpf->dwRGBAlphaBitMask = 0xff00; - ddpf->dwRBitMask = 0x00ff; - ddpf->dwGBitMask = 0; - ddpf->dwBBitMask = 0; - ddpf->noAlpha = false; - break; - case D3DFMT_A4L4: - ddpf->dwRGBBitCount = 8; - ddpf->dwRGBAlphaBitMask = 0xf0; - ddpf->dwRBitMask = 0x0f; - ddpf->dwGBitMask = 0; - ddpf->dwBBitMask = 0; - ddpf->noAlpha = false; - break; - default: - printf("Unsupport format %d\n ", format); - ddpf->dwRGBBitCount = 8; - ddpf->dwRGBAlphaBitMask = 0; - ddpf->dwRBitMask = 0; - ddpf->dwGBitMask = 0; - ddpf->dwBBitMask = 0; - ddpf->noAlpha = true; - break; - } - -} - - -/* - * 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) -{ - switch (format) { - case D3DFMT_D16_LOCKABLE: - case D3DFMT_D16: - ddpf->dwZBufferBitDepth = 16; - ddpf->dwZBitMask = 0xffff; - ddpf->dwStencilBitDepth = 0; - ddpf->dwStencilBitMask = 0x0000; - break; - case D3DFMT_D15S1: - ddpf->dwZBufferBitDepth = 16; - ddpf->dwZBitMask = 0xfffe; - ddpf->dwStencilBitDepth = 1; - ddpf->dwStencilBitMask = 0x0001; - break; - case D3DFMT_D32: - ddpf->dwZBufferBitDepth = 32; - ddpf->dwZBitMask = 0xffffffff; - ddpf->dwStencilBitDepth = 0; - ddpf->dwStencilBitMask = 0x000000; - break; - case D3DFMT_D24S8: - ddpf->dwZBufferBitDepth = 32; - ddpf->dwZBitMask = 0xffffff00; - ddpf->dwStencilBitDepth = 8; - ddpf->dwStencilBitMask = 0x00000ff; - break; - case D3DFMT_D24X8: - ddpf->dwZBufferBitDepth = 32; - ddpf->dwZBitMask = 0xffffff00; - ddpf->dwStencilBitDepth = 0; - ddpf->dwStencilBitMask = 0x0000000; - break; - case D3DFMT_D24X4S4: - ddpf->dwZBufferBitDepth = 32; - ddpf->dwZBitMask = 0xffffff00; - ddpf->dwStencilBitDepth = 4; - ddpf->dwStencilBitMask = 0x000000f; - break; - default: - printf("Unknown depth buffer format %d\n", format); - } -} - - -/* - * Set the correct D3DTSS_TEXTURETRANSFORMFLAGS - */ -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 - * reference device mode. - */ - if ((!d3dCtx->texTransformSet[tus]) && - (d3dCtx->texGenMode == TEX_GEN_NONE)) { - device->SetTextureStageState(tus, - D3DTSS_TEXTURETRANSFORMFLAGS, - D3DTTFF_DISABLE); - } else { - D3DXMATRIX *m; - - switch (ts) { - case 2: - // Adjust for 2D texture transform in D3D - // 1 0 0 0 - // 0 1 0 0 - // du dv 0 0 - // 0 0 0 0 - // - - /* - * From [email protected]: - * - * The texture transform matrix is funky. With COUNT=2 - * and texture coordinates coming from the vertices, you - * can't use the stock transformation matrix functions to - * generate the matrix without adjusting it before setting - * the transform. Basically in the case of COUNT=2 with - * texcoords coming from the vertices, the pipeline uses - * the upper 3x3 submatrix of the 4x4 matrix as the - * transformation. So if you were expecting the (u,v) - * translation elements to be on the 4th row, these won't - * be applied properly in this case. - * - * What's funky is that if you were using COUNT=2 and - * texture coordinates coming in automatically, then it - * wants the translation in the 4th row. I can't decide - * yet if this is a poor specification that results in - * this matrix weirdness, or if its a bug in the runtime. - */ - if ((genMode != TEX_GEN_AUTO) && - !d3dCtx->texTranslateSet[tus]) { - m = &d3dCtx->texTransform[tus]; - (*m)._31 = (*m)._41; - (*m)._32 = (*m)._42; - device->SetTransform((D3DTRANSFORMSTATETYPE) - (D3DTS_TEXTURE0 + tus), m); - d3dCtx->texTranslateSet[tus] = true; - } - - device->SetTextureStageState(tus, - D3DTSS_TEXTURETRANSFORMFLAGS, - D3DTTFF_COUNT2); - break; - case 3: - device->SetTextureStageState(tus, - D3DTSS_TEXTURETRANSFORMFLAGS, - D3DTTFF_COUNT3); - break; - case 4: - if (d3dCtx->texGenMode[tus] == TEX_OBJ_LINEAR) { - // 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 - // own texture transform when generate texture - // coordinate. - device->SetTextureStageState(tus, - D3DTSS_TEXTURETRANSFORMFLAGS, - D3DTTFF_DISABLE); - } else { - device->SetTextureStageState(tus, - D3DTSS_TEXTURETRANSFORMFLAGS, - D3DTTFF_COUNT4|D3DTTFF_PROJECTED); - } - break; - default: - printf("ERROR texCoordFormat, stage %d, format %d\n", - tus, ts); - } - } - -} - -/* - * Set the corresponding D3D texture coordinate - * mapping mode. - */ -inline int setTextureStage(D3dCtx *d3dCtx, - LPDIRECT3DDEVICE9 device, - int mapTexStage, - jint texStage) -{ - DWORD mode = 0; - int genMode = d3dCtx->texGenMode[mapTexStage]; - - // printf("Set TexStage mapTexStage = %d, texStage = %d, genMode = %d\n", - // mapTexStage, texStage, genMode); - - switch (genMode) { - case TEX_GEN_NONE: - case TEX_OBJ_LINEAR: - case TEX_GEN_INVALID: - // optimize for general case - device->SetTextureStageState(mapTexStage, - D3DTSS_TEXCOORDINDEX, - texStage); - return genMode; - case TEX_EYE_LINEAR: - mode = D3DTSS_TCI_CAMERASPACEPOSITION; - break; - case TEX_SPHERE_MAP: - mode = D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR; - break; - case TEX_NORMAL_MAP: - mode = D3DTSS_TCI_CAMERASPACENORMAL; - break; - case TEX_REFLECT_MAP: - mode = D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR; - break; - default: - // should not happen - printf("Unknown TexCoordGenMode %d\n", genMode); - break; - } - // Need to OR texStage for Wrapping mode even though - // there is no texture coordinate defined in that texStage in VB. - // This also clear the texStage previously set. - device->SetTextureStageState(mapTexStage, - D3DTSS_TEXCOORDINDEX, - mode | texStage); - - return TEX_GEN_AUTO; -} - - -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) { - for (texWidth=1; *width > texWidth; texWidth <<= 1); - for (texHeight=1; *height > texHeight; texHeight <<= 1); - } - - - if (deviceInfo->textureSquareOnly) { - if (texWidth >= texHeight) { - texHeight = texWidth; - } else { - texWidth = texHeight; - } - } - - // Check for maximum texture size support by hardware - if (texWidth > deviceInfo->maxTextureWidth) { - if (debug) { - printf("[Java 3D] Warning: Input texture width %d > maximum texture width %d hardware can support.\n", texWidth, deviceInfo->maxTextureWidth); - if (*width != texWidth) { - printf("Note that width is adjust from %d to %d to reflect texture limitation e.g. POW2, SQAUREONLY in hardware.\n", *width, texWidth); - } - } - texWidth = deviceInfo->maxTextureWidth; - } - - if (texHeight > deviceInfo->maxTextureHeight) { - if (debug) { - printf("[Java 3D] Warning: Input texture height %d > maximum texture height %d hardware can support.\n", texHeight, deviceInfo->maxTextureHeight); - if (*height != texHeight) { - printf("Note that height is adjust from %d to %d to reflect texture limitation e.g. POW2, SQAUREONLY in hardware.\n", *height, texHeight); - } - } - texHeight = deviceInfo->maxTextureHeight; - } - - *width = texWidth; - *height = texHeight; -} - -D3DFORMAT getTexFormat(jint textureFormat) { - - switch (textureFormat) { - case J3D_RGBA: - case INTENSITY: - // printf("[getTexFormat] textureFormat %d J3D_RGBA\n", textureFormat); - return D3DFMT_A8R8G8B8; - case J3D_RGB: - // printf("[getTexFormat] textureFormat %d J3D_RGB\n", textureFormat); - return D3DFMT_R8G8B8; - case LUMINANCE_ALPHA: - return D3DFMT_A8L8; - case ALPHA: - return D3DFMT_A8; - case LUMINANCE: - return D3DFMT_L8; - default: - printf("CreateTextureSurface: Unknown Java 3D Texture Format %d\n", textureFormat); - return D3DFMT_UNKNOWN; - } - -} - -D3dCtx* findCtx(HWND hwnd) -{ - D3dCtx *ctx = NULL; - - for (ITER_D3dCtxVector p = d3dCtxList.begin(); p != d3dCtxList.end(); p++) { - if ((*p)->hwnd == hwnd) { - ctx = *p; - break; - } - } - return ctx; -} - -inline VOID lock() -{ - if (hSema != NULL) { - WaitForSingleObject(hSema, INFINITE); - } -} - -inline VOID unlock() -{ - if (hSema != NULL) { - ReleaseSemaphore(hSema, 1, NULL); - } -} - - -inline VOID lockSurfaceList() -{ - if (surfaceListSema != NULL) { - WaitForSingleObject(surfaceListSema, INFINITE); - } -} - -inline VOID unlockSurfaceList() -{ - if (surfaceListSema != NULL) { - ReleaseSemaphore(surfaceListSema, 1, NULL); - } -} - -inline VOID lockGeometry() -{ - if (geometrySema != NULL) { - WaitForSingleObject(geometrySema, INFINITE); - } -} - -inline VOID unlockGeometry() -{ - if (geometrySema != NULL) { - ReleaseSemaphore(geometrySema, 1, NULL); - } -} - -VOID freePointer(void * ptr) -{ - if (ptr != NULL) { - lockSurfaceList(); - if (useFreePointerList0) { - freePointerList0.push_back(ptr); - } else { - freePointerList1.push_back(ptr); - } - unlockSurfaceList(); - } -} - - -char *getErrorMessage(int idx) -{ - return D3dErrorMessage[idx]; -} - - - -HWND getTopWindow(HWND hwnd) -{ - HWND desktop = GetDesktopWindow(); - HWND parent = GetParent(hwnd); - - while ((parent != NULL) && (parent != desktop)) { - hwnd = parent; - parent = GetParent(hwnd); - } - return hwnd; -} - - -DWORD firstBit(DWORD mask) -{ - int i; - - for (i=0; i < sizeof(DWORD)*8-1; i++) { - if ((mask & 0x01) > 0) { - return i; - } - mask >>= 1; - } - - return i; -} - -// create a DirectDraw Texture surface of specific width and height -LPDIRECT3DTEXTURE9 createTextureSurface(D3dCtx *d3dCtx, - jint numLevels, - jint textureFormat, - jint width, jint height, - jboolean useAutoMipMap) -{ - LPDIRECT3DTEXTURE9 pTexture; - D3DFORMAT format; - HRESULT hr; - DWORD usage = 0; - - LPDIRECT3DDEVICE9 pDevice = d3dCtx->pDevice; - D3dDeviceInfo *deviceInfo = d3dCtx->deviceInfo; - - if (!deviceInfo->supportMipmap) { - numLevels = 1; - } - - getTexWidthHeight(deviceInfo, &width, &height); - format = getTexFormat(textureFormat); - - if (useAutoMipMap) { - usage |= D3DUSAGE_AUTOGENMIPMAP; - } - - // If format not support, the utility function will adjust the - // calling parameters automatically - hr = D3DXCreateTexture(d3dCtx->pDevice, width, height, - numLevels, usage, format, D3DPOOL_MANAGED, - &pTexture); - - if (FAILED(hr)) { - printf("Fail to create texture surface %dx%d, format %d, level %d : %s\n", - width, height, format, numLevels, DXGetErrorString9(hr)); - return NULL; - } - - return pTexture; -} - - - -// create a DirectDraw Texture surface of specific width and height -LPDIRECT3DVOLUMETEXTURE9 createVolumeTexture(D3dCtx *d3dCtx, - jint numLevels, - jint textureFormat, - jint width, - jint height, - jint depth, - jboolean useAutoMipMap) - -{ - LPDIRECT3DVOLUMETEXTURE9 pTexture; - int texWidth, texHeight, texDepth; - D3DFORMAT format; - HRESULT hr; - DWORD usage = 0; - - LPDIRECT3DDEVICE9 pDevice = d3dCtx->pDevice; - D3dDeviceInfo *deviceInfo = d3dCtx->deviceInfo; - - texWidth = width; - texHeight = height; - texDepth = depth; - - if (!deviceInfo->supportMipmap) { - numLevels = 1; - } - - if (useAutoMipMap) { - usage |= D3DUSAGE_AUTOGENMIPMAP; - } - - // Found a texture bigger than width/height - if (deviceInfo->texturePow2Only) { - for (texWidth=1; width > texWidth; texWidth <<= 1); - for (texHeight=1; height > texHeight; texHeight <<= 1); - for (texDepth=1; depth > texDepth; texDepth <<= 1); - } - - if (deviceInfo->textureSquareOnly) { - if (texWidth >= texHeight) { - texHeight = texWidth; - } else { - texWidth = texHeight; - } - if (texDepth <= texWidth) { - texDepth = texWidth; - } else { - texWidth = texHeight = texDepth; - } - } - - // Check for maximum texture size support by hardware - if (texWidth > deviceInfo->maxTextureWidth) { - if (debug) { - printf("[Java 3D] Warning: Input texture width %d > maximum texture width %d hardware can support.\n", texWidth, deviceInfo->maxTextureWidth); - if (width != texWidth) { - printf("Note that width is adjust from %d to %d to reflect texture limitation e.g. POW2, SQAUREONLY in hardware.\n", width, texWidth); - } - } - texWidth = deviceInfo->maxTextureWidth; - } - - if (texHeight > deviceInfo->maxTextureHeight) { - if (debug) { - printf("[Java 3D] Warning: Input texture height %d > maximum texture height %d hardware can support.\n", texHeight, deviceInfo->maxTextureHeight); - if (height != texHeight) { - printf("Note that height is adjust from %d to %d to reflect texture limitation e.g. POW2, SQAUREONLY in hardware.\n", height, texHeight); - } - } - texHeight = deviceInfo->maxTextureHeight; - } - - if (texDepth > deviceInfo->maxTextureDepth) { - if (debug) { - printf("[Java 3D] Warning: Input texture depth %d > maximum texture depth %d hardware can support.\n", texDepth, deviceInfo->maxTextureDepth); - if (depth != texDepth) { - printf("Note that depth is adjust from %d to %d to reflect texture limitation e.g. POW2, SQAUREONLY in hardware.\n", depth, texDepth); - } - } - texDepth = deviceInfo->maxTextureDepth; - } - - format = getTexFormat(textureFormat); - - // If format not support, the utility function will adjust the - // calling parameters automatically - hr = D3DXCreateVolumeTexture(d3dCtx->pDevice, texWidth, texHeight, - texDepth, numLevels, usage, format, D3DPOOL_MANAGED, - &pTexture); - - if (FAILED(hr)) { - if (debug) { - printf("Fail to create volume texture %dx%dx%d, format %d, level %d : %s\n", - texWidth, texHeight, texDepth, format, numLevels, - DXGetErrorString9(hr)); - } - return NULL; - } - - return pTexture; -} - - -// copy data from DirectDraw surface to memory -// and reverse the Y axis -void copyDataFromSurface(jint imageFormat, - jint xoffset, jint yoffset, - jint subWidth, jint subHeight, - jbyte *data, - LPDIRECT3DSURFACE9 surf) -{ - D3DSURFACE_DESC ddsd; - D3DLOCKED_RECT lockedRect; - PIXELFORMAT ddpf; - HRESULT hr; - - if (surf == NULL) { - return; - } - - surf->GetDesc(&ddsd); - DWORD width = ddsd.Width; - DWORD height = ddsd.Height; - computePixelFormat(&ddpf, ddsd.Format); - - if ((xoffset >= width) || (yoffset >= height)) { - return; - } - - DWORD xlimit = min(xoffset + subWidth, width); - DWORD ylimit = min(yoffset + subHeight, height); - - hr = surf->LockRect(&lockedRect, NULL, D3DLOCK_NOSYSLOCK| - D3DLOCK_READONLY); - - if (FAILED(hr)) { - printf("Fail to lock surface: %s\n", DXGetErrorString9(hr)); - return; - } - - unsigned char *src; - unsigned char *dst; - byte b1, b2, b3, b4; - DWORD mask, t; - DWORD dstPitch; - - unsigned char *destRow = (unsigned char *) data; - unsigned char *srcRow = ((unsigned char *) lockedRect.pBits) + - xoffset*((int) ceil((float) ddpf.dwRGBBitCount/8.0)) + - (yoffset*lockedRect.Pitch); - - if ((imageFormat == IMAGE_FORMAT_INT_RGB) || - (imageFormat == IMAGE_FORMAT_INT_ARGB)) { - dstPitch = subWidth << 2; - destRow += (subHeight-1)*dstPitch; - - /* printf("[Java 3D] copyDataFromSurface: (1) %d\n", ddpf.dwRGBBitCount); */ - - if ((ddpf.dwRGBBitCount == 32) && - (ddpf.dwRBitMask == 0xff0000) && - (ddpf.dwGBitMask == 0xff00) && - (ddpf.dwBBitMask == 0xff)) { - // Optimize for the most common case - if (ddpf.noAlpha) { - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - *dst++ = *src++; - *dst++ = *src++; - *dst++ = *src++; - *src++; - *dst++ = (byte) 0xff; - } - srcRow += lockedRect.Pitch; - destRow -= dstPitch; - } - } else { - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - *dst++ = *src++; - *dst++ = *src++; - *dst++ = *src++; - *dst++ = *src++; - } - srcRow += lockedRect.Pitch; - destRow -= dstPitch; - } - } - } else { // handle less common format - int rshift = firstBit(ddpf.dwRBitMask) + - ucountBits(ddpf.dwRBitMask) - 8; - int gshift = firstBit(ddpf.dwGBitMask) + - ucountBits(ddpf.dwGBitMask) - 8; - int bshift = firstBit(ddpf.dwBBitMask) + - ucountBits(ddpf.dwBBitMask) - 8; - int ashift = firstBit(ddpf.dwRGBAlphaBitMask) + - ucountBits(ddpf.dwRGBAlphaBitMask) - 8; - - if ((ddpf.dwRGBBitCount <= 32) && - (ddpf.dwRGBBitCount > 24)) { - - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - b1 = *src++; - b2 = *src++; - b3 = *src++; - b4 = *src++; - mask = ((b4 << 24) | (b3 << 16)| (b2 << 8) | b1); - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - *dst++ = (byte) ((mask >> 16) & 0xff); - if (ddpf.noAlpha) { - *dst++ = (byte) 0xff; - } else { - *dst++ = (byte) ((mask >> 24) & 0xff); - } - } - srcRow += lockedRect.Pitch; - destRow -= dstPitch; - } - } else if ((ddpf.dwRGBBitCount <= 24) && - (ddpf.dwRGBBitCount > 16)) { - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - b1 = *src++; - b2 = *src++; - b3 = *src++; - mask = ((b3 << 16) | (b2 << 8) | b1); - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - *dst++ = (byte) ((mask >> 16) & 0xff); - } - srcRow += lockedRect.Pitch; - destRow -= dstPitch; - } - } else if ((ddpf.dwRGBBitCount <= 16) && - (ddpf.dwRGBBitCount > 8)) { - - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - b1 = *src++; - b2 = *src++; - mask = ((b2 << 8) | b1); - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - } - srcRow += lockedRect.Pitch; - destRow -= dstPitch; - } - } else if (ddpf.dwRGBBitCount <= 8) { - /* printf("[Java 3D] copyDataFromSurface: Format on (8 bits or less surface) not support %d\n", imageFormat); */ - } - } - } else if ((imageFormat == IMAGE_FORMAT_BYTE_RGBA) || - (imageFormat == IMAGE_FORMAT_BYTE_RGB) || - (imageFormat == IMAGE_FORMAT_INT_BGR)) { - - /* printf("[Java 3D] copyDataFromSurface: (2) %d\n", ddpf.dwRGBBitCount); */ - - dstPitch = subWidth << 2; - destRow += (subHeight-1)*dstPitch; - - if ((ddpf.dwRGBBitCount == 32) && - (ddpf.dwRBitMask == 0xff0000) && - (ddpf.dwGBitMask == 0xff00) && - (ddpf.dwBBitMask == 0xff)) { - // Optimize for the most common case - if (ddpf.noAlpha) { - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - b1 = *src++; - b2 = *src++; - b3 = *src++; - *dst++ = b3; - *dst++ = b2; - *dst++ = b1; - *src++; - *dst++ = (byte) 0xff; - } - srcRow += lockedRect.Pitch; - destRow -= dstPitch; - } - } else { - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - b1 = *src++; - b2 = *src++; - b3 = *src++; - *dst++ = b3; - *dst++ = b2; - *dst++ = b1; - *dst++ = *src++; - } - srcRow += lockedRect.Pitch; - destRow -= dstPitch; - } - } - } else { // handle less common format - int rshift = firstBit(ddpf.dwRBitMask) + - ucountBits(ddpf.dwRBitMask) - 8; - int gshift = firstBit(ddpf.dwGBitMask) + - ucountBits(ddpf.dwGBitMask) - 8; - int bshift = firstBit(ddpf.dwBBitMask) + - ucountBits(ddpf.dwBBitMask) - 8; - int ashift = firstBit(ddpf.dwRGBAlphaBitMask) + - ucountBits(ddpf.dwRGBAlphaBitMask) - 8; - - if ((ddpf.dwRGBBitCount <= 32) && - (ddpf.dwRGBBitCount > 24)) { - - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - b1 = *src++; - b2 = *src++; - b3 = *src++; - b4 = *src++; - mask = ((b4 << 24) | (b3 << 16)| (b2 << 8) | b1); - if (rshift >= 0) { - *dst++ = (byte) ((mask & ddpf.dwRBitMask) >> - rshift); - } else { - t = (mask & ddpf.dwRBitMask) << -rshift; - *dst++ = (t <= 0xff ? (byte) t : 0xff); - } - - if (gshift >= 0) { - *dst++ = (byte) ((mask & ddpf.dwGBitMask) >> - gshift); - } else { - t = (mask & ddpf.dwGBitMask) << -gshift; - *dst++ = (t <= 0xff ? (byte) t : 0xff); - } - if (bshift >= 0) { - *dst++ = (byte) ((mask & ddpf.dwBBitMask) >> - bshift); - } else { - t = (mask & ddpf.dwBBitMask) << -bshift; - *dst++ = (t <= 0xff ? (byte) t : 0xff); - } - if (ddpf.noAlpha) { - *dst++ = (byte) 0xff; - } else { - if (ashift >= 0) { - *dst++ = (byte) ((mask & ddpf.dwRGBAlphaBitMask) >> - ashift); - } else { - t = (mask & ddpf.dwRGBAlphaBitMask) <<-ashift; - *dst++ = (t <= 0xff ? (byte) t : 0xff); - } - } - } - srcRow += lockedRect.Pitch; - destRow -= dstPitch; - } - } else if ((ddpf.dwRGBBitCount <= 24) && - (ddpf.dwRGBBitCount > 16)) { - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - b1 = *src++; - b2 = *src++; - b3 = *src++; - mask = ((b3 << 16) | (b2 << 8) | b1); - if (rshift >= 0) { - *dst++ = (byte) ((mask & ddpf.dwRBitMask) >> - rshift); - } else { - t = (mask & ddpf.dwRBitMask) << -rshift; - *dst++ = (t <= 0xff ? (byte) t : 0xff); - } - if (gshift >= 0) { - *dst++ = (byte) ((mask & ddpf.dwGBitMask) >> - gshift); - } else { - t = (mask & ddpf.dwGBitMask) <<-gshift; - *dst++ = (t <= 0xff ? (byte) t : 0xff); - } - if (bshift >= 0) { - *dst++ = (byte) ((mask & ddpf.dwBBitMask) >> - bshift); - } else { - t = (mask & ddpf.dwBBitMask) << -bshift; - *dst++ = (t <= 0xff ? (byte) t : 0xff); - } - if (ddpf.noAlpha) { - *dst++ = (byte) 0xff; - } else { - if (ashift >= 0) { - *dst++ = (byte) ((mask & ddpf.dwRGBAlphaBitMask) >> - ashift); - } else { - t = (mask & ddpf.dwRGBAlphaBitMask) <<-ashift; - *dst++ = (t <= 0xff ? (byte) t : 0xff); - } - } - } - srcRow += lockedRect.Pitch; - destRow -= dstPitch; - } - } else if ((ddpf.dwRGBBitCount <= 16) && - (ddpf.dwRGBBitCount > 8)) { - - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - b1 = *src++; - b2 = *src++; - mask = ((b2 << 8) | b1); - if (rshift >= 0) { - *dst++ = (byte) ((mask & ddpf.dwRBitMask) >> - rshift); - } else { - t = (mask & ddpf.dwRBitMask) << -rshift; - *dst++ = (t <= 0xff ? (byte) t : 0xff); - } - - if (gshift >= 0) { - *dst++ = (byte) ((mask & ddpf.dwGBitMask) >> - gshift); - } else { - t = (mask & ddpf.dwGBitMask) << -gshift; - *dst++ = (t <= 0xff ? (byte) t : 0xff); - } - if (bshift >= 0) { - *dst++ = (byte) ((mask & ddpf.dwBBitMask) >> - bshift); - } else { - t = (mask & ddpf.dwBBitMask) << -bshift; - *dst++ = (t <= 0xff ? (byte) t : 0xff); - } - - if (ddpf.noAlpha) { - *dst++ = (byte) 0xff; - } else { - if (ashift >= 0) { - *dst++ = (byte) ((mask & ddpf.dwRGBAlphaBitMask) >> - ashift); - } else { - t = (mask & ddpf.dwRGBAlphaBitMask) <<-ashift; - *dst++ = (t <= 0xff ? (byte) t : 0xff); - } - } - } - srcRow += lockedRect.Pitch; - destRow -= dstPitch; - } - } else if (ddpf.dwRGBBitCount <= 8) { - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - mask = *src++; - if (rshift >= 0) { - *dst++ = (byte) ((mask & ddpf.dwRBitMask) >> - rshift); - } else { - t = (mask & ddpf.dwRBitMask) << -rshift; - *dst++ = (t <= 0xff ? (byte) t : 0xff); - } - - if (gshift >= 0) { - *dst++ = (byte) ((mask & ddpf.dwGBitMask) >> - gshift); - } else { - t = (mask & ddpf.dwGBitMask) << -gshift; - *dst++ = (t <= 0xff ? (byte) t : 0xff); - } - if (bshift >= 0) { - *dst++ = (byte) ((mask & ddpf.dwBBitMask) >> - bshift); - } else { - t = (mask & ddpf.dwBBitMask) << -bshift; - *dst++ = (t <= 0xff ? (byte) t : 0xff); - } - if (ddpf.noAlpha) { - *dst++ = (byte) 0xff; - } else { - if (ashift >= 0) { - *dst++ = (byte) ((mask & ddpf.dwRGBAlphaBitMask) >> - ashift); - } else { - t = (mask & ddpf.dwRGBAlphaBitMask) <<-ashift; - *dst++ = (t <= 0xff ? (byte) t : 0xff); - } - } - } - srcRow += lockedRect.Pitch; - destRow -= dstPitch; - } - } - } - } else if (imageFormat == IMAGE_FORMAT_BYTE_LA) { - int gshift = firstBit(ddpf.dwGBitMask) + - ucountBits(ddpf.dwGBitMask) - 8; - int ashift = firstBit(ddpf.dwRGBAlphaBitMask) + - ucountBits(ddpf.dwRGBAlphaBitMask) - 8; - dstPitch = subWidth << 1; - destRow += (subHeight-1)*dstPitch; - - if ((ddpf.dwRGBBitCount == 32) && - (ddpf.dwRBitMask == 0xff0000) && - (ddpf.dwGBitMask == 0xff00) && - (ddpf.dwBBitMask == 0xff)) { - // Optimize for the most common case - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - b1 = *src++; - b2 = *src++; - b3 = *src++; - *dst++ = b2; - if (ddpf.noAlpha) { - *dst++ = (byte) 0xff; - *src++; - } else { - *dst++ = *src++; - } - } - srcRow += lockedRect.Pitch; - destRow -= dstPitch; - - } - } else { // handle less common format - int gshift = firstBit(ddpf.dwGBitMask) + - ucountBits(ddpf.dwGBitMask) - 8; - if ((ddpf.dwRGBBitCount <= 32) && - (ddpf.dwRGBBitCount > 24)) { - - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - b1 = *src++; - b2 = *src++; - b3 = *src++; - b4 = *src++; - mask = ((b4 << 24) | (b3 << 16)| (b2 << 8) | b1); - if (gshift >= 0) { - *dst++ = (byte) ((mask & ddpf.dwGBitMask) >> - gshift); - } else { - t = (mask & ddpf.dwGBitMask) << -gshift; - *dst++ = (t <= 0xff ? (byte) t : 0xff); - } - if (ddpf.noAlpha) { - *dst++ = (byte) 0xff; - } else { - if (ashift >= 0) { - *dst++ = (byte) ((mask & ddpf.dwRGBAlphaBitMask) >> - ashift); - } else { - t = (mask & ddpf.dwRGBAlphaBitMask) <<-ashift; - *dst++ = (t <= 0xff ? (byte) t : 0xff); - } - } - } - srcRow += lockedRect.Pitch; - destRow -= dstPitch; - } - } else if ((ddpf.dwRGBBitCount <= 24) && - (ddpf.dwRGBBitCount > 16)) { - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - b1 = *src++; - b2 = *src++; - b3 = *src++; - mask = ((b3 << 16) | (b2 << 8) | b1); - if (gshift >= 0) { - *dst++ = (byte) ((mask & ddpf.dwGBitMask) >> - gshift); - } else { - t = (mask & ddpf.dwGBitMask) << -gshift; - *dst++ = (t <= 0xff ? (byte) t : 0xff); - } - if (ddpf.noAlpha) { - *dst++ = (byte) 0xff; - } else { - if (ashift >= 0) { - *dst++ = (byte) ((mask & ddpf.dwRGBAlphaBitMask) >> - ashift); - } else { - t = (mask & ddpf.dwRGBAlphaBitMask) <<-ashift; - *dst++ = (t <= 0xff ? (byte) t : 0xff); - } - } - } - srcRow += lockedRect.Pitch; - destRow -= dstPitch; - } - } else if ((ddpf.dwRGBBitCount <= 16) && - (ddpf.dwRGBBitCount > 8)) { - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - b1 = *src++; - b2 = *src++; - mask = ((b2 << 8) | b1); - if (gshift >= 0) { - *dst++ = (byte) ((mask & ddpf.dwGBitMask) >> - gshift); - } else { - t = (mask & ddpf.dwGBitMask) << -gshift; - *dst++ = (t <= 0xff ? (byte) t : 0xff); - } - if (ddpf.noAlpha) { - *dst++ = (byte) 0xff; - } else { - if (ashift >= 0) { - *dst++ = (byte) ((mask & ddpf.dwRGBAlphaBitMask) >> - ashift); - } else { - t = (mask & ddpf.dwRGBAlphaBitMask) <<-ashift; - *dst++ = (t <= 0xff ? (byte) t : 0xff); - } - } - } - srcRow += lockedRect.Pitch; - destRow -= dstPitch; - } - } else if (ddpf.dwRGBBitCount <= 8) { - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - mask = *src++; - if (gshift >= 0) { - *dst++ = (byte) ((mask & ddpf.dwGBitMask) >> - gshift); - } else { - t = (mask & ddpf.dwGBitMask) << -gshift; - *dst++ = (t <= 0xff ? (byte) t : 0xff); - } - if (ddpf.noAlpha) { - *dst++ = (byte) 0xff; - } else { - if (ashift >= 0) { - *dst++ = (byte) ((mask & ddpf.dwRGBAlphaBitMask) >> - ashift); - } else { - t = (mask & ddpf.dwRGBAlphaBitMask) <<-ashift; - *dst++ = (t <= 0xff ? (byte) t : 0xff); - } - } - } - srcRow += lockedRect.Pitch; - destRow -= dstPitch; - } - } - } - - } else if (imageFormat == IMAGE_FORMAT_BYTE_GRAY) { - int gshift = firstBit(ddpf.dwGBitMask) + - ucountBits(ddpf.dwGBitMask) - 8; - dstPitch = subWidth; - destRow += (subHeight-1)*dstPitch; - - if ((ddpf.dwRGBBitCount == 32) && - (ddpf.dwRBitMask == 0xff0000) && - (ddpf.dwGBitMask == 0xff00) && - (ddpf.dwBBitMask == 0xff)) { - // Optimize for the most common case - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - b1 = *src++; - b2 = *src++; - b3 = *src++; - *dst++ = b2; - *src++; - } - srcRow += lockedRect.Pitch; - destRow -= dstPitch; - } - } else { // handle less common format - int gshift = firstBit(ddpf.dwGBitMask) + - ucountBits(ddpf.dwGBitMask) - 8; - if ((ddpf.dwRGBBitCount <= 32) && - (ddpf.dwRGBBitCount > 24)) { - - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - b1 = *src++; - b2 = *src++; - b3 = *src++; - b4 = *src++; - mask = ((b4 << 24) | (b3 << 16)| (b2 << 8) | b1); - if (gshift >= 0) { - *dst++ = (byte) ((mask & ddpf.dwGBitMask) >> - gshift); - } else { - t = (mask & ddpf.dwGBitMask) << -gshift; - *dst++ = (t <= 0xff ? (byte) t : 0xff); - } - } - srcRow += lockedRect.Pitch; - destRow -= dstPitch; - } - } else if ((ddpf.dwRGBBitCount <= 24) && - (ddpf.dwRGBBitCount > 16)) { - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - b1 = *src++; - b2 = *src++; - b3 = *src++; - mask = ((b3 << 16) | (b2 << 8) | b1); - if (gshift >= 0) { - *dst++ = (byte) ((mask & ddpf.dwGBitMask) >> - gshift); - } else { - t = (mask & ddpf.dwGBitMask) << -gshift; - *dst++ = (t <= 0xff ? (byte) t : 0xff); - } - } - srcRow += lockedRect.Pitch; - destRow -= dstPitch; - } - } else if ((ddpf.dwRGBBitCount <= 16) && - (ddpf.dwRGBBitCount > 8)) { - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - b1 = *src++; - b2 = *src++; - mask = ((b2 << 8) | b1); - if (gshift >= 0) { - *dst++ = (byte) ((mask & ddpf.dwGBitMask) >> - gshift); - } else { - t = (mask & ddpf.dwGBitMask) << -gshift; - *dst++ = (t <= 0xff ? (byte) t : 0xff); - } - } - srcRow += lockedRect.Pitch; - destRow -= dstPitch; - } - } else if (ddpf.dwRGBBitCount <= 8) { - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - mask = *src++; - if (gshift >= 0) { - *dst++ = (byte) ((mask & ddpf.dwGBitMask) >> - gshift); - } else { - t = (mask & ddpf.dwGBitMask) << -gshift; - *dst++ = (t <= 0xff ? (byte) t : 0xff); - } - } - srcRow += lockedRect.Pitch; - destRow -= dstPitch; - } - } - } - - } else { - // IMAGE_FORMAT_USHORT_GRAY - printf("[Java 3D] copyDataFromSurface: Format not support %d\n", imageFormat); - } - - - hr = surf->UnlockRect(); - if (FAILED(hr)) { - printf("Fail to unlock surface: %s\n", DXGetErrorString9(hr)); - return; - } - -} - - -void copyDataToSurfaceABGR(jint internalFormat, - PIXELFORMAT *ddpf, - unsigned char* pRect, - DWORD rectPitch, - jbyte *data, - jint xoffset, jint yoffset, - DWORD xlimit, DWORD ylimit, - jint subWidth) -{ - unsigned char *src; - unsigned char *dst; - DWORD r, g, b, a, l; - const DWORD srcPitch = subWidth*4; - unsigned char *srcRow = (unsigned char *) data; - unsigned char *destRow = pRect + rectPitch*yoffset; - - if ((internalFormat == J3D_RGBA) || - (internalFormat == J3D_RGB)) { - if ((ddpf->dwRGBBitCount == 32) && - (ddpf->dwRBitMask == 0xff0000) && - (ddpf->dwGBitMask == 0xff00) && - (ddpf->dwBBitMask == 0xff)) { - // Optimize for most common case - destRow += (xoffset << 2); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - a = *src++; - *dst++ = *src++; - *dst++ = *src++; - *dst++ = *src++; - *dst++ = a; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount == 16) && - (ddpf->dwRBitMask == 0xf00) && - (ddpf->dwGBitMask == 0xf0) && - (ddpf->dwBBitMask == 0xf)) { - destRow += (xoffset << 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - a = (*src++) >> 4; // discard the lower 4 bit - b = (*src++) >> 4; - g = (*src++) >> 4; - r = (*src++) >> 4; - *dst++ = (g << 4) | b; - *dst++ = (a << 4) | r; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { // handle less common (even weird) format - 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); - DWORD mask; - - if ((ddpf->dwRGBBitCount <= 32) && - (ddpf->dwRGBBitCount > 24)) { - destRow += (xoffset << 2); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) >> -aDiscard; - } - if (bDiscard >= 0) { - b = (*src++) >> bDiscard; - } else { - b = (*src++) >> -bDiscard; - } - if (gDiscard >= 0) { - g = (*src++) >> gDiscard; - } else { - g = (*src++) >> -gDiscard; - } - if (rDiscard >= 0) { - r = (*src++) >> rDiscard; - } else { - r = (*src++) << -rDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - *dst++ = (byte) ((mask >> 16) & 0xff); - *dst++ = (byte) ((mask >> 24) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xoffset*3); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) >> -aDiscard; - } - if (bDiscard >= 0) { - b = (*src++) >> bDiscard; - } else { - b = (*src++) >> -bDiscard; - } - if (gDiscard >= 0) { - g = (*src++) >> gDiscard; - } else { - g = (*src++) >> -gDiscard; - } - if (rDiscard >= 0) { - r = (*src++) >> rDiscard; - } else { - r = (*src++) << -rDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += (xoffset << 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) >> -aDiscard; - } - if (bDiscard >= 0) { - b = (*src++) >> bDiscard; - } else { - b = (*src++) >> -bDiscard; - } - if (gDiscard >= 0) { - g = (*src++) >> gDiscard; - } else { - g = (*src++) >> -gDiscard; - } - if (rDiscard >= 0) { - r = (*src++) >> rDiscard; - } else { - r = (*src++) << -rDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += xoffset; - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) >> -aDiscard; - } - if (bDiscard >= 0) { - b = (*src++) >> bDiscard; - } else { - b = (*src++) >> -bDiscard; - } - if (gDiscard >= 0) { - g = (*src++) >> gDiscard; - } else { - g = (*src++) >> -gDiscard; - } - if (rDiscard >= 0) { - r = (*src++) >> rDiscard; - } else { - r = (*src++) << -rDiscard; - } - *dst++ = (byte) ((r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift)); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - // should not happen, RGBBitCount > 32. Even DirectX - // RGB mask can't address it. - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } - } else if (internalFormat == LUMINANCE_ALPHA) { - 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); - DWORD mask; - - if ((ddpf->dwRGBBitCount <= 32) && - (ddpf->dwRGBBitCount > 24)) { - destRow += (xoffset << 2); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - src++; - src++; - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - *dst++ = (byte) ((mask >> 16) & 0xff); - *dst++ = (byte) ((mask >> 24) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xoffset*3); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - src++; - src++; - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += (xoffset << 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - src++; - src++; - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += xoffset; - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - src++; - src++; - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - *dst++ = (byte) ((r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift)); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } else if (internalFormat == ALPHA) { - int aDiscard = 8-ucountBits(ddpf->dwRGBAlphaBitMask); - int ashift = firstBit(ddpf->dwRGBAlphaBitMask); - DWORD mask; - - if ((ddpf->dwRGBBitCount <= 32) && - (ddpf->dwRGBBitCount > 24)) { - destRow += (xoffset << 2); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - src += 3; - mask = a << ashift; - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - *dst++ = (byte) ((mask >> 16) & 0xff); - *dst++ = (byte) ((mask >> 24) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xoffset*3); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - src += 3; - mask = a << ashift; - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - *dst++ = (byte) ((mask >> 16) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += (xoffset << 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - src += 3; - mask = (a << ashift); - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += xoffset; - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - src += 3; - *dst++ = (byte) (a << ashift); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } else if ((internalFormat == LUMINANCE) || - (internalFormat == INTENSITY)) { - 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); - DWORD mask; - - if ((ddpf->dwRGBBitCount <= 32) && - (ddpf->dwRGBBitCount > 24)) { - destRow += (xoffset << 2); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - src += 3; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - if (aDiscard >= 0) { - a = l >> aDiscard; - } else { - a = l << -aDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - *dst++ = (byte) ((mask >> 16) & 0xff); - *dst++ = (byte) ((mask >> 24) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xoffset*3); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - src += 3; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - if (aDiscard >= 0) { - a = l >> aDiscard; - } else { - a = l << -aDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += (xoffset << 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - src += 3; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - if (aDiscard >= 0) { - a = l >> aDiscard; - } else { - a = l << -aDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += xoffset; - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - src += 3; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - if (aDiscard >= 0) { - a = l >> aDiscard; - } else { - a = l << -aDiscard; - } - *dst++ = (byte) ((r << rshift) | - (g << gshift) | - (b << bshift) | - (a << ashift)); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } else { - printf("Texture format %d not support.\n", internalFormat); - } -} - - -void copyDataToSurfaceBGR(jint internalFormat, - PIXELFORMAT *ddpf, - unsigned char* pRect, - DWORD rectPitch, - jbyte *data, - jint xoffset, jint yoffset, - DWORD xlimit, DWORD ylimit, - jint subWidth) -{ - unsigned char *src; - unsigned char *dst; - DWORD r, g, b, l; - const DWORD srcPitch = subWidth*3; - unsigned char *srcRow = (unsigned char *) data; - unsigned char *destRow = pRect + rectPitch*yoffset; - - - if ((internalFormat == J3D_RGBA) || - (internalFormat == J3D_RGB)) { - if ((ddpf->dwRGBBitCount == 32) && - (ddpf->dwRBitMask == 0xff0000) && - (ddpf->dwGBitMask == 0xff00) && - (ddpf->dwBBitMask == 0xff)) { - // Optimize for most common case - destRow += (xoffset << 2); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - *dst++ = *src++; - *dst++ = *src++; - *dst++ = *src++; - *dst++ = 0xff; - } - srcRow += srcPitch; - destRow += rectPitch; - } - - } else if ((ddpf->dwRGBBitCount == 16) && - (ddpf->dwRBitMask == 0xf00) && - (ddpf->dwGBitMask == 0xf0) && - (ddpf->dwBBitMask == 0xf)) { - destRow += (xoffset << 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - b = (*src++) >> 4; - g = (*src++) >> 4; - r = (*src++) >> 4; - *dst++ = (g << 4) | b; - *dst++ = 0xf0 | r; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { // handle less common (even weird) format - 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) && - (ddpf->dwRGBBitCount > 24)) { - destRow += (xoffset << 2); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (bDiscard >= 0) { - b = (*src++) >> bDiscard; - } else { - b = (*src++) >> -bDiscard; - } - if (gDiscard >= 0) { - g = (*src++) >> gDiscard; - } else { - g = (*src++) >> -gDiscard; - } - if (rDiscard >= 0) { - r = (*src++) >> rDiscard; - } else { - r = (*src++) << -rDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xoffset*3); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (bDiscard >= 0) { - b = (*src++) >> bDiscard; - } else { - b = (*src++) >> -bDiscard; - } - if (gDiscard >= 0) { - g = (*src++) >> gDiscard; - } else { - g = (*src++) >> -gDiscard; - } - if (rDiscard >= 0) { - r = (*src++) >> rDiscard; - } else { - r = (*src++) << -rDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += (xoffset << 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (bDiscard >= 0) { - b = (*src++) >> bDiscard; - } else { - b = (*src++) >> -bDiscard; - } - if (gDiscard >= 0) { - g = (*src++) >> gDiscard; - } else { - g = (*src++) >> -gDiscard; - } - if (rDiscard >= 0) { - r = (*src++) >> rDiscard; - } else { - r = (*src++) << -rDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask; - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += xoffset; - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (bDiscard >= 0) { - b = (*src++) >> bDiscard; - } else { - b = (*src++) >> -bDiscard; - } - if (gDiscard >= 0) { - g = (*src++) >> gDiscard; - } else { - g = (*src++) >> -gDiscard; - } - if (rDiscard >= 0) { - r = (*src++) >> rDiscard; - } else { - r = (*src++) << -rDiscard; - } - *dst++ = (byte) ((r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - // should not happen, RGBBitCount > 32. Even DirectX - // RGB mask can't address it. - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } - } else if (internalFormat == LUMINANCE_ALPHA) { - 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) && - (ddpf->dwRGBBitCount > 24)) { - destRow += (xoffset << 2); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src++; - src++; - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xoffset*3); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src++; - src++; - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += (xoffset << 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src++; - src++; - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask; - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += xoffset; - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src++; - src++; - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - *dst++ = (byte) ((r << rshift) | (g << gshift) | - (b << bshift) |ddpf->dwRGBAlphaBitMask); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } 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) && - (ddpf->dwRGBBitCount > 24)) { - destRow += (xoffset << 2); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src += 3; - *dst++ = m1; - *dst++ = m2; - *dst++ = m3; - *dst++ = m4; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xoffset*3); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src += 3; - *dst++ = m1; - *dst++ = m2; - *dst++ = m3; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += (xoffset << 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src += 3; - *dst++ = m1; - *dst++ = m2; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += xoffset; - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src += 3; - *dst++ = m1; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } else if ((internalFormat == LUMINANCE) || - (internalFormat == INTENSITY)) { - 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) && - (ddpf->dwRGBBitCount > 24)) { - destRow += (xoffset << 2); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - src += 3; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xoffset*3); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - src += 3; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += (xoffset << 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - src += 3; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask; - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += xoffset; - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - src += 3; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - *dst++ = (byte) ((r << rshift) | - (g << gshift) | - (b << bshift) | - ddpf->dwRGBAlphaBitMask); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } else { - printf("Texture format %d not support.\n", internalFormat); - } -} - -/* - * Same as copyDataToSurfaceRGBA() - * but the pixel is written in the destination buffer - * from right to left. This is used for CubeMapping. - */ -void copyDataToSurfaceRGBARev(jint internalFormat, - PIXELFORMAT *ddpf, - unsigned char* pRect, - DWORD rectPitch, - jbyte *data, - jint xoffset, jint yoffset, - DWORD xlimit, DWORD ylimit, - jint subWidth) -{ - unsigned char *src; - unsigned char *dst; - DWORD r, g, b, a, l; - unsigned char *srcRow = (unsigned char *) data; - unsigned char *destRow = pRect + rectPitch*yoffset; - const DWORD srcPitch = subWidth*4; - - if ((internalFormat == J3D_RGBA) || - (internalFormat == J3D_RGB)) { - if ((ddpf->dwRGBBitCount == 32) && - (ddpf->dwRBitMask == 0xff0000) && - (ddpf->dwGBitMask == 0xff00) && - (ddpf->dwBBitMask == 0xff)) { - // Most common case - // Note that format of destination is ARGB, which - // in PC format are BGRA, so we can't directly - // copy a row using CopyMemory() - destRow += ((xlimit << 2) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - r = *src++; - g = *src++; - b = *src++; - *dst-- = *src++; - *dst-- = r; - *dst-- = g; - *dst-- = b; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount == 16) && - (ddpf->dwRBitMask == 0xf00) && - (ddpf->dwGBitMask == 0xf0) && - (ddpf->dwBBitMask == 0xf)) { - destRow += ((xlimit << 1) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - r = (*src++) >> 4; // discard the lower 4 bit - g = (*src++) >> 4; - b = (*src++) >> 4; - a = (*src++) >> 4; - *dst-- = (a << 4) | r; - *dst-- = (g << 4) | b; - - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { // handle less common (even weird) format - 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); - DWORD mask; - if ((ddpf->dwRGBBitCount <= 32) && - (ddpf->dwRGBBitCount > 24)) { - destRow += ((xlimit << 2) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (rDiscard >= 0) { - r = (*src++) >> rDiscard; - } else { - r = (*src++) << -rDiscard; - } - if (gDiscard >= 0) { - g = (*src++) >> gDiscard; - } else { - g = (*src++) >> -gDiscard; - } - if (bDiscard >= 0) { - b = (*src++) >> bDiscard; - } else { - b = (*src++) >> -bDiscard; - } - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) >> -aDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - *dst-- = (byte) ((mask >> 24) & 0xff); - *dst-- = (byte) ((mask >> 16) & 0xff); - *dst-- = (byte) ((mask >> 8) & 0xff); - *dst-- = (byte) (mask & 0xff); - - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xlimit*3 - 1); - - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (rDiscard >= 0) { - r = (*src++) >> rDiscard; - } else { - r = (*src++) << -rDiscard; - } - if (gDiscard >= 0) { - g = (*src++) >> gDiscard; - } else { - g = (*src++) >> -gDiscard; - } - if (bDiscard >= 0) { - b = (*src++) >> bDiscard; - } else { - b = (*src++) >> -bDiscard; - } - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) >> -aDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += ((xlimit << 1) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (rDiscard >= 0) { - r = (*src++) >> rDiscard; - } else { - r = (*src++) << -rDiscard; - } - if (gDiscard >= 0) { - g = (*src++) >> gDiscard; - } else { - g = (*src++) >> -gDiscard; - } - if (bDiscard >= 0) { - b = (*src++) >> bDiscard; - } else { - b = (*src++) >> -bDiscard; - } - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) >> -aDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - *dst-- = (byte) ((mask >> 8) & 0xff); - *dst-- = (byte) (mask & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += (xlimit-1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (rDiscard >= 0) { - r = (*src++) >> rDiscard; - } else { - r = (*src++) << -rDiscard; - } - if (gDiscard >= 0) { - g = (*src++) >> gDiscard; - } else { - g = (*src++) >> -gDiscard; - } - if (bDiscard >= 0) { - b = (*src++) >> bDiscard; - } else { - b = (*src++) >> -bDiscard; - } - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) >> -aDiscard; - } - *dst-- = (byte) ((r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift)); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - // should not happen, RGBBitCount > 32. Even DirectX - // RGB mask can't address it. - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } - } else if (internalFormat == LUMINANCE_ALPHA) { - 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); - DWORD mask; - - if ((ddpf->dwRGBBitCount <= 32) && - (ddpf->dwRGBBitCount > 24)) { - destRow += ((xlimit << 2) -1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - src++; - src++; - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - - *dst-- = (byte) ((mask >> 24) & 0xff); - *dst-- = (byte) ((mask >> 16) & 0xff); - *dst-- = (byte) ((mask >> 8) & 0xff); - *dst-- = (byte) (mask & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += ((xlimit*3) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - src++; - src++; - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += ((xlimit << 1) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - src++; - src++; - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - *dst-- = (byte) ((mask >> 8) & 0xff); - *dst-- = (byte) (mask & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += (xlimit - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - src++; - src++; - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - *dst-- = (byte) ((r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift)); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } else if (internalFormat == ALPHA) { - int aDiscard = 8-ucountBits(ddpf->dwRGBAlphaBitMask); - int ashift = firstBit(ddpf->dwRGBAlphaBitMask); - DWORD mask; - - if ((ddpf->dwRGBBitCount <= 32) && - (ddpf->dwRGBBitCount > 24)) { - destRow += ((xlimit << 2) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src += 3; - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - mask = a << ashift; - *dst-- = (byte) ((mask >> 24) & 0xff); - *dst-- = (byte) ((mask >> 16) & 0xff); - *dst-- = (byte) ((mask >> 8) & 0xff); - *dst-- = (byte) (mask & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += ((xlimit*3) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src += 3; - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - mask = a << ashift; - *dst-- = (byte) ((mask >> 16) & 0xff); - *dst-- = (byte) ((mask >> 8) & 0xff); - *dst-- = (byte) (mask & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += ((xlimit << 1) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src += 3; - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - mask = (a << ashift); - *dst-- = (byte) ((mask >> 8) & 0xff); - *dst-- = (byte) (mask & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += (xlimit-1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src += 3; - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - *dst-- = (byte) (a << ashift); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } else if ((internalFormat == LUMINANCE) || - (internalFormat == INTENSITY)) { - 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); - DWORD mask; - - if ((ddpf->dwRGBBitCount <= 32) && - (ddpf->dwRGBBitCount > 24)) { - destRow += ((xlimit << 2) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src += 3; - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - if (aDiscard >= 0) { - a = l >> aDiscard; - } else { - a = l << -aDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - *dst-- = (byte) ((mask >> 24) & 0xff); - *dst-- = (byte) ((mask >> 16) & 0xff); - *dst-- = (byte) ((mask >> 8) & 0xff); - *dst-- = (byte) (mask & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += ((xlimit*3)-1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src += 3; - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - if (aDiscard >= 0) { - a = l >> aDiscard; - } else { - a = l << -aDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += ((xlimit << 1) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src += 3; - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - if (aDiscard >= 0) { - a = l >> aDiscard; - } else { - a = l << -aDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - *dst-- = (byte) ((mask >> 8) & 0xff); - *dst-- = (byte) (mask & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += (xlimit-1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src += 3; - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - if (aDiscard >= 0) { - a = l >> aDiscard; - } else { - a = l << -aDiscard; - } - *dst-- = (byte) ((r << rshift) | - (g << gshift) | - (b << bshift) | - (a << ashift)); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } else { - printf("Texture format %d not support.\n", internalFormat); - } -} - -void copyDataToSurfaceABGRRev(jint internalFormat, - PIXELFORMAT *ddpf, - unsigned char* pRect, - DWORD rectPitch, - jbyte *data, - jint xoffset, jint yoffset, - DWORD xlimit, DWORD ylimit, - jint subWidth) -{ - unsigned char *src; - unsigned char *dst; - DWORD r, g, b, a, l; - const DWORD srcPitch = subWidth*4; - unsigned char *srcRow = (unsigned char *) data; - unsigned char *destRow = pRect + rectPitch*yoffset; - - if ((internalFormat == J3D_RGBA) || - (internalFormat == J3D_RGB)) { - if ((ddpf->dwRGBBitCount == 32) && - (ddpf->dwRBitMask == 0xff0000) && - (ddpf->dwGBitMask == 0xff00) && - (ddpf->dwBBitMask == 0xff)) { - // Optimize for most common case - destRow += ((xlimit << 2) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - a = *src++; - b = *src++; - g = *src++; - r = *src++; - *dst-- = a; - *dst-- = r; - *dst-- = g; - *dst-- = b; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount == 16) && - (ddpf->dwRBitMask == 0xf00) && - (ddpf->dwGBitMask == 0xf0) && - (ddpf->dwBBitMask == 0xf)) { - destRow += ((xlimit << 1) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - a = (*src++) >> 4; // discard the lower 4 bit - b = (*src++) >> 4; - g = (*src++) >> 4; - r = (*src++) >> 4; - *dst-- = (a << 4) | r; - *dst-- = (g << 4) | b; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { // handle less common (even weird) format - 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); - DWORD mask; - - if ((ddpf->dwRGBBitCount <= 32) && - (ddpf->dwRGBBitCount > 24)) { - destRow += ((xlimit << 2) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) >> -aDiscard; - } - if (bDiscard >= 0) { - b = (*src++) >> bDiscard; - } else { - b = (*src++) >> -bDiscard; - } - if (gDiscard >= 0) { - g = (*src++) >> gDiscard; - } else { - g = (*src++) >> -gDiscard; - } - if (rDiscard >= 0) { - r = (*src++) >> rDiscard; - } else { - r = (*src++) << -rDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - *dst-- = (byte) ((mask >> 24) & 0xff); - *dst-- = (byte) ((mask >> 16) & 0xff); - *dst-- = (byte) ((mask >> 8) & 0xff); - *dst-- = (byte) (mask & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xlimit*3-1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) >> -aDiscard; - } - if (bDiscard >= 0) { - b = (*src++) >> bDiscard; - } else { - b = (*src++) >> -bDiscard; - } - if (gDiscard >= 0) { - g = (*src++) >> gDiscard; - } else { - g = (*src++) >> -gDiscard; - } - if (rDiscard >= 0) { - r = (*src++) >> rDiscard; - } else { - r = (*src++) << -rDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += ((xlimit << 1) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) >> -aDiscard; - } - if (bDiscard >= 0) { - b = (*src++) >> bDiscard; - } else { - b = (*src++) >> -bDiscard; - } - if (gDiscard >= 0) { - g = (*src++) >> gDiscard; - } else { - g = (*src++) >> -gDiscard; - } - if (rDiscard >= 0) { - r = (*src++) >> rDiscard; - } else { - r = (*src++) << -rDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - *dst-- = (byte) ((mask >> 8) & 0xff); - *dst-- = (byte) (mask & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += (xlimit-1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) >> -aDiscard; - } - if (bDiscard >= 0) { - b = (*src++) >> bDiscard; - } else { - b = (*src++) >> -bDiscard; - } - if (gDiscard >= 0) { - g = (*src++) >> gDiscard; - } else { - g = (*src++) >> -gDiscard; - } - if (rDiscard >= 0) { - r = (*src++) >> rDiscard; - } else { - r = (*src++) << -rDiscard; - } - *dst-- = (byte) ((r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift)); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - // should not happen, RGBBitCount > 32. Even DirectX - // RGB mask can't address it. - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } - } else if (internalFormat == LUMINANCE_ALPHA) { - 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); - DWORD mask; - - if ((ddpf->dwRGBBitCount <= 32) && - (ddpf->dwRGBBitCount > 24)) { - destRow += ((xlimit << 2) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - src++; - src++; - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - *dst-- = (byte) ((mask >> 24) & 0xff); - *dst-- = (byte) ((mask >> 16) & 0xff); - *dst-- = (byte) ((mask >> 8) & 0xff); - *dst-- = (byte) (mask & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xlimit*3-1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - src++; - src++; - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += ((xlimit << 1) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - src++; - src++; - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - *dst-- = (byte) ((mask >> 8) & 0xff); - *dst-- = (byte) (mask & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += (xlimit - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - src++; - src++; - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - *dst-- = (byte) ((r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift)); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } else if (internalFormat == ALPHA) { - int aDiscard = 8-ucountBits(ddpf->dwRGBAlphaBitMask); - int ashift = firstBit(ddpf->dwRGBAlphaBitMask); - DWORD mask; - - if ((ddpf->dwRGBBitCount <= 32) && - (ddpf->dwRGBBitCount > 24)) { - destRow += ((xlimit << 2) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - src += 3; - mask = a << ashift; - *dst-- = (byte) ((mask >> 24) & 0xff); - *dst-- = (byte) ((mask >> 16) & 0xff); - *dst-- = (byte) ((mask >> 8) & 0xff); - *dst-- = (byte) (mask & 0xff); - - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xlimit*3-1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - src += 3; - mask = a << ashift; - *dst-- = (byte) ((mask >> 16) & 0xff); - *dst-- = (byte) ((mask >> 8) & 0xff); - *dst-- = (byte) (mask & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += ((xlimit << 1) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - src += 3; - mask = (a << ashift); - *dst-- = (byte) ((mask >> 8) & 0xff); - *dst-- = (byte) (mask & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += xlimit; - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - src += 3; - *dst-- = (byte) (a << ashift); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } else if ((internalFormat == LUMINANCE) || - (internalFormat == INTENSITY)) { - 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); - DWORD mask; - - - if ((ddpf->dwRGBBitCount <= 32) && - (ddpf->dwRGBBitCount > 24)) { - destRow += ((xlimit << 2) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - src += 3; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - if (aDiscard >= 0) { - a = l >> aDiscard; - } else { - a = l << -aDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - *dst-- = (byte) ((mask >> 24) & 0xff); - *dst-- = (byte) ((mask >> 16) & 0xff); - *dst-- = (byte) ((mask >> 8) & 0xff); - *dst-- = (byte) (mask & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xlimit*3-1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - src += 3; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - if (aDiscard >= 0) { - a = l >> aDiscard; - } else { - a = l << -aDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += ((xlimit << 1) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - src += 3; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - if (aDiscard >= 0) { - a = l >> aDiscard; - } else { - a = l << -aDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - *dst-- = (byte) ((mask >> 8) & 0xff); - *dst-- = (byte) (mask & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += (xlimit - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - src += 3; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - if (aDiscard >= 0) { - a = l >> aDiscard; - } else { - a = l << -aDiscard; - } - *dst-- = (byte) ((r << rshift) | - (g << gshift) | - (b << bshift) | - (a << ashift)); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } else { - printf("Texture format %d not support.\n", internalFormat); - } - -} - - -void copyDataToSurfaceBGRRev(jint internalFormat, - PIXELFORMAT *ddpf, - unsigned char* pRect, - DWORD rectPitch, - jbyte *data, - jint xoffset, jint yoffset, - DWORD xlimit, DWORD ylimit, - jint subWidth) -{ - unsigned char *src; - unsigned char *dst; - DWORD r, g, b, l; - const DWORD srcPitch = subWidth*3; - unsigned char *srcRow = (unsigned char *) data; - unsigned char *destRow = pRect + rectPitch*yoffset; - - - if ((internalFormat == J3D_RGBA) || - (internalFormat == J3D_RGB)) { - if ((ddpf->dwRGBBitCount == 32) && - (ddpf->dwRBitMask == 0xff0000) && - (ddpf->dwGBitMask == 0xff00) && - (ddpf->dwBBitMask == 0xff)) { - // Optimize for most common case - destRow += ((xlimit << 2) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - b = *src++; - g = *src++; - r = *src++; - *dst-- = 0xff; - *dst-- = r; - *dst-- = g; - *dst-- = b; - } - srcRow += srcPitch; - destRow += rectPitch; - } - - } else if ((ddpf->dwRGBBitCount == 16) && - (ddpf->dwRBitMask == 0xf00) && - (ddpf->dwGBitMask == 0xf0) && - (ddpf->dwBBitMask == 0xf)) { - destRow += ((xlimit << 1) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - b = (*src++) >> 4; - g = (*src++) >> 4; - r = (*src++) >> 4; - *dst-- = 0xf0 | r; - *dst-- = (g << 4) | b; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { // handle less common (even weird) format - 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) && - (ddpf->dwRGBBitCount > 24)) { - destRow += ((xlimit << 2) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (bDiscard >= 0) { - b = (*src++) >> bDiscard; - } else { - b = (*src++) >> -bDiscard; - } - if (gDiscard >= 0) { - g = (*src++) >> gDiscard; - } else { - g = (*src++) >> -gDiscard; - } - if (rDiscard >= 0) { - r = (*src++) >> rDiscard; - } else { - r = (*src++) << -rDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xlimit*3-1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (bDiscard >= 0) { - b = (*src++) >> bDiscard; - } else { - b = (*src++) >> -bDiscard; - } - if (gDiscard >= 0) { - g = (*src++) >> gDiscard; - } else { - g = (*src++) >> -gDiscard; - } - if (rDiscard >= 0) { - r = (*src++) >> rDiscard; - } else { - r = (*src++) << -rDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += ((xlimit << 1) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (bDiscard >= 0) { - b = (*src++) >> bDiscard; - } else { - b = (*src++) >> -bDiscard; - } - if (gDiscard >= 0) { - g = (*src++) >> gDiscard; - } else { - g = (*src++) >> -gDiscard; - } - if (rDiscard >= 0) { - r = (*src++) >> rDiscard; - } else { - r = (*src++) << -rDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask; - *dst-- = (byte) ((mask >> 8) & 0xff); - *dst-- = (byte) (mask & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += (xlimit - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (bDiscard >= 0) { - b = (*src++) >> bDiscard; - } else { - b = (*src++) >> -bDiscard; - } - if (gDiscard >= 0) { - g = (*src++) >> gDiscard; - } else { - g = (*src++) >> -gDiscard; - } - if (rDiscard >= 0) { - r = (*src++) >> rDiscard; - } else { - r = (*src++) << -rDiscard; - } - *dst-- = (byte) ((r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - // should not happen, RGBBitCount > 32. Even DirectX - // RGB mask can't address it. - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } - } else if (internalFormat == LUMINANCE_ALPHA) { - 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) && - (ddpf->dwRGBBitCount > 24)) { - destRow += ((xlimit << 2) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src++; - src++; - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xlimit*3 - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src++; - src++; - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += ((xlimit << 1) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src++; - src++; - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask; - *dst-- = (byte) ((mask >> 8) & 0xff); - *dst-- = (byte) (mask & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += (xlimit - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src++; - src++; - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - *dst-- = (byte) ((r << rshift) | (g << gshift) | - (b << bshift) |ddpf->dwRGBAlphaBitMask); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } 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) && - (ddpf->dwRGBBitCount > 24)) { - destRow += ((xlimit << 2) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src += 3; - *dst-- = m4; - *dst-- = m3; - *dst-- = m2; - *dst-- = m1; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xlimit*3 - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src += 3; - *dst-- = m3; - *dst-- = m2; - *dst-- = m1; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += ((xlimit << 1) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src += 3; - *dst-- = m2; - *dst-- = m1; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += (xlimit - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src += 3; - *dst-- = m1; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } else if ((internalFormat == LUMINANCE) || - (internalFormat == INTENSITY)) { - 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) && - (ddpf->dwRGBBitCount > 24)) { - destRow += ((xlimit << 2) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - src += 3; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xlimit*3 - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - src += 3; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += ((xlimit << 1) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - src += 3; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask; - *dst-- = (byte) ((mask >> 8) & 0xff); - *dst-- = (byte) (mask & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += (xlimit - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - src += 3; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - *dst-- = (byte) ((r << rshift) | - (g << gshift) | - (b << bshift) | - ddpf->dwRGBAlphaBitMask); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } else { - printf("Texture format %d not support.\n", internalFormat); - } -} - - -void copyDataToSurfaceRGBRev(jint internalFormat, - PIXELFORMAT *ddpf, - unsigned char* pRect, - DWORD rectPitch, - jbyte *data, - jint xoffset, jint yoffset, - DWORD xlimit, DWORD ylimit, - jint subWidth) -{ - unsigned char *src; - unsigned char *dst; - DWORD r, g, b, l; - const DWORD srcPitch = subWidth*3; - unsigned char *srcRow = (unsigned char *) data; - unsigned char *destRow = pRect + rectPitch*yoffset; - - if ((internalFormat == J3D_RGBA) || - (internalFormat == J3D_RGB)) { - destRow += ((xlimit << 2) - 1); - if ((ddpf->dwRGBBitCount == 32) && - (ddpf->dwRBitMask == 0xff0000) && - (ddpf->dwGBitMask == 0xff00) && - (ddpf->dwBBitMask == 0xff)) { - // Most common case - // Note that format of destination is ARGB, which - // in PC format are BGRA, so we can't directly - // copy a row using CopyMemory() - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - r = *src++; - g = *src++; - b = *src++; - *dst-- = (byte) 0xff; - *dst-- = r; - *dst-- = g; - *dst-- = b; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount == 16) && - (ddpf->dwRBitMask == 0xf00) && - (ddpf->dwGBitMask == 0xf0) && - (ddpf->dwBBitMask == 0xf)) { - destRow += ((xlimit << 1) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - r = (*src++) >> 4; // discard the lower 4 bit - g = (*src++) >> 4; - b = (*src++) >> 4; - *dst-- = 0xf0 | r; - *dst-- = (g << 4) | b; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { // handle less common (even weird) format - 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) && - (ddpf->dwRGBBitCount > 24)) { - destRow += ((xlimit << 2) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (rDiscard >= 0) { - r = (*src++) >> rDiscard; - } else { - r = (*src++) << -rDiscard; - } - if (gDiscard >= 0) { - g = (*src++) >> gDiscard; - } else { - g = (*src++) >> -gDiscard; - } - if (bDiscard >= 0) { - b = (*src++) >> bDiscard; - } else { - b = (*src++) >> -bDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xlimit*3 - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (rDiscard >= 0) { - r = (*src++) >> rDiscard; - } else { - r = (*src++) << -rDiscard; - } - if (gDiscard >= 0) { - g = (*src++) >> gDiscard; - } else { - g = (*src++) >> -gDiscard; - } - if (bDiscard >= 0) { - b = (*src++) >> bDiscard; - } else { - b = (*src++) >> -bDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += ((xlimit << 1) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (rDiscard >= 0) { - r = (*src++) >> rDiscard; - } else { - r = (*src++) << -rDiscard; - } - if (gDiscard >= 0) { - g = (*src++) >> gDiscard; - } else { - g = (*src++) >> -gDiscard; - } - if (bDiscard >= 0) { - b = (*src++) >> bDiscard; - } else { - b = (*src++) >> -bDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask; - *dst-- = (byte) ((mask >> 8) & 0xff); - *dst-- = (byte) (mask & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += (xlimit - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (rDiscard >= 0) { - r = (*src++) >> rDiscard; - } else { - r = (*src++) << -rDiscard; - } - if (gDiscard >= 0) { - g = (*src++) >> gDiscard; - } else { - g = (*src++) >> -gDiscard; - } - if (bDiscard >= 0) { - b = (*src++) >> bDiscard; - } else { - b = (*src++) >> -bDiscard; - } - *dst-- = (byte) ((r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - // should not happen, RGBBitCount > 32. Even DirectX - // RGB mask can't address it. - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } - } else if (internalFormat == LUMINANCE_ALPHA) { - 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) && - (ddpf->dwRGBBitCount > 24)) { - destRow += ((xlimit << 2) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - src++; - src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xlimit*3 - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - src++; - src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += ((xlimit << 1) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - src++; - src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask; - *dst-- = (byte) ((mask >> 8) & 0xff); - *dst-- = (byte) (mask & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += (xlimit - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - src++; - src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - *dst-- = (byte) ((r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } 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) && - (ddpf->dwRGBBitCount > 24)) { - destRow += ((xlimit << 2) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src += 3; - *dst-- = m4; - *dst-- = m3; - *dst-- = m2; - *dst-- = m1; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xlimit*3- 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src += 3; - *dst-- = m3; - *dst-- = m2; - *dst-- = m1; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += ((xlimit << 1) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src += 3; - *dst-- = m2; - *dst-- = m1; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += (xlimit - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src += 3; - *dst-- = m1; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } else if ((internalFormat == LUMINANCE) || - (internalFormat == INTENSITY)) { - 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) && - (ddpf->dwRGBBitCount > 24)) { - destRow += ((xlimit << 2) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - src++; - src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xlimit*3 - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - src++; - src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += ((xlimit << 1) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - src++; - src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask; - *dst-- = (byte) ((mask >> 8) & 0xff); - *dst-- = (byte) (mask & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += (xlimit - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - src++; - src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - *dst-- = (byte) ((r << rshift) | - (g << gshift) | - (b << bshift) | - ddpf->dwRGBAlphaBitMask); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } else { - printf("Texture format %d not support.\n", internalFormat); - } -} - -void copyDataToSurfaceLARev(jint internalFormat, - PIXELFORMAT *ddpf, - unsigned char* pRect, - DWORD rectPitch, - jbyte *data, - jint xoffset, jint yoffset, - DWORD xlimit, DWORD ylimit, - jint subWidth) -{ - unsigned char *src; - unsigned char *dst; - DWORD a, r, g, b, l; - unsigned char *srcRow = (unsigned char *) data; - unsigned char *destRow = pRect + rectPitch*yoffset; - const DWORD srcPitch = subWidth*2; - - if ((internalFormat == J3D_RGBA) || - (internalFormat == J3D_RGB)) { - if ((ddpf->dwRGBBitCount == 32) && - (ddpf->dwRBitMask == 0xff0000) && - (ddpf->dwGBitMask == 0xff00) && - (ddpf->dwBBitMask == 0xff)) { - // Most common case - // Note that format of destination is ARGB, which - // in PC format are BGRA, so we can't directly - // copy a row using CopyMemory() - destRow += ((xlimit << 2) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - *dst-- = *src++; - *dst-- = l; - *dst-- = l; - *dst-- = l; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount == 16) && - (ddpf->dwRBitMask == 0xf00) && - (ddpf->dwGBitMask == 0xf0) && - (ddpf->dwBBitMask == 0xf)) { - destRow += ((xlimit << 1) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = (*src++) >> 4; // discard the lower 4 bit - a = (*src++) >> 4; - *dst-- = (a << 4) | l; - *dst-- = (l << 4) | l; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { // handle less common (even weird) format - 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); - DWORD mask; - - if ((ddpf->dwRGBBitCount <= 32) && - (ddpf->dwRGBBitCount > 24)) { - destRow += ((xlimit << 2) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (rDiscard >= 0) { - l = (*src++) >> rDiscard; - } else { - l = (*src++) << -rDiscard; - } - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) >> -aDiscard; - } - mask = (l << rshift) | (l << gshift) | - (l << bshift) | (a << ashift); - *dst-- = (byte) ((mask >> 24) & 0xff); - *dst-- = (byte) ((mask >> 16) & 0xff); - *dst-- = (byte) ((mask >> 8) & 0xff); - *dst-- = (byte) (mask & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xlimit*3 - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (rDiscard >= 0) { - l = (*src++) >> rDiscard; - } else { - l = (*src++) << -rDiscard; - } - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) >> -aDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += ((xlimit << 1) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (rDiscard >= 0) { - l = (*src++) >> rDiscard; - } else { - l = (*src++) << -rDiscard; - } - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) >> -aDiscard; - } - mask = (l << rshift) | (l << gshift) | - (l << bshift) | (a << ashift); - *dst-- = (byte) ((mask >> 8) & 0xff); - *dst-- = (byte) (mask & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += (xlimit - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (rDiscard >= 0) { - l = (*src++) >> rDiscard; - } else { - l = (*src++) << -rDiscard; - } - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) >> -aDiscard; - } - *dst-- = (byte) ((l << rshift) | (l << gshift) | - (l << bshift) | (a << ashift)); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - // should not happen, RGBBitCount > 32. Even DirectX - // RGB mask can't address it. - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } - } else if (internalFormat == LUMINANCE_ALPHA) { - - 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); - DWORD mask; - - if ((ddpf->dwRGBBitCount <= 32) && - (ddpf->dwRGBBitCount > 24)) { - destRow += ((xlimit << 2) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - - *dst-- = (byte) ((mask >> 24) & 0xff); - *dst-- = (byte) ((mask >> 16) & 0xff); - *dst-- = (byte) ((mask >> 8) & 0xff); - *dst-- = (byte) (mask & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xlimit*3 - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += ((xlimit << 1) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - *dst-- = (byte) ((mask >> 8) & 0xff); - *dst-- = (byte) (mask & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += (xlimit - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - *dst-- = (byte) ((r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift)); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } else if (internalFormat == ALPHA) { - int aDiscard = 8-ucountBits(ddpf->dwRGBAlphaBitMask); - int ashift = firstBit(ddpf->dwRGBAlphaBitMask); - DWORD mask; - - if ((ddpf->dwRGBBitCount <= 32) && - (ddpf->dwRGBBitCount > 24)) { - destRow += ((xlimit << 2) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src++; - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - mask = a << ashift; - *dst-- = (byte) ((mask >> 24) & 0xff); - *dst-- = (byte) ((mask >> 16) & 0xff); - *dst-- = (byte) ((mask >> 8) & 0xff); - *dst-- = (byte) (mask & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xlimit*3 - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src++; - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - mask = a << ashift; - *dst-- = (byte) ((mask >> 16) & 0xff); - *dst-- = (byte) ((mask >> 8) & 0xff); - *dst-- = (byte) (mask & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += ((xlimit << 1) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src++; - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - mask = (a << ashift); - *dst-- = (byte) ((mask >> 8) & 0xff); - *dst-- = (byte) (mask & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += (xlimit - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src++; - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - *dst-- = (byte) (a << ashift); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } else if ((internalFormat == LUMINANCE) || - (internalFormat == INTENSITY)) { - 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); - DWORD mask; - - if ((ddpf->dwRGBBitCount <= 32) && - (ddpf->dwRGBBitCount > 24)) { - destRow += ((xlimit << 2) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src++; - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - if (aDiscard >= 0) { - a = l >> aDiscard; - } else { - a = l << -aDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - *dst-- = (byte) ((mask >> 24) & 0xff); - *dst-- = (byte) ((mask >> 16) & 0xff); - *dst-- = (byte) ((mask >> 8) & 0xff); - *dst-- = (byte) (mask & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xlimit*3 - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src++; - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - if (aDiscard >= 0) { - a = l >> aDiscard; - } else { - a = l << -aDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += ((xlimit << 1) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src++; - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - if (aDiscard >= 0) { - a = l >> aDiscard; - } else { - a = l << -aDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - *dst-- = (byte) ((mask >> 8) & 0xff); - *dst-- = (byte) (mask & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += (xlimit - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src++; - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - if (aDiscard >= 0) { - a = l >> aDiscard; - } else { - a = l << -aDiscard; - } - *dst-- = (byte) ((r << rshift) | - (g << gshift) | - (b << bshift) | - (a << ashift)); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } else { - printf("Texture format %d not support.\n", internalFormat); - } -} - -void copyDataToSurfaceGrayRev(jint internalFormat, - PIXELFORMAT *ddpf, - unsigned char* pRect, - DWORD rectPitch, - jbyte *data, - jint xoffset, jint yoffset, - DWORD xlimit, DWORD ylimit, - jint subWidth) -{ - unsigned char *src; - unsigned char *dst; - DWORD a, r, g, b, l; - unsigned char *srcRow = (unsigned char *) data; - unsigned char *destRow = pRect + rectPitch*yoffset; - const DWORD srcPitch = subWidth; - - if ((internalFormat == J3D_RGBA) || - (internalFormat == J3D_RGB)) { - if ((ddpf->dwRGBBitCount == 32) && - (ddpf->dwRBitMask == 0xff0000) && - (ddpf->dwGBitMask == 0xff00) && - (ddpf->dwBBitMask == 0xff)) { - // Most common case - // Note that format of destination is ARGB, which - // in PC format are BGRA, so we can't directly - // copy a row using CopyMemory() - destRow += ((xlimit << 2) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - *dst-- = 0xff; - *dst-- = l; - *dst-- = l; - *dst-- = l; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount == 16) && - (ddpf->dwRBitMask == 0xf00) && - (ddpf->dwGBitMask == 0xf0) && - (ddpf->dwBBitMask == 0xf)) { - destRow += ((xlimit << 1) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = (*src++) >> 4; // discard the lower 4 bit - *dst-- = 0xf0 | l; - *dst-- = (l << 4) | l; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { // handle less common (even weird) format - 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) && - (ddpf->dwRGBBitCount > 24)) { - destRow += ((xlimit << 2) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (rDiscard >= 0) { - l = (*src++) >> rDiscard; - } else { - l = (*src++) << -rDiscard; - } - mask = (l << rshift) | (l << gshift) | - (l << 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; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xlimit*3 - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (rDiscard >= 0) { - l = (*src++) >> rDiscard; - } else { - l = (*src++) << -rDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += ((xlimit << 1) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (rDiscard >= 0) { - l = (*src++) >> rDiscard; - } else { - l = (*src++) << -rDiscard; - } - mask = (l << rshift) | (l << gshift) | - (l << bshift) | ddpf->dwRGBAlphaBitMask; - *dst-- = (byte) ((mask >> 8) & 0xff); - *dst-- = (byte) (mask & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += (xlimit - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (rDiscard >= 0) { - l = (*src++) >> rDiscard; - } else { - l = (*src++) << -rDiscard; - } - *dst-- = (byte) ((l << rshift) | (l << gshift) | - (l << bshift) | ddpf->dwRGBAlphaBitMask); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - // should not happen, RGBBitCount > 32. Even DirectX - // RGB mask can't address it. - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } - } else if (internalFormat == LUMINANCE_ALPHA) { - - 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); - DWORD mask; - - if ((ddpf->dwRGBBitCount <= 32) && - (ddpf->dwRGBBitCount > 24)) { - destRow += ((xlimit << 2) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - if (aDiscard >= 0) { - a = l >> aDiscard; - } else { - a = l << -aDiscard; - } - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - *dst-- = (byte) ((mask >> 24) & 0xff); - *dst-- = (byte) ((mask >> 16) & 0xff); - *dst-- = (byte) ((mask >> 8) & 0xff); - *dst-- = (byte) (mask & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xlimit*3 - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - if (aDiscard >= 0) { - a = l >> aDiscard; - } else { - a = l << -aDiscard; - } - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += ((xlimit << 1) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - if (aDiscard >= 0) { - a = l >> aDiscard; - } else { - a = l << -aDiscard; - } - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - *dst-- = (byte) ((mask >> 8) & 0xff); - *dst-- = (byte) (mask & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += (xlimit - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - if (aDiscard >= 0) { - a = l >> aDiscard; - } else { - a = l << -aDiscard; - } - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - *dst-- = (byte) ((r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift)); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } else if (internalFormat == ALPHA) { - int aDiscard = 8-ucountBits(ddpf->dwRGBAlphaBitMask); - int ashift = firstBit(ddpf->dwRGBAlphaBitMask); - DWORD mask; - - if ((ddpf->dwRGBBitCount <= 32) && - (ddpf->dwRGBBitCount > 24)) { - destRow += ((xlimit << 2) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - mask = a << ashift; - *dst-- = (byte) ((mask >> 24) & 0xff); - *dst-- = (byte) ((mask >> 16) & 0xff); - *dst-- = (byte) ((mask >> 8) & 0xff); - *dst-- = (byte) (mask & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xlimit*3 - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - mask = a << ashift; - *dst-- = (byte) ((mask >> 16) & 0xff); - *dst-- = (byte) ((mask >> 8) & 0xff); - *dst-- = (byte) (mask & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += ((xlimit << 1) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - mask = (a << ashift); - *dst-- = (byte) ((mask >> 8) & 0xff); - *dst-- = (byte) (mask & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += (xlimit - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - *dst-- = (byte) (a << ashift); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } else if ((internalFormat == LUMINANCE) || - (internalFormat == INTENSITY)) { - 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); - DWORD mask; - - if ((ddpf->dwRGBBitCount <= 32) && - (ddpf->dwRGBBitCount > 24)) { - destRow += ((xlimit << 2) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - if (aDiscard >= 0) { - a = l >> aDiscard; - } else { - a = l << -aDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - *dst-- = (byte) ((mask >> 24) & 0xff); - *dst-- = (byte) ((mask >> 16) & 0xff); - *dst-- = (byte) ((mask >> 8) & 0xff); - *dst-- = (byte) (mask & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xlimit*3 - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - if (aDiscard >= 0) { - a = l >> aDiscard; - } else { - a = l << -aDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += ((xlimit << 1) - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - if (aDiscard >= 0) { - a = l >> aDiscard; - } else { - a = l << -aDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - *dst-- = (byte) ((mask >> 8) & 0xff); - *dst-- = (byte) (mask & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += (xlimit - 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - if (aDiscard >= 0) { - a = l >> aDiscard; - } else { - a = l << -aDiscard; - } - *dst-- = (byte) ((r << rshift) | - (g << gshift) | - (b << bshift) | - (a << ashift)); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - 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 - * 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. - * - * The source image has width = subWidth and - * pointer *data. - * - * - */ -void copyDataToSurfaceRGBA(jint internalFormat, - PIXELFORMAT *ddpf, - unsigned char* pRect, - DWORD rectPitch, - jbyte *data, - jint xoffset, jint yoffset, - DWORD xlimit, DWORD ylimit, - jint subWidth) -{ - unsigned char *src; - unsigned char *dst; - DWORD r, g, b, a, l; - unsigned char *srcRow = (unsigned char *) data; - unsigned char *destRow = pRect + rectPitch*yoffset; - const DWORD srcPitch = subWidth*4; - - if ((internalFormat == J3D_RGBA) || - (internalFormat == J3D_RGB)) { - if ((ddpf->dwRGBBitCount == 32) && - (ddpf->dwRBitMask == 0xff0000) && - (ddpf->dwGBitMask == 0xff00) && - (ddpf->dwBBitMask == 0xff)) { - // Most common case - // Note that format of destination is ARGB, which - // in PC format are BGRA, so we can't directly - // copy a row using CopyMemory() - destRow += (xoffset << 2); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - r = *src++; - g = *src++; - b = *src++; - *dst++ = b; - *dst++ = g; - *dst++ = r; - *dst++ = *src++; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount == 16) && - (ddpf->dwRBitMask == 0xf00) && - (ddpf->dwGBitMask == 0xf0) && - (ddpf->dwBBitMask == 0xf)) { - destRow += (xoffset << 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - r = (*src++) >> 4; // discard the lower 4 bit - g = (*src++) >> 4; - b = (*src++) >> 4; - a = (*src++) >> 4; - *dst++ = (g << 4) | b; - *dst++ = (a << 4) | r; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { // handle less common (even weird) format - 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); - DWORD mask; - - if ((ddpf->dwRGBBitCount <= 32) && - (ddpf->dwRGBBitCount > 24)) { - destRow += (xoffset << 2); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (rDiscard >= 0) { - r = (*src++) >> rDiscard; - } else { - r = (*src++) << -rDiscard; - } - if (gDiscard >= 0) { - g = (*src++) >> gDiscard; - } else { - g = (*src++) >> -gDiscard; - } - if (bDiscard >= 0) { - b = (*src++) >> bDiscard; - } else { - b = (*src++) >> -bDiscard; - } - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) >> -aDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - *dst++ = (byte) ((mask >> 16) & 0xff); - *dst++ = (byte) ((mask >> 24) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xoffset*3); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (rDiscard >= 0) { - r = (*src++) >> rDiscard; - } else { - r = (*src++) << -rDiscard; - } - if (gDiscard >= 0) { - g = (*src++) >> gDiscard; - } else { - g = (*src++) >> -gDiscard; - } - if (bDiscard >= 0) { - b = (*src++) >> bDiscard; - } else { - b = (*src++) >> -bDiscard; - } - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) >> -aDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += (xoffset << 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (rDiscard >= 0) { - r = (*src++) >> rDiscard; - } else { - r = (*src++) << -rDiscard; - } - if (gDiscard >= 0) { - g = (*src++) >> gDiscard; - } else { - g = (*src++) >> -gDiscard; - } - if (bDiscard >= 0) { - b = (*src++) >> bDiscard; - } else { - b = (*src++) >> -bDiscard; - } - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) >> -aDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += xoffset; - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (rDiscard >= 0) { - r = (*src++) >> rDiscard; - } else { - r = (*src++) << -rDiscard; - } - if (gDiscard >= 0) { - g = (*src++) >> gDiscard; - } else { - g = (*src++) >> -gDiscard; - } - if (bDiscard >= 0) { - b = (*src++) >> bDiscard; - } else { - b = (*src++) >> -bDiscard; - } - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) >> -aDiscard; - } - *dst++ = (byte) ((r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift)); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - // should not happen, RGBBitCount > 32. Even DirectX - // RGB mask can't address it. - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } - } else if (internalFormat == LUMINANCE_ALPHA) { - - 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); - DWORD mask; - - if ((ddpf->dwRGBBitCount <= 32) && - (ddpf->dwRGBBitCount > 24)) { - destRow += (xoffset << 2); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - src++; - src++; - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - *dst++ = (byte) ((mask >> 16) & 0xff); - *dst++ = (byte) ((mask >> 24) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xoffset*3); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - src++; - src++; - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += (xoffset << 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - src++; - src++; - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += xoffset; - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - src++; - src++; - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - *dst++ = (byte) ((r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift)); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } else if (internalFormat == ALPHA) { - int aDiscard = 8-ucountBits(ddpf->dwRGBAlphaBitMask); - int ashift = firstBit(ddpf->dwRGBAlphaBitMask); - DWORD mask; - - if ((ddpf->dwRGBBitCount <= 32) && - (ddpf->dwRGBBitCount > 24)) { - destRow += (xoffset << 2); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src += 3; - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - mask = a << ashift; - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - *dst++ = (byte) ((mask >> 16) & 0xff); - *dst++ = (byte) ((mask >> 24) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xoffset*3); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src += 3; - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - mask = a << ashift; - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - *dst++ = (byte) ((mask >> 16) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += (xoffset << 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src += 3; - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - mask = (a << ashift); - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += xoffset; - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src += 3; - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - *dst++ = (byte) (a << ashift); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } else if ((internalFormat == LUMINANCE) || - (internalFormat == INTENSITY)) { - 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); - DWORD mask; - - if ((ddpf->dwRGBBitCount <= 32) && - (ddpf->dwRGBBitCount > 24)) { - destRow += (xoffset << 2); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src += 3; - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - if (aDiscard >= 0) { - a = l >> aDiscard; - } else { - a = l << -aDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - *dst++ = (byte) ((mask >> 16) & 0xff); - *dst++ = (byte) ((mask >> 24) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xoffset*3); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src += 3; - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - if (aDiscard >= 0) { - a = l >> aDiscard; - } else { - a = l << -aDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += (xoffset << 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src += 3; - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - if (aDiscard >= 0) { - a = l >> aDiscard; - } else { - a = l << -aDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += xoffset; - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src += 3; - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - if (aDiscard >= 0) { - a = l >> aDiscard; - } else { - a = l << -aDiscard; - } - *dst++ = (byte) ((r << rshift) | - (g << gshift) | - (b << bshift) | - (a << ashift)); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } else { - printf("Texture format %d not support.\n", internalFormat); - } -} - - -void copyDataToSurfaceRGB(jint internalFormat, - PIXELFORMAT *ddpf, - unsigned char* pRect, - DWORD rectPitch, - jbyte *data, - jint xoffset, jint yoffset, - DWORD xlimit, DWORD ylimit, - jint subWidth) -{ - unsigned char *src; - unsigned char *dst; - DWORD r, g, b, l; - const DWORD srcPitch = subWidth*3; - unsigned char *srcRow = (unsigned char *) data; - unsigned char *destRow = pRect + rectPitch*yoffset; - - if ((internalFormat == J3D_RGBA) || - (internalFormat == J3D_RGB)) { - destRow += (xoffset << 2); - if ((ddpf->dwRGBBitCount == 32) && - (ddpf->dwRBitMask == 0xff0000) && - (ddpf->dwGBitMask == 0xff00) && - (ddpf->dwBBitMask == 0xff)) { - // Most common case - // Note that format of destination is ARGB, which - // in PC format are BGRA, so we can't directly - // copy a row using CopyMemory() - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - r = *src++; - g = *src++; - b = *src++; - *dst++ = b; - *dst++ = g; - *dst++ = r; - *dst++ = (byte) 0xff; - - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount == 16) && - (ddpf->dwRBitMask == 0xf00) && - (ddpf->dwGBitMask == 0xf0) && - (ddpf->dwBBitMask == 0xf)) { - destRow += (xoffset << 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - r = (*src++) >> 4; // discard the lower 4 bit - g = (*src++) >> 4; - b = (*src++) >> 4; - *dst++ = (g << 4) | b; - *dst++ = 0xf0 | r; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { // handle less common (even weird) format - 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) && - (ddpf->dwRGBBitCount > 24)) { - destRow += (xoffset << 2); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (rDiscard >= 0) { - r = (*src++) >> rDiscard; - } else { - r = (*src++) << -rDiscard; - } - if (gDiscard >= 0) { - g = (*src++) >> gDiscard; - } else { - g = (*src++) >> -gDiscard; - } - if (bDiscard >= 0) { - b = (*src++) >> bDiscard; - } else { - b = (*src++) >> -bDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xoffset*3); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (rDiscard >= 0) { - r = (*src++) >> rDiscard; - } else { - r = (*src++) << -rDiscard; - } - if (gDiscard >= 0) { - g = (*src++) >> gDiscard; - } else { - g = (*src++) >> -gDiscard; - } - if (bDiscard >= 0) { - b = (*src++) >> bDiscard; - } else { - b = (*src++) >> -bDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += (xoffset << 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (rDiscard >= 0) { - r = (*src++) >> rDiscard; - } else { - r = (*src++) << -rDiscard; - } - if (gDiscard >= 0) { - g = (*src++) >> gDiscard; - } else { - g = (*src++) >> -gDiscard; - } - if (bDiscard >= 0) { - b = (*src++) >> bDiscard; - } else { - b = (*src++) >> -bDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask; - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += xoffset; - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (rDiscard >= 0) { - r = (*src++) >> rDiscard; - } else { - r = (*src++) << -rDiscard; - } - if (gDiscard >= 0) { - g = (*src++) >> gDiscard; - } else { - g = (*src++) >> -gDiscard; - } - if (bDiscard >= 0) { - b = (*src++) >> bDiscard; - } else { - b = (*src++) >> -bDiscard; - } - *dst++ = (byte) ((r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - // should not happen, RGBBitCount > 32. Even DirectX - // RGB mask can't address it. - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } - } else if (internalFormat == LUMINANCE_ALPHA) { - 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) && - (ddpf->dwRGBBitCount > 24)) { - destRow += (xoffset << 2); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - src++; - src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xoffset*3); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - src++; - src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += (xoffset << 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - src++; - src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask; - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += xoffset; - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - src++; - src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - *dst++ = (byte) ((r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } 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) && - (ddpf->dwRGBBitCount > 24)) { - destRow += (xoffset << 2); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src += 3; - *dst++ = m1; - *dst++ = m2; - *dst++ = m3; - *dst++ = m4; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xoffset*3); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src += 3; - *dst++ = m1; - *dst++ = m2; - *dst++ = m3; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += (xoffset << 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src += 3; - *dst++ = m1; - *dst++ = m2; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += xoffset; - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src += 3; - *dst++ = m1; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } else if ((internalFormat == LUMINANCE) || - (internalFormat == INTENSITY)) { - 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) && - (ddpf->dwRGBBitCount > 24)) { - destRow += (xoffset << 2); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - src++; - src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xoffset*3); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - src++; - src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += (xoffset << 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - src++; - src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask; - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += xoffset; - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - src++; - src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - *dst++ = (byte) ((r << rshift) | - (g << gshift) | - (b << bshift) | - ddpf->dwRGBAlphaBitMask); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } else { - printf("Texture format %d not support.\n", internalFormat); - } -} - - -void copyDataToSurfaceLA(jint internalFormat, - PIXELFORMAT *ddpf, - unsigned char* pRect, - DWORD rectPitch, - jbyte *data, - jint xoffset, jint yoffset, - DWORD xlimit, DWORD ylimit, - jint subWidth) -{ - unsigned char *src; - unsigned char *dst; - DWORD a, r, g, b, l; - unsigned char *srcRow = (unsigned char *) data; - unsigned char *destRow = pRect + rectPitch*yoffset; - const DWORD srcPitch = subWidth*2; - - if ((internalFormat == J3D_RGBA) || - (internalFormat == J3D_RGB)) { - if ((ddpf->dwRGBBitCount == 32) && - (ddpf->dwRBitMask == 0xff0000) && - (ddpf->dwGBitMask == 0xff00) && - (ddpf->dwBBitMask == 0xff)) { - // Most common case - // Note that format of destination is ARGB, which - // in PC format are BGRA, so we can't directly - // copy a row using CopyMemory() - destRow += (xoffset << 2); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - *dst++ = l; - *dst++ = l; - *dst++ = l; - *dst++ = *src++; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount == 16) && - (ddpf->dwRBitMask == 0xf00) && - (ddpf->dwGBitMask == 0xf0) && - (ddpf->dwBBitMask == 0xf)) { - destRow += (xoffset << 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = (*src++) >> 4; // discard the lower 4 bit - a = (*src++) >> 4; - *dst++ = (l << 4) | l; - *dst++ = (a << 4) | l; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { // handle less common (even weird) format - 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); - DWORD mask; - - if ((ddpf->dwRGBBitCount <= 32) && - (ddpf->dwRGBBitCount > 24)) { - destRow += (xoffset << 2); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (rDiscard >= 0) { - l = (*src++) >> rDiscard; - } else { - l = (*src++) << -rDiscard; - } - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) >> -aDiscard; - } - mask = (l << rshift) | (l << gshift) | - (l << bshift) | (a << ashift); - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - *dst++ = (byte) ((mask >> 16) & 0xff); - *dst++ = (byte) ((mask >> 24) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xoffset*3); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (rDiscard >= 0) { - l = (*src++) >> rDiscard; - } else { - l = (*src++) << -rDiscard; - } - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) >> -aDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += (xoffset << 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (rDiscard >= 0) { - l = (*src++) >> rDiscard; - } else { - l = (*src++) << -rDiscard; - } - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) >> -aDiscard; - } - mask = (l << rshift) | (l << gshift) | - (l << bshift) | (a << ashift); - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += xoffset; - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (rDiscard >= 0) { - l = (*src++) >> rDiscard; - } else { - l = (*src++) << -rDiscard; - } - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) >> -aDiscard; - } - *dst++ = (byte) ((l << rshift) | (l << gshift) | - (l << bshift) | (a << ashift)); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - // should not happen, RGBBitCount > 32. Even DirectX - // RGB mask can't address it. - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } - } else if (internalFormat == LUMINANCE_ALPHA) { - - 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); - DWORD mask; - - if ((ddpf->dwRGBBitCount <= 32) && - (ddpf->dwRGBBitCount > 24)) { - destRow += (xoffset << 2); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - *dst++ = (byte) ((mask >> 16) & 0xff); - *dst++ = (byte) ((mask >> 24) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xoffset*3); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += (xoffset << 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += xoffset; - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - *dst++ = (byte) ((r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift)); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } else if (internalFormat == ALPHA) { - int aDiscard = 8-ucountBits(ddpf->dwRGBAlphaBitMask); - int ashift = firstBit(ddpf->dwRGBAlphaBitMask); - DWORD mask; - - if ((ddpf->dwRGBBitCount <= 32) && - (ddpf->dwRGBBitCount > 24)) { - destRow += (xoffset << 2); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src++; - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - mask = a << ashift; - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - *dst++ = (byte) ((mask >> 16) & 0xff); - *dst++ = (byte) ((mask >> 24) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xoffset*3); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src++; - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - mask = a << ashift; - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - *dst++ = (byte) ((mask >> 16) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += (xoffset << 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src++; - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - mask = (a << ashift); - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += xoffset; - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src++; - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - *dst++ = (byte) (a << ashift); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } else if ((internalFormat == LUMINANCE) || - (internalFormat == INTENSITY)) { - 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); - DWORD mask; - - if ((ddpf->dwRGBBitCount <= 32) && - (ddpf->dwRGBBitCount > 24)) { - destRow += (xoffset << 2); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src++; - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - if (aDiscard >= 0) { - a = l >> aDiscard; - } else { - a = l << -aDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - *dst++ = (byte) ((mask >> 16) & 0xff); - *dst++ = (byte) ((mask >> 24) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xoffset*3); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src++; - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - if (aDiscard >= 0) { - a = l >> aDiscard; - } else { - a = l << -aDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += (xoffset << 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src++; - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - if (aDiscard >= 0) { - a = l >> aDiscard; - } else { - a = l << -aDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += xoffset; - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src++; - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - if (aDiscard >= 0) { - a = l >> aDiscard; - } else { - a = l << -aDiscard; - } - *dst++ = (byte) ((r << rshift) | - (g << gshift) | - (b << bshift) | - (a << ashift)); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } else { - printf("Texture format %d not support.\n", internalFormat); - } -} - -void copyDataToSurfaceGray(jint internalFormat, - PIXELFORMAT *ddpf, - unsigned char* pRect, - DWORD rectPitch, - jbyte *data, - jint xoffset, jint yoffset, - DWORD xlimit, DWORD ylimit, - jint subWidth) -{ - unsigned char *src; - unsigned char *dst; - DWORD a, r, g, b, l; - unsigned char *srcRow = (unsigned char *) data; - unsigned char *destRow = pRect + rectPitch*yoffset; - const DWORD srcPitch = subWidth; - - - if ((internalFormat == J3D_RGBA) || - (internalFormat == J3D_RGB)) { - if ((ddpf->dwRGBBitCount == 32) && - (ddpf->dwRBitMask == 0xff0000) && - (ddpf->dwGBitMask == 0xff00) && - (ddpf->dwBBitMask == 0xff)) { - // Most common case - // Note that format of destination is ARGB, which - // in PC format are BGRA, so we can't directly - // copy a row using CopyMemory() - destRow += (xoffset << 2); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - *dst++ = l; - *dst++ = l; - *dst++ = l; - *dst++ = 0xff; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount == 16) && - (ddpf->dwRBitMask == 0xf00) && - (ddpf->dwGBitMask == 0xf0) && - (ddpf->dwBBitMask == 0xf)) { - destRow += (xoffset << 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = (*src++) >> 4; // discard the lower 4 bit - *dst++ = (l << 4) | l; - *dst++ = 0xf0 | l; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { // handle less common (even weird) format - 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) && - (ddpf->dwRGBBitCount > 24)) { - destRow += (xoffset << 2); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (rDiscard >= 0) { - l = (*src++) >> rDiscard; - } else { - l = (*src++) << -rDiscard; - } - mask = (l << rshift) | (l << gshift) | - (l << 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; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xoffset*3); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (rDiscard >= 0) { - l = (*src++) >> rDiscard; - } else { - l = (*src++) << -rDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += (xoffset << 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (rDiscard >= 0) { - l = (*src++) >> rDiscard; - } else { - l = (*src++) << -rDiscard; - } - mask = (l << rshift) | (l << gshift) | - (l << bshift) | ddpf->dwRGBAlphaBitMask; - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += xoffset; - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (rDiscard >= 0) { - l = (*src++) >> rDiscard; - } else { - l = (*src++) << -rDiscard; - } - *dst++ = (byte) ((l << rshift) | (l << gshift) | - (l << bshift) | ddpf->dwRGBAlphaBitMask); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - // should not happen, RGBBitCount > 32. Even DirectX - // RGB mask can't address it. - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } - } else if (internalFormat == LUMINANCE_ALPHA) { - - 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); - DWORD mask; - - if ((ddpf->dwRGBBitCount <= 32) && - (ddpf->dwRGBBitCount > 24)) { - destRow += (xoffset << 2); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - if (aDiscard >= 0) { - a = l >> aDiscard; - } else { - a = l << -aDiscard; - } - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - *dst++ = (byte) ((mask >> 16) & 0xff); - *dst++ = (byte) ((mask >> 24) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xoffset*3); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - if (aDiscard >= 0) { - a = l >> aDiscard; - } else { - a = l << -aDiscard; - } - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += (xoffset << 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - if (aDiscard >= 0) { - a = l >> aDiscard; - } else { - a = l << -aDiscard; - } - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += xoffset; - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - if (aDiscard >= 0) { - a = l >> aDiscard; - } else { - a = l << -aDiscard; - } - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - *dst++ = (byte) ((r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift)); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } else if (internalFormat == ALPHA) { - int aDiscard = 8-ucountBits(ddpf->dwRGBAlphaBitMask); - int ashift = firstBit(ddpf->dwRGBAlphaBitMask); - DWORD mask; - - if ((ddpf->dwRGBBitCount <= 32) && - (ddpf->dwRGBBitCount > 24)) { - destRow += (xoffset << 2); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - mask = a << ashift; - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - *dst++ = (byte) ((mask >> 16) & 0xff); - *dst++ = (byte) ((mask >> 24) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xoffset*3); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - mask = a << ashift; - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - *dst++ = (byte) ((mask >> 16) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += (xoffset << 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - mask = (a << ashift); - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += xoffset; - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - *dst++ = (byte) (a << ashift); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } else if ((internalFormat == LUMINANCE) || - (internalFormat == INTENSITY)) { - 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); - DWORD mask; - - if ((ddpf->dwRGBBitCount <= 32) && - (ddpf->dwRGBBitCount > 24)) { - destRow += (xoffset << 2); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - if (aDiscard >= 0) { - a = l >> aDiscard; - } else { - a = l << -aDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - *dst++ = (byte) ((mask >> 16) & 0xff); - *dst++ = (byte) ((mask >> 24) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xoffset*3); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - if (aDiscard >= 0) { - a = l >> aDiscard; - } else { - a = l << -aDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += (xoffset << 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - if (aDiscard >= 0) { - a = l >> aDiscard; - } else { - a = l << -aDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += xoffset; - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - if (aDiscard >= 0) { - a = l >> aDiscard; - } else { - a = l << -aDiscard; - } - *dst++ = (byte) ((r << rshift) | - (g << gshift) | - (b << bshift) | - (a << ashift)); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } else { - printf("Texture format %d not support.\n", internalFormat); - } -} - - -/**************** NEW (1.5.0 stuff) ****************/ -/* Note this method only works on little endian architecture */ -void copyInt_ARGB_DataToSurface(jint textureFormat, - PIXELFORMAT *ddpf, - unsigned char* pRect, - DWORD rectPitch, - jbyte *data, - jint xoffset, jint yoffset, - DWORD xlimit, DWORD ylimit, - jint subWidth) -{ - unsigned char *src; - unsigned char *dst; - DWORD r, g, b, a, l; - const DWORD srcPitch = subWidth*4; - unsigned char *srcRow = (unsigned char *) data; - unsigned char *destRow = pRect + rectPitch*yoffset; - - if ((textureFormat == J3D_RGBA) || - (textureFormat == J3D_RGB)) { - /* printf("copyInt_ARGB_DataToSurface : RGBBitCount = %d \n", - ddpf->dwRGBBitCount); */ - if ((ddpf->dwRGBBitCount == 32) && - (ddpf->dwRBitMask == 0xff0000) && - (ddpf->dwGBitMask == 0xff00) && - (ddpf->dwBBitMask == 0xff)) { - // Optimize for most common case - destRow += (xoffset << 2); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - *dst++ = *src++; /* b */ - *dst++ = *src++; /* g */ - *dst++ = *src++; /* r */ - *dst++ = *src++; /* a */ - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount == 16) && - (ddpf->dwRBitMask == 0xf00) && - (ddpf->dwGBitMask == 0xf0) && - (ddpf->dwBBitMask == 0xf)) { - destRow += (xoffset << 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - b = (*src++) >> 4; // discard the lower 4 bit - g = (*src++) >> 4; - r = (*src++) >> 4; - a = (*src++) >> 4; - *dst++ = (g << 4) | b; - *dst++ = (a << 4) | r; - } - srcRow += srcPitch; - destRow += rectPitch; - } - - } else { // handle less common (even weird) format - 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); - DWORD mask; - - if ((ddpf->dwRGBBitCount <= 32) && - (ddpf->dwRGBBitCount > 24)) { - destRow += (xoffset << 2); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (bDiscard >= 0) { - b = (*src++) >> bDiscard; - } else { - b = (*src++) >> -bDiscard; - } - if (gDiscard >= 0) { - g = (*src++) >> gDiscard; - } else { - g = (*src++) >> -gDiscard; - } - if (rDiscard >= 0) { - r = (*src++) >> rDiscard; - } else { - r = (*src++) << -rDiscard; - } - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) >> -aDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - *dst++ = (byte) ((mask >> 16) & 0xff); - *dst++ = (byte) ((mask >> 24) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xoffset*3); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (bDiscard >= 0) { - b = (*src++) >> bDiscard; - } else { - b = (*src++) >> -bDiscard; - } - if (gDiscard >= 0) { - g = (*src++) >> gDiscard; - } else { - g = (*src++) >> -gDiscard; - } - if (rDiscard >= 0) { - r = (*src++) >> rDiscard; - } else { - r = (*src++) << -rDiscard; - } - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) >> -aDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += (xoffset << 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (bDiscard >= 0) { - b = (*src++) >> bDiscard; - } else { - b = (*src++) >> -bDiscard; - } - if (gDiscard >= 0) { - g = (*src++) >> gDiscard; - } else { - g = (*src++) >> -gDiscard; - } - if (rDiscard >= 0) { - r = (*src++) >> rDiscard; - } else { - r = (*src++) << -rDiscard; - } - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) >> -aDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += xoffset; - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (bDiscard >= 0) { - b = (*src++) >> bDiscard; - } else { - b = (*src++) >> -bDiscard; - } - if (gDiscard >= 0) { - g = (*src++) >> gDiscard; - } else { - g = (*src++) >> -gDiscard; - } - if (rDiscard >= 0) { - r = (*src++) >> rDiscard; - } else { - r = (*src++) << -rDiscard; - } - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) >> -aDiscard; - } - *dst++ = (byte) ((r << rshift) | (g << gshift) | - (b << bshift) |(a << ashift)); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - // should not happen, RGBBitCount > 32. Even DirectX - // RGB mask can't address it. - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } - } else if (textureFormat == LUMINANCE_ALPHA) { - 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); - DWORD mask; - - if ((ddpf->dwRGBBitCount <= 32) && - (ddpf->dwRGBBitCount > 24)) { - destRow += (xoffset << 2); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src++; - src++; - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - *dst++ = (byte) ((mask >> 16) & 0xff); - *dst++ = (byte) ((mask >> 24) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xoffset*3); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src++; - src++; - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += (xoffset << 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src++; - src++; - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += xoffset; - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src++; - src++; - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - *dst++ = (byte) ((r << rshift) | (g << gshift) | - (b << bshift) |(a << ashift)); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } else if (textureFormat == ALPHA) { - int aDiscard = 8-ucountBits(ddpf->dwRGBAlphaBitMask); - int ashift = firstBit(ddpf->dwRGBAlphaBitMask); - DWORD mask; - - if ((ddpf->dwRGBBitCount <= 32) && - (ddpf->dwRGBBitCount > 24)) { - destRow += (xoffset << 2); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - src += 3; - mask = a << ashift; - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - *dst++ = (byte) ((mask >> 16) & 0xff); - *dst++ = (byte) ((mask >> 24) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xoffset*3); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - src += 3; - mask = a << ashift; - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - *dst++ = (byte) ((mask >> 16) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += (xoffset << 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - src += 3; - mask = (a << ashift); - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += xoffset; - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (aDiscard >= 0) { - a = (*src++) >> aDiscard; - } else { - a = (*src++) << -aDiscard; - } - src += 3; - *dst++ = (byte) (a << ashift); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } else if ((textureFormat == LUMINANCE) || - (textureFormat == INTENSITY)) { - 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); - DWORD mask; - - if ((ddpf->dwRGBBitCount <= 32) && - (ddpf->dwRGBBitCount > 24)) { - destRow += (xoffset << 2); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src; - src += 4; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - if (aDiscard >= 0) { - a = l >> aDiscard; - } else { - a = l << -aDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - *dst++ = (byte) ((mask >> 16) & 0xff); - *dst++ = (byte) ((mask >> 24) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xoffset*3); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src; - src += 4; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - if (aDiscard >= 0) { - a = l >> aDiscard; - } else { - a = l << -aDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += (xoffset << 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src; - src += 4; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - if (aDiscard >= 0) { - a = l >> aDiscard; - } else { - a = l << -aDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | (a << ashift); - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += xoffset; - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src; - src += 4; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - if (aDiscard >= 0) { - a = l >> aDiscard; - } else { - a = l << -aDiscard; - } - *dst++ = (byte) ((r << rshift) | - (g << gshift) | - (b << bshift) | - (a << ashift)); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } else { - printf("Texture format %d not support.\n", textureFormat); - } -} - -/* Note this method only works on little endian architecture */ -void copyInt_XRGB_DataToSurface(jint textureFormat, - PIXELFORMAT *ddpf, - unsigned char* pRect, - DWORD rectPitch, - jbyte *data, - jint xoffset, jint yoffset, - DWORD xlimit, DWORD ylimit, - jint subWidth) -{ - unsigned char *src; - unsigned char *dst; - DWORD r, g, b, a, l; - const DWORD srcPitch = subWidth*4; - unsigned char *srcRow = (unsigned char *) data; - unsigned char *destRow = pRect + rectPitch*yoffset; - - if ((textureFormat == J3D_RGBA) || - (textureFormat == J3D_RGB)) { - /* printf("copyInt_XRGB_DataToSurface : RGBBitCount = %d \n", - ddpf->dwRGBBitCount); */ - if ((ddpf->dwRGBBitCount == 32) && - (ddpf->dwRBitMask == 0xff0000) && - (ddpf->dwGBitMask == 0xff00) && - (ddpf->dwBBitMask == 0xff)) { - // Optimize for most common case - destRow += (xoffset << 2); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - *dst++ = *src++; /* b */ - *dst++ = *src++; /* g */ - *dst++ = *src++; /* r */ - *dst++ = 0xff; *src++; /* a */ - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount == 16) && - (ddpf->dwRBitMask == 0xf00) && - (ddpf->dwGBitMask == 0xf0) && - (ddpf->dwBBitMask == 0xf)) { - destRow += (xoffset << 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - b = (*src++) >> 4; // discard the lower 4 bit - g = (*src++) >> 4; - r = (*src++) >> 4; - *src++; /* a */ - *dst++ = (g << 4) | b; - *dst++ = 0xf0 | r; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { // handle less common (even weird) format - 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) && - (ddpf->dwRGBBitCount > 24)) { - destRow += (xoffset << 2); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (bDiscard >= 0) { - b = (*src++) >> bDiscard; - } else { - b = (*src++) >> -bDiscard; - } - if (gDiscard >= 0) { - g = (*src++) >> gDiscard; - } else { - g = (*src++) >> -gDiscard; - } - if (rDiscard >= 0) { - r = (*src++) >> rDiscard; - } else { - r = (*src++) << -rDiscard; - } - *src++; /* a */ - 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; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xoffset*3); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (bDiscard >= 0) { - b = (*src++) >> bDiscard; - } else { - b = (*src++) >> -bDiscard; - } - if (gDiscard >= 0) { - g = (*src++) >> gDiscard; - } else { - g = (*src++) >> -gDiscard; - } - if (rDiscard >= 0) { - r = (*src++) >> rDiscard; - } else { - r = (*src++) << -rDiscard; - } - *src++; /* a */ - 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; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += (xoffset << 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (bDiscard >= 0) { - b = (*src++) >> bDiscard; - } else { - b = (*src++) >> -bDiscard; - } - if (gDiscard >= 0) { - g = (*src++) >> gDiscard; - } else { - g = (*src++) >> -gDiscard; - } - if (rDiscard >= 0) { - r = (*src++) >> rDiscard; - } else { - r = (*src++) << -rDiscard; - } - *src++; /* a */ - mask = (r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask; - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += xoffset; - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (bDiscard >= 0) { - b = (*src++) >> bDiscard; - } else { - b = (*src++) >> -bDiscard; - } - if (gDiscard >= 0) { - g = (*src++) >> gDiscard; - } else { - g = (*src++) >> -gDiscard; - } - if (rDiscard >= 0) { - r = (*src++) >> rDiscard; - } else { - r = (*src++) << -rDiscard; - } - *src++; /* a */ - *dst++ = (byte) ((r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - // should not happen, RGBBitCount > 32. Even DirectX - // RGB mask can't address it. - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } - } else if (textureFormat == LUMINANCE_ALPHA) { - 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) && - (ddpf->dwRGBBitCount > 24)) { - destRow += (xoffset << 2); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src++; - src++; - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - *src++; /* a */ - 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; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xoffset*3); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src++; - src++; - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - *src++; /* a */ - 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; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += (xoffset << 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src++; - src++; - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - *src++; /* a */ - mask = (r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask; - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += xoffset; - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src++; - src++; - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - *src++; /* a */ - *dst++ = (byte) ((r << rshift) | (g << gshift) | - (b << bshift) |ddpf->dwRGBAlphaBitMask); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } else if (textureFormat == 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) && - (ddpf->dwRGBBitCount > 24)) { - destRow += (xoffset << 2); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src += 4; - *dst++ = m1; - *dst++ = m2; - *dst++ = m3; - *dst++ = m4; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xoffset*3); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src += 4; - *dst++ = m1; - *dst++ = m2; - *dst++ = m3; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += (xoffset << 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src += 4; - *dst++ = m1; - *dst++ = m2; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += xoffset; - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src += 4; - *dst++ = m1; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } else if ((textureFormat == LUMINANCE) || - (textureFormat == INTENSITY)) { - 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) && - (ddpf->dwRGBBitCount > 24)) { - destRow += (xoffset << 2); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src; - src += 4; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xoffset*3); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src; - src += 4; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += (xoffset << 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src; - src += 4; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask; - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += xoffset; - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src; - src += 4; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - *dst++ = (byte) ((r << rshift) | - (g << gshift) | - (b << bshift) | - ddpf->dwRGBAlphaBitMask); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } else { - printf("Texture format %d not support.\n", textureFormat); - } -} - -/* Note this method only works on little endian architecture */ -void copyInt_XBGR_DataToSurface(jint textureFormat, - PIXELFORMAT *ddpf, - unsigned char* pRect, - DWORD rectPitch, - jbyte *data, - jint xoffset, jint yoffset, - DWORD xlimit, DWORD ylimit, - jint subWidth) -{ - unsigned char *src; - unsigned char *dst; - DWORD r, g, b, a, l; - const DWORD srcPitch = subWidth*4; - unsigned char *srcRow = (unsigned char *) data; - unsigned char *destRow = pRect + rectPitch*yoffset; - - if ((textureFormat == J3D_RGBA) || - (textureFormat == J3D_RGB)) { - /* printf("copyInt_XRGB_DataToSurface : RGBBitCount = %d \n", - ddpf->dwRGBBitCount); */ - if ((ddpf->dwRGBBitCount == 32) && - (ddpf->dwRBitMask == 0xff0000) && - (ddpf->dwGBitMask == 0xff00) && - (ddpf->dwBBitMask == 0xff)) { - // Optimize for most common case - destRow += (xoffset << 2); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - r = *src++; - g = *src++; - b = *src++; - *dst++ = b; /* b */ - *dst++ = g; /* g */ - *dst++ = r; /* r */ - *dst++ = 0xff; *src++; /* a */ - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount == 16) && - (ddpf->dwRBitMask == 0xf00) && - (ddpf->dwGBitMask == 0xf0) && - (ddpf->dwBBitMask == 0xf)) { - destRow += (xoffset << 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - r = (*src++) >> 4; // discard the lower 4 bit - g = (*src++) >> 4; - b = (*src++) >> 4; - *src++; /* a */ - *dst++ = (g << 4) | b; - *dst++ = 0xf0 | r; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { // handle less common (even weird) format - 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) && - (ddpf->dwRGBBitCount > 24)) { - destRow += (xoffset << 2); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (rDiscard >= 0) { - r = (*src++) >> rDiscard; - } else { - r = (*src++) << -rDiscard; - } - if (gDiscard >= 0) { - g = (*src++) >> gDiscard; - } else { - g = (*src++) >> -gDiscard; - } - if (bDiscard >= 0) { - b = (*src++) >> bDiscard; - } else { - b = (*src++) >> -bDiscard; - } - *src++; /* a */ - 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; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xoffset*3); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (rDiscard >= 0) { - r = (*src++) >> rDiscard; - } else { - r = (*src++) << -rDiscard; - } - if (gDiscard >= 0) { - g = (*src++) >> gDiscard; - } else { - g = (*src++) >> -gDiscard; - } - if (bDiscard >= 0) { - b = (*src++) >> bDiscard; - } else { - b = (*src++) >> -bDiscard; - } - *src++; /* a */ - 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; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += (xoffset << 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (rDiscard >= 0) { - r = (*src++) >> rDiscard; - } else { - r = (*src++) << -rDiscard; - } - if (gDiscard >= 0) { - g = (*src++) >> gDiscard; - } else { - g = (*src++) >> -gDiscard; - } - if (bDiscard >= 0) { - b = (*src++) >> bDiscard; - } else { - b = (*src++) >> -bDiscard; - } - *src++; /* a */ - mask = (r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask; - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += xoffset; - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - if (rDiscard >= 0) { - r = (*src++) >> rDiscard; - } else { - r = (*src++) << -rDiscard; - } - if (gDiscard >= 0) { - g = (*src++) >> gDiscard; - } else { - g = (*src++) >> -gDiscard; - } - if (bDiscard >= 0) { - b = (*src++) >> bDiscard; - } else { - b = (*src++) >> -bDiscard; - } - *src++; /* a */ - *dst++ = (byte) ((r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - // should not happen, RGBBitCount > 32. Even DirectX - // RGB mask can't address it. - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } - } else if (textureFormat == LUMINANCE_ALPHA) { - 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) && - (ddpf->dwRGBBitCount > 24)) { - destRow += (xoffset << 2); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - src += 3; - 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; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xoffset*3); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - src += 3; - 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; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += (xoffset << 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - src += 3; - mask = (r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask; - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += xoffset; - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src++; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - src += 3; - *dst++ = (byte) ((r << rshift) | (g << gshift) | - (b << bshift) |ddpf->dwRGBAlphaBitMask); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } else if (textureFormat == 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) && - (ddpf->dwRGBBitCount > 24)) { - destRow += (xoffset << 2); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src += 4; - *dst++ = m1; - *dst++ = m2; - *dst++ = m3; - *dst++ = m4; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xoffset*3); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src += 4; - *dst++ = m1; - *dst++ = m2; - *dst++ = m3; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += (xoffset << 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src += 4; - *dst++ = m1; - *dst++ = m2; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += xoffset; - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - src += 4; - *dst++ = m1; - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } else if ((textureFormat == LUMINANCE) || - (textureFormat == INTENSITY)) { - 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) && - (ddpf->dwRGBBitCount > 24)) { - destRow += (xoffset << 2); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src; - src += 4; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 24) && - (ddpf->dwRGBBitCount > 16)) { - destRow += (xoffset*3); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src; - src += 4; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - 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; - } - } else if ((ddpf->dwRGBBitCount <= 16) && - (ddpf->dwRGBBitCount > 8)) { - destRow += (xoffset << 1); - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src; - src += 4; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - mask = (r << rshift) | (g << gshift) | - (b << bshift) | ddpf->dwRGBAlphaBitMask; - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else if (ddpf->dwRGBBitCount <= 8) { - destRow += xoffset; - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - l = *src; - src += 4; - if (rDiscard >= 0) { - r = l >> rDiscard; - } else { - r = l << -rDiscard; - } - if (gDiscard >= 0) { - g = l >> gDiscard; - } else { - g = l << -gDiscard; - } - if (bDiscard >= 0) { - b = l >> bDiscard; - } else { - b = l << -bDiscard; - } - *dst++ = (byte) ((r << rshift) | - (g << gshift) | - (b << bshift) | - ddpf->dwRGBAlphaBitMask); - } - srcRow += srcPitch; - destRow += rectPitch; - } - } else { - printf("Texture memory with RGBBitCount = %d not support. \n", - ddpf->dwRGBBitCount); - } - } else { - printf("Texture format %d not support.\n", textureFormat); - } -} - -/* - * Copy data from memory to DirectDraw surface - * - * Source image with WIDTH = tilew, the subimage with - * dimension (subWidth, subHeight) is copy with - * offset = (imgXOffset, imgYOffset) from the start - * pointer *data. - * - * Destination frame buffer is copy with - * offset = (xoffset, yoffset) - * - */ -void copyDataToSurface(jint imageFormat, - jint textureFormat, - jint xoffset, jint yoffset, - jint imgXOffset, jint imgYOffset, - jint subWidth, jint subHeight, - jint tilew, jbyte *data, - LPDIRECT3DTEXTURE9 surf, - jint level) -{ - D3DSURFACE_DESC ddsd; - D3DLOCKED_RECT lockedRect; - PIXELFORMAT ddpf; - HRESULT hr; - - if (surf == NULL) { - return; - } - surf->GetLevelDesc(level, &ddsd); - DWORD width = ddsd.Width; - DWORD height = ddsd.Height; - computePixelFormat(&ddpf, ddsd.Format); - - // It is possible when texture is not a power of 2 or - // square only texture is required in hardware. In these - // case the hardware memory buffer may smaller than the - // texture pass in. - - if ((xoffset >= width) || (yoffset >= height)) { - return; - } - - DWORD xlimit = min(xoffset + subWidth, width); - DWORD ylimit = min(yoffset + subHeight, height); - - hr = surf->LockRect(level, &lockedRect, NULL, 0); - - - if (FAILED(hr)) { - printf("Fail to lock surface: %s\n", DXGetErrorString9(hr)); - return; - } - int offset = tilew*imgYOffset + imgXOffset; - switch (imageFormat) { - case IMAGE_FORMAT_BYTE_RGBA : - /* printf("[IMAGE_FORMAT_BYTE_RGBA] imageFormat %d, textureFormat %d\n", - imageFormat, textureFormat); */ - - // This is the one we use when byReference = false - copyDataToSurfaceRGBA(textureFormat, &ddpf, - (unsigned char *) lockedRect.pBits, - lockedRect.Pitch, - data + (offset << 2), - xoffset, yoffset, - xlimit, ylimit, tilew); - break; - case IMAGE_FORMAT_BYTE_RGB: - /* printf("[IMAGE_FORMAT_BYTE_RGB] imageFormat %d, textureFormat %d\n", - imageFormat, textureFormat); */ - copyDataToSurfaceRGB(textureFormat, &ddpf, - (unsigned char *) lockedRect.pBits, - lockedRect.Pitch, - data + 3*offset, - xoffset, yoffset, - xlimit, ylimit, tilew); - break; - case IMAGE_FORMAT_BYTE_ABGR: - /* printf("[IMAGE_FORMAT_BYTE_ABGR] imageFormat %d, textureFormat %d\n", - imageFormat, textureFormat); */ - - copyDataToSurfaceABGR(textureFormat, &ddpf, - (unsigned char *) lockedRect.pBits, - lockedRect.Pitch, - data + (offset << 2), - xoffset, yoffset, - xlimit, ylimit, tilew); - break; - case IMAGE_FORMAT_BYTE_BGR: - /* printf("[IMAGE_FORMAT_BYTE_BGR] imageFormat %d, textureFormat %d\n", - imageFormat, textureFormat); */ - - copyDataToSurfaceBGR(textureFormat, &ddpf, - (unsigned char *) lockedRect.pBits, - lockedRect.Pitch, - data + 3*offset, - xoffset, yoffset, - xlimit, ylimit, tilew); - break; - case IMAGE_FORMAT_BYTE_LA: - copyDataToSurfaceLA(textureFormat, &ddpf, - (unsigned char *) lockedRect.pBits, - lockedRect.Pitch, - data + (offset << 1), - xoffset, yoffset, - xlimit, ylimit, tilew); - break; - case IMAGE_FORMAT_BYTE_GRAY: - copyDataToSurfaceGray(textureFormat, &ddpf, - (unsigned char *) lockedRect.pBits, - lockedRect.Pitch, - data + offset, - xoffset, yoffset, - xlimit, ylimit, tilew); - break; - case IMAGE_FORMAT_INT_BGR: - /* printf("[IMAGE_FORMAT_INT_BGR] imageFormat %d, textureFormat %d not support !\n", - imageFormat, textureFormat); */ - copyInt_XBGR_DataToSurface(textureFormat, &ddpf, - (unsigned char *) lockedRect.pBits, - lockedRect.Pitch, - data + (offset << 2), - xoffset, yoffset, - xlimit, ylimit, tilew); - - break; - case IMAGE_FORMAT_INT_RGB: - /* printf("[IMAGE_FORMAT_INT_RGB] imageFormat %d, textureFormat %d\n", - imageFormat, textureFormat); */ - copyInt_XRGB_DataToSurface(textureFormat, &ddpf, - (unsigned char *) lockedRect.pBits, - lockedRect.Pitch, - data + (offset << 2), - xoffset, yoffset, - xlimit, ylimit, tilew); - break; - case IMAGE_FORMAT_INT_ARGB: - /* printf("[IMAGE_FORMAT_INT_ABGR] imageFormat %d, textureFormat %d\n", - imageFormat, textureFormat); */ - copyInt_ARGB_DataToSurface(textureFormat, &ddpf, - (unsigned char *) lockedRect.pBits, - lockedRect.Pitch, - data + (offset << 2), - xoffset, yoffset, - xlimit, ylimit, tilew); - break; - default: // should not happen - printf("[Java 3D] imageFormat %d, textureFormat %d not support !\n", - imageFormat, textureFormat); - } - - hr = surf->UnlockRect(level); - if (FAILED(hr)) { - printf("Fail to unlock surface: %s\n", DXGetErrorString9(hr)); - return; - } -} - -// copy data from DirectDraw depth surface to memory -// and reverse the Y axis -void copyDepthFromSurface(jint xoffset, jint yoffset, - jint subWidth, jint subHeight, - jint *data, - LPDIRECT3DSURFACE9 surf) -{ - D3DSURFACE_DESC ddsd; - DEPTHPIXELFORMAT ddpf; - D3DLOCKED_RECT lockedRect; - HRESULT hr; - - if (surf == NULL) { - return; - } - surf->GetDesc(&ddsd); - DWORD width = ddsd.Width; - DWORD height = ddsd.Height; - computeDepthPixelFormat(&ddpf, ddsd.Format); - - if ((xoffset >= width) || (yoffset >= height)) { - return; - } - - DWORD xlimit = min(xoffset + subWidth, width); - DWORD ylimit = min(yoffset + subHeight, height); - - hr = surf->LockRect(&lockedRect, NULL, D3DLOCK_READONLY); - - if (FAILED(hr)) { - if (debug) { - printf("Fail to lock depth surface: %s\n", DXGetErrorString9(hr)); - } - return; - } - - DWORD b1, b2, b3, b4; - DWORD mask; - jint *destRow = data; - jint *dst; - unsigned char *src; - unsigned char *srcRow = ((unsigned char *) lockedRect.pBits) + - xoffset*((int) ceil((float) ddpf.dwZBufferBitDepth/8.0)) + - (yoffset*lockedRect.Pitch); - - int zshift = firstBit(ddpf.dwZBitMask); - - destRow += (subHeight-1)*subWidth; - - if ((ddpf.dwZBufferBitDepth <= 32) && - (ddpf.dwZBufferBitDepth > 24)) { - - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - b1 = *src++; - b2 = *src++; - b3 = *src++; - b4 = *src++; - mask = (b4 << 24) | (b3 << 16) | - (b2 << 8) | b1; - *dst++ = (mask & ddpf.dwZBitMask) >> zshift; - } - srcRow += lockedRect.Pitch; - destRow -= subWidth; - } - } else if ((ddpf.dwZBufferBitDepth <= 24) && - (ddpf.dwZBufferBitDepth > 16)) { - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - b1 = *src++; - b2 = *src++; - b3 = *src++; - mask = (b3 << 16) | (b2 << 8) | b1; - *dst++ = (mask & ddpf.dwZBitMask) >> zshift; - } - srcRow += lockedRect.Pitch; - destRow -= subWidth; - } - } else if ((ddpf.dwZBufferBitDepth <= 16) && - (ddpf.dwZBufferBitDepth > 8)) { - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - b1 = *src++; - b2 = *src++; - mask = (b2 << 8) | b1; - *dst++ = (mask & ddpf.dwZBitMask) >> zshift; - } - srcRow += lockedRect.Pitch; - destRow -= subWidth; - } - } else if (ddpf.dwZBufferBitDepth <= 8) { - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - *dst++ = (*src++ & ddpf.dwZBitMask) >> zshift; - } - srcRow += lockedRect.Pitch; - destRow -= subWidth; - } - } else { - // This is not support by D3D 8 either - 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", DXGetErrorString9(hr)); - return; - } -} - - -// copy data from DirectDraw depth surface to memory -// and reverse the Y axis -void copyDepthFromSurface(jint xoffset, jint yoffset, - jint subWidth, jint subHeight, - jfloat *data, - LPDIRECT3DSURFACE9 surf) -{ - D3DSURFACE_DESC ddsd; - DEPTHPIXELFORMAT ddpf; - D3DLOCKED_RECT lockedRect; - HRESULT hr; - - if (surf == NULL) { - return; - } - - surf->GetDesc(&ddsd); - DWORD width = ddsd.Width; - DWORD height = ddsd.Height; - computeDepthPixelFormat(&ddpf, ddsd.Format); - - if ((xoffset >= width) || (yoffset >= height)) { - return; - } - - DWORD xlimit = min(xoffset + subWidth, width); - DWORD ylimit = min(yoffset + subHeight, height); - - hr = surf->LockRect(&lockedRect, NULL, D3DLOCK_READONLY); - - if (FAILED(hr)) { - if (debug) { - printf("Fail to lock depth surface: %s\n", DXGetErrorString9(hr)); - } - return; - } - - DWORD b1, b2, b3, b4; - DWORD mask; - jfloat *destRow = data; - jfloat *dst; - unsigned char *src; - unsigned char *srcRow = ((unsigned char *) lockedRect.pBits) + - xoffset*((int) ceil((float) ddpf.dwZBufferBitDepth/8.0)) + - (yoffset*lockedRect.Pitch); - - int zshift = firstBit(ddpf.dwZBitMask); - float maxdepth = float( 1 << ddpf.dwZBufferBitDepth); - - destRow += (subHeight-1)*subWidth; - - if ((ddpf.dwZBufferBitDepth <= 32) && - (ddpf.dwZBufferBitDepth > 24)) { - - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - b1 = *src++; - b2 = *src++; - b3 = *src++; - b4 = *src++; - mask = (b4 << 24) | (b3 << 16) | - (b2 << 8) | b1; - *dst++ = (((mask & ddpf.dwZBitMask) >> - zshift))/ maxdepth; - } - srcRow += lockedRect.Pitch; - destRow -= subWidth; - } - } else if ((ddpf.dwZBufferBitDepth <= 24) && - (ddpf.dwZBufferBitDepth > 16)) { - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - b1 = *src++; - b2 = *src++; - b3 = *src++; - mask = (b3 << 16) | (b2 << 8) | b1; - *dst++ = ((mask & ddpf.dwZBitMask) >> - zshift)/ maxdepth; - } - srcRow += lockedRect.Pitch; - destRow -= subWidth; - } - } else if ((ddpf.dwZBufferBitDepth <= 16) && - (ddpf.dwZBufferBitDepth > 8)) { - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - b1 = *src++; - b2 = *src++; - mask = (b2 << 8) | b1; - *dst++ = ((mask & ddpf.dwZBitMask) >> - zshift)/ maxdepth; - } - srcRow += lockedRect.Pitch; - destRow -= subWidth; - } - } else if (ddpf.dwZBufferBitDepth <= 8) { - for (int i=yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=xoffset; j < xlimit; j++) { - *dst++ = ((*src++ & ddpf.dwZBitMask) >> - zshift)/ maxdepth; - } - srcRow += lockedRect.Pitch; - destRow -= subWidth; - } - } else { - // This is not support by D3D 8 either - 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", DXGetErrorString9(hr)); - return; - } -} - - -// copy data to DirectDraw depth surface from memory -// and reverse the Y axis -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, - LPDIRECT3DSURFACE9 surf) -{ - D3DSURFACE_DESC ddsd; - DEPTHPIXELFORMAT ddpf; - D3DLOCKED_RECT lockedRect; - HRESULT hr; - - if (surf == NULL) { - return; - } - - surf->GetDesc(&ddsd); - DWORD width = ddsd.Width; - DWORD height = ddsd.Height; - computeDepthPixelFormat(&ddpf, ddsd.Format); - - if ((dst_xoffset >= width) || (dst_yoffset >= height)) { - return; - } - - DWORD xlimit = min(dst_xoffset + subWidth, width); - DWORD ylimit = min(dst_yoffset + subHeight, height); - - hr = surf->LockRect(&lockedRect, NULL, 0); - - if (FAILED(hr)) { - if (debug) { - printf("Fail to lock depth surface: %s\n", DXGetErrorString9(hr)); - } - return; - } - jint *src; - jint *srcRow = data + src_xoffset + - (src_yoffset + subHeight-1)*src_width; - unsigned char *dst; - unsigned char *destRow = ((unsigned char *) lockedRect.pBits) + - dst_xoffset + dst_yoffset*lockedRect.Pitch; - - int zshift = firstBit(ddpf.dwZBitMask); - DWORD mask; - int maxValue = ddpf.dwZBitMask >> zshift; - - - if ((ddpf.dwZBufferBitDepth <= 32) && - (ddpf.dwZBufferBitDepth > 24)) { - - for (int i=dst_yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=dst_xoffset; j < xlimit; j++) { - mask = *src++; - if (mask < maxValue) { - mask = mask << zshift; - } else { - mask = ddpf.dwZBitMask; - } - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - *dst++ = (byte) ((mask >> 16) & 0xff); - *dst++ = (byte) ((mask >> 24) & 0xff); - } - srcRow -= src_width; - destRow += lockedRect.Pitch; - } - } else if ((ddpf.dwZBufferBitDepth <= 24) && - (ddpf.dwZBufferBitDepth > 16)) { - - for (int i=dst_yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=dst_xoffset; j < xlimit; j++) { - mask = *src++; - if (mask < maxValue) { - mask = mask << zshift; - } else { - mask = ddpf.dwZBitMask; - } - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - *dst++ = (byte) ((mask >> 16) & 0xff); - } - srcRow -= src_width; - destRow += lockedRect.Pitch; - } - } else if ((ddpf.dwZBufferBitDepth <= 16) && - (ddpf.dwZBufferBitDepth > 8)) { - - for (int i=dst_yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=dst_xoffset; j < xlimit; j++) { - mask = *src++; - if (mask < maxValue) { - mask = mask << zshift; - } else { - mask = ddpf.dwZBitMask; - } - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - } - srcRow -= src_width; - destRow += lockedRect.Pitch; - } - } else if (ddpf.dwZBufferBitDepth <= 8) { - byte bmask = (byte) (ddpf.dwZBitMask & 0xff); - for (int i=dst_yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=dst_xoffset; j < xlimit; j++) { - mask = *src++; - if (mask < maxValue) { - *dst++ = (byte) ((mask << zshift) & 0xff); - } else { - *dst++ = bmask; - } - } - srcRow -= src_width; - destRow += lockedRect.Pitch; - } - - } - - hr = surf->UnlockRect(); - if (FAILED(hr)) { - printf("Fail to unlock depth surface: %s\n", DXGetErrorString9(hr)); - return; - } - -} - - -// copy data to DirectDraw depth surface from memory -// and reverse the Y axis -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, - LPDIRECT3DSURFACE9 surf) -{ - D3DSURFACE_DESC ddsd; - DEPTHPIXELFORMAT ddpf; - D3DLOCKED_RECT lockedRect; - HRESULT hr; - - if (surf == NULL) { - return; - } - - surf->GetDesc(&ddsd); - DWORD width = ddsd.Width; - DWORD height = ddsd.Height; - computeDepthPixelFormat(&ddpf, ddsd.Format); - - - if ((dst_xoffset >= width) || (dst_yoffset >= height)) { - return; - } - - DWORD xlimit = min(dst_xoffset + subWidth, width); - DWORD ylimit = min(dst_yoffset + subHeight, height); - - hr = surf->LockRect(&lockedRect, NULL, 9); - - if (FAILED(hr)) { - if (debug) { - printf("Fail to lock depth surface: %s\n", DXGetErrorString9(hr)); - } - return; - } - jfloat *src; - jfloat *srcRow = data + src_xoffset + - (src_yoffset + subHeight-1)*src_width; - unsigned char *dst; - unsigned char *destRow = ((unsigned char *) lockedRect.pBits) + - dst_xoffset + dst_yoffset*lockedRect.Pitch; - - int zshift = firstBit(ddpf.dwZBitMask); - DWORD mask; - int maxValue = ddpf.dwZBitMask >> zshift; - float maxdepth = float( 1 << ddpf.dwZBufferBitDepth); - - if ((ddpf.dwZBufferBitDepth <= 32) && - (ddpf.dwZBufferBitDepth > 24)) { - - for (int i=dst_yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=dst_xoffset; j < xlimit; j++) { - mask = DWORD((*src++)*maxdepth); - if (mask < maxValue) { - mask = mask << zshift; - } else { - mask = ddpf.dwZBitMask; - } - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - *dst++ = (byte) ((mask >> 16) & 0xff); - *dst++ = (byte) ((mask >> 24) & 0xff); - } - srcRow -= src_width; - destRow += lockedRect.Pitch; - } - } else if ((ddpf.dwZBufferBitDepth <= 24) && - (ddpf.dwZBufferBitDepth > 16)) { - - for (int i=dst_yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=dst_xoffset; j < xlimit; j++) { - mask = DWORD((*src++)*maxdepth); - if (mask < maxValue) { - mask = mask << zshift; - } else { - mask = ddpf.dwZBitMask; - } - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - *dst++ = (byte) ((mask >> 16) & 0xff); - } - srcRow -= src_width; - destRow += lockedRect.Pitch; - } - } else if ((ddpf.dwZBufferBitDepth <= 16) && - (ddpf.dwZBufferBitDepth > 8)) { - - for (int i=dst_yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=dst_xoffset; j < xlimit; j++) { - mask = DWORD((*src++)*maxdepth); - if (mask < maxValue) { - mask = mask << zshift; - } else { - mask = ddpf.dwZBitMask; - } - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - } - srcRow -= src_width; - destRow += lockedRect.Pitch; - } - } else if (ddpf.dwZBufferBitDepth <= 8) { - byte bmask = (byte) (ddpf.dwZBitMask & 0xff); - for (int i=dst_yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=dst_xoffset; j < xlimit; j++) { - mask = DWORD((*src++)*maxdepth); - if (mask < maxValue) { - *dst++ = (byte) ((mask << zshift) & 0xff); - } else { - *dst++ = bmask; - } - } - srcRow -= src_width; - destRow += lockedRect.Pitch; - } - - } - - hr = surf->UnlockRect(); - if (FAILED(hr)) { - printf("Fail to unlock depth surface: %s\n", DXGetErrorString9(hr)); - return; - } - -} - -// copy data to DirectDraw depth surface from memory -// and reverse the Y axis with Z test D3DCMP_LESS -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, - LPDIRECT3DSURFACE9 surf) -{ - D3DSURFACE_DESC ddsd; - DEPTHPIXELFORMAT ddpf; - D3DLOCKED_RECT lockedRect; - HRESULT hr; - - if (surf == NULL) { - return; - } - - surf->GetDesc(&ddsd); - DWORD width = ddsd.Width; - DWORD height = ddsd.Height; - computeDepthPixelFormat(&ddpf, ddsd.Format); - - - if ((dst_xoffset >= width) || (dst_yoffset >= height)) { - return; - } - - DWORD xlimit = min(dst_xoffset + subWidth, width); - DWORD ylimit = min(dst_yoffset + subHeight, height); - - hr = surf->LockRect(&lockedRect, NULL, 0); - - if (FAILED(hr)) { - if (debug) { - printf("Fail to lock depth surface: %s\n", DXGetErrorString9(hr)); - } - return; - } - - jint *src; - jint *srcRow = data + src_xoffset + - (src_yoffset + subHeight-1)*src_width; - unsigned char *dst; - unsigned char *destRow = ((unsigned char *) lockedRect.pBits) + - dst_xoffset + dst_yoffset*lockedRect.Pitch; - - - int zshift = firstBit(ddpf.dwZBitMask); - DWORD mask; - DWORD b1, b2, b3, b4; - DWORD zmask; - int maxValue = ddpf.dwZBitMask >> zshift; - - - if ((ddpf.dwZBufferBitDepth <= 32) && - (ddpf.dwZBufferBitDepth > 24)) { - - for (int i=dst_yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=dst_xoffset; j < xlimit; j++) { - b1 = *dst++; - b2 = *dst++; - b3 = *dst++; - b4 = *dst++; - zmask = (b4 << 24) | (b3 << 16) | - (b2 << 8) | b1; - zmask = (zmask & ddpf.dwZBitMask) >> zshift; - mask = *src++; - if (mask < zmask) { - // z depth test pass - if (mask < maxValue) { - mask = mask << zshift; - } else { - mask = ddpf.dwZBitMask; - } - dst -= 4; - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - *dst++ = (byte) ((mask >> 16) & 0xff); - *dst++ = (byte) ((mask >> 24) & 0xff); - } - } - srcRow -= src_width; - destRow += lockedRect.Pitch; - } - } else if ((ddpf.dwZBufferBitDepth <= 24) && - (ddpf.dwZBufferBitDepth > 16)) { - - for (int i=dst_yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=dst_xoffset; j < xlimit; j++) { - b1 = *dst++; - b2 = *dst++; - b3 = *dst++; - zmask = (b3 << 16) | (b2 << 8) | b1; - zmask = (zmask & ddpf.dwZBitMask) >> zshift; - mask = *src++; - if (mask < zmask) { - if (mask < maxValue) { - mask = mask << zshift; - } else { - mask = ddpf.dwZBitMask; - } - dst -= 3; - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - *dst++ = (byte) ((mask >> 16) & 0xff); - } - } - srcRow -= src_width; - destRow += lockedRect.Pitch; - } - } else if ((ddpf.dwZBufferBitDepth <= 16) && - (ddpf.dwZBufferBitDepth > 8)) { - - for (int i=dst_yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=dst_xoffset; j < xlimit; j++) { - b1 = *dst++; - b2 = *dst++; - zmask = (b2 << 8) | b1; - zmask = (zmask & ddpf.dwZBitMask) >> zshift; - mask = *src++; - if (mask < zmask) { - if (mask < maxValue) { - mask = mask << zshift; - } else { - mask = ddpf.dwZBitMask; - } - dst -= 2; - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - } - } - srcRow -= src_width; - destRow += lockedRect.Pitch; - } - } else if (ddpf.dwZBufferBitDepth <= 8) { - byte bmask = (byte) (ddpf.dwZBitMask & 0xff); - for (int i=dst_yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=dst_xoffset; j < xlimit; j++) { - zmask = (*dst++ & ddpf.dwZBitMask) >> zshift; - mask = *src++; - if (mask < zmask) { - dst--; - if (mask < maxValue) { - *dst++ = (byte) ((mask << zshift) & 0xff); - } else { - *dst++ = bmask; - } - } - } - srcRow -= src_width; - destRow += lockedRect.Pitch; - } - - } - - hr = surf->UnlockRect(); - if (FAILED(hr)) { - printf("Fail to unlock depth surface: %s\n", DXGetErrorString9(hr)); - return; - } - -} - - -// copy data to DirectDraw depth surface from memory -// and reverse the Y axis with Z test D3DCMP_LESS -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, - LPDIRECT3DSURFACE9 surf) -{ - D3DSURFACE_DESC ddsd; - DEPTHPIXELFORMAT ddpf; - D3DLOCKED_RECT lockedRect; - HRESULT hr; - - if (surf == NULL) { - return; - } - - surf->GetDesc(&ddsd); - DWORD width = ddsd.Width; - DWORD height = ddsd.Height; - computeDepthPixelFormat(&ddpf, ddsd.Format); - - - if ((dst_xoffset >= width) || (dst_yoffset >= height)) { - return; - } - - DWORD xlimit = min(dst_xoffset + subWidth, width); - DWORD ylimit = min(dst_yoffset + subHeight, height); - - hr = surf->LockRect(&lockedRect, NULL, 0); - - if (FAILED(hr)) { - if (debug) { - printf("Fail to lock depth surface: %s\n", DXGetErrorString9(hr)); - } - return; - } - jfloat *src; - jfloat *srcRow = data + src_xoffset + - (src_yoffset + subHeight-1)*src_width; - unsigned char *dst; - unsigned char *destRow = ((unsigned char *) lockedRect.pBits) + - dst_xoffset + dst_yoffset*lockedRect.Pitch; - - int zshift = firstBit(ddpf.dwZBitMask); - DWORD mask; - DWORD b1, b2, b3, b4; - DWORD zmask; - int maxValue = ddpf.dwZBitMask >> zshift; - float maxdepth = float(1 << ddpf.dwZBufferBitDepth); - - if ((ddpf.dwZBufferBitDepth <= 32) && - (ddpf.dwZBufferBitDepth > 24)) { - - for (int i=dst_yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=dst_xoffset; j < xlimit; j++) { - b1 = *dst++; - b2 = *dst++; - b3 = *dst++; - b4 = *dst++; - zmask = (b4 << 24) | (b3 << 16) | - (b2 << 8) | b1; - zmask = (zmask & ddpf.dwZBitMask) >> zshift; - mask = DWORD((*src++)*maxdepth); - if (mask < zmask) { - // z depth test pass - if (mask < maxValue) { - mask = mask << zshift; - } else { - mask = ddpf.dwZBitMask; - } - dst -= 4; - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - *dst++ = (byte) ((mask >> 16) & 0xff); - *dst++ = (byte) ((mask >> 24) & 0xff); - } - } - srcRow -= src_width; - destRow += lockedRect.Pitch; - } - } else if ((ddpf.dwZBufferBitDepth <= 24) && - (ddpf.dwZBufferBitDepth > 16)) { - - for (int i=dst_yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=dst_xoffset; j < xlimit; j++) { - b1 = *dst++; - b2 = *dst++; - b3 = *dst++; - zmask = (b3 << 16) | (b2 << 8) | b1; - zmask = (zmask & ddpf.dwZBitMask) >> zshift; - mask = DWORD((*src++)*maxdepth); - if (mask < zmask) { - if (mask < maxValue) { - mask = mask << zshift; - } else { - mask = ddpf.dwZBitMask; - } - dst -= 3; - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - *dst++ = (byte) ((mask >> 16) & 0xff); - } - } - srcRow -= src_width; - destRow += lockedRect.Pitch; - } - } else if ((ddpf.dwZBufferBitDepth <= 16) && - (ddpf.dwZBufferBitDepth > 8)) { - - for (int i=dst_yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=dst_xoffset; j < xlimit; j++) { - b1 = *dst++; - b2 = *dst++; - zmask = (b2 << 8) | b1; - zmask = (zmask & ddpf.dwZBitMask) >> zshift; - mask = DWORD((*src++)*maxdepth); - if (mask < zmask) { - if (mask < maxValue) { - mask = mask << zshift; - } else { - mask = ddpf.dwZBitMask; - } - dst -= 2; - *dst++ = (byte) (mask & 0xff); - *dst++ = (byte) ((mask >> 8) & 0xff); - } - } - srcRow -= src_width; - destRow += lockedRect.Pitch; - } - } else if (ddpf.dwZBufferBitDepth <= 8) { - byte bmask = (byte) (ddpf.dwZBitMask & 0xff); - for (int i=dst_yoffset; i < ylimit; i++) { - src = srcRow; - dst = destRow; - for (int j=dst_xoffset; j < xlimit; j++) { - zmask = (*dst++ & ddpf.dwZBitMask) >> zshift; - mask = DWORD((*src++)*maxdepth); - if (mask < zmask) { - dst--; - if (mask < maxValue) { - *dst++ = (byte) ((mask << zshift) & 0xff); - } else { - *dst++ = bmask; - } - } - } - srcRow -= src_width; - destRow += lockedRect.Pitch; - } - - } - - hr = surf->UnlockRect(); - if (FAILED(hr)) { - printf("Fail to unlock depth surface: %s\n", DXGetErrorString9(hr)); - return; - } - -} - -// copy data to DirectDraw depth surface from memory -// and reverse the Y axis -void copyDepthToSurface(D3dCtx *d3dCtx, - 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, - LPDIRECT3DSURFACE9 surf) -{ - - if (!d3dCtx->zWriteEnable) { - return; - } - - if (!d3dCtx->zEnable) { - copyDepthToSurfaceAlways(dst_xoffset, dst_yoffset, - src_xoffset, src_yoffset, - subWidth, subHeight, - src_width, src_height, - data, surf); - } else { - // Currently ZFUNC must be D3DCMP_LESS - copyDepthToSurfaceCmp(dst_xoffset, dst_yoffset, - src_xoffset, src_yoffset, - subWidth, subHeight, - src_width, src_height, - data, surf); - } -} - - -// copy data to DirectDraw depth surface from memory -// and reverse the Y axis -void copyDepthToSurface(D3dCtx *d3dCtx, - 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, - LPDIRECT3DSURFACE9 surf) -{ - if (!d3dCtx->zWriteEnable) { - return; - } - - if (!d3dCtx->zEnable) { - copyDepthToSurfaceAlways(dst_xoffset, dst_yoffset, - src_xoffset, src_yoffset, - subWidth, subHeight, - src_width, src_height, - data, surf); - } else { - // Currently ZFUNC must be D3DCMP_LESS - copyDepthToSurfaceCmp(dst_xoffset, dst_yoffset, - src_xoffset, src_yoffset, - subWidth, subHeight, - src_width, src_height, - data, surf); - } -} - -void copyDataToVolume(jint imageFormat, - jint textureFormat, - jint xoffset, jint yoffset, - jint zoffset, - jint imgXOffset, jint imgYOffset, - jint imgZOffset, - jint subWidth, jint subHeight, jint subDepth, - jint tilew, jint tileh, - jbyte* data, - LPDIRECT3DVOLUMETEXTURE9 surf, - jint level) -{ - - D3DVOLUME_DESC ddsd; - D3DLOCKED_BOX lockedBox; - PIXELFORMAT ddpf; - HRESULT hr; - UINT i; - - if (surf == NULL) { - return; - } - surf->GetLevelDesc(level, &ddsd); - DWORD width = ddsd.Width; - DWORD height = ddsd.Height; - DWORD depth = ddsd.Depth; - computePixelFormat(&ddpf, ddsd.Format); - - // It is possible when texture is not a power of 2 or - // square only texture is required in hardware. In these - // case the hardware memory buffer may smaller than the - // texture pass in. - - if ((xoffset >= width) || - (yoffset >= height) || - (zoffset >= depth)) { - return; - } - - DWORD xlimit = min(xoffset + subWidth, width); - DWORD ylimit = min(yoffset + subHeight, height); - DWORD zlimit = min(zoffset + subDepth, depth); - - hr = surf->LockBox(level, &lockedBox, NULL, 0); - - - if (FAILED(hr)) { - printf("Fail to lock volume: %s\n", DXGetErrorString9(hr)); - return; - } - - int imgOffset = tilew*(tileh*imgZOffset + imgYOffset) + imgXOffset; - int srcSlicePitch = tilew*tileh; - unsigned char* p = (unsigned char *) lockedBox.pBits + - zoffset*lockedBox.SlicePitch; - - - - switch (imageFormat) { - case IMAGE_FORMAT_BYTE_RGBA : - // This is the one we use when byReference = false - data += (imgOffset << 2); - srcSlicePitch <<= 2; - - for (i = zoffset; i < zlimit; i++) { - copyDataToSurfaceRGBA(textureFormat, &ddpf, - p, - lockedBox.RowPitch, - data, - xoffset, yoffset, - xlimit, ylimit, - tilew); - p += lockedBox.SlicePitch; - data += srcSlicePitch; - } - - break; - case IMAGE_FORMAT_BYTE_RGB: - data += (imgOffset*3); - srcSlicePitch *= 3; - - for (i = zoffset; i < zlimit; i++) { - copyDataToSurfaceRGB(textureFormat, &ddpf, - p, - lockedBox.RowPitch, - data, - xoffset, yoffset, - xlimit, ylimit, - tilew); - p += lockedBox.SlicePitch; - data += srcSlicePitch; - } - break; - case IMAGE_FORMAT_BYTE_ABGR: - data += (imgOffset << 2); - srcSlicePitch <<= 2; - - for (i = zoffset; i < zlimit; i++) { - copyDataToSurfaceABGR(textureFormat, &ddpf, - p, - lockedBox.RowPitch, - data, - xoffset, yoffset, - xlimit, ylimit, - tilew); - p += lockedBox.SlicePitch; - data += srcSlicePitch; - } - break; - case IMAGE_FORMAT_BYTE_BGR: - data += (imgOffset*3); - srcSlicePitch *= 3; - - for (i = zoffset; i < zlimit; i++) { - copyDataToSurfaceBGR(textureFormat, &ddpf, - p, - lockedBox.RowPitch, - data, - xoffset, yoffset, - xlimit, ylimit, - tilew); - p += lockedBox.SlicePitch; - data += srcSlicePitch; - } - break; - case IMAGE_FORMAT_BYTE_LA: - data += (imgOffset << 1); - srcSlicePitch <<= 1; - - for (i = zoffset; i < zlimit; i++) { - copyDataToSurfaceLA(textureFormat, &ddpf, - p, - lockedBox.RowPitch, - data, - xoffset, yoffset, - xlimit, ylimit, - tilew); - p += lockedBox.SlicePitch; - data += srcSlicePitch; - } - break; - case IMAGE_FORMAT_BYTE_GRAY: - data += imgOffset; - - for (i = zoffset; i < zlimit; i++) { - copyDataToSurfaceGray(textureFormat, &ddpf, - p, - lockedBox.RowPitch, - data, - xoffset, yoffset, - xlimit, ylimit, - tilew); - p += lockedBox.SlicePitch; - data += srcSlicePitch; - } - break; - case IMAGE_FORMAT_INT_BGR: - data += (imgOffset << 2); - srcSlicePitch <<= 2; - - for (i = zoffset; i < zlimit; i++) { - copyInt_XBGR_DataToSurface(textureFormat, &ddpf, - p, - lockedBox.RowPitch, - data, - xoffset, yoffset, - xlimit, ylimit, - tilew); - p += lockedBox.SlicePitch; - data += srcSlicePitch; - } - break; - case IMAGE_FORMAT_INT_RGB: - data += (imgOffset << 2); - srcSlicePitch <<= 2; - - for (i = zoffset; i < zlimit; i++) { - copyInt_XRGB_DataToSurface(textureFormat, &ddpf, - p, - lockedBox.RowPitch, - data, - xoffset, yoffset, - xlimit, ylimit, - tilew); - p += lockedBox.SlicePitch; - data += srcSlicePitch; - } - break; - case IMAGE_FORMAT_INT_ARGB: - data += (imgOffset << 2); - srcSlicePitch <<= 2; - - for (i = zoffset; i < zlimit; i++) { - copyInt_ARGB_DataToSurface(textureFormat, &ddpf, - p, - lockedBox.RowPitch, - data, - xoffset, yoffset, - xlimit, ylimit, - tilew); - p += lockedBox.SlicePitch; - data += srcSlicePitch; - } - break; - default: // should not happen - printf("[Java 3D] StoredFormat %d, textureFormat %d not support !\n", - imageFormat, textureFormat); - } - - hr = surf->UnlockBox(level); - if (FAILED(hr)) { - printf("Fail to unlock volume: %s\n", DXGetErrorString9(hr)); - return; - } -} - -VOID createLineModeIndexBuffer(D3dCtx *d3dCtx) -{ - HRESULT hr; - WORD *wptr; - - hr = d3dCtx->pDevice->CreateIndexBuffer(6*sizeof(WORD), - D3DUSAGE_WRITEONLY, - D3DFMT_INDEX16, - D3DPOOL_DEFAULT, - &d3dCtx->lineModeIndexBuffer, - NULL); - if (FAILED(hr)) { - D3dCtx::d3dWarning(CREATEINDEXVBFAIL, hr); - return; - } - - - hr = d3dCtx->lineModeIndexBuffer->Lock(0, 0, (VOID **) &wptr, 0); - if (FAILED(hr)) { - D3dCtx::d3dWarning(LOCKINDEXVBFAIL, hr); - return; - } - - *wptr++ = 0; - *wptr++ = 1; - *wptr++ = 2; - *wptr++ = 3; - *wptr++ = 0; - *wptr = 0; // not used - d3dCtx->lineModeIndexBuffer->Unlock(); -} - -// Return TRUE if index is adjust smaller -BOOL createQuadIndices(D3dCtx *d3dCtx, int vcount) -{ - DWORD dwIndexCount = (vcount*3) >> 1; - WORD *q; - LPDIRECT3DDEVICE9 device = d3dCtx->pDevice; - HRESULT hr; - BOOL adjustIdx = FALSE; - - if (dwIndexCount > d3dCtx->deviceInfo->maxVertexIndex) { - // We'll render the VB multiple times in this case - dwIndexCount = min(d3dCtx->deviceInfo->maxVertexIndex, - (d3dCtx->deviceInfo->maxPrimitiveCount << 1)); - adjustIdx = TRUE; - } - - if (dwIndexCount > d3dCtx->quadIndexBufferSize) { - d3dCtx->freeResource(d3dCtx->quadIndexBuffer); - hr = device->CreateIndexBuffer(dwIndexCount*sizeof(WORD), - D3DUSAGE_WRITEONLY, - D3DFMT_INDEX16, - D3DPOOL_MANAGED, - &d3dCtx->quadIndexBuffer, - NULL); - if (FAILED(hr)) { - printf("[Java3D] Error CREATEINDEXVBFAIL \n"); - D3dCtx::d3dWarning(CREATEINDEXVBFAIL, hr); - d3dCtx->quadIndexBufferSize = 0; - d3dCtx->quadIndexBuffer = NULL; - 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); - } - return adjustIdx; - } - - d3dCtx->quadIndexBufferSize = dwIndexCount; - hr = d3dCtx->quadIndexBuffer->Lock(0, 0, (VOID **) &q, 0); - if (FAILED(hr)) { - D3dCtx::d3dWarning(LOCKINDEXVBFAIL, hr); - if (d3dCtx->quadIndexBufferSize > 0) { - device->SetIndices(NULL); - } - return adjustIdx; - } - int i = -1; - int j = 0; - - 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 - } - - d3dCtx->quadIndexBuffer->Unlock(); - } - - return adjustIdx; -} - - -int getPrimitiveNum(int primitive, int vcount) -{ - switch (primitive) { - case D3DPT_TRIANGLESTRIP: - return vcount-2; - case D3DPT_TRIANGLEFAN: - return vcount-2; - case D3DPT_LINESTRIP: - return vcount - 1; - case D3DPT_LINELIST: - return vcount >> 1; - case D3DPT_TRIANGLELIST: - return vcount/3; - case D3DPT_POINTLIST: - return vcount; - default: // should not happen - printf("[Java 3D] Unknown primitive type %d\n", primitive); - } - return 0; -} - - -/* - * Note that the condition width == height always holds - * when this function is invoked. - */ -LPDIRECT3DCUBETEXTURE9 createCubeMapTexture(D3dCtx *d3dCtx, - jint numLevels, - jint textureFormat, - jint width, - jint height, - jboolean useAutoMipMap) -{ - LPDIRECT3DCUBETEXTURE9 pTexture; - D3DFORMAT format; - HRESULT hr; - DWORD usage = 0; - - LPDIRECT3DDEVICE9 pDevice = d3dCtx->pDevice; - D3dDeviceInfo *deviceInfo = d3dCtx->deviceInfo; - - if (!deviceInfo->supportMipmap) { - numLevels = 1; - } - - getTexWidthHeight(deviceInfo, &width, &height); - format = getTexFormat(textureFormat); - - if (useAutoMipMap) { - usage |= D3DUSAGE_AUTOGENMIPMAP; - } - - // If format not support, the utility function will adjust the - // calling parameters automatically - hr = D3DXCreateCubeTexture(d3dCtx->pDevice, width, - numLevels, usage, format, D3DPOOL_MANAGED, - &pTexture); - - if (FAILED(hr)) { - if (debug) { - printf("Fail to create cube texture surface %dx%d, format %d, level %d : %s\n", - width, height, format, numLevels, DXGetErrorString9(hr)); - } - return NULL; - } - - return pTexture; -} - -void copyDataToCubeMap(jint imageFormat, - jint textureFormat, - jint xoffset, jint yoffset, - jint imgXOffset, jint imgYOffset, - jint subWidth, jint subHeight, - jint tilew, - jbyte* data, - LPDIRECT3DCUBETEXTURE9 surf, - jint level, - jint face) -{ - D3DSURFACE_DESC ddsd; - D3DLOCKED_RECT lockedRect; - PIXELFORMAT ddpf; - HRESULT hr; - - if (surf == NULL) { - return; - } - surf->GetLevelDesc(level, &ddsd); - DWORD width = ddsd.Width; - DWORD height = ddsd.Height; - computePixelFormat(&ddpf, ddsd.Format); - - // It is possible when texture is not a power of 2 or - // square only texture is required in hardware. In these - // case the hardware memory buffer may smaller than the - // texture pass in. - - if ((xoffset >= width) || (yoffset >= height)) { - return; - } - - DWORD xlimit = min(xoffset + subWidth, width); - DWORD ylimit = min(yoffset + subHeight, height); - - hr = surf->LockRect(textureCubeMapFace[face], - level, &lockedRect, NULL, 0); - - - if (FAILED(hr)) { - printf("Fail to lock surface: %s\n", DXGetErrorString9(hr)); - return; - } - int offset = tilew*imgYOffset + imgXOffset; - - switch (imageFormat) { - case IMAGE_FORMAT_BYTE_RGBA : - // 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 - // left to right in this case to match OGL definition - copyDataToSurfaceRGBA(textureFormat, &ddpf, - (unsigned char *) lockedRect.pBits, - lockedRect.Pitch, - data + - ((offset + tilew*(ylimit-yoffset-1)) << 2), - xoffset, yoffset, - xlimit, ylimit, -tilew); - } else { - // Copy the pixel from up to bottom and - // right to left in this case to match OGL definition - copyDataToSurfaceRGBARev(textureFormat, &ddpf, - (unsigned char *) lockedRect.pBits, - lockedRect.Pitch, - data + (offset << 2), - xoffset, yoffset, - xlimit, ylimit, tilew); - } - break; - case IMAGE_FORMAT_BYTE_RGB: - if ((face == D3DCUBEMAP_FACE_NEGATIVE_Y) || - (face == D3DCUBEMAP_FACE_POSITIVE_Y)) { - copyDataToSurfaceRGB(textureFormat, &ddpf, - (unsigned char *) lockedRect.pBits, - lockedRect.Pitch, - data + - 3*(offset + tilew*(ylimit-yoffset-1)), - xoffset, yoffset, - xlimit, ylimit, -tilew); - } else { - copyDataToSurfaceRGBRev(textureFormat, &ddpf, - (unsigned char *) lockedRect.pBits, - lockedRect.Pitch, - data + 3*offset, - xoffset, yoffset, - xlimit, ylimit, tilew); - } - break; - case IMAGE_FORMAT_BYTE_ABGR: - if ((face == D3DCUBEMAP_FACE_NEGATIVE_Y) || - (face == D3DCUBEMAP_FACE_POSITIVE_Y)) { - copyDataToSurfaceABGR(textureFormat, &ddpf, - (unsigned char *) lockedRect.pBits, - lockedRect.Pitch, - data + - ((offset+tilew*(ylimit-yoffset-1)) << 2), - xoffset, yoffset, - xlimit, ylimit, -tilew); - } else { - copyDataToSurfaceABGRRev(textureFormat, &ddpf, - (unsigned char *) lockedRect.pBits, - lockedRect.Pitch, - data + (offset << 2), - xoffset, yoffset, - xlimit, ylimit, tilew); - } - break; - case IMAGE_FORMAT_BYTE_BGR: - if ((face == D3DCUBEMAP_FACE_NEGATIVE_Y) || - (face == D3DCUBEMAP_FACE_POSITIVE_Y)) { - copyDataToSurfaceBGR(textureFormat, &ddpf, - (unsigned char *) lockedRect.pBits, - lockedRect.Pitch, - data + - 3*(offset + tilew*(ylimit-yoffset-1)), - xoffset, yoffset, - xlimit, ylimit, -tilew); - } else { - copyDataToSurfaceBGRRev(textureFormat, &ddpf, - (unsigned char *) lockedRect.pBits, - lockedRect.Pitch, - data + 3*offset, - xoffset, yoffset, - xlimit, ylimit, tilew); - } - break; - case IMAGE_FORMAT_BYTE_LA: - if ((face == D3DCUBEMAP_FACE_NEGATIVE_Y) || - (face == D3DCUBEMAP_FACE_POSITIVE_Y)) { - copyDataToSurfaceLA(textureFormat, &ddpf, - (unsigned char *) lockedRect.pBits, - lockedRect.Pitch, - data + - ((offset+tilew*(ylimit-yoffset-1)) << 1), - xoffset, yoffset, - xlimit, ylimit, -tilew); - } else { - copyDataToSurfaceLARev(textureFormat, &ddpf, - (unsigned char *) lockedRect.pBits, - lockedRect.Pitch, - data + (offset << 1), - xoffset, yoffset, - xlimit, ylimit, tilew); - } - break; - case IMAGE_FORMAT_BYTE_GRAY: - if ((face == D3DCUBEMAP_FACE_NEGATIVE_Y) || - (face == D3DCUBEMAP_FACE_POSITIVE_Y)) { - copyDataToSurfaceGray(textureFormat, &ddpf, - (unsigned char *) lockedRect.pBits, - lockedRect.Pitch, - data + - offset + tilew*(ylimit-yoffset-1), - xoffset, yoffset, - xlimit, ylimit, -tilew); - } else { - copyDataToSurfaceGrayRev(textureFormat, &ddpf, - (unsigned char *) lockedRect.pBits, - lockedRect.Pitch, - data + offset, - xoffset, yoffset, - xlimit, ylimit, tilew); - } - break; - case IMAGE_FORMAT_INT_BGR : - printf("[Java 3D] Cubemap doesn't support FORMAT_INT_BGR, \n"); - printf("please see issue 377 : https://java3d.dev.java.net/issues/show_bug.cgi?id=377\n"); - printf("For more information on reporting Java 3D related issue : https://java3d.dev.java.net/#Reporting_Issue \n"); - // 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 - // left to right in this case to match OGL definition - copyInt_XBGR_DataToSurface(textureFormat, &ddpf, - (unsigned char *) lockedRect.pBits, - lockedRect.Pitch, - data + - ((offset + tilew*(ylimit-yoffset-1)) << 2), - xoffset, yoffset, - xlimit, ylimit, -tilew); - } else { - // Copy the pixel from up to bottom and - // right to left in this case to match OGL definition - printf("[copyDataToCubeMap] copyInt_BGR_DataToSurfaceRev is unsupported!\n"); - /* - copyInt_XBGR_DataToSurfaceRev(textureFormat, &ddpf, - (unsigned char *) lockedRect.pBits, - lockedRect.Pitch, - data + (offset << 2), - xoffset, yoffset, - xlimit, ylimit, tilew); - */ - } - break; - case IMAGE_FORMAT_INT_RGB : - printf("[Java 3D] Cubemap doesn't support FORMAT_INT_RGB!\n"); - printf("please see issue 377 : https://java3d.dev.java.net/issues/show_bug.cgi?id=377\n"); - printf("For more information on reporting Java 3D related issue : https://java3d.dev.java.net/#Reporting_Issue \n"); - - // 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 - // left to right in this case to match OGL definition - copyInt_XRGB_DataToSurface(textureFormat, &ddpf, - (unsigned char *) lockedRect.pBits, - lockedRect.Pitch, - data + - ((offset + tilew*(ylimit-yoffset-1)) << 2), - xoffset, yoffset, - xlimit, ylimit, -tilew); - } else { - // Copy the pixel from up to bottom and - // right to left in this case to match OGL definition - printf("[copyDataToCubeMap] copyInt_XRGB_DataToSurfaceRev is unsupported!\n"); - - /* - copyInt_XRGB_DataToSurfaceRev(textureFormat, &ddpf, - (unsigned char *) lockedRect.pBits, - lockedRect.Pitch, - data + (offset << 2), - xoffset, yoffset, - xlimit, ylimit, tilew); - */ - } - break; - case IMAGE_FORMAT_INT_ARGB : - printf("[Java 3D] Cubemap doesn't support FORMAT_INT_ARGB!\n"); - printf("please see issue 377 : https://java3d.dev.java.net/issues/show_bug.cgi?id=377\n"); - printf("For more information on reporting Java 3D related issue : https://java3d.dev.java.net/#Reporting_Issue \n"); - - // 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 - // left to right in this case to match OGL definition - copyInt_ARGB_DataToSurface(textureFormat, &ddpf, - (unsigned char *) lockedRect.pBits, - lockedRect.Pitch, - data + - ((offset + tilew*(ylimit-yoffset-1)) << 2), - xoffset, yoffset, - xlimit, ylimit, -tilew); - } else { - // Copy the pixel from up to bottom and - // right to left in this case to match OGL definition - printf("[copyDataToCubeMap] copyInt_ARGB_DataToSurfaceRev is unsupported!\n"); - - /* - copyInt_ARGB_DataToSurfaceRev(textureFormat, &ddpf, - (unsigned char *) lockedRect.pBits, - lockedRect.Pitch, - data + (offset << 2), - xoffset, yoffset, - xlimit, ylimit, tilew); - */ - } - break; - default: // should not happen - printf("[Java 3D] imageFormat %d, textureFormat %d not support !\n", - imageFormat, textureFormat); - } - - hr = surf->UnlockRect(textureCubeMapFace[face], level); - if (FAILED(hr)) { - printf("Fail to unlock surface: %s\n", DXGetErrorString9(hr)); - return; - } -} - - -void drawTextureRect(D3dCtx *d3dCtx, - LPDIRECT3DDEVICE9 device, - LPDIRECT3DTEXTURE9 surf, - D3DTLVERTEX screenCoord, - int startx, int starty, - int endx, int endy, - int scaleWidth, int scaleHeight, - boolean texModeRepeat) -{ - 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, (LPDIRECT3DBASETEXTURE9 *) &texture); - - device->GetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, - &transflag); - if (transflag != D3DTTFF_DISABLE) { - device->GetTransform(D3DTS_TEXTURE0, &m); - } - //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)) { - // 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_TEXCOORDINDEX, 0); - device->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE); - - device->GetTextureStageState(0, D3DTSS_COLOROP, &colorOp); - device->GetTextureStageState(0, D3DTSS_COLORARG1, &colorArg); - device->GetTextureStageState(0, D3DTSS_ALPHAOP, &alphaOp); - device->GetTextureStageState(0, D3DTSS_ALPHAARG1, &alphaArg); - - device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1); - device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE); - device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1); - device->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE); - if (d3dCtx->fillMode != D3DFILL_SOLID) { - device->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID); - } - - D3DSURFACE_DESC ddsd; - surf->GetLevelDesc(0, &ddsd); - - - float tumax; - float tvmax; - float tumin = startx/(float) ddsd.Width; - float tvmin = starty/(float) ddsd.Height; - boolean multipleDraw; - - if (texModeRepeat) { - if ((w == ddsd.Width) && (h == ddsd.Height)) { - // width & height match texture, so there is - // no need to draw multiple time - tumax = scaleWidth/(float) ddsd.Width; - tvmax = scaleHeight/(float) ddsd.Height; - 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; - tvmax = endy/(float) ddsd.Height; - multipleDraw = true; - } - } else { - tumax = endx/(float) ddsd.Width; - tvmax = endy/(float) ddsd.Height; - multipleDraw = false; - } - - - d3dCtx->rasterRect[0].tu = tumin; - 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[3].tv = tvmin; - - d3dCtx->rasterRect[0].sx = screenCoord.sx; - d3dCtx->rasterRect[0].sz = screenCoord.sz; - d3dCtx->rasterRect[0].rhw = screenCoord.rhw; - - d3dCtx->rasterRect[1].sx = screenCoord.sx; - d3dCtx->rasterRect[1].sy = screenCoord.sy; - d3dCtx->rasterRect[1].sz = screenCoord.sz; - d3dCtx->rasterRect[1].rhw = screenCoord.rhw; - - d3dCtx->rasterRect[2].sz = screenCoord.sz; - d3dCtx->rasterRect[2].rhw = screenCoord.rhw; - - d3dCtx->rasterRect[3].sy = screenCoord.sy; - d3dCtx->rasterRect[3].sz = screenCoord.sz; - d3dCtx->rasterRect[3].rhw = screenCoord.rhw; - - if ((h > 0) && (w > 0)) { - //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; - d3dCtx->rasterRect[2].sy = screenCoord.sy + scaleHeight; - d3dCtx->rasterRect[3].sx = screenCoord.sx + scaleWidth; - device->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, - 2, - d3dCtx->rasterRect, - sizeof(D3DTLVERTEX)); - } else { - d3dCtx->rasterRect[0].sy = screenCoord.sy + h; - d3dCtx->rasterRect[2].sx = screenCoord.sx + w; - d3dCtx->rasterRect[2].sy = screenCoord.sy + h; - d3dCtx->rasterRect[3].sx = screenCoord.sx + w; - for (int i=0; i < ceil(scaleHeight/((double) h)); i++) { - for (int j=0; j < ceil(scaleWidth/((double) w)); j++) { - device->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, - 2, - d3dCtx->rasterRect, - sizeof(D3DTLVERTEX)); - d3dCtx->rasterRect[0].sx += w; - d3dCtx->rasterRect[1].sx += w; - d3dCtx->rasterRect[2].sx += w; - d3dCtx->rasterRect[3].sx += w; - } - d3dCtx->rasterRect[0].sx = screenCoord.sx; - d3dCtx->rasterRect[1].sx = screenCoord.sx; - d3dCtx->rasterRect[2].sx = screenCoord.sx + w; - d3dCtx->rasterRect[3].sx = screenCoord.sx + w; - d3dCtx->rasterRect[0].sy += h; - d3dCtx->rasterRect[1].sy += h; - d3dCtx->rasterRect[2].sy += h; - d3dCtx->rasterRect[3].sy += h; - } - - } - } - - // restore original texture stage values - if (texture != NULL) { - device->SetTexture(0, texture); - texture->Release(); - } else { - device->SetTexture(0, NULL); - } - - device->SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, - transflag); - if (transflag != D3DTTFF_DISABLE) { - device->SetTransform(D3DTS_TEXTURE0, &m); - } - 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_TEXCOORDINDEX, texcoordstate); - - device->SetTextureStageState(0, D3DTSS_COLOROP, colorOp); - device->SetTextureStageState(0, D3DTSS_COLORARG1, colorArg); - device->SetTextureStageState(0, D3DTSS_ALPHAOP, alphaOp); - device->SetTextureStageState(0, D3DTSS_ALPHAARG1, alphaArg); - - if (texModeRepeat && !multipleDraw) { - 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 deleted file mode 100644 index 60d2d59..0000000 --- a/src/native/d3d/D3dUtil.hpp +++ /dev/null @@ -1,327 +0,0 @@ -/* - * $RCSfile$ - * - * Copyright 2000-2008 Sun Microsystems, Inc. All Rights Reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * $Revision$ - * $Date$ - * $State$ - */ - -#if !defined(D3DUTIL_H) -#define D3DUTIL_H - -#include "StdAfx.h" - - -// Index to D3dErrorMessage -#define DRIVERNOTFOUND 0 -#define CANNOTRENDERWINDOW 1 -#define D3DNOTFOUND 2 -#define CARDNOTSUPPORT 3 -#define NEEDSWITCHMODE 4 -#define DEVICENOTFOUND 5 -#define CREATEDEVICEFAIL 6 -#define CREATEREFDEVICEFAIL 7 -#define VIEWPORTFAIL 8 -#define GETBACKBUFFERFAIL 9 -#define COLORMODENOTSUPPORT 10 -#define OUTOFMEMORY 11 -#define UNKNOWNDEVICE 12 -#define HALDEVICENOTFOUND 13 -#define TNLHALDEVICENOTFOUND 14 -#define NOSTENCILBUFFER 15 -#define NOTEXTUREMEMORY 16 -#define OFFSCREENCREATEFAIL 17 -#define CREATEVERTEXBUFFER 18 -#define RESETFAIL 19 -#define HALNOTCOMPATIBLE 20 -#define DEPTHSTENCILNOTFOUND 21 -#define LOCKVBFAIL 22 -#define CREATEVBFAIL 23 -#define CREATEINDEXVBFAIL 24 -#define LOCKINDEXVBFAIL 25 -#define NOHARDWAREACCEL 26 -#define PLEASEUPDATEDRIVERS 27 - -#define PI 3.14159265f - -// Same definition as in ImageComponent2DRetained -#define CLEAN 0 -#define MODIFY 1 -#define NOTLIVE 2 - -// If we want to synchrinized draw primitive, change the -// following to D3DDP_WAIT -#define DEFAULTMODE 0 - -#define D3D_STEREO 1 - - -// Macro -#define SafeRelease(p) if(p) {p->Release(); p = NULL;} -#define SafeDelete(p) if(p) { delete p; p = NULL;} -#define SafeFree(p) if(p) { free(p); p = NULL;} - -#define GetCtx() \ - if (ctx == 0) return; \ - D3dCtx *d3dCtx = reinterpret_cast<D3dCtx*>(ctx); \ - - -#define GetDevice() \ - GetCtx() \ - LPDIRECT3DDEVICE9 device = d3dCtx->pDevice; \ - if (device == NULL) return; - -#define GetCtx2() \ - if (ctx == 0) return 0;\ - D3dCtx *d3dCtx = reinterpret_cast<D3dCtx*>(ctx); \ - - -#define GetDevice2() \ - GetCtx2(); \ - LPDIRECT3DDEVICE9 device = d3dCtx->pDevice; \ - if (device == NULL) return 0; - -#define CopyColor(c, red, green, blue, alpha) \ - (c).a = alpha; (c).r = red; (c).g = green; (c).b = blue; - - -#define CopyTranspose(m, s) { \ - (m)._11 = (s)[0]; (m)._12 = (s)[4]; (m)._13 = (s)[8]; (m)._14 = (s)[12]; \ - (m)._21 = (s)[1]; (m)._22 = (s)[5]; (m)._23 = (s)[9]; (m)._24 = (s)[13]; \ - (m)._31 = (s)[2]; (m)._32 = (s)[6]; (m)._33 = (s)[10]; (m)._34 = (s)[14]; \ - (m)._41 = (s)[3]; (m)._42 = (s)[7]; (m)._43 = (s)[11]; (m)._44 = (s)[15]; } - -// Note that v should not be one of the reference in m -#define MultiplyScaler(m, v) { \ - (m)._11 *= v; (m)._12 *= v; (m)._13 *= v; (m)._14 *= v; \ - (m)._21 *= v; (m)._22 *= v; (m)._23 *= v; (m)._24 *= v; \ - (m)._31 *= v; (m)._32 *= v; (m)._33 *= v; (m)._34 *= v; \ - (m)._41 *= v; (m)._42 *= v; (m)._43 *= v; (m)._44 *= v; } - -#define Clamp(c) \ - if (c > 1.0f) { \ - c = 1.0f; \ - } else if (c < 0.0f) { \ - c = 0.0f; \ - } - -#define Magitude(x, y, z, w) sqrt((x)*(x) + (y)*(y) + (z)*(z) + (w)*(w)); - -#define NORMALIZE(x, y, z, w) { \ - float d; \ - d = Magitude(x, y, z, w); \ - (x) /= d; (y) /= d; (z) /= d; (w) /= d; } - -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; - -// use for VertexBuffer -extern OSVERSIONINFO osvi; // OS info - -extern D3dCtx* findCtx(HWND hwnd); -extern VOID lock(); -extern VOID unlock(); -extern VOID lockGeometry(); -extern VOID unlockGeometry(); -extern VOID lockSurfaceList(); -extern VOID unlockSurfaceList(); -extern VOID freeSurface(LPDIRECT3DBASETEXTURE9 surf); -extern VOID freePointer(void* surf); -extern VOID freePointerList(); -extern char* getErrorMessage(int idx); -extern HWND getTopWindow(HWND hwnd); - -extern LPDIRECT3DTEXTURE9 createTextureSurface(D3dCtx *d3dCtx, - jint numLevels, - jint internalFormat, - jint width, - jint height, - jboolean useAutoMipMap); - - -extern LPDIRECT3DVOLUMETEXTURE9 createVolumeTexture(D3dCtx *d3dCtx, - jint numLevels, - jint internalFormat, - jint width, - jint height, - jint depth, - jboolean useAutoMipMap); - - -extern LPDIRECT3DCUBETEXTURE9 createCubeMapTexture(D3dCtx *d3dCtx, - jint numLevels, - jint internalFormat, - jint width, - jint height, - jboolean useAutoMipMap); - - -extern void copyDataToSurface(jint format, - jint internalFormat, - jint xoffset, jint yoffset, - jint imgXOffset, jint imgYOffset, - jint width, jint height, jint tilew, - jshort *data, LPDIRECT3DTEXTURE9 surf, - jint level); - -extern void copyDataToSurface(jint format, - jint internalFormat, - jint xoffset, jint yoffset, - jint imgXOffset, jint imgYOffset, - jint width, jint height, jint tilew, - jbyte* data, - LPDIRECT3DTEXTURE9 surf, - jint level); - -extern void copyDataToVolume(jint format, - jint internalFormat, - jint xoffset, jint yoffset, - jint zoffset, - jint imgXOffset, jint imgYOffset, - jint imgZOffset, - jint width, jint height, jint depth, - jint tilew, jint tileh, - jshort *data, LPDIRECT3DVOLUMETEXTURE9 surf, - jint level); - - -extern void copyDataToVolume(jint format, - jint internalFormat, - jint xoffset, jint yoffset, - jint zoffset, - jint imgXOffset, jint imgYOffset, - jint imgZOffset, - jint width, jint height, jint depth, - jint tilew, jint tileh, - jbyte* data, - LPDIRECT3DVOLUMETEXTURE9 surf, - jint level); - -extern void copyDataToCubeMap(jint format, - jint internalFormat, - jint xoffset, jint yoffset, - jint imgXOffset, jint imgYOffset, - jint width, jint height, - jint tilew, - jshort *data, LPDIRECT3DCUBETEXTURE9 surf, - jint level, - jint face); - - -extern void copyDataToCubeMap(jint format, - jint internalFormat, - jint xoffset, jint yoffset, - jint imgXOffset, jint imgYOffset, - jint width, jint height, - jint tilew, - jbyte* data, - LPDIRECT3DCUBETEXTURE9 surf, - jint level, - jint face); - - -extern void copyDepthFromSurface(jint xoffset, jint yoffset, - jint subWidth, jint subHeight, - jint *data, - LPDIRECT3DSURFACE9 surf); - -extern void copyDepthFromSurface(jint xoffset, jint yoffset, - jint subWidth, jint subHeight, - jfloat *data, - LPDIRECT3DSURFACE9 surf); - -extern void copyDepthToSurface(D3dCtx *d3dCtx, - 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, - LPDIRECT3DSURFACE9 surf); - -extern void copyDepthToSurface(D3dCtx *d3dCtx, - 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, - LPDIRECT3DSURFACE9 surf); - -extern void copyDataFromSurface(jint internalFormat, - jint xoffset, jint yoffset, - jint width, jint height, - jbyte *data, LPDIRECT3DSURFACE9 surf); - -void compositeDataToSurface(jint px, jint py, - jint xoffset, jint yoffset, - jint subWidth, jint subHeight, - jint dataWidth, - jbyte *data, - LPDIRECT3DSURFACE9 surf); - -// extern BOOL isIdentity(jdouble *matrix); - -extern void CopyTextureStage(LPDIRECT3DDEVICE9 device, - int fromLevel, int toLevel); - -extern "C" -DWORD countBits(DWORD mask); // Define in MasterControl.c - -extern void throwAssert(JNIEnv *env, char *str); -extern BOOL createQuadIndices(D3dCtx *d3dCtx, int vcount); -extern VOID createLineModeIndexBuffer(D3dCtx *d3dCtx); -extern char *getPixelFormatName(D3DFORMAT format); -extern char *getMultiSampleName(D3DMULTISAMPLE_TYPE mtype); -extern char *getSwapEffectName(D3DSWAPEFFECT swapEffect); -extern int getPrimitiveNum(int primitive, int vcount); -extern int getMaxNumVertex(int primitive, int vcount); -extern void drawTextureRect(D3dCtx *d3dCtx, - 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, - LPDIRECT3DDEVICE9 device, - int mapTexStage, - jint texStage); -extern void setTexTransformStageFlag(D3dCtx* d3dCtx, - 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 deleted file mode 100644 index 993d965..0000000 --- a/src/native/d3d/D3dVertexBuffer.cpp +++ /dev/null @@ -1,283 +0,0 @@ -/* - * $RCSfile$ - * - * Copyright 2000-2008 Sun Microsystems, Inc. All Rights Reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * $Revision$ - * $Date$ - * $State$ - */ - -#include "StdAfx.h" -#include "D3dVertexBuffer.hpp" - - -D3dVertexBuffer::D3dVertexBuffer() -{ - buffer = NULL; - indexBuffer = NULL; - numVertices = NULL; - numVerticesLen = 0; - isIndexPrimitive = FALSE; - nextVB = NULL; - stripLen = 0; - totalVertexCount = 0; - ctx = NULL; - next = NULL; - previous = NULL; - isPointFlagUsed = FALSE; - primitiveType = D3DPT_FORCE_DWORD; -} - -D3dVertexBuffer::~D3dVertexBuffer() -{ - release(); -} - -VOID D3dVertexBuffer::release() -{ - SafeRelease(buffer); - SafeRelease(indexBuffer); - SafeDelete(numVertices); - - numVerticesLen = 0; - isIndexPrimitive = FALSE; - isPointFlagUsed = FALSE; - stripLen = 0; - totalVertexCount = 0; - // recursively free the list - SafeDelete(nextVB); -} - - - -VOID D3dVertexBuffer::render(D3dCtx *d3dCtx) -{ - D3DPRIMITIVETYPE oldPrimitiveType; - BOOL renderPoint = false; - BOOL restorePointSize = false; - float oldPointSize = 1.0f; - - if ((buffer != NULL) && (numVertices != NULL)) { - // device is already check for NULL in callDisplayList - LPDIRECT3DDEVICE9 device = d3dCtx->pDevice; - BOOL setAmbientLight = false; - - if (((vertexFormat & D3DFVF_DIFFUSE) == 0) && - (!d3dCtx->isLightEnable)) { - setAmbientLight = true; - if (totalVertexCount > 0) { - // This is the first Node in the list - d3dCtx->setAmbientLightMaterial(); - } - } - - if ((d3dCtx->pointSize > 1) && - ((d3dCtx->fillMode == D3DFILL_POINT) || - (primitiveType == D3DPT_POINTLIST))) { - // Some driver may cull the point away if not - // set to CULL_NONE - if (!isPointFlagUsed) { - // restore point size to 1 - if (debug) { - printf("VB render with pointSize %d without D3DPOINT flag set\n", d3dCtx->pointSize); - } - device->SetRenderState(D3DRS_POINTSIZE, *((LPDWORD) - &oldPointSize)); - restorePointSize = true; - } else { - device->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE); - // workaround for driver bug, otherwise you will - // see four corner points instead of one big point - // if fill mode is POINT - device->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID); - if (d3dCtx->deviceInfo->maxPointSize < d3dCtx->pointSize) { - // Use software vertex processing mode - //device->SetRenderState(D3DRS_SOFTWAREVERTEXPROCESSING, TRUE); - device->SetSoftwareVertexProcessing(TRUE); - } - - oldPrimitiveType = primitiveType; - // For Polygon D3DFill_POINT mode we need to - // temporary switch primitive to point list - primitiveType = D3DPT_POINTLIST; - renderPoint = true; - } - } - - device->SetStreamSource(0, buffer,0, stride); - //device->SetVertexShader(vertexFormat); - device->SetVertexShader(NULL); - device->SetFVF(vertexFormat); - - int startIdx=0; - int vc, i; - - if (!isIndexPrimitive || - ((indexBuffer == NULL) && renderPoint)) { - for (i = 0; i < stripLen; i++) { - vc = numVertices[i]; - device->DrawPrimitive(primitiveType, - startIdx, - getPrimitiveNum(primitiveType,vc)); - startIdx += vc; - } - } else { - if (indexBuffer != NULL) { - device->SetIndices(indexBuffer); - for (i = 0; i < stripLen; i++) { - vc = numVertices[i]; - device->DrawIndexedPrimitive(primitiveType,0, - 0, - vcount, - startIdx, - getPrimitiveNum(primitiveType, vc)); - startIdx += vc; - } - } else { - if (d3dCtx->quadIndexBufferSize > 0) { - // Index is successfully set - device->SetIndices(d3dCtx->quadIndexBuffer); - device->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0, - 0, - numVertices[0], - 0, - numVertices[0] >> 1); - } - // Otherwise not enough memory when index buffer - // is created, so draw nothing. - } - } - - if (setAmbientLight && (nextVB == NULL)) { - // This is the last Node in the list - d3dCtx->restoreDefaultLightMaterial(); - } - - if (renderPoint) { - device->SetRenderState(D3DRS_CULLMODE, d3dCtx->cullMode); - device->SetRenderState(D3DRS_FILLMODE, d3dCtx->fillMode); - /** device->SetRenderState(D3DRS_SOFTWAREVERTEXPROCESSING, - d3dCtx->softwareVertexProcessing); - **/ - device->SetSoftwareVertexProcessing(d3dCtx->softwareVertexProcessing); - primitiveType = oldPrimitiveType; - } else if (restorePointSize) { - device->SetRenderState(D3DRS_POINTSIZE, - *((LPDWORD) &d3dCtx->pointSize)); - } - } - - if (nextVB != NULL) { - nextVB->render(d3dCtx); - } -} - - -VOID D3dVertexBuffer::addStride(int len) -{ - if (numVerticesLen <= stripLen) { - if (numVerticesLen == 0) { - numVertices = new USHORT[1]; - if (numVertices == NULL) { - D3dCtx::d3dWarning(OUTOFMEMORY); - return; - } - numVerticesLen = 1; - } else { - int size = numVerticesLen << 1; - USHORT *p = new USHORT[size]; - if (p == NULL) { - D3dCtx::d3dWarning(OUTOFMEMORY); - return; - } - CopyMemory(p, numVertices, numVerticesLen*sizeof(USHORT)); - delete numVertices; - numVertices = p; - numVerticesLen = size; - } - } - numVertices[stripLen++] = len; -} - - -/* - * This is used by Strip GeometryArray - * Replace all previously define stripLen by this one. - */ -VOID D3dVertexBuffer::addStrides(jint len, jint* strips) -{ - int i = len; - - if (numVerticesLen < len) { - if (numVertices) { - delete numVertices; - } - numVertices = new USHORT[len]; - numVerticesLen = len; - } - - USHORT *q = numVertices; - - while (--i >= 0) { - *q++ = *strips++; - } - stripLen = len; -} - - -/* - * This is used by D3dDisplayList optimize() - * Append this one to the current strip define. - */ -VOID D3dVertexBuffer::appendStrides(jint len, USHORT* strips) -{ - int i; - USHORT *oldVertices; - - if (numVerticesLen < stripLen + len) { - oldVertices = numVertices; - numVertices = new USHORT[len + stripLen]; - numVerticesLen = len + stripLen; - } - - USHORT *q = numVertices; - USHORT *p = oldVertices; - - if (oldVertices != NULL) { - i = stripLen; - while (--i >= 0) { - *q++ = *p++; - } - delete oldVertices; - } - - i = len; - while (--i >= 0) { - *q++ = *strips++; - } - - stripLen = numVerticesLen; -} - diff --git a/src/native/d3d/D3dVertexBuffer.hpp b/src/native/d3d/D3dVertexBuffer.hpp deleted file mode 100644 index 01ad8d6..0000000 --- a/src/native/d3d/D3dVertexBuffer.hpp +++ /dev/null @@ -1,153 +0,0 @@ -/* - * $RCSfile$ - * - * Copyright 2000-2008 Sun Microsystems, Inc. All Rights Reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * $Revision$ - * $Date$ - * $State$ - */ - -#if !defined(D3DVERTEXBUFFER_H) -#define D3DVERTEXBUFFER_H - -#include "StdAfx.h" - -class D3dCtx; - -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 - LPDIRECT3DVERTEXBUFFER9 buffer; - - // Indexed buffer for rendering IndexedGeometry - LPDIRECT3DINDEXBUFFER9 indexBuffer; - - // D3D type of this Vertex Buffer - D3DPRIMITIVETYPE primitiveType; - - // Length of following numVertices array allocate - UINT numVerticesLen; - - // Store the number of vertices for each strip - USHORT *numVertices; - - // It true when QuadArray is used or - // indexGeometry is used. - BOOL isIndexPrimitive; - - // If D3DUSAGE_POINTS flag is used to - // create this VertexBuffer - BOOL isPointFlagUsed; - - // Flexible vertex format for this VB - DWORD vertexFormat; - - // Stride of each vertex in the buffer - // 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] - UINT stripLen; - - // Point to next overflow VB when size > VB limit - LPD3DVERTEXBUFFER nextVB; - - // content that this buffer belongs, only the first node set this one. - D3dCtx *ctx; - - // vcount is the number of vertex that this buffer - // can hold. vcount*stride is always equal to - // current VB size - UINT vcount; - - // indexCount is the number of index that this buffer - // can hold. indexCount*indexSize is always equal to - // current index VB size. - UINT indexCount; - - // Vertex count of all VBs link by nextVB, - // only the first node need to remember this info. - // The other overflow buffer always set it to zero. - DWORD totalVertexCount; - - // Same as above, except for indexBuffer - DWORD totalIndexCount; - - // This is a list of VB remember by D3dCtx - // so that it can release() all surface when canvas resize - // Only the header D3dVertexBuffer contains non-null entry - LPD3DVERTEXBUFFER next; - LPD3DVERTEXBUFFER previous; - - // Pointer back to the GeometryArrayRetained pVertexBuffers - // This is used to remove itself from pVertexBuffers table - // when ctx destroy - D3dVertexBufferVector* vbVector; - - // Last texture coordinate position = - // (i) textureCoordSetMap[pass] if executeVA() - // (ii) texCoordSetMapOffset[pass] if execute() or buildGA() - // (iii) TEX_EYE_LINEAR/TEX_SPHERE_MAP/TEX_OBJ_LINEAR/TEX_REFLECT_MAP - // if automatic texture generation is used - // This is used for VertexBuffer to know whether Texture - // coordinate need to copy or not in case texture unit swap - // or texture unit change from automatic texture generation - // to use coordinate index specifies by user. - int texCoordPosition[D3DDP_MAXTEXCOORD]; - - // Max vertex limit allow for this primitive type - // This is used for display list optimization without - // recompute it again. - int maxVertexLimit; - - D3dVertexBuffer(); - ~D3dVertexBuffer(); - - VOID release(); - VOID render(D3dCtx *d3dCtx); - BOOL initializeNumVertices(int len); - VOID addStride(int len); - VOID addStrides(jint stripLen, jint *strips); - VOID appendStrides(jint stripLen, USHORT *strips); -}; - - -#endif diff --git a/src/native/d3d/GeometryArrayRetained.cpp b/src/native/d3d/GeometryArrayRetained.cpp deleted file mode 100644 index 3e6548d..0000000 --- a/src/native/d3d/GeometryArrayRetained.cpp +++ /dev/null @@ -1,5190 +0,0 @@ -/* - * $RCSfile$ - * - * Copyright 2000-2008 Sun Microsystems, Inc. All Rights Reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * $Revision$ - * $Date$ - * $State$ - */ - -#include "StdAfx.h" - - -//#define VBDEBUG -//#define TEXDEBUG - -#define getVertexFormat(texSize) \ - (((texSize) << D3DFVF_TEXCOUNT_SHIFT) & D3DFVF_TEXCOUNT_MASK) - -/* - * 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 - * D3DFVF_TEXTUREFORMAT4 2 - */ -CONST static DWORD TexFormatSizeTable[5] = {0, 3, 0, 1, 2}; -static float defaultTexCoord[4] = {0, 0, 0, 0}; - -typedef struct _D3DDRAWPRIMITIVESTRIDEDDATA -{ - DWORD positionStride; - jfloat *fpositionPtr; - jdouble *dpositionPtr; - DWORD normalStride; - jfloat *normalPtr; - DWORD diffuseStride; - jfloat *fdiffusePtr; - jbyte *bdiffusePtr; - jint *indexPtr; - jint initialIndexIndex; - DWORD textureCoordsStride[D3DDP_MAXTEXCOORD]; - jfloat* textureCoordsPtr[D3DDP_MAXTEXCOORD]; - jint texCoordPosition[D3DDP_MAXTEXCOORD]; - boolean useAlpha; - boolean modulateAlpha; - jfloat alpha; -} D3DDRAWPRIMITIVESTRIDEDDATA, *LPD3DDRAWPRIMITIVESTRIDEDDATA; - - -void copyIndexVertexToVB(D3dCtx *d3dCtx, - D3DDRAWPRIMITIVESTRIDEDDATA* strideData, - DWORD indexCount, - jint cDirty, - BOOL insertStrideToVB, - BOOL expandQuadIndex) -{ - HRESULT hr; - - if (cDirty & javax_media_j3d_GeometryArrayRetained_INDEX_CHANGED) { - jint *src = strideData->indexPtr + strideData->initialIndexIndex; - LPDIRECT3DINDEXBUFFER9 indexBuffer = d3dCtx->pVB->indexBuffer; - D3DINDEXBUFFER_DESC desc; - BYTE *bptr; - - indexBuffer->GetDesc(&desc); - hr = indexBuffer->Lock(0, 0, (VOID**)&bptr, 0); - if (FAILED(hr)) { - D3dCtx::d3dWarning(LOCKINDEXVBFAIL, hr); - return; - } - - int i = indexCount; - - if (desc.Format == D3DFMT_INDEX16) { - USHORT *dst = (USHORT *) bptr; - - if (!expandQuadIndex) { - while (--i >= 0) { - *dst++ = *src++; - } - } else { - USHORT *endptr = dst + (USHORT) 3*indexCount/2; - - while (dst < endptr) { - *dst++ = *src; - *dst++ = *(src+1); - *dst++ = *(src+2); - *dst++ = *src; - src++; - src++; - *dst++ = *src; - src++; - *dst++ = *src; - src++; - } - } - } else { - UINT *dst = (UINT *) bptr; - - if (!expandQuadIndex) { - while (--i >= 0) { - *dst++ = *src++; - } - } else { - UINT *endptr = dst + (UINT) 3*indexCount/2; - while (dst < endptr) { - *dst++ = *src; - *dst++ = *(src+1); - *dst++ = *(src+2); - *dst++ = *src; - src++; - src++; - *dst++ = *src; - src++; - *dst++ = *src; - src++; - } - - dst = (UINT *) bptr; - } - } - - indexBuffer->Unlock(); - } - - if (insertStrideToVB) { - d3dCtx->pVB->addStride(d3dCtx->pVB->indexCount); - } -} - -// This function copy the stride vertex data into Vertex Buffer -// point by vbptr and update vbptr -void copyVertexToVB(D3dCtx *d3dCtx, - D3DDRAWPRIMITIVESTRIDEDDATA* strideData, - DWORD vcount, - float **vbptr, - jint cDirty, - BOOL insertStrideToVB, - jdouble* xform, - jdouble* nxform) -{ - float *dst; - float *src; - double *dsrc; - DWORD i; - DWORD srcStride; - DWORD currStride; - - DWORD dstStride = d3dCtx->pVB->stride >> 2; - DWORD vertexFormat = d3dCtx->pVB->vertexFormat; - float *endptr; - - // Copy Position - if (cDirty & javax_media_j3d_GeometryArrayRetained_COORDINATE_CHANGED) { - dst = *vbptr; - // Before we call two times src++ in position and - // normal copy so we only need to add dstStride - 2 - // at the end. - srcStride = strideData->positionStride - 2; - endptr = dst + vcount*dstStride; - dstStride -= 2; - src = strideData->fpositionPtr; - - if (xform == NULL) { - if (src != NULL) { - while (dst < endptr) { - *dst++ = *src++; // pos x - *dst++ = *src++; // pos y - *dst = *src; // pos z - dst += dstStride; - src += srcStride; - } - } else { - // double is used for position coordinate in executeVA() - dsrc = strideData->dpositionPtr; - while (dst < endptr) { - *dst++ = *dsrc++; // pos x - *dst++ = *dsrc++; // pos y - *dst = *dsrc; // pos z - dst += dstStride; - dsrc += srcStride; - } - } - } else { - if (src != NULL) { - float x, y, z, w; - while (dst < endptr) { - x = *src++; - y = *src++; - z = *src; // pos z - w = 1/(xform[12]*x + xform[13]*y + xform[14]*z + xform[15]); - *dst++ = (xform[0]*x + xform[1]*y + xform[2]*z + xform[3])*w; - *dst++ = (xform[4]*x + xform[5]*y + xform[6]*z + xform[7])*w; - *dst = (xform[8]*x + xform[9]*y + xform[10]*z + xform[11])*w; - dst += dstStride; - src += srcStride; - } - } else { - double x, y, z, w; - // double is used for position coordinate in executeVA() - dsrc = strideData->dpositionPtr; - while (dst < endptr) { - x = *src++; - y = *src++; - z = *src; // pos z - w = 1/(xform[12]*x + xform[13]*y + xform[14]*z + xform[15]); - *dst++ = (xform[0]*x + xform[1]*y + xform[2]*z + xform[3])*w; - *dst++ = (xform[4]*x + xform[5]*y + xform[6]*z + xform[7])*w; - *dst = (xform[8]*x + xform[9]*y + xform[10]*z + xform[11])*w; - dst += dstStride; - dsrc += srcStride; - } - } - - } - // restore value - dstStride += 2; - } - - // Copy Normal - if (vertexFormat & D3DFVF_NORMAL) { - if (cDirty & javax_media_j3d_GeometryArrayRetained_NORMAL_CHANGED) { - dst = *vbptr + 3; - src = strideData->normalPtr; - srcStride = strideData->normalStride - 2; - endptr = dst + vcount*dstStride; - dstStride -= 2; - if (nxform == NULL) { - while (dst < endptr) { - *dst++ = *src++; // norm x - *dst++ = *src++; // norm y - *dst = *src; // norm z - dst += dstStride; - src += srcStride; - } - } else { - float nx, ny, nz, nw; - while (dst < endptr) { - nx = *src++; - ny = *src++; - nz = *src; // pos z - nw = 1/(nxform[12]*nx + nxform[13]*ny + nxform[14]*nz + nxform[15]); - *dst++ = (nxform[0]*nx + nxform[1]*ny + nxform[2]*nz + nxform[3])*nw; - *dst++ = (nxform[4]*nx + nxform[5]*ny + nxform[6]*nz + nxform[7])*nw; - *dst = (nxform[8]*nx + nxform[9]*ny + nxform[10]*nz + nxform[11])*nw; - dst += dstStride; - dsrc += srcStride; - } - } - // restore value - dstStride += 2; - } - // nx,ny,nz copy in addtion to x, y, z - currStride = 6; - } else { - // This is used to keep track of the offset - // from beginning of the current type copy. - currStride = 3; // x,y,z already copy - } - - // Copy Diffuse Color (DWORD & float are of the same size) - - if (vertexFormat & D3DFVF_DIFFUSE) { - if (cDirty & javax_media_j3d_GeometryArrayRetained_COLOR_CHANGED) { - - DWORD* wdst = (DWORD *) *vbptr + currStride; - DWORD* wendptr = wdst + vcount*dstStride; - - if (strideData->fdiffusePtr) { - float* wsrc = strideData->fdiffusePtr; - float r, g, b, a; - if ((d3dCtx->currDisplayListID <= 0) || - !strideData->modulateAlpha) { - // execute() or executeVA() - - if (strideData->useAlpha) { - srcStride = strideData->diffuseStride - 3; - while (wdst < wendptr) { - r = *wsrc++; - g = *wsrc++; - b = *wsrc++; - a = *wsrc; - *wdst = D3DCOLOR_COLORVALUE(r, g, b, a); - wdst += dstStride; - wsrc += srcStride; - } - } else { - srcStride = strideData->diffuseStride - 2; - while (wdst < wendptr) { - r = *wsrc++; - g = *wsrc++; - b = *wsrc; - *wdst = D3DCOLOR_COLORVALUE(r, g, b, 0); - wdst += dstStride; - wsrc += srcStride; - } - } - } else { - // buildGA() & modulateAlpha - float alpha = strideData->alpha; - if (strideData->useAlpha) { - srcStride = strideData->diffuseStride - 3; - while (wdst < wendptr) { - r = *wsrc++; - g = *wsrc++; - b = *wsrc++; - a = *wsrc * alpha; - *wdst = D3DCOLOR_COLORVALUE(r, g, b, a); - wdst += dstStride; - wsrc += srcStride; - } - } else { - srcStride = strideData->diffuseStride - 2; - while (wdst < wendptr) { - r = *wsrc++; - g = *wsrc++; - b = *wsrc; - *wdst = D3DCOLOR_COLORVALUE(r, g, b, alpha); - wdst += dstStride; - wsrc += srcStride; - } - } - - } - } else { // byte color pointer - jbyte* wsrc = strideData->bdiffusePtr; - jbyte r, g, b, a; - if ((d3dCtx->currDisplayListID <= 0) || - !strideData->modulateAlpha) { - // execute() or executeVA() - - if (strideData->useAlpha) { - srcStride = strideData->diffuseStride - 3; - while (wdst < wendptr) { - r = *wsrc++; - g = *wsrc++; - b = *wsrc++; - a = *wsrc; - *wdst = D3DCOLOR_RGBA(r, g, b, a); - wdst += dstStride; - wsrc += srcStride; - } - } else { - srcStride = strideData->diffuseStride - 2; - while (wdst < wendptr) { - r = *wsrc++; - g = *wsrc++; - b = *wsrc; - *wdst = D3DCOLOR_RGBA(r, g, b, 0); - wdst += dstStride; - wsrc += srcStride; - } - } - } else { - // buildGA() & modeulateAlpha - // Currently buildGA() will not use byte color - // so this code should never execute. - jbyte alpha = (jbyte)(255*strideData->alpha); - if (strideData->useAlpha) { - srcStride = strideData->diffuseStride - 3; - while (wdst < wendptr) { - r = *wsrc++; - g = *wsrc++; - b = *wsrc++; - a = (jbyte)(((int)(*wsrc) & 0xff) * strideData->alpha); - *wdst = D3DCOLOR_RGBA(r, g, b, a); - wdst += dstStride; - wsrc += srcStride; - } - } else { - srcStride = strideData->diffuseStride - 2; - while (wdst < wendptr) { - r = *wsrc++; - g = *wsrc++; - b = *wsrc; - *wdst = D3DCOLOR_RGBA(r, g, b, alpha); - wdst += dstStride; - wsrc += srcStride; - } - } - - } - } - - } - - currStride++; // additional one DWORD of color copy - } - - // Copy Texture - int ts; - int texPos; - boolean invalidTexCoord; - -#ifdef TEXDEBUG - printf("In copyVertexToVB TexSet Used %d\n", d3dCtx->texSetUsed); -#endif - for (i=0; i < d3dCtx->texSetUsed; i++) { - ts = d3dCtx->texStride[i]; - - // TODO: skip when ts = 0 - if (ts == 0) { - continue; - } - texPos = strideData->texCoordPosition[i]; - - invalidTexCoord = ((texPos != d3dCtx->pVB->texCoordPosition[i]) || - (texPos == TEX_OBJ_LINEAR)); - -#ifdef TEXDEBUG - printf("%d texPos %d, invalidate Cached TexCoord %d, ts %d\n",i, texPos, invalidTexCoord, ts); -#endif - if ((cDirty & javax_media_j3d_GeometryArrayRetained_TEXTURE_CHANGED) || - invalidTexCoord) { - - if (texPos >= 0) { - dst = *vbptr + currStride; - src = strideData->textureCoordsPtr[i]; - endptr = dst + vcount*dstStride; -#ifdef TEXDEBUG - printf("copy directly, ts %d\n", ts); -#endif - if (ts == 2) { - dstStride--; - srcStride = strideData->textureCoordsStride[i] - 1; - while (dst < endptr) { - *dst++ = *src++; // tx - *dst = *src; // ty - dst += dstStride; - src += srcStride; - } - dstStride++; - } else if (ts == 3) { - dstStride -= 2; - srcStride = strideData->textureCoordsStride[i] - 2; - while (dst < endptr) { - *dst++ = *src++; // tx - *dst++ = *src++; // ty - *dst = *src; // tz - dst += dstStride; - src += srcStride; - } - dstStride += 2; - } else { - // ts == 4 - dstStride -= 3; - srcStride = strideData->textureCoordsStride[i] - 3; - while (dst < endptr) { - *dst++ = *src++; // tx - *dst++ = *src++; // ty - *dst++ = *src++; // tz - *dst = *src; // tw - dst += dstStride; - src += srcStride; - } - dstStride += 3; - } - - } else { - if (texPos == TEX_OBJ_LINEAR) { - // automatic texture generation for Object Linear - float *ps = d3dCtx->planeS[i]; - float *pt = d3dCtx->planeT[i]; - float *pr = d3dCtx->planeR[i]; - float *pq = d3dCtx->planeQ[i]; -#ifdef TEXDEBUG - printf("gen obj linear tex, ts %d\n", ts); -#endif - if (strideData->fpositionPtr) { - float x, y, z; - dst = *vbptr + currStride; - endptr = dst + vcount*dstStride; - src = strideData->fpositionPtr; - srcStride = strideData->positionStride - 2; - if (ts == 2) { - dstStride--; - if (xform == NULL) { - while (dst < endptr) { - x = *src++; - y = *src++; - z = *src; - *dst++ = ps[0]*x + ps[1]*y + ps[2]*z + ps[3]; - *dst = pt[0]*x + pt[1]*y + pt[2]*z + pt[3]; - dst += dstStride; - src += srcStride; - } - } else { - float tx, ty, tz, tw; - while (dst < endptr) { - tx = *src++; - ty = *src++; - tz = *src; - tw = 1/(xform[12]*x + xform[13]*y + xform[14]*z + xform[15]); - x = (xform[0]*tx + xform[1]*ty + xform[2]*tz + xform[3])*tw; - y = (xform[4]*tx + xform[5]*ty + xform[6]*tz + xform[7])*tw; - z = (xform[8]*tx + xform[9]*ty + xform[10]*tz + xform[11])*tw; - *dst++ = ps[0]*x + ps[1]*y + ps[2]*z + ps[3]; - *dst = pt[0]*x + pt[1]*y + pt[2]*z + pt[3]; - dst += dstStride; - src += srcStride; - } - } - dstStride++; - } else if (ts == 3) { - dstStride -= 2; - if (xform == NULL) { - while (dst < endptr) { - x = *src++; - y = *src++; - z = *src; - *dst++ = ps[0]*x + ps[1]*y + ps[2]*z + ps[3]; - *dst++ = pt[0]*x + pt[1]*y + pt[2]*z + pt[3]; - *dst = pr[0]*x + pr[1]*y + pr[2]*z + pr[3]; - dst += dstStride; - src += srcStride; - } - } else { - float tx, ty, tz, tw; - while (dst < endptr) { - tx = *src++; - ty = *src++; - tz = *src; - tw = 1/(xform[12]*x + xform[13]*y + xform[14]*z + xform[15]); - x = (xform[0]*tx + xform[1]*ty + xform[2]*tz + xform[3])*tw; - y = (xform[4]*tx + xform[5]*ty + xform[6]*tz + xform[7])*tw; - z = (xform[8]*tx + xform[9]*ty + xform[10]*tz + xform[11])*tw; - *dst++ = ps[0]*x + ps[1]*y + ps[2]*z + ps[3]; - *dst++ = pt[0]*x + pt[1]*y + pt[2]*z + pt[3]; - *dst = pr[0]*x + pr[1]*y + pr[2]*z + pr[3]; - dst += dstStride; - src += srcStride; - } - } - - dstStride += 2; - } else { - // ts == 4 - dstStride -= 3; - - if (!d3dCtx->texTransformSet[i]) { - if (xform == NULL) { - while (dst < endptr) { - x = *src++; - y = *src++; - z = *src; - *dst++ = ps[0]*x + ps[1]*y + ps[2]*z + ps[3]; - *dst++ = pt[0]*x + pt[1]*y + pt[2]*z + pt[3]; - *dst++ = pr[0]*x + pr[1]*y + pr[2]*z + pr[3]; - *dst = pq[0]*x + pq[1]*y + pq[2]*z + pq[3]; - dst += dstStride; - src += srcStride; - } - } else { - float tx, ty, tz, tw; - while (dst < endptr) { - tx = *src++; - ty = *src++; - tz = *src; - tw = 1/(xform[12]*x + xform[13]*y + xform[14]*z + xform[15]); - x = (xform[0]*tx + xform[1]*ty + xform[2]*tz + xform[3])*tw; - y = (xform[4]*tx + xform[5]*ty + xform[6]*tz + xform[7])*tw; - z = (xform[8]*tx + xform[9]*ty + xform[10]*tz + xform[11])*tw; - *dst++ = ps[0]*x + ps[1]*y + ps[2]*z + ps[3]; - *dst++ = pt[0]*x + pt[1]*y + pt[2]*z + pt[3]; - *dst++ = pr[0]*x + pr[1]*y + pr[2]*z + pr[3]; - *dst = pq[0]*x + pq[1]*y + pq[2]*z + pq[3]; - dst += dstStride; - src += srcStride; - } - } - } else { - // do texture transform manually - D3DXMATRIX *m = &(d3dCtx->texTransform[i]); - double tx, ty, tz, tw; - if (xform == NULL) { - while (dst < endptr) { - x = *src++; - y = *src++; - z = *src; - tx = ps[0]*x + ps[1]*y + ps[2]*z + ps[3]; - ty = pt[0]*x + pt[1]*y + pt[2]*z + pt[3]; - tz = pr[0]*x + pr[1]*y + pr[2]*z + pr[3]; - tw = pq[0]*x + pq[1]*y + pq[2]*z + pq[3]; - *dst++ = (*m)._11*tx + (*m)._21*ty + (*m)._31*tz + (*m)._41*tw; - *dst++ = (*m)._12*tx + (*m)._22*ty + (*m)._32*tz + (*m)._42*tw; - *dst++ = (*m)._13*tx + (*m)._23*ty + (*m)._33*tz + (*m)._43*tw; - *dst = (*m)._14*tx + (*m)._24*ty + (*m)._34*tz + (*m)._44*tw; - dst += dstStride; - src += srcStride; - } - } else { - float tx, ty, tz, tw; - while (dst < endptr) { - tx = *src++; - ty = *src++; - tz = *src; - tw = 1/(xform[12]*x + xform[13]*y + xform[14]*z + xform[15]); - x = (xform[0]*tx + xform[1]*ty + xform[2]*tz + xform[3])*tw; - y = (xform[4]*tx + xform[5]*ty + xform[6]*tz + xform[7])*tw; - z = (xform[8]*tx + xform[9]*ty + xform[10]*tz + xform[11])*tw; - tx = ps[0]*x + ps[1]*y + ps[2]*z + ps[3]; - ty = pt[0]*x + pt[1]*y + pt[2]*z + pt[3]; - tz = pr[0]*x + pr[1]*y + pr[2]*z + pr[3]; - tw = pq[0]*x + pq[1]*y + pq[2]*z + pq[3]; - *dst++ = (*m)._11*tx + (*m)._21*ty + (*m)._31*tz + (*m)._41*tw; - *dst++ = (*m)._12*tx + (*m)._22*ty + (*m)._32*tz + (*m)._42*tw; - *dst++ = (*m)._13*tx + (*m)._23*ty + (*m)._33*tz + (*m)._43*tw; - *dst = (*m)._14*tx + (*m)._24*ty + (*m)._34*tz + (*m)._44*tw; - dst += dstStride; - src += srcStride; - } - } - } - dstStride += 3; - } - } else { - // double type position pointer - double x, y, z; - dst = *vbptr + currStride; - endptr = dst + vcount*dstStride; - dsrc = strideData->dpositionPtr; - srcStride = strideData->positionStride - 2; - if (ts == 2) { - dstStride--; - if (xform == NULL) { - while (dst < endptr) { - x = *dsrc++; - y = *dsrc++; - z = *dsrc; - *dst++ = ps[0]*x + ps[1]*y + ps[2]*z + ps[3]; - *dst = pt[0]*x + pt[1]*y + pt[2]*z + pt[3]; - dst += dstStride; - dsrc += srcStride; - } - } else { - double tx, ty, tz, tw; - while (dst < endptr) { - tx = *src++; - ty = *src++; - tz = *src; - tw = 1/(xform[12]*x + xform[13]*y + xform[14]*z + xform[15]); - x = (xform[0]*tx + xform[1]*ty + xform[2]*tz + xform[3])*tw; - y = (xform[4]*tx + xform[5]*ty + xform[6]*tz + xform[7])*tw; - z = (xform[8]*tx + xform[9]*ty + xform[10]*tz + xform[11])*tw; - *dst++ = ps[0]*x + ps[1]*y + ps[2]*z + ps[3]; - *dst = pt[0]*x + pt[1]*y + pt[2]*z + pt[3]; - dst += dstStride; - src += srcStride; - } - } - dstStride++; - } else if (ts == 3) { - dstStride -= 2; - if (xform == NULL) { - while (dst < endptr) { - x = *dsrc++; - y = *dsrc++; - z = *dsrc; - *dst++ = ps[0]*x + ps[1]*y + ps[2]*z + ps[3]; - *dst++ = pt[0]*x + pt[1]*y + pt[2]*z + pt[3]; - *dst = pr[0]*x + pr[1]*y + pr[2]*z + pr[3]; - dst += dstStride; - dsrc += srcStride; - } - } else { - double tx, ty, tz, tw; - while (dst < endptr) { - tx = *src++; - ty = *src++; - tz = *src; - tw = 1/(xform[12]*x + xform[13]*y + xform[14]*z + xform[15]); - x = (xform[0]*tx + xform[1]*ty + xform[2]*tz + xform[3])*tw; - y = (xform[4]*tx + xform[5]*ty + xform[6]*tz + xform[7])*tw; - z = (xform[8]*tx + xform[9]*ty + xform[10]*tz + xform[11])*tw; - *dst++ = ps[0]*x + ps[1]*y + ps[2]*z + ps[3]; - *dst++ = pt[0]*x + pt[1]*y + pt[2]*z + pt[3]; - *dst = pr[0]*x + pr[1]*y + pr[2]*z + pr[3]; - dst += dstStride; - src += srcStride; - } - } - dstStride += 2; - } else { - // ts == 4 - dstStride -= 3; - if (!d3dCtx->texTransformSet[i]) { - if (xform == NULL) { - while (dst < endptr) { - x = *dsrc++; - y = *dsrc++; - z = *dsrc; - *dst++ = ps[0]*x + ps[1]*y + ps[2]*z + ps[3]; - *dst++ = pt[0]*x + pt[1]*y + pt[2]*z + pt[3]; - *dst++ = pr[0]*x + pr[1]*y + pr[2]*z + pr[3]; - *dst = pq[0]*x + pq[1]*y + pq[2]*z + pq[3]; - dst += dstStride; - dsrc += srcStride; - } - } else { - double tx, ty, tz, tw; - while (dst < endptr) { - tx = *src++; - ty = *src++; - tz = *src; - tw = 1/(xform[12]*x + xform[13]*y + xform[14]*z + xform[15]); - x = (xform[0]*tx + xform[1]*ty + xform[2]*tz + xform[3])*tw; - y = (xform[4]*tx + xform[5]*ty + xform[6]*tz + xform[7])*tw; - z = (xform[8]*tx + xform[9]*ty + xform[10]*tz + xform[11])*tw; - *dst++ = ps[0]*x + ps[1]*y + ps[2]*z + ps[3]; - *dst++ = pt[0]*x + pt[1]*y + pt[2]*z + pt[3]; - *dst++ = pr[0]*x + pr[1]*y + pr[2]*z + pr[3]; - *dst = pq[0]*x + pq[1]*y + pq[2]*z + pq[3]; - dst += dstStride; - src += srcStride; - } - } - } else { -// do texture transform manually - D3DXMATRIX *m = &(d3dCtx->texTransform[i]); - double tx, ty, tz, tw; - if (xform == NULL) { - while (dst < endptr) { - x = *src++; - y = *src++; - z = *src; - tx = ps[0]*x + ps[1]*y + ps[2]*z + ps[3]; - ty = pt[0]*x + pt[1]*y + pt[2]*z + pt[3]; - tz = pr[0]*x + pr[1]*y + pr[2]*z + pr[3]; - tw = pq[0]*x + pq[1]*y + pq[2]*z + pq[3]; - *dst++ = ((*m)._11*tx + (*m)._21*ty + (*m)._31*tz + (*m)._41*tw); - *dst++ = ((*m)._12*tx + (*m)._22*ty + (*m)._32*tz + (*m)._42*tw); - *dst++ = ((*m)._13*tx + (*m)._23*ty + (*m)._33*tz + (*m)._43*tw); - *dst = (*m)._14*tx + (*m)._24*ty + (*m)._34*tz + (*m)._44*tw; - dst += dstStride; - src += srcStride; - } - } else { - float tx, ty, tz, tw; - while (dst < endptr) { - tx = *src++; - ty = *src++; - tz = *src; - tw = 1/(xform[12]*x + xform[13]*y + xform[14]*z + xform[15]); - x = (xform[0]*tx + xform[1]*ty + xform[2]*tz + xform[3])*tw; - y = (xform[4]*tx + xform[5]*ty + xform[6]*tz + xform[7])*tw; - z = (xform[8]*tx + xform[9]*ty + xform[10]*tz + xform[11])*tw; - tx = ps[0]*x + ps[1]*y + ps[2]*z + ps[3]; - ty = pt[0]*x + pt[1]*y + pt[2]*z + pt[3]; - tz = pr[0]*x + pr[1]*y + pr[2]*z + pr[3]; - tw = pq[0]*x + pq[1]*y + pq[2]*z + pq[3]; - *dst++ = ((*m)._11*tx + (*m)._21*ty + (*m)._31*tz + (*m)._41*tw); - *dst++ = ((*m)._12*tx + (*m)._22*ty + (*m)._32*tz + (*m)._42*tw); - *dst++ = ((*m)._13*tx + (*m)._23*ty + (*m)._33*tz + (*m)._43*tw); - *dst = (*m)._14*tx + (*m)._24*ty + (*m)._34*tz + (*m)._44*tw; - dst += dstStride; - src += srcStride; - } - } - } - dstStride += 3; - } - } - } else if (texPos == TEX_GEN_INVALID) { - // application error, disable by setting texCoord to zero -#ifdef TEXDEBUG - printf("app error, ts %d\n", ts); -#endif - dst = *vbptr + currStride; - endptr = dst + vcount*dstStride; - if (ts == 2) { - dstStride--; - while (dst < endptr) { - *dst++ = 0; - *dst = 0; - dst += dstStride; - } - dstStride++; - } else if (ts == 3) { - dstStride -= 2; - while (dst < endptr) { - *dst++ = 0; - *dst++ = 0; - *dst = 0; - dst += dstStride; - } - dstStride += 2; - } else { - // ts == 4 - dstStride -= 3; - while (dst < endptr) { - *dst++ = 0; - *dst++ = 0; - *dst++ = 0; - *dst = 0; - dst += dstStride; - } - dstStride += 3; - } - } else { - // Other automatic texture generation type handle - // by driver - //printf("TexStage %d, Tex gen by driver, texPos = %d\n", i, texPos); - } - } - } - - currStride += ts; - } - - if (insertStrideToVB) { - d3dCtx->pVB->addStride(vcount); - } - - // Adjust VB pointer so that when this function is invoked - // again, it append to the VB correctly. - *vbptr += (vcount*dstStride); -} - - -void copyOneVertexToVB(D3dCtx *d3dCtx, - float **vbptr, - D3DDRAWPRIMITIVESTRIDEDDATA* strideData, - DWORD idx, - jint cDirty, - jdouble* xform, - jdouble* nxform) -{ - float *src; - float *dst = *vbptr; - DWORD vertexFormat = d3dCtx->pVB->vertexFormat; - float posX, posY, posZ; - - // Copy Position - - // if (cDirty & javax_media_j3d_GeometryArrayRetained_COORDINATE_CHANGED) - // Set the posX, posY, posZ anyway since TexGeneration will use it - // if dirty. - - if (strideData->fpositionPtr != NULL) { - src = strideData->fpositionPtr + - idx*strideData->positionStride; - - if (xform == NULL) { - posX = *src++; // pos x - posY = *src++; // pos y - posZ = *src; // pos z - } else { - float x, y, z, w; - x = *src++; - y = *src++; - z = *src; - w = 1/(xform[12]*x + xform[13]*y + xform[14]*z + xform[15]); - posX = (xform[0]*x + xform[1]*y + xform[2]*z + xform[3])*w; - posY = (xform[4]*x + xform[5]*y + xform[6]*z + xform[7])*w; - posZ = (xform[8]*x + xform[9]*y + xform[10]*z + xform[11])*w; - } - } else { - // double is used for position coordinate in executeVA() - double *dsrc = strideData->dpositionPtr + - idx*strideData->positionStride; - - if (xform == NULL) { - posX = (float) *dsrc++; // pos x - posY = (float) *dsrc++; // pos y - posZ = (float) *dsrc; // pos z - } else { - double x, y, z, w; - x = *dsrc++; - y = *dsrc++; - z = *dsrc; - w = 1/(xform[12]*x + xform[13]*y + xform[14]*z + xform[15]); - posX = (float) (xform[0]*x + xform[1]*y + xform[2]*z + xform[3])*w; - posY = (float) (xform[4]*x + xform[5]*y + xform[6]*z + xform[7])*w; - posZ = (float) (xform[8]*x + xform[9]*y + xform[10]*z + xform[11])*w; - } - } - *dst++ = posX; - *dst++ = posY; - *dst++ = posZ; - - // Copy Normal - if (vertexFormat & D3DFVF_NORMAL) { - if (cDirty & javax_media_j3d_GeometryArrayRetained_NORMAL_CHANGED) { - src = strideData->normalPtr + - idx*strideData->normalStride; - if (nxform == NULL) { - *dst++ = *src++; // norm x - *dst++ = *src++; // norm y - *dst++ = *src; // norm z - } else { - float nx, ny, nz, nw; - nx = *src++; // norm x - ny = *src++; // norm y - nz = *src; // norm z - nw = 1/(nxform[12]*nx + nxform[13]*ny + nxform[14]*nz + nxform[15]); - *dst++ = (nxform[0]*nx + nxform[1]*ny + nxform[2]*nz + nxform[3])*nw; - *dst++ = (nxform[4]*nx + nxform[5]*ny + nxform[6]*nz + nxform[7])*nw; - *dst = (nxform[8]*nx + nxform[9]*ny + nxform[10]*nz + nxform[11])*nw; - } - } - } - - - // Copy Diffuse Color (DWORD & float are of the same size) - if (vertexFormat & D3DFVF_DIFFUSE) { - if (cDirty & javax_media_j3d_GeometryArrayRetained_COLOR_CHANGED) { - DWORD* wdst = (DWORD *) dst; - if (strideData->fdiffusePtr) { - src = strideData->fdiffusePtr + - idx*strideData->diffuseStride; - float r, g, b, a; - if ((d3dCtx->currDisplayListID <= 0) || - !strideData->modulateAlpha) { - // execute() or executeVA() - if (strideData->useAlpha) { - r = *src++; - g = *src++; - b = *src++; - a = *src; - } else { - r = *src++; - g = *src++; - b = *src; - a = 0; - } - } else { - // buildGA() & modeulateAlpha - if (strideData->useAlpha) { - r = *src++; - g = *src++; - b = *src++; - a = *src * strideData->alpha; - } else { - r = *src++; - g = *src++; - b = *src; - a = strideData->alpha; - } - } - *wdst = D3DCOLOR_COLORVALUE(r, g, b, a); - } else { // byte color pointer - jbyte* wsrc = strideData->bdiffusePtr + - idx*strideData->diffuseStride; - jbyte r, g, b, a; - if ((d3dCtx->currDisplayListID <= 0) || - !strideData->modulateAlpha) { - // execute() or executeVA() - if (strideData->useAlpha) { - r = *wsrc++; - g = *wsrc++; - b = *wsrc++; - a = *wsrc; - } else { - r = *wsrc++; - g = *wsrc++; - b = *wsrc; - a = 0; - } - } else { - // buildGA() & modeulateAlpha - // Currently buildGA() will not use byte color - // so this code should never execute. - jbyte alpha = (jbyte) (255*strideData->alpha); - if (strideData->useAlpha) { - r = *wsrc++; - g = *wsrc++; - b = *wsrc++; - a = (jbyte)(((int)(*wsrc) & 0xff) * strideData->alpha); - } else { - r = *wsrc++; - g = *wsrc++; - b = *wsrc; - a = alpha; - - } - } - *wdst = D3DCOLOR_RGBA(r, g, b, a); - } - } - dst++; // additional one DWORD of color copy - } - - - // Copy Texture - int ts; - int texPos; - boolean invalidTexCoord; - - for (int i=0; i < d3dCtx->texSetUsed; i++) { - ts = d3dCtx->texStride[i]; - if (ts == 0) { - continue; - } - texPos = strideData->texCoordPosition[i]; - - invalidTexCoord = ((texPos != d3dCtx->pVB->texCoordPosition[i]) || - (texPos == TEX_OBJ_LINEAR)); - - if ((cDirty & javax_media_j3d_GeometryArrayRetained_TEXTURE_CHANGED) || invalidTexCoord) { - if (texPos >= 0) { - src = strideData->textureCoordsPtr[i] + - idx*strideData->textureCoordsStride[i]; - *dst++ = *src++; // tx - *dst++ = *src++; // ty - if (ts >= 3) { - *dst++ = *src++; // tx - if (ts >= 4) { - *dst++ = *src; // tx - } - } - } else { - // automatic texture generation - if (texPos == TEX_OBJ_LINEAR) { - float *ps = d3dCtx->planeS[i]; - float *pt = d3dCtx->planeT[i]; - float *pr = d3dCtx->planeR[i]; - float *pq = d3dCtx->planeQ[i]; - - if ((ts < 4) || (!d3dCtx->texTransformSet[i])) { - *dst++ = ps[0]*posX + ps[1]*posY + ps[2]*posZ + ps[3]; - *dst++ = pt[0]*posX + pt[1]*posY + pt[2]*posZ + pt[3]; - if (ts >= 3) { - *dst++ = pr[0]*posX + pr[1]*posY + pr[2]*posZ + pr[3]; - if (ts >= 4) { - *dst++ = pq[0]*posX + pq[1]*posY + pq[2]*posZ + pq[3]; - } - } - } else { - float tx, ty, tz, tw; - D3DXMATRIX *m = &(d3dCtx->texTransform[i]); - tx = ps[0]*posX + ps[1]*posY + ps[2]*posZ + ps[3]; - ty = pt[0]*posX + pt[1]*posY + pt[2]*posZ + pt[3]; - tz = pr[0]*posX + pr[1]*posY + pr[2]*posZ + pr[3]; - tw = pq[0]*posX + pq[1]*posY + pq[2]*posZ + pq[3]; - *dst++ = (*m)._11*tx + (*m)._21*ty + (*m)._31*tz + (*m)._41*tw; - *dst++ = (*m)._12*tx + (*m)._22*ty + (*m)._32*tz + (*m)._42*tw; - *dst++ = (*m)._13*tx + (*m)._23*ty + (*m)._33*tz + (*m)._43*tw; - *dst++ = (*m)._14*tx + (*m)._24*ty + (*m)._34*tz + (*m)._44*tw; - } - } else if (texPos == TEX_GEN_INVALID) { - // application error, disable by setting texCoord to zero - *dst++ = 0; - *dst++ = 0; - if (ts >= 3) { - *dst++ = 0; - if (ts >= 4) { - *dst++ = 0; - } - } - } else { - // should not happen - dst += ts; - } - } - } else { - dst += ts; - } - } - - *vbptr = dst; -} - - -float* allocateVB(D3dCtx *d3dCtx, - LPDIRECT3DDEVICE9 device, - int vcount, - int maxVertexLimit, - jint *cdirty) -{ - LPD3DVERTEXBUFFER vb = d3dCtx->pVB->nextVB; - HRESULT hr; - float *ptr = NULL; - - - if (vcount > maxVertexLimit) { - vcount = maxVertexLimit; - } - - if ((vb != NULL) && (vb->vcount < vcount)) { - delete vb; - d3dCtx->pVB->nextVB = NULL; - vb = NULL; - } - - if (vb == NULL) { - vb = new D3dVertexBuffer(); - if (vb == NULL) { - D3dCtx::d3dWarning(OUTOFMEMORY); - return NULL; - } - - vb->stride = d3dCtx->pVB->stride; - vb->vertexFormat = d3dCtx->pVB->vertexFormat; - // Don't set totalVertexCount - vb->isIndexPrimitive = d3dCtx->pVB->isIndexPrimitive; - vb->primitiveType = d3dCtx->pVB->primitiveType; - vb->isPointFlagUsed = d3dCtx->pVB->isPointFlagUsed; - vb->vcount = vcount; - vb->maxVertexLimit = maxVertexLimit; - -#ifdef VBDEBUG - printf("Create secondary VertexBuffer of size %d, display list ID %d, pointFlag %d\n", - vb->vcount, d3dCtx->currDisplayListID, vb->isPointFlagUsed); -#endif - if (!vb->isPointFlagUsed) { - hr = device->CreateVertexBuffer(vb->stride*vcount, - D3DUSAGE_WRITEONLY, - vb->vertexFormat, - D3DPOOL_DEFAULT, - &vb->buffer, - NULL); - } else { - hr = device->CreateVertexBuffer(vb->stride*vcount, - D3DUSAGE_WRITEONLY|D3DUSAGE_POINTS, - vb->vertexFormat, - D3DPOOL_DEFAULT, - &vb->buffer, - NULL); - } - if (FAILED(hr)) { - vb->buffer = NULL; - delete vb; - D3dCtx::d3dWarning(CREATEVBFAIL, hr); - return NULL; - } - d3dCtx->pVB->nextVB = vb; - *cdirty = javax_media_j3d_GeometryArrayRetained_VERTEX_CHANGED; - } - - hr = vb->buffer->Lock(0, 0,(VOID**) &ptr, 0); - - if (FAILED(hr)) { - D3dCtx::d3dWarning(LOCKVBFAIL, hr); - delete vb; - d3dCtx->pVB->nextVB = NULL; - return NULL; - } - - d3dCtx->pVB = vb; - - vb->stripLen = 0; - return ptr; -} - - - -BOOL createCopyVBVertex(D3dCtx *d3dCtx, - LPDIRECT3DDEVICE9 device, - D3DDRAWPRIMITIVESTRIDEDDATA *strideData, - int vcount, jint cDirty, - jdouble* xform, - jdouble* nxform) -{ - LPD3DVERTEXBUFFER vb = d3dCtx->pVB; - float *vbptr; - - - if (vb->stripLen > 0) { - // VertexBuffer already used, create a new one or used - // the next VB in the list - // maxVertexLimit is already check before, so we can - // pass vcount as maxVertexLimit - vbptr = allocateVB(d3dCtx, device, vcount, vcount, &cDirty); - if (vbptr == NULL) { - return FALSE; - } - - } else { - // use the same VB - HRESULT hr; - hr = vb->buffer->Lock(0, 0, (VOID**)&vbptr, 0); - - if (FAILED(hr)) { - D3dCtx::d3dWarning(LOCKVBFAIL, hr); - return FALSE; - } - - } - - copyVertexToVB(d3dCtx, strideData, vcount, &vbptr, cDirty, true, - xform, nxform); - - d3dCtx->pVB->buffer->Unlock(); - return TRUE; -} - - -/* - * Draw Primitive with vertexCount > D3DMAXNUMVERTICES. - * In this case we call the drawing routine multiple times. - */ -void splitVertexToMultipleVB(D3dCtx *d3dCtx, - LPD3DDRAWPRIMITIVESTRIDEDDATA strideData, - int vcount, - int maxVertexLimit, - jint cDirty, - jdouble* xform, - jdouble* nxform) -{ - int i, inc; - int min = 0; - int max = 0; - jfloat *oldfPosition; - double *olddPosition; - jfloat *oldNormal; - jfloat *oldfDiffuse; - jbyte *oldbDiffuse; - float* oldTexCoords[D3DDP_MAXTEXCOORD]; - int vc; - int texSetUsed = d3dCtx->texSetUsed; - LPDIRECT3DDEVICE9 device = d3dCtx->pDevice; - jfloat fr, fg, fb, fa; - jbyte br, bg, bb, ba; - boolean success; - - DWORD vertexFormat = d3dCtx->pVB->vertexFormat; - - // save stride pointers since strip set may have - // multiple call to this procedure. - oldfPosition = strideData->fpositionPtr; - olddPosition = strideData->dpositionPtr; - oldNormal = strideData->normalPtr; - oldfDiffuse = strideData->fdiffusePtr; - oldbDiffuse = strideData->bdiffusePtr; - - for (i=0; i < texSetUsed; i++) { - oldTexCoords[i] = strideData->textureCoordsPtr[i]; - } - - - - switch (d3dCtx->pVB->primitiveType) { - case D3DPT_TRIANGLEFAN: - { - // Copy the very first vertx and repeat the last vertex - jfloat fx, fy, fz, nx, ny, nz; - jdouble dx, dy, dz; - jfloat tx[D3DDP_MAXTEXCOORD]; - jfloat ty[D3DDP_MAXTEXCOORD]; - jfloat tz[D3DDP_MAXTEXCOORD]; - jfloat tw[D3DDP_MAXTEXCOORD]; - inc = maxVertexLimit - 2; - - if (oldfPosition) { - fx = *oldfPosition; - fy = *(oldfPosition+1); - fz = *(oldfPosition+2); - } else { - // must be double, since this routine will - // not invoke when there is no position available - dx = *olddPosition; - dy = *(olddPosition+1); - dz = *(olddPosition+2); - } - - if (oldNormal) { - nx = *oldNormal; - ny = *(oldNormal+1); - nz = *(oldNormal+2); - } - if (oldfDiffuse) { - fr = *oldfDiffuse; - fg = *(oldfDiffuse+1); - fb = *(oldfDiffuse+2); - if (strideData->useAlpha) { - fa = *(oldfDiffuse+3); - } - } else if (oldbDiffuse) { - br = *oldbDiffuse; - bg = *(oldbDiffuse+1); - bb = *(oldbDiffuse+2); - if (strideData->useAlpha) { - ba = *(oldbDiffuse+3); - } - } - - for (i=0; i < texSetUsed; i++) { - tx[i] = *oldTexCoords[i]; - ty[i] = *(oldTexCoords[i]+1); - if (d3dCtx->texStride[i] > 2) { - tz[i] = *(oldTexCoords[i]+2); - if (d3dCtx->texStride[i] > 3) { - tw[i] = *(oldTexCoords[i]+3); - } - } - } - while (true) { - vc = (vcount >= maxVertexLimit ? maxVertexLimit : vcount); - - success = createCopyVBVertex(d3dCtx, device, strideData, - vc, cDirty, xform, nxform); - // restore old values - if (oldfPosition) { - *(strideData->fpositionPtr) = fx; - *(strideData->fpositionPtr+1) = fy; - *(strideData->fpositionPtr+2) = fz; - } else { - *(strideData->dpositionPtr) = dx; - *(strideData->dpositionPtr+1) = dy; - *(strideData->dpositionPtr+2) = dz; - } - if (oldNormal) { - *(strideData->normalPtr) = nx; - *(strideData->normalPtr+1) = ny; - *(strideData->normalPtr+2) = nz; - } - if (oldfDiffuse) { - *(strideData->fdiffusePtr) = fr; - *(strideData->fdiffusePtr+1) = fg; - *(strideData->fdiffusePtr+2) = fb; - if (strideData->useAlpha) { - *(strideData->fdiffusePtr+3) = fa; - } - } else if (oldbDiffuse) { - *(strideData->bdiffusePtr) = br; - *(strideData->bdiffusePtr+1) = bg; - *(strideData->bdiffusePtr+2) = bb; - if (strideData->useAlpha) { - *(strideData->bdiffusePtr+3) = ba; - } - } - for (i=0; i < texSetUsed; i++) { - *(strideData->textureCoordsPtr[i]) = tx[i]; - *(strideData->textureCoordsPtr[i]+1) = ty[i]; - if (d3dCtx->texStride[i] > 2) { - *(strideData->textureCoordsPtr[i]+2) = tz[i]; - if (d3dCtx->texStride[i] > 3) { - *(strideData->textureCoordsPtr[i]+3) = tw[i]; - } - } - } - - vcount -= inc; - if (!success || (vcount <= 2)) { - break; - } - - if (oldfPosition) { - strideData->fpositionPtr += strideData->positionStride*inc; - fx = *strideData->fpositionPtr; - *strideData->fpositionPtr = *oldfPosition; - fy = *(strideData->fpositionPtr+1); - *(strideData->fpositionPtr+1) = *(oldfPosition+1); - fz = *(strideData->fpositionPtr+2); - *(strideData->fpositionPtr+2) = *(oldfPosition+2); - } else { - strideData->dpositionPtr += strideData->positionStride*inc; - dx = *strideData->dpositionPtr; - *strideData->dpositionPtr = *olddPosition; - dy = *(strideData->dpositionPtr+1); - *(strideData->dpositionPtr+1) = *(olddPosition+1); - dz = *(strideData->dpositionPtr+2); - *(strideData->dpositionPtr+2) = *(olddPosition+2); - } - - - if (oldNormal) { - strideData->normalPtr += strideData->normalStride*inc; - nx = *strideData->normalPtr; - *strideData->normalPtr = *oldNormal; - ny = *(strideData->normalPtr+1); - *(strideData->normalPtr+1) = *(oldNormal+1); - nz = *(strideData->normalPtr+2); - *(strideData->normalPtr+2) = *(oldNormal+2); - } - - if (oldfDiffuse) { - strideData->fdiffusePtr += strideData->diffuseStride*inc; - fr = *strideData->fdiffusePtr; - *strideData->fdiffusePtr = *oldfDiffuse; - fg = *(strideData->fdiffusePtr+1); - *(strideData->fdiffusePtr+1) = *(oldfDiffuse+1); - fb = *(strideData->fdiffusePtr+2); - *(strideData->fdiffusePtr+2) = *(oldfDiffuse+2); - if (strideData->useAlpha) { - fa = *(strideData->fdiffusePtr+3); - *(strideData->fdiffusePtr+3) = *(oldfDiffuse+3); - } - } else if (oldbDiffuse) { - strideData->bdiffusePtr += strideData->diffuseStride*inc; - br = *strideData->bdiffusePtr; - *strideData->bdiffusePtr = *oldbDiffuse; - bg = *(strideData->bdiffusePtr+1); - *(strideData->bdiffusePtr+1) = *(oldbDiffuse+1); - bb = *(strideData->bdiffusePtr+2); - *(strideData->bdiffusePtr+2) = *(oldbDiffuse+2); - if (strideData->useAlpha) { - ba = *(strideData->bdiffusePtr+3); - *(strideData->bdiffusePtr+3) = *(oldbDiffuse+3); - } - } - - for (i=0; i < texSetUsed; i++) { - strideData->textureCoordsPtr[i] += - strideData->textureCoordsStride[i]*inc; - - tx[i] = *strideData->textureCoordsPtr[i]; - ty[i] = *(strideData->textureCoordsPtr[i]+1); - *(strideData->textureCoordsPtr[i]) = *oldTexCoords[i]; - *(strideData->textureCoordsPtr[i]+1) = *(oldTexCoords[i]+1); - if (d3dCtx->texStride[i] > 2) { - tz[i] = *(strideData->textureCoordsPtr[i]+2); - *(strideData->textureCoordsPtr[i]+2) - = *(oldTexCoords[i]+ 2); - if (d3dCtx->texStride[i] > 3) { - tw[i] = *(strideData->textureCoordsPtr[i]+3); - *(strideData->textureCoordsPtr[i]+3) - = *(oldTexCoords[i]+ 3); - } - - } - } - - } - break; - } - case D3DPT_POINTLIST: - if (max == 0) { - max = maxVertexLimit; - } - // fall through - case D3DPT_LINESTRIP: - if (max == 0) { - max = maxVertexLimit; - min = 1; // repeat the last vertex; - } - // fall through - case D3DPT_TRIANGLELIST: - if (max == 0) { - if (d3dCtx->pVB->isIndexPrimitive) { - // QuadArray - max = maxVertexLimit - (maxVertexLimit % 4); - } else { - max = maxVertexLimit - (maxVertexLimit % 3); - } - } - // fall through - case D3DPT_LINELIST: - if (max == 0) { - max = maxVertexLimit - (maxVertexLimit % 2); - } - // fall through - case D3DPT_TRIANGLESTRIP: - if (max == 0) { - max = maxVertexLimit - (maxVertexLimit % 4); - min = 2; // repeat the last two vertices - } - inc = max - min; - - while (true) { - vc = (vcount >= max ? max : vcount); - - if (!createCopyVBVertex(d3dCtx, device, strideData, vc, - cDirty, xform, nxform)) { - break; - } - - vcount -= inc; - if (vcount <= min) { - break; - } - if (oldfPosition) { - strideData->fpositionPtr += strideData->positionStride*inc; - } else { - strideData->dpositionPtr += strideData->positionStride*inc; - } - - if (oldNormal) { - strideData->normalPtr += strideData->normalStride*inc; - } - if (oldfDiffuse) { - strideData->fdiffusePtr += strideData->diffuseStride*inc; - } else if (oldbDiffuse) { - strideData->bdiffusePtr += strideData->diffuseStride*inc; - } - for (i=0; i < texSetUsed; i++) { - strideData->textureCoordsPtr[i] += - strideData->textureCoordsStride[i]*inc; - } - } - break; - } - - // Restore old pointers; - strideData->fpositionPtr = oldfPosition; - strideData->dpositionPtr = olddPosition; - strideData->normalPtr = oldNormal; - strideData->fdiffusePtr = oldfDiffuse; - strideData->bdiffusePtr = oldbDiffuse; - - for (i=0; i < texSetUsed; i++) { - strideData->textureCoordsPtr[i] = oldTexCoords[i]; - } -} - - -BOOL reIndexifyIndexVertexToVBs(D3dCtx *d3dCtx, - D3DDRAWPRIMITIVESTRIDEDDATA* strideData, - DWORD indexCount, - DWORD vcount, - jint cDirty, - BOOL expandQuadIndex, - DWORD maxVertexLimit, - jdouble* xform, - jdouble* nxform) -{ - LPD3DVERTEXBUFFER vb = d3dCtx->pVB; - HRESULT hr; - LPDIRECT3DDEVICE9 device = d3dCtx->pDevice; - - int vbSize; - - if (!expandQuadIndex) { - vbSize = indexCount; - } else { - vbSize = (3*indexCount) >> 1; - } - - if (vb->stripLen > 0) { - // VertexBuffer already used, create a new one or used - // the next VB in the list - // maxVertexLimit is already check before, so we can - // pass indexCount as maxVertexLimit. - // The maximum vertex that can happens is equal - // to indexCount so we can just set vcount = indexCount - vb = vb->nextVB; - if ((vb != NULL) && (vb->vcount < vbSize)) { - delete vb; - d3dCtx->pVB->nextVB = NULL; - vb = NULL; - } - - if (vb == NULL) { - vb = new D3dVertexBuffer(); - if (vb == NULL) { - D3dCtx::d3dWarning(OUTOFMEMORY); - return false; - } - - vb->stride = d3dCtx->pVB->stride; - vb->vertexFormat = d3dCtx->pVB->vertexFormat; - // Don't set totalVertexCount - vb->isIndexPrimitive = d3dCtx->pVB->isIndexPrimitive; - vb->primitiveType = d3dCtx->pVB->primitiveType; - vb->isPointFlagUsed = d3dCtx->pVB->isPointFlagUsed; - vb->vcount = vbSize; - vb->maxVertexLimit = maxVertexLimit; - -#ifdef VBDEBUG - printf("Create secondary VertexBuffer of size %d, display list ID %d, pointFlag %d\n", - vbSize, d3dCtx->currDisplayListID, vb->isPointFlagUsed); -#endif - - if (!vb->isPointFlagUsed) { - hr = device->CreateVertexBuffer(vb->stride*vbSize, - D3DUSAGE_WRITEONLY, - vb->vertexFormat, - D3DPOOL_DEFAULT, - &vb->buffer, - NULL); - } else { - hr = device->CreateVertexBuffer(vb->stride*vbSize, - D3DUSAGE_WRITEONLY|D3DUSAGE_POINTS, - vb->vertexFormat, - D3DPOOL_DEFAULT, - &vb->buffer, - NULL); - vb->isPointFlagUsed = true; - } - - if (FAILED(hr)) { - vb->buffer = NULL; - vb->release(); - D3dCtx::d3dWarning(CREATEVBFAIL, hr); - return false; - } - d3dCtx->pVB->nextVB = vb; - cDirty = javax_media_j3d_GeometryArrayRetained_VERTEX_CHANGED; - } - } - - if (vb->indexBuffer == NULL) { - // No need to set totalIndexCount - vb->indexCount = vbSize; - - if (indexCount <= 0xffff) { - hr = device->CreateIndexBuffer(vbSize*sizeof(WORD), - D3DUSAGE_WRITEONLY, - D3DFMT_INDEX16, - D3DPOOL_DEFAULT, - &vb->indexBuffer, - NULL); - } else { - hr = device->CreateIndexBuffer(vbSize*sizeof(UINT), - D3DUSAGE_WRITEONLY, - D3DFMT_INDEX32, - D3DPOOL_DEFAULT, - &vb->indexBuffer, - NULL); - } - - if (FAILED(hr)) { - vb->indexBuffer = NULL; - vb->release(); - D3dCtx::d3dWarning(CREATEINDEXVBFAIL, hr); - return false; - } - - cDirty |= javax_media_j3d_GeometryArrayRetained_INDEX_CHANGED; - } - - float *vbptr; - // Note that DWORD (use for color) is of same size - // as float (use for vertex/normal) - hr = vb->buffer->Lock(0, 0, (VOID**)&vbptr, 0); - if (FAILED(hr)) { - D3dCtx::d3dWarning(LOCKVBFAIL, hr); - // recreate it next time - vb->release(); - return false; - } - - d3dCtx->pVB = vb; - - // The current VB is not yet used. - vb->stripLen = 0; - - if (cDirty) { - D3DINDEXBUFFER_DESC desc; - BYTE *bptr; - - vb->indexBuffer->GetDesc(&desc); - hr = vb->indexBuffer->Lock(0, 0, (VOID**)&bptr, 0); - if (FAILED(hr)) { - D3dCtx::d3dWarning(LOCKINDEXVBFAIL, hr); - vb->buffer->Unlock(); - return false; - } - - if (d3dCtx->reIndexifyTable == NULL) { - // vcount will not change during renderIndexGeometry - // and splitIndexVertex so it is safe not to check - // size of reIndexifyTable and recreate a bigger - // one. - d3dCtx->reIndexifyTable = new DWORD[vcount]; - if (d3dCtx->reIndexifyTable == NULL) { - D3dCtx::d3dWarning(OUTOFMEMORY, hr); - vb->release(); - return false; - } - - } - - ZeroMemory(d3dCtx->reIndexifyTable, sizeof(DWORD)*vcount); - - DWORD i; - jint *idxPtr = strideData->indexPtr + strideData->initialIndexIndex; - USHORT firstEntry = *idxPtr; - DWORD *table = d3dCtx->reIndexifyTable; - - if (desc.Format == D3DFMT_INDEX16) { - USHORT *dst = (USHORT *) bptr; - USHORT newIdx, prevIdx = -1, count = 0; - USHORT idx[3], vc = 0; - - for (i=0; i < indexCount; i++) { - newIdx = table[*idxPtr]; - if ((newIdx == 0) && (*idxPtr != firstEntry)) { - newIdx = ++count; - table[*idxPtr] = newIdx; - } - if (!expandQuadIndex) { - *dst++ = newIdx; - } else { - if (vc < 3) { - idx[vc++] = newIdx; - } else { - // vc = 3 - *dst++ = idx[0]; - *dst++ = idx[1]; - *dst++ = idx[2]; - *dst++ = idx[0]; - *dst++ = idx[2]; - *dst++ = newIdx; - vc = 0; - } - } - if (newIdx != prevIdx) { - copyOneVertexToVB(d3dCtx, &vbptr, strideData, - *idxPtr++, cDirty, xform, nxform); - prevIdx = newIdx; - } else { - idxPtr++; - } - - } - } else { - DWORD *dst = (DWORD *) bptr; - DWORD newIdx, prevIdx = -1, count = 0; - DWORD idx[3], vc = 0; - - for (i=0; i < indexCount; i++) { - newIdx = table[*idxPtr]; - if ((newIdx == 0) && (*idxPtr != firstEntry)) { - newIdx = ++count; - table[*idxPtr] = newIdx; - } - if (!expandQuadIndex) { - *dst++ = newIdx; - } else { - if (vc < 3) { - idx[vc++] = newIdx; - } else { - // vc = 3 - *dst++ = idx[0]; - *dst++ = idx[1]; - *dst++ = idx[2]; - *dst++ = idx[0]; - *dst++ = idx[2]; - *dst++ = newIdx; - vc = 0; - } - } - if (newIdx != prevIdx) { - copyOneVertexToVB(d3dCtx, &vbptr, strideData, - *idxPtr++, cDirty, xform, nxform); - prevIdx = newIdx; - } else { - idxPtr++; - } - } - } - } - - - vb->addStride(vbSize); - vb->indexBuffer->Unlock(); - vb->buffer->Unlock(); - return true; -} - - -void splitIndexVertexToMultipleVB(D3dCtx *d3dCtx, - LPD3DDRAWPRIMITIVESTRIDEDDATA strideData, - int indexCount, - int vertexCount, - int maxVertexLimit, - jint cDirty, - BOOL expandQuadIndex, - jdouble* xform, - jdouble* nxform) -{ - int vc; - BOOL success; - int inc; - int min = 0; - int max = 0; - int initialIdxIdx = strideData->initialIndexIndex; - - - switch (d3dCtx->pVB->primitiveType) { - case D3DPT_TRIANGLEFAN: - { - jint firstIdx = strideData->indexPtr[initialIdxIdx]; - jint prevIdx = firstIdx; - - inc = maxVertexLimit - 2; - - while (true) { - vc = (indexCount >= maxVertexLimit ? maxVertexLimit : indexCount); - success = reIndexifyIndexVertexToVBs(d3dCtx, - strideData, - vc, - vertexCount, - cDirty, - expandQuadIndex, - maxVertexLimit, - xform, nxform); - // restore index - strideData->indexPtr[strideData->initialIndexIndex] = prevIdx; - indexCount -= inc; - - if (!success || (indexCount <= 2)) { - break; - } - // repeat the last index - strideData->initialIndexIndex += (vc - 2); - // replace by first index - prevIdx = strideData->indexPtr[strideData->initialIndexIndex]; - strideData->indexPtr[strideData->initialIndexIndex] = firstIdx; - } - } - break; - case D3DPT_POINTLIST: - if (max == 0) { - max = maxVertexLimit; - } - // fall through - case D3DPT_LINESTRIP: - if (max == 0) { - max = maxVertexLimit; - min = 1; // repeat the last vertex; - } - // fall through - case D3DPT_TRIANGLELIST: - if (max == 0) { - if (expandQuadIndex) { - // QuadArray - max = maxVertexLimit - (maxVertexLimit % 4); - } else { - max = maxVertexLimit - (maxVertexLimit % 3); - } - } - // fall through - case D3DPT_LINELIST: - if (max == 0) { - max = maxVertexLimit - (maxVertexLimit % 2); - } - // fall through - case D3DPT_TRIANGLESTRIP: - if (max == 0) { - max = maxVertexLimit - (maxVertexLimit % 4); - min = 2; // repeat the last two vertices - } - inc = max - min; - - while (true) { - vc = (indexCount >= max ? max : indexCount); - - if (!reIndexifyIndexVertexToVBs(d3dCtx, - strideData, - vc, - vertexCount, - cDirty, - expandQuadIndex, - maxVertexLimit, - xform, nxform)) { - break; - } - - indexCount -= inc; - if (indexCount <= min) { - break; - } - strideData->initialIndexIndex += inc; - } - } - strideData->initialIndexIndex = initialIdxIdx; -} - -// This is used by quad polygon line mode -void DrawPolygonLine(D3dCtx *d3dCtx, - LPDIRECT3DDEVICE9 device, - DWORD vertexFormat, - D3DDRAWPRIMITIVESTRIDEDDATA *strideData) -{ - HRESULT hr; - float *vbptr; - - 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); - d3dCtx->pVB->buffer->Unlock(); - 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, - LPDIRECT3DDEVICE9 device, - DWORD vertexFormat, - D3DDRAWPRIMITIVESTRIDEDDATA *strideData, - jint idx0, jint idx1, jint idx2, jint idx3) -{ - HRESULT hr; - float *vbptr; - - hr = d3dCtx->pVB->buffer->Lock(0, 0, (VOID**) &vbptr, 0 ); - if (FAILED(hr)) { - D3dCtx::d3dWarning(LOCKVBFAIL, hr); - return; - } - - copyOneVertexToVB(d3dCtx, &vbptr, strideData, idx0, - javax_media_j3d_GeometryArrayRetained_VERTEX_CHANGED, - NULL, NULL); - copyOneVertexToVB(d3dCtx, &vbptr, strideData, idx1, - javax_media_j3d_GeometryArrayRetained_VERTEX_CHANGED, - NULL, NULL); - copyOneVertexToVB(d3dCtx, &vbptr, strideData, idx2, - javax_media_j3d_GeometryArrayRetained_VERTEX_CHANGED, - NULL, NULL); - copyOneVertexToVB(d3dCtx, &vbptr, strideData, idx3, - javax_media_j3d_GeometryArrayRetained_VERTEX_CHANGED, - NULL, NULL); - - d3dCtx->pVB->buffer->Unlock(); - 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, 0, 4, 0, 4); -} - - -void renderGeometry(JNIEnv *env, - D3dCtx *d3dCtx, - LPDIRECT3DDEVICE9 device, - jobject geo, - jint geo_type, - D3DDRAWPRIMITIVESTRIDEDDATA *strideData, - DWORD vertexFormat, - jint vcount, - jdouble* xform, - jdouble* nxform, - jint cDirty) -{ - D3DPRIMITIVETYPE d3dRenderType; - BOOL renderTypeSet = false; - int i, j, genMode; - LPD3DVERTEXBUFFER vb = NULL; - D3dVertexBufferVector *vbVector; - float *vbptr; - -#ifdef VBDEBUG - BOOL createNew = false; -#endif - - if (vcount <= 0) { - return; - } - - jclass geoClass = env->GetObjectClass(geo); - DWORD maxVertexLimit = d3dCtx->deviceInfo->maxVertexCount[geo_type]; - DWORD texSetUsed = d3dCtx->texSetUsed; - HRESULT hr; - BOOL needPointFlag = (geo_type == GEO_TYPE_POINT_SET) || - ((geo_type != GEO_TYPE_LINE_STRIP_SET) && - (geo_type != GEO_TYPE_LINE_SET) && - (d3dCtx->fillMode == D3DFILL_POINT)); - - BOOL buildDL = (d3dCtx->currDisplayListID > 0); - - lockGeometry(); - - if (!buildDL) { - jfieldID fieldID = env->GetFieldID(geoClass, "pVertexBuffers", "J"); - jobject cloneSource = NULL; - - vbVector = reinterpret_cast<D3dVertexBufferVector *> - (env->GetLongField(geo, fieldID)); - - if (vbVector == NULL) { - // It is possible this is the mirrorGeometry - // from cloneNonIndexGeometry() - jfieldID fieldID2 = env->GetFieldID(geoClass, - "cloneSourceArray", - "Ljavax/media/j3d/IndexedGeometryArrayRetained;"); - cloneSource = env->GetObjectField(geo, fieldID2); - - if (cloneSource != NULL) { - jclass cloneClass = env->GetObjectClass(cloneSource); - fieldID = env->GetFieldID(cloneClass, "pVertexBuffers", "J"); - - vbVector = reinterpret_cast<D3dVertexBufferVector *> - (env->GetLongField(cloneSource, fieldID)); - } - - } - - - // This is the first time rendering is invoked on the - // first GeometryArray - if (vbVector == NULL) { - vbVector = new D3dVertexBufferVector(); - if (vbVector == NULL) { - D3dCtx::d3dWarning(OUTOFMEMORY); - unlockGeometry(); - return; - } - if (cloneSource == NULL) { - env->SetLongField(geo, fieldID, - reinterpret_cast<long>(vbVector)); - } else { - env->SetLongField(cloneSource, fieldID, - reinterpret_cast<long>(vbVector)); - } - - } else { - // Found the vb in the list of vbVector - for (ITER_LPD3DVERTEXBUFFER s = vbVector->begin(); - s != vbVector->end(); ++s) { - if ((*s)->ctx == d3dCtx) { - vb = *s; - break; - } - } - } - } - - if (vb == NULL) { - // This is the first time rendering is invoked - // using this ctx - vb = new D3dVertexBuffer(); - - if (vb == NULL) { - D3dCtx::d3dWarning(OUTOFMEMORY); - unlockGeometry(); - return; - } - vb->ctx = d3dCtx; - vb->maxVertexLimit = maxVertexLimit; - - if (!buildDL) { - vb->vbVector = vbVector; - - // add it to the GeometryArray pVertexBuffers list - vbVector->push_back(vb); - - // add it to the ctx lists - vb->next = d3dCtx->vertexBufferTable.next; - vb->previous = &(d3dCtx->vertexBufferTable); - d3dCtx->vertexBufferTable.next = vb; - if (vb->next != NULL) { - vb->next->previous = vb; - } - } - } - - if ((vb->buffer != NULL) && - ((vb->vertexFormat != vertexFormat) || - (vb->totalVertexCount < vcount) || - (cDirty & - javax_media_j3d_GeometryArrayRetained_STRIPCOUNT_CHANGED) || - (!vb->isPointFlagUsed && needPointFlag))) { - // immediate release VB and reconstruct a new one - vb->release(); - } - - if (vb->buffer == NULL) { - vb->stride = D3DXGetFVFVertexSize(vertexFormat); - vb->vertexFormat = vertexFormat; - vb->totalVertexCount = vcount; - vb->vcount = (vcount >= maxVertexLimit ? maxVertexLimit : vcount); -#ifdef VBDEBUG - printf("Create primary VertexBuffer of size %d, display list ID %d, pointFlag %d\n", - vb->vcount, d3dCtx->currDisplayListID, needPointFlag); -#endif - if (!needPointFlag) { - hr = device->CreateVertexBuffer(vb->stride*vb->vcount, - D3DUSAGE_WRITEONLY, - vertexFormat, - D3DPOOL_DEFAULT, - &vb->buffer, - NULL); - } else { - hr = device->CreateVertexBuffer(vb->stride*vb->vcount, - D3DUSAGE_WRITEONLY|D3DUSAGE_POINTS, - vertexFormat, - D3DPOOL_DEFAULT, - &vb->buffer, - NULL); - vb->isPointFlagUsed = true; - } - - if (FAILED(hr)) { - vb->buffer = NULL; - D3dCtx::d3dWarning(CREATEVBFAIL, hr); - unlockGeometry(); - return; - } -#ifdef VBDEBUG - createNew = true; -#endif - cDirty = javax_media_j3d_GeometryArrayRetained_VERTEX_CHANGED; - } - - unlockGeometry(); - - if (buildDL) { - // In display list mode, add it to the displayList ID table - d3dCtx->displayListTable[d3dCtx->currDisplayListID]->add(vb); - } else { - - if (vb->primitiveType == D3DPT_FORCE_DWORD) { - // This happens when previous frame use Quad Line - // so buffer not yet initialize - cDirty = javax_media_j3d_GeometryArrayRetained_VERTEX_CHANGED; - } - - if (!cDirty && - ((geo_type != GEO_TYPE_QUAD_SET) || - (d3dCtx->fillMode != D3DFILL_WIREFRAME))) { - for (i=0; i < d3dCtx->texSetUsed; i++) { - genMode = strideData->texCoordPosition[i]; - if ((genMode == TEX_OBJ_LINEAR) || - ((genMode != vb->texCoordPosition[i]) && - (genMode != TEX_GEN_AUTO))) { - // For object linear mode user can set the plane - // equations so we need to change texture coordinate. - break; - } - } - if (i == d3dCtx->texSetUsed) { - vb->render(d3dCtx); -#ifdef TEXDEBUG - printf("Skip VB Copy\n"); -#endif - return; - } - } - } - - // Note that DWORD (use for color) is of same size - // as float (use for vertex/normal) - - hr = vb->buffer->Lock(0, 0, (VOID**)&vbptr, 0); - if (FAILED(hr)) { - D3dCtx::d3dWarning(LOCKVBFAIL, hr); - // recreate it next time - vb->release(); - return; - } - - d3dCtx->pVB = vb; - // The current VB is not yet used. - vb->stripLen = 0; - - switch (geo_type) { - case GEO_TYPE_TRI_STRIP_SET: - d3dRenderType = D3DPT_TRIANGLESTRIP; - renderTypeSet = true; -#ifdef VBDEBUG - if (createNew) { - printf("Tri strip set %d\n", vcount); - } -#endif - // fall through - case GEO_TYPE_TRI_FAN_SET: - if (renderTypeSet == false) { -#ifdef VBDEBUG - if (createNew) { - printf("Tri fan set %d\n", vcount); - } -#endif - d3dRenderType = D3DPT_TRIANGLEFAN; - renderTypeSet = true; - } - // fall through - case GEO_TYPE_LINE_STRIP_SET: - { - if (renderTypeSet == false) { - d3dRenderType = D3DPT_LINESTRIP; - renderTypeSet = true; -#ifdef VBDEBUG - if (createNew) { - printf("Tri line set %d \n", vcount); - } -#endif - } - - jfieldID strip_field = env->GetFieldID(geoClass, - "stripVertexCounts", "[I"); - jarray sarray = (jarray)env->GetObjectField(geo, strip_field); - jsize strip_len = (jsize)env->GetArrayLength(sarray); - - jint* strips = (jint *)env->GetPrimitiveArrayCritical(sarray, NULL); - - int nlastStrip = 0; - int totalLen = 0; - int oldTotalLen = 0; - int vsum = 0; - - vb->primitiveType = d3dRenderType; - - if (vcount <= vb->vcount) { - copyVertexToVB(d3dCtx, strideData, vcount, - &vbptr, cDirty, false, xform, nxform); - vb->addStrides(strip_len, strips); -#ifdef VBDEBUG - if (createNew) { - printf("Strip Length %d : ", strip_len); - for (int k=0; k < strip_len; k++) { - printf("%d ", strips[k]); - } - printf("\n"); - } -#endif - } else { -#ifdef VBDEBUG - if (createNew) { - printf("Strip Length %d : ", strip_len); - } -#endif - - for (i = 0; i < strip_len; i++) { - if (strideData->fpositionPtr) { - strideData->fpositionPtr += - strideData->positionStride*nlastStrip; - } else { - strideData->dpositionPtr += - strideData->positionStride*nlastStrip; - } - - if (strideData->normalPtr) { - strideData->normalPtr += - strideData->normalStride*nlastStrip; - } - - if (strideData->fdiffusePtr) { - strideData->fdiffusePtr += - strideData->diffuseStride*nlastStrip; - } else if (strideData->bdiffusePtr) { - strideData->bdiffusePtr += - strideData->diffuseStride*nlastStrip; - } - - - if (strideData->textureCoordsPtr[0]) { - for (j=0; j < texSetUsed; j++) { - strideData->textureCoordsPtr[j] += - strideData->textureCoordsStride[j]* nlastStrip; - } - } - - - nlastStrip = strips[i]; - oldTotalLen = totalLen; - totalLen += nlastStrip; - - if (totalLen > vcount) { - // This should not happen since - // setValidVertexCount is disable - // in v1.3. We should always have - // (sum of strips[] < vcount) - nlastStrip = (vcount - (totalLen - nlastStrip)); - totalLen = vcount; - } - - if (nlastStrip <= 0) { - continue; - } - - - if (vbptr == NULL) { - // This happen when the lastStrip copy - // is greater than maxVertexLimit. - // So we Unlock the last buffer - vbptr = allocateVB(d3dCtx, device, - vcount - oldTotalLen, - maxVertexLimit, &cDirty); - vsum = 0; - if (vbptr == NULL) { - break; // render whatever geometry the current VB have - } - } -#ifdef VBDEBUG - if (createNew) { - printf(" %d ", nlastStrip); - } -#endif - if ((vsum + nlastStrip) <= d3dCtx->pVB->vcount) { - // There is space available to put in vertices - vsum += nlastStrip; - copyVertexToVB(d3dCtx, strideData, nlastStrip, - &vbptr, cDirty, true, xform, nxform); - } else { - // Need to create a new VB - if (nlastStrip <= maxVertexLimit) { - // No need to split strip in multiple VB - if (d3dCtx->pVB->stripLen > 0) { - if (vbptr != NULL) { - d3dCtx->pVB->buffer->Unlock(); - } - vbptr = allocateVB(d3dCtx, device, - vcount - oldTotalLen, - maxVertexLimit, &cDirty); - if (vbptr == NULL) { - break; - } - vsum = 0; - } - vsum += nlastStrip; - copyVertexToVB(d3dCtx, strideData, nlastStrip, - &vbptr, cDirty, true, - xform, nxform); - } else { - d3dCtx->pVB->buffer->Unlock(); - vbptr = NULL; - vsum = 0; - // Multiple VBs for large vertex size - splitVertexToMultipleVB(d3dCtx, strideData, - nlastStrip, - maxVertexLimit, - cDirty, xform, nxform); - vbptr = NULL; - } - } - } -#ifdef VBDEBUG - if (createNew) { - printf("\n"); - } -#endif - } - env->ReleasePrimitiveArrayCritical(sarray, strips, NULL); - } - break; - case GEO_TYPE_QUAD_SET: -#ifdef VBDEBUG - if (createNew) { - printf("quad set %d\n", vcount); - } -#endif - - if (buildDL || - (d3dCtx->fillMode != D3DFILL_WIREFRAME)) { - /* - * Note we can't just check - * if (d3dCtx->fillMode != D3DFILL_WIREFRAME) - * since the fillMode may set back to - * non-line mode AFTER build display list - * In fact it is gaurantee that when displaylist - * mode is used we are not in line mode - */ - - // break down solid into two triangles - if (createQuadIndices(d3dCtx, vcount)) { - // It happens when - // vcount*3/2 != d3dCtx->quadIndexBufferSize - // to conform with index buffer Limitation in - // graphics card. So we adjust using a smaller - // maxVertexLimit when spliting into - // multiple Vertex Buffers. - maxVertexLimit = 2*d3dCtx->quadIndexBufferSize/3; - vb->maxVertexLimit = maxVertexLimit; - vb->vcount = vb->maxVertexLimit; - } - d3dRenderType = D3DPT_TRIANGLELIST; - vb->isIndexPrimitive = true; - renderTypeSet = true; - // fall through - } - else - { // 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 !!! - int len = vcount >> 2; - int offsetPos = 0; - int offsetNorm = 0; - int offsetColor = 0; - int strideOffsetPos = strideData->positionStride << 2; - int strideOffsetNorm = strideData->normalStride << 2; - int strideOffsetColor = strideData->diffuseStride << 2; - jfloat *pdf = strideData->fpositionPtr; - jdouble *pdd = strideData->dpositionPtr; - jfloat *pn = strideData->normalPtr; - jfloat *pcf = strideData->fdiffusePtr; - jbyte *pcb = strideData->bdiffusePtr; - jfloat* pt[D3DDP_MAXTEXCOORD]; - - pt[0] = NULL; - - if (((vertexFormat & D3DFVF_DIFFUSE) == 0) && - (!d3dCtx->isLightEnable)) { - d3dCtx->setAmbientLightMaterial(); - } - - vb->buffer->Unlock(); - vbptr = NULL; -#ifdef VBDEBUG - if (createNew) { - printf("quad set polygon line %d\n", vcount); - } -#endif - - for (i=0; i < texSetUsed; i++) { - pt[i] = (FLOAT *) strideData->textureCoordsPtr[i]; - } - - jfloat *fptr; - jdouble *dptr; - jbyte *bptr; - jfloat *fspt; - jdouble *dspt; - int posStride = strideData->positionStride; - D3DVERTEX worldCoord[3]; - D3DTLVERTEX screenCoord[3]; - - vb->primitiveType = D3DPT_FORCE_DWORD; - - if (d3dCtx->lineModeIndexBuffer == NULL) { - createLineModeIndexBuffer(d3dCtx); - } - - for (i = 0; i < (vcount >> 2); i++) { - if (pdf) { - fspt = fptr = pdf + offsetPos; - strideData->fpositionPtr = fptr; - } else { - dspt = dptr = pdd + offsetPos; - strideData->dpositionPtr = dptr; - } - - if (pn) { - fptr = pn + offsetNorm; - strideData->normalPtr = fptr; - } - - if (pcf) { - fptr = pcf + offsetColor; - strideData->fdiffusePtr = fptr; - } else if (pcb) { - bptr = pcb + offsetColor; - strideData->bdiffusePtr = bptr; - } - - if (pt[0]) { - for (j=0; j < texSetUsed; j++) { - DWORD stride3 = 3*strideData->textureCoordsStride[j]; - fptr = pt[j] + i*(strideData->textureCoordsStride[j] << 2); - strideData->textureCoordsPtr[j] = fptr; - } - } - if (d3dCtx->cullMode != D3DCULL_NONE) { - // Do back face culling here - if (pdf) { - worldCoord[0].x = fspt[0]; - worldCoord[0].y = fspt[1]; - worldCoord[0].z = fspt[2]; - fspt += posStride; - worldCoord[1].x = fspt[0]; - worldCoord[1].y = fspt[1]; - worldCoord[1].z = fspt[2]; - fspt += posStride; - worldCoord[2].x = fspt[0]; - worldCoord[2].y = fspt[1]; - worldCoord[2].z = fspt[2]; - } else { - worldCoord[0].x = dspt[0]; - worldCoord[0].y = dspt[1]; - worldCoord[0].z = dspt[2]; - dspt += posStride; - worldCoord[1].x = dspt[0]; - worldCoord[1].y = dspt[1]; - worldCoord[1].z = dspt[2]; - dspt += posStride; - worldCoord[2].x = dspt[0]; - worldCoord[2].y = dspt[1]; - worldCoord[2].z = dspt[2]; - } - d3dCtx->transform(&worldCoord[0], &screenCoord[0]); - d3dCtx->transform(&worldCoord[1], &screenCoord[1]); - d3dCtx->transform(&worldCoord[2], &screenCoord[2]); - screenCoord[0].sx -= screenCoord[1].sx; - screenCoord[0].sy -= screenCoord[1].sy; - screenCoord[2].sx -= screenCoord[1].sx; - screenCoord[2].sy -= screenCoord[1].sy; - if (d3dCtx->cullMode == D3DCULL_CW) { - // clip back face - if ((screenCoord[0].sx*screenCoord[2].sy - - screenCoord[2].sx*screenCoord[0].sy) >= 0) { - DrawPolygonLine(d3dCtx, - device, - vertexFormat, - strideData); - } - } else { // Clip front face - if ((screenCoord[0].sx*screenCoord[2].sy - - screenCoord[2].sx*screenCoord[0].sy) <= 0) { - DrawPolygonLine(d3dCtx, - device, - vertexFormat, - strideData); - } - } - } else { - // cullMode == D3DCULL_NONE - DrawPolygonLine(d3dCtx, - device, - vertexFormat, - strideData); - } - offsetPos += strideOffsetPos; - offsetNorm += strideOffsetNorm; - offsetColor += strideOffsetColor; - } - - if (((vertexFormat & D3DFVF_DIFFUSE) == 0) && - (!d3dCtx->isLightEnable)) { - d3dCtx->restoreDefaultLightMaterial(); - } - // Don't call vb->Renderer() at the end - return; - } - // fallthrough - case GEO_TYPE_TRI_SET: - if (renderTypeSet == false) { - d3dRenderType = D3DPT_TRIANGLELIST; - renderTypeSet = true; -#ifdef VBDEBUG - if (createNew) { - printf("tri set %d\n", vcount); - } -#endif - } - // fallthrough - case GEO_TYPE_LINE_SET: - if (renderTypeSet == false) { - d3dRenderType = D3DPT_LINELIST; - renderTypeSet = true; -#ifdef VBDEBUG - if (createNew) { - printf("line set %d\n", vcount); - } -#endif - } - // fallthrough - case GEO_TYPE_POINT_SET: - if (renderTypeSet == false) { - d3dRenderType = D3DPT_POINTLIST; -#ifdef VBDEBUG - if (createNew) { - printf("point set %d\n", vcount); - } -#endif - } - vb->primitiveType = d3dRenderType; - - if (vcount <= vb->vcount) { - copyVertexToVB(d3dCtx, strideData, vcount, &vbptr, - cDirty, true, xform, nxform); - } else { - if (vbptr != NULL) { - vb->buffer->Unlock(); - vbptr = NULL; - } - - splitVertexToMultipleVB(d3dCtx, strideData, vcount, - maxVertexLimit, - cDirty, xform, nxform); - vbptr = NULL; - } - break; - default: - printf("GeometryArrayRetained_execute:unknown geo_type %ld \n", geo_type); - } - - if (vbptr != NULL) { - // d3dCtx->pVB is the last reference in VB list - d3dCtx->pVB->buffer->Unlock(); - } - - for (i=0; i < d3dCtx->texSetUsed; i++) { - d3dCtx->pVB->texCoordPosition[i] = - strideData->texCoordPosition[i]; - } - - if (!buildDL) { - // Not in displaylist mode, directly render VB - // vb is the root reference in VB list - vb->render(d3dCtx); - } -} - - -void renderIndexGeometry(JNIEnv *env, - D3dCtx *d3dCtx, - LPDIRECT3DDEVICE9 device, - jobject geo, - jint geo_type, - D3DDRAWPRIMITIVESTRIDEDDATA *strideData, - DWORD vertexFormat, - jint vcount, - jint indexCount, - jdouble* xform, - jdouble* nxform, - jint cDirty) -{ - D3DPRIMITIVETYPE d3dRenderType; - BOOL renderTypeSet = false; - BOOL expandQuadIndex = false; - int i; - LPD3DVERTEXBUFFER vb = NULL; - D3dVertexBufferVector *vbVector; - float *vbptr; - -#ifdef VBDEBUG - BOOL createNew = false; -#endif - - if (indexCount <= 0) { - return; - } - - jclass geoClass = env->GetObjectClass(geo); - DWORD maxVertexLimit = - min(d3dCtx->deviceInfo->maxVertexCount[geo_type], - d3dCtx->deviceInfo->maxVertexIndex); - DWORD texSetUsed = d3dCtx->texSetUsed; - HRESULT hr; - BOOL needPointFlag = (geo_type == GEO_TYPE_INDEXED_POINT_SET) || - ((geo_type != GEO_TYPE_INDEXED_LINE_STRIP_SET) && - (geo_type != GEO_TYPE_INDEXED_LINE_SET) && - (d3dCtx->fillMode == D3DFILL_POINT)); - - BOOL buildDL = (d3dCtx->currDisplayListID > 0); - - if (geo_type == GEO_TYPE_INDEXED_QUAD_SET) { - // Since the index we create with be 1.5 times the original index - maxVertexLimit = 2*maxVertexLimit/3; - } - - - lockGeometry(); - - if (!buildDL) { - jfieldID fieldID = env->GetFieldID(geoClass, "pVertexBuffers", "J"); - vbVector = reinterpret_cast<D3dVertexBufferVector *> - (env->GetLongField(geo, fieldID)); - - if (vbVector == NULL) { - // This is the first time rendering is invoked on the - // first GeometryArray - vbVector = new D3dVertexBufferVector(); - if (vbVector == NULL) { - D3dCtx::d3dWarning(OUTOFMEMORY); - unlockGeometry(); - return; - } - env->SetLongField(geo, fieldID, reinterpret_cast<long>(vbVector)); - } else { - // Found the vb in the list of vbVector - for (ITER_LPD3DVERTEXBUFFER s = vbVector->begin(); - s != vbVector->end(); ++s) { - if ((*s)->ctx == d3dCtx) { - vb = *s; - break; - } - } - } - } - - if (vb == NULL) { - // This is the first time rendering is invoked - // using this ctx - vb = new D3dVertexBuffer(); - - if (vb == NULL) { - D3dCtx::d3dWarning(OUTOFMEMORY); - unlockGeometry(); - return; - } - vb->ctx = d3dCtx; - vb->maxVertexLimit = maxVertexLimit; - - if (!buildDL) { - vb->vbVector = vbVector; - - // add it to the GeometryArray pVertexBuffers list - vbVector->push_back(vb); - - // add it to the ctx lists - vb->next = d3dCtx->vertexBufferTable.next; - vb->previous = &(d3dCtx->vertexBufferTable); - d3dCtx->vertexBufferTable.next = vb; - if (vb->next != NULL) { - vb->next->previous = vb; - } - } - } - - if (((vb->indexBuffer != NULL) && - (vb->totalIndexCount < indexCount)) || - ((vb->buffer != NULL) && - ((vb->vertexFormat != vertexFormat) || - (vb->totalVertexCount < vcount) || - (!vb->isPointFlagUsed && needPointFlag)))) { - // immediate release VB and reconstruct a new one - vb->release(); - } - - - if (vb->buffer == NULL) { - vb->stride = D3DXGetFVFVertexSize(vertexFormat); - vb->vertexFormat = vertexFormat; - vb->totalVertexCount = vcount; - vb->isIndexPrimitive = true; - vb->vcount = (vcount >= maxVertexLimit ? maxVertexLimit : vcount); -#ifdef VBDEBUG - printf("Create primary VertexBuffer of size %d, display list ID %d, pointFlag %d\n", - vb->vcount, d3dCtx->currDisplayListID, needPointFlag); -#endif - - if (!needPointFlag) { - hr = device->CreateVertexBuffer(vb->stride*vb->vcount, - D3DUSAGE_WRITEONLY, - vertexFormat, - D3DPOOL_DEFAULT, - &vb->buffer, - NULL); - } else { - hr = device->CreateVertexBuffer(vb->stride*vb->vcount, - D3DUSAGE_WRITEONLY|D3DUSAGE_POINTS, - vertexFormat, - D3DPOOL_DEFAULT, - &vb->buffer, - NULL); - vb->isPointFlagUsed = true; - } - - if (FAILED(hr)) { - vb->buffer = NULL; - D3dCtx::d3dWarning(CREATEVBFAIL, hr); - unlockGeometry(); - return; - } -#ifdef VBDEBUG - createNew = true; -#endif - cDirty = javax_media_j3d_GeometryArrayRetained_VERTEX_CHANGED; - } - - if (vb->indexBuffer == NULL) { - - vb->totalIndexCount = indexCount; - vb->indexCount = (indexCount >= maxVertexLimit ? - maxVertexLimit : indexCount); - - if (geo_type == GEO_TYPE_INDEXED_QUAD_SET) { - // Since we will construct another index with - // 1.5 times of the original. - vb->indexCount = (3*vb->indexCount) >> 1; - vb->totalIndexCount = (3*indexCount) >> 1; - } - - - if (indexCount <= 0xffff) { - hr = device->CreateIndexBuffer(vb->indexCount*sizeof(WORD), - D3DUSAGE_WRITEONLY, - D3DFMT_INDEX16, - D3DPOOL_DEFAULT, - &vb->indexBuffer, - NULL); - } else { - hr = device->CreateIndexBuffer(vb->indexCount*sizeof(UINT), - D3DUSAGE_WRITEONLY, - D3DFMT_INDEX32, - D3DPOOL_DEFAULT, - &vb->indexBuffer, - NULL); - } - - if (FAILED(hr)) { - vb->indexBuffer = NULL; - D3dCtx::d3dWarning(CREATEINDEXVBFAIL, hr); - unlockGeometry(); - return; - } - - cDirty |= javax_media_j3d_GeometryArrayRetained_INDEX_CHANGED; - } - - unlockGeometry(); - - if (buildDL) { - // In display list mode, add it to the displayList ID table - d3dCtx->displayListTable[d3dCtx->currDisplayListID]->add(vb); - } else { - - if (vb->primitiveType == D3DPT_FORCE_DWORD) { - // This happens when previous frame use Quad Line - // so buffer not yet initialize - cDirty = - javax_media_j3d_GeometryArrayRetained_VERTEX_CHANGED | - javax_media_j3d_GeometryArrayRetained_INDEX_CHANGED; - } - - if (!cDirty && - ((geo_type != GEO_TYPE_INDEXED_QUAD_SET) || - (d3dCtx->fillMode != D3DFILL_WIREFRAME))) { - for (i=0; i < d3dCtx->texSetUsed; i++) { - if ((strideData->texCoordPosition[i] != - vb->texCoordPosition[i]) - && - (strideData->texCoordPosition[i] != TEX_GEN_AUTO)) { - break; - } - } - if (i == d3dCtx->texSetUsed) { - vb->render(d3dCtx); - return; - } - } - } - - // Note that DWORD (use for color) is of same size - // as float (use for vertex/normal) - hr = vb->buffer->Lock(0, 0, (VOID**)&vbptr, 0); - if (FAILED(hr)) { - D3dCtx::d3dWarning(LOCKVBFAIL, hr); - // recreate it next time - vb->release(); - return; - } - - d3dCtx->pVB = vb; - - // The current VB is not yet used. - vb->stripLen = 0; - - switch (geo_type) { - case GEO_TYPE_INDEXED_TRI_STRIP_SET: - d3dRenderType = D3DPT_TRIANGLESTRIP; - renderTypeSet = true; -#ifdef VBDEBUG - if (createNew) { - printf("Tri strip set %d\n", vcount); - } -#endif - // fall through - case GEO_TYPE_INDEXED_TRI_FAN_SET: - if (renderTypeSet == false) { -#ifdef VBDEBUG - if (createNew) { - printf("Tri fan set %d\n", vcount); - } -#endif - d3dRenderType = D3DPT_TRIANGLEFAN; - renderTypeSet = true; - } - // fall through - case GEO_TYPE_INDEXED_LINE_STRIP_SET: - { - if (renderTypeSet == false) { - d3dRenderType = D3DPT_LINESTRIP; - renderTypeSet = true; -#ifdef VBDEBUG - if (createNew) { - printf("Tri line set %d \n", vcount); - } -#endif - } - - jfieldID strip_field = env->GetFieldID(geoClass, - "stripIndexCounts", "[I"); - jarray sarray = (jarray)env->GetObjectField(geo, strip_field); - jsize strip_len = (jsize)env->GetArrayLength(sarray); - - jint* strips = (jint *)env->GetPrimitiveArrayCritical(sarray, NULL); - int nlastStrip = 0; - - vb->primitiveType = d3dRenderType; -#ifdef VBDEBUG - if (createNew) { - printf("Strip Length %d : ", strip_len); - } -#endif - - if ((vb->totalIndexCount <= vb->indexCount) && - (vcount <= vb->vcount)) { - copyIndexVertexToVB(d3dCtx, strideData, - indexCount, cDirty, false, false); - copyVertexToVB(d3dCtx, strideData, vcount, - &vbptr, cDirty, false, xform, nxform); - vb->addStrides(strip_len, strips); - } else { - vb->buffer->Unlock(); - vbptr = NULL; - strideData->indexPtr += strideData->initialIndexIndex; - strideData->initialIndexIndex = 0; - for (i = 0; i < strip_len; i++) { - strideData->indexPtr += nlastStrip; - - nlastStrip = strips[i]; - - if (nlastStrip <= 0) { - continue; - } -#ifdef VBDEBUG - if (createNew) { - printf(" %d", nlastStrip); - } -#endif - if (nlastStrip <= vb->indexCount) { - reIndexifyIndexVertexToVBs(d3dCtx, strideData, - nlastStrip, vcount, - cDirty, - false, - maxVertexLimit, - xform, nxform); - } else { - // Multiple VBs for large vertex size - splitIndexVertexToMultipleVB(d3dCtx, - strideData, - nlastStrip, - vcount, - maxVertexLimit, - cDirty, - false, - xform, nxform); - } - SafeDelete(d3dCtx->reIndexifyTable); - } -#ifdef VBDEBUG - if (createNew) { - printf("\n"); - } -#endif - } - env->ReleasePrimitiveArrayCritical(sarray, strips, NULL); - } - - break; - case GEO_TYPE_INDEXED_QUAD_SET: -#ifdef VBDEBUG - if (createNew) { - printf("quad set %d\n", vcount); - } -#endif - if (buildDL || - (d3dCtx->fillMode != D3DFILL_WIREFRAME)) { - d3dRenderType = D3DPT_TRIANGLELIST; - renderTypeSet = true; - expandQuadIndex = true; - // fall through - } - // 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 !!! - int posStride = strideData->positionStride; - D3DVERTEX worldCoord[3]; - D3DTLVERTEX screenCoord[3]; - jint *idxPtr = strideData->indexPtr; - jfloat *fspt; - jdouble *dspt; - jint idx0, idx1, idx2, idx3; - - if (((vertexFormat & D3DFVF_DIFFUSE) == 0) && - (!d3dCtx->isLightEnable)) { - d3dCtx->setAmbientLightMaterial(); - } - - vb->buffer->Unlock(); - vbptr = NULL; -#ifdef VBDEBUG - if (createNew) { - printf("indexed quad set polygon line %d\n", vcount); - } -#endif - if (d3dCtx->lineModeIndexBuffer == NULL) { - createLineModeIndexBuffer(d3dCtx); - } - - vb->primitiveType = D3DPT_FORCE_DWORD; - - for (i = 0; i < (indexCount >> 2); i++) - { - if (d3dCtx->cullMode != D3DCULL_NONE) - { - // Do back face culling here - idx0 = *idxPtr++; - idx1 = *idxPtr++; - idx2 = *idxPtr++; - idx3 = *idxPtr++; - - if (strideData->fpositionPtr) - { - fspt = strideData->fpositionPtr + posStride*idx0; - worldCoord[0].x = *fspt++; - worldCoord[0].y = *fspt++; - worldCoord[0].z = *fspt++; - fspt = strideData->fpositionPtr + posStride*idx1; - worldCoord[1].x = *fspt++; - worldCoord[1].y = *fspt++; - worldCoord[1].z = *fspt++; - fspt = strideData->fpositionPtr + posStride*idx2; - worldCoord[2].x = *fspt++; - worldCoord[2].y = *fspt++; - worldCoord[2].z = *fspt++; - } - else - { - dspt = strideData->dpositionPtr + posStride*idx0; - worldCoord[0].x = *dspt++; - worldCoord[0].y = *dspt++; - worldCoord[0].z = *dspt++; - dspt = strideData->dpositionPtr + posStride*idx1; - worldCoord[1].x = *dspt++; - worldCoord[1].y = *dspt++; - worldCoord[1].z = *dspt++; - dspt = strideData->dpositionPtr + posStride*idx2; - worldCoord[2].x = *dspt++; - worldCoord[2].y = *dspt++; - worldCoord[2].z = *dspt++; - } - - d3dCtx->transform(&worldCoord[0], &screenCoord[0]); - d3dCtx->transform(&worldCoord[1], &screenCoord[1]); - d3dCtx->transform(&worldCoord[2], &screenCoord[2]); - screenCoord[0].sx -= screenCoord[1].sx; - screenCoord[0].sy -= screenCoord[1].sy; - screenCoord[2].sx -= screenCoord[1].sx; - screenCoord[2].sy -= screenCoord[1].sy; - - if (d3dCtx->cullMode == D3DCULL_CW) - { - if ((screenCoord[0].sx*screenCoord[2].sy - - screenCoord[2].sx*screenCoord[0].sy) >= 0) - { - DrawIndexPolygonLine(d3dCtx, - device, - vertexFormat, - strideData, - idx0, idx1, - idx2, idx3); - } - } - else - { // Clip front face - if ((screenCoord[0].sx*screenCoord[2].sy - - screenCoord[2].sx*screenCoord[0].sy) <= 0) - { - DrawIndexPolygonLine(d3dCtx, - device, - vertexFormat, - strideData, - idx0, idx1, - idx2, idx3); - } - } - } - else - { - // cullMode == D3DCULL_NONE - DrawIndexPolygonLine(d3dCtx, - device, - vertexFormat, - strideData, - idx0, idx1, - idx2, idx3); - } - }//for - - if (((vertexFormat & D3DFVF_DIFFUSE) == 0) && - (!d3dCtx->isLightEnable)) - { - d3dCtx->restoreDefaultLightMaterial(); - } - // Don't call vb->Renderer() at the end - return; - } - - //end index Quad WireFrame - - // fall through - case GEO_TYPE_INDEXED_TRI_SET: - if (renderTypeSet == false) { - d3dRenderType = D3DPT_TRIANGLELIST; - renderTypeSet = true; -#ifdef VBDEBUG - if (createNew) { - printf("tri set %d\n", vcount); - } -#endif - } - // fallthrough - case GEO_TYPE_INDEXED_LINE_SET: - if (renderTypeSet == false) { - d3dRenderType = D3DPT_LINELIST; - renderTypeSet = true; -#ifdef VBDEBUG - if (createNew) { - printf("line set %d\n", vcount); - } -#endif - } - // fallthrough - case GEO_TYPE_INDEXED_POINT_SET: - if (renderTypeSet == false) { - d3dRenderType = D3DPT_POINTLIST; -#ifdef VBDEBUG - if (createNew) { - printf("point set %d\n", vcount); - } -#endif - } - vb->primitiveType = d3dRenderType; - - if (vb->totalIndexCount <= vb->indexCount) { - if (vcount <= vb->vcount) { - copyIndexVertexToVB(d3dCtx, strideData, - indexCount, - cDirty, true, expandQuadIndex); - copyVertexToVB(d3dCtx, strideData, vcount, &vbptr, - cDirty, false, xform, nxform); - } else { - vb->buffer->Unlock(); - vbptr = NULL; - reIndexifyIndexVertexToVBs(d3dCtx, strideData, - indexCount, vcount, - cDirty, - expandQuadIndex, - maxVertexLimit, - xform, nxform); - SafeDelete(d3dCtx->reIndexifyTable); - } - } else { - vb->buffer->Unlock(); - vbptr = NULL; - splitIndexVertexToMultipleVB(d3dCtx, - strideData, - indexCount, - vcount, - maxVertexLimit, - cDirty, - expandQuadIndex, - xform, nxform); - SafeDelete(d3dCtx->reIndexifyTable); - } - break; - default: - printf("IndexedGeometryArrayRetained_execute:unknown geo_type %ld \n", geo_type); - } - - if (vbptr != NULL) { - // d3dCtx->pVB is the last reference in VB list - d3dCtx->pVB->buffer->Unlock(); - } - - // Save new texture position to detect any change - // in next round. - for (i=0; i < d3dCtx->texSetUsed; i++) { - d3dCtx->pVB->texCoordPosition[i] = - strideData->texCoordPosition[i]; - } - - if (!buildDL) { - // Not in displaylist mode, directly render VB - // vb is the root reference in VB list - vb->render(d3dCtx); - } -} - - -/* - * Set the default texture coordinate pointers when automatically - * texture generation is used or when there is application error - */ -inline void setDefaultTextureCoordPointers(D3dCtx *d3dCtx, - D3DDRAWPRIMITIVESTRIDEDDATA *strideData, - DWORD* vertexFormat, - jint ts, - int genMode, - int tus) -{ - strideData->textureCoordsPtr[tus] = &defaultTexCoord[0]; - strideData->textureCoordsStride[tus] = 0; - strideData->texCoordPosition[tus] = genMode; - d3dCtx->texStride[tus] = ts; - *vertexFormat |= (TexFormatSizeTable[ts] << (tus*2 + 16)); -} - - -/* - * Set the textureCoordStride & textureCoordsPtr in strideData - */ -void setTextureCoordPointers(JNIEnv *env, - D3dCtx* d3dCtx, - LPDIRECT3DDEVICE9 device, - D3DDRAWPRIMITIVESTRIDEDDATA *strideData, - jint texoff, - jint texStride, - jint ts, - jboolean textureDefined, - jintArray tcoordsetmap, - jint texCoordMapLength, - jintArray texUnitOffset, - jint numActiveTexUnit, - DWORD* vertexFormat, - // Used by executeGeometryArray() & - // executeIndexedGeometryArray() only - jfloat* verts, - // Used by executeGeometryArrayVA() & - // executeIndexedGeometryArrayVA() only - jfloat** texCoordPointer, - // Used by executeGeometryArrayVA() only - jintArray texindices) - -{ - jint *texCoordSetMapOffset = NULL; - jint *initialTexIndices = NULL; - jint *texCoordSetMap = NULL; - jint textureUnitIndex; - int genMode; - jint offsetOrTexset; - BOOL nonVAGeom = (verts != NULL); - int texSetInVB = 0; - - // TODO : - int pass = -1; - - /* - * In case of automatic texture generation, - * (vformat & GA_TEXTURE_COORDINATE) may equal to zero so we - * can't wrap around this whole block with the condition. - */ - d3dCtx->texSetUsed = 0; - - // For GA buildGA(), numActiveTexUnit is 1 even though texture - // is not used. This is only accurate for execute() immediate case. - if (numActiveTexUnit <= 0) { - return; - } - - if (texCoordMapLength > 0) { - if (nonVAGeom) { - // In executeGeometryArray() or executeIndexedGeometryArray() - texCoordSetMapOffset = (jint *) env->GetPrimitiveArrayCritical(texUnitOffset, NULL); - } else { - // In executeGeometryArrayVA() or executeIndexedGeometryArrayVA() - texCoordSetMap = (jint *) - env->GetPrimitiveArrayCritical(tcoordsetmap, NULL); - } - - } - - if (texindices != NULL) { - // In executeGeometryArrayVA() - initialTexIndices = (jint *) env->GetPrimitiveArrayCritical(texindices, NULL); - } - - // DisplayList is used for multiple texture single pass mode - // Or when go through the VertexArray in OGL, pass = -1 - int tus; -#ifdef TEXDEBUG - printf("*** Multiple Pass *** %d, nonVAGeom %d, buildDL %d, numActiveTexUnit %d, texCoordMapLength %d, texDef %d\n", pass, - nonVAGeom, (d3dCtx->currDisplayListID > 0), - numActiveTexUnit, texCoordMapLength, textureDefined); -#endif - - - for (textureUnitIndex = 0; textureUnitIndex < numActiveTexUnit; - textureUnitIndex++) { - - tus = textureUnitIndex; - - if (d3dCtx->currDisplayListID > 0) { - genMode = setTextureStage(d3dCtx, device, - textureUnitIndex, tus); - } else { - // This happen when we switch from displayList to - // vertexArray mode. The displayList is already - // built with 1-1 mapping so we can't use the - // textureUnitIndex Mapping - genMode = setTextureStage(d3dCtx, device, - textureUnitIndex, - textureUnitIndex); - } -#ifdef TEXDEBUG - printf("[pass %d] genMode %d, tus %d\n", textureUnitIndex, - genMode, tus); -#endif - if (genMode != TEX_OBJ_LINEAR) { - if (textureDefined) { - if (tus < texCoordMapLength) { - offsetOrTexset = (nonVAGeom ? - texCoordSetMapOffset[tus]:texCoordSetMap[tus]); - - if (offsetOrTexset != -1) { - if (nonVAGeom) { - strideData->textureCoordsPtr[textureUnitIndex] = - &verts[texoff + offsetOrTexset]; - } else if (initialTexIndices != NULL) { - strideData->textureCoordsPtr[textureUnitIndex] = - &(texCoordPointer[offsetOrTexset][initialTexIndices[offsetOrTexset]*texStride]); - } else { - strideData->textureCoordsPtr[textureUnitIndex] = - &(texCoordPointer[offsetOrTexset][0]); - } - strideData->textureCoordsStride[textureUnitIndex] = texStride; - strideData->texCoordPosition[textureUnitIndex] - = offsetOrTexset; - *vertexFormat |= (TexFormatSizeTable[ts] << (textureUnitIndex*2 + 16)); - d3dCtx->texStride[textureUnitIndex] = ts; - setTexTransformStageFlag(d3dCtx, device, - textureUnitIndex, - ts, genMode); - texSetInVB++; -#ifdef TEXDEBUG - printf("[pass %d] Non Object Linear, texDefined, ts=%d, tus %d\n", textureUnitIndex, ts, tus); -#endif - } else { - // This texture status is disable, this - // should not happen in D3D since - // TextureBin always compact unused state - // - unless when DisplayList is build and - // automatic texture generation - // used. Since if DL use - // updateAttributes() not yet invoke to - // set genMode correctly. - if (debug && (d3dCtx->currDisplayListID <= 0)) { - printf("[Java3D] TextureBin not compact textureUnitState correctly, numActiveTex %d, disableUnit %d, current mapped Texture Unit %d\n", numActiveTexUnit, tus, textureUnitIndex); - } - setDefaultTextureCoordPointers(d3dCtx, strideData, - vertexFormat, ts, - genMode, - textureUnitIndex); - setTexTransformStageFlag(d3dCtx, device, - textureUnitIndex, - ts, genMode); - texSetInVB++; -#ifdef TEXDEBUG - printf("[pass %d] Non Object Linear, texDefined, ts=%d\n", textureUnitIndex, ts); -#endif - } - } else { - // Internal error, should not happen. - if (debug) { - printf("[Java3D] TextureCoordMapLength length %d, is smaller than texture unit %d, map texture unit %d\n", texCoordMapLength, tus, textureUnitIndex); - } - setDefaultTextureCoordPointers(d3dCtx, strideData, - vertexFormat, ts, - TEX_GEN_INVALID, - textureUnitIndex); - setTexTransformStageFlag(d3dCtx, device, - textureUnitIndex, ts, - genMode); - - texSetInVB++; -#ifdef TEXDEBUG - printf("[pass %d] Non Object Linear, texDefined, offset/texset = -1, ts=%d\n", textureUnitIndex, ts); -#endif - } - } else { - // May be in automatically texture coordinate - // generation mode. - // May have trouble if automatically texture - // coordinate not used. Note that we pass ts = 0 - // so that copyVertexToVB() will not inc. the - // stride for this unused tex stage. - - // It is also the case in buildGA() case when - // numActiveTexUnit is 1 by default even though - // texture is not used. - /* - if ((d3dCtx->currDisplayListID <= 0) && - (genMode == TEX_GEN_NONE)) { - // application error, use default TexCoord - setDefaultTextureCoordPointers(d3dCtx, strideData, - vertexFormat, - ts, - TEX_GEN_NONE, - textureUnitIndex); - texSetInVB++; - } - */ - - setDefaultTextureCoordPointers(d3dCtx, strideData, - vertexFormat, - 0, - // This must be < 0 - TEX_GEN_AUTO, - textureUnitIndex); - setTexTransformStageFlag(d3dCtx, device, textureUnitIndex, - d3dCtx->texCoordFormat[textureUnitIndex], genMode); - - -#ifdef TEXDEBUG - printf("[pass %d] Non Object Linear, No texDefined, ts=0\n", textureUnitIndex); -#endif - } - } else { - // Automatic Texture generation Object Linear is used - setDefaultTextureCoordPointers(d3dCtx, strideData, - vertexFormat, - d3dCtx->texCoordFormat[textureUnitIndex], - genMode, - textureUnitIndex); - setTexTransformStageFlag(d3dCtx, device, textureUnitIndex, - d3dCtx->texCoordFormat[textureUnitIndex], genMode); - texSetInVB++; -#ifdef TEXDEBUG - printf("[pass %d] Object Linear, No texDefined, ts=%d\n", textureUnitIndex, d3dCtx->texCoordFormat[textureUnitIndex]); -#endif - } - } - d3dCtx->texSetUsed = numActiveTexUnit; -#ifdef TEXDEBUG - printf("No of texSetInVB %d, numActiveTexUnit %d\n", - texSetInVB, numActiveTexUnit); -#endif - - - if (texCoordSetMapOffset != NULL) { - env->ReleasePrimitiveArrayCritical(texUnitOffset, - texCoordSetMapOffset, NULL); - } - - if (texCoordSetMap != NULL) { - env->ReleasePrimitiveArrayCritical(tcoordsetmap, - texCoordSetMap, NULL); - } - - if (initialTexIndices != NULL) { - env->ReleasePrimitiveArrayCritical(texindices, - initialTexIndices, NULL); - } - - // texSetInVB <= d3dCtx->TexSetUsed - *vertexFormat |= getVertexFormat(texSetInVB); -} - - - -void executeGeometryArrayVA( - JNIEnv *env, - jobject obj, - jlong ctx, - jobject geo, - jint geo_type, - jboolean isNonUniformScale, - jboolean modAlpha, - float alpha, - jboolean ignoreVertexColors, - jint vcount, - jint vformat, - jint vdefined, - jint initialCoordIndex, - jfloat* fverts, - jdouble* dverts, - jint initialColorIndex, - jfloat* fclrs, - jbyte* bclrs, - jint initialNormalIndex, - jfloat* norms, - int texCoordMapLength, - jintArray tcoordsetmap, - jint numActiveTexUnit, - jintArray texindices, - jint texStride, - jfloat** texCoordPointer, - jdoubleArray xform, - jdoubleArray nxform, - jint cDirty) -{ - D3DDRAWPRIMITIVESTRIDEDDATA strideData; - DWORD vertexFormat = 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 textureDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_TEXCOORD_FLOAT) != 0); - - GetDevice(); - - ZeroMemory(&strideData, sizeof(D3DDRAWPRIMITIVESTRIDEDDATA)); - - strideData.modulateAlpha = modAlpha; - strideData.alpha = alpha; - - - // setup coordinate pointers - if (floatCoordDefined || doubleCoordDefined) { - vertexFormat |= D3DFVF_XYZ; - - if (floatCoordDefined) { - strideData.fpositionPtr = &fverts[initialCoordIndex*3]; - } else if (doubleCoordDefined) { - strideData.dpositionPtr = &dverts[initialCoordIndex*3]; - } - - strideData.positionStride = 3; - - } else { - // nothing worth doing if no coordinates define - return; - } - - // setup normal pointers - if (normalsDefined) { - vertexFormat |= D3DFVF_NORMAL; - strideData.normalPtr = &norms[initialNormalIndex*3]; - strideData.normalStride = 3; - } - - - // setup color pointers - if (!(floatColorsDefined || byteColorsDefined) - || ignoreVertexColors) { - // Use Material color - // Assume VertexBuffer will recreate when ignoreVertexColors - // property changed. Otherwise we need to remove - // the following one line - vertexFormat &= ~D3DFVF_DIFFUSE; - } else { - if ((vformat & GA_WITH_ALPHA) != 0) { - strideData.diffuseStride = 4; - strideData.useAlpha = true; - } else { - strideData.diffuseStride = 3; - strideData.useAlpha = false; - } - if (floatColorsDefined) { - strideData.fdiffusePtr = &fclrs[initialColorIndex*strideData.diffuseStride]; - } else { - strideData.bdiffusePtr = &bclrs[initialColorIndex*strideData.diffuseStride]; - } - - vertexFormat |= D3DFVF_DIFFUSE; - } - - int ts = 2; // In case of automatic texture generation - - if ((vformat & GA_TEXTURE_COORDINATE_3) != 0) { - ts = 3; - } else if ((vformat & GA_TEXTURE_COORDINATE_4) != 0) { - ts = 4; - } - - - // setup texture pointer - setTextureCoordPointers(env, d3dCtx, device, - &strideData, - 0, texStride, ts, - textureDefined, - tcoordsetmap, - texCoordMapLength, - NULL, - numActiveTexUnit, - &vertexFormat, - NULL, texCoordPointer, - texindices); - - - - jdouble* xform_ptr = NULL; - jdouble* nxform_ptr = NULL; - - if (xform != NULL) { - xform_ptr = (jdouble *) env->GetPrimitiveArrayCritical(xform, NULL); - - } - - if (nxform != NULL) { - nxform_ptr = (jdouble *) env->GetPrimitiveArrayCritical(nxform, NULL); - } - - // Construct/update VertexBuffer, render() if not in display list mode - renderGeometry(env, d3dCtx, device, geo, geo_type, &strideData, - vertexFormat, vcount, xform_ptr, nxform_ptr, cDirty); - - if (xform_ptr != NULL) { - env->ReleasePrimitiveArrayCritical(xform, xform_ptr, 0); - } - if (nxform_ptr != NULL) { - env->ReleasePrimitiveArrayCritical(nxform, nxform_ptr, 0); - } - -} - - - - -/* execute geometry array with java array format */ -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_executeVABuffer( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jobject geo, - jint geo_type, - jboolean isNonUniformScale, - jboolean ignoreVertexColors, - jint vcount, - jint vformat, - jint vdefined, - jint initialCoordIndex, - jobject vcoords, - jint initialColorIndex, - jobject cdataBuffer, - jfloatArray cfdata, - jbyteArray cbdata, - jint initialNormalIndex, - jobject ndata, - jint vertexAttrCount, - jintArray vertexAttrSizes, - jintArray vertexAttrIndices, - jobjectArray vertexAttrData, - jint texCoordMapLength, - jintArray tcoordsetmap, - jint numActiveTexUnit, - jintArray texindices, - jint texStride, - jobjectArray texCoords, - jint cdirty) -{ - - jfloat *fverts = NULL; - jdouble *dverts = NULL ; - jbyte *bclrs = NULL; - jfloat *fclrs = NULL, *norms = NULL; - jfloat* texCoordPointer[D3DDP_MAXTEXCOORD]; - jarray texobjs[D3DDP_MAXTEXCOORD]; - 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 textureDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_TEXCOORD_FLOAT) != 0); - - if (textureDefined) { - for (i = 0; i < texCoordMapLength; i++) { - texobjs[i] = (jarray)env->GetObjectArrayElement(texCoords, i); - } - } - - /* get coordinate array */ - if (floatCoordDefined) { - fverts = (jfloat *)env->GetDirectBufferAddress( vcoords ); - } else if (doubleCoordDefined) { - dverts = (jdouble *)env->GetDirectBufferAddress( vcoords ); - } - - if(fverts == NULL && dverts == NULL) - return; - - /* get color array */ - if (floatColorsDefined) { - if(cfdata != NULL) { - fclrs = (jfloat *) env->GetPrimitiveArrayCritical( cfdata, NULL); - } else { - fclrs = (jfloat *) env->GetDirectBufferAddress (cdataBuffer); - - } - } - else if (byteColorsDefined) { - if(cbdata != NULL) { - bclrs = (jbyte *) env->GetPrimitiveArrayCritical( cbdata, NULL); - } else { - bclrs = (jbyte *) env->GetDirectBufferAddress(cdataBuffer); - } - } - - /* get normal array */ - if (normalsDefined) { - norms = (jfloat *)env->GetDirectBufferAddress(ndata); - } - - /* get texture arrays */ - if (textureDefined) { - for (i = 0; i < texCoordMapLength; i++) { - if (texobjs[i] != NULL) - texCoordPointer[i] = (jfloat*)env->GetDirectBufferAddress(texobjs[i]); - else - texCoordPointer[i] = NULL; - - } - } - - executeGeometryArrayVA(env, obj, ctxInfo, geo, geo_type, - isNonUniformScale, false, 0, ignoreVertexColors, - vcount, vformat, vdefined, initialCoordIndex, - fverts, dverts, initialColorIndex, - fclrs, bclrs, initialNormalIndex, - norms, - texCoordMapLength, - tcoordsetmap,numActiveTexUnit, - texindices,texStride,texCoordPointer, NULL, - NULL, cdirty); - - if(floatColorsDefined && cfdata != NULL) - env->ReleasePrimitiveArrayCritical( cfdata, fclrs, 0); - else if(byteColorsDefined && cbdata != NULL) - env->ReleasePrimitiveArrayCritical(cbdata, bclrs, 0); -} - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_executeVA( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jobject geo, - jint geo_type, - jboolean isNonUniformScale, - jboolean ignoreVertexColors, - jint vcount, - jint vformat, - jint vdefined, - jint initialCoordIndex, - jfloatArray vfcoords, - jdoubleArray vdcoords, - jint initialColorIndex, - jfloatArray cfdata, - jbyteArray cbdata, - jint initialNormalIndex, - jfloatArray ndata, - jint vertexAttrCount, - jintArray vertexAttrSizes, - jintArray vertexAttrIndices, - jobjectArray vertexAttrData, - jint texCoordMapLength, - jintArray tcoordsetmap, - jint numActiveTexUnit, - jintArray texindices, - jint texStride, - jobjectArray texCoords, - jint cdirty) - { - - jfloat *fverts = NULL; - jdouble *dverts = NULL; - jfloat *fclrs = NULL; - jbyte *bclrs = NULL; - jfloat *norms = NULL; - jfloat* texCoordPointer[D3DDP_MAXTEXCOORD]; - jarray texobjs[D3DDP_MAXTEXCOORD]; - 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 textureDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_TEXCOORD_FLOAT) != 0); - - if (textureDefined) { - for (i = 0; i < texCoordMapLength; i++) { - texobjs[i] = (jarray)env->GetObjectArrayElement( texCoords, i); - } - } - - /* get coordinate array */ - if (floatCoordDefined) { - fverts= (jfloat *) env->GetPrimitiveArrayCritical( vfcoords, NULL); - } else if (doubleCoordDefined) { - dverts= (jdouble *) env->GetPrimitiveArrayCritical( vdcoords, NULL); - } - - if ((fverts == NULL) && (dverts == NULL)) { - return; - } - - /* get color array */ - if (floatColorsDefined) { - fclrs = (jfloat *) env->GetPrimitiveArrayCritical( cfdata, NULL); - } else if (byteColorsDefined) { - bclrs = (jbyte *)env->GetPrimitiveArrayCritical( cbdata, NULL); - } - - /* get normal array */ - if (normalsDefined) { - norms = (jfloat *) env->GetPrimitiveArrayCritical(ndata, NULL); - } - - /* get texture arrays */ - if (textureDefined) { - for (i = 0; i < texCoordMapLength; i++) { - if (texobjs[i] != NULL) { - texCoordPointer[i] = (jfloat*)env->GetPrimitiveArrayCritical(texobjs[i], NULL); - } else { - texCoordPointer[i] = NULL; - } - - } - } - executeGeometryArrayVA(env, obj, ctxInfo, geo, geo_type, - isNonUniformScale, false, 0, - ignoreVertexColors, - vcount, vformat, vdefined, initialCoordIndex, - fverts, dverts, initialColorIndex, - fclrs, bclrs, initialNormalIndex, - norms, texCoordMapLength, - tcoordsetmap,numActiveTexUnit, - texindices,texStride,texCoordPointer, - NULL, NULL, cdirty); - - if (floatCoordDefined) { - env->ReleasePrimitiveArrayCritical( vfcoords, fverts, 0); - } - else if (doubleCoordDefined) { - env->ReleasePrimitiveArrayCritical( vdcoords, dverts, 0); - } - - if (floatColorsDefined) { - env->ReleasePrimitiveArrayCritical( cfdata, fclrs, 0); - } - else if (byteColorsDefined) { - env->ReleasePrimitiveArrayCritical( cbdata, bclrs, 0); - } - - if (normalsDefined) { - env->ReleasePrimitiveArrayCritical( ndata, norms, 0); - } - - if (textureDefined) { - for (i = 0; i < texCoordMapLength; i++) { - if (texCoordPointer[i] != NULL) { - env->ReleasePrimitiveArrayCritical(texobjs[i], texCoordPointer[i], 0); - } - } - } -} - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_disableGlobalAlpha( - JNIEnv *env, - jobject obj, - jlong ctx, - jobject geo, - jint vformat, - jboolean useAlpha, - jboolean ignoreVertexColors) -{ - // not used in D3D -} - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_setVertexFormat( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jobject geo, - jint vformat, - jboolean useAlpha, - jboolean ignoreVertexColors) -{ - // not used in D3D -} - - -void executeGeometryArray(JNIEnv *env, - jobject obj, jlong ctx, - jobject geo, jint geo_type, - jboolean isNonUniformScale, - jboolean modAlpha, // buildGA, should alpha be mode - jfloat alpha, - jboolean ignoreVertexColors, - jint startVIndex, - jint vcount, jint vformat, jint texCoordSetCount, - jintArray texCoordSetMapArray, - jint texCoordMapLength, - jintArray texUnitOffset, - jint numActiveTexUnit, - jfloat* verts, jfloatArray carray, - jdoubleArray xform, jdoubleArray nxform, - jint cDirty, - jboolean useAlpha) // Should alpha be sent down -{ - D3DDRAWPRIMITIVESTRIDEDDATA strideData; - DWORD vertexFormat = 0; - jint stride, coordoff, normoff, coloroff, texoff; - int texStride, ts = 0; - - GetDevice(); - - ZeroMemory(&strideData, sizeof(D3DDRAWPRIMITIVESTRIDEDDATA)); - - strideData.modulateAlpha = modAlpha; - strideData.alpha = alpha; - - /* This matches the code in GeometryArrayRetained.java */ - stride = coordoff = normoff = coloroff = texoff = 0; - - if ((vformat & GA_COORDINATES) != 0) { - stride += 3; - vertexFormat |= D3DFVF_XYZ; - } else { - // nothing worth doing if no coordinates define - return; - } - - if ((vformat & GA_NORMALS) != 0) { - stride += 3; - coordoff += 3; - vertexFormat |= D3DFVF_NORMAL; - } - - if ((vformat & GA_COLOR) != 0) { - if ((vformat & GA_WITH_ALPHA) != 0 ) { - stride += 4; - normoff += 4; - coordoff += 4; - } else { // Handle the case of executeInterleaved 3f - stride += 3; - normoff += 3; - coordoff += 3; - } - vertexFormat |= D3DFVF_DIFFUSE; - } - - // In case of automatic texture generation - ts = 2; - - if (vformat & GA_TEXTURE_COORDINATE) { - if ((vformat & GA_TEXTURE_COORDINATE_2) != 0) { - texStride = texCoordSetCount << 1; - } else if ((vformat & GA_TEXTURE_COORDINATE_3) != 0) { - ts = 3; - texStride = texCoordSetCount*3; - } else { // GA_TEXTURE_COORDINATE_4 - ts = 4; - texStride = texCoordSetCount << 2; - } - stride += texStride; - normoff += texStride; - coloroff += texStride; - coordoff += texStride; - } - - jfloat *cverts = NULL; - - texoff = startVIndex*stride; - coordoff += texoff; - normoff += texoff; - - if (carray != NULL) { - // separate color array is used - coloroff = startVIndex*4; - } else { - coloroff += texoff; - } - - // setup coordinates pointer - strideData.fpositionPtr = &verts[coordoff]; - strideData.positionStride = stride; - - // setup color pointer - if (((vformat & GA_COLOR) == 0) || ignoreVertexColors) { - // Use Material color - // Assume VertexBuffer will recreate when ignoreVertexColors - // property changed. Otherwise we need to remove - // the following one line - vertexFormat &= ~D3DFVF_DIFFUSE; - } else { - if (carray == NULL) { - strideData.fdiffusePtr = &verts[coloroff]; - strideData.diffuseStride = stride; - strideData.useAlpha = (vformat & GA_WITH_ALPHA); - } else { - cverts = (jfloat*) env->GetPrimitiveArrayCritical(carray, NULL); - strideData.fdiffusePtr = &cverts[coloroff]; - strideData.diffuseStride = 4; - strideData.useAlpha = true; - } - } - - - // setup normal pointer - if ((vformat & GA_NORMALS) != 0) { - strideData.normalPtr = &verts[normoff]; - strideData.normalStride = stride; - } - - // setup texture pointer - setTextureCoordPointers(env, d3dCtx, device, - &strideData, - texoff, stride, ts, - (vformat & GA_TEXTURE_COORDINATE), - NULL, - texCoordMapLength, - texUnitOffset, - numActiveTexUnit, - &vertexFormat, - verts, NULL, NULL); - - - jdouble* xform_ptr = NULL; - jdouble* nxform_ptr = NULL; - - if (xform != NULL) { - xform_ptr = (jdouble *) env->GetPrimitiveArrayCritical(xform, NULL); - - } - - if (nxform != NULL) { - nxform_ptr = (jdouble *) env->GetPrimitiveArrayCritical(nxform, NULL); - } - - renderGeometry(env, d3dCtx, device, geo, geo_type, &strideData, - vertexFormat, vcount, xform_ptr, nxform_ptr, cDirty); - - if (xform_ptr != NULL) { - env->ReleasePrimitiveArrayCritical(xform, xform_ptr, 0); - } - if (nxform_ptr != NULL) { - env->ReleasePrimitiveArrayCritical(nxform, nxform_ptr, 0); - } - - - /* env->ReleasePrimitiveArrayCritical(varray, verts, NULL); */ - - if (cverts != NULL) { - env->ReleasePrimitiveArrayCritical(carray, cverts, NULL); - } -} - - -/* - * Class: javax_media_j3d_NativePipeline - * Method: buildGA - * Signature: (JLjavax/media/j3d/GeometryArrayRetained;IZZFZIIII[II[II[I[D[D[F)V - */ -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_buildGA(JNIEnv *env, - jobject obj, jlong ctx, jobject geo, - jint geo_type, - jboolean isNonUniformScale, jboolean updateAlpha, float alpha, - jboolean ignoreVertexColors, - jint startVIndex, - jint vcount, jint vformat, - jint texCoordSetCount, - jintArray texCoordSetMapArray, - jint texCoordMapLength, - jintArray texUnitOffset, - jint vertexAttrCount, jintArray vertexAttrSizes, - jdoubleArray xform, jdoubleArray nxform, - jfloatArray varray) -{ - - jfloat *verts = NULL; - - if (varray != NULL) { - verts = (jfloat *) env->GetPrimitiveArrayCritical(varray, NULL); - } - - if (verts == NULL) { - return; - } - - if (((vformat & GA_COLOR) != 0) && - ((vformat & GA_BY_REFERENCE) == 0)) { - // alpha component is added for buildGA - vformat |= GA_WITH_ALPHA; - } - - - executeGeometryArray(env, - obj, ctx, geo, geo_type, isNonUniformScale, - updateAlpha, - alpha, - ignoreVertexColors, - startVIndex, - vcount, - vformat, - texCoordSetCount, - texCoordSetMapArray, - texCoordMapLength, - texUnitOffset, - texCoordMapLength, - verts, NULL, - xform, nxform, - javax_media_j3d_GeometryArrayRetained_VERTEX_CHANGED, - false); - - env->ReleasePrimitiveArrayCritical( varray, verts, 0); -} - - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_execute(JNIEnv *env, - jobject obj, jlong ctx,jobject geo, jint geo_type, - jboolean isNonUniformScale, jboolean useAlpha, - jboolean ignoreVertexColors, - jint startVIndex, - jint vcount, jint vformat, jint texCoordSetCount, - jintArray texCoordSetMapArray, - jint texCoordMapLength, jintArray texUnitOffset, - jint numActiveTexUnit, - jint vertexAttrCount, jintArray vertexAttrSizes, - jfloatArray varray, jfloatArray carray, jint cDirty) -{ - jfloat *verts = NULL; - - if (varray != NULL) { - verts = (jfloat *) env->GetPrimitiveArrayCritical( varray, NULL); - } - - if (verts == NULL) { - return; - } - - executeGeometryArray(env, obj, ctx, geo, geo_type, - isNonUniformScale, - false, - 0, ignoreVertexColors, startVIndex, - vcount, vformat, texCoordSetCount, - texCoordSetMapArray, - texCoordMapLength, texUnitOffset, - numActiveTexUnit, - verts, carray, NULL, NULL, cDirty,useAlpha); - - env->ReleasePrimitiveArrayCritical( varray, verts, 0); - -} - - -/* interleaved data with nio buffer as data format */ -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_executeInterleavedBuffer(JNIEnv *env, - jobject obj, jlong ctx, jobject geo, jint geo_type, - jboolean isNonUniformScale, jboolean useAlpha, - jboolean ignoreVertexColors, - jint startVIndex, - jint vcount, jint vformat, - jint texCoordSetCount, - jintArray texCoordSetMapArray, jint texCoordMapLength, - jintArray texUnitOffset, - jint numActiveTexUnit, - jobject varray, jfloatArray carray, jint cDirty) { - - jfloat *verts = NULL; - - /* get the direct buffer address */ - if (varray != NULL) { - verts = (jfloat *) env->GetDirectBufferAddress(varray); - } - - if (verts == NULL) { - return; - } - - /* call executeGeometryArray */ - executeGeometryArray(env, obj, ctx, geo, geo_type, - isNonUniformScale, - false, - 0, ignoreVertexColors, startVIndex, - vcount, vformat, texCoordSetCount, - texCoordSetMapArray, - texCoordMapLength, texUnitOffset, - numActiveTexUnit, - verts, carray, NULL, NULL, cDirty,useAlpha); - -} - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_freeD3DArray( - JNIEnv *env, - jobject obj, - jobject geo, - jboolean deleteVB) -{ - - lockGeometry(); - - jclass geoClass = (jclass) env->GetObjectClass(geo); - // Free VertexBuffer associate with this GeometryArray - jfieldID fieldID = env->GetFieldID(geoClass, "pVertexBuffers", "J"); - - D3dVertexBufferVector *vbVector = - reinterpret_cast<D3dVertexBufferVector*> (env->GetLongField(geo, fieldID)); - - - if (vbVector != NULL) { - // clearLive() invoke this in Renderer thread - 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; - } - - unlockGeometry(); -} - - - -void executeIndexedGeometryArray(JNIEnv *env, - jobject obj, jlong ctx, - jobject geo, jint geo_type, - jboolean isNonUniformScale, - jboolean modAlpha, // buildGA, should alpha be mode - jfloat alpha, - jboolean ignoreVertexColors, - jint vcount, - jint vformat, - jint texCoordSetCount, - jintArray texCoordSetMapArray, - jint texCoordMapLength, - jintArray texUnitOffset, - jint numActiveTexUnit, - jfloat* verts, jfloatArray carray, - jdoubleArray xform, jdoubleArray nxform, - jint cDirty, - jboolean useAlpha, - jint initialIndexIndex, - jint indexCount, - jintArray indexCoord) // Should alpha be sent down -{ - D3DDRAWPRIMITIVESTRIDEDDATA strideData; - DWORD vertexFormat = 0; - jint stride, coordoff, normoff, coloroff, texoff; - int texStride, ts = 0; - - GetDevice(); - - ZeroMemory(&strideData, sizeof(D3DDRAWPRIMITIVESTRIDEDDATA)); - - strideData.modulateAlpha = modAlpha; - strideData.alpha = alpha; - - /* This matches the code in GeometryArrayRetained.java */ - stride = coordoff = normoff = coloroff = texoff = 0; - - if ((vformat & GA_COORDINATES) != 0) { - stride += 3; - vertexFormat |= D3DFVF_XYZ; - } else { - // nothing worth doing if no coordinates define - return; - } - - if ((vformat & GA_NORMALS) != 0) { - stride += 3; - coordoff += 3; - vertexFormat |= D3DFVF_NORMAL; - } - - if ((vformat & GA_COLOR) != 0) { - if ((vformat & GA_WITH_ALPHA) != 0 ) { - stride += 4; - normoff += 4; - coordoff += 4; - } else { // Handle the case of executeInterleaved 3f - stride += 3; - normoff += 3; - coordoff += 3; - } - vertexFormat |= D3DFVF_DIFFUSE; - } - - // In case of automatic texture generation - ts = 2; - - if (vformat & GA_TEXTURE_COORDINATE) { - if ((vformat & GA_TEXTURE_COORDINATE_2) != 0) { - texStride = texCoordSetCount << 1; - } else if ((vformat & GA_TEXTURE_COORDINATE_3) != 0) { - ts = 3; - texStride = texCoordSetCount*3; - } else { // GA_TEXTURE_COORDINATE_4 - ts = 4; - texStride = texCoordSetCount << 2; - } - stride += texStride; - normoff += texStride; - coloroff += texStride; - coordoff += texStride; - } - - jfloat *cverts = NULL; - - if (carray != NULL) { - // separate color array is used - coloroff = 0; - } else { - coloroff += texoff; - } - - // setup coordinates pointer - strideData.fpositionPtr = &verts[coordoff]; - strideData.positionStride = stride; - - // setup color pointer - if (((vformat & GA_COLOR) == 0) || ignoreVertexColors) { - // Use Material color - // Assume VertexBuffer will recreate when ignoreVertexColors - // property changed. Otherwise we need to remove - // the following one line - vertexFormat &= ~D3DFVF_DIFFUSE; - } else { - if (carray == NULL) { - strideData.fdiffusePtr = &verts[coloroff]; - strideData.diffuseStride = stride; - strideData.useAlpha = (vformat & GA_WITH_ALPHA); - } else { - cverts = (jfloat*) env->GetPrimitiveArrayCritical(carray, NULL); - strideData.fdiffusePtr = &cverts[coloroff]; - strideData.diffuseStride = 4; - strideData.useAlpha = true; - } - } - - - // setup normal pointer - if ((vformat & GA_NORMALS) != 0) { - strideData.normalPtr = &verts[normoff]; - strideData.normalStride = stride; - } - - - // setup texture pointer - setTextureCoordPointers(env, d3dCtx, device, - &strideData, - texoff, stride, ts, - (vformat & GA_TEXTURE_COORDINATE), - NULL, - texCoordMapLength, - texUnitOffset, - numActiveTexUnit, - &vertexFormat, - verts, NULL, NULL); - - // setup index pointer - strideData.indexPtr = (jint *) env->GetPrimitiveArrayCritical(indexCoord, NULL); - strideData.initialIndexIndex = initialIndexIndex; - - - jdouble* xform_ptr = NULL; - jdouble* nxform_ptr = NULL; - - if (xform != NULL) { - xform_ptr = (jdouble *) env->GetPrimitiveArrayCritical(xform, NULL); - - } - - if (nxform != NULL) { - nxform_ptr = (jdouble *) env->GetPrimitiveArrayCritical(nxform, NULL); - } - - renderIndexGeometry(env, d3dCtx, device, geo, geo_type, &strideData, - vertexFormat, vcount, indexCount, - xform_ptr, nxform_ptr, cDirty); - - - - if (xform_ptr != NULL) { - env->ReleasePrimitiveArrayCritical(xform, xform_ptr, 0); - } - if (nxform_ptr != NULL) { - env->ReleasePrimitiveArrayCritical(nxform, nxform_ptr, 0); - } - - if (cverts != NULL) { - env->ReleasePrimitiveArrayCritical(carray, cverts, NULL); - } - - env->ReleasePrimitiveArrayCritical(indexCoord, - strideData.indexPtr, NULL); - -} - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_executeIndexedGeometry( - JNIEnv *env, - jobject obj, jlong ctx, - jobject geo, jint geo_type, - jboolean isNonUniformScale, jboolean useAlpha, - jboolean ignoreVertexColors, - jint initialIndexIndex, - jint indexCount, - jint vcount, - jint vformat, - jint vertexAttrCount, jintArray vertexAttrSizes, - jint texCoordSetCount, - jintArray texCoordSetMapArray, - jint texCoordMapLength, jintArray texUnitOffset, - jint numActiveTexUnit, - jfloatArray varray, jfloatArray carray, jint cDirty, - jintArray indexCoord) -{ - jfloat *verts = NULL; - - if (varray != NULL) { - verts = (jfloat *) env->GetPrimitiveArrayCritical( varray, NULL); - } - - if (verts == NULL) { - return; - } - - executeIndexedGeometryArray(env, obj, ctx, geo, geo_type, - isNonUniformScale, - false, 0, - ignoreVertexColors, - vcount, - vformat, texCoordSetCount, - texCoordSetMapArray, - texCoordMapLength, - texUnitOffset, - numActiveTexUnit, - verts, - carray, - NULL, NULL, - cDirty, - useAlpha, - initialIndexIndex, - indexCount, - indexCoord); - - env->ReleasePrimitiveArrayCritical( varray, verts, 0); -} - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_executeIndexedGeometryBuffer( - JNIEnv *env, - jobject obj, jlong ctx, - jobject geo, jint geo_type, - jboolean isNonUniformScale, jboolean useAlpha, - jboolean ignoreVertexColors, - jint initialIndexIndex, - jint indexCount, - jint vcount, - jint vformat, jint texCoordSetCount, - jintArray texCoordSetMapArray, - jint texCoordMapLength, jintArray texUnitOffset, - jint numActiveTexUnit, - jobject varray, jfloatArray carray, - jint cDirty, - jintArray indexCoord) -{ - jfloat *verts = NULL; - - /* get the direct buffer address */ - if (varray != NULL) { - verts = (jfloat *) env->GetDirectBufferAddress(varray ); - } - - if (verts == NULL) - return; - - executeIndexedGeometryArray(env, obj, ctx, geo, geo_type, - isNonUniformScale, - false, 0, - ignoreVertexColors, - vcount, - vformat, texCoordSetCount, - texCoordSetMapArray, - texCoordMapLength, - texUnitOffset, - numActiveTexUnit, - verts, - carray, - NULL, NULL, - cDirty, - useAlpha, - initialIndexIndex, - indexCount, - indexCoord); -} - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_buildIndexedGeometry( - JNIEnv *env, - jobject obj, jlong ctx, jobject geo, - jint geo_type, - jboolean isNonUniformScale, jboolean updateAlpha, float alpha, - jboolean ignoreVertexColors, - jint initialIndexIndex, - jint indexCount, - jint vertexCount, - jint vformat, - jint vertexAttrCount, - jintArray vertexAttrSizes, - jint texCoordSetCount, - jintArray texCoordSetMapArray, - jint texCoordMapLength, - jintArray texUnitOffset, - jdoubleArray xform, jdoubleArray nxform, - jfloatArray varray, jintArray indexCoord) -{ - - jfloat *verts = NULL; - - if (varray != NULL) { - verts = (jfloat *) env->GetPrimitiveArrayCritical( varray, NULL); - } - - if (verts == NULL) { - return; - } - - if ((vformat & GA_COLOR) != 0) { - // alpha component is added for buildGA - vformat |= GA_WITH_ALPHA; - } - - executeIndexedGeometryArray(env, obj, ctx, geo, geo_type, - isNonUniformScale, - updateAlpha, alpha, - ignoreVertexColors, - vertexCount, - vformat, - texCoordSetCount, - texCoordSetMapArray, - texCoordMapLength, - texUnitOffset, - texCoordMapLength, - verts, - NULL, - xform, nxform, - javax_media_j3d_GeometryArrayRetained_VERTEX_CHANGED| - javax_media_j3d_GeometryArrayRetained_INDEX_CHANGED, - false, - initialIndexIndex, - indexCount, - indexCoord); - - env->ReleasePrimitiveArrayCritical( varray, verts, 0); - -} - - - -void executeIndexedGeometryArrayVA( - JNIEnv *env, - jobject obj, - jlong ctx, - jobject geo, - jint geo_type, - jboolean isNonUniformScale, - jboolean ignoreVertexColors, - jint initialIndexIndex, - jint indexCount, - jint vertexCount, - jint vformat, - jint vdefined, - jfloat* fverts, - jdouble* dverts, - jfloat* fclrs, - jbyte* bclrs, - jfloat* norms, - jint texCoordMapLength, - jintArray tcoordsetmap, - jint numActiveTexUnit, - jint texStride, - jfloat** texCoordPointer, - jint cDirty, - jintArray indexCoord) -{ - D3DDRAWPRIMITIVESTRIDEDDATA strideData; - DWORD vertexFormat = 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 textureDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_TEXCOORD_FLOAT) != 0); - - GetDevice(); - - ZeroMemory(&strideData, sizeof(D3DDRAWPRIMITIVESTRIDEDDATA)); - - // setup coordinate pointers - if (floatCoordDefined || doubleCoordDefined) { - vertexFormat |= D3DFVF_XYZ; - - if (floatCoordDefined ) { - strideData.fpositionPtr = &fverts[0]; - } else if (doubleCoordDefined) { - strideData.dpositionPtr = &dverts[0]; - } - strideData.positionStride = 3; - - } else { - // nothing worth doing if no coordinates define - return; - } - - // setup normal pointers - if (normalsDefined) { - vertexFormat |= D3DFVF_NORMAL; - strideData.normalPtr = &norms[0]; - strideData.normalStride = 3; - } - - // setup color pointers - if (!(floatColorsDefined || byteColorsDefined) - || ignoreVertexColors) { - // Use Material color - // Assume VertexBuffer will recreate when ignoreVertexColors - // property changed. Otherwise we need to remove - // the following one line - vertexFormat &= ~D3DFVF_DIFFUSE; - } else { - if ((vformat & GA_WITH_ALPHA) != 0) { - strideData.diffuseStride = 4; - strideData.useAlpha = true; - } else { - strideData.diffuseStride = 3; - strideData.useAlpha = false; - } - if (floatColorsDefined) { - strideData.fdiffusePtr = &fclrs[0]; - } else { - strideData.bdiffusePtr = &bclrs[0]; - } - - vertexFormat |= D3DFVF_DIFFUSE; - } - - - int ts = 2; // In case of automatic texture generation - - if ((vformat & GA_TEXTURE_COORDINATE_3) != 0) { - ts = 3; - } else if ((vformat & GA_TEXTURE_COORDINATE_4) != 0) { - ts = 4; - } - - // setup texture pointer - setTextureCoordPointers(env, d3dCtx, device, - &strideData, - 0, - texStride, ts, - textureDefined, - tcoordsetmap, - texCoordMapLength, - NULL, - numActiveTexUnit, - &vertexFormat, - NULL, texCoordPointer, - NULL); - - // setup index pointer - strideData.indexPtr = (jint *) env->GetPrimitiveArrayCritical(indexCoord, NULL); - strideData.initialIndexIndex = initialIndexIndex; - - // Construct/update VertexBuffer, render() if not in display list mode - renderIndexGeometry(env, d3dCtx, device, geo, geo_type, &strideData, - vertexFormat, vertexCount, indexCount, - NULL, NULL, cDirty); - - env->ReleasePrimitiveArrayCritical(indexCoord, - strideData.indexPtr, NULL); - - -} -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_executeIndexedGeometryVA( - JNIEnv *env, - jobject obj, - jlong ctx, - jobject geo, - jint geo_type, - jboolean isNonUniformScale, - jboolean ignoreVertexColors, - jint initialIndexIndex, - jint indexCount, - jint vertexCount, - jint vformat, - jint vdefined, - jfloatArray vfcoords, - jdoubleArray vdcoords, - jfloatArray cfdata, - jbyteArray cbdata, - jfloatArray ndata, - jint vertexAttrCount, - jintArray vertexAttrSizes, - jobjectArray vertexAttrData, - jint texCoordMapLength, - jintArray tcoordsetmap, - jint numActiveTexUnit, - jint texStride, - jobjectArray texCoords, - jint cDirty, - jintArray indexCoord) -{ - jfloat *fverts = NULL; - jdouble *dverts = NULL; - jfloat *fclrs = NULL; - jbyte *bclrs = NULL; - jfloat *norms = NULL; - jfloat* texCoordPointer[D3DDP_MAXTEXCOORD]; - jarray texobjs[D3DDP_MAXTEXCOORD]; - 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 textureDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_TEXCOORD_FLOAT) != 0); - - /* get texture arrays */ - if (textureDefined) { - for (i = 0; i < texCoordMapLength; i++) { - texobjs[i] = (jarray)env->GetObjectArrayElement( texCoords, i); - } - } - - /* get coordinate array */ - if (floatCoordDefined) { - fverts= (jfloat *) env->GetPrimitiveArrayCritical( vfcoords, NULL); - } else if (doubleCoordDefined) { - dverts= (jdouble *) env->GetPrimitiveArrayCritical( vdcoords, NULL); - } - - if ((fverts == NULL) && (dverts == NULL)) { - return; - } - - /* get color array */ - if (floatColorsDefined) { - fclrs = (jfloat *) env->GetPrimitiveArrayCritical( cfdata, NULL); - } else if (byteColorsDefined) { - bclrs = (jbyte *)env->GetPrimitiveArrayCritical( cbdata, NULL); - } - - /* get normal array */ - if (normalsDefined) { - norms = (jfloat *) env->GetPrimitiveArrayCritical(ndata, NULL); - } - - /* get texture arrays */ - if (textureDefined) { - for (i = 0; i < texCoordMapLength; i++) { - if (texobjs[i] != NULL) { - texCoordPointer[i] = - (jfloat*)env->GetPrimitiveArrayCritical(texobjs[i], NULL); - } else { - texCoordPointer[i] = NULL; - } - - } - } - - - executeIndexedGeometryArrayVA(env, - obj, - ctx, - geo, - geo_type, - isNonUniformScale, - ignoreVertexColors, - initialIndexIndex, - indexCount, - vertexCount, - vformat, - vdefined, - fverts, - dverts, - fclrs, - bclrs, - norms, - texCoordMapLength, - tcoordsetmap, - numActiveTexUnit, - texStride, - texCoordPointer, - cDirty, - indexCoord); - - // Free memory - if (textureDefined) { - for (i = 0; i < texCoordMapLength; i++) { - if (texCoordPointer[i] != NULL) { - env->ReleasePrimitiveArrayCritical(texobjs[i], texCoordPointer[i], NULL); - } - } - } - - if (floatColorsDefined) { - env->ReleasePrimitiveArrayCritical(cfdata, fclrs, 0); - } else if (byteColorsDefined) { - env->ReleasePrimitiveArrayCritical(cbdata, bclrs, 0); - } - - if (normalsDefined) { - env->ReleasePrimitiveArrayCritical(ndata, norms, 0); - } - - if (floatCoordDefined) { - env->ReleasePrimitiveArrayCritical(vfcoords, fverts, 0); - } else if (doubleCoordDefined) { - env->ReleasePrimitiveArrayCritical(vdcoords, dverts, 0); - } -} - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_executeIndexedGeometryVABuffer( - JNIEnv *env, - jobject obj, - jlong ctx, - jobject geo, - jint geo_type, - jboolean isNonUniformScale, - jboolean ignoreVertexColors, - jint initialIndexIndex, - jint indexCount, - jint vertexCount, - jint vformat, - jint vdefined, - jobject vcoords, - jobject cdataBuffer, - jfloatArray cfdata, - jbyteArray cbdata, - jobject ndata, - jint vertexAttrCount, - jintArray vertexAttrSizes, - jobjectArray vertexAttrData, - jint texCoordMapLength, - jintArray tcoordsetmap, - jint numActiveTexUnit, - jint texStride, - jobjectArray texCoords, - jint cDirty, - jintArray indexCoord) -{ - jfloat *fverts = NULL; - jdouble *dverts = NULL; - jfloat *fclrs = NULL; - jbyte *bclrs = NULL; - jfloat *norms = NULL; - jfloat* texCoordPointer[D3DDP_MAXTEXCOORD]; - jarray texobjs[D3DDP_MAXTEXCOORD]; - 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 textureDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_TEXCOORD_FLOAT) != 0); - - /* get texture arrays */ - if (textureDefined) { - for (i = 0; i < texCoordMapLength; i++) { - texobjs[i] = (jarray)env->GetObjectArrayElement( texCoords, i); - } - } - - /* get coordinate array */ - if (floatCoordDefined) { - fverts = (jfloat *)env->GetDirectBufferAddress( vcoords ); - } else if (doubleCoordDefined) { - dverts = (jdouble *)env->GetDirectBufferAddress( vcoords ); - } - - if ((fverts == NULL) && (dverts == NULL)) { - return; - } - - /* get color array */ - if (floatColorsDefined) { - if(cfdata != NULL) { - fclrs = (jfloat *) env->GetPrimitiveArrayCritical( cfdata, NULL); - } else { - fclrs = (jfloat *) env->GetDirectBufferAddress (cdataBuffer); - } - } else if (byteColorsDefined) { - if (cbdata != NULL) { - bclrs = (jbyte *) env->GetPrimitiveArrayCritical( cbdata, NULL); - } else { - bclrs = (jbyte *) env->GetDirectBufferAddress(cdataBuffer); - } - } - - /* get normal array */ - if (normalsDefined) { - norms = (jfloat *)env->GetDirectBufferAddress(ndata); - } - /* get texture arrays */ - if (textureDefined) { - for (i = 0; i < texCoordMapLength; i++) { - if (texobjs[i] != NULL) - texCoordPointer[i] = (jfloat*)env->GetDirectBufferAddress(texobjs[i]); - else - texCoordPointer[i] = NULL; - - } - } - - - executeIndexedGeometryArrayVA( - env, - obj, - ctx, - geo, - geo_type, - isNonUniformScale, - ignoreVertexColors, - initialIndexIndex, - indexCount, - vertexCount, - vformat, - vdefined, - fverts, - dverts, - fclrs, - bclrs, - norms, - texCoordMapLength, - tcoordsetmap, - numActiveTexUnit, - texStride, - texCoordPointer, - cDirty, - indexCoord); - - if (floatColorsDefined && cfdata != NULL) { - env->ReleasePrimitiveArrayCritical( cfdata, fclrs, 0); - } else if (byteColorsDefined && cbdata != NULL) { - env->ReleasePrimitiveArrayCritical(cbdata, bclrs, 0); - } -} - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_buildGAForBuffer( - JNIEnv *env, - jobject obj, - jlong ctx, - jobject geo, - jint geo_type, - jboolean isNonUniformScale, - jboolean updateAlpha, - jfloat alpha, - jboolean ignoreVertexColors, - jint vcount, - jint vformat, - jint vdefined, - jint initialCoordIndex, - jobject vcoords, - jint initialColorIndex, - jobject cdataBuffer, - jint initialNormalIndex, - jobject ndata, - jint texCoordMapLength, - jintArray tcoordsetmap, - jintArray texindices, - jint texStride, - jobjectArray texCoords, - jdoubleArray xform, - jdoubleArray nxform) -{ - jfloat *fverts = NULL; - jdouble *dverts = NULL ; - jbyte *bclrs = NULL; - jfloat *fclrs = NULL, *norms = NULL; - jfloat* texCoordPointer[D3DDP_MAXTEXCOORD]; - jarray texobjs[D3DDP_MAXTEXCOORD]; - 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 textureDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_TEXCOORD_FLOAT) != 0); - - if (textureDefined) { - for (i = 0; i < texCoordMapLength; i++) { - texobjs[i] = (jarray)env->GetObjectArrayElement(texCoords, i); - } - } - - /* get coordinate array */ - if (floatCoordDefined) { - fverts = (jfloat *)env->GetDirectBufferAddress( vcoords ); - } else if (doubleCoordDefined) { - dverts = (jdouble *)env->GetDirectBufferAddress( vcoords ); - } - - if ((fverts == NULL) && (dverts == NULL)) { - return; - } - - /* get color array */ - if (floatColorsDefined) { - fclrs = (jfloat *) env->GetDirectBufferAddress(cdataBuffer); - } else if (byteColorsDefined) { - bclrs = (jbyte *) env->GetDirectBufferAddress(cdataBuffer); - } - - /* get normal array */ - if (normalsDefined) { - norms = (jfloat *)env->GetDirectBufferAddress(ndata); - } - - /* get texture arrays */ - if (textureDefined) { - for (i = 0; i < texCoordMapLength; i++) { - if (texobjs[i] != NULL) - texCoordPointer[i] = (jfloat*)env->GetDirectBufferAddress(texobjs[i]); - else - texCoordPointer[i] = NULL; - - } - } - - executeGeometryArrayVA(env, obj, ctx, geo, geo_type, - isNonUniformScale, updateAlpha, alpha, - ignoreVertexColors, - vcount, vformat, vdefined, initialCoordIndex, - fverts, dverts, initialColorIndex, - fclrs, bclrs, initialNormalIndex, - norms, texCoordMapLength, - tcoordsetmap,texCoordMapLength, - texindices,texStride,texCoordPointer, - xform, nxform, - javax_media_j3d_GeometryArrayRetained_VERTEX_CHANGED); -} - -/* execute geometry array with java array format */ -/* - * Class: javax_media_j3d_NativePipeline - * 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_NativePipeline_buildGAForByRef( - JNIEnv *env, - jobject obj, - jlong ctx, - jobject geo, - jint geo_type, - jboolean isNonUniformScale, - jboolean updateAlpha, - jfloat alpha, - jboolean ignoreVertexColors, - jint vcount, - jint vformat, - jint vdefined, - jint initialCoordIndex, - jfloatArray vfcoords, - jdoubleArray vdcoords, - jint initialColorIndex, - jfloatArray cfdata, - jbyteArray cbdata, - jint initialNormalIndex, - jfloatArray ndata, - jint vertexAttrCount, - jintArray vertexAttrSizes, - jintArray vertexAttrIndices, - jobjectArray vertexAttrData, - jint texCoordMapLength, - jintArray tcoordsetmap, - jintArray texindices, - jint texStride, - jobjectArray texCoords, - jdoubleArray xform, - jdoubleArray nxform) -{ - jfloat *fverts = NULL; - jdouble *dverts = NULL; - jfloat *fclrs = NULL; - jbyte *bclrs = NULL; - jfloat *norms = NULL; - jfloat* texCoordPointer[D3DDP_MAXTEXCOORD]; - jarray texobjs[D3DDP_MAXTEXCOORD]; - 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 textureDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_TEXCOORD_FLOAT) != 0); - - - if (textureDefined) { - for (i = 0; i < texCoordMapLength; i++) { - texobjs[i] = (jarray)env->GetObjectArrayElement( texCoords, i); - } - } - - /* get coordinate array */ - if (floatCoordDefined) { - fverts= (jfloat *) env->GetPrimitiveArrayCritical( vfcoords, NULL); - } else if (doubleCoordDefined) { - dverts= (jdouble *) env->GetPrimitiveArrayCritical( vdcoords, NULL); - } - - if ((fverts == NULL) && (dverts == NULL)) { - return; - } - - /* get color array */ - if (floatColorsDefined) { - fclrs = (jfloat *) env->GetPrimitiveArrayCritical( cfdata, NULL); - } else if (byteColorsDefined) { - bclrs = (jbyte *)env->GetPrimitiveArrayCritical( cbdata, NULL); - } - - /* get normal array */ - if (normalsDefined) { - norms = (jfloat *) env->GetPrimitiveArrayCritical(ndata, NULL); - } - - /* get texture arrays */ - if (textureDefined) { - for (i = 0; i < texCoordMapLength; i++) { - if (texobjs[i] != NULL) { - texCoordPointer[i] = (jfloat*)env->GetPrimitiveArrayCritical(texobjs[i], NULL); - } else { - texCoordPointer[i] = NULL; - } - - } - } - - - executeGeometryArrayVA(env, obj, ctx, geo, geo_type, - isNonUniformScale, updateAlpha, alpha, - ignoreVertexColors, - vcount, vformat, vdefined, initialCoordIndex, - fverts, dverts, initialColorIndex, - fclrs, bclrs, initialNormalIndex, - norms, texCoordMapLength, - tcoordsetmap,texCoordMapLength, - texindices,texStride,texCoordPointer, - xform, nxform, - javax_media_j3d_GeometryArrayRetained_VERTEX_CHANGED); - - if (floatCoordDefined) { - env->ReleasePrimitiveArrayCritical( vfcoords, fverts, 0); - } - else if (doubleCoordDefined) { - env->ReleasePrimitiveArrayCritical( vdcoords, dverts, 0); - } - - if (floatColorsDefined) { - env->ReleasePrimitiveArrayCritical( cfdata, fclrs, 0); - } - else if (byteColorsDefined) { - env->ReleasePrimitiveArrayCritical( cbdata, bclrs, 0); - } - - if (normalsDefined) { - env->ReleasePrimitiveArrayCritical( ndata, norms, 0); - } - - if (textureDefined) { - for (i = 0; i < texCoordMapLength; i++) { - if (texCoordPointer[i] != NULL) { - env->ReleasePrimitiveArrayCritical(texobjs[i], texCoordPointer[i], 0); - } - } - } -} diff --git a/src/native/d3d/GraphicsContext3D.cpp b/src/native/d3d/GraphicsContext3D.cpp deleted file mode 100644 index 7d92d71..0000000 --- a/src/native/d3d/GraphicsContext3D.cpp +++ /dev/null @@ -1,145 +0,0 @@ -/* - * $RCSfile$ - * - * Copyright 2000-2008 Sun Microsystems, Inc. All Rights Reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * $Revision$ - * $Date$ - * $State$ - */ - -#include "StdAfx.h" - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_readRaster( - JNIEnv *env, jobject obj, jlong ctx, - jint type, jint xOffset, jint yOffset, - jint wRaster, jint hRaster, jint hCanvas, - jint imageDataType, - jint imageFormat, jobject imageBuffer, - jint depthFormat, jobject depthBuffer) -{ - void *imageObjPtr; - void *depthObjPtr; - - GetDevice(); - - /* printf("[GraphicsContext3D] readRaster ...\n"); */ - - if ((type & javax_media_j3d_Raster_RASTER_COLOR) != 0) { - - if ((d3dCtx->d3dPresent.SwapEffect == D3DSWAPEFFECT_DISCARD) - // For offScreen rendering, swapBuffer never invoked - // so it is safe to use backBuffer - && (!d3dCtx->offScreen) - // If fail to createFrontBuffer, fallback to use - // backSurface. There is no gaurantee this fallback - // will work, but at least in non-debug DirectX library - // it works. - && ((d3dCtx->frontSurface != NULL) || - (d3dCtx->frontSurface == NULL) && - d3dCtx->createFrontBuffer())) { - - - HRESULT hr = device->GetFrontBufferData(0,d3dCtx->frontSurface);//iSwapChain as 0 - if (FAILED(hr)) { - printf("GetFrontBuffer fail %s\n", DXGetErrorString9(hr)); - return; - } - imageObjPtr = (void *) env->GetPrimitiveArrayCritical((jarray)imageBuffer, NULL); - - if (!d3dCtx->bFullScreen) { - // We need to invoke GetWindowRect() everytime - // since message resize() will not receive - // when Canvas3D inside browers. - d3dCtx->getScreenRect(d3dCtx->hwnd, &d3dCtx->windowRect); - copyDataFromSurface(imageFormat, - xOffset + d3dCtx->windowRect.left, - yOffset + d3dCtx->windowRect.top, - wRaster, - hRaster, - (jbyte *) imageObjPtr, - d3dCtx->frontSurface); - } - else { - copyDataFromSurface(imageFormat, xOffset, yOffset, - wRaster, hRaster, (jbyte *) imageObjPtr, - d3dCtx->frontSurface); - } - - env->ReleasePrimitiveArrayCritical((jarray) imageBuffer, imageObjPtr, 0); - - } - else { - if (d3dCtx->backSurface == NULL) { - HRESULT hr = device->GetBackBuffer(0,0, D3DBACKBUFFER_TYPE_MONO, //isSwapChain as 0 - &d3dCtx->backSurface); - if (FAILED(hr)) { - printf("GetBackBuffer fail %s\n", DXGetErrorString9(hr)); - return; - } - } - imageObjPtr = (void *) env->GetPrimitiveArrayCritical((jarray)imageBuffer, NULL); - - copyDataFromSurface(imageFormat, xOffset, yOffset, wRaster, - hRaster, (jbyte *) imageObjPtr, d3dCtx->backSurface); - - env->ReleasePrimitiveArrayCritical((jarray)imageBuffer, imageObjPtr, 0); - - } - - } - - if ((type & javax_media_j3d_Raster_RASTER_DEPTH) != 0) { - - if (d3dCtx->depthStencilSurface == NULL) { - HRESULT hr = - device->GetDepthStencilSurface(&d3dCtx->depthStencilSurface); - if (FAILED(hr)) { - if (debug) { - printf("[Java3D] Fail to get depth stencil surface %s\n", - DXGetErrorString9(hr)); - } - return; - } - } - - depthObjPtr = (void *) env->GetPrimitiveArrayCritical((jarray)depthBuffer, NULL); - - if (depthFormat == javax_media_j3d_DepthComponentRetained_DEPTH_COMPONENT_TYPE_INT) { - - // yOffset is adjusted for OpenGL - Y upward - copyDepthFromSurface(xOffset, yOffset, wRaster, - hRaster, (jint *) depthObjPtr, d3dCtx->depthStencilSurface); - - } else { // javax_media_j3d_DepthComponentRetained_DEPTH_COMPONENT_TYPE_FLOAT - - // yOffset is adjusted for OpenGL - Y upward - copyDepthFromSurface(xOffset, yOffset, wRaster, - hRaster, (jfloat *) depthObjPtr, d3dCtx->depthStencilSurface); - } - env->ReleasePrimitiveArrayCritical((jarray)depthBuffer, depthObjPtr, 0); - } -} - diff --git a/src/native/d3d/Lights.cpp b/src/native/d3d/Lights.cpp deleted file mode 100644 index a423345..0000000 --- a/src/native/d3d/Lights.cpp +++ /dev/null @@ -1,174 +0,0 @@ -/* - * $RCSfile$ - * - * Copyright 2000-2008 Sun Microsystems, Inc. All Rights Reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * $Revision$ - * $Date$ - * $State$ - */ - -#include "StdAfx.h" - - #define D3DLIGHT_RANGE_MAX sqrt(FLT_MAX) - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateDirectionalLight( - JNIEnv *env, - jobject obj, - jlong ctx, - jint lightSlot, - jfloat red, - jfloat green, - jfloat blue, - jfloat dirx, - jfloat diry, - jfloat dirz) -{ - D3DLIGHT9 d3dLight; - - GetDevice(); - - d3dLight.Type = D3DLIGHT_DIRECTIONAL; - - d3dLight.Direction.x = dirx; - d3dLight.Direction.y = diry; - d3dLight.Direction.z = dirz; - - // Although spec. said this value is ignore, but - // if we don't set it the debug version will fail - // to set directional light - d3dLight.Range = D3DLIGHT_RANGE_MAX; - // D3D will not clamp to range [0, 1] automatically like OGL did - /* - Clamp(red); - Clamp(green); - Clamp(blue); - */ - CopyColor(d3dLight.Diffuse, red, green, blue, 1.0f); - CopyColor(d3dLight.Ambient, 0.0f, 0.0f, 0.0f, 1.0f); - CopyColor(d3dLight.Specular, red, green, blue, 1.0f); - - device->SetLight(lightSlot, &d3dLight); -} - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updatePointLight( - JNIEnv *env, - jobject obj, - jlong ctx, - jint lightSlot, - jfloat red, - jfloat green, - jfloat blue, - jfloat attenx, - jfloat atteny, - jfloat attenz, - jfloat posx, - jfloat posy, - jfloat posz) -{ - D3DLIGHT9 d3dLight; - - GetDevice(); - - d3dLight.Type = D3DLIGHT_POINT; - - d3dLight.Position.x = posx; - d3dLight.Position.y = posy; - d3dLight.Position.z = posz; - /* - Clamp(red); - Clamp(green); - Clamp(blue); - */ - CopyColor(d3dLight.Diffuse, red, green, blue, 1.0f); - CopyColor(d3dLight.Ambient, 0.0f, 0.0f, 0.0f, 1.0f); - CopyColor(d3dLight.Specular, red, green, blue, 1.0f); - - d3dLight.Attenuation0 = attenx; - d3dLight.Attenuation1 = atteny; - d3dLight.Attenuation2 = attenz; - d3dLight.Range = D3DLIGHT_RANGE_MAX; - - device->SetLight(lightSlot, &d3dLight); -} - - -extern "C" JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateSpotLight( - JNIEnv *env, - jobject obj, - jlong ctx, - jint lightSlot, - jfloat red, - jfloat green, - jfloat blue, - jfloat attenx, - jfloat atteny, - jfloat attenz, - jfloat posx, - jfloat posy, - jfloat posz, - jfloat spreadAngle, - jfloat concentration, - jfloat dirx, - jfloat diry, - jfloat dirz) -{ - D3DLIGHT9 d3dLight; - - GetDevice(); - - d3dLight.Type = D3DLIGHT_SPOT; - d3dLight.Direction.x = dirx; - d3dLight.Direction.y = diry; - d3dLight.Direction.z = dirz; - d3dLight.Position.x = posx; - d3dLight.Position.y = posy; - d3dLight.Position.z = posz; - /* - Clamp(red); - Clamp(green); - Clamp(blue); - */ - CopyColor(d3dLight.Diffuse, red, green, blue, 1.0f); - CopyColor(d3dLight.Ambient, 0.0f, 0.0f, 0.0f, 1.0f); - CopyColor(d3dLight.Specular, red, green, blue, 1.0f); - - d3dLight.Attenuation0 = attenx; - d3dLight.Attenuation1 = atteny; - d3dLight.Attenuation2 = attenz; - d3dLight.Range = D3DLIGHT_RANGE_MAX; - d3dLight.Theta = 0; - d3dLight.Phi = spreadAngle*2; - if (d3dLight.Phi > PI) { - d3dLight.Phi = PI; - } - d3dLight.Falloff = concentration; - - device->SetLight(lightSlot, &d3dLight); -} - diff --git a/src/native/d3d/NativeConfigTemplate3D.cpp b/src/native/d3d/NativeConfigTemplate3D.cpp deleted file mode 100644 index b25864f..0000000 --- a/src/native/d3d/NativeConfigTemplate3D.cpp +++ /dev/null @@ -1,198 +0,0 @@ -/* - * $RCSfile$ - * - * Copyright 2000-2008 Sun Microsystems, Inc. All Rights Reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * $Revision$ - * $Date$ - * $State$ - */ - -#include "StdAfx.h" - - -extern "C" JNIEXPORT -jboolean JNICALL Java_javax_media_j3d_Win32NativeConfigTemplate3D_isStereoAvailable( - JNIEnv *env, - jobject obj, - jlong pFormatInfo, - jboolean offScreen) -{ - // DirectX 9.0 don't support stereo - return false; - -} - -extern "C" JNIEXPORT -jboolean JNICALL Java_javax_media_j3d_Win32NativeConfigTemplate3D_isDoubleBufferAvailable( - JNIEnv *env, - jobject obj, - jlong pFormatInfo, - jboolean offScreen) -{ - // D3D always support double buffer - return true; -} - -extern "C" JNIEXPORT -jboolean JNICALL Java_javax_media_j3d_Win32NativeConfigTemplate3D_isSceneAntialiasingMultisampleAvailable( - JNIEnv *env, - jobject obj, - jlong pFormatInfo, - jboolean offScreen, - jint screen) -{ - BOOL antialiasingSupport = false; - - lock(); - if (d3dDriverList == NULL) - { - D3dDriverInfo::initialize(env); - } - - if (d3dDriverList != NULL) - { - D3dDriverInfo *driverInfo = d3dDriverList[screen]; - for (int i=0; i < numDeviceTypes; i++) - { - D3dDeviceInfo *pDeviceInfo = driverInfo->d3dDeviceList[i]; - if (pDeviceInfo->desktopCompatible && - pDeviceInfo->supportAntialiasing()) - { - antialiasingSupport = true; - break; - } - } - } - unlock(); - return antialiasingSupport; -} -extern "C" JNIEXPORT -jboolean JNICALL Java_javax_media_j3d_Win32NativeConfigTemplate3D_isSceneAntialiasingAccumAvailable(JNIEnv *env, - jobject obj, - jlong pFormatInfo, - jboolean offScreen) -{ - return JNI_FALSE; -} - - - -extern "C" JNIEXPORT -jint JNICALL Java_javax_media_j3d_Win32NativeConfigTemplate3D_choosePixelFormat( - JNIEnv *env, - jobject obj, - jlong ctx, - jint screen, - jintArray attrList, - jlongArray offScreenPFArray) -{ - int depth, red, green, blue; - int stencilDepth; - int retValue = -1; - - jint *mx_ptr = (jint *) env->GetPrimitiveArrayCritical(attrList, NULL); - red = mx_ptr[RED_SIZE]; - green = mx_ptr[GREEN_SIZE]; - blue = mx_ptr[BLUE_SIZE]; - depth = mx_ptr[DEPTH_SIZE]; - stencilDepth = mx_ptr[STENCIL_SIZE]; - - env->ReleasePrimitiveArrayCritical(attrList, mx_ptr, 0); - - if (mx_ptr[STEREO] != REQUIRED) - { - lock(); - if (d3dDriverList == NULL) - { - D3dDriverInfo::initialize(env); - } - - if (d3dDriverList != NULL) - { - BOOL bFullScreen; - D3dDriverInfo *pDriver = d3dDriverList[screen]; - D3dDeviceInfo *deviceInfo = D3dCtx::setDeviceInfo(pDriver, &bFullScreen, depth, stencilDepth); - - if (deviceInfo != NULL) - { - if ((depth <= deviceInfo->maxZBufferDepthSize) && - (red <= pDriver->redDepth) && - (green <= pDriver->greenDepth) && - (blue <= pDriver->blueDepth)&& - (stencilDepth)<= deviceInfo->maxStencilDepthSize) - { - // printf("\n[Java3D] NativeConfigTemplate3D.choosePixelFormat ZBuffer depth %d", deviceInfo->maxZBufferDepthSize); - // printf("\n[Java3D] NativeConfigTemplate3D.choosePixelFormat stencil depth %d", deviceInfo->maxStencilDepthSize); - - // first 0-7bits for depth,8-15 Stencil - retValue = deviceInfo->maxZBufferDepthSize |(deviceInfo->maxStencilDepthSize <<8); - // set value for Canvas3D GraphicsConfigInfo - jlong *pfi_ptr = (jlong *) env->GetLongArrayElements(offScreenPFArray, NULL); - pfi_ptr[0] = retValue; - env->ReleaseLongArrayElements(offScreenPFArray, pfi_ptr, 0); - } - } - } - unlock(); - } - - if (mx_ptr[ANTIALIASING] == REQUIRED) - { - if (Java_javax_media_j3d_Win32NativeConfigTemplate3D_isSceneAntialiasingMultisampleAvailable(env, obj, 0, JNI_TRUE, screen) == JNI_TRUE) - { - retValue |= (1 << 31); - } - else - { - retValue = -1; - } - } - return retValue; -} - - - -/* - * Class: javax_media_j3d_Win32NativeConfigTemplate3D - * Method: getStencilSize - * Signature: (JZ)I * - */ -JNIEXPORT jint JNICALL Java_javax_media_j3d_Win32NativeConfigTemplate3D_getStencilSize - (JNIEnv *env, jobject obj, jlong pFormatInfo, jboolean offScreen) -{ - jlong stencilSize = pFormatInfo; - stencilSize &= 0x0000ff00 ; //clean - stencilSize = (stencilSize >> 8); - - /** // next version pFormatInfo will be a D3DFORMAT value or index for - D3DFORMAT fmt = d3dCtx->deviceInfo->depthStencilFormat; - if (fmt == D3DFMT_D15S1) stencilSize = 1; - else - if (fmt == D3DFMT_D24X4S4) stencilSize = 4; - else - if(fmt == D3DFMT_D24S8)stencilSize = 8; - */ - return (int)stencilSize; -} diff --git a/src/native/d3d/StdAfx.h b/src/native/d3d/StdAfx.h deleted file mode 100644 index cd70e4e..0000000 --- a/src/native/d3d/StdAfx.h +++ /dev/null @@ -1,91 +0,0 @@ -/* - * $RCSfile$ - * - * Copyright 2000-2008 Sun Microsystems, Inc. All Rights Reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * $Revision$ - * $Date$ - * $State$ - */ - -#if !defined(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 - -#ifndef _MT -#define _MT -#endif - -// Exclude rarely-used stuff from Windows headers -#define VC_EXTRALEAN -#define WIN32_LEAN_AND_MEAN - - -//#undef _AFXDLL -//#undef _UNICODE - -// Windows Header Files: -#include <afx.h> -#include <winbase.h> -#include <windows.h> -#include <multimon.h> - -// C RunTime Header Files -#include <stdlib.h> -#include <malloc.h> -#include <memory.h> -#include <tchar.h> -#include <string.h> -#include <jni.h> -#include <math.h> -#define D3D_OVERLOADS -#include <d3d9.h> -#include <dxerr9.h> -#include <d3dx9.h> -#include <d3dx9tex.h> -#include <vector> -#include <algorithm> -using namespace std ; - -// Local header file -#include "gldefs.h" -#include "D3dDeviceInfo.hpp" -#include "D3dDriverInfo.hpp" -#include "D3dCtx.hpp" -#include "D3dUtil.hpp" -#include "D3dVertexBuffer.hpp" -#include "D3dDisplayList.hpp" -#endif - diff --git a/src/native/d3d/build-windows-amd64-vc.xml b/src/native/d3d/build-windows-amd64-vc.xml deleted file mode 100644 index 4b7877a..0000000 --- a/src/native/d3d/build-windows-amd64-vc.xml +++ /dev/null @@ -1,50 +0,0 @@ -<?xml version="1.0"?> - -<!-- Win64 ant file for d3d renderer --> -<project name="j3d-core native" default="compile"> - - <target name="compile"> - - <echo message="Executing 64 bit native renderer build [${bldType}]"/> - - <!-- Create the build directories for amd64 --> - <mkdir dir="${build}/${platform}/${bldType}/native/d3d/objs"/> - <mkdir dir="${build}/${platform}/${bldType}/bin"/> - - <property name="javaInclude" - location="${java.home}/../include"/> - - <property name="javaWin32Include" - location="${java.home}/../include/win32"/> - - <property name="oglsrc" location="${src}/native/ogl"/> - <property name="d3dsrc" location="${src}/native/d3d"/> - - <!-- Compile the c source files--> - <exec dir="${build}/${platform}/${bldType}/native/d3d/objs" executable="cl"> - <arg line="-Ox -O2 -Ob2 -Os -Oi -GT -GL /nologo -wd4996 -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}/GeometryArrayRetained.cpp" "${d3dsrc}/Canvas3D.cpp" "${d3dsrc}/GraphicsContext3D.cpp" "${d3dsrc}/Attributes.cpp" "${d3dsrc}/Lights.cpp" "${d3dsrc}/NativeConfigTemplate3D.cpp" "/> - </exec> - - - <!-- Create the library file--> - <exec dir="${build}/${platform}/${bldType}/native/d3d/objs" executable="link"> - <arg line="/OUT:"j3dcore-d3d.dll" /nologo -DLL -DELAYLOAD:jawt.dll -IMPLIB:"j3dcore-d3d.lib" -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 D3dUtil.obj D3dVertexBuffer.obj DrawingSurfaceObjectAWT.obj GeometryArrayRetained.obj GraphicsContext3D.obj Lights.obj MasterControl.obj NativeConfigTemplate3D.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 --> - <copy file="${build}/${platform}/${bldType}/native/d3d/objs/j3dcore-d3d.dll" - 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/j3dcore-d3d.dll" - todir="${dist}/${platform}/bin"/> - - </target> - -</project> diff --git a/src/native/d3d/build-windows-i586-gcc.xml b/src/native/d3d/build-windows-i586-gcc.xml deleted file mode 100644 index 1e13faf..0000000 --- a/src/native/d3d/build-windows-i586-gcc.xml +++ /dev/null @@ -1,3 +0,0 @@ -<?xml version="1.0"?> - -<!-- Win32 ant file for d3d renderer --> diff --git a/src/native/d3d/build-windows-i586-vc.xml b/src/native/d3d/build-windows-i586-vc.xml deleted file mode 100644 index 5507ba5..0000000 --- a/src/native/d3d/build-windows-i586-vc.xml +++ /dev/null @@ -1,50 +0,0 @@ -<?xml version="1.0"?> - -<!-- Win32 ant file for d3d renderer --> -<project name="j3d-core native" default="compile"> - - <target name="compile"> - - <echo message="Executing 32 bit native renderer build [${bldType}]"/> - - <!-- Create the build directories for sparc --> - <mkdir dir="${build}/${platform}/${bldType}/native/d3d/objs"/> - <mkdir dir="${build}/${platform}/${bldType}/bin"/> - - <property name="javaInclude" - location="${java.home}/../include"/> - - <property name="javaWin32Include" - location="${java.home}/../include/win32"/> - - <property name="oglsrc" location="${src}/native/ogl"/> - <property name="d3dsrc" location="${src}/native/d3d"/> - - <!-- 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}" /D "NDEBUG" /D "J3DDX90PORT_EXPORTS" /D "WIN32" /D "D3D" /D "J3D_BUILDVERTICES" /D "NVIDIA_DEBUG" -nologo -MT -W2 -EHsc -O2 -FD /Fp"J3dDX90Port.pch" -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}/GeometryArrayRetained.cpp" "${d3dsrc}/Canvas3D.cpp" "${d3dsrc}/GraphicsContext3D.cpp" "${d3dsrc}/Attributes.cpp" "${d3dsrc}/Lights.cpp" "${d3dsrc}/NativeConfigTemplate3D.cpp" "/> - </exec> - - - <!-- Create the library file--> - <exec dir="${build}/${platform}/${bldType}/native/d3d/objs" executable="link"> - <arg line="-nologo -dll -subsystem:windows -machine:I386 -out:j3dcore-d3d.dll Attributes.obj Canvas3D.obj D3dCtx.obj D3dDeviceInfo.obj D3dDisplayList.obj D3dDriverInfo.obj D3dUtil.obj D3dVertexBuffer.obj DrawingSurfaceObjectAWT.obj GeometryArrayRetained.obj GraphicsContext3D.obj Lights.obj MasterControl.obj NativeConfigTemplate3D.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 d3d9.lib d3dx9.lib dxerr9.lib dxguid.lib dinput.lib dinput8.lib delayimp.lib -DELAYLOAD:jawt.dll -LIBPATH:"${java.home}\..\lib" jawt.lib"/> - </exec> - - <!-- Copy the copyright library file --> - <copy file="${build}/${platform}/${bldType}/native/d3d/objs/j3dcore-d3d.dll" - 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/j3dcore-d3d.dll" - todir="${dist}/${platform}/bin"/> - - </target> - -</project> diff --git a/src/native/ogl/Attributes.c b/src/native/ogl/Attributes.c deleted file mode 100644 index fbd536f..0000000 --- a/src/native/ogl/Attributes.c +++ /dev/null @@ -1,3716 +0,0 @@ -/* - * $RCSfile$ - * - * Copyright 1999-2008 Sun Microsystems, Inc. All Rights Reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * $Revision$ - * $Date$ - * $State$ - */ - -/* j3dsys.h needs to be included before any other include files to suppres VC warning */ -#include "j3dsys.h" - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <math.h> -#include <jni.h> - -#include "gldefs.h" - -#ifdef DEBUG -/* Uncomment the following for VERBOSE debug messages */ -/* #define VERBOSE */ -#endif /* DEBUG */ - -/* - * Screen door transparency table. - */ -const unsigned int screen_door[17][32] = { -/* 0 / 16 */ - { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - }, -/* 1 / 16 */ - { - 0x00000000, 0x22222222, 0x00000000, 0x00000000, - 0x00000000, 0x22222222, 0x00000000, 0x00000000, - 0x00000000, 0x22222222, 0x00000000, 0x00000000, - 0x00000000, 0x22222222, 0x00000000, 0x00000000, - 0x00000000, 0x22222222, 0x00000000, 0x00000000, - 0x00000000, 0x22222222, 0x00000000, 0x00000000, - 0x00000000, 0x22222222, 0x00000000, 0x00000000, - 0x00000000, 0x22222222, 0x00000000, 0x00000000, - }, -/* 2 / 16 */ - { - 0x00000000, 0x22222222, 0x00000000, 0x88888888, - 0x00000000, 0x22222222, 0x00000000, 0x88888888, - 0x00000000, 0x22222222, 0x00000000, 0x88888888, - 0x00000000, 0x22222222, 0x00000000, 0x88888888, - 0x00000000, 0x22222222, 0x00000000, 0x88888888, - 0x00000000, 0x22222222, 0x00000000, 0x88888888, - 0x00000000, 0x22222222, 0x00000000, 0x88888888, - 0x00000000, 0x22222222, 0x00000000, 0x88888888, - }, -/* 3 / 16 */ - { - 0x00000000, 0xaaaaaaaa, 0x00000000, 0x88888888, - 0x00000000, 0xaaaaaaaa, 0x00000000, 0x88888888, - 0x00000000, 0xaaaaaaaa, 0x00000000, 0x88888888, - 0x00000000, 0xaaaaaaaa, 0x00000000, 0x88888888, - 0x00000000, 0xaaaaaaaa, 0x00000000, 0x88888888, - 0x00000000, 0xaaaaaaaa, 0x00000000, 0x88888888, - 0x00000000, 0xaaaaaaaa, 0x00000000, 0x88888888, - 0x00000000, 0xaaaaaaaa, 0x00000000, 0x88888888, - }, -/* 4 / 16 */ - { - 0x00000000, 0xaaaaaaaa, 0x00000000, 0xaaaaaaaa, - 0x00000000, 0xaaaaaaaa, 0x00000000, 0xaaaaaaaa, - 0x00000000, 0xaaaaaaaa, 0x00000000, 0xaaaaaaaa, - 0x00000000, 0xaaaaaaaa, 0x00000000, 0xaaaaaaaa, - 0x00000000, 0xaaaaaaaa, 0x00000000, 0xaaaaaaaa, - 0x00000000, 0xaaaaaaaa, 0x00000000, 0xaaaaaaaa, - 0x00000000, 0xaaaaaaaa, 0x00000000, 0xaaaaaaaa, - 0x00000000, 0xaaaaaaaa, 0x00000000, 0xaaaaaaaa, - }, -/* 5 / 16 */ - { - 0x11111111, 0xaaaaaaaa, 0x00000000, 0xaaaaaaaa, - 0x11111111, 0xaaaaaaaa, 0x00000000, 0xaaaaaaaa, - 0x11111111, 0xaaaaaaaa, 0x00000000, 0xaaaaaaaa, - 0x11111111, 0xaaaaaaaa, 0x00000000, 0xaaaaaaaa, - 0x11111111, 0xaaaaaaaa, 0x00000000, 0xaaaaaaaa, - 0x11111111, 0xaaaaaaaa, 0x00000000, 0xaaaaaaaa, - 0x11111111, 0xaaaaaaaa, 0x00000000, 0xaaaaaaaa, - 0x11111111, 0xaaaaaaaa, 0x00000000, 0xaaaaaaaa, - }, -/* 6 / 16 */ - { - 0x11111111, 0xaaaaaaaa, 0x44444444, 0xaaaaaaaa, - 0x11111111, 0xaaaaaaaa, 0x44444444, 0xaaaaaaaa, - 0x11111111, 0xaaaaaaaa, 0x44444444, 0xaaaaaaaa, - 0x11111111, 0xaaaaaaaa, 0x44444444, 0xaaaaaaaa, - 0x11111111, 0xaaaaaaaa, 0x44444444, 0xaaaaaaaa, - 0x11111111, 0xaaaaaaaa, 0x44444444, 0xaaaaaaaa, - 0x11111111, 0xaaaaaaaa, 0x44444444, 0xaaaaaaaa, - 0x11111111, 0xaaaaaaaa, 0x44444444, 0xaaaaaaaa, - }, -/* 7 / 16 */ - { - 0x55555555, 0xaaaaaaaa, 0x44444444, 0xaaaaaaaa, - 0x55555555, 0xaaaaaaaa, 0x44444444, 0xaaaaaaaa, - 0x55555555, 0xaaaaaaaa, 0x44444444, 0xaaaaaaaa, - 0x55555555, 0xaaaaaaaa, 0x44444444, 0xaaaaaaaa, - 0x55555555, 0xaaaaaaaa, 0x44444444, 0xaaaaaaaa, - 0x55555555, 0xaaaaaaaa, 0x44444444, 0xaaaaaaaa, - 0x55555555, 0xaaaaaaaa, 0x44444444, 0xaaaaaaaa, - 0x55555555, 0xaaaaaaaa, 0x44444444, 0xaaaaaaaa, - }, -/* 8 / 16 */ - { - 0x55555555, 0xaaaaaaaa, 0x55555555, 0xaaaaaaaa, - 0x55555555, 0xaaaaaaaa, 0x55555555, 0xaaaaaaaa, - 0x55555555, 0xaaaaaaaa, 0x55555555, 0xaaaaaaaa, - 0x55555555, 0xaaaaaaaa, 0x55555555, 0xaaaaaaaa, - 0x55555555, 0xaaaaaaaa, 0x55555555, 0xaaaaaaaa, - 0x55555555, 0xaaaaaaaa, 0x55555555, 0xaaaaaaaa, - 0x55555555, 0xaaaaaaaa, 0x55555555, 0xaaaaaaaa, - 0x55555555, 0xaaaaaaaa, 0x55555555, 0xaaaaaaaa, - }, -/* 9 / 16 */ - { - 0x77777777, 0xaaaaaaaa, 0x55555555, 0xaaaaaaaa, - 0x77777777, 0xaaaaaaaa, 0x55555555, 0xaaaaaaaa, - 0x77777777, 0xaaaaaaaa, 0x55555555, 0xaaaaaaaa, - 0x77777777, 0xaaaaaaaa, 0x55555555, 0xaaaaaaaa, - 0x77777777, 0xaaaaaaaa, 0x55555555, 0xaaaaaaaa, - 0x77777777, 0xaaaaaaaa, 0x55555555, 0xaaaaaaaa, - 0x77777777, 0xaaaaaaaa, 0x55555555, 0xaaaaaaaa, - 0x77777777, 0xaaaaaaaa, 0x55555555, 0xaaaaaaaa, - }, -/* 10 / 16 */ - { - 0x77777777, 0xaaaaaaaa, 0xdddddddd, 0xaaaaaaaa, - 0x77777777, 0xaaaaaaaa, 0xdddddddd, 0xaaaaaaaa, - 0x77777777, 0xaaaaaaaa, 0xdddddddd, 0xaaaaaaaa, - 0x77777777, 0xaaaaaaaa, 0xdddddddd, 0xaaaaaaaa, - 0x77777777, 0xaaaaaaaa, 0xdddddddd, 0xaaaaaaaa, - 0x77777777, 0xaaaaaaaa, 0xdddddddd, 0xaaaaaaaa, - 0x77777777, 0xaaaaaaaa, 0xdddddddd, 0xaaaaaaaa, - 0x77777777, 0xaaaaaaaa, 0xdddddddd, 0xaaaaaaaa, - }, -/* 11 / 16 */ - { - 0xffffffff, 0xaaaaaaaa, 0xdddddddd, 0xaaaaaaaa, - 0xffffffff, 0xaaaaaaaa, 0xdddddddd, 0xaaaaaaaa, - 0xffffffff, 0xaaaaaaaa, 0xdddddddd, 0xaaaaaaaa, - 0xffffffff, 0xaaaaaaaa, 0xdddddddd, 0xaaaaaaaa, - 0xffffffff, 0xaaaaaaaa, 0xdddddddd, 0xaaaaaaaa, - 0xffffffff, 0xaaaaaaaa, 0xdddddddd, 0xaaaaaaaa, - 0xffffffff, 0xaaaaaaaa, 0xdddddddd, 0xaaaaaaaa, - 0xffffffff, 0xaaaaaaaa, 0xdddddddd, 0xaaaaaaaa, - }, -/* 12 / 16 */ - { - 0xffffffff, 0xaaaaaaaa, 0xffffffff, 0xaaaaaaaa, - 0xffffffff, 0xaaaaaaaa, 0xffffffff, 0xaaaaaaaa, - 0xffffffff, 0xaaaaaaaa, 0xffffffff, 0xaaaaaaaa, - 0xffffffff, 0xaaaaaaaa, 0xffffffff, 0xaaaaaaaa, - 0xffffffff, 0xaaaaaaaa, 0xffffffff, 0xaaaaaaaa, - 0xffffffff, 0xaaaaaaaa, 0xffffffff, 0xaaaaaaaa, - 0xffffffff, 0xaaaaaaaa, 0xffffffff, 0xaaaaaaaa, - 0xffffffff, 0xaaaaaaaa, 0xffffffff, 0xaaaaaaaa, - }, -/* 13 / 16 */ - { - 0xffffffff, 0xbbbbbbbb, 0xffffffff, 0xaaaaaaaa, - 0xffffffff, 0xbbbbbbbb, 0xffffffff, 0xaaaaaaaa, - 0xffffffff, 0xbbbbbbbb, 0xffffffff, 0xaaaaaaaa, - 0xffffffff, 0xbbbbbbbb, 0xffffffff, 0xaaaaaaaa, - 0xffffffff, 0xbbbbbbbb, 0xffffffff, 0xaaaaaaaa, - 0xffffffff, 0xbbbbbbbb, 0xffffffff, 0xaaaaaaaa, - 0xffffffff, 0xbbbbbbbb, 0xffffffff, 0xaaaaaaaa, - 0xffffffff, 0xbbbbbbbb, 0xffffffff, 0xaaaaaaaa, - }, -/* 14 / 16 */ - { - 0xffffffff, 0xbbbbbbbb, 0xffffffff, 0xeeeeeeee, - 0xffffffff, 0xbbbbbbbb, 0xffffffff, 0xeeeeeeee, - 0xffffffff, 0xbbbbbbbb, 0xffffffff, 0xeeeeeeee, - 0xffffffff, 0xbbbbbbbb, 0xffffffff, 0xeeeeeeee, - 0xffffffff, 0xbbbbbbbb, 0xffffffff, 0xeeeeeeee, - 0xffffffff, 0xbbbbbbbb, 0xffffffff, 0xeeeeeeee, - 0xffffffff, 0xbbbbbbbb, 0xffffffff, 0xeeeeeeee, - 0xffffffff, 0xbbbbbbbb, 0xffffffff, 0xeeeeeeee, - }, -/* 15 / 16 */ - { - 0xffffffff, 0xffffffff, 0xffffffff, 0xeeeeeeee, - 0xffffffff, 0xffffffff, 0xffffffff, 0xeeeeeeee, - 0xffffffff, 0xffffffff, 0xffffffff, 0xeeeeeeee, - 0xffffffff, 0xffffffff, 0xffffffff, 0xeeeeeeee, - 0xffffffff, 0xffffffff, 0xffffffff, 0xeeeeeeee, - 0xffffffff, 0xffffffff, 0xffffffff, 0xeeeeeeee, - 0xffffffff, 0xffffffff, 0xffffffff, 0xeeeeeeee, - 0xffffffff, 0xffffffff, 0xffffffff, 0xeeeeeeee, - }, -/* 16 / 16 */ - { - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, - }, -}; - -void -throwAssert(JNIEnv *env, char *str) -{ - jclass rte; - if ((rte = (*env)->FindClass(env, "java/lang/AssertionError")) != NULL) { - (*env)->ThrowNew(env, rte, str); - } -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateLinearFog( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jfloat red, - jfloat green, - jfloat blue, - jdouble fdist, - jdouble bdist) -{ - - float color[3]; -#ifdef VERBOSE - fprintf(stderr, "LinearFog is on: %f %f %f %f %f\n", - red, green, blue, fdist, bdist); -#endif - - color[0] = red; - color[1] = green; - color[2] = blue; - glFogi(GL_FOG_MODE, GL_LINEAR); - glFogfv(GL_FOG_COLOR, color); - glFogf(GL_FOG_START, (float) fdist); - glFogf(GL_FOG_END, (float) bdist); - glEnable(GL_FOG); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateExponentialFog( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jfloat red, - jfloat green, - jfloat blue, - jfloat density) -{ - - float color[3]; -#ifdef VERBOSE - fprintf(stderr, "ExponentialFog is on: %f %f %f %f\n", - red, green, blue, density); -#endif - - color[0] = red; - color[1] = green; - color[2] = blue; - glFogi(GL_FOG_MODE, GL_EXP); - glFogfv(GL_FOG_COLOR, color); - glFogf(GL_FOG_DENSITY, density); - glEnable(GL_FOG); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateModelClip( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint planeNum, - jboolean enableFlag, - jdouble A, - jdouble B, - jdouble C, - jdouble D) -{ - - double equation[4]; - GLenum pl = GL_CLIP_PLANE0 + planeNum; - -#ifdef VERBOSE - fprintf(stderr, "ModelClip is on: %d %d %f %f %f %f\n", - planeNum, enableFlag, A, B, C, D); -#endif - - /* OpenGL clip planes are opposite to J3d clip planes - */ - if (enableFlag) { - equation[0] = -A; - equation[1] = -B; - equation[2] = -C; - equation[3] = -D; - glClipPlane(pl, equation); - glEnable(pl); - } else - glDisable(pl); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_setModelViewMatrix( - JNIEnv * env, - jobject obj, - jlong ctxInfo, - jdoubleArray viewMatrix, - jdoubleArray modelMatrix) -{ - jdouble *vmatrix_pointer; - jdouble *mmatrix_pointer; - JNIEnv table = *env; - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - vmatrix_pointer = (jdouble *)(*(table->GetPrimitiveArrayCritical))(env, - viewMatrix , NULL); - mmatrix_pointer = (jdouble *)(*(table->GetPrimitiveArrayCritical))(env, - modelMatrix , NULL); - - - glMatrixMode(GL_MODELVIEW); - - if (ctxProperties->gl13) { - ctxProperties->glLoadTransposeMatrixd(vmatrix_pointer); - ctxProperties->glMultTransposeMatrixd(mmatrix_pointer); - } else { - double v[16]; - double m[16]; - - COPY_TRANSPOSE(vmatrix_pointer, v); - COPY_TRANSPOSE(mmatrix_pointer, m); - - glLoadMatrixd(v); - glMultMatrixd(m); -#ifdef VERBOSE - fprintf(stderr, "\n"); - fprintf(stderr, "Canvas3D.setModelViewMatrix()\n"); - fprintf(stderr, "-----------------------------\n"); - fprintf(stderr, "VIEW : %f %f %f %f\n", v[0], v[4], v[8], v[12]); - fprintf(stderr, " : %f %f %f %f\n", v[1], v[5], v[9], v[13]); - fprintf(stderr, " : %f %f %f %f\n", v[2], v[6], v[10], v[14]); - fprintf(stderr, " : %f %f %f %f\n", v[3], v[7], v[11], v[15]); - fprintf(stderr, "\n"); - fprintf(stderr, "MODEL : %f %f %f %f\n", m[0], m[4], m[8], m[12]); - fprintf(stderr, " : %f %f %f %f\n", m[1], m[5], m[9], m[13]); - fprintf(stderr, " : %f %f %f %f\n", m[2], m[6], m[10], m[14]); - fprintf(stderr, " : %f %f %f %f\n", m[3], m[7], m[11], m[15]); - fprintf(stderr, "\n\n"); -#endif - } - (*(table->ReleasePrimitiveArrayCritical))(env, viewMatrix, - vmatrix_pointer, 0); - (*(table->ReleasePrimitiveArrayCritical))(env, modelMatrix, - mmatrix_pointer, 0); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_setProjectionMatrix( - JNIEnv * env, - jobject obj, - jlong ctxInfo, - jdoubleArray projMatrix) -{ - jdouble *matrix_pointer; - JNIEnv table = *env; - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - matrix_pointer = (jdouble *)(*(table->GetPrimitiveArrayCritical))(env, - projMatrix, NULL); - - glMatrixMode(GL_PROJECTION); - - if (ctxProperties->gl13) { - /* - * Invert the Z value in clipping coordinates because OpenGL uses - * left-handed clipping coordinates, while Java3D defines right-handed - * coordinates everywhere. - */ - matrix_pointer[8] *= -1.0; - matrix_pointer[9] *= -1.0; - matrix_pointer[10] *= -1.0; - matrix_pointer[11] *= -1.0; - ctxProperties->glLoadTransposeMatrixd(matrix_pointer); - matrix_pointer[8] *= -1.0; - matrix_pointer[9] *= -1.0; - matrix_pointer[10] *= -1.0; - matrix_pointer[11] *= -1.0; - } else { - double p[16]; - - COPY_TRANSPOSE(matrix_pointer, p); - /* - * Invert the Z value in clipping coordinates because OpenGL uses - * left-handed clipping coordinates, while Java3D defines right-handed - * coordinates everywhere. - */ - p[2] *= -1.0; - p[6] *= -1.0; - p[10] *= -1.0; - p[14] *= -1.0; - - glLoadMatrixd(p); -#ifdef VERBOSE - fprintf(stderr, "\n"); - fprintf(stderr, "Canvas3D.setProjectionMatrix()\n"); - fprintf(stderr, "------------------------------\n"); - fprintf(stderr, "PROJECTION : %f %f %f %f\n", p[0], p[4], p[8], p[12]); - fprintf(stderr, " : %f %f %f %f\n", p[1], p[5], p[9], p[13]); - fprintf(stderr, " : %f %f %f %f\n", p[2], p[6], p[10], p[14]); - fprintf(stderr, " : %f %f %f %f\n", p[3], p[7], p[11], p[15]); - fprintf(stderr, "\n\n"); -#endif - - } - - (*(table->ReleasePrimitiveArrayCritical))(env, projMatrix, - matrix_pointer, 0); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_setViewport( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint x, - jint y, - jint width, - jint height) -{ - - glViewport(x, y, width, height); -} - -#ifdef WIN32 -#define M_PI 3.14159265358979323846 -#endif - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_setSceneAmbient( - JNIEnv *env, - jobject cv, - jlong ctxInfo, - jfloat red, - jfloat green, - jfloat blue) -{ - float color[4]; - - color[0] = red; - color[1] = green; - color[2] = blue; - color[3] = 1.0f; - glLightModelfv(GL_LIGHT_MODEL_AMBIENT, color); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_setLightEnables( - JNIEnv *env, - jobject cv, - jlong ctxInfo, - jlong enable_mask, - jint nlights) -{ - int i; - -#ifdef VERBOSE - fprintf(stderr, "Canvas3D.updateLightEnables: mask = 0x%x, 0x%x\n", - (int) ((enable_mask >> 32L) & 0xffffffff), - (int) (enable_mask & 0xffffffff)); -#endif - - for (i=0; i<nlights; i++) { - if (enable_mask & ((long)(1<<i))) { - glEnable(GL_LIGHT0 + i); - } - else { - glDisable(GL_LIGHT0 + i); - } - } -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_setLightingEnable( - JNIEnv *env, - jobject cv, - jlong ctxInfo, - jboolean lightingOn) -{ - if (lightingOn) { - glEnable(GL_LIGHTING); -#ifdef VERBOSE - fprintf(stderr, "ENABLE LIGHTING\n\n"); -#endif - } else { - glDisable(GL_LIGHTING); -#ifdef VERBOSE - fprintf(stderr, "DISABLE LIGHTING\n\n"); -#endif - } -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_disableFog( - JNIEnv *env, - jobject cv, - jlong ctxInfo) -{ -#ifdef VERBOSE - fprintf(stderr, "Disable Fog\n"); -#endif - glDisable(GL_FOG); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_disableModelClip( - JNIEnv *env, - jobject cv, - jlong ctxInfo) -{ -#ifdef VERBOSE - fprintf(stderr, "Disable ModelClip\n"); -#endif - glDisable(GL_CLIP_PLANE0); - glDisable(GL_CLIP_PLANE1); - glDisable(GL_CLIP_PLANE2); - glDisable(GL_CLIP_PLANE3); - glDisable(GL_CLIP_PLANE4); - glDisable(GL_CLIP_PLANE5); -} - - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_resetRenderingAttributes( - JNIEnv *env, - jobject cv, - jlong ctxInfo, - jboolean db_write_enable_override, - jboolean db_enable_override) -{ - if (db_write_enable_override == JNI_FALSE) { - glDepthMask(GL_TRUE); - } - if (db_enable_override == JNI_FALSE) { - 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 -void JNICALL Java_javax_media_j3d_NativePipeline_updateRenderingAttributes( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jboolean db_write_enable_override, - 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, - 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); - glDepthFunc( getFunctionValue(db_func)); - - } else { - glDisable(GL_DEPTH_TEST); - } - } - - if (db_write_enable_override == JNI_FALSE) { - if (db_write_enable == JNI_TRUE ) { - glDepthMask(GL_TRUE); - } else { - glDepthMask(GL_FALSE); - } - } - - if (at_func == javax_media_j3d_RenderingAttributes_ALWAYS) { - glDisable(GL_ALPHA_TEST); - } else { - glEnable(GL_ALPHA_TEST); - glAlphaFunc(getFunctionValue(at_func), at_value); - } - - if (ignoreVertexColors == JNI_TRUE) { - glDisable(GL_COLOR_MATERIAL); - } - else { - glEnable(GL_COLOR_MATERIAL); - } - - 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 { - 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 -void JNICALL Java_javax_media_j3d_NativePipeline_resetPolygonAttributes( - JNIEnv *env, - jobject cv, - jlong ctxInfo) -{ - glCullFace(GL_BACK); - glEnable(GL_CULL_FACE); - - glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE); - - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - - glPolygonOffset(0.0f, 0.0f); - glDisable(GL_POLYGON_OFFSET_POINT); - glDisable(GL_POLYGON_OFFSET_LINE); - glDisable(GL_POLYGON_OFFSET_FILL); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updatePolygonAttributes( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint polygonMode, - jint cullFace, - jboolean backFaceNormalFlip, - jfloat polygonOffset, - jfloat polygonOffsetFactor) -{ - if (cullFace == javax_media_j3d_PolygonAttributes_CULL_NONE) { - glDisable(GL_CULL_FACE); - } else { - if (cullFace == javax_media_j3d_PolygonAttributes_CULL_BACK) { - glCullFace(GL_BACK); - } else { - glCullFace(GL_FRONT); - } - glEnable(GL_CULL_FACE); - } - - if (backFaceNormalFlip == JNI_TRUE && (cullFace != javax_media_j3d_PolygonAttributes_CULL_BACK)) { - glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); - } else { - glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE); - } - - if (polygonMode == javax_media_j3d_PolygonAttributes_POLYGON_POINT) { - glPolygonMode(GL_FRONT_AND_BACK, GL_POINT); - } else if (polygonMode == javax_media_j3d_PolygonAttributes_POLYGON_LINE) { - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - } else { - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - } - - glPolygonOffset(polygonOffsetFactor, polygonOffset); - - if((polygonOffsetFactor != 0.0) || (polygonOffset != 0.0)) { - /* fprintf(stderr, "set polygonOffSet\n"); */ - switch (polygonMode) { - case javax_media_j3d_PolygonAttributes_POLYGON_POINT: - glEnable(GL_POLYGON_OFFSET_POINT); - glDisable(GL_POLYGON_OFFSET_LINE); - glDisable(GL_POLYGON_OFFSET_FILL); - break; - case javax_media_j3d_PolygonAttributes_POLYGON_LINE: - glEnable(GL_POLYGON_OFFSET_LINE); - glDisable(GL_POLYGON_OFFSET_POINT); - glDisable(GL_POLYGON_OFFSET_FILL); - break; - case javax_media_j3d_PolygonAttributes_POLYGON_FILL: - glEnable(GL_POLYGON_OFFSET_FILL); - glDisable(GL_POLYGON_OFFSET_POINT); - glDisable(GL_POLYGON_OFFSET_LINE); - break; - } - } - else { - glDisable(GL_POLYGON_OFFSET_POINT); - glDisable(GL_POLYGON_OFFSET_LINE); - glDisable(GL_POLYGON_OFFSET_FILL); - } -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_resetLineAttributes( - JNIEnv *env, - jobject cv, - jlong ctxInfo) -/* comment out until called in java code - jfloat lineWidth, - jint linePattern, - jboolean lineAntialiasing) -*/ -{ - glLineWidth(1.0f); - glDisable(GL_LINE_STIPPLE); - - /* XXXX: Polygon Mode check, blend enable */ - glDisable (GL_LINE_SMOOTH); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateLineAttributes( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jfloat lineWidth, - jint linePattern, - jint linePatternMask, - jint linePatternScaleFactor, - jboolean lineAntialiasing) -{ - glLineWidth(lineWidth); - - if (linePattern == javax_media_j3d_LineAttributes_PATTERN_SOLID) { - glDisable(GL_LINE_STIPPLE); - } else { - if (linePattern == javax_media_j3d_LineAttributes_PATTERN_DASH) { /* dashed lines */ - glLineStipple(1, 0x00ff); - } else if (linePattern == javax_media_j3d_LineAttributes_PATTERN_DOT) { /* dotted lines */ - glLineStipple(1, 0x0101); - } else if (linePattern == javax_media_j3d_LineAttributes_PATTERN_DASH_DOT) { /* dash-dotted lines */ - glLineStipple(1, 0x087f); - } else if (linePattern == javax_media_j3d_LineAttributes_PATTERN_USER_DEFINED) { /* user-defined mask */ - glLineStipple(linePatternScaleFactor, (GLushort) linePatternMask); - } - glEnable(GL_LINE_STIPPLE); - } - - /* XXXX: Polygon Mode check, blend enable */ - if (lineAntialiasing == JNI_TRUE) { - glEnable (GL_LINE_SMOOTH); - } else { - glDisable (GL_LINE_SMOOTH); - } -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_resetPointAttributes( - JNIEnv *env, - jobject cv, - jlong ctxInfo) -{ - glPointSize(1.0f); - - /* XXXX: Polygon Mode check, blend enable */ - glDisable (GL_POINT_SMOOTH); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updatePointAttributes( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jfloat pointSize, - jboolean pointAntialiasing) -{ - glPointSize(pointSize); - - /* XXXX: Polygon Mode check, blend enable */ - if (pointAntialiasing == JNI_TRUE) { - glEnable (GL_POINT_SMOOTH); - } else { - glDisable (GL_POINT_SMOOTH); - } -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_resetTexCoordGeneration( - JNIEnv *env, - jobject cv, - jlong ctxInfo) -{ - glDisable(GL_TEXTURE_GEN_S); - glDisable(GL_TEXTURE_GEN_T); - glDisable(GL_TEXTURE_GEN_R); - glDisable(GL_TEXTURE_GEN_Q); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexCoordGeneration( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jboolean enable, - jint genMode, - jint format, - jfloat planeSx, - jfloat planeSy, - jfloat planeSz, - jfloat planeSw, - jfloat planeTx, - jfloat planeTy, - jfloat planeTz, - jfloat planeTw, - jfloat planeRx, - jfloat planeRy, - jfloat planeRz, - jfloat planeRw, - jfloat planeQx, - jfloat planeQy, - jfloat planeQz, - jfloat planeQw, - jdoubleArray vworldToEc) -{ - float planeS[4], planeT[4], planeR[4], planeQ[4]; - JNIEnv table = *env; - jdouble *mat; - - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - if (enable == JNI_TRUE) { - glEnable(GL_TEXTURE_GEN_S); - glEnable(GL_TEXTURE_GEN_T); - if (format == javax_media_j3d_TexCoordGeneration_TEXTURE_COORDINATE_3) { - glEnable(GL_TEXTURE_GEN_R); - glDisable(GL_TEXTURE_GEN_Q); - } else if (format == javax_media_j3d_TexCoordGeneration_TEXTURE_COORDINATE_4) { - glEnable(GL_TEXTURE_GEN_R); - glEnable(GL_TEXTURE_GEN_Q); - } else { - glDisable(GL_TEXTURE_GEN_R); - glDisable(GL_TEXTURE_GEN_Q); - } - - if (genMode != javax_media_j3d_TexCoordGeneration_SPHERE_MAP) { - planeS[0] = planeSx; planeS[1] = planeSy; - planeS[2] = planeSz; planeS[3] = planeSw; - planeT[0] = planeTx; planeT[1] = planeTy; - planeT[2] = planeTz; planeT[3] = planeTw; - if (format == javax_media_j3d_TexCoordGeneration_TEXTURE_COORDINATE_3) { - planeR[0] = planeRx; planeR[1] = planeRy; - planeR[2] = planeRz; planeR[3] = planeRw; - } else if (format == javax_media_j3d_TexCoordGeneration_TEXTURE_COORDINATE_4) { - planeR[0] = planeRx; planeR[1] = planeRy; - planeR[2] = planeRz; planeR[3] = planeRw; - planeQ[0] = planeQx; planeQ[1] = planeQy; - planeQ[2] = planeQz; planeQ[3] = planeQw; - } - } - - switch (genMode) { - case javax_media_j3d_TexCoordGeneration_OBJECT_LINEAR: - glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); - glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); - glTexGenfv(GL_S, GL_OBJECT_PLANE, planeS); - glTexGenfv(GL_T, GL_OBJECT_PLANE, planeT); - - if (format == javax_media_j3d_TexCoordGeneration_TEXTURE_COORDINATE_3) { - glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); - glTexGenfv(GL_R, GL_OBJECT_PLANE, planeR); - } else if (format == javax_media_j3d_TexCoordGeneration_TEXTURE_COORDINATE_4) { - glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); - glTexGenfv(GL_R, GL_OBJECT_PLANE, planeR); - glTexGeni(GL_Q, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); - glTexGenfv(GL_Q, GL_OBJECT_PLANE, planeQ); - } - break; - case javax_media_j3d_TexCoordGeneration_EYE_LINEAR: - - mat = (jdouble *)(*(table->GetPrimitiveArrayCritical))(env, - vworldToEc, NULL); - - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - - if (ctxProperties->gl13) { - ctxProperties->glLoadTransposeMatrixd(mat); - } else { - jdouble v[16]; - COPY_TRANSPOSE(mat, v); - glLoadMatrixd(v); - } - - (*(table->ReleasePrimitiveArrayCritical))(env, vworldToEc, - mat, 0); - - glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); - glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); - glTexGenfv(GL_S, GL_EYE_PLANE, planeS); - glTexGenfv(GL_T, GL_EYE_PLANE, planeT); - - if (format == javax_media_j3d_TexCoordGeneration_TEXTURE_COORDINATE_3) { - glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); - glTexGenfv(GL_R, GL_EYE_PLANE, planeR); - } else if (format == javax_media_j3d_TexCoordGeneration_TEXTURE_COORDINATE_4) { - glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); - glTexGenfv(GL_R, GL_EYE_PLANE, planeR); - glTexGeni(GL_Q, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); - glTexGenfv(GL_Q, GL_EYE_PLANE, planeQ); - } - glPopMatrix(); - break; - case javax_media_j3d_TexCoordGeneration_SPHERE_MAP: - glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); - glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); - if (format == javax_media_j3d_TexCoordGeneration_TEXTURE_COORDINATE_3) { - glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); - } else if (format == javax_media_j3d_TexCoordGeneration_TEXTURE_COORDINATE_4) { - glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); - glTexGeni(GL_Q, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); - } - - break; - case javax_media_j3d_TexCoordGeneration_NORMAL_MAP: - glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_NORMAL_MAP_EXT); - glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_NORMAL_MAP_EXT); - if (format == javax_media_j3d_TexCoordGeneration_TEXTURE_COORDINATE_3) { - glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_NORMAL_MAP_EXT); - } else if (format == javax_media_j3d_TexCoordGeneration_TEXTURE_COORDINATE_4) { - glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_NORMAL_MAP_EXT); - glTexGeni(GL_Q, GL_TEXTURE_GEN_MODE, GL_NORMAL_MAP_EXT); - } - break; - case javax_media_j3d_TexCoordGeneration_REFLECTION_MAP: - glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_EXT); - glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_EXT); - if (format == javax_media_j3d_TexCoordGeneration_TEXTURE_COORDINATE_3) { - glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_EXT); - } else if (format == javax_media_j3d_TexCoordGeneration_TEXTURE_COORDINATE_4) { - glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_EXT); - glTexGeni(GL_Q, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_EXT); - } - break; - } - } else { - glDisable(GL_TEXTURE_GEN_S); - glDisable(GL_TEXTURE_GEN_T); - glDisable(GL_TEXTURE_GEN_R); - glDisable(GL_TEXTURE_GEN_Q); - } -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_resetTextureAttributes( - JNIEnv *env, - jobject cv, - jlong ctxInfo) -{ - float color[] = {0.0, 0.0, 0.0, 0.0}; - - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - glPushAttrib(GL_TRANSFORM_BIT); - glMatrixMode(GL_TEXTURE); - glLoadIdentity(); - glPopAttrib(); - glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, color); - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); - glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); - - if(ctxProperties->textureRegisterCombinersAvailable) - glDisable(GL_REGISTER_COMBINERS_NV); - - if(ctxProperties->textureColorTableAvailable) - glDisable(GL_TEXTURE_COLOR_TABLE_SGI); - /* GL_SGI_texture_color_table */ -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTextureAttributes( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jdoubleArray transform, - jboolean isIdentity, - jint textureMode, - jint perspCorrectionMode, - jfloat textureBlendColorRed, - jfloat textureBlendColorGreen, - jfloat textureBlendColorBlue, - jfloat textureBlendColorAlpha, - jint textureFormat) -{ - jdouble *mx_ptr; - float color[4]; - JNIEnv table = *env; - - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - if (perspCorrectionMode == javax_media_j3d_TextureAttributes_NICEST) { - glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); - } else { - glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST); - } - - /* set OGL texture matrix */ - glPushAttrib(GL_TRANSFORM_BIT); - glMatrixMode(GL_TEXTURE); - - mx_ptr = (jdouble *)(*(table->GetPrimitiveArrayCritical))(env, transform, - NULL); - if (isIdentity) { - glLoadIdentity(); - } else if (ctxProperties->gl13) { - ctxProperties->glLoadTransposeMatrixd(mx_ptr); - } else { - double mx[16]; - COPY_TRANSPOSE(mx_ptr, mx); - glLoadMatrixd(mx); - } - - (*(table->ReleasePrimitiveArrayCritical))(env, transform, mx_ptr, 0); - - glPopAttrib(); - - /* set texture color */ - color[0] = textureBlendColorRed; - color[1] = textureBlendColorGreen; - color[2] = textureBlendColorBlue; - color[3] = textureBlendColorAlpha; - glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, color); - - /* set texture environment mode */ - - switch (textureMode) { - case javax_media_j3d_TextureAttributes_MODULATE: - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - break; - case javax_media_j3d_TextureAttributes_DECAL: - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); - break; - case javax_media_j3d_TextureAttributes_BLEND: - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_BLEND); - break; - case javax_media_j3d_TextureAttributes_REPLACE: - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); - break; - case javax_media_j3d_TextureAttributes_COMBINE: - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, - ctxProperties->combine_enum); - break; - } - - if(ctxProperties->textureColorTableAvailable) - glDisable(GL_TEXTURE_COLOR_TABLE_SGI); - /* GL_SGI_texture_color_table */ -} - -GLenum getCombinerArg(jint arg, GLenum textureUnit, GLenum combUnit) { - GLenum comb; - - switch (arg) { - case javax_media_j3d_TextureAttributes_COMBINE_OBJECT_COLOR: - if (combUnit == GL_COMBINER0_NV) { - comb = GL_PRIMARY_COLOR_NV; - } else { - comb = GL_SPARE0_NV; - } - break; - case javax_media_j3d_TextureAttributes_COMBINE_TEXTURE_COLOR: - comb = textureUnit; - break; - case javax_media_j3d_TextureAttributes_COMBINE_CONSTANT_COLOR: - comb = GL_CONSTANT_COLOR0_NV; - break; - case javax_media_j3d_TextureAttributes_COMBINE_PREVIOUS_TEXTURE_UNIT_STATE: - comb = textureUnit -1; - break; - } - - return (comb); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateRegisterCombiners( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jdoubleArray transform, - jboolean isIdentity, - jint textureMode, - jint perspCorrectionMode, - jfloat textureBlendColorRed, - jfloat textureBlendColorGreen, - jfloat textureBlendColorBlue, - jfloat textureBlendColorAlpha, - jint textureFormat, - jint combineRgbMode, - jint combineAlphaMode, - jintArray combineRgbSrc, - jintArray combineAlphaSrc, - jintArray combineRgbFcn, - jintArray combineAlphaFcn, - jint combineRgbScale, - jint combineAlphaScale) -{ - jdouble *mx_ptr; - float color[4]; - JNIEnv table = *env; - GLenum textureUnit; - GLenum combinerUnit; - - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - jint * rgbSrc; - GLenum color1, color2; - GLenum fragment; - - if (perspCorrectionMode == javax_media_j3d_TextureAttributes_NICEST) { - glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); - } else { - glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST); - } - - /* set OGL texture matrix */ - glPushAttrib(GL_TRANSFORM_BIT); - glMatrixMode(GL_TEXTURE); - - mx_ptr = (jdouble *)(*(table->GetPrimitiveArrayCritical))(env, transform, - NULL); - if (isIdentity) { - glLoadIdentity(); - } else if (ctxProperties->gl13) { - ctxProperties->glLoadTransposeMatrixd(mx_ptr); - } else { - double mx[16]; - COPY_TRANSPOSE(mx_ptr, mx); - glLoadMatrixd(mx); - } - - (*(table->ReleasePrimitiveArrayCritical))(env, transform, mx_ptr, 0); - - glPopAttrib(); - - /* set texture color */ - color[0] = textureBlendColorRed; - color[1] = textureBlendColorGreen; - color[2] = textureBlendColorBlue; - color[3] = textureBlendColorAlpha; - glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, color); - - /* set texture environment mode */ - glEnable(GL_REGISTER_COMBINERS_NV); - textureUnit = ctxProperties->currentTextureUnit; - combinerUnit = ctxProperties->currentCombinerUnit; - if (combinerUnit == GL_COMBINER0_NV) { - fragment = GL_PRIMARY_COLOR_NV; - } else { - fragment = GL_SPARE0_NV; - } - - switch (textureMode) { - case javax_media_j3d_TextureAttributes_MODULATE: - - ctxProperties->glCombinerInputNV(combinerUnit, GL_RGB, - GL_VARIABLE_A_NV, fragment, - GL_UNSIGNED_IDENTITY_NV, GL_RGB); - ctxProperties->glCombinerInputNV(combinerUnit, GL_RGB, - GL_VARIABLE_B_NV, textureUnit, - GL_UNSIGNED_IDENTITY_NV, GL_RGB); - ctxProperties->glCombinerInputNV(combinerUnit, GL_ALPHA, - GL_VARIABLE_A_NV, fragment, - GL_UNSIGNED_IDENTITY_NV, GL_ALPHA); - ctxProperties->glCombinerInputNV(combinerUnit, GL_ALPHA, - GL_VARIABLE_B_NV, textureUnit, - GL_UNSIGNED_IDENTITY_NV, GL_ALPHA); - - ctxProperties->glCombinerOutputNV(combinerUnit, GL_RGB, - GL_SPARE0_NV, GL_DISCARD_NV, GL_DISCARD_NV, - GL_NONE, GL_NONE, GL_FALSE, GL_FALSE, GL_FALSE); - ctxProperties->glCombinerOutputNV(combinerUnit, GL_ALPHA, - GL_SPARE0_NV, GL_DISCARD_NV, GL_DISCARD_NV, - GL_NONE, GL_NONE, GL_FALSE, GL_FALSE, GL_FALSE); - break; - - case javax_media_j3d_TextureAttributes_DECAL: - - ctxProperties->glCombinerInputNV(combinerUnit, GL_RGB, - GL_VARIABLE_A_NV, fragment, - GL_UNSIGNED_IDENTITY_NV, GL_RGB); - ctxProperties->glCombinerInputNV(combinerUnit, GL_RGB, - GL_VARIABLE_B_NV, textureUnit, - GL_UNSIGNED_INVERT_NV, GL_ALPHA); - ctxProperties->glCombinerInputNV(combinerUnit, GL_RGB, - GL_VARIABLE_C_NV, textureUnit, - GL_UNSIGNED_IDENTITY_NV, GL_RGB); - ctxProperties->glCombinerInputNV(combinerUnit, GL_RGB, - GL_VARIABLE_D_NV, textureUnit, - GL_UNSIGNED_IDENTITY_NV, GL_ALPHA); - - ctxProperties->glCombinerInputNV(combinerUnit, GL_ALPHA, - GL_VARIABLE_A_NV, fragment, - GL_UNSIGNED_IDENTITY_NV, GL_ALPHA); - ctxProperties->glCombinerInputNV(combinerUnit, GL_ALPHA, - GL_VARIABLE_B_NV, GL_ZERO, - GL_UNSIGNED_INVERT_NV, GL_ALPHA); - - ctxProperties->glCombinerOutputNV(combinerUnit, GL_RGB, - GL_DISCARD_NV, GL_DISCARD_NV, GL_SPARE0_NV, - GL_NONE, GL_NONE, GL_FALSE, GL_FALSE, GL_FALSE); - ctxProperties->glCombinerOutputNV(combinerUnit, GL_ALPHA, - GL_SPARE0_NV, GL_DISCARD_NV, GL_DISCARD_NV, - GL_NONE, GL_NONE, GL_FALSE, GL_FALSE, GL_FALSE); - break; - - case javax_media_j3d_TextureAttributes_BLEND: - - ctxProperties->glCombinerParameterfvNV(GL_CONSTANT_COLOR0_NV, color); - - ctxProperties->glCombinerInputNV(combinerUnit, GL_RGB, - GL_VARIABLE_A_NV, fragment, - GL_UNSIGNED_IDENTITY_NV, GL_RGB); - ctxProperties->glCombinerInputNV(combinerUnit, GL_RGB, - GL_VARIABLE_B_NV, textureUnit, - GL_UNSIGNED_INVERT_NV, GL_RGB); - ctxProperties->glCombinerInputNV(combinerUnit, GL_RGB, - GL_VARIABLE_C_NV, GL_CONSTANT_COLOR0_NV, - GL_UNSIGNED_IDENTITY_NV, GL_RGB); - ctxProperties->glCombinerInputNV(combinerUnit, GL_RGB, - GL_VARIABLE_D_NV, textureUnit, - GL_UNSIGNED_IDENTITY_NV, GL_RGB); - - ctxProperties->glCombinerInputNV(combinerUnit, GL_ALPHA, - GL_VARIABLE_A_NV, fragment, - GL_UNSIGNED_IDENTITY_NV, GL_ALPHA); - ctxProperties->glCombinerInputNV(combinerUnit, GL_ALPHA, - GL_VARIABLE_B_NV, textureUnit, - GL_UNSIGNED_IDENTITY_NV, GL_ALPHA); - - ctxProperties->glCombinerOutputNV(combinerUnit, GL_RGB, - GL_DISCARD_NV, GL_DISCARD_NV, GL_SPARE0_NV, - GL_NONE, GL_NONE, GL_FALSE, GL_FALSE, GL_FALSE); - ctxProperties->glCombinerOutputNV(combinerUnit, GL_ALPHA, - GL_SPARE0_NV, GL_DISCARD_NV, GL_DISCARD_NV, - GL_NONE, GL_NONE, GL_FALSE, GL_FALSE, GL_FALSE); - break; - - case javax_media_j3d_TextureAttributes_REPLACE: - - ctxProperties->glCombinerInputNV(combinerUnit, GL_RGB, - GL_VARIABLE_A_NV, textureUnit, - GL_UNSIGNED_IDENTITY_NV, GL_RGB); - ctxProperties->glCombinerInputNV(combinerUnit, GL_RGB, - GL_VARIABLE_B_NV, GL_ZERO, - GL_UNSIGNED_INVERT_NV, GL_RGB); - ctxProperties->glCombinerInputNV(combinerUnit, GL_ALPHA, - GL_VARIABLE_A_NV, textureUnit, - GL_UNSIGNED_IDENTITY_NV, GL_ALPHA); - ctxProperties->glCombinerInputNV(combinerUnit, GL_ALPHA, - GL_VARIABLE_B_NV, GL_ZERO, - GL_UNSIGNED_INVERT_NV, GL_ALPHA); - - ctxProperties->glCombinerOutputNV(combinerUnit, GL_RGB, - GL_SPARE0_NV, GL_DISCARD_NV, GL_DISCARD_NV, - GL_NONE, GL_NONE, GL_FALSE, GL_FALSE, GL_FALSE); - ctxProperties->glCombinerOutputNV(combinerUnit, GL_ALPHA, - GL_SPARE0_NV, GL_DISCARD_NV, GL_DISCARD_NV, - GL_NONE, GL_NONE, GL_FALSE, GL_FALSE, GL_FALSE); - break; - - case javax_media_j3d_TextureAttributes_COMBINE: - if (combineRgbMode == - javax_media_j3d_TextureAttributes_COMBINE_DOT3) { - rgbSrc = (jint *)(*(table->GetPrimitiveArrayCritical))( - env, combineRgbSrc, NULL); - color1 = getCombinerArg(rgbSrc[0], textureUnit, combinerUnit); - ctxProperties->glCombinerInputNV(combinerUnit, GL_RGB, - GL_VARIABLE_A_NV, color1, - GL_EXPAND_NORMAL_NV, GL_RGB); - color2 = getCombinerArg(rgbSrc[1], textureUnit, combinerUnit); - ctxProperties->glCombinerInputNV(combinerUnit, GL_RGB, - GL_VARIABLE_B_NV, color2, - GL_EXPAND_NORMAL_NV, GL_RGB); - (*(table->ReleasePrimitiveArrayCritical))(env, combineRgbSrc, - rgbSrc, 0); - ctxProperties->glCombinerInputNV(combinerUnit, GL_ALPHA, - GL_VARIABLE_A_NV, GL_ZERO, - GL_UNSIGNED_INVERT_NV, GL_ALPHA); - ctxProperties->glCombinerInputNV(combinerUnit, GL_ALPHA, - GL_VARIABLE_B_NV, GL_ZERO, - GL_UNSIGNED_INVERT_NV, GL_ALPHA); - - ctxProperties->glCombinerOutputNV(combinerUnit, GL_RGB, - GL_SPARE0_NV, GL_DISCARD_NV, GL_DISCARD_NV, - GL_NONE/*SCALE_BY_FOUR_NV*/, GL_NONE, GL_TRUE, - GL_FALSE, GL_FALSE); - ctxProperties->glCombinerOutputNV(combinerUnit, GL_ALPHA, - GL_SPARE0_NV, GL_DISCARD_NV, GL_DISCARD_NV, - GL_NONE, GL_NONE, GL_FALSE, - GL_FALSE, GL_FALSE); - } - break; - } - - - ctxProperties->glFinalCombinerInputNV(GL_VARIABLE_A_NV, - GL_SPARE0_NV, GL_UNSIGNED_IDENTITY_NV, GL_RGB); - ctxProperties->glFinalCombinerInputNV(GL_VARIABLE_B_NV, - GL_ZERO, GL_UNSIGNED_INVERT_NV, GL_RGB); - ctxProperties->glFinalCombinerInputNV(GL_VARIABLE_C_NV, - GL_ZERO, GL_UNSIGNED_IDENTITY_NV, GL_RGB); - ctxProperties->glFinalCombinerInputNV(GL_VARIABLE_D_NV, - GL_ZERO, GL_UNSIGNED_IDENTITY_NV, GL_RGB); - ctxProperties->glFinalCombinerInputNV(GL_VARIABLE_E_NV, - GL_ZERO, GL_UNSIGNED_IDENTITY_NV, GL_RGB); - ctxProperties->glFinalCombinerInputNV(GL_VARIABLE_F_NV, - GL_ZERO, GL_UNSIGNED_IDENTITY_NV, GL_RGB); - ctxProperties->glFinalCombinerInputNV(GL_VARIABLE_G_NV, - GL_SPARE0_NV, GL_UNSIGNED_IDENTITY_NV, GL_ALPHA); - - if(ctxProperties->textureColorTableAvailable) - glDisable(GL_TEXTURE_COLOR_TABLE_SGI); - /* GL_SGI_texture_color_table */ -} - -void getGLCombineMode(GraphicsContextPropertiesInfo *ctxInfo, - jint combineRgbMode, jint combineAlphaMode, - jint *GLrgbMode, jint *GLalphaMode) { - - switch (combineRgbMode) { - case javax_media_j3d_TextureAttributes_COMBINE_REPLACE: - *GLrgbMode = GL_REPLACE; - break; - case javax_media_j3d_TextureAttributes_COMBINE_MODULATE: - *GLrgbMode = GL_MODULATE; - break; - case javax_media_j3d_TextureAttributes_COMBINE_ADD: - *GLrgbMode = GL_ADD; - break; - case javax_media_j3d_TextureAttributes_COMBINE_ADD_SIGNED: - *GLrgbMode = ctxInfo->combine_add_signed_enum; - break; - case javax_media_j3d_TextureAttributes_COMBINE_SUBTRACT: - *GLrgbMode = ctxInfo->combine_subtract_enum; - break; - case javax_media_j3d_TextureAttributes_COMBINE_INTERPOLATE: - *GLrgbMode = ctxInfo->combine_interpolate_enum; - break; - case javax_media_j3d_TextureAttributes_COMBINE_DOT3: - *GLrgbMode = ctxInfo->combine_dot3_rgb_enum; - break; - default: - break; - } - - switch (combineAlphaMode) { - case javax_media_j3d_TextureAttributes_COMBINE_REPLACE: - *GLalphaMode = GL_REPLACE; - break; - case javax_media_j3d_TextureAttributes_COMBINE_MODULATE: - *GLalphaMode = GL_MODULATE; - break; - case javax_media_j3d_TextureAttributes_COMBINE_ADD: - *GLalphaMode = GL_ADD; - break; - case javax_media_j3d_TextureAttributes_COMBINE_ADD_SIGNED: - *GLalphaMode = ctxInfo->combine_add_signed_enum; - break; - case javax_media_j3d_TextureAttributes_COMBINE_SUBTRACT: - *GLalphaMode = ctxInfo->combine_subtract_enum; - break; - case javax_media_j3d_TextureAttributes_COMBINE_INTERPOLATE: - *GLalphaMode = ctxInfo->combine_interpolate_enum; - break; - case javax_media_j3d_TextureAttributes_COMBINE_DOT3: - /* dot3 will only make sense for alpha if rgb is also - doing dot3. So if rgb is not doing dot3, fallback to replace - */ - if (combineRgbMode == javax_media_j3d_TextureAttributes_COMBINE_DOT3) { - *GLrgbMode = ctxInfo->combine_dot3_rgba_enum; - } else { - *GLalphaMode = GL_REPLACE; - } - break; - default: - break; - } - - return; -} - -/* mapping from java enum to gl enum - */ - -jint _gl_combineRgbSrcIndex[] = { - GL_SOURCE0_RGB_ARB, - GL_SOURCE1_RGB_ARB, - GL_SOURCE2_RGB_ARB, -}; - -jint _gl_combineAlphaSrcIndex[] = { - GL_SOURCE0_ALPHA_ARB, - GL_SOURCE1_ALPHA_ARB, - GL_SOURCE2_ALPHA_ARB, -}; - -jint _gl_combineRgbOpIndex[] = { - GL_OPERAND0_RGB_ARB, - GL_OPERAND1_RGB_ARB, - GL_OPERAND2_RGB_ARB, -}; - -jint _gl_combineAlphaOpIndex[] = { - GL_OPERAND0_ALPHA_ARB, - GL_OPERAND1_ALPHA_ARB, - GL_OPERAND2_ALPHA_ARB, -}; - -jint _gl_combineSrc[] = { - GL_PRIMARY_COLOR_ARB, /* TextureAttributes.COMBINE_OBJECT_COLOR */ - GL_TEXTURE, /* TextureAttributes.COMBINE_TEXTURE */ - GL_CONSTANT_ARB, /* TextureAttributes.COMBINE_CONSTANT_COLOR */ - GL_PREVIOUS_ARB, /* TextureAttributes.COMBINE_PREVIOUS_TEXTURE_UNIT_STATE */ -}; - -jint _gl_combineFcn[] = { - GL_SRC_COLOR, /* TextureAttributes.COMBINE_SRC_COLOR */ - GL_ONE_MINUS_SRC_COLOR, /* TextureAttributes.COMBINE_ONE_MINUS_SRC_COLOR */ - GL_SRC_ALPHA, /* TextureAttributes.COMBINE_SRC_ALPHA */ - GL_ONE_MINUS_SRC_ALPHA, /* TextureAttributes.COMBINE_ONE_MINUS_SRC_ALPHA */ -}; - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateCombiner( - JNIEnv *env, - jobject obj, - jlong ctxProperties, - jint combineRgbMode, - jint combineAlphaMode, - jintArray combineRgbSrc, - jintArray combineAlphaSrc, - jintArray combineRgbFcn, - jintArray combineAlphaFcn, - jint combineRgbScale, - jint combineAlphaScale) { - - - JNIEnv table = *env; - GraphicsContextPropertiesInfo *ctxInfo = - (GraphicsContextPropertiesInfo *)ctxProperties; - jint *rgbSrc, *alphaSrc, *rgbFcn, *alphaFcn; - jint GLrgbMode, GLalphaMode; - jint nargs, i; - - rgbSrc = (jint *)(*(table->GetPrimitiveArrayCritical))( - env, combineRgbSrc, NULL); - alphaSrc = (jint *)(*(table->GetPrimitiveArrayCritical))( - env, combineAlphaSrc, NULL); - rgbFcn = (jint *)(*(table->GetPrimitiveArrayCritical))( - env, combineRgbFcn, NULL); - alphaFcn = (jint *)(*(table->GetPrimitiveArrayCritical))( - env, combineAlphaFcn, NULL); - - getGLCombineMode(ctxInfo, combineRgbMode, combineAlphaMode, - &GLrgbMode, &GLalphaMode); - - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GLrgbMode); - glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GLalphaMode); - - if (combineRgbMode == javax_media_j3d_TextureAttributes_COMBINE_REPLACE) { - nargs = 1; - } else if (combineRgbMode == javax_media_j3d_TextureAttributes_COMBINE_INTERPOLATE) { - nargs = 3; - } else { - nargs = 2; - } - - for (i = 0; i < nargs; i++) { - glTexEnvi(GL_TEXTURE_ENV, _gl_combineRgbSrcIndex[i], - _gl_combineSrc[rgbSrc[i]]); - glTexEnvi(GL_TEXTURE_ENV, _gl_combineRgbOpIndex[i], - _gl_combineFcn[rgbFcn[i]]); - } - - if (combineAlphaMode == javax_media_j3d_TextureAttributes_COMBINE_REPLACE) { - nargs = 1; - } else if (combineAlphaMode == javax_media_j3d_TextureAttributes_COMBINE_INTERPOLATE) { - nargs = 3; - } else { - nargs = 2; - } - - for (i = 0; i < nargs; i++) { - glTexEnvi(GL_TEXTURE_ENV, _gl_combineAlphaSrcIndex[i], - _gl_combineSrc[alphaSrc[i]]); - glTexEnvi(GL_TEXTURE_ENV, _gl_combineAlphaOpIndex[i], - _gl_combineFcn[alphaFcn[i]]); - } - - glTexEnvi(GL_TEXTURE_ENV, GL_RGB_SCALE_ARB, combineRgbScale); - glTexEnvi(GL_TEXTURE_ENV, GL_ALPHA_SCALE, combineAlphaScale); - - (*(table->ReleasePrimitiveArrayCritical))(env, combineRgbSrc, rgbSrc, 0); - (*(table->ReleasePrimitiveArrayCritical))(env, combineAlphaSrc, alphaSrc, 0); - (*(table->ReleasePrimitiveArrayCritical))(env, combineRgbFcn, rgbFcn, 0); - (*(table->ReleasePrimitiveArrayCritical))(env, combineAlphaFcn, alphaFcn, 0); - -} - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTextureColorTable( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint numComponents, - jint colorTableSize, - jintArray textureColorTable) -{ - JNIEnv table = *env; - jint *ctable; - - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - if(ctxProperties->textureColorTableAvailable) { - ctable = (jint *)(*(table->GetPrimitiveArrayCritical))(env, - textureColorTable, NULL); - if (numComponents == 3) { - ctxProperties->glColorTable(GL_TEXTURE_COLOR_TABLE_SGI, GL_RGB, - colorTableSize, GL_RGB, GL_INT, ctable); - } else { - ctxProperties->glColorTable(GL_TEXTURE_COLOR_TABLE_SGI, GL_RGBA, - colorTableSize, GL_RGBA, GL_INT, ctable); - } - - (*(table->ReleasePrimitiveArrayCritical))(env, textureColorTable, ctable, 0); - glEnable(GL_TEXTURE_COLOR_TABLE_SGI); - } -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateMaterialColor( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jfloat colorRed, - jfloat colorGreen, - jfloat colorBlue, - jfloat transparency) -{ - float color[4]; - - color[0] = colorRed; - color[1] = colorGreen; - color[2] = colorBlue; - color[3] = transparency; - glColor4fv(color); - glDisable(GL_LIGHTING); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateMaterial( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jfloat colorRed, - jfloat colorGreen, - jfloat colorBlue, - jfloat transparency, - jfloat aRed, - jfloat aGreen, - jfloat aBlue, - jfloat eRed, - jfloat eGreen, - jfloat eBlue, - jfloat dRed, - jfloat dGreen, - jfloat dBlue, - jfloat sRed, - jfloat sGreen, - jfloat sBlue, - jfloat shininess, - jint colorTarget, - jboolean lightEnable) -{ - float color[4]; - - color[3] = 1.0f; - glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, &shininess); - if (colorTarget == javax_media_j3d_Material_DIFFUSE) { - glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE); - } - else if (colorTarget == javax_media_j3d_Material_AMBIENT) { - glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT); - } - else if (colorTarget == javax_media_j3d_Material_EMISSIVE) { - glColorMaterial(GL_FRONT_AND_BACK, GL_EMISSION); - } - else if (colorTarget == javax_media_j3d_Material_SPECULAR) { - glColorMaterial(GL_FRONT_AND_BACK, GL_SPECULAR); - } - else if (colorTarget == javax_media_j3d_Material_AMBIENT_AND_DIFFUSE) { - glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE); - } - - color[0] = eRed; color[1] = eGreen; color[2] = eBlue; - glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, color); - - color[0] = aRed; color[1] = aGreen; color[2] = aBlue; - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, color); - - color[0] = sRed; color[1] = sGreen; color[2] = sBlue; - glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, color); - - if (lightEnable == JNI_TRUE) { - color[0] = dRed; color[1] = dGreen; color[2] = dBlue; - } else { - color[0] = colorRed; color[1] = colorGreen; color[2] = colorBlue; - } - color[3] = transparency; - glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, color); - glColor4fv(color); - - if (lightEnable) { - glEnable(GL_LIGHTING); - } else { - glDisable(GL_LIGHTING); - } -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_resetTransparency( - JNIEnv *env, - jobject cv, - jlong ctxInfo, - jint geometryType, - jint polygonMode, - jboolean lineAA, - jboolean pointAA) -{ - if (((((geometryType & javax_media_j3d_RenderMolecule_LINE) != 0) || - (polygonMode == javax_media_j3d_PolygonAttributes_POLYGON_LINE)) - && lineAA == JNI_TRUE) || - ((((geometryType & javax_media_j3d_RenderMolecule_POINT) != 0) || - (polygonMode == javax_media_j3d_PolygonAttributes_POLYGON_POINT)) - && pointAA == JNI_TRUE)) { - glEnable (GL_BLEND); - glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - } else { - glDisable (GL_BLEND); - } - glDisable(GL_POLYGON_STIPPLE); - -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTransparencyAttributes( - JNIEnv *env, - jobject tr, - jlong ctxInfo, - jfloat transparency, - jint geometryType, - jint polygonMode, - jboolean lineAA, - jboolean pointAA, - jint transparencyMode, - jint srcBlendFunction, - jint dstBlendFunction) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - if (transparencyMode != javax_media_j3d_TransparencyAttributes_SCREEN_DOOR) { - glDisable(GL_POLYGON_STIPPLE); - } else { - glEnable(GL_POLYGON_STIPPLE); - glPolygonStipple((GLubyte *)(screen_door[(int)((transparency)*16)])); - } - - if ((transparencyMode < javax_media_j3d_TransparencyAttributes_SCREEN_DOOR) || - ((((geometryType & javax_media_j3d_RenderMolecule_LINE) != 0) || - (polygonMode == javax_media_j3d_PolygonAttributes_POLYGON_LINE)) - && lineAA == JNI_TRUE) || - ((((geometryType & javax_media_j3d_RenderMolecule_POINT) != 0) || - (polygonMode == javax_media_j3d_PolygonAttributes_POLYGON_POINT)) - && pointAA == JNI_TRUE)) { - glEnable (GL_BLEND); - /* valid range of blendFunction 0..3 is already verify in Java code. */ - glBlendFunc(ctxProperties->blendFunctionTable[srcBlendFunction], - ctxProperties->blendFunctionTable[dstBlendFunction]); - } else { - glDisable (GL_BLEND); - } -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_resetColoringAttributes( - JNIEnv *env, - jobject cv, - jlong ctxInfo, - jfloat colorRed, - jfloat colorGreen, - jfloat colorBlue, - jfloat transparency, - jboolean lightEnable) -{ - - float color[4]; - - if (lightEnable != JNI_TRUE) { - color[0] = colorRed; color[1] = colorGreen; color[2] = colorBlue; - color[3] = transparency; - glColor4fv(color); - - } - glShadeModel(GL_SMOOTH); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateColoringAttributes( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jfloat dRed, - jfloat dGreen, - jfloat dBlue, - jfloat colorRed, - jfloat colorGreen, - jfloat colorBlue, - jfloat transparency, - jboolean lightEnable, - jint shadeModel) -{ - - float color[4]; - - if (lightEnable == JNI_TRUE) { - color[0] = dRed; color[1] = dGreen; color[2] = dBlue; - } else { - color[0] = colorRed; color[1] = colorGreen; color[2] = colorBlue; - } - color[3] = transparency; - - glColor4fv(color); - if (shadeModel == javax_media_j3d_ColoringAttributes_SHADE_FLAT) { - glShadeModel(GL_FLAT); - } else { - glShadeModel(GL_SMOOTH); - } -} - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_resetTextureNative( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint texUnitIndex) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - if(ctxProperties->gl13) { - if (texUnitIndex >= 0) { - ctxProperties->glActiveTexture(texUnitIndex + GL_TEXTURE0); - ctxProperties->glClientActiveTexture(texUnitIndex + GL_TEXTURE0); - } - } - - glDisable(GL_TEXTURE_1D); - glDisable(GL_TEXTURE_2D); - glDisable(GL_TEXTURE_3D); - glDisable(GL_TEXTURE_CUBE_MAP); -} - - -/* - * A set of common updateTexture functions shared among Texture2D, Texture3D, - * and TextureCubeMap for setting texture parameters - */ -void updateTextureFilterModes( - GraphicsContextPropertiesInfo *ctxProperties, - jint target, - jint minFilter, - jint magFilter) { - - /* set texture min filter */ - switch(minFilter) { - case javax_media_j3d_Texture_FASTEST: - case javax_media_j3d_Texture_BASE_LEVEL_POINT: - glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - break; - case javax_media_j3d_Texture_BASE_LEVEL_LINEAR: - glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - break; - case javax_media_j3d_Texture_MULTI_LEVEL_POINT: - glTexParameteri(target, GL_TEXTURE_MIN_FILTER, - GL_NEAREST_MIPMAP_NEAREST); - break; - case javax_media_j3d_Texture_NICEST: - case javax_media_j3d_Texture_MULTI_LEVEL_LINEAR: - glTexParameteri(target, GL_TEXTURE_MIN_FILTER, - GL_LINEAR_MIPMAP_LINEAR); - break; - case javax_media_j3d_Texture_FILTER4: - glTexParameteri(target, GL_TEXTURE_MIN_FILTER, - ctxProperties->filter4_enum); - break; - - } - - /* set texture mag filter */ - switch(magFilter){ - case javax_media_j3d_Texture_FASTEST: - case javax_media_j3d_Texture_BASE_LEVEL_POINT: - glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - break; - case javax_media_j3d_Texture_NICEST: - case javax_media_j3d_Texture_BASE_LEVEL_LINEAR: - glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - break; - case javax_media_j3d_Texture_LINEAR_SHARPEN: - glTexParameteri(target, GL_TEXTURE_MAG_FILTER, - ctxProperties->linear_sharpen_enum); - break; - case javax_media_j3d_Texture_LINEAR_SHARPEN_RGB: - glTexParameteri(target, GL_TEXTURE_MAG_FILTER, - ctxProperties->linear_sharpen_rgb_enum); - break; - case javax_media_j3d_Texture_LINEAR_SHARPEN_ALPHA: - glTexParameteri(target, GL_TEXTURE_MAG_FILTER, - ctxProperties->linear_sharpen_alpha_enum); - break; - case javax_media_j3d_Texture2D_LINEAR_DETAIL: - glTexParameteri(target, GL_TEXTURE_MAG_FILTER, - ctxProperties->linear_detail_enum); - break; - case javax_media_j3d_Texture2D_LINEAR_DETAIL_RGB: - glTexParameteri(target, GL_TEXTURE_MAG_FILTER, - ctxProperties->linear_detail_rgb_enum); - break; - case javax_media_j3d_Texture2D_LINEAR_DETAIL_ALPHA: - glTexParameteri(target, GL_TEXTURE_MAG_FILTER, - ctxProperties->linear_detail_alpha_enum); - break; - case javax_media_j3d_Texture_FILTER4: - glTexParameteri(target, GL_TEXTURE_MAG_FILTER, - ctxProperties->filter4_enum); - break; - } -} - - -void updateTextureLodRange( - GraphicsContextPropertiesInfo *ctxProperties, - jint target, - jint baseLevel, - jint maximumLevel, - float minimumLod, float maximumLod) { - - /* - * checking of the availability of the extension is already done - * in the java side - */ - glTexParameteri(target, ctxProperties->texture_base_level_enum, - baseLevel); - glTexParameteri(target, ctxProperties->texture_max_level_enum, - maximumLevel); - glTexParameterf(target, ctxProperties->texture_min_lod_enum, - minimumLod); - glTexParameterf(target, ctxProperties->texture_max_lod_enum, - maximumLod); -} - -void updateTextureLodOffset( - GraphicsContextPropertiesInfo *ctxProperties, - jint target, - float lodOffsetS, float lodOffsetT, float lodOffsetR) { - - /* - * checking of the availability of the extension is already done - * in the java side - */ - glTexParameterf(target, GL_TEXTURE_LOD_BIAS_S_SGIX, lodOffsetS); - glTexParameterf(target, GL_TEXTURE_LOD_BIAS_T_SGIX, lodOffsetT); - glTexParameterf(target, GL_TEXTURE_LOD_BIAS_R_SGIX, lodOffsetR); -} - - -void updateTextureBoundary( - GraphicsContextPropertiesInfo *ctxProperties, - jint target, - jint boundaryModeS, - jint boundaryModeT, - jint boundaryModeR, - jfloat boundaryRed, - jfloat boundaryGreen, - jfloat boundaryBlue, - jfloat boundaryAlpha) -{ - float color[4]; - - /* set texture wrap parameter */ - switch (boundaryModeS){ - case javax_media_j3d_Texture_WRAP: - glTexParameteri(target, GL_TEXTURE_WRAP_S, GL_REPEAT); - break; - case javax_media_j3d_Texture_CLAMP: - glTexParameteri(target, GL_TEXTURE_WRAP_S, GL_CLAMP); - break; - case javax_media_j3d_Texture_CLAMP_TO_EDGE: - glTexParameteri(target, GL_TEXTURE_WRAP_S, - GL_CLAMP_TO_EDGE); - break; - case javax_media_j3d_Texture_CLAMP_TO_BOUNDARY: - glTexParameteri(target, GL_TEXTURE_WRAP_S, - ctxProperties->texture_clamp_to_border_enum); - break; - } - - switch (boundaryModeT) { - case javax_media_j3d_Texture_WRAP: - glTexParameteri(target, GL_TEXTURE_WRAP_T, GL_REPEAT); - break; - case javax_media_j3d_Texture_CLAMP: - glTexParameteri(target, GL_TEXTURE_WRAP_T, GL_CLAMP); - break; - case javax_media_j3d_Texture_CLAMP_TO_EDGE: - glTexParameteri(target, GL_TEXTURE_WRAP_T, - GL_CLAMP_TO_EDGE); - break; - case javax_media_j3d_Texture_CLAMP_TO_BOUNDARY: - glTexParameteri(target, GL_TEXTURE_WRAP_T, - ctxProperties->texture_clamp_to_border_enum); - break; - } - - /* applies to Texture3D only */ - if (boundaryModeR != -1) { - switch (boundaryModeR) { - case javax_media_j3d_Texture_WRAP: - glTexParameteri(target, - GL_TEXTURE_WRAP_R, GL_REPEAT); - break; - - case javax_media_j3d_Texture_CLAMP: - glTexParameteri(target, - GL_TEXTURE_WRAP_R, GL_CLAMP); - break; - case javax_media_j3d_Texture_CLAMP_TO_EDGE: - glTexParameteri(target, - GL_TEXTURE_WRAP_R, - GL_CLAMP_TO_EDGE); - break; - case javax_media_j3d_Texture_CLAMP_TO_BOUNDARY: - glTexParameteri(target, - GL_TEXTURE_WRAP_R, - ctxProperties->texture_clamp_to_border_enum); - break; - } - } - - if (boundaryModeS == javax_media_j3d_Texture_CLAMP || - boundaryModeT == javax_media_j3d_Texture_CLAMP || - boundaryModeR == javax_media_j3d_Texture_CLAMP) { - /* set texture border color */ - color[0] = boundaryRed; - color[1] = boundaryGreen; - color[2] = boundaryBlue; - color[3] = boundaryAlpha; - glTexParameterfv(target, GL_TEXTURE_BORDER_COLOR, color); - } -} - -void updateTextureSharpenFunc( - JNIEnv *env, - GraphicsContextPropertiesInfo *ctxProperties, - jint target, - jint numPts, - jfloatArray pts) -{ - /* - * checking of the availability of sharpen texture functionality - * is already done in the java side - */ - - JNIEnv table = *env; - jfloat *funcPts = NULL; - - if (numPts > 0) { - funcPts = (jfloat *)(*(table->GetPrimitiveArrayCritical))( - env, pts, NULL); - } - - ctxProperties->glSharpenTexFuncSGIS(target, numPts, funcPts); - - if (funcPts != NULL) { - (*(table->ReleasePrimitiveArrayCritical))(env, pts, funcPts, 0); - } -} - - -void updateTextureFilter4Func( - JNIEnv *env, - GraphicsContextPropertiesInfo *ctxProperties, - jint target, - jint numPts, - jfloatArray pts) -{ - /* - * checking of the availability of filter4 functionality - * is already done in the java side - */ - - JNIEnv table = *env; - jfloat *funcPts = NULL; - - if (numPts > 0) { - funcPts = (jfloat *)(*(table->GetPrimitiveArrayCritical))( - env, pts, NULL); - } - - ctxProperties->glTexFilterFuncSGIS(target, ctxProperties->filter4_enum, - numPts, funcPts); - - if (funcPts != NULL) { - (*(table->ReleasePrimitiveArrayCritical))(env, pts, funcPts, 0); - } -} - -void updateTextureAnisotropicFilter( - JNIEnv *env, - GraphicsContextPropertiesInfo *ctxProperties, - jint target, - jfloat degree) -{ - /* - * checking of the availability of anisotropic filter functionality - * is already done in the java side - */ - glTexParameterf(target, - ctxProperties->texture_filter_anisotropic_ext_enum, - degree); -} - -/* - * common function to define 2D texture image for different target - */ -void updateTexture2DImage( - JNIEnv *env, - GraphicsContextPropertiesInfo *ctxProperties, - jint target, - jint numLevels, - jint level, - jint textureFormat, - jint imageFormat, - jint width, - jint height, - jint boundaryWidth, - jint dataType, - jobject data, - jboolean useAutoMipMap) -{ - void *imageObjPtr; - GLenum format = 0, internalFormat = 0, type = GL_UNSIGNED_INT_8_8_8_8; - JNIEnv table = *env; - GLboolean forceAlphaToOne = GL_FALSE; - - if((dataType == IMAGE_DATA_TYPE_BYTE_ARRAY) || (dataType == IMAGE_DATA_TYPE_INT_ARRAY)) { - imageObjPtr = (void *)(*(table->GetPrimitiveArrayCritical))(env, (jarray)data, NULL); - } - else { - imageObjPtr = (void *)(*(table->GetDirectBufferAddress))(env, data); - } - - switch (textureFormat) { - case INTENSITY: - internalFormat = GL_INTENSITY; - break; - case LUMINANCE: - internalFormat = GL_LUMINANCE; - break; - case ALPHA: - internalFormat = GL_ALPHA; - break; - case LUMINANCE_ALPHA: - internalFormat = GL_LUMINANCE_ALPHA; - break; - case J3D_RGB: - internalFormat = GL_RGB; - break; - case J3D_RGBA: - internalFormat = GL_RGBA; - break; - default: - throwAssert(env, "updateTexture2DImage : textureFormat illegal format"); - return; - } - - if (useAutoMipMap) { - glTexParameteri(target, GL_GENERATE_MIPMAP, GL_TRUE); - } - else { - glTexParameteri(target, GL_GENERATE_MIPMAP, GL_FALSE); - } - - if((dataType == IMAGE_DATA_TYPE_BYTE_ARRAY) || (dataType == IMAGE_DATA_TYPE_BYTE_BUFFER)) { - switch (imageFormat) { - /* GL_BGR */ - case IMAGE_FORMAT_BYTE_BGR: - format = GL_BGR; - break; - case IMAGE_FORMAT_BYTE_RGB: - format = GL_RGB; - break; - /* GL_ABGR_EXT */ - case IMAGE_FORMAT_BYTE_ABGR: - if (ctxProperties->abgr_ext) { /* If its zero, should never come here! */ - format = GL_ABGR_EXT; - } - else { - throwAssert(env, "updateTexture2DImage : GL_ABGR_EXT format is unsupported"); - return; - } - break; - case IMAGE_FORMAT_BYTE_RGBA: - format = GL_RGBA; - break; - case IMAGE_FORMAT_BYTE_LA: - /* all LA types are stored as LA8 */ - format = GL_LUMINANCE_ALPHA; - break; - case IMAGE_FORMAT_BYTE_GRAY: - if (internalFormat == GL_ALPHA) { - format = GL_ALPHA; - } else { - format = GL_LUMINANCE; - } - break; - - case IMAGE_FORMAT_USHORT_GRAY: - case IMAGE_FORMAT_INT_BGR: - case IMAGE_FORMAT_INT_RGB: - case IMAGE_FORMAT_INT_ARGB: - default: - throwAssert(env, "updateTexture2DImage : imageFormat illegal format"); - return; - } - - glTexImage2D(target, level, internalFormat, - width, height, boundaryWidth, - format, GL_UNSIGNED_BYTE, imageObjPtr); - - } - else if((dataType == IMAGE_DATA_TYPE_INT_ARRAY) || (dataType == IMAGE_DATA_TYPE_INT_BUFFER)) { - switch (imageFormat) { - /* GL_BGR */ - case IMAGE_FORMAT_INT_BGR: /* Assume XBGR format */ - format = GL_RGBA; - type = GL_UNSIGNED_INT_8_8_8_8_REV; - forceAlphaToOne = GL_TRUE; - break; - case IMAGE_FORMAT_INT_RGB: /* Assume XRGB format */ - forceAlphaToOne = GL_TRUE; - /* Fall through to next case */ - case IMAGE_FORMAT_INT_ARGB: - format = GL_BGRA; - type = GL_UNSIGNED_INT_8_8_8_8_REV; - break; - /* This method only supports 3 and 4 components formats and INT types. */ - case IMAGE_FORMAT_BYTE_LA: - case IMAGE_FORMAT_BYTE_GRAY: - case IMAGE_FORMAT_USHORT_GRAY: - case IMAGE_FORMAT_BYTE_BGR: - case IMAGE_FORMAT_BYTE_RGB: - case IMAGE_FORMAT_BYTE_RGBA: - case IMAGE_FORMAT_BYTE_ABGR: - default: - throwAssert(env, "updateTexture2DImage : imageFormat illegal format"); - return; - } - - /* Force Alpha to 1.0 if needed */ - if(forceAlphaToOne) { - glPixelTransferf(GL_ALPHA_SCALE, 0.0f); - glPixelTransferf(GL_ALPHA_BIAS, 1.0f); - } - - glTexImage2D(target, level, internalFormat, - width, height, boundaryWidth, - format, type, imageObjPtr); - - /* Restore Alpha scale and bias */ - if(forceAlphaToOne) { - glPixelTransferf(GL_ALPHA_SCALE, 1.0f); - glPixelTransferf(GL_ALPHA_BIAS, 0.0f); - } - } - else { - throwAssert(env, "updateTexture2DImage : illegal image data type"); - return; - } - - - if((dataType == IMAGE_DATA_TYPE_BYTE_ARRAY) || (dataType == IMAGE_DATA_TYPE_INT_ARRAY)) { - (*(table->ReleasePrimitiveArrayCritical))(env, data, imageObjPtr, 0); - } - -} - - -/* - * common function to update 2D texture image for different target - */ - -void updateTexture2DSubImage( - JNIEnv *env, - GraphicsContextPropertiesInfo *ctxProperties, - jint target, - jint level, - jint xoffset, - jint yoffset, - jint textureFormat, - jint imageFormat, - jint imgXOffset, - jint imgYOffset, - jint tilew, - jint width, - jint height, - jint dataType, - jobject data) { - - void *imageObjPtr; - GLenum format = 0, internalFormat = 0, type = GL_UNSIGNED_INT_8_8_8_8; - JNIEnv table = *env; - GLboolean forceAlphaToOne = GL_FALSE; - jbyte *tmpByte; - jint *tmpInt; - jint numBytes = 0; - jboolean pixelStore = JNI_FALSE; - - if((dataType == IMAGE_DATA_TYPE_BYTE_ARRAY) || (dataType == IMAGE_DATA_TYPE_INT_ARRAY)) { - imageObjPtr = (void *)(*(table->GetPrimitiveArrayCritical))(env, (jarray)data, NULL); - } - else { - imageObjPtr = (void *)(*(table->GetDirectBufferAddress))(env, data); - } - - if (imgXOffset > 0 || (width < tilew)) { - pixelStore = JNI_TRUE; - glPixelStorei(GL_UNPACK_ROW_LENGTH, tilew); - } - - switch (textureFormat) { - case INTENSITY: - internalFormat = GL_INTENSITY; - break; - case LUMINANCE: - internalFormat = GL_LUMINANCE; - break; - case ALPHA: - internalFormat = GL_ALPHA; - break; - case LUMINANCE_ALPHA: - internalFormat = GL_LUMINANCE_ALPHA; - break; - case J3D_RGB: - internalFormat = GL_RGB; - break; - case J3D_RGBA: - internalFormat = GL_RGBA; - break; - default: - throwAssert(env, "updateTexture2DSubImage : textureFormat illegal format"); - return; - } - - if((dataType == IMAGE_DATA_TYPE_BYTE_ARRAY) || (dataType == IMAGE_DATA_TYPE_BYTE_BUFFER)) { - switch (imageFormat) { - /* GL_BGR */ - case IMAGE_FORMAT_BYTE_BGR: - format = GL_BGR; - numBytes = 3; - break; - case IMAGE_FORMAT_BYTE_RGB: - format = GL_RGB; - numBytes = 3; - break; - /* GL_ABGR_EXT */ - case IMAGE_FORMAT_BYTE_ABGR: - if (ctxProperties->abgr_ext) { /* If its zero, should never come here! */ - format = GL_ABGR_EXT; - numBytes = 4; - } - else { - throwAssert(env, "updateTexture2DSubImage : GL_ABGR_EXT format is unsupported"); - return; - } - break; - case IMAGE_FORMAT_BYTE_RGBA: - format = GL_RGBA; - numBytes = 4; - break; - case IMAGE_FORMAT_BYTE_LA: - /* all LA types are stored as LA8 */ - numBytes = 2; - format = GL_LUMINANCE_ALPHA; - break; - case IMAGE_FORMAT_BYTE_GRAY: - if (internalFormat == GL_ALPHA) { - format = GL_ALPHA; - numBytes = 1; - } else { - format = GL_LUMINANCE; - numBytes = 1; - } - break; - - case IMAGE_FORMAT_USHORT_GRAY: - case IMAGE_FORMAT_INT_BGR: - case IMAGE_FORMAT_INT_RGB: - case IMAGE_FORMAT_INT_ARGB: - default: - throwAssert(env, "updateTexture2DSubImage : imageFormat illegal format"); - return; - } - - tmpByte = (jbyte*)imageObjPtr + - (tilew * imgYOffset + imgXOffset) * numBytes; - - - glTexSubImage2D(target, level, xoffset, yoffset, width, height, - format, GL_UNSIGNED_BYTE, (GLvoid *)tmpByte); - - } - else if((dataType == IMAGE_DATA_TYPE_INT_ARRAY) || (dataType == IMAGE_DATA_TYPE_INT_BUFFER)) { - switch (imageFormat) { - /* GL_BGR */ - case IMAGE_FORMAT_INT_BGR: /* Assume XBGR format */ - format = GL_RGBA; - type = GL_UNSIGNED_INT_8_8_8_8_REV; - forceAlphaToOne = GL_TRUE; - break; - case IMAGE_FORMAT_INT_RGB: /* Assume XRGB format */ - forceAlphaToOne = GL_TRUE; - /* Fall through to next case */ - case IMAGE_FORMAT_INT_ARGB: - format = GL_BGRA; - type = GL_UNSIGNED_INT_8_8_8_8_REV; - break; - /* This method only supports 3 and 4 components formats and INT types. */ - case IMAGE_FORMAT_BYTE_LA: - case IMAGE_FORMAT_BYTE_GRAY: - case IMAGE_FORMAT_USHORT_GRAY: - case IMAGE_FORMAT_BYTE_BGR: - case IMAGE_FORMAT_BYTE_RGB: - case IMAGE_FORMAT_BYTE_RGBA: - case IMAGE_FORMAT_BYTE_ABGR: - default: - throwAssert(env, "updateTexture2DSubImage : imageFormat illegal format"); - return; - } - - numBytes = 4; - - tmpInt = (jint*)((jbyte*)imageObjPtr + - (tilew * imgYOffset + imgXOffset)*numBytes); - - /* Force Alpha to 1.0 if needed */ - if(forceAlphaToOne) { - glPixelTransferf(GL_ALPHA_SCALE, 0.0f); - glPixelTransferf(GL_ALPHA_BIAS, 1.0f); - } - - glTexSubImage2D(target, level, xoffset, yoffset, width, height, - format, type, (GLvoid *)tmpInt); - - /* Restore Alpha scale and bias */ - if(forceAlphaToOne) { - glPixelTransferf(GL_ALPHA_SCALE, 1.0f); - glPixelTransferf(GL_ALPHA_BIAS, 0.0f); - } - } - else { - throwAssert(env, "updateTexture2DImage : illegal image data type"); - return; - } - - - if((dataType == IMAGE_DATA_TYPE_BYTE_ARRAY) || (dataType == IMAGE_DATA_TYPE_INT_ARRAY)) { - (*(table->ReleasePrimitiveArrayCritical))(env, data, imageObjPtr, 0); - } - - if (pixelStore) { - glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); - } -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_bindTexture2D( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint objectId, - jboolean enable) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - glDisable(GL_TEXTURE_CUBE_MAP); - glDisable(GL_TEXTURE_3D); - - if (enable == JNI_FALSE) { - glDisable(GL_TEXTURE_2D); - } else { - glBindTexture(GL_TEXTURE_2D, objectId); - glEnable(GL_TEXTURE_2D); - } -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture2DFilterModes( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint minFilter, - jint magFilter) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - updateTextureFilterModes(ctxProperties, GL_TEXTURE_2D, - minFilter, magFilter); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture2DLodRange( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint baseLevel, - jint maximumLevel, - jfloat minimumLOD, - jfloat maximumLOD) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - updateTextureLodRange(ctxProperties, GL_TEXTURE_2D, - baseLevel, maximumLevel, - minimumLOD, maximumLOD); -} - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture2DLodOffset( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jfloat lodOffsetS, - jfloat lodOffsetT, - jfloat lodOffsetR) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - updateTextureLodOffset(ctxProperties, GL_TEXTURE_2D, - lodOffsetS, lodOffsetT, lodOffsetR); -} - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture2DBoundary( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint boundaryModeS, - jint boundaryModeT, - jfloat boundaryRed, - jfloat boundaryGreen, - jfloat boundaryBlue, - jfloat boundaryAlpha) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - updateTextureBoundary(ctxProperties, GL_TEXTURE_2D, - boundaryModeS, boundaryModeT, -1, - boundaryRed, boundaryGreen, - boundaryBlue, boundaryAlpha); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture2DSharpenFunc( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint numPts, - jfloatArray pts) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - updateTextureSharpenFunc(env, ctxProperties, GL_TEXTURE_2D, numPts, pts); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture2DFilter4Func( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint numPts, - jfloatArray pts) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - updateTextureFilter4Func(env, ctxProperties, GL_TEXTURE_2D, numPts, pts); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture2DAnisotropicFilter( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jfloat degree) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - updateTextureAnisotropicFilter(env, ctxProperties, GL_TEXTURE_2D, degree); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture2DSubImage( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint level, - jint xoffset, - jint yoffset, - jint textureFormat, - jint imageFormat, - jint imgXOffset, - jint imgYOffset, - jint tilew, - jint width, - jint height, - jint dataType, - jobject data, - jboolean useAutoMipMap) -{ - /* Note : useAutoMipMap is not use for subImage in ogl pipe */ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - updateTexture2DSubImage(env, ctxProperties, GL_TEXTURE_2D, - level, xoffset, yoffset, - textureFormat, imageFormat, - imgXOffset, imgYOffset, tilew, width, height, - dataType, data); -} - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture2DImage( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint numLevels, - jint level, - jint textureFormat, - jint imageFormat, - jint width, - jint height, - jint boundaryWidth, - jint dataType, - jobject data, - jboolean useAutoMipMap) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - updateTexture2DImage(env, ctxProperties, GL_TEXTURE_2D, - numLevels, level, textureFormat, imageFormat, - width, height, boundaryWidth, dataType, data, useAutoMipMap); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_bindTexture3D( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint objectId, - jboolean enable) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - /* textureCubeMap will take precedure over 3D Texture */ - glDisable(GL_TEXTURE_CUBE_MAP); - - if (enable == JNI_FALSE) { - glDisable(GL_TEXTURE_3D); - } else { - glBindTexture(GL_TEXTURE_3D, objectId); - glEnable(GL_TEXTURE_3D); - } -} - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture3DFilterModes( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint minFilter, - jint magFilter) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - updateTextureFilterModes(ctxProperties, GL_TEXTURE_3D, - minFilter, magFilter); -} - - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture3DLodRange( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint baseLevel, - jint maximumLevel, - jfloat minimumLOD, - jfloat maximumLOD) -{ - - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - updateTextureLodRange(ctxProperties, GL_TEXTURE_3D, - baseLevel, maximumLevel, - minimumLOD, maximumLOD); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture3DLodOffset( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jfloat lodOffsetS, - jfloat lodOffsetT, - jfloat lodOffsetR) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - updateTextureLodOffset(ctxProperties, GL_TEXTURE_3D, - lodOffsetS, lodOffsetT, lodOffsetR); -} - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture3DBoundary( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint boundaryModeS, - jint boundaryModeT, - jint boundaryModeR, - jfloat boundaryRed, - jfloat boundaryGreen, - jfloat boundaryBlue, - jfloat boundaryAlpha) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - updateTextureBoundary(ctxProperties, GL_TEXTURE_3D, - boundaryModeS, boundaryModeT, boundaryModeR, - boundaryRed, boundaryGreen, - boundaryBlue, boundaryAlpha); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture3DSharpenFunc( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint numPts, - jfloatArray pts) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - updateTextureSharpenFunc(env, ctxProperties, GL_TEXTURE_3D, numPts, pts); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture3DFilter4Func( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint numPts, - jfloatArray pts) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - updateTextureFilter4Func(env, ctxProperties, GL_TEXTURE_3D, numPts, pts); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture3DAnisotropicFilter( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jfloat degree) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - updateTextureAnisotropicFilter(env, ctxProperties, GL_TEXTURE_3D, degree); -} - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture3DImage( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint numLevels, - jint level, - jint textureFormat, - jint imageFormat, - jint width, - jint height, - jint depth, - jint boundaryWidth, - jint dataType, - jobject data, - jboolean useAutoMipMap) -{ - void *imageObjPtr; - GLenum format = 0, internalFormat = 0, type = GL_UNSIGNED_INT_8_8_8_8; - JNIEnv table = *env; - GLboolean forceAlphaToOne = GL_FALSE; - - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - if((dataType == IMAGE_DATA_TYPE_BYTE_ARRAY) || (dataType == IMAGE_DATA_TYPE_INT_ARRAY)) { - imageObjPtr = (void *)(*(table->GetPrimitiveArrayCritical))(env, (jarray)data, NULL); - } - else { - imageObjPtr = (void *)(*(table->GetDirectBufferAddress))(env, data); - } - - switch (textureFormat) { - case INTENSITY: - internalFormat = GL_INTENSITY; - break; - case LUMINANCE: - internalFormat = GL_LUMINANCE; - break; - case ALPHA: - internalFormat = GL_ALPHA; - break; - case LUMINANCE_ALPHA: - internalFormat = GL_LUMINANCE_ALPHA; - break; - case J3D_RGB: - internalFormat = GL_RGB; - break; - case J3D_RGBA: - internalFormat = GL_RGBA; - break; - default: - throwAssert(env, "updateTexture3DImage : textureFormat illegal format"); - return; - } - - if (useAutoMipMap) { - glTexParameteri(GL_TEXTURE_3D, GL_GENERATE_MIPMAP, GL_TRUE); - } - else { - glTexParameteri(GL_TEXTURE_3D, GL_GENERATE_MIPMAP, GL_FALSE); - } - - if((dataType == IMAGE_DATA_TYPE_BYTE_ARRAY) || (dataType == IMAGE_DATA_TYPE_BYTE_BUFFER)) { - switch (imageFormat) { - /* GL_BGR */ - case IMAGE_FORMAT_BYTE_BGR: - format = GL_BGR; - break; - case IMAGE_FORMAT_BYTE_RGB: - format = GL_RGB; - break; - /* GL_ABGR_EXT */ - case IMAGE_FORMAT_BYTE_ABGR: - if (ctxProperties->abgr_ext) { /* If its zero, should never come here! */ - format = GL_ABGR_EXT; - } - else { - throwAssert(env, "updateTexture3DImage : GL_ABGR_EXT format is unsupported"); - return; - } - break; - case IMAGE_FORMAT_BYTE_RGBA: - format = GL_RGBA; - break; - case IMAGE_FORMAT_BYTE_LA: - /* all LA types are stored as LA8 */ - format = GL_LUMINANCE_ALPHA; - break; - case IMAGE_FORMAT_BYTE_GRAY: - if (internalFormat == GL_ALPHA) { - format = GL_ALPHA; - } else { - format = GL_LUMINANCE; - } - break; - - case IMAGE_FORMAT_USHORT_GRAY: - case IMAGE_FORMAT_INT_BGR: - case IMAGE_FORMAT_INT_RGB: - case IMAGE_FORMAT_INT_ARGB: - default: - throwAssert(env, "updateTexture3DImage : imageFormat illegal format"); - return; - } - - ctxProperties->glTexImage3DEXT(GL_TEXTURE_3D, - level, internalFormat, - width, height, depth, boundaryWidth, - format, GL_UNSIGNED_BYTE, - imageObjPtr); - - } - else if((dataType == IMAGE_DATA_TYPE_INT_ARRAY) || (dataType == IMAGE_DATA_TYPE_INT_BUFFER)) { - switch (imageFormat) { - /* GL_BGR */ - case IMAGE_FORMAT_INT_BGR: /* Assume XBGR format */ - format = GL_RGBA; - type = GL_UNSIGNED_INT_8_8_8_8_REV; - forceAlphaToOne = GL_TRUE; - break; - case IMAGE_FORMAT_INT_RGB: /* Assume XRGB format */ - forceAlphaToOne = GL_TRUE; - /* Fall through to next case */ - case IMAGE_FORMAT_INT_ARGB: - format = GL_BGRA; - type = GL_UNSIGNED_INT_8_8_8_8_REV; - break; - /* This method only supports 3 and 4 components formats and INT types. */ - case IMAGE_FORMAT_BYTE_LA: - case IMAGE_FORMAT_BYTE_GRAY: - case IMAGE_FORMAT_USHORT_GRAY: - case IMAGE_FORMAT_BYTE_BGR: - case IMAGE_FORMAT_BYTE_RGB: - case IMAGE_FORMAT_BYTE_RGBA: - case IMAGE_FORMAT_BYTE_ABGR: - default: - throwAssert(env, "updateTexture3DImage : imageFormat illegal format"); - return; - } - - /* Force Alpha to 1.0 if needed */ - if(forceAlphaToOne) { - glPixelTransferf(GL_ALPHA_SCALE, 0.0f); - glPixelTransferf(GL_ALPHA_BIAS, 1.0f); - } - - ctxProperties->glTexImage3DEXT(GL_TEXTURE_3D, - level, internalFormat, - width, height, depth, boundaryWidth, - format, type, imageObjPtr); - - /* Restore Alpha scale and bias */ - if(forceAlphaToOne) { - glPixelTransferf(GL_ALPHA_SCALE, 1.0f); - glPixelTransferf(GL_ALPHA_BIAS, 0.0f); - } - } - else { - throwAssert(env, "updateTexture3DImage : illegal image data type"); - } - - - if((dataType == IMAGE_DATA_TYPE_BYTE_ARRAY) || (dataType == IMAGE_DATA_TYPE_INT_ARRAY)) { - (*(table->ReleasePrimitiveArrayCritical))(env, data, imageObjPtr, 0); - } - -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture3DSubImage( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint level, - jint xoffset, - jint yoffset, - jint zoffset, - jint textureFormat, - jint imageFormat, - jint imgXOffset, - jint imgYOffset, - jint imgZOffset, - jint tilew, - jint tileh, - jint width, - jint height, - jint depth, - jint dataType, - jobject data, - jboolean useAutoMipMap) { - - /* Note : useAutoMipMap is not use for SubImage in ogl pipe */ - - void *imageObjPtr; - GLenum format = 0, internalFormat = 0, type = GL_UNSIGNED_INT_8_8_8_8; - JNIEnv table = *env; - GLboolean forceAlphaToOne = GL_FALSE; - jbyte *tmpByte; - jint *tmpInt; - jint numBytes = 0; - jboolean pixelStore = JNI_FALSE; - - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - if((dataType == IMAGE_DATA_TYPE_BYTE_ARRAY) || (dataType == IMAGE_DATA_TYPE_INT_ARRAY)) { - imageObjPtr = (void *)(*(table->GetPrimitiveArrayCritical))(env, (jarray)data, NULL); - } - else { - imageObjPtr = (void *)(*(table->GetDirectBufferAddress))(env, data); - } - - if (imgXOffset > 0 || (width < tilew)) { - pixelStore = JNI_TRUE; - glPixelStorei(GL_UNPACK_ROW_LENGTH, tilew); - } - - switch (textureFormat) { - case INTENSITY: - internalFormat = GL_INTENSITY; - break; - case LUMINANCE: - internalFormat = GL_LUMINANCE; - break; - case ALPHA: - internalFormat = GL_ALPHA; - break; - case LUMINANCE_ALPHA: - internalFormat = GL_LUMINANCE_ALPHA; - break; - case J3D_RGB: - internalFormat = GL_RGB; - break; - case J3D_RGBA: - internalFormat = GL_RGBA; - break; - default: - throwAssert(env, "updateTexture3DSubImage : textureFormat illegal format"); - break; - } - - if((dataType == IMAGE_DATA_TYPE_BYTE_ARRAY) || (dataType == IMAGE_DATA_TYPE_BYTE_BUFFER)) { - switch (imageFormat) { - /* GL_BGR */ - case IMAGE_FORMAT_BYTE_BGR: - format = GL_BGR; - numBytes = 3; - break; - case IMAGE_FORMAT_BYTE_RGB: - format = GL_RGB; - numBytes = 3; - break; - /* GL_ABGR_EXT */ - case IMAGE_FORMAT_BYTE_ABGR: - if (ctxProperties->abgr_ext) { /* If its zero, should never come here! */ - format = GL_ABGR_EXT; - numBytes = 4; - } - else { - throwAssert(env, "updateTexture3DSubImage : GL_ABGR_EXT format is unsupported"); - } - break; - case IMAGE_FORMAT_BYTE_RGBA: - format = GL_RGBA; - numBytes = 4; - break; - case IMAGE_FORMAT_BYTE_LA: - /* all LA types are stored as LA8 */ - format = GL_LUMINANCE_ALPHA; - numBytes = 2; - break; - case IMAGE_FORMAT_BYTE_GRAY: - if (internalFormat == GL_ALPHA) { - format = GL_ALPHA; - numBytes = 1; - } else { - format = GL_LUMINANCE; - numBytes = 1; - } - break; - - case IMAGE_FORMAT_USHORT_GRAY: - case IMAGE_FORMAT_INT_BGR: - case IMAGE_FORMAT_INT_RGB: - case IMAGE_FORMAT_INT_ARGB: - default: - throwAssert(env, "updateTexture3DSubImage : imageFormat illegal format"); - break; - } - - tmpByte = (jbyte*)imageObjPtr + - (tilew * tileh * imgZOffset + tilew * imgYOffset + imgXOffset) * - numBytes; - - ctxProperties->glTexSubImage3DEXT(GL_TEXTURE_3D, - level, xoffset, yoffset, zoffset, - width, height, depth, - format, GL_UNSIGNED_BYTE, - (GLvoid *)tmpByte); - - - } - else if((dataType == IMAGE_DATA_TYPE_INT_ARRAY) || (dataType == IMAGE_DATA_TYPE_INT_BUFFER)) { - switch (imageFormat) { - /* GL_BGR */ - case IMAGE_FORMAT_INT_BGR: /* Assume XBGR format */ - format = GL_RGBA; - type = GL_UNSIGNED_INT_8_8_8_8_REV; - forceAlphaToOne = GL_TRUE; - break; - case IMAGE_FORMAT_INT_RGB: /* Assume XRGB format */ - forceAlphaToOne = GL_TRUE; - /* Fall through to next case */ - case IMAGE_FORMAT_INT_ARGB: - format = GL_BGRA; - type = GL_UNSIGNED_INT_8_8_8_8_REV; - break; - /* This method only supports 3 and 4 components formats and INT types. */ - case IMAGE_FORMAT_BYTE_LA: - case IMAGE_FORMAT_BYTE_GRAY: - case IMAGE_FORMAT_USHORT_GRAY: - case IMAGE_FORMAT_BYTE_BGR: - case IMAGE_FORMAT_BYTE_RGB: - case IMAGE_FORMAT_BYTE_RGBA: - case IMAGE_FORMAT_BYTE_ABGR: - default: - throwAssert(env, "updateTexture3DSubImage : imageFormat illegal format"); - break; - } - - numBytes = 4; - - tmpInt = (jint*)((jbyte*)imageObjPtr + - (tilew * tileh * imgZOffset + - tilew * imgYOffset + imgXOffset)*numBytes); - - /* Force Alpha to 1.0 if needed */ - if(forceAlphaToOne) { - glPixelTransferf(GL_ALPHA_SCALE, 0.0f); - glPixelTransferf(GL_ALPHA_BIAS, 1.0f); - } - - ctxProperties->glTexSubImage3DEXT(GL_TEXTURE_3D, - level, xoffset, yoffset, zoffset, - width, height, depth, - format, type, - (GLvoid *)tmpInt); - - /* Restore Alpha scale and bias */ - if(forceAlphaToOne) { - glPixelTransferf(GL_ALPHA_SCALE, 1.0f); - glPixelTransferf(GL_ALPHA_BIAS, 0.0f); - } - } - else { - throwAssert(env, "updateTexture3DImage : illegal image data type"); - return; - } - - - if((dataType == IMAGE_DATA_TYPE_BYTE_ARRAY) || (dataType == IMAGE_DATA_TYPE_INT_ARRAY)) { - (*(table->ReleasePrimitiveArrayCritical))(env, data, imageObjPtr, 0); - } - - if (pixelStore) { - glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); - } -} - - -/* - * mapping from java enum to gl enum - */ - -jint _gl_textureCubeMapFace[] = { - GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT, - GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT, - GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT, - GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT, - GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT, - GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT, -}; - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_bindTextureCubeMap( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint objectId, - jboolean enable) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - /* - * TextureCubeMap will take precedure over 3D Texture so - * there is no need to disable 3D Texture here. - */ - if (enable == JNI_FALSE) { - glDisable(GL_TEXTURE_CUBE_MAP); - } else { - glBindTexture(GL_TEXTURE_CUBE_MAP, objectId); - glEnable(GL_TEXTURE_CUBE_MAP); - } -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTextureCubeMapFilterModes( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint minFilter, - jint magFilter) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - updateTextureFilterModes(ctxProperties, - GL_TEXTURE_CUBE_MAP, - minFilter, magFilter); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTextureCubeMapLodRange( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint baseLevel, - jint maximumLevel, - jfloat minimumLOD, - jfloat maximumLOD) -{ - - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - updateTextureLodRange(ctxProperties, - GL_TEXTURE_CUBE_MAP, - baseLevel, maximumLevel, - minimumLOD, maximumLOD); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTextureCubeMapLodOffset( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jfloat lodOffsetS, - jfloat lodOffsetT, - jfloat lodOffsetR) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - updateTextureLodOffset(ctxProperties, - GL_TEXTURE_CUBE_MAP, - lodOffsetS, lodOffsetT, lodOffsetR); -} - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTextureCubeMapBoundary( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint boundaryModeS, - jint boundaryModeT, - jfloat boundaryRed, - jfloat boundaryGreen, - jfloat boundaryBlue, - jfloat boundaryAlpha) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - updateTextureBoundary(ctxProperties, - GL_TEXTURE_CUBE_MAP, - boundaryModeS, boundaryModeT, -1, - boundaryRed, boundaryGreen, - boundaryBlue, boundaryAlpha); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTextureCubeMapSharpenFunc( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint numPts, - jfloatArray pts) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - updateTextureSharpenFunc(env, ctxProperties, - GL_TEXTURE_CUBE_MAP, - numPts, pts); -} - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTextureCubeMapFilter4Func( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint numPts, - jfloatArray pts) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - updateTextureFilter4Func(env, ctxProperties, - GL_TEXTURE_CUBE_MAP, - numPts, pts); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTextureCubeMapAnisotropicFilter( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jfloat degree) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - updateTextureAnisotropicFilter(env, ctxProperties, - GL_TEXTURE_CUBE_MAP, - degree); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTextureCubeMapSubImage( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint face, - jint level, - jint xoffset, - jint yoffset, - jint textureFormat, - jint imageFormat, - jint imgXOffset, - jint imgYOffset, - jint tilew, - jint width, - jint height, - jint dataType, - jobject data, - jboolean useAutoMipMap) -{ - /* Note : useAutoMipMap is not use for SubImage in ogl pipe */ - - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - updateTexture2DSubImage(env, ctxProperties, _gl_textureCubeMapFace[face], - level, xoffset, yoffset, textureFormat, - imageFormat, imgXOffset, imgYOffset, tilew, - width, height, dataType, data); -} - - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTextureCubeMapImage( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint face, - jint numLevels, - jint level, - jint textureFormat, - jint imageFormat, - jint width, - jint height, - jint boundaryWidth, - jint dataType, - jobject data, - jboolean useAutoMipMap) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - updateTexture2DImage(env, ctxProperties, _gl_textureCubeMapFace[face], - numLevels, level, textureFormat, imageFormat, - width, height, boundaryWidth, dataType, data, useAutoMipMap); -} - -JNIEXPORT -jboolean JNICALL Java_javax_media_j3d_NativePipeline_decal1stChildSetup( - JNIEnv *env, - jobject obj, - jlong ctxInfo) -{ - glEnable(GL_STENCIL_TEST); - glClearStencil(0x0); - glClear(GL_STENCIL_BUFFER_BIT); - glStencilFunc (GL_ALWAYS, 0x1, 0x1); - glStencilOp (GL_KEEP, GL_KEEP, GL_REPLACE); - if (glIsEnabled(GL_DEPTH_TEST)) - return JNI_TRUE; - else - return JNI_FALSE; -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_decalNthChildSetup( - JNIEnv *env, - jobject obj, - jlong ctxInfo) -{ - glDisable(GL_DEPTH_TEST); - glStencilFunc (GL_EQUAL, 0x1, 0x1); - glStencilOp (GL_KEEP, GL_KEEP, GL_KEEP); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_decalReset( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jboolean depthBufferEnable) -{ - glDisable(GL_STENCIL_TEST); - if (depthBufferEnable == JNI_TRUE) - glEnable(GL_DEPTH_TEST); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_ctxUpdateEyeLightingEnable( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jboolean localEyeLightingEnable) -{ - if (localEyeLightingEnable == JNI_TRUE) { - glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE); - } else { - glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_FALSE); - } -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateSeparateSpecularColorEnable( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jboolean enable) -{ - if (enable) { - glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SEPARATE_SPECULAR_COLOR); - } else { - glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SINGLE_COLOR); - } -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateTextureUnitState( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint index, - jboolean enable) -{ - - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - if (ctxProperties->gl13 && index >= 0) { - ctxProperties->glActiveTexture(index + GL_TEXTURE0); - ctxProperties->glClientActiveTexture(GL_TEXTURE0 + index); - if (ctxProperties->textureRegisterCombinersAvailable) { - ctxProperties->currentTextureUnit = index + GL_TEXTURE0; - ctxProperties->currentCombinerUnit = index + GL_COMBINER0_NV; - if (ctxProperties->glCombinerParameteriNV != NULL) - ctxProperties->glCombinerParameteriNV( - GL_NUM_GENERAL_COMBINERS_NV, index + 1); - } - } - - if (enable == JNI_FALSE) { - /* if not enabled, then don't enable any tex mapping */ - - glDisable(GL_TEXTURE_1D); - glDisable(GL_TEXTURE_2D); - glDisable(GL_TEXTURE_3D); - glDisable(GL_TEXTURE_CUBE_MAP); - } - - /* - * if it is enabled, the enable flag will be taken care of - * in the bindTexture call - */ -} - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_setBlendColor( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jfloat colorRed, - jfloat colorGreen, - jfloat colorBlue, - jfloat colorAlpha) -{ - - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - if (ctxProperties->blend_color_ext) { - /* - fprintf(stderr, "setBlendColor is on: %f %f %f %f\n", - colorRed, colorGreen, colorBlue, colorAlpha); - */ - - ctxProperties->glBlendColor(colorRed, colorGreen, colorBlue, colorAlpha); - } -} - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_setBlendFunc( - JNIEnv * env, - jobject obj, - jlong ctxInfo, - jint srcBlendFunction, - jint dstBlendFunction) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - glEnable(GL_BLEND); - glBlendFunc(ctxProperties->blendFunctionTable[srcBlendFunction], - ctxProperties->blendFunctionTable[dstBlendFunction]); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_setFogEnableFlag( - JNIEnv * env, - jobject obj, - jlong ctxInfo, - jboolean enable) -{ - if (enable == JNI_TRUE) - glEnable(GL_FOG); - else - glDisable(GL_FOG); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_activeTextureUnit( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint index) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - if (ctxProperties->gl13) { - ctxProperties->glActiveTexture(GL_TEXTURE0 + index); - ctxProperties->glClientActiveTexture(GL_TEXTURE0 + index); - } -} - - -/* - * 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; -} diff --git a/src/native/ogl/Canvas3D.c b/src/native/ogl/Canvas3D.c deleted file mode 100644 index cd3d48f..0000000 --- a/src/native/ogl/Canvas3D.c +++ /dev/null @@ -1,3230 +0,0 @@ -/* - * $RCSfile$ - * - * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * $Revision$ - * $Date$ - * $State$ - */ - -/* - * 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. - */ - -/* j3dsys.h needs to be included before any other include files to suppres VC warning */ -#include "j3dsys.h" - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <math.h> -#include <jni.h> - -#include "gldefs.h" - -#if defined(UNIX) -#include <dlfcn.h> -#endif - -#ifdef DEBUG -/* Uncomment the following for VERBOSE debug messages */ -/* #define VERBOSE */ -#endif /* DEBUG */ - -extern void throwAssert(JNIEnv *env, char *str); -jboolean getJavaBoolEnv(JNIEnv *env, char* envStr); -static void initializeCtxInfo(JNIEnv *env, GraphicsContextPropertiesInfo* ctxInfo); -static void cleanupCtxInfo(GraphicsContextPropertiesInfo* ctxInfo); -static void disableAttribFor2D(GraphicsContextPropertiesInfo *ctxProperties); -static void disableAttribForRaster(GraphicsContextPropertiesInfo *ctxProperties); - -/* - * Class: javax_media_j3d_Canvas3D - * Method: getTextureColorTableSize - * Signature: ()I - */ -static int getTextureColorTableSize( - JNIEnv *env, - jobject obj, - GraphicsContextPropertiesInfo *ctxInfo, - char *extensionStr); - -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(); -extern HDC getMonitorDC(int screen); -HWND createDummyWindow(const char* szAppName); -#endif - -/* - * Extract the version numbers from a copy of the version string. - * Upon return, numbers[0] contains major version number - * numbers[1] contains minor version number - * Note that the passed in version string is modified. - */ -void extractVersionInfo(char *versionStr, int* numbers){ - char *majorNumStr; - char *minorNumStr; - - majorNumStr = strtok(versionStr, (char *)"."); - minorNumStr = strtok(0, (char *)"."); - if (majorNumStr != NULL) - numbers[0] = atoi(majorNumStr); - if (minorNumStr != NULL) - numbers[1] = atoi(minorNumStr); - - return; -} - -/* - * check if the extension is supported - */ -int -isExtensionSupported(const char *allExtensions, const char *extension) -{ - const char *start; - const char *where, *terminator; - - /* Extension names should not have spaces. */ - where = (const char *) strchr(extension, ' '); - if (where || *extension == '\0') - return 0; - - /* - * It takes a bit of care to be fool-proof about parsing the - * OpenGL extensions string. Don't be fooled by sub-strings, - * etc. - */ - start = allExtensions; - for (;;) { - where = (const char *) strstr((const char *) start, extension); - if (!where) - break; - terminator = where + strlen(extension); - if (where == start || *(where - 1) == ' ') - if (*terminator == ' ' || *terminator == '\0') - return 1; - start = terminator; - } - return 0; -} - - -static void -checkTextureExtensions( - JNIEnv *env, - jobject obj, - char *tmpExtensionStr, - GraphicsContextPropertiesInfo* ctxInfo) -{ - if (ctxInfo->gl13) { - ctxInfo->textureExtMask |= javax_media_j3d_Canvas3D_TEXTURE_MULTI_TEXTURE; - glGetIntegerv(GL_MAX_TEXTURE_UNITS, &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" )){ - ctxInfo->textureColorTableAvailable = JNI_TRUE; - ctxInfo->textureExtMask |= javax_media_j3d_Canvas3D_TEXTURE_COLOR_TABLE; - - /* get texture color table size */ - /* need to check later */ - ctxInfo->textureColorTableSize = getTextureColorTableSize(env, obj, - ctxInfo, tmpExtensionStr); - if (ctxInfo->textureColorTableSize <= 0) { - ctxInfo->textureColorTableAvailable = JNI_FALSE; - ctxInfo->textureExtMask &= ~javax_media_j3d_Canvas3D_TEXTURE_COLOR_TABLE; - } - if (ctxInfo->textureColorTableSize > 256) { - ctxInfo->textureColorTableSize = 256; - } - } - - if(isExtensionSupported(tmpExtensionStr,"GL_ARB_texture_env_combine" )){ - ctxInfo->textureEnvCombineAvailable = JNI_TRUE; - ctxInfo->textureCombineSubtractAvailable = JNI_TRUE; - - ctxInfo->textureExtMask |= javax_media_j3d_Canvas3D_TEXTURE_COMBINE; - ctxInfo->textureExtMask |= javax_media_j3d_Canvas3D_TEXTURE_COMBINE_SUBTRACT; - ctxInfo->combine_enum = GL_COMBINE_ARB; - ctxInfo->combine_add_signed_enum = GL_ADD_SIGNED_ARB; - ctxInfo->combine_interpolate_enum = GL_INTERPOLATE_ARB; - ctxInfo->combine_subtract_enum = GL_SUBTRACT_ARB; - - } else if(isExtensionSupported(tmpExtensionStr,"GL_EXT_texture_env_combine" )){ - ctxInfo->textureEnvCombineAvailable = JNI_TRUE; - ctxInfo->textureCombineSubtractAvailable = JNI_FALSE; - - ctxInfo->textureExtMask |= javax_media_j3d_Canvas3D_TEXTURE_COMBINE; - ctxInfo->combine_enum = GL_COMBINE_EXT; - ctxInfo->combine_add_signed_enum = GL_ADD_SIGNED_EXT; - ctxInfo->combine_interpolate_enum = GL_INTERPOLATE_EXT; - - /* EXT_texture_env_combine does not include subtract */ - ctxInfo->combine_subtract_enum = 0; - } - - if(isExtensionSupported(tmpExtensionStr,"GL_NV_register_combiners" )) { - ctxInfo->textureRegisterCombinersAvailable = JNI_TRUE; - ctxInfo->textureExtMask |= javax_media_j3d_Canvas3D_TEXTURE_REGISTER_COMBINERS; -#if defined(UNIX) - ctxInfo->glCombinerInputNV = - (MYPFNGLCOMBINERINPUTNV) dlsym(RTLD_DEFAULT, "glCombinerInputNV"); - ctxInfo->glFinalCombinerInputNV = - (MYPFNGLFINALCOMBINERINPUTNV) dlsym(RTLD_DEFAULT, "glFinalCombinerInputNV"); - ctxInfo->glCombinerOutputNV = - (MYPFNGLCOMBINEROUTPUTNV) dlsym(RTLD_DEFAULT, "glCombinerOutputNV"); - ctxInfo->glCombinerParameterfvNV = - (MYPFNGLCOMBINERPARAMETERFVNV) dlsym(RTLD_DEFAULT, "glCombinerParameterfvNV"); - ctxInfo->glCombinerParameterivNV = - (MYPFNGLCOMBINERPARAMETERIVNV) dlsym(RTLD_DEFAULT, "glCombinerParameterivNV"); - ctxInfo->glCombinerParameterfNV = - (MYPFNGLCOMBINERPARAMETERFNV) dlsym(RTLD_DEFAULT, "glCombinerParameterfNV"); - ctxInfo->glCombinerParameteriNV = - (MYPFNGLCOMBINERPARAMETERINV) dlsym(RTLD_DEFAULT, "glCombinerParameteriNV"); - if (ctxInfo->glCombinerInputNV == NULL || - ctxInfo->glFinalCombinerInputNV == NULL || - ctxInfo->glCombinerOutputNV == NULL || - ctxInfo->glCombinerParameterfvNV == NULL || - ctxInfo->glCombinerParameterivNV == NULL || - ctxInfo->glCombinerParameterfNV == NULL || - ctxInfo->glCombinerParameteriNV == NULL) { - /* lets play safe: */ - ctxInfo->textureExtMask &= - ~javax_media_j3d_Canvas3D_TEXTURE_REGISTER_COMBINERS; - ctxInfo->textureRegisterCombinersAvailable = JNI_FALSE; - } -#endif - -#ifdef WIN32 - ctxInfo->glCombinerInputNV = - (MYPFNGLCOMBINERINPUTNV) wglGetProcAddress("glCombinerInputNV"); - ctxInfo->glFinalCombinerInputNV = - (MYPFNGLFINALCOMBINERINPUTNV) wglGetProcAddress("glFinalCombinerInputNV"); - ctxInfo->glCombinerOutputNV = - (MYPFNGLCOMBINEROUTPUTNV) wglGetProcAddress("glCombinerOutputNV"); - ctxInfo->glCombinerParameterfvNV = - (MYPFNGLCOMBINERPARAMETERFVNV) wglGetProcAddress("glCombinerParameterfvNV"); - ctxInfo->glCombinerParameterivNV = - (MYPFNGLCOMBINERPARAMETERIVNV) wglGetProcAddress("glCombinerParameterivNV"); - ctxInfo->glCombinerParameterfNV = - (MYPFNGLCOMBINERPARAMETERFNV) wglGetProcAddress("glCombinerParameterfNV"); - ctxInfo->glCombinerParameteriNV = - (MYPFNGLCOMBINERPARAMETERINV) wglGetProcAddress("glCombinerParameteriNV"); - - /* - if (ctxInfo->glCombinerInputNV == NULL) { - printf("glCombinerInputNV == NULL\n"); - } - if (ctxInfo->glFinalCombinerInputNV == NULL) { - printf("glFinalCombinerInputNV == NULL\n"); - } - if (ctxInfo->glCombinerOutputNV == NULL) { - printf("ctxInfo->glCombinerOutputNV == NULL\n"); - } - if (ctxInfo->glCombinerParameterfvNV == NULL) { - printf("ctxInfo->glCombinerParameterfvNV == NULL\n"); - } - if (ctxInfo->glCombinerParameterivNV == NULL) { - printf("ctxInfo->glCombinerParameterivNV == NULL\n"); - } - if (ctxInfo->glCombinerParameterfNV == NULL) { - printf("ctxInfo->glCombinerParameterfNV == NULL\n"); - } - if (ctxInfo->glCombinerParameteriNV == NULL) { - printf("ctxInfo->glCombinerParameteriNV == NULL\n"); - } - */ - if ((ctxInfo->glCombinerInputNV == NULL) || - (ctxInfo->glFinalCombinerInputNV == NULL) || - (ctxInfo->glCombinerOutputNV == NULL) || - (ctxInfo->glCombinerParameterfvNV == NULL) || - (ctxInfo->glCombinerParameterivNV == NULL) || - (ctxInfo->glCombinerParameterfNV == NULL) || - (ctxInfo->glCombinerParameteriNV == NULL)) { - ctxInfo->textureExtMask &= ~javax_media_j3d_Canvas3D_TEXTURE_REGISTER_COMBINERS; - ctxInfo->textureRegisterCombinersAvailable = JNI_FALSE; - } - -#endif - - } - - if(isExtensionSupported(tmpExtensionStr,"GL_ARB_texture_env_dot3" )) { - ctxInfo->textureCombineDot3Available = JNI_TRUE; - ctxInfo->textureExtMask |= javax_media_j3d_Canvas3D_TEXTURE_COMBINE_DOT3; - ctxInfo->combine_dot3_rgb_enum = GL_DOT3_RGB_ARB; - ctxInfo->combine_dot3_rgba_enum = GL_DOT3_RGBA_ARB; - } else if(isExtensionSupported(tmpExtensionStr,"GL_EXT_texture_env_dot3" )) { - ctxInfo->textureCombineDot3Available = JNI_TRUE; - ctxInfo->textureExtMask |= javax_media_j3d_Canvas3D_TEXTURE_COMBINE_DOT3; - ctxInfo->combine_dot3_rgb_enum = GL_DOT3_RGB_EXT; - ctxInfo->combine_dot3_rgba_enum = GL_DOT3_RGBA_EXT; - } - - if (ctxInfo->gl13) { - ctxInfo->textureExtMask |= javax_media_j3d_Canvas3D_TEXTURE_CUBE_MAP; - } - - if (isExtensionSupported(tmpExtensionStr, "GL_SGIS_sharpen_texture")) { - ctxInfo->textureSharpenAvailable = JNI_TRUE; - ctxInfo->linear_sharpen_enum = GL_LINEAR_SHARPEN_SGIS; - 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(UNIX) - ctxInfo->glSharpenTexFuncSGIS = - (MYPFNGLSHARPENTEXFUNCSGI) dlsym(RTLD_DEFAULT, "glSharpenTexFuncSGIS"); -#endif -#ifdef WIN32 - ctxInfo->glSharpenTexFuncSGIS = (MYPFNGLSHARPENTEXFUNCSGI) - wglGetProcAddress("glSharpenTexFuncSGIS"); - if (ctxInfo->glSharpenTexFuncSGIS == NULL) { - /* printf("ctxInfo->glSharpenTexFuncSGIS == NULL\n"); */ - ctxInfo->textureExtMask &= ~javax_media_j3d_Canvas3D_TEXTURE_SHARPEN; - ctxInfo->textureSharpenAvailable = JNI_FALSE; - } -#endif - } - - if (isExtensionSupported(tmpExtensionStr, "GL_SGIS_detail_texture")) { - ctxInfo->textureDetailAvailable = JNI_TRUE; - ctxInfo->texture_detail_ext_enum = GL_DETAIL_TEXTURE_2D_SGIS; - ctxInfo->linear_detail_enum = GL_LINEAR_DETAIL_SGIS; - ctxInfo->linear_detail_rgb_enum = GL_LINEAR_DETAIL_COLOR_SGIS; - ctxInfo->linear_detail_alpha_enum = GL_LINEAR_DETAIL_ALPHA_SGIS; - 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(UNIX) - ctxInfo->glDetailTexFuncSGIS = - (MYPFNGLDETAILTEXFUNCSGI) dlsym(RTLD_DEFAULT, "glDetailTexFuncSGIS"); -#endif -#ifdef WIN32 - ctxInfo->glDetailTexFuncSGIS = (MYPFNGLDETAILTEXFUNCSGI) - wglGetProcAddress("glDetailTexFuncSGIS"); - if (ctxInfo->glDetailTexFuncSGIS == NULL) { - /* printf("ctxInfo->glDetailTexFuncSGIS == NULL\n"); */ - ctxInfo->textureExtMask &= ~javax_media_j3d_Canvas3D_TEXTURE_DETAIL; - ctxInfo->textureDetailAvailable = JNI_FALSE; - } -#endif - } - - if (isExtensionSupported(tmpExtensionStr, "GL_SGIS_texture_filter4")) { - ctxInfo->textureFilter4Available = JNI_TRUE; - ctxInfo->filter4_enum = GL_FILTER4_SGIS; - ctxInfo->textureExtMask |= javax_media_j3d_Canvas3D_TEXTURE_FILTER4; -#if defined(UNIX) - ctxInfo->glTexFilterFuncSGIS = - (MYPFNGLTEXFILTERFUNCSGI) dlsym(RTLD_DEFAULT, "glTexFilterFuncSGIS"); -#endif -#ifdef WIN32 - ctxInfo->glTexFilterFuncSGIS = (MYPFNGLTEXFILTERFUNCSGI) - wglGetProcAddress("glTexFilterFuncSGIS"); - if (ctxInfo->glTexFilterFuncSGIS == NULL) { - /* printf("ctxInfo->glTexFilterFuncSGIS == NULL\n"); */ - ctxInfo->textureExtMask &= ~javax_media_j3d_Canvas3D_TEXTURE_FILTER4; - ctxInfo->textureFilter4Available = JNI_FALSE; - } -#endif - } - - if (isExtensionSupported(tmpExtensionStr, - "GL_EXT_texture_filter_anisotropic")) { - ctxInfo->textureAnisotropicFilterAvailable = JNI_TRUE; - ctxInfo->texture_filter_anisotropic_ext_enum = - GL_TEXTURE_MAX_ANISOTROPY_EXT; - ctxInfo->max_texture_filter_anisotropy_enum = - GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT; - ctxInfo->textureExtMask |= - javax_media_j3d_Canvas3D_TEXTURE_ANISOTROPIC_FILTER; - } - - if (ctxInfo->gl13) { - ctxInfo->texture_clamp_to_border_enum = GL_CLAMP_TO_BORDER; - } else { - ctxInfo->texture_clamp_to_border_enum = GL_CLAMP; - } - - if (isExtensionSupported(tmpExtensionStr, - "GL_SGIX_texture_lod_bias")) { - ctxInfo->textureLodBiasAvailable = JNI_TRUE; - ctxInfo->textureExtMask |= - javax_media_j3d_Canvas3D_TEXTURE_LOD_OFFSET; - } - - if (isExtensionSupported(tmpExtensionStr, "GL_ARB_texture_non_power_of_two") && - !getJavaBoolEnv(env, "enforcePowerOfTwo")) { - ctxInfo->textureExtMask |= - javax_media_j3d_Canvas3D_TEXTURE_NON_POWER_OF_TWO; - } - - if (isExtensionSupported(tmpExtensionStr, - "GL_SGIS_generate_mipmap")) { - ctxInfo->textureExtMask |= - javax_media_j3d_Canvas3D_TEXTURE_AUTO_MIPMAP_GENERATION; - } - - -} - -jboolean -getJavaBoolEnv(JNIEnv *env, char* envStr) -{ - JNIEnv table = *env; - jclass cls; - jfieldID fieldID; - jobject obj; - - cls = (jclass) (*(table->FindClass))(env, "javax/media/j3d/VirtualUniverse"); - - if (cls == NULL) { - return JNI_FALSE; - } - - fieldID = (jfieldID) (*(table->GetStaticFieldID))(env, cls, "mc", - "Ljavax/media/j3d/MasterControl;"); - if (fieldID == NULL) { - return JNI_FALSE; - } - - obj = (*(table->GetStaticObjectField))(env, cls, fieldID); - - if (obj == NULL) { - return JNI_FALSE; - } - - cls = (jclass) (*(table->FindClass))(env, "javax/media/j3d/MasterControl"); - - if (cls == NULL) { - return JNI_FALSE; - } - - fieldID = (jfieldID) (*(table->GetFieldID))(env, cls, envStr, "Z"); - - if (fieldID == NULL ) { - return JNI_FALSE; - } - - return (*(table->GetBooleanField))(env, obj, fieldID); -} - -jint -getJavaIntEnv(JNIEnv *env, char* envStr) -{ - JNIEnv table = *env; - jclass cls; - jfieldID fieldID; - jobject obj; - - cls = (jclass) (*(table->FindClass))(env, "javax/media/j3d/VirtualUniverse"); - - if (cls == NULL) { - return JNI_FALSE; - } - - fieldID = (jfieldID) (*(table->GetStaticFieldID))(env, cls, "mc", - "Ljavax/media/j3d/MasterControl;"); - if (fieldID == NULL) { - return JNI_FALSE; - } - - obj = (*(table->GetStaticObjectField))(env, cls, fieldID); - - if (obj == NULL) { - return JNI_FALSE; - } - - cls = (jclass) (*(table->FindClass))(env, "javax/media/j3d/MasterControl"); - - if (cls == NULL) { - return JNI_FALSE; - } - - fieldID = (jfieldID) (*(table->GetFieldID))(env, cls, envStr, "I"); - - if (fieldID == NULL ) { - return JNI_FALSE; - } - - return (*(table->GetIntField))(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 - */ -static jboolean -getPropertiesFromCurrentContext( - JNIEnv *env, - jobject obj, - GraphicsContextPropertiesInfo *ctxInfo, - jlong hdc, - int pixelFormat, - jlong fbConfigListPtr, - jboolean offScreen, - jboolean glslLibraryAvailable, - jboolean cgLibraryAvailable) -{ - JNIEnv table = *env; - - /* version and extension */ - char *glVersion; - char *glVendor; - char *glRenderer; - char *extensionStr; - char *tmpVersionStr; - char *tmpExtensionStr; - int versionNumbers[2]; - char *cgHwStr = 0; - -#ifdef WIN32 - PixelFormatInfo *PixelFormatInfoPtr = (PixelFormatInfo *)fbConfigListPtr; -#endif - - /* Get the list of extension */ - extensionStr = (char *)glGetString(GL_EXTENSIONS); - if (extensionStr == NULL) { - fprintf(stderr, "extensionStr == null\n"); - return JNI_FALSE; - } - tmpExtensionStr = strdup(extensionStr); - - /* Get the OpenGL version */ - glVersion = (char *)glGetString(GL_VERSION); - if (glVersion == NULL) { - fprintf(stderr, "glVersion == null\n"); - return JNI_FALSE; - } - tmpVersionStr = strdup(glVersion); - - /* Get the OpenGL vendor and renderer */ - glVendor = (char *)glGetString(GL_VENDOR); - if (glVendor == NULL) { - glVendor = "<UNKNOWN>"; - } - glRenderer = (char *)glGetString(GL_RENDERER); - if (glRenderer == NULL) { - glRenderer = "<UNKNOWN>"; - } - - /* - fprintf(stderr, " pixelFormat : %d\n", pixelFormat); - fprintf(stderr, " extensionStr : %s\n", tmpExtensionStr); - */ - - ctxInfo->versionStr = strdup(glVersion); - ctxInfo->vendorStr = strdup(glVendor); - ctxInfo->rendererStr = strdup(glRenderer); - ctxInfo->extensionStr = strdup(extensionStr); - - /* find out the version, major and minor version number */ - extractVersionInfo(tmpVersionStr, versionNumbers); - - - /* *********************************************************/ - /* setup the graphics context properties */ - - /* - * NOTE: Java 3D now requires OpenGL 1.3 for full functionality. - * For backwards compatibility with certain older graphics cards and - * drivers (e.g., the Linux DRI driver for older ATI cards), - * we will try to run on OpenGL 1.2 in an unsupported manner. However, - * we will not attempt to use OpenGL extensions for any features that - * are available in OpenGL 1.3, specifically multitexture, multisample, - * and cube map textures. - */ - if (versionNumbers[0] < 1 || - (versionNumbers[0] == 1 && versionNumbers[1] < 2)) { - jclass rte; - - 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, "javax/media/j3d/IllegalRenderingStateException")) != NULL) { - (*(table->ThrowNew))(env, rte, "GL_VERSION"); - } - return JNI_FALSE; - } - - if (versionNumbers[0] == 1) { - if (versionNumbers[1] == 2) { - fprintf(stderr, - "JAVA 3D: OpenGL 1.2 detected; will run with reduced functionality\n"); - } - if (versionNumbers[1] >= 3) { - ctxInfo->gl13 = JNI_TRUE; - } - if (versionNumbers[1] >= 4) { - ctxInfo->gl14 = JNI_TRUE; - } - } else /* major >= 2 */ { - ctxInfo->gl20 = JNI_TRUE; - ctxInfo->gl14 = JNI_TRUE; - ctxInfo->gl13 = JNI_TRUE; - } - - /* Setup function pointers for core OpenGL 1.3 features */ - - ctxInfo->textureExtMask |= javax_media_j3d_Canvas3D_TEXTURE_3D; -#if defined(UNIX) - ctxInfo->glTexImage3DEXT = (MYPFNGLTEXIMAGE3DPROC )dlsym(RTLD_DEFAULT, "glTexImage3D"); - ctxInfo->glTexSubImage3DEXT = (MYPFNGLTEXSUBIMAGE3DPROC )dlsym(RTLD_DEFAULT, "glTexSubImage3D"); -#endif -#ifdef WIN32 - ctxInfo->glTexImage3DEXT = (MYPFNGLTEXIMAGE3DPROC )wglGetProcAddress("glTexImage3D"); - ctxInfo->glTexSubImage3DEXT = (MYPFNGLTEXSUBIMAGE3DPROC )wglGetProcAddress("glTexSubImage3D"); -#endif - - if(isExtensionSupported(tmpExtensionStr, "GL_ARB_imaging")){ - ctxInfo->blend_color_ext = JNI_TRUE; - - ctxInfo->blendFunctionTable[BLEND_CONSTANT_COLOR] = GL_CONSTANT_COLOR; -#if defined(UNIX) - ctxInfo->glBlendColor = (MYPFNGLBLENDCOLORPROC )dlsym(RTLD_DEFAULT, "glBlendColor"); -#endif -#ifdef WIN32 - ctxInfo->glBlendColor = (MYPFNGLBLENDCOLORPROC )wglGetProcAddress("glBlendColor"); - if (ctxInfo->glBlendColor == NULL) { - ctxInfo->blend_color_ext = JNI_FALSE; - } -#endif - } - - ctxInfo->textureLodAvailable = JNI_TRUE; - ctxInfo->textureExtMask |= javax_media_j3d_Canvas3D_TEXTURE_LOD_RANGE; - ctxInfo->texture_min_lod_enum = GL_TEXTURE_MIN_LOD; - ctxInfo->texture_max_lod_enum = GL_TEXTURE_MAX_LOD; - ctxInfo->texture_base_level_enum = GL_TEXTURE_BASE_LEVEL; - ctxInfo->texture_max_level_enum = GL_TEXTURE_MAX_LEVEL; - - if (ctxInfo->gl14) { - ctxInfo->textureExtMask |= javax_media_j3d_Canvas3D_TEXTURE_AUTO_MIPMAP_GENERATION; - } - - /* look for OpenGL 2.0 features */ - /* - // Fix to Issue 455 : Need to disable NPOT textures for older cards that claim to support it. - // Some older cards (e.g., Nvidia fx500 and ATI 9800) claim to support OpenGL 2.0. - // This means that these cards have to support non-power-of-two (NPOT) texture, - // but their lack the necessary HW force the vendors the emulate this feature in software. - // The result is a ~100x slower down compare to power-of-two textures. - // Do not check for gl20 but instead check of GL_ARB_texture_non_power_of_two extension string - if (ctxInfo->gl20) { - if (!getJavaBoolEnv(env, "enforcePowerOfTwo")) { - ctxInfo->textureExtMask |= - javax_media_j3d_Canvas3D_TEXTURE_NON_POWER_OF_TWO; - } - } - */ - - /* 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; - } - if(isExtensionSupported(tmpExtensionStr, "GL_SUN_multi_draw_arrays")){ - ctxInfo->multi_draw_arrays_sun = JNI_TRUE; - } - - if (isExtensionSupported(tmpExtensionStr, "GL_EXT_compiled_vertex_array") && - getJavaBoolEnv(env, "isCompiledVertexArray")) { - ctxInfo->compiled_vertex_array_ext = JNI_TRUE; - } - - if(isExtensionSupported(tmpExtensionStr, "GL_SUN_global_alpha")){ - ctxInfo->global_alpha_sun = JNI_TRUE; - } - - if(isExtensionSupported(tmpExtensionStr, "GL_EXT_abgr")) { - ctxInfo->abgr_ext = JNI_TRUE; - } - - /* - * Setup ctxInfo->multisample; under windows this is setup in - * NativeConfigTemplate when pixel format is choose - */ - -#if defined(UNIX) - ctxInfo->multisample = ctxInfo->gl13; -#endif - -#ifdef WIN32 - if(offScreen) { - ctxInfo->multisample = PixelFormatInfoPtr->offScreenHasMultisample; - } - else { - ctxInfo->multisample = PixelFormatInfoPtr->onScreenHasMultisample; - } - - /* - fprintf(stderr, "Canvas3D - onScreenHasMultisample = %d, offScreenHasMultisample = %d\n", - PixelFormatInfoPtr->onScreenHasMultisample, - PixelFormatInfoPtr->offScreenHasMultisample); - - fprintf(stderr, "Canvas3D - ctxInfo->multisample = %d, offScreen = %d\n", - ctxInfo->multisample, offScreen); - */ - -#endif - - /* - * Disable multisample by default since OpenGL will enable - * it by default if the surface is multisample capable. - */ - if (ctxInfo->multisample && !ctxInfo->implicit_multisample) { - glDisable(GL_MULTISAMPLE); - } - - /* Check texture extensions */ - checkTextureExtensions(env, obj, tmpExtensionStr, ctxInfo); - - /* Check shader extensions */ - if (ctxInfo->gl13) { - checkGLSLShaderExtensions(env, obj, tmpExtensionStr, ctxInfo, glslLibraryAvailable); - checkCgShaderExtensions(env, obj, tmpExtensionStr, ctxInfo, cgLibraryAvailable); - } else { - /* Force shaders to be disabled, since no multitexture support */ - char *emptyExtStr = " "; - checkGLSLShaderExtensions(env, obj, emptyExtStr, ctxInfo, JNI_FALSE); - checkCgShaderExtensions(env, obj, emptyExtStr, ctxInfo, JNI_FALSE); - } - - /* *********************************************************/ - - /* Setup GL_SUN_gloabl_alpha */ - if (ctxInfo->global_alpha_sun) { - ctxInfo->extMask |= javax_media_j3d_Canvas3D_SUN_GLOBAL_ALPHA; - } - - /* Setup GL_EXT_abgr */ - if (ctxInfo->abgr_ext) { - ctxInfo->extMask |= javax_media_j3d_Canvas3D_EXT_ABGR; - } - - /* GL_BGR is always supported */ - ctxInfo->extMask |= javax_media_j3d_Canvas3D_EXT_BGR; - - if(ctxInfo->multisample) { - ctxInfo->extMask |= javax_media_j3d_Canvas3D_MULTISAMPLE; - } - - /* setup those functions pointers */ -#ifdef WIN32 - - if (ctxInfo->multi_draw_arrays_ext) { - ctxInfo->glMultiDrawArraysEXT = (MYPFNGLMULTIDRAWARRAYSEXTPROC)wglGetProcAddress("glMultiDrawArraysEXT"); - ctxInfo->glMultiDrawElementsEXT = (MYPFNGLMULTIDRAWELEMENTSEXTPROC)wglGetProcAddress("glMultiDrawElementsEXT"); - if ((ctxInfo->glMultiDrawArraysEXT == NULL) || - (ctxInfo->glMultiDrawElementsEXT == NULL)) { - ctxInfo->multi_draw_arrays_ext = JNI_FALSE; - } - } - else if (ctxInfo->multi_draw_arrays_sun) { - ctxInfo->glMultiDrawArraysEXT = (MYPFNGLMULTIDRAWARRAYSEXTPROC)wglGetProcAddress("glMultiDrawArraysSUN"); - ctxInfo->glMultiDrawElementsEXT = (MYPFNGLMULTIDRAWELEMENTSEXTPROC)wglGetProcAddress("glMultiDrawElementsSUN"); - if ((ctxInfo->glMultiDrawArraysEXT == NULL) || - (ctxInfo->glMultiDrawElementsEXT == NULL)) { - ctxInfo->multi_draw_arrays_sun = JNI_FALSE; - } - - } - if (ctxInfo->compiled_vertex_array_ext) { - ctxInfo->glLockArraysEXT = (MYPFNGLLOCKARRAYSEXTPROC)wglGetProcAddress("glLockArraysEXT"); - ctxInfo->glUnlockArraysEXT = (MYPFNGLUNLOCKARRAYSEXTPROC)wglGetProcAddress("glUnlockArraysEXT"); - if ((ctxInfo->glLockArraysEXT == NULL) || - (ctxInfo->glUnlockArraysEXT == NULL)) { - ctxInfo->compiled_vertex_array_ext = JNI_FALSE; - } - } - - if (ctxInfo->gl13) { - ctxInfo->glClientActiveTexture = (MYPFNGLCLIENTACTIVETEXTUREPROC)wglGetProcAddress("glClientActiveTexture"); - ctxInfo->glActiveTexture = (MYPFNGLACTIVETEXTUREPROC) wglGetProcAddress("glActiveTexture"); - ctxInfo->glMultiTexCoord2fv = (MYPFNGLMULTITEXCOORD2FVPROC)wglGetProcAddress("glMultiTexCoord2fv"); - ctxInfo->glMultiTexCoord3fv = (MYPFNGLMULTITEXCOORD3FVPROC)wglGetProcAddress("glMultiTexCoord3fv"); - ctxInfo->glMultiTexCoord4fv = (MYPFNGLMULTITEXCOORD4FVPROC)wglGetProcAddress("glMultiTexCoord4fv"); - - ctxInfo->glLoadTransposeMatrixd = (MYPFNGLLOADTRANSPOSEMATRIXDPROC)wglGetProcAddress("glLoadTransposeMatrixd"); - ctxInfo->glMultTransposeMatrixd = (MYPFNGLMULTTRANSPOSEMATRIXDPROC)wglGetProcAddress("glMultTransposeMatrixd"); - } - - if (ctxInfo->global_alpha_sun) { - ctxInfo->glGlobalAlphaFactorfSUN = (MYPFNGLGLOBALALPHAFACTORFSUNPROC )wglGetProcAddress("glGlobalAlphaFactorfSUN"); - - if (ctxInfo->glGlobalAlphaFactorfSUN == NULL) { - /* printf("ctxInfo->glGlobalAlphaFactorfSUN == NULL\n");*/ - ctxInfo->global_alpha_sun = JNI_FALSE; - } - } - -#endif - -#if defined(UNIX) - if(ctxInfo->multi_draw_arrays_ext) { - ctxInfo->glMultiDrawArraysEXT = - (MYPFNGLMULTIDRAWARRAYSEXTPROC)dlsym(RTLD_DEFAULT, "glMultiDrawArraysEXT"); - ctxInfo->glMultiDrawElementsEXT = - (MYPFNGLMULTIDRAWELEMENTSEXTPROC)dlsym(RTLD_DEFAULT, "glMultiDrawElementsEXT"); - if ((ctxInfo->glMultiDrawArraysEXT == NULL) || - (ctxInfo->glMultiDrawElementsEXT == NULL)) { - ctxInfo->multi_draw_arrays_ext = JNI_FALSE; - } - } - else if (ctxInfo->multi_draw_arrays_sun) { - ctxInfo->glMultiDrawArraysEXT = - (MYPFNGLMULTIDRAWARRAYSEXTPROC)dlsym(RTLD_DEFAULT, "glMultiDrawArraysSUN"); - ctxInfo->glMultiDrawElementsEXT = - (MYPFNGLMULTIDRAWELEMENTSEXTPROC)dlsym(RTLD_DEFAULT, "glMultiDrawElementsSUN"); - if ((ctxInfo->glMultiDrawArraysEXT == NULL) || - (ctxInfo->glMultiDrawElementsEXT == NULL)) { - ctxInfo->multi_draw_arrays_ext = JNI_FALSE; - } - } - if(ctxInfo->compiled_vertex_array_ext) { - ctxInfo->glLockArraysEXT = - (MYPFNGLLOCKARRAYSEXTPROC)dlsym(RTLD_DEFAULT, "glLockArraysEXT"); - ctxInfo->glUnlockArraysEXT = - (MYPFNGLUNLOCKARRAYSEXTPROC)dlsym(RTLD_DEFAULT, "glUnlockArraysEXT"); - if ((ctxInfo->glLockArraysEXT == NULL) || - (ctxInfo->glUnlockArraysEXT == NULL)) { - ctxInfo->compiled_vertex_array_ext = JNI_FALSE; - } - } - - if(ctxInfo->gl13){ - ctxInfo->glClientActiveTexture = - (MYPFNGLCLIENTACTIVETEXTUREPROC)dlsym(RTLD_DEFAULT, "glClientActiveTexture"); - ctxInfo->glMultiTexCoord2fv = - (MYPFNGLMULTITEXCOORD2FVPROC)dlsym(RTLD_DEFAULT, "glMultiTexCoord2fv"); - ctxInfo->glMultiTexCoord3fv = - (MYPFNGLMULTITEXCOORD3FVPROC)dlsym(RTLD_DEFAULT, "glMultiTexCoord3fv"); - ctxInfo->glMultiTexCoord4fv = - (MYPFNGLMULTITEXCOORD4FVPROC)dlsym(RTLD_DEFAULT, "glMultiTexCoord4fv"); - ctxInfo->glActiveTexture = - (MYPFNGLACTIVETEXTUREPROC)dlsym(RTLD_DEFAULT, "glActiveTexture"); - - ctxInfo->glLoadTransposeMatrixd = - (MYPFNGLLOADTRANSPOSEMATRIXDPROC)dlsym(RTLD_DEFAULT, "glLoadTransposeMatrixd"); - ctxInfo->glMultTransposeMatrixd = - (MYPFNGLMULTTRANSPOSEMATRIXDPROC)dlsym(RTLD_DEFAULT, "glMultTransposeMatrixd"); - } - - if(ctxInfo->global_alpha_sun) { - ctxInfo->glGlobalAlphaFactorfSUN = - (MYPFNGLGLOBALALPHAFACTORFSUNPROC)dlsym(RTLD_DEFAULT, "glGlobalAlphaFactorfSUN"); - if (ctxInfo->glGlobalAlphaFactorfSUN == NULL) { - ctxInfo->global_alpha_sun = JNI_FALSE; - } - } - -#endif /* UNIX */ - - /* clearing up the memory */ - free(tmpExtensionStr); - free(tmpVersionStr); - return JNI_TRUE; -} - - -/* - * put properties to the java side - */ -void setupCanvasProperties( - JNIEnv *env, - jobject obj, - GraphicsContextPropertiesInfo *ctxInfo) -{ - jclass cv_class; - jfieldID rsc_field; - JNIEnv table = *env; - GLint param; - - cv_class = (jclass) (*(table->GetObjectClass))(env, obj); - - /* set the canvas.multiTexAccelerated flag */ - rsc_field = (jfieldID) (*(table->GetFieldID))(env, cv_class, "multiTexAccelerated", "Z"); - (*(table->SetBooleanField))(env, obj, rsc_field, ctxInfo->gl13); - - 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); - - rsc_field = (jfieldID) (*(table->GetFieldID))(env, cv_class, "textureExtendedFeatures", "I"); - (*(table->SetIntField))(env, obj, rsc_field, ctxInfo->textureExtMask); - - /* get texture color table size */ - rsc_field = (jfieldID) (*(table->GetFieldID))(env, cv_class, "textureColorTableSize", "I"); - (*(table->SetIntField))(env, obj, rsc_field, ctxInfo->textureColorTableSize); - - rsc_field = (jfieldID) (*(table->GetFieldID))(env, cv_class, "nativeGraphicsVersion", "Ljava/lang/String;"); - (*(table->SetObjectField))(env, obj, rsc_field, (*env)->NewStringUTF(env, ctxInfo->versionStr)); - - rsc_field = (jfieldID) (*(table->GetFieldID))(env, cv_class, "nativeGraphicsVendor", "Ljava/lang/String;"); - (*(table->SetObjectField))(env, obj, rsc_field, (*env)->NewStringUTF(env, ctxInfo->vendorStr)); - - rsc_field = (jfieldID) (*(table->GetFieldID))(env, cv_class, "nativeGraphicsRenderer", "Ljava/lang/String;"); - (*(table->SetObjectField))(env, obj, rsc_field, (*env)->NewStringUTF(env, ctxInfo->rendererStr)); - - if (ctxInfo->textureAnisotropicFilterAvailable) { - - float degree; - - glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, °ree); - rsc_field = (jfieldID) (*(table->GetFieldID))(env, cv_class, "anisotropicDegreeMax", "F"); - (*(table->SetFloatField))(env, obj, rsc_field, degree); - } - - rsc_field = (jfieldID) (*(table->GetFieldID))(env, cv_class, "textureBoundaryWidthMax", "I"); - (*(table->SetIntField))(env, obj, rsc_field, 1); - - glGetIntegerv(GL_MAX_TEXTURE_SIZE, ¶m); - rsc_field = (jfieldID) (*(table->GetFieldID))(env, cv_class, "textureWidthMax", "I"); - (*(table->SetIntField))(env, obj, rsc_field, param); - - rsc_field = (jfieldID) (*(table->GetFieldID))(env, cv_class, "textureHeightMax", "I"); - (*(table->SetIntField))(env, obj, rsc_field, param); - - param = -1; - glGetIntegerv(GL_MAX_3D_TEXTURE_SIZE, ¶m); - rsc_field = (jfieldID) (*(table->GetFieldID))(env, cv_class, "texture3DWidthMax", "I"); - (*(table->SetIntField))(env, obj, rsc_field, param); - - rsc_field = (jfieldID) (*(table->GetFieldID))(env, cv_class, "texture3DHeightMax", "I"); - (*(table->SetIntField))(env, obj, rsc_field, param); - - 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 -void JNICALL Java_javax_media_j3d_NativePipeline_destroyContext( - JNIEnv *env, - jobject obj, - jlong display, - jlong window, - jlong ctxInfo) -{ - GraphicsContextPropertiesInfo* s = (GraphicsContextPropertiesInfo* )ctxInfo; - jlong context = s->context; - -#ifdef WIN32 - /* - * It is possible the window is removed by removeNotify() - * before the following is invoked : - * wglMakeCurrent((HDC)window, NULL); - * This will cause WinMe crash on swapBuffers() - */ - wglDeleteContext((HGLRC)context); -#endif /* WIN32 */ - -#if defined(UNIX) - /* - glXMakeCurrent((Display *)display, None, NULL); - */ - glXDestroyContext((Display *)display, (GLXContext)context); -#endif /* UNIX */ - /* cleanup CtxInfo and free its memory */ - cleanupCtxInfo(s); - - free(s); - - -} - -/* - * A dummy WndProc for dummy window - */ -#ifdef WIN32 -LONG WINAPI WndProc( HWND hWnd, UINT msg, - WPARAM wParam, LPARAM lParam ) -{ - - /* This function handles any messages that we didn't. */ - /* (Which is most messages) It belongs to the OS. */ - return (LONG) DefWindowProc( hWnd, msg, wParam, lParam ); -} -#endif /*end of WIN32 */ - - -JNIEXPORT -jlong JNICALL Java_javax_media_j3d_NativePipeline_createNewContext( - JNIEnv *env, - jobject obj, - jobject cv, - jlong display, - jlong window, - jlong fbConfigListPtr, - jlong sharedCtxInfo, - jboolean isSharedCtx, - jboolean offScreen, - jboolean glslLibraryAvailable, - jboolean cgLibraryAvailable) -{ - jlong gctx; - jlong sharedCtx; - int stencilSize=0; - - GraphicsContextPropertiesInfo *ctxInfo = NULL; - GraphicsContextPropertiesInfo *sharedCtxStructure; - int PixelFormatID=0; - -#if defined(UNIX) - - /* Fix for issue 20 */ - - GLXContext ctx; - jlong hdc; - - GLXFBConfig *fbConfigList = NULL; - - 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, " glslLibraryAvailable = %d\n", glslLibraryAvailable); - fprintf(stderr, " cgLibraryAvailable = %d\n", cgLibraryAvailable); - */ - - if(sharedCtxInfo == 0) - sharedCtx = 0; - else { - sharedCtxStructure = (GraphicsContextPropertiesInfo *)sharedCtxInfo; - sharedCtx = sharedCtxStructure->context; - } - - if (display == 0) { - fprintf(stderr, "Canvas3D_createNewContext: display is null\n"); - ctx = NULL; - } - else if((fbConfigList == NULL) || (fbConfigList[0] == NULL)) { - /* - * fbConfig must be a valid pointer to an GLXFBConfig struct returned - * by glXChooseFBConfig() for a physical screen. The visual id - * is not sufficient for handling OpenGL with Xinerama mode disabled: - * it doesn't distinguish between the physical screens making up the - * virtual screen when the X server is running in Xinerama mode. - */ - fprintf(stderr, "Canvas3D_createNewContext: FBConfig is null\n"); - ctx = NULL; - } - else { - ctx = glXCreateNewContext((Display *)display, fbConfigList[0], - GLX_RGBA_TYPE, (GLXContext)sharedCtx, True); - } - - if (ctx == NULL) { - fprintf(stderr, "Canvas3D_createNewContext: couldn't create context\n"); - return 0; - } - - /* There is a known interportability issue between Solaris and Linux(Nvidia) - on the new glxMakeContextCurrent() call. Bug Id 5109045. - if (!glXMakeContextCurrent((Display *)display, (GLXDrawable)window, - (GLXDrawable)window,(GLXContext)ctx)) { - */ - - if (!glXMakeCurrent((Display *)display, (GLXDrawable)window,(GLXContext)ctx)) { - - fprintf( stderr, "Canvas3D_createNewContext: couldn't make current\n"); - return 0; - } - - /* Shouldn't this be moved to NativeConfig. ? */ - glXGetFBConfigAttrib((Display *) display, fbConfigList[0], - GLX_STENCIL_SIZE, &stencilSize); - - - gctx = (jlong)ctx; -#endif /* UNIX */ - -#ifdef WIN32 - HGLRC hrc; /* HW Rendering Context */ - HDC hdc; /* HW Device Context */ - jboolean rescale = JNI_FALSE; - JNIEnv table = *env; - DWORD err; - LPTSTR errString; - jboolean result; - PixelFormatInfo *PixelFormatInfoPtr = (PixelFormatInfo *)fbConfigListPtr; - /* Fix for issue 76 */ - /* - fprintf(stderr, "Canvas3D_createNewContext: \n"); - fprintf(stderr, "window 0x%x\n", window); - */ - if(sharedCtxInfo == 0) - sharedCtx = 0; - else { - sharedCtxStructure = (GraphicsContextPropertiesInfo *)sharedCtxInfo; - sharedCtx = sharedCtxStructure->context; - } - - hdc = (HDC) window; - - /* Need to handle onScreen and offScreen differently */ - /* fbConfigListPtr has both an on-screen and off-screen pixel format */ - - if(!offScreen) { /* Fix to issue 104 */ - if ((PixelFormatInfoPtr == NULL) || (PixelFormatInfoPtr->onScreenPFormat <= 0)) { - printErrorMessage("Canvas3D_createNewContext: onScreen PixelFormat is invalid"); - return 0; - } - else { - PixelFormatID = PixelFormatInfoPtr->onScreenPFormat; - } - } - else { /* offScreen case */ - if ((PixelFormatInfoPtr == NULL) || (PixelFormatInfoPtr->offScreenPFormat <= 0)) { - printErrorMessage("Canvas3D_createNewContext: offScreen PixelFormat is invalid"); - return 0; - } - else { - PixelFormatID = PixelFormatInfoPtr->offScreenPFormat; - } - } - - if (!SetPixelFormat(hdc, PixelFormatID, NULL)) { - printErrorMessage("Canvas3D_createNewContext: Failed in SetPixelFormat"); - return 0; - } - - /* fprintf(stderr, "Before wglCreateContext\n"); */ - - hrc = wglCreateContext( hdc ); - - /* fprintf(stderr, "After wglCreateContext hrc = 0x%x\n", hrc); */ - - if (!hrc) { - err = GetLastError(); - FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM, - NULL, err, 0, (LPTSTR)&errString, 0, NULL); - - fprintf(stderr, "wglCreateContext Failed: %s\n", errString); - return 0; - } - - if (sharedCtx != 0) { - wglShareLists( (HGLRC) sharedCtx, hrc ); - } - - /* fprintf(stderr, "Before wglMakeCurrent\n"); */ - result = wglMakeCurrent(hdc, hrc); - /* fprintf(stderr, "After wglMakeCurrent result = %d\n", result); */ - - if (!result) { - err = GetLastError(); - FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM, - NULL, err, 0, (LPTSTR)&errString, 0, NULL); - fprintf(stderr, "wglMakeCurrent Failed: %s\n", errString); - return 0; - } - - gctx = (jlong)hrc; -#endif /* WIN32 */ - - /* allocate the structure */ - ctxInfo = (GraphicsContextPropertiesInfo *)malloc(sizeof(GraphicsContextPropertiesInfo)); - - /* initialize the structure */ - initializeCtxInfo(env, ctxInfo); - ctxInfo->context = gctx; - - if (!getPropertiesFromCurrentContext(env, cv, ctxInfo, (jlong) hdc, PixelFormatID, - fbConfigListPtr, offScreen, - glslLibraryAvailable, cgLibraryAvailable)) { - return 0; - } - - /* setup structure */ - - if(!isSharedCtx){ - /* Setup field in Java side */ - setupCanvasProperties(env, cv, ctxInfo); - } - - /* Enable rescale normal */ - glEnable(GL_RESCALE_NORMAL); - - glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE); - glDepthFunc(GL_LEQUAL); - glEnable(GL_COLOR_MATERIAL); - glReadBuffer(GL_FRONT); - - /* Java 3D images are aligned to 1 byte */ - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - - return ((jlong)ctxInfo); -} - - -JNIEXPORT -jboolean JNICALL Java_javax_media_j3d_NativePipeline_useCtx( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong display, - jlong window) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - jlong ctx = ctxProperties->context; - int result; -#if defined(UNIX) - - result = glXMakeCurrent((Display *)display, (GLXDrawable)window, (GLXContext)ctx); - if (!result) { - fprintf(stderr, "Java 3D ERROR : In Canvas3D.useCtx() glXMakeCurrent fails\n"); - return JNI_FALSE; - } - -#endif - -#ifdef WIN32 - DWORD err; - LPTSTR errString; - - result = wglMakeCurrent((HDC) window, (HGLRC) ctx); - /* fprintf(stderr, "useCtx : wglMakeCurrent : window %d, ctx %d, result = %d\n", - window, (int) ctx, result); */ - - if (!result) { - err = GetLastError(); - FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM, - NULL, err, 0, (LPTSTR)&errString, 0, NULL); - fprintf(stderr, "wglMakeCurrent Failed: %s\n", errString); - return JNI_FALSE; - } - -#endif - return JNI_TRUE; -} - -JNIEXPORT -jint JNICALL Java_javax_media_j3d_NativePipeline_getNumCtxLights( - JNIEnv *env, - jobject obj, - jlong ctxInfo) -{ - GLint nlights; - - glGetIntegerv(GL_MAX_LIGHTS, &nlights); - return((jint)nlights); -} - -JNIEXPORT -jboolean JNICALL Java_javax_media_j3d_NativePipeline_initTexturemapping( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint texWidth, - jint texHeight, - jint objectId) -{ - GraphicsContextPropertiesInfo *ctxProperties = - (GraphicsContextPropertiesInfo *)ctxInfo; - GLint gltype; - GLint width; - - gltype = (ctxProperties->abgr_ext ? GL_ABGR_EXT : GL_RGBA); - - glBindTexture(GL_TEXTURE_2D, objectId); - - - glTexImage2D(GL_PROXY_TEXTURE_2D, 0, GL_RGBA, texWidth, - texHeight, 0, gltype, GL_UNSIGNED_BYTE, NULL); - - glGetTexLevelParameteriv(GL_PROXY_TEXTURE_2D, 0, - GL_TEXTURE_WIDTH, &width); - - if (width <= 0) { - return JNI_FALSE; - } - - /* init texture size only without filling the pixels */ - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texWidth, - texHeight, 0, gltype, GL_UNSIGNED_BYTE, NULL); - - - return JNI_TRUE; -} - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_texturemapping( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint px, - jint py, - jint minX, - jint minY, - jint maxX, - jint maxY, - jint texWidth, - jint texHeight, - jint rasWidth, - jint format, - jint objectId, - jbyteArray imageYdown, - jint winWidth, - jint winHeight) -{ - JNIEnv table; - GLint gltype; - GLfloat texMinU,texMinV,texMaxU,texMaxV; - GLfloat mapMinX,mapMinY,mapMaxX,mapMaxY; - GLfloat halfWidth,halfHeight; - jbyte *byteData; - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - jlong ctx = ctxProperties->context; - - table = *env; - gltype = GL_RGBA; - - /* Temporarily disable fragment and most 3D operations */ - glPushAttrib(GL_ENABLE_BIT|GL_TEXTURE_BIT|GL_DEPTH_BUFFER_BIT|GL_POLYGON_BIT); - disableAttribFor2D(ctxProperties); - - /* Reset the polygon mode */ - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - - /* glGetIntegerv(GL_TEXTURE_BINDING_2D,&binding); */ - glDepthMask(GL_FALSE); - glBindTexture(GL_TEXTURE_2D, objectId); - /* set up texture parameter */ - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - -#ifdef VERBOSE - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); -#endif - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - - glEnable(GL_TEXTURE_2D); - - /* glGetIntegerv (GL_VIEWPORT, viewport); */ - - /* loaded identity modelview and projection matrix */ - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - - glOrtho(0.0, (double)winWidth, 0.0, (double)winHeight,0.0, 0.0); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - byteData = (jbyte *)(*(table->GetPrimitiveArrayCritical))(env, - imageYdown, - NULL); - - if (ctxProperties->abgr_ext) { - gltype = GL_ABGR_EXT; - } else { - switch (format) { - case IMAGE_FORMAT_BYTE_RGBA: - gltype = GL_RGBA; - break; - case IMAGE_FORMAT_BYTE_RGB: - gltype = GL_RGB; - break; - } - } - glPixelStorei(GL_UNPACK_ROW_LENGTH, rasWidth); - glPixelStorei(GL_UNPACK_SKIP_PIXELS, minX); - glPixelStorei(GL_UNPACK_SKIP_ROWS, minY); - glTexSubImage2D(GL_TEXTURE_2D, 0, minX, minY, - maxX - minX, maxY - minY, - gltype, GL_UNSIGNED_BYTE, - byteData); - glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); - glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0); - glPixelStorei(GL_UNPACK_SKIP_ROWS, 0); - - - (*(table->ReleasePrimitiveArrayCritical))(env, imageYdown, byteData, 0); - - texMinU = (float) minX/ (float) texWidth; - texMinV = (float) minY/ (float) texHeight; - texMaxU = (float) maxX/ (float) texWidth; - texMaxV = (float) maxY/ (float) texHeight; - halfWidth = (GLfloat)winWidth/2.0f; - halfHeight = (GLfloat)winHeight/2.0f; - - mapMinX = (float) (((px + minX)- halfWidth)/halfWidth); - mapMinY = (float) ((halfHeight - (py + maxY))/halfHeight); - mapMaxX = (float) ((px + maxX - halfWidth)/halfWidth); - mapMaxY = (float) ((halfHeight - (py + minY))/halfHeight); - -#ifdef VERBOSE - printf("(texMinU,texMinV,texMaxU,texMaxV) = (%3.2f,%3.2f,%3.2f,%3.2f)\n", - texMinU,texMinV,texMaxU,texMaxV); - printf("(mapMinX,mapMinY,mapMaxX,mapMaxY) = (%3.2f,%3.2f,%3.2f,%3.2f)\n", - mapMinX,mapMinY,mapMaxX,mapMaxY); - -#endif - glBegin(GL_QUADS); - - glTexCoord2f(texMinU, texMaxV); glVertex2f(mapMinX,mapMinY); - glTexCoord2f(texMaxU, texMaxV); glVertex2f(mapMaxX,mapMinY); - glTexCoord2f(texMaxU, texMinV); glVertex2f(mapMaxX,mapMaxY); - glTexCoord2f(texMinU, texMinV); glVertex2f(mapMinX,mapMaxY); - glEnd(); - - /* Java 3D always clears the Z-buffer */ - glDepthMask(GL_TRUE); - glClear(GL_DEPTH_BUFFER_BIT); - glPopAttrib(); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_clear( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jfloat r, - jfloat g, - jfloat b, - jboolean clearStencil) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - jlong ctx = ctxProperties->context; - -#ifdef VERBOSE - fprintf(stderr, "Canvas3D.clear(%g, %g, %g, %s)\n", - r, g, b, (stencilClear ? "true" : "false")); -#endif - -#ifdef OBSOLETE_CLEAR_CODE - glClearColor((float)r, (float)g, (float)b, ctxProperties->alphaClearValue); - glClear(GL_COLOR_BUFFER_BIT); - - /* Java 3D always clears the Z-buffer */ - glPushAttrib(GL_DEPTH_BUFFER_BIT); - glDepthMask(GL_TRUE); - glClear(GL_DEPTH_BUFFER_BIT); - glPopAttrib(); - - /* Issue 239 - clear stencil if specified */ - if (clearStencil) { - glPushAttrib(GL_STENCIL_BUFFER_BIT); - glClearStencil(0); - glStencilMask(~0); - glClear(GL_STENCIL_BUFFER_BIT); - glPopAttrib(); - } - -#endif /* OBSOLETE_CLEAR_CODE */ - - /* Mask of which buffers to clear, this always includes color & depth */ - int clearMask = GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT; - - /* Issue 239 - clear stencil if specified */ - if (clearStencil) { - glPushAttrib(GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); - - glClearStencil(0); - glStencilMask(~0); - clearMask |= GL_STENCIL_BUFFER_BIT; - } else { - glPushAttrib(GL_DEPTH_BUFFER_BIT); - } - - glDepthMask(GL_TRUE); - glClearColor((float)r, (float)g, (float)b, ctxProperties->alphaClearValue); - glClear(clearMask); - glPopAttrib(); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_textureFillBackground(JNIEnv *env, - jobject obj, - jlong ctxInfo, - jfloat texMinU, - jfloat texMaxU, - jfloat texMinV, - jfloat texMaxV, - jfloat mapMinX, - jfloat mapMaxX, - jfloat mapMinY, - jfloat mapMaxY, - jboolean useBilinearFilter ) -{ - JNIEnv table; - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - jlong ctx = ctxProperties->context; - - table = *env; - -#ifdef VERBOSE - fprintf(stderr, "Canvas3D.textureFillBackground()\n"); -#endif - /* Temporarily disable fragment and most 3D operations */ - glPushAttrib(GL_ENABLE_BIT | GL_TEXTURE_BIT | GL_POLYGON_BIT); - - disableAttribFor2D(ctxProperties); - glDepthMask(GL_FALSE); - glEnable(GL_TEXTURE_2D); - - /* Setup filter mode if needed */ - if(useBilinearFilter) { - /* fprintf(stderr, "Background : use bilinear filter\n"); */ - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - } - /* For debugging only - else { - fprintf(stderr, "Background : Not use bilinear filter\n"); - } - */ - - /* reset the polygon mode */ - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - - /* loaded identity modelview and projection matrix */ - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glMatrixMode(GL_TEXTURE); - glPushMatrix(); - glLoadIdentity(); - -#ifdef VERBOSE - printf("(texMinU,texMinV,texMaxU,texMaxV) = (%3.2f,%3.2f,%3.2f,%3.2f)\n", - texMinU,texMinV,texMaxU,texMaxV); - printf("(mapMinX,mapMinY,mapMaxX,mapMaxY) = (%3.2f,%3.2f,%3.2f,%3.2f)\n", - mapMinX,mapMinY,mapMaxX,mapMaxY); -#endif - - glBegin(GL_QUADS); - glTexCoord2f((float) texMinU, (float) texMinV); - glVertex2f((float) mapMinX, (float) mapMinY); - glTexCoord2f((float) texMaxU, (float) texMinV); - glVertex2f((float) mapMaxX, (float) mapMinY); - glTexCoord2f((float) texMaxU, (float) texMaxV); - glVertex2f((float) mapMaxX, (float) mapMaxY); - glTexCoord2f((float) texMinU, (float) texMaxV); - glVertex2f((float) mapMinX, (float) mapMaxY); - glEnd(); - - /* Restore texture Matrix transform */ - glPopMatrix(); - - glMatrixMode(GL_MODELVIEW); - /* Restore attributes */ - glPopAttrib(); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_textureFillRaster(JNIEnv *env, - jobject obj, - jlong ctxInfo, - jfloat texMinU, - jfloat texMaxU, - jfloat texMinV, - jfloat texMaxV, - jfloat mapMinX, - jfloat mapMaxX, - jfloat mapMinY, - jfloat mapMaxY, - jfloat mapZ, - jfloat alpha, - jboolean useBilinearFilter ) -{ - JNIEnv table; - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - jlong ctx = ctxProperties->context; - - table = *env; - -#ifdef VERBOSE - fprintf(stderr, "Canvas3D.textureFillRaster()\n"); -#endif - /* Temporarily disable fragment and most 3D operations */ - glPushAttrib(GL_ENABLE_BIT | GL_TEXTURE_BIT | GL_POLYGON_BIT | - GL_CURRENT_BIT); - - disableAttribForRaster(ctxProperties); - - /* Setup filter mode if needed */ - if(useBilinearFilter) { - /* fprintf(stderr, "Raster : use bilinear filter\n"); */ - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - } - /* For debugging only - else { - fprintf(stderr, "Raster : Not use bilinear filter\n"); - } - */ - - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - glColor4f(1.0f, 1.0f, 1.0f, (float) alpha); - - /* reset the polygon mode */ - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - - /* loaded identity modelview and projection matrix */ - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - glOrtho(0.0, 1.0, 0.0, 1.0, 0.0, 1.0); - -#ifdef VERBOSE - printf("(texMinU,texMinV,texMaxU,texMaxV) = (%3.2f,%3.2f,%3.2f,%3.2f)\n", - texMinU,texMinV,texMaxU,texMaxV); - printf("(mapMinX,mapMinY,mapMaxX,mapMaxY) = (%3.2f,%3.2f,%3.2f,%3.2f)\n", - mapMinX,mapMinY,mapMaxX,mapMaxY); -#endif - - glBegin(GL_QUADS); - - glTexCoord2f((float) texMinU, (float) texMinV); - glVertex3f((float) mapMinX, (float) mapMinY, (float) mapZ); - glTexCoord2f((float) texMaxU, (float) texMinV); - glVertex3f((float) mapMaxX, (float) mapMinY, (float) mapZ); - glTexCoord2f((float) texMaxU, (float) texMaxV); - glVertex3f((float) mapMaxX, (float) mapMaxY, (float) mapZ); - glTexCoord2f((float) texMinU, (float) texMaxV); - glVertex3f((float) mapMinX, (float) mapMaxY, (float) mapZ); - - glEnd(); - - /* Restore matrices */ - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); - /* Restore attributes */ - glPopAttrib(); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_executeRasterDepth(JNIEnv *env, - jobject obj, - jlong ctxInfo, - jfloat posX, - jfloat posY, - jfloat posZ, - jint srcOffsetX, - jint srcOffsetY, - jint rasterWidth, - jint rasterHeight, - jint depthWidth, - jint depthHeight, - jint depthFormat, - jobject depthData) -{ - GLint drawBuf; - void *depthObjPtr; - - JNIEnv table; - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - jlong ctx = ctxProperties->context; - - table = *env; - -#ifdef VERBOSE - fprintf(stderr, "Canvas3D.executeRasterDepth()\n"); -#endif - glRasterPos3f(posX, posY, posZ); - - glGetIntegerv(GL_DRAW_BUFFER, &drawBuf); - /* disable draw buffer */ - glDrawBuffer(GL_NONE); - - /* - * raster position is upper left corner, default for Java3D - * ImageComponent currently has the data reverse in Y - */ - glPixelZoom(1.0, -1.0); - glPixelStorei(GL_UNPACK_ROW_LENGTH, depthWidth); - if (srcOffsetX >= 0) { - glPixelStorei(GL_UNPACK_SKIP_PIXELS, srcOffsetX); - if (srcOffsetX + rasterWidth > depthWidth) { - rasterWidth = depthWidth - srcOffsetX; - } - } else { - rasterWidth += srcOffsetX; - if (rasterWidth > depthWidth) { - rasterWidth = depthWidth; - } - } - if (srcOffsetY >= 0) { - glPixelStorei(GL_UNPACK_SKIP_ROWS, srcOffsetY); - if (srcOffsetY + rasterHeight > depthHeight) { - rasterHeight = depthHeight - srcOffsetY; - } - } else { - rasterHeight += srcOffsetY; - if (rasterHeight > depthHeight) { - rasterHeight = depthHeight; - } - } - - depthObjPtr = - (void *)(*(table->GetPrimitiveArrayCritical))(env, (jarray)depthData, NULL); - - if (depthFormat == javax_media_j3d_DepthComponentRetained_DEPTH_COMPONENT_TYPE_INT) { - glDrawPixels(rasterWidth, rasterHeight, GL_DEPTH_COMPONENT, - GL_UNSIGNED_INT, depthObjPtr); - } else { /* javax_media_j3d_DepthComponentRetained_DEPTH_COMPONENT_TYPE_FLOAT */ - - glDrawPixels(rasterWidth, rasterHeight, GL_DEPTH_COMPONENT, - GL_FLOAT, depthObjPtr); - } - - (*(table->ReleasePrimitiveArrayCritical))(env, depthData, depthObjPtr, 0); - - - /* re-enable draw buffer */ - glDrawBuffer(drawBuf); - - - glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); - glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0); - glPixelStorei(GL_UNPACK_SKIP_ROWS, 0); - -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_setRenderMode( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint mode, - jboolean dbEnable) -{ - GLint drawBuf; - - if (dbEnable) { - drawBuf = GL_BACK; - switch (mode) { - case 0: /* FIELD_LEFT */ - drawBuf = GL_BACK_LEFT; - break; - case 1: /* FIELD_RIGHT */ - drawBuf = GL_BACK_RIGHT; - break; - case 2: /* FIELD_ALL */ - drawBuf = GL_BACK; - break; - } - } - else { - drawBuf = GL_FRONT; - switch (mode) { - case 0: /* FIELD_LEFT */ - drawBuf = GL_FRONT_LEFT; - break; - case 1: /* FIELD_RIGHT */ - drawBuf = GL_FRONT_RIGHT; - break; - case 2: /* FIELD_ALL */ - drawBuf = GL_FRONT; - break; - } - } - -#ifdef VERBOSE - switch (drawBuf) { - case GL_FRONT_LEFT: - fprintf(stderr, "glDrawBuffer(GL_FRONT_LEFT)\n"); - break; - case GL_FRONT_RIGHT: - fprintf(stderr, "glDrawBuffer(GL_FRONT_RIGHT)\n"); - break; - case GL_FRONT: - fprintf(stderr, "glDrawBuffer(GL_FRONT)\n"); - break; - case GL_BACK_LEFT: - fprintf(stderr, "glDrawBuffer(GL_BACK_LEFT)\n"); - break; - case GL_BACK_RIGHT: - fprintf(stderr, "glDrawBuffer(GL_BACK_RIGHT)\n"); - break; - case GL_BACK: - fprintf(stderr, "glDrawBuffer(GL_BACK)\n"); - break; - default: - fprintf(stderr, "Unknown glDrawBuffer!!!\n"); - break; - } -#endif - - glDrawBuffer(drawBuf); -} - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_clearAccum( - JNIEnv *env, - jobject obj, - jlong ctxInfo) -{ - - glClear(GL_ACCUM_BUFFER_BIT); - -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_accum( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jfloat value) -{ - - glReadBuffer(GL_BACK); - - glAccum(GL_ACCUM, (float)value); - - glReadBuffer(GL_FRONT); - -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_accumReturn( - JNIEnv *env, - jobject obj, - jlong ctxInfo) -{ - - glAccum(GL_RETURN, 1.0); - -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_setDepthBufferWriteEnable( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jboolean mode) -{ - if (mode) - glDepthMask(GL_TRUE); - else - glDepthMask(GL_FALSE); - -} - - -JNIEXPORT -jint JNICALL Java_javax_media_j3d_NativePipeline_swapBuffers( - JNIEnv *env, - jobject obj, - jobject cv, - jlong ctxInfo, - jlong display, - jlong window) -{ - -#if defined(UNIX) - glXSwapBuffers((Display *)display, (Window)window); - -#endif - -#ifdef WIN32 - HDC hdc; - - hdc = (HDC) window; - - SwapBuffers(hdc); -#endif - /* - * It would be nice to do a glFinish here, but we can't do this - * in the ViewThread Java thread in MT-aware OGL libraries without - * switching from the ViewThread to the Renderer thread an extra time - * per frame. Instead, we do glFinish after every rendering but before - * swap in the Renderer thread. - */ - /* glFinish(); */ - return 0; -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_syncRender( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jboolean waitFlag) -{ - - if (waitFlag == JNI_TRUE) - glFinish(); - else - glFlush(); -} - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_newDisplayList( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint id) -{ - if (id <= 0) { - fprintf(stderr, "JAVA 3D ERROR : glNewList(%d) -- IGNORED\n", id); - return; - } - - glNewList(id, GL_COMPILE); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_endDisplayList( - JNIEnv *env, - jobject obj, - jlong ctxInfo) -{ - - glEndList(); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_setGlobalAlpha( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jfloat alpha) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - jlong ctx = ctxProperties->context; - - /* GL_GLOBAL_ALPHA_SUN */ - if(ctxProperties->global_alpha_sun){ - glEnable(GL_GLOBAL_ALPHA_SUN); - ctxProperties->glGlobalAlphaFactorfSUN(alpha); - } -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_callDisplayList( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint id, - jboolean isNonUniformScale) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - jlong ctx = ctxProperties->context; - static int numInvalidLists = 0; - - if (id <= 0) { - if (numInvalidLists < 3) { - fprintf(stderr, "JAVA 3D ERROR : glCallList(%d) -- IGNORED\n", id); - ++numInvalidLists; - } - else if (numInvalidLists == 3) { - fprintf(stderr, "JAVA 3D : further glCallList error messages discarded\n"); - ++numInvalidLists; - } - return; - } - - /* Set normalization if non-uniform scale */ - if (isNonUniformScale) { - glEnable(GL_NORMALIZE); - } - - glCallList(id); - - /* Turn normalization back off */ - if (isNonUniformScale) { - glDisable(GL_NORMALIZE); - } -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_freeDisplayList( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint id) -{ - - if (id <= 0) { - fprintf(stderr, "JAVA 3D ERROR : glDeleteLists(%d,1) -- IGNORED\n", id); - return; - } - - glDeleteLists(id, 1); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_freeTexture( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint id) -{ - GLuint texObj; - - if(id > 0) { - texObj = id; - glDeleteTextures(1, &texObj); - } - else - fprintf(stderr, "try to delete tex with texid <= 0. \n"); - -} - - -/* - * Method: getTextureColorTableSize - */ -int getTextureColorTableSize( - JNIEnv *env, - jobject obj, - GraphicsContextPropertiesInfo *ctxInfo, - char *extensionStr) -{ - GraphicsContextPropertiesInfo* ctxProperties = ctxInfo; - int size; - - if (isExtensionSupported(extensionStr, "GL_ARB_imaging")) { - -#ifdef WIN32 - ctxProperties->glColorTable = (MYPFNGLCOLORTABLEPROC)wglGetProcAddress("glColorTable"); - ctxProperties->glGetColorTableParameteriv = - (MYPFNGLGETCOLORTABLEPARAMETERIVPROC)wglGetProcAddress("glGetColorTableParameteriv"); -#endif -#if defined(UNIX) - ctxProperties->glColorTable = - (MYPFNGLCOLORTABLEPROC)dlsym(RTLD_DEFAULT, "glColorTable"); - ctxProperties->glGetColorTableParameteriv = - (MYPFNGLGETCOLORTABLEPARAMETERIVPROC)dlsym(RTLD_DEFAULT, "glGetColorTableParameteriv"); -#endif - - } else if(isExtensionSupported(extensionStr, "GL_SGI_color_table")) { - -#ifdef WIN32 - ctxProperties->glColorTable = (MYPFNGLCOLORTABLEPROC)wglGetProcAddress("glColorTableSGI"); - ctxProperties->glGetColorTableParameteriv = - (MYPFNGLGETCOLORTABLEPARAMETERIVPROC)wglGetProcAddress("glGetColorTableParameterivSGI"); -#endif -#if defined(UNIX) - ctxProperties->glColorTable = - (MYPFNGLCOLORTABLEPROC)dlsym(RTLD_DEFAULT, "glColorTableSGI"); - ctxProperties->glGetColorTableParameteriv = - (MYPFNGLGETCOLORTABLEPARAMETERIVPROC)dlsym(RTLD_DEFAULT, "glGetColorTableParameterivSGI"); -#endif - - } else { - return 0; - } - - if ((ctxProperties->glColorTable == NULL) || - (ctxProperties->glGetColorTableParameteriv == NULL)) { - return 0; - } - - ctxProperties->glColorTable(GL_PROXY_TEXTURE_COLOR_TABLE_SGI, GL_RGBA, 256, GL_RGB, - GL_INT, NULL); - ctxProperties->glGetColorTableParameteriv(GL_PROXY_TEXTURE_COLOR_TABLE_SGI, - GL_COLOR_TABLE_WIDTH_SGI, &size); - return size; -} - -JNIEXPORT -jlong JNICALL Java_javax_media_j3d_NativePipeline_createOffScreenBuffer( - JNIEnv *env, - jobject obj, - jobject cv, - jlong ctxInfo, - jlong display, - jlong fbConfigListPtr, - jint width, - jint height) -{ - -#if defined(UNIX) - - /* Fix for issue 20 */ - - const char *extStr; - int attrCount, configAttr[10]; - GLXPbuffer pbuff = None; - GLXFBConfig *fbConfigList = (GLXFBConfig *)fbConfigListPtr; - int val; - - /* - glXGetFBConfigAttrib((Display *) display, fbConfigList[0], - GLX_FBCONFIG_ID, &val); - fprintf(stderr, "GLX_FBCONFIG_ID returns %d\n", val); - - fprintf(stderr, "display 0x%x, fbConfigList[0] 0x%x, width %d, height %d\n", - (int) display, (int) fbConfigList[0], width, height); - - */ - - - /* Query DRAWABLE_TYPE. Will use Pbuffer if fbConfig support it, - else will try for Pixmap. If neither one exists, flag error message - and return None */ - - glXGetFBConfigAttrib((Display *) display, fbConfigList[0], - GLX_DRAWABLE_TYPE, &val); - /* fprintf(stderr, "GLX_DRAWABLE_TYPE returns %d\n", val); */ - - if (getJavaBoolEnv(env,"usePbuffer") && (val & GLX_PBUFFER_BIT) != 0) { - /* fprintf(stderr, "Using pbuffer %d\n", val); */ - - /* Initialize the attribute list to be used for choosing FBConfig */ - - attrCount = 0; - configAttr[attrCount++] = GLX_PBUFFER_WIDTH; - configAttr[attrCount++] = width; - configAttr[attrCount++] = GLX_PBUFFER_HEIGHT; - configAttr[attrCount++] = height; - configAttr[attrCount++] = GLX_PRESERVED_CONTENTS; - configAttr[attrCount++] = GL_TRUE; - configAttr[attrCount++] = None; - - - pbuff = glXCreatePbuffer((Display *) display, fbConfigList[0], configAttr); - - if (pbuff == None) { - fprintf(stderr, "Java 3D ERROR : glXCreateGLXPbuffer() returns None\n"); - } - - return (jlong)pbuff; - } - else if((val & GLX_PIXMAP_BIT) != 0) { - Pixmap pixmap; - GLXPixmap glxpixmap = None; - XVisualInfo *vinfo; - Window root; - Window glWin; - XSetWindowAttributes win_attrs; - Colormap cmap; - unsigned long win_mask; - - /* fprintf(stderr, "Using pixmap %d\n", val); */ - - vinfo = glXGetVisualFromFBConfig((Display*)display, fbConfigList[0]); - if (vinfo == NULL) { - fprintf(stderr, "Java 3D ERROR : glXGetVisualFromFBConfig failed\n"); - } - else { - /* fprintf(stderr, "found a %d-bit visual (visual ID = 0x%x)\n", - vinfo->depth, vinfo->visualid); */ - - /* fall back to pixmap */ - root = RootWindow((Display *)display, vinfo->screen); - - /* Create a colormap */ - cmap = XCreateColormap((Display *)display, root, vinfo->visual, AllocNone); - - /* Create a window */ - win_attrs.colormap = cmap; - win_attrs.border_pixel = 0; - win_mask = CWColormap | CWBorderPixel; - glWin = XCreateWindow((Display *)display, root, 0, 0, 1, 1, 0, - vinfo->depth, InputOutput, vinfo->visual, - win_mask, &win_attrs); - - /* fprintf(stderr, "glWin %d\n",(int) glWin); */ - - pixmap = XCreatePixmap((Display*)display, (GLXDrawable)glWin, - width, height, vinfo->depth); - - /* fprintf(stderr, "XCreatePixmap returns %d\n", (int) pixmap); */ - - glxpixmap = glXCreatePixmap((Display*)display, fbConfigList[0], pixmap, NULL); - if (glxpixmap == None) { - fprintf(stderr, "Java 3D ERROR : glXCreateGLXPixmap() returns None\n"); - } - } - - /* fprintf(stderr, "glxpixmap %d\n",(int) glxpixmap); */ - return (jlong)glxpixmap; - } - else { - fprintf(stderr, "Java 3D ERROR : FBConfig doesn't support pbuffer or pixmap returns None\n"); - return (jlong)None; - } - - -#endif /* UNIX */ - -#ifdef WIN32 - /* Fix for issue 76 */ - int dpy = (int)display; - static char szAppName[] = "CreateOffScreen"; - HWND hwnd; - HGLRC hrc; - HDC hdc; - int pixelFormat; - PixelFormatInfo *pFormatInfoPtr = (PixelFormatInfo *)fbConfigListPtr; - int piAttrs[2]; - - HPBUFFERARB hpbuf = NULL; /* Handle to the Pbuffer */ - HDC hpbufdc = NULL; /* Handle to the Pbuffer's device context */ - - HDC bitmapHdc; - HBITMAP hbitmap; - - BITMAPINFOHEADER bih; - void *ppvBits; - int err; - LPTSTR errString; - OffScreenBufferInfo *offScreenBufferInfo = NULL; - - PIXELFORMATDESCRIPTOR dummy_pfd = getDummyPFD(); - jclass cv_class; - jfieldID offScreenBuffer_field; - JNIEnv table = *env; - - /* - fprintf(stderr, "****** CreateOffScreenBuffer ******\n"); - fprintf(stderr, "display 0x%x, pFormat %d, width %d, height %d\n", - (int) display, pFormatInfoPtr->offScreenPFormat, width, height); - */ - - cv_class = (jclass) (*(table->GetObjectClass))(env, cv); - offScreenBuffer_field = - (jfieldID) (*(table->GetFieldID))(env, cv_class, "offScreenBufferInfo", "J"); - - /* - * Select any pixel format and bound current context to - * it so that we can get the wglChoosePixelFormatARB entry point. - * Otherwise wglxxx entry point will always return null. - * That's why we need to create a dummy window also. - */ - hwnd = createDummyWindow((const char *)szAppName); - - if (!hwnd) { - return 0; - } - hdc = GetDC(hwnd); - - pixelFormat = ChoosePixelFormat(hdc, &dummy_pfd); - - if (pixelFormat<1) { - printErrorMessage("In Canvas3D : Failed in ChoosePixelFormat"); - DestroyWindow(hwnd); - UnregisterClass(szAppName, (HINSTANCE)NULL); - return 0; - } - - SetPixelFormat(hdc, pixelFormat, NULL); - - hrc = wglCreateContext(hdc); - if (!hrc) { - printErrorMessage("In Canvas3D : Failed in wglCreateContext"); - DestroyWindow(hwnd); - UnregisterClass(szAppName, (HINSTANCE)NULL); - return 0; - } - - if (!wglMakeCurrent(hdc, hrc)) { - printErrorMessage("In Canvas3D : Failed in wglMakeCurrent"); - wglDeleteContext(hrc); - ReleaseDC(hwnd, hdc); - DestroyWindow(hwnd); - UnregisterClass(szAppName, (HINSTANCE)NULL); - return 0; - } - - if (pFormatInfoPtr->drawToPbuffer) { - - /* fprintf(stderr, "***** Use PBuffer for offscreen ******\n"); */ - - piAttrs[0] = 0; - piAttrs[1] = 0; - - hpbuf = pFormatInfoPtr->wglCreatePbufferARB( hdc, pFormatInfoPtr->offScreenPFormat, - width, height, piAttrs); - if(hpbuf == NULL) { - printErrorMessage("In Canvas3D : wglCreatePbufferARB FAIL."); - wglDeleteContext(hrc); - ReleaseDC(hwnd, hdc); - DestroyWindow(hwnd); - UnregisterClass(szAppName, (HINSTANCE)NULL); - return 0; - } - - hpbufdc = pFormatInfoPtr->wglGetPbufferDCARB(hpbuf); - - if(hpbufdc == NULL) { - printErrorMessage("In Canvas3D : Can't get pbuffer's device context."); - wglDeleteContext(hrc); - ReleaseDC(hwnd, hdc); - DestroyWindow(hwnd); - UnregisterClass(szAppName, (HINSTANCE)NULL); - return 0; - } - - /* - fprintf(stderr, - "Successfully created PBuffer = 0x%x, hdc = 0x%x\n", - (int)hpbuf, (int)hpbufdc); - */ - - /* Destroy all dummy objects */ - wglDeleteContext(hrc); - ReleaseDC(hwnd, hdc); - DestroyWindow(hwnd); - UnregisterClass(szAppName, (HINSTANCE)NULL); - - offScreenBufferInfo = - (OffScreenBufferInfo *) malloc(sizeof(OffScreenBufferInfo)); - offScreenBufferInfo->isPbuffer = GL_TRUE; - offScreenBufferInfo->hpbuf = hpbuf; - - (*(table->SetLongField))(env, cv, offScreenBuffer_field, (jlong)offScreenBufferInfo); - - return (jlong) hpbufdc; - } - - /* fprintf(stderr, "***** Use Bitmap for offscreen ******\n"); */ - - /* create a DIB */ - memset(&bih, 0, sizeof(BITMAPINFOHEADER)); - - bih.biSize = sizeof(BITMAPINFOHEADER); - bih.biWidth = width; - bih.biHeight = height; - bih.biPlanes = 1; - - - /* by MIK OF CLASSX */ - if (getJavaBoolEnv(env, "transparentOffScreen")) { - bih.biBitCount = 32; - } - else { - bih.biBitCount = 24; - } - - bih.biCompression = BI_RGB; - - bitmapHdc = CreateCompatibleDC(hdc); - - hbitmap = CreateDIBSection(bitmapHdc, (BITMAPINFO *)&bih, - DIB_PAL_COLORS, &ppvBits, NULL, 0); - - - if (!hbitmap) { - err = GetLastError(); - FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM, - NULL, err, 0, (LPTSTR)&errString, 0, NULL); - fprintf(stderr, "CreateDIBSection failed: %s\n", errString); - } - - SelectObject(bitmapHdc, hbitmap); - - /* Choosing and setting of pixel format is done in createContext */ - - /* Destroy all dummy objects and fall BitMap */ - wglDeleteContext(hrc); - ReleaseDC(hwnd, hdc); - DestroyWindow(hwnd); - UnregisterClass(szAppName, (HINSTANCE)NULL); - - offScreenBufferInfo = - (OffScreenBufferInfo *) malloc(sizeof(OffScreenBufferInfo)); - offScreenBufferInfo->isPbuffer = GL_FALSE; - offScreenBufferInfo->hpbuf = 0; - - (*(table->SetLongField))(env, cv, offScreenBuffer_field, (jlong)offScreenBufferInfo); - - return ((jlong)bitmapHdc); - -#endif /* WIN32 */ -} - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_destroyOffScreenBuffer( - JNIEnv *env, - jobject obj, - jobject cv, - jlong ctxInfo, - jlong display, - jlong fbConfigListPtr, - jlong window) -{ - jclass cv_class; - jfieldID offScreenBuffer_field; - JNIEnv table = *env; - -#if defined(UNIX) - /* Fix for Issue 20 */ - GLXFBConfig *fbConfigList = (GLXFBConfig *)fbConfigListPtr; - int val; - - glXGetFBConfigAttrib((Display *) display, (GLXFBConfig) fbConfigList[0], - GLX_DRAWABLE_TYPE, &val); - /* fprintf(stderr, "GLX_DRAWABLE_TYPE returns %d\n", val); */ - - if((val & GLX_PBUFFER_BIT) != 0) { - glXDestroyPbuffer((Display *) display, (GLXPbuffer)window); - } - else if((val & GLX_PIXMAP_BIT) != 0) { - glXDestroyPixmap((Display *) display, (GLXPixmap)window); - } - -#endif /* UNIX */ - -#ifdef WIN32 - /* Fix for issue 76 */ - PixelFormatInfo *pFormatInfoPtr = (PixelFormatInfo *)fbConfigListPtr; - OffScreenBufferInfo *offScreenBufferInfo = NULL; - HDC hpbufdc = (HDC) window; - - cv_class = (jclass) (*(table->GetObjectClass))(env, cv); - offScreenBuffer_field = - (jfieldID) (*(table->GetFieldID))(env, cv_class, "offScreenBufferInfo", "J"); - - offScreenBufferInfo = - (OffScreenBufferInfo *) (*(table->GetLongField))(env, cv, offScreenBuffer_field); - - /* - fprintf(stderr,"Canvas3D_destroyOffScreenBuffer : offScreenBufferInfo 0x%x\n", - offScreenBufferInfo); - */ - - if(offScreenBufferInfo == NULL) { - return; - } - - if(offScreenBufferInfo->isPbuffer) { - /* - fprintf(stderr,"Canvas3D_destroyOffScreenBuffer : Pbuffer\n"); - */ - - pFormatInfoPtr->wglReleasePbufferDCARB(offScreenBufferInfo->hpbuf, hpbufdc); - pFormatInfoPtr->wglDestroyPbufferARB(offScreenBufferInfo->hpbuf); - } - else { - HBITMAP oldhbitmap; - HDC hdc = (HDC) window; - - /* fprintf(stderr,"Canvas3D_destroyOffScreenBuffer : BitMap\n"); */ - oldhbitmap = SelectObject(hdc, NULL); - DeleteObject(oldhbitmap); - DeleteDC(hdc); - } - - free(offScreenBufferInfo); - (*(table->SetLongField))(env, cv, offScreenBuffer_field, (jlong)0); - -#endif /* WIN32 */ -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_readOffScreenBuffer( - JNIEnv *env, - jobject obj, - jobject cv, - jlong ctxInfo, - jint format, - jint dataType, - jobject data, - jint width, - jint height) -{ - JNIEnv table = *env; - int type; - void *imageObjPtr; - - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - jlong ctx = ctxProperties->context; - - glPixelStorei(GL_PACK_ROW_LENGTH, width); - glPixelStorei(GL_PACK_ALIGNMENT, 1); - - if((dataType == IMAGE_DATA_TYPE_BYTE_ARRAY) || (dataType == IMAGE_DATA_TYPE_INT_ARRAY)) { - imageObjPtr = (void *)(*(table->GetPrimitiveArrayCritical))(env, (jarray)data, NULL); - } - else { - imageObjPtr = (void *)(*(table->GetDirectBufferAddress))(env, data); - } - - if((dataType == IMAGE_DATA_TYPE_BYTE_ARRAY) || (dataType == IMAGE_DATA_TYPE_BYTE_BUFFER)) { - switch (format) { - /* GL_BGR */ - case IMAGE_FORMAT_BYTE_BGR: - type = GL_BGR; - break; - case IMAGE_FORMAT_BYTE_RGB: - type = GL_RGB; - break; - /* GL_ABGR_EXT */ - case IMAGE_FORMAT_BYTE_ABGR: - if (ctxProperties->abgr_ext) { /* If its zero, should never come here! */ - type = GL_ABGR_EXT; - } - else { - throwAssert(env, "GL_ABGR_EXT format is unsupported"); - return; - } - break; - case IMAGE_FORMAT_BYTE_RGBA: - type = GL_RGBA; - break; - - /* This method only supports 3 and 4 components formats and BYTE types. */ - case IMAGE_FORMAT_BYTE_LA: - case IMAGE_FORMAT_BYTE_GRAY: - case IMAGE_FORMAT_USHORT_GRAY: - case IMAGE_FORMAT_INT_BGR: - case IMAGE_FORMAT_INT_RGB: - case IMAGE_FORMAT_INT_ARGB: - default: - throwAssert(env, "illegal format"); - return; - } - - glReadPixels(0, 0, width, height, type, GL_UNSIGNED_BYTE, imageObjPtr); - - } - else if((dataType == IMAGE_DATA_TYPE_INT_ARRAY) || (dataType == IMAGE_DATA_TYPE_INT_BUFFER)) { - GLenum intType = GL_UNSIGNED_INT_8_8_8_8; - GLboolean forceAlphaToOne = GL_FALSE; - - switch (format) { - /* GL_BGR */ - case IMAGE_FORMAT_INT_BGR: /* Assume XBGR format */ - type = GL_RGBA; - intType = GL_UNSIGNED_INT_8_8_8_8_REV; - forceAlphaToOne = GL_TRUE; - break; - case IMAGE_FORMAT_INT_RGB: /* Assume XRGB format */ - forceAlphaToOne = GL_TRUE; - /* Fall through to next case */ - case IMAGE_FORMAT_INT_ARGB: - type = GL_BGRA; - intType = GL_UNSIGNED_INT_8_8_8_8_REV; - break; - /* This method only supports 3 and 4 components formats and INT types. */ - case IMAGE_FORMAT_BYTE_LA: - case IMAGE_FORMAT_BYTE_GRAY: - case IMAGE_FORMAT_USHORT_GRAY: - case IMAGE_FORMAT_BYTE_BGR: - case IMAGE_FORMAT_BYTE_RGB: - case IMAGE_FORMAT_BYTE_RGBA: - case IMAGE_FORMAT_BYTE_ABGR: - default: - throwAssert(env, "illegal format"); - return; - } - - /* Force Alpha to 1.0 if needed */ - if(forceAlphaToOne) { - glPixelTransferf(GL_ALPHA_SCALE, 0.0f); - glPixelTransferf(GL_ALPHA_BIAS, 1.0f); - } - - glReadPixels(0, 0, width, height, type, intType, imageObjPtr); - - /* Restore Alpha scale and bias */ - if(forceAlphaToOne) { - glPixelTransferf(GL_ALPHA_SCALE, 1.0f); - glPixelTransferf(GL_ALPHA_BIAS, 0.0f); - } - } - else { - throwAssert(env, "illegal image data type"); - } - - if((dataType == IMAGE_DATA_TYPE_BYTE_ARRAY) || (dataType == IMAGE_DATA_TYPE_INT_ARRAY)) { - (*(table->ReleasePrimitiveArrayCritical))(env, data, imageObjPtr, 0); - } - -} - -static void -initializeCtxInfo(JNIEnv *env , GraphicsContextPropertiesInfo* ctxInfo) -{ - ctxInfo->context = 0; - - /* version and extension info */ - ctxInfo->versionStr = NULL; - ctxInfo->vendorStr = NULL; - ctxInfo->rendererStr = NULL; - ctxInfo->extensionStr = NULL; - ctxInfo->versionNumbers[0] = 1; - ctxInfo->versionNumbers[1] = 1; - ctxInfo->gl13 = JNI_FALSE; - ctxInfo->gl14 = JNI_FALSE; - ctxInfo->gl20 = JNI_FALSE; - - /* 1.2 and GL_ARB_imaging */ - ctxInfo->blend_color_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 */ - ctxInfo->multi_draw_arrays_sun = JNI_FALSE; - ctxInfo->compiled_vertex_array_ext = JNI_FALSE; - - ctxInfo->texture_clamp_to_border_enum = GL_CLAMP; - - ctxInfo->global_alpha_sun = JNI_FALSE; - - /* EXT extensions */ - ctxInfo->abgr_ext = JNI_FALSE; - - ctxInfo->multi_draw_arrays_ext = JNI_FALSE; - - ctxInfo->implicit_multisample = getJavaBoolEnv(env, "implicitAntialiasing"); - - /* by MIK OF CLASSX */ - ctxInfo->alphaClearValue = (getJavaBoolEnv(env, "transparentOffScreen") ? 0.0f : 1.0f); - - ctxInfo->multisample = JNI_FALSE; - - /* Multitexture support */ - 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; - - /* NV extensions */ - ctxInfo->textureRegisterCombinersAvailable = JNI_FALSE; - - /* SGI extensions */ - ctxInfo->textureSharpenAvailable = JNI_FALSE; - ctxInfo->textureDetailAvailable = JNI_FALSE; - ctxInfo->textureFilter4Available = JNI_FALSE; - ctxInfo->textureAnisotropicFilterAvailable = JNI_FALSE; - ctxInfo->textureColorTableAvailable = JNI_FALSE; - ctxInfo->textureColorTableSize = 0; - ctxInfo->textureLodAvailable = JNI_FALSE; - ctxInfo->textureLodBiasAvailable = JNI_FALSE; - - /* 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; - ctxInfo->glGetColorTableParameteriv = NULL; - ctxInfo->glTexImage3DEXT = NULL; - ctxInfo->glTexSubImage3DEXT = NULL; - ctxInfo->glClientActiveTexture = NULL; - ctxInfo->glMultiDrawArraysEXT = NULL; - ctxInfo->glMultiDrawElementsEXT = NULL; - ctxInfo->glLockArraysEXT = NULL; - ctxInfo->glUnlockArraysEXT = NULL; - ctxInfo->glMultiTexCoord2fv = NULL; - ctxInfo->glMultiTexCoord3fv = NULL; - ctxInfo->glMultiTexCoord4fv = NULL; - ctxInfo->glLoadTransposeMatrixd = NULL; - ctxInfo->glMultTransposeMatrixd = NULL; - ctxInfo->glActiveTexture = NULL; - ctxInfo->glGlobalAlphaFactorfSUN = NULL; - - ctxInfo->glCombinerInputNV = NULL; - ctxInfo->glCombinerOutputNV = NULL; - ctxInfo->glFinalCombinerInputNV = NULL; - ctxInfo->glCombinerParameterfvNV = NULL; - ctxInfo->glCombinerParameterivNV= NULL; - ctxInfo->glCombinerParameterfNV = NULL; - ctxInfo->glCombinerParameteriNV = NULL; - - ctxInfo->glSharpenTexFuncSGIS = NULL; - ctxInfo->glDetailTexFuncSGIS = NULL; - ctxInfo->glTexFilterFuncSGIS = NULL; - - /* 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; -} - -static void -cleanupCtxInfo(GraphicsContextPropertiesInfo* ctxInfo) -{ - if( ctxInfo->versionStr != NULL) - free(ctxInfo->versionStr); - if( ctxInfo->vendorStr != NULL) - free(ctxInfo->vendorStr); - if( ctxInfo->rendererStr != NULL) - free(ctxInfo->rendererStr); - if( ctxInfo->extensionStr != NULL) - free(ctxInfo->extensionStr); - ctxInfo->versionStr = NULL; - ctxInfo->vendorStr = NULL; - ctxInfo->rendererStr = NULL; - ctxInfo->extensionStr = NULL; -} - -#ifdef WIN32 -HWND createDummyWindow(const char* szAppName) { - static const char *szTitle = "Dummy Window"; - WNDCLASS wc; /* windows class sruct */ - - HWND hWnd; - - /* Fill in window class structure with parameters that */ - /* describe the main window. */ - - wc.style = - CS_HREDRAW | CS_VREDRAW;/* Class style(s). */ - wc.lpfnWndProc = - (WNDPROC)WndProc; /* Window Procedure */ - wc.cbClsExtra = 0; /* No per-class extra data. */ - wc.cbWndExtra = 0; /* No per-window extra data. */ - wc.hInstance = - NULL; /* Owner of this class */ - wc.hIcon = NULL; /* Icon name */ - wc.hCursor = - NULL;/* Cursor */ - wc.hbrBackground = - (HBRUSH)(COLOR_WINDOW+1);/* Default color */ - wc.lpszMenuName = NULL; /* Menu from .RC */ - wc.lpszClassName = - szAppName; /* Name to register as - - /* Register the window class */ - - if(RegisterClass( &wc )==0) { - printErrorMessage("createDummyWindow: couldn't register class"); - return NULL; - } - - /* Create a main window for this application instance. */ - - hWnd = CreateWindow( - szAppName, /* app name */ - szTitle, /* Text for window title bar */ - WS_OVERLAPPEDWINDOW/* Window style */ - /* NEED THESE for OpenGL calls to work!*/ - | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, - CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, - NULL, /* no parent window */ - NULL, /* Use the window class menu.*/ - NULL, /* This instance owns this window */ - NULL /* We don't use any extra data */ - ); - - /* If window could not be created, return zero */ - if ( !hWnd ){ - printErrorMessage("createDummyWindow: couldn't create window"); - UnregisterClass(szAppName, (HINSTANCE)NULL); - return NULL; - } - return hWnd; -} -#endif - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_createQueryContext( - JNIEnv *env, - jobject obj, - jobject cv, - jlong display, - jlong window, - jlong fbConfigListPtr, - jboolean offScreen, - jint width, - jint height, - jboolean glslLibraryAvailable, - jboolean cgLibraryAvailable) -{ - JNIEnv table = *env; - jlong gctx; - int stencilSize=0; - jlong newWin; - int PixelFormatID=0; - GraphicsContextPropertiesInfo* ctxInfo = (GraphicsContextPropertiesInfo *)malloc(sizeof(GraphicsContextPropertiesInfo)); - -#if defined(UNIX) - - /* Fix for issue 20 */ - - XVisualInfo *vinfo, template; - int nitems; - GLXContext ctx; - int result; - Window root; - Window glWin; - XSetWindowAttributes win_attrs; - Colormap cmap; - unsigned long win_mask; - jlong hdc; - - GLXFBConfig *fbConfigList = NULL; - - fbConfigList = (GLXFBConfig *)fbConfigListPtr; - - /* - fprintf(stderr, "Canvas3D_createQueryContext:\n"); - fprintf(stderr, "fbConfigListPtr 0x%x\n", (int) fbConfigListPtr); - fprintf(stderr, "fbConfigList 0x%x, fbConfigList[0] 0x%x\n", - (int) fbConfigList, (int) fbConfigList[0]); - */ - - ctx = glXCreateNewContext((Display *)display, fbConfigList[0], - GLX_RGBA_TYPE, NULL, True); - - if (ctx == NULL) { - fprintf(stderr, "Java 3D ERROR : Canvas3D_createQueryContext: couldn't create context.\n"); - } - - - /* onscreen rendering and window is 0 now */ - if(window == 0 && !offScreen) { - - vinfo = glXGetVisualFromFBConfig((Display*)display, fbConfigList[0]); - if (vinfo == NULL) { - fprintf(stderr, "Java 3D ERROR : glXGetVisualFromFBConfig failed\n"); - } - else { - /* fprintf(stderr, "found a %d-bit visual (visual ID = 0x%x)\n", - vinfo->depth, vinfo->visualid); - */ - root = RootWindow((Display *)display, vinfo->screen); - - /* Create a colormap */ - cmap = XCreateColormap((Display *)display, root, vinfo->visual, AllocNone); - - /* Create a window */ - win_attrs.colormap = cmap; - win_attrs.border_pixel = 0; - win_attrs.event_mask = KeyPressMask | ExposureMask | StructureNotifyMask; - win_mask = CWColormap | CWBorderPixel | CWEventMask; - glWin = XCreateWindow((Display *)display, root, 0, 0, width, height, 0, - vinfo->depth, InputOutput, vinfo->visual, - win_mask, &win_attrs); - newWin = (jlong)glWin; - } - } - else if(window == 0 && offScreen){ - newWin = Java_javax_media_j3d_NativePipeline_createOffScreenBuffer(env, - obj, cv, 0, display, - fbConfigListPtr, - width, height); - } - else if(window != 0) { - newWin = window; - } - - result = glXMakeCurrent((Display *)display, (GLXDrawable)newWin, (GLXContext)ctx); - if (!result) - fprintf(stderr, "Java 3D ERROR : glXMakeCurrent fails\n"); - - glXGetFBConfigAttrib((Display *) display, fbConfigList[0], - GLX_STENCIL_SIZE, &stencilSize); - - - gctx = (jlong)ctx; -#endif - -#ifdef WIN32 - HGLRC hrc; /* HW Rendering Context */ - HDC hdc; /* HW Device Context */ - DWORD err; - LPTSTR errString; - HWND hDummyWnd = 0; - static char szAppName[] = "OpenGL"; - jlong vinfo = 0; - jboolean result; - PixelFormatInfo *PixelFormatInfoPtr = (PixelFormatInfo *)fbConfigListPtr; - - /* Fix for issue 76 */ - - /* - fprintf(stderr, "Canvas3D_createQueryContext:\n"); - fprintf(stderr, "window is 0x%x, offScreen %d\n", window, offScreen); - */ - - /* Fix to issue 104 */ - if(!offScreen) { - if ((PixelFormatInfoPtr == NULL) || (PixelFormatInfoPtr->onScreenPFormat <= 0)) { - printErrorMessage("Canvas3D_createNewContext: onScreen PixelFormat is invalid"); - return; - } - else { - PixelFormatID = PixelFormatInfoPtr->onScreenPFormat; - } - } - else { - if ((PixelFormatInfoPtr == NULL) || (PixelFormatInfoPtr->offScreenPFormat <= 0)) { - printErrorMessage("Canvas3D_createNewContext: offScreen PixelFormat is invalid"); - return; - } - else { - PixelFormatID = PixelFormatInfoPtr->offScreenPFormat; - } - } - - /* onscreen rendering and window is 0 now */ - if(window == 0 && !offScreen){ - /* fprintf(stderr, "CreateQueryContext : window == 0 && !offScreen\n"); */ - hDummyWnd = createDummyWindow(szAppName); - if (!hDummyWnd) { - return; - } - hdc = GetDC(hDummyWnd); - } - else if(window == 0 && offScreen){ - /* fprintf(stderr, "CreateQueryContext : window == 0 && offScreen\n"); */ - hdc = (HDC)Java_javax_media_j3d_NativePipeline_createOffScreenBuffer(env, - obj, cv, 0, display, - fbConfigListPtr, - width, height); - } - else if(window != 0){ - /* fprintf(stderr, "CreateQueryContext : window != 0 0x%x\n", window); */ - hdc = (HDC) window; - } - - newWin = (jlong)hdc; - - SetPixelFormat(hdc, PixelFormatID, NULL); - - hrc = wglCreateContext( hdc ); - - if (!hrc) { - err = GetLastError(); - FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM, - NULL, err, 0, (LPTSTR)&errString, 0, NULL); - - fprintf(stderr, "wglCreateContext Failed: %s\n", errString); - } - - - result = wglMakeCurrent(hdc, hrc); - - if (!result) { - err = GetLastError(); - FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM, - NULL, err, 0, (LPTSTR)&errString, 0, NULL); - fprintf(stderr, "wglMakeCurrent Failed: %s\n", errString); - } - - gctx = (jlong)hrc; - -#endif - - initializeCtxInfo(env, ctxInfo); - ctxInfo->context = gctx; - - /* get current context properties */ - if (getPropertiesFromCurrentContext(env, cv, ctxInfo, (jlong) hdc, PixelFormatID, - fbConfigListPtr, offScreen, - glslLibraryAvailable, cgLibraryAvailable)) { - /* put the properties to the Java side */ - setupCanvasProperties(env, cv, ctxInfo); - } - - - /* clear up the context , colormap and window if appropriate */ - if(window == 0 && !offScreen){ -#if defined(UNIX) - Java_javax_media_j3d_NativePipeline_destroyContext(env, obj, display, newWin, (jlong)ctxInfo); - XDestroyWindow((Display *)display, glWin); - XFreeColormap((Display *)display, cmap); -#endif /* UNIX */ -#ifdef WIN32 - /* Release DC */ - ReleaseDC(hDummyWnd, hdc); - /* Destroy context */ - /* This will free ctxInfo also */ - Java_javax_media_j3d_NativePipeline_destroyContext(env, obj, display,newWin, (jlong)ctxInfo); - DestroyWindow(hDummyWnd); - UnregisterClass(szAppName, (HINSTANCE)NULL); -#endif /* WIN32 */ - } - else if(window == 0 && offScreen) { - Java_javax_media_j3d_NativePipeline_destroyOffScreenBuffer(env, obj, cv, gctx, display, fbConfigListPtr, newWin); - Java_javax_media_j3d_NativePipeline_destroyContext(env, obj, display, newWin, (jlong)ctxInfo); - } - else if(window != 0){ - Java_javax_media_j3d_NativePipeline_destroyContext(env, obj, display, newWin, (jlong)ctxInfo); - } -} - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_beginScene( - JNIEnv *env, - jobject obj, - jlong ctxInfo) -{ - /* Not used by OGL renderer */ -} - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_endScene( - JNIEnv *env, - jobject obj, - jlong ctxInfo) -{ - /* This function is a no-op */ - /* - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - */ -} - -/* Setup the multisampling for full scene antialiasing */ -JNIEXPORT void JNICALL Java_javax_media_j3d_NativePipeline_setFullSceneAntialiasing -(JNIEnv *env, jobject obj, jlong ctxInfo, jboolean enable) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - jlong ctx = ctxProperties->context; - - if (ctxProperties->multisample && !ctxProperties->implicit_multisample) { - if(enable == JNI_TRUE) { - glEnable(GL_MULTISAMPLE); - } - else { - glDisable(GL_MULTISAMPLE); - - } - } - -} - - -/* - * Return false if <= 8 bit color under windows - */ -JNIEXPORT -jboolean JNICALL Java_javax_media_j3d_NativePipeline_validGraphicsMode( - JNIEnv *env, - jobject obj) -{ -#ifdef WIN32 - DEVMODE devMode; - - EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &devMode); - return (devMode.dmBitsPerPel > 8); -#endif - -#if defined(UNIX) - return JNI_TRUE; -#endif -} - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_cleanupRenderer( - JNIEnv *env, - jobject obj) -{ - /* No-op for OGL pipeline */ -} - - -/* - * Function to disable most rendering attributes when doing a 2D - * clear, or image copy operation. Note that the - * caller must save/restore the attributes with - * pushAttrib(GL_ENABLE_BIT|...) and popAttrib() - */ -static void -disableAttribFor2D(GraphicsContextPropertiesInfo *ctxProperties) -{ - int i; - - glDisable(GL_ALPHA_TEST); - glDisable(GL_BLEND); - glDisable(GL_COLOR_LOGIC_OP); - glDisable(GL_COLOR_MATERIAL); - glDisable(GL_CULL_FACE); - glDisable(GL_DEPTH_TEST); - glDisable(GL_FOG); - glDisable(GL_LIGHTING); - glDisable(GL_POLYGON_OFFSET_FILL); - glDisable(GL_POLYGON_STIPPLE); - glDisable(GL_STENCIL_TEST); - glDisable(GL_TEXTURE_2D); - glDisable(GL_TEXTURE_GEN_Q); - glDisable(GL_TEXTURE_GEN_R); - glDisable(GL_TEXTURE_GEN_S); - glDisable(GL_TEXTURE_GEN_T); - - for (i = 0; i < 6; i++) { - glDisable(GL_CLIP_PLANE0 + i); - } - - glDisable(GL_TEXTURE_3D); - glDisable(GL_TEXTURE_CUBE_MAP); - - if (ctxProperties->textureRegisterCombinersAvailable) { - glDisable(GL_REGISTER_COMBINERS_NV); - } - - if (ctxProperties->textureColorTableAvailable) { - glDisable(GL_TEXTURE_COLOR_TABLE_SGI); - } - - if (ctxProperties->global_alpha_sun) { - glDisable(GL_GLOBAL_ALPHA_SUN); - } -} - -/* - * Function to disable most rendering attributes when doing a Raster - * clear, or image copy operation. Note that the - * caller must save/restore the attributes with - * pushAttrib(GL_ENABLE_BIT|...) and popAttrib() - */ -static void -disableAttribForRaster(GraphicsContextPropertiesInfo *ctxProperties) -{ - glDisable(GL_COLOR_MATERIAL); - glDisable(GL_CULL_FACE); - glDisable(GL_LIGHTING); - glDisable(GL_POLYGON_OFFSET_FILL); - glDisable(GL_POLYGON_STIPPLE); - - // TODO: Disable if Raster.CLIP_POSITION is true -// for (int i = 0; i < 6; i++) { -// glDisable(GL_CLIP_PLANE0 + i); -// } - - if (ctxProperties->global_alpha_sun) { - glDisable(GL_GLOBAL_ALPHA_SUN); - } -} diff --git a/src/native/ogl/CgShaderProgram.c b/src/native/ogl/CgShaderProgram.c deleted file mode 100644 index 192b64d..0000000 --- a/src/native/ogl/CgShaderProgram.c +++ /dev/null @@ -1,2460 +0,0 @@ -/* - * $RCSfile$ - * - * Copyright 2005-2008 Sun Microsystems, Inc. All Rights Reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * $Revision$ - * $Date$ - * $State$ - */ - -/* j3dsys.h needs to be included before any other include files to suppres VC warning */ -#include "j3dsys.h" - -#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 - -#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); - -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_NativePipeline - * Method: loadNativeCgLibrary - * Signature: ([Ljava/lang/String;)Z - */ -JNIEXPORT jboolean JNICALL -Java_javax_media_j3d_NativePipeline_loadNativeCgLibrary( - JNIEnv *env, - jobject thiz, - jobjectArray libpath) -{ - CgWrapperInfo *cgWrapperInfo; - -#ifdef COMPILE_CG_SHADERS - int i, pathLen; - char *errName = NULL; - -#ifdef WIN32 - DWORD err; - LPTSTR errString; - UINT origErrorMode; -#endif /* WIN32 */ - -#endif /* COMPILE_CG_SHADERS */ - - /* - * 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, "NativePipeline.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 stable */ - 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)) { -#ifdef VERBOSE - fprintf(stderr, "Using CG_PROFILE_ARBVP1\n"); -#endif /* VERBOSE */ - cgCtxInfo->vProfile = CG_PROFILE_ARBVP1; - } - else if (cgWrapperInfo->cgGLIsProfileSupported(CG_PROFILE_VP20)) { -#ifdef VERBOSE - fprintf(stderr, "Using CG_PROFILE_VP20\n"); -#endif /* VERBOSE */ - cgCtxInfo->vProfile = CG_PROFILE_VP20; - } - else { - fprintf(stderr, - "JAVA 3D ERROR : No CG vertex program profile is supported\n"); - free(cgCtxInfo); - return NULL; - } - - /* Use GL_ARB_fragment_program extension if supported by video card */ - if (cgWrapperInfo->cgGLIsProfileSupported(CG_PROFILE_ARBFP1)) { -#ifdef VERBOSE - fprintf(stderr, "Using CG_PROFILE_ARBFP1\n"); -#endif /* VERBOSE */ - cgCtxInfo->fProfile = CG_PROFILE_ARBFP1; - } - else if (cgWrapperInfo->cgGLIsProfileSupported(CG_PROFILE_FP20)) { -#ifdef VERBOSE - fprintf(stderr, "Using CG_PROFILE_FP20\n"); -#endif /* VERBOSE */ - cgCtxInfo->fProfile = CG_PROFILE_FP20; - } - else { - fprintf(stderr, - "JAVA 3D ERROR : No CG fragment program profile is supported\n"); - free(cgCtxInfo); - return NULL; - } - -#ifdef VERBOSE - 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); -#endif /* VERBOSE */ - - 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; - -#ifdef VERBOSE - fprintf(stderr, "Cg ctx is available\n"); -#endif /* VERBOSE */ - 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 = 7; - - /* 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; - } -#ifdef VERBOSE - else { - fprintf(stderr, "ERROR: Cg ctx *not* available\n"); - } -#endif /* VERBOSE */ - } -#endif /* COMPILE_CG_SHADERS */ - -} - - -/* - * Class: javax_media_j3d_NativePipeline - * Method: createCgShader - * Signature: (JI[J)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_createCgShader( - 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; - -#ifdef VERBOSE - fprintf(stderr, "CgShaderProgramRetained.createCgShader\n"); -#endif /* VERBOSE */ - - 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_NativePipeline - * Method: destroyCgShader - * Signature: (JJ)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_destroyCgShader( - 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; - -#ifdef VERBOSE - fprintf(stderr, "CgShaderProgramRetained.destroyCgShader\n"); -#endif /* VERBOSE */ - - 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_NativePipeline - * Method: compileCgShader - * Signature: (JJLjava/lang/String;)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_compileCgShader( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderId, - jstring program) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - - CgShaderInfo *cgShaderInfo = (CgShaderInfo *)shaderId; - CGerror lastError; - GLcharARB *shaderString = NULL; - -#ifdef VERBOSE - fprintf(stderr, "CgShaderProgramRetained.compileCgShader\n"); -#endif /* VERBOSE */ - - /* 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 */ -#ifdef VERBOSE - 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); -#endif /* VERBOSE */ - - cgShaderInfo->cgShader = cgWrapperInfo->cgCreateProgram(cgCtxInfo->cgCtx, - CG_SOURCE, shaderString, - cgShaderInfo->shaderProfile, NULL, NULL); - -#ifdef VERBOSE - fprintf(stderr, " cgShader = 0x%x\n", cgShaderInfo->cgShader); -#endif /* VERBOSE */ - - free(shaderString); - - 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_NativePipeline - * Method: createCgShaderProgram - * Signature: (J[J)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_createCgShaderProgram( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlongArray shaderProgramIdArray) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - jlong *shaderProgramIdPtr; - - CgShaderProgramInfo *shaderProgramInfo = - (CgShaderProgramInfo*)malloc(sizeof(CgShaderProgramInfo)); - -#ifdef VERBOSE - fprintf(stderr, "CgShaderProgramRetained.createCgShaderProgram\n"); -#endif /* VERBOSE */ - - 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_NativePipeline - * Method: destroyCgShaderProgram - * Signature: (JJ)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_destroyCgShaderProgram( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderProgramId) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - CgShaderProgramInfo *shaderProgramInfo = (CgShaderProgramInfo*)shaderProgramId; - -#ifdef VERBOSE - fprintf(stderr, "CgShaderProgramRetained.destroyCgShaderProgram\n"); -#endif /* VERBOSE */ - - 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_NativePipeline - * Method: linkCgShaderProgram - * Signature: (JJ[J)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_linkCgShaderProgram( - 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; - -#ifdef VERBOSE - fprintf(stderr, "CgShaderProgramRetained.linkCgShaderProgram\n"); -#endif /* VERBOSE */ - - /* - * 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_NativePipeline - * Method: lookupCgVertexAttrNames - * Signature: (JJI[Ljava/lang/String;[Z)V - */ -JNIEXPORT void JNICALL -Java_javax_media_j3d_NativePipeline_lookupCgVertexAttrNames( - 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)); - -#ifdef VERBOSE - fprintf(stderr, "CgShaderProgramRetained.lookupCgVertexAttrNames()\n"); -#endif /* VERBOSE */ - - 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); -#ifdef VERBOSE - fprintf(stderr, " %s : 0x%x\n", attrNameString, shaderProgramInfo->vtxAttrs[i]); -#endif /* VERBOSE */ - 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; - - /* - * XXXX: 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: - return TYPE_TUPLE2I; - - case CG_BOOL3: - case CG_FIXED3: - case CG_HALF3: - case CG_INT3: - return TYPE_TUPLE3I; - - case CG_BOOL4: - case CG_FIXED4: - case CG_HALF4: - case CG_INT4: - return TYPE_TUPLE4I; - - case CG_FLOAT: - case CG_FLOAT1: - return TYPE_FLOAT; - - case CG_FLOAT2: - return TYPE_TUPLE2F; - - case CG_FLOAT3: - return TYPE_TUPLE3F; - - case CG_FLOAT4: - return TYPE_TUPLE4F; - - case CG_FLOAT3x3: - return TYPE_MATRIX3F; - - case CG_FLOAT4x4: - return TYPE_MATRIX4F; - - /* - * 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_NativePipeline - * Method: lookupCgShaderAttrNames - * Signature: (JJI[Ljava/lang/String;[J[I[I[Z)V - */ -JNIEXPORT void JNICALL -Java_javax_media_j3d_NativePipeline_lookupCgShaderAttrNames( - 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); - -#ifdef VERBOSE - fprintf(stderr, "lookup %s\n", attrNameString); -#endif /* VERBOSE */ - - /* - * 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 setCgUniform 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); - -#ifdef VERBOSE - fprintf(stderr, " vLoc = %d, vType = %d, vSize = %d, vIsArray = %d\n", - vLoc, vType, vSize, vIsArray); -#endif /* VERBOSE */ - } - } - - 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); - -#ifdef VERBOSE - fprintf(stderr, " fLoc = %d, fType = %d, fSize = %d, fIsArray = %d\n", - fLoc, fType, fSize, fIsArray); -#endif /* VERBOSE */ - } - } - - /* - * 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) - * so we can report a more helpful error message - */ - 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_NativePipeline - * Method: useCgShaderProgram - * Signature: (JJ)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_useCgShaderProgram( - 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; - - /* Disable shader profiles */ - 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); - } else { - cgWrapperInfo->cgGLUnbindProgram(cgCtxInfo->vProfile); - } - - if (shaderProgramInfo->fShader != NULL) { - cgWrapperInfo->cgGLBindProgram(shaderProgramInfo->fShader->cgShader); - cgWrapperInfo->cgGLEnableProfile(shaderProgramInfo->fShader->shaderProfile); - } else { - cgWrapperInfo->cgGLUnbindProgram(cgCtxInfo->fProfile); - } - } else { - cgWrapperInfo->cgGLUnbindProgram(cgCtxInfo->vProfile); - cgWrapperInfo->cgGLUnbindProgram(cgCtxInfo->fProfile); - } - - ctxProperties->shaderProgramId = shaderProgramId; - -#endif /* COMPILE_CG_SHADERS */ - - return NULL; -} - - -/* - * Class: javax_media_j3d_NativePipeline - * Method: setCgUniform1i - * Signature: (JJJI)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_setCgUniform1i( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderProgramId, - jlong location, - jint value) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgParameterInfo *cgParamInfo = (CgParameterInfo *)location; - - if (cgParamInfo->vParam != NULL) { - cgWrapperInfo->cgGLSetParameter1f(cgParamInfo->vParam, (float)value); - } - - if (cgParamInfo->fParam != NULL) { - cgWrapperInfo->cgGLSetParameter1f(cgParamInfo->fParam, (float)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_NativePipeline - * Method: setCgUniform1f - * Signature: (JJJF)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_setCgUniform1f( - 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; - CgParameterInfo *cgParamInfo = (CgParameterInfo *)location; - - if (cgParamInfo->vParam != NULL) { - cgWrapperInfo->cgGLSetParameter1f(cgParamInfo->vParam, value); - } - - if (cgParamInfo->fParam != NULL) { - cgWrapperInfo->cgGLSetParameter1f(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_NativePipeline - * Method: setCgUniform2i - * Signature: (JJJ[I)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_setCgUniform2i( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderProgramId, - jlong location, - jintArray varray) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - jint *values; - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgParameterInfo *cgParamInfo = (CgParameterInfo *)location; - - /* Get array values */ - values = (*env)->GetIntArrayElements(env, varray, NULL); - - if (cgParamInfo->vParam != NULL) { - cgWrapperInfo->cgGLSetParameter2f(cgParamInfo->vParam, - (float)values[0], - (float)values[1]); - } - - if (cgParamInfo->fParam != NULL) { - cgWrapperInfo->cgGLSetParameter2f(cgParamInfo->fParam, - (float)values[0], - (float)values[1]); - } - - /* Release array values */ - (*env)->ReleaseIntArrayElements(env, varray, values, 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_NativePipeline - * Method: setCgUniform2f - * Signature: (JJJ[F)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_setCgUniform2f( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderProgramId, - jlong location, - jfloatArray varray) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - jfloat *values; - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgParameterInfo *cgParamInfo = (CgParameterInfo *)location; - - /* Get array values */ - values = (*env)->GetFloatArrayElements(env, varray, NULL); - - if (cgParamInfo->vParam != NULL) { - cgWrapperInfo->cgGLSetParameter2f(cgParamInfo->vParam, - values[0], - values[1]); - } - - if (cgParamInfo->fParam != NULL) { - cgWrapperInfo->cgGLSetParameter2f(cgParamInfo->fParam, - values[0], - values[1]); - } - - /* Release array values */ - (*env)->ReleaseFloatArrayElements(env, varray, values, 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_NativePipeline - * Method: setCgUniform3i - * Signature: (JJJ[I)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_setCgUniform3i( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderProgramId, - jlong location, - jintArray varray) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - jint *values; - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgParameterInfo *cgParamInfo = (CgParameterInfo *)location; - - /* Get array values */ - values = (*env)->GetIntArrayElements(env, varray, NULL); - - if (cgParamInfo->vParam != NULL) { - cgWrapperInfo->cgGLSetParameter3f(cgParamInfo->vParam, - (float)values[0], - (float)values[1], - (float)values[2]); - } - - if (cgParamInfo->fParam != NULL) { - cgWrapperInfo->cgGLSetParameter3f(cgParamInfo->fParam, - (float)values[0], - (float)values[1], - (float)values[2]); - } - - /* Release array values */ - (*env)->ReleaseIntArrayElements(env, varray, values, 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_NativePipeline - * Method: setCgUniform3f - * Signature: (JJJ[F)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_setCgUniform3f( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderProgramId, - jlong location, - jfloatArray varray) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - jfloat *values; - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgParameterInfo *cgParamInfo = (CgParameterInfo *)location; - - /* Get array values */ - values = (*env)->GetFloatArrayElements(env, varray, NULL); - - if (cgParamInfo->vParam != NULL) { - cgWrapperInfo->cgGLSetParameter3f(cgParamInfo->vParam, - values[0], - values[1], - values[2]); - } - - if (cgParamInfo->fParam != NULL) { - cgWrapperInfo->cgGLSetParameter3f(cgParamInfo->fParam, - values[0], - values[1], - values[2]); - } - - /* Release array values */ - (*env)->ReleaseFloatArrayElements(env, varray, values, 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_NativePipeline - * Method: setCgUniform4i - * Signature: (JJJ[I)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_setCgUniform4i( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderProgramId, - jlong location, - jintArray varray) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - jint *values; - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgParameterInfo *cgParamInfo = (CgParameterInfo *)location; - - /* Get array values */ - values = (*env)->GetIntArrayElements(env, varray, NULL); - - if (cgParamInfo->vParam != NULL) { - cgWrapperInfo->cgGLSetParameter4f(cgParamInfo->vParam, - (float)values[0], - (float)values[1], - (float)values[2], - (float)values[3]); - } - - if (cgParamInfo->fParam != NULL) { - cgWrapperInfo->cgGLSetParameter4f(cgParamInfo->fParam, - (float)values[0], - (float)values[1], - (float)values[2], - (float)values[3]); - } - - /* Release array values */ - (*env)->ReleaseIntArrayElements(env, varray, values, 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_NativePipeline - * Method: setCgUniform4f - * Signature: (JJJ[F)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_setCgUniform4f( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderProgramId, - jlong location, - jfloatArray varray) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - jfloat *values; - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgParameterInfo *cgParamInfo = (CgParameterInfo *)location; - - /* Get array values */ - values = (*env)->GetFloatArrayElements(env, varray, NULL); - - if (cgParamInfo->vParam != NULL) { - cgWrapperInfo->cgGLSetParameter4f(cgParamInfo->vParam, - values[0], - values[1], - values[2], - values[3]); - } - - if (cgParamInfo->fParam != NULL) { - cgWrapperInfo->cgGLSetParameter4f(cgParamInfo->fParam, - values[0], - values[1], - values[2], - values[3]); - } - - /* Release array values */ - (*env)->ReleaseFloatArrayElements(env, varray, values, 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_NativePipeline - * Method: setCgUniformMatrix3f - * Signature: (JJJ[F)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_setCgUniformMatrix3f( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderProgramId, - jlong location, - jfloatArray varray) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - jfloat *values; - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgParameterInfo *cgParamInfo = (CgParameterInfo *)location; - - /* Get array values */ - values = (*env)->GetFloatArrayElements(env, varray, NULL); - - if (cgParamInfo->vParam != NULL) { - cgWrapperInfo->cgGLSetMatrixParameterfr(cgParamInfo->vParam, values); - } - - if (cgParamInfo->fParam != NULL) { - cgWrapperInfo->cgGLSetMatrixParameterfr(cgParamInfo->fParam, values); - } - - /* Release array values */ - (*env)->ReleaseFloatArrayElements(env, varray, values, 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_NativePipeline - * Method: setCgUniformMatrix4f - * Signature: (JJJ[F)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_setCgUniformMatrix4f( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderProgramId, - jlong location, - jfloatArray varray) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - jfloat *values; - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgParameterInfo *cgParamInfo = (CgParameterInfo *)location; - - /* Get array values */ - values = (*env)->GetFloatArrayElements(env, varray, NULL); - - if (cgParamInfo->vParam != NULL) { - cgWrapperInfo->cgGLSetMatrixParameterfr(cgParamInfo->vParam, values); - } - - if (cgParamInfo->fParam != NULL) { - cgWrapperInfo->cgGLSetMatrixParameterfr(cgParamInfo->fParam, values); - } - - /* Release array values */ - (*env)->ReleaseFloatArrayElements(env, varray, values, 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_NativePipeline - * Method: setCgUniform1iArray - * Signature: (JJJI[I)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_setCgUniform1iArray( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderProgramId, - jlong location, - jint length, - jintArray varray) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - int i; - jint *ivalues; - float *fvalues; - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgParameterInfo *cgParamInfo = (CgParameterInfo *)location; - - /* Get array values */ - ivalues = (*env)->GetIntArrayElements(env, varray, NULL); - fvalues = malloc(length * sizeof(float)); - for (i = 0; i < length; i++) { - fvalues[i] = (float)ivalues[i]; - } - - if (cgParamInfo->vParam != NULL) { - cgWrapperInfo->cgGLSetParameterArray1f(cgParamInfo->vParam, - 0, length, fvalues); - } - - if (cgParamInfo->fParam != NULL) { - cgWrapperInfo->cgGLSetParameterArray1f(cgParamInfo->fParam, - 0, length, fvalues); - } - - /* Release array values */ - (*env)->ReleaseIntArrayElements(env, varray, ivalues, JNI_ABORT); - free(fvalues); - -#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_NativePipeline - * Method: setCgUniform1fArray - * Signature: (JJJI[F)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_setCgUniform1fArray( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderProgramId, - jlong location, - jint length, - jfloatArray varray) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - jfloat *values; - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgParameterInfo *cgParamInfo = (CgParameterInfo *)location; - - /* Get array values */ - values = (*env)->GetFloatArrayElements(env, varray, NULL); - - if (cgParamInfo->vParam != NULL) { - cgWrapperInfo->cgGLSetParameterArray1f(cgParamInfo->vParam, - 0, length, values); - } - - if (cgParamInfo->fParam != NULL) { - cgWrapperInfo->cgGLSetParameterArray1f(cgParamInfo->fParam, - 0, length, values); - } - - /* Release array values */ - (*env)->ReleaseFloatArrayElements(env, varray, values, 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_NativePipeline - * Method: setCgUniform2iArray - * Signature: (JJJI[I)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_setCgUniform2iArray( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderProgramId, - jlong location, - jint length, - jintArray varray) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - int i; - jint *ivalues; - float *fvalues; - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgParameterInfo *cgParamInfo = (CgParameterInfo *)location; - - /* Get array values */ - ivalues = (*env)->GetIntArrayElements(env, varray, NULL); - fvalues = malloc(length * sizeof(float)); - for (i = 0; i < 2 * length; i++) { - fvalues[i] = (float)ivalues[i]; - } - - if (cgParamInfo->vParam != NULL) { - cgWrapperInfo->cgGLSetParameterArray2f(cgParamInfo->vParam, - 0, length, fvalues); - } - - if (cgParamInfo->fParam != NULL) { - cgWrapperInfo->cgGLSetParameterArray2f(cgParamInfo->fParam, - 0, length, fvalues); - } - - /* Release array values */ - (*env)->ReleaseIntArrayElements(env, varray, ivalues, JNI_ABORT); - free(fvalues); - -#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_NativePipeline - * Method: setCgUniform2fArray - * Signature: (JJJI[F)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_setCgUniform2fArray( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderProgramId, - jlong location, - jint length, - jfloatArray varray) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - jfloat *values; - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgParameterInfo *cgParamInfo = (CgParameterInfo *)location; - - /* Get array values */ - values = (*env)->GetFloatArrayElements(env, varray, NULL); - - if (cgParamInfo->vParam != NULL) { - cgWrapperInfo->cgGLSetParameterArray2f(cgParamInfo->vParam, - 0, length, values); - } - - if (cgParamInfo->fParam != NULL) { - cgWrapperInfo->cgGLSetParameterArray2f(cgParamInfo->fParam, - 0, length, values); - } - - /* Release array values */ - (*env)->ReleaseFloatArrayElements(env, varray, values, 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_NativePipeline - * Method: setCgUniform3iArray - * Signature: (JJJI[I)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_setCgUniform3iArray( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderProgramId, - jlong location, - jint length, - jintArray varray) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - int i; - jint *ivalues; - float *fvalues; - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgParameterInfo *cgParamInfo = (CgParameterInfo *)location; - - /* Get array values */ - ivalues = (*env)->GetIntArrayElements(env, varray, NULL); - fvalues = malloc(length * sizeof(float)); - for (i = 0; i < 3 * length; i++) { - fvalues[i] = (float)ivalues[i]; - } - - if (cgParamInfo->vParam != NULL) { - cgWrapperInfo->cgGLSetParameterArray3f(cgParamInfo->vParam, - 0, length, fvalues); - } - - if (cgParamInfo->fParam != NULL) { - cgWrapperInfo->cgGLSetParameterArray3f(cgParamInfo->fParam, - 0, length, fvalues); - } - - /* Release array values */ - (*env)->ReleaseIntArrayElements(env, varray, ivalues, JNI_ABORT); - free(fvalues); - -#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_NativePipeline - * Method: setCgUniform3fArray - * Signature: (JJJI[F)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_setCgUniform3fArray( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderProgramId, - jlong location, - jint length, - jfloatArray varray) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - jfloat *values; - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgParameterInfo *cgParamInfo = (CgParameterInfo *)location; - - /* Get array values */ - values = (*env)->GetFloatArrayElements(env, varray, NULL); - - if (cgParamInfo->vParam != NULL) { - cgWrapperInfo->cgGLSetParameterArray3f(cgParamInfo->vParam, - 0, length, values); - } - - if (cgParamInfo->fParam != NULL) { - cgWrapperInfo->cgGLSetParameterArray3f(cgParamInfo->fParam, - 0, length, values); - } - - /* Release array values */ - (*env)->ReleaseFloatArrayElements(env, varray, values, 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_NativePipeline - * Method: setCgUniform4iArray - * Signature: (JJJI[I)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_setCgUniform4iArray( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderProgramId, - jlong location, - jint length, - jintArray varray) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - int i; - jint *ivalues; - float *fvalues; - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgParameterInfo *cgParamInfo = (CgParameterInfo *)location; - - /* Get array values */ - ivalues = (*env)->GetIntArrayElements(env, varray, NULL); - fvalues = malloc(length * sizeof(float)); - for (i = 0; i < 4 * length; i++) { - fvalues[i] = (float)ivalues[i]; - } - - if (cgParamInfo->vParam != NULL) { - cgWrapperInfo->cgGLSetParameterArray4f(cgParamInfo->vParam, - 0, length, fvalues); - } - - if (cgParamInfo->fParam != NULL) { - cgWrapperInfo->cgGLSetParameterArray4f(cgParamInfo->fParam, - 0, length, fvalues); - } - - /* Release array values */ - (*env)->ReleaseIntArrayElements(env, varray, ivalues, JNI_ABORT); - free(fvalues); - -#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_NativePipeline - * Method: setCgUniform4fArray - * Signature: (JJJI[F)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_setCgUniform4fArray( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderProgramId, - jlong location, - jint length, - jfloatArray varray) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - jfloat *values; - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgParameterInfo *cgParamInfo = (CgParameterInfo *)location; - - /* Get array values */ - values = (*env)->GetFloatArrayElements(env, varray, NULL); - - if (cgParamInfo->vParam != NULL) { - cgWrapperInfo->cgGLSetParameterArray4f(cgParamInfo->vParam, - 0, length, values); - } - - if (cgParamInfo->fParam != NULL) { - cgWrapperInfo->cgGLSetParameterArray4f(cgParamInfo->fParam, - 0, length, values); - } - - /* Release array values */ - (*env)->ReleaseFloatArrayElements(env, varray, values, 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_NativePipeline - * Method: setCgUniformMatrix3fArray - * Signature: (JJJI[F)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_setCgUniformMatrix3fArray( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderProgramId, - jlong location, - jint length, - jfloatArray varray) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - jfloat *values; - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgParameterInfo *cgParamInfo = (CgParameterInfo *)location; - - /* Get array values */ - values = (*env)->GetFloatArrayElements(env, varray, NULL); - - if (cgParamInfo->vParam != NULL) { - cgWrapperInfo->cgGLSetMatrixParameterArrayfr(cgParamInfo->vParam, - 0, length, values); - } - - if (cgParamInfo->fParam != NULL) { - cgWrapperInfo->cgGLSetMatrixParameterArrayfr(cgParamInfo->fParam, - 0, length, values); - } - - /* Release array values */ - (*env)->ReleaseFloatArrayElements(env, varray, values, 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_NativePipeline - * Method: setCgUniformMatrix4fArray - * Signature: (JJJI[F)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_setCgUniformMatrix4fArray( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jlong shaderProgramId, - jlong location, - jint length, - jfloatArray varray) -{ - jobject shaderError = NULL; - -#ifdef COMPILE_CG_SHADERS - - jfloat *values; - - GraphicsContextPropertiesInfo* ctxProperties = (GraphicsContextPropertiesInfo* )ctxInfo; - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgParameterInfo *cgParamInfo = (CgParameterInfo *)location; - - /* Get array values */ - values = (*env)->GetFloatArrayElements(env, varray, NULL); - - if (cgParamInfo->vParam != NULL) { - cgWrapperInfo->cgGLSetMatrixParameterArrayfr(cgParamInfo->vParam, - 0, length, values); - } - - if (cgParamInfo->fParam != NULL) { - cgWrapperInfo->cgGLSetMatrixParameterArrayfr(cgParamInfo->fParam, - 0, length, values); - } - - /* Release array values */ - (*env)->ReleaseFloatArrayElements(env, varray, values, 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; -} - - -/* - * Cg vertex attribute functions - */ - -static void -cgVertexAttrPointer( - GraphicsContextPropertiesInfo *ctxProperties, - int index, int size, int type, int stride, - const void *pointer) -{ -#ifdef COMPILE_CG_SHADERS - - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgShaderProgramInfo *shaderProgramInfo = - (CgShaderProgramInfo *)ctxProperties->shaderProgramId; - -#ifdef VERBOSE - fprintf(stderr, "cgVertexAttrPointer()\n"); -#endif /* VERBOSE */ - - if (shaderProgramInfo != NULL && index < shaderProgramInfo->numVtxAttrs) { - cgWrapperInfo->cgGLSetParameterPointer(shaderProgramInfo->vtxAttrs[index], - size, - type, - stride, - pointer); - } -#ifdef VERBOSE - else { - if (shaderProgramInfo == NULL) { - fprintf(stderr, - " shaderProgramInfo is NULL\n"); - } else { - fprintf(stderr, - " index (%d) out of range; numVtxAttrs = %d\n", - index, shaderProgramInfo->numVtxAttrs); - } - } -#endif /* VERBOSE */ - -#endif /* COMPILE_CG_SHADERS */ -} - -static void -cgEnableVertexAttrArray( - GraphicsContextPropertiesInfo *ctxProperties, - int index) -{ -#ifdef COMPILE_CG_SHADERS - - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgShaderProgramInfo *shaderProgramInfo = - (CgShaderProgramInfo *)ctxProperties->shaderProgramId; - -#ifdef VERBOSE - fprintf(stderr, "cgEnableVertexAttrArray()\n"); -#endif /* VERBOSE */ - - if (shaderProgramInfo != NULL && index < shaderProgramInfo->numVtxAttrs) { - cgWrapperInfo->cgGLEnableClientState(shaderProgramInfo->vtxAttrs[index]); - } -#ifdef VERBOSE - else { - if (shaderProgramInfo == NULL) { - fprintf(stderr, - " shaderProgramInfo is NULL\n"); - } else { - fprintf(stderr, - " index (%d) out of range; numVtxAttrs = %d\n", - index, shaderProgramInfo->numVtxAttrs); - } - } -#endif /* VERBOSE */ - -#endif /* COMPILE_CG_SHADERS */ -} - -static void -cgDisableVertexAttrArray( - GraphicsContextPropertiesInfo *ctxProperties, - int index) -{ -#ifdef COMPILE_CG_SHADERS - - CgCtxInfo *cgCtxInfo = ctxProperties->cgCtxInfo; - CgWrapperInfo *cgWrapperInfo = cgCtxInfo->cgWrapperInfo; - CgShaderProgramInfo *shaderProgramInfo = - (CgShaderProgramInfo *)ctxProperties->shaderProgramId; - -#ifdef VERBOSE - fprintf(stderr, "cgDisableVertexAttrArray()\n"); -#endif /* VERBOSE */ - - if (shaderProgramInfo != NULL && index < shaderProgramInfo->numVtxAttrs) { - cgWrapperInfo->cgGLDisableClientState(shaderProgramInfo->vtxAttrs[index]); - } -#ifdef VERBOSE - else { - if (shaderProgramInfo == NULL) { - fprintf(stderr, - " shaderProgramInfo is NULL\n"); - } else { - fprintf(stderr, - " index (%d) out of range; numVtxAttrs = %d\n", - index, shaderProgramInfo->numVtxAttrs); - } - } -#endif /* VERBOSE */ - -#endif /* COMPILE_CG_SHADERS */ -} - -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"); -} diff --git a/src/native/ogl/CgWrapper.c b/src/native/ogl/CgWrapper.c deleted file mode 100644 index 2bdb705..0000000 --- a/src/native/ogl/CgWrapper.c +++ /dev/null @@ -1,86 +0,0 @@ -/* - * $RCSfile$ - * - * Copyright 2005-2008 Sun Microsystems, Inc. All Rights Reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * $Revision$ - * $Date$ - * $State$ - */ - -/* - * 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". - */ - -/* j3dsys.h needs to be included before any other include files to suppres VC warning */ -#include "j3dsys.h" - -#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->cgGLSetParameter1f = &cgGLSetParameter1f; - cgWrapperInfo->cgGLSetParameter2f = &cgGLSetParameter2f; - cgWrapperInfo->cgGLSetParameter3f = &cgGLSetParameter3f; - cgWrapperInfo->cgGLSetParameter4f = &cgGLSetParameter4f; - cgWrapperInfo->cgGLSetParameterArray1f = &cgGLSetParameterArray1f; - cgWrapperInfo->cgGLSetParameterArray2f = &cgGLSetParameterArray2f; - cgWrapperInfo->cgGLSetParameterArray3f = &cgGLSetParameterArray3f; - cgWrapperInfo->cgGLSetParameterArray4f = &cgGLSetParameterArray4f; - cgWrapperInfo->cgGLSetMatrixParameterfr = &cgGLSetMatrixParameterfr; - cgWrapperInfo->cgGLSetMatrixParameterArrayfr = &cgGLSetMatrixParameterArrayfr; - cgWrapperInfo->cgGLSetParameterPointer = &cgGLSetParameterPointer; - cgWrapperInfo->cgGLEnableClientState = &cgGLEnableClientState; - cgWrapperInfo->cgGLDisableClientState = &cgGLDisableClientState; - - return; -} diff --git a/src/native/ogl/CgWrapper.h b/src/native/ogl/CgWrapper.h deleted file mode 100644 index 1d1a514..0000000 --- a/src/native/ogl/CgWrapper.h +++ /dev/null @@ -1,211 +0,0 @@ -/* - * $RCSfile$ - * - * Copyright 2005-2008 Sun Microsystems, Inc. All Rights Reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * $Revision$ - * $Date$ - * $State$ - */ - -#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 (*PFNCGGLSETPARAMETER1F)(CGparameter, float); -typedef void (*PFNCGGLSETPARAMETER2F)(CGparameter, float, float); -typedef void (*PFNCGGLSETPARAMETER3F)(CGparameter, float, float, float); -typedef void (*PFNCGGLSETPARAMETER4F)(CGparameter, float, float, float, float); -typedef void (*PFNCGGLSETPARAMETERARRAY1F)(CGparameter, long, long, const float *); -typedef void (*PFNCGGLSETPARAMETERARRAY2F)(CGparameter, long, long, const float *); -typedef void (*PFNCGGLSETPARAMETERARRAY3F)(CGparameter, long, long, const float *); -typedef void (*PFNCGGLSETPARAMETERARRAY4F)(CGparameter, long, long, const float *); -typedef void (*PFNCGGLSETMATRIXPARAMETERFR)(CGparameter, const float *); -typedef void (*PFNCGGLSETMATRIXPARAMETERARRAYFR)(CGparameter, long, long, const float *); -typedef void (*PFNCGGLSETPARAMETERPOINTER)(CGparameter, GLint, GLenum, - GLsizei, const GLvoid *); -typedef void (*PFNCGGLENABLECLIENTSTATE)(CGparameter); -typedef void (*PFNCGGLDISABLECLIENTSTATE)(CGparameter); - -#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; - PFNCGGLSETPARAMETER1F cgGLSetParameter1f; - PFNCGGLSETPARAMETER2F cgGLSetParameter2f; - PFNCGGLSETPARAMETER3F cgGLSetParameter3f; - PFNCGGLSETPARAMETER4F cgGLSetParameter4f; - PFNCGGLSETPARAMETERARRAY1F cgGLSetParameterArray1f; - PFNCGGLSETPARAMETERARRAY2F cgGLSetParameterArray2f; - PFNCGGLSETPARAMETERARRAY3F cgGLSetParameterArray3f; - PFNCGGLSETPARAMETERARRAY4F cgGLSetParameterArray4f; - PFNCGGLSETMATRIXPARAMETERFR cgGLSetMatrixParameterfr; - PFNCGGLSETMATRIXPARAMETERARRAYFR cgGLSetMatrixParameterArrayfr; - PFNCGGLSETPARAMETERPOINTER cgGLSetParameterPointer; - PFNCGGLENABLECLIENTSTATE cgGLEnableClientState; - PFNCGGLDISABLECLIENTSTATE cgGLDisableClientState; - -#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/DrawingSurfaceObjectAWT.c b/src/native/ogl/DrawingSurfaceObjectAWT.c deleted file mode 100644 index 899a7dc..0000000 --- a/src/native/ogl/DrawingSurfaceObjectAWT.c +++ /dev/null @@ -1,290 +0,0 @@ -/* - * $RCSfile$ - * - * Copyright 1999-2008 Sun Microsystems, Inc. All Rights Reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * $Revision$ - * $Date$ - * $State$ - */ - -/* - * 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. - */ - -#include <jni.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <math.h> -#include <jawt_md.h> - -#include "javax_media_j3d_NativePipeline.h" -#include "javax_media_j3d_DrawingSurfaceObjectAWT.h" - -#ifdef DEBUG -/* Uncomment the following for VERBOSE debug messages */ -/* #define VERBOSE */ -#endif /* DEBUG */ - - -#if defined(SOLARIS) && defined(__sparc) -#pragma weak XDgaGetXineramaInfo - -/* - * The following include file contains the definitions of unsupported, - * undocumented data structures and functions used to implement Xinerama. - * They are also used by the Solaris implementations of OpenGL and AWT. This - * is an interim solution until they are made part of the X Window System - * standard or replaced with a fully supported API. - */ -#include "panoramiXext.h" -#endif /* SOLARIS && __sparc */ - - -JNIEXPORT jlong JNICALL -Java_javax_media_j3d_NativePipeline_getAWT( - JNIEnv *env, jobject obj) -{ - JAWT *awt; - - awt = (JAWT*) malloc(sizeof(JAWT)); - if (awt == NULL) { - fprintf(stderr, "malloc failed\n"); - return 0; - } - - awt->version = JAWT_VERSION_1_4; - - if (JAWT_GetAWT(env, awt) == JNI_FALSE) { - fprintf(stderr, "AWT not found\n"); - return 0; - } - - return (jlong)awt; -} - -JNIEXPORT -jlong JNICALL -Java_javax_media_j3d_DrawingSurfaceObjectAWT_getDrawingSurfaceAWT( - JNIEnv *env, - jobject obj, - jobject canvas, - jlong awtObj) -{ - JAWT *awt = (JAWT*) awtObj; - JAWT_DrawingSurface *ds; - - ds = awt->GetDrawingSurface(env, canvas); - if (ds == NULL) { - fprintf(stderr, "NULL drawing surface\n"); - return 0; - } - return (jlong)ds; -} - - -JNIEXPORT -jint JNICALL -Java_javax_media_j3d_DrawingSurfaceObjectAWT_getDrawingSurfaceWindowIdAWT( - JNIEnv *env, - jobject obj, - jobject canvas, - jlong dsObj, - jlong dsiObj, - jlong display, - jint screen, - jboolean xineramaDisabled) -{ - JAWT_DrawingSurface *ds = (JAWT_DrawingSurface*) dsObj; - JAWT_DrawingSurfaceInfo *dsi = (JAWT_DrawingSurfaceInfo *) dsiObj; - jint window; - -#ifdef WIN32 - JAWT_Win32DrawingSurfaceInfo *wds = - (JAWT_Win32DrawingSurfaceInfo*) dsi->platformInfo; - window = (jint)wds->hdc; -#endif /* WIN32 */ - -#ifdef SOLARIS - JAWT_X11DrawingSurfaceInfo *xds = - (JAWT_X11DrawingSurfaceInfo*) dsi->platformInfo; - window = (jint)xds->drawable; - -#ifdef __sparc - if (xineramaDisabled) { - XineramaInfo xineramaInfo; - -#ifdef VERBOSE - fprintf(stderr, "getDrawingSurfaceWindowIdAWT: Xinerama disabled\n"); -#endif /* VERBOSE */ - - /* - * The existence of the weak symbol XDgaGetXineramaInfo is checked in - * the native MasterControl.initializeJ3D(); execution will not get - * here if it is unbound. - */ - if (XDgaGetXineramaInfo((Display *)display, - xds->drawable, &xineramaInfo)) { - - /* return Xinerama subwid instead of primary Xinerama wid */ - window = (jint)xineramaInfo.subs[screen].wid; - -#ifdef VERBOSE - fprintf(stderr, - " subwid for display %d screen %d window %d: %d\n", - (Display *)display, screen, xds->drawable, window); -#endif /* VERBOSE */ - } - else { - window = (jint)xds->drawable; - fprintf(stderr, "Get Xinerama subwid, screen %d failed\n", screen); - } - } -#endif /* __sparc */ -#endif /* SOLARIS */ - -#ifdef LINUX - JAWT_X11DrawingSurfaceInfo *xds = - (JAWT_X11DrawingSurfaceInfo*) dsi->platformInfo; - window = (jint)xds->drawable; -#endif /* LINUX */ - - /* - * Don't free DrawingSurfaceInfo here, otherwise - * HDC will free in windows JDK1.4 and window - * is invalid. - */ - ds->env = env; - ds->Unlock(ds); - - return window; -} - - - -JNIEXPORT -jlong JNICALL -Java_javax_media_j3d_DrawingSurfaceObjectAWT_getDrawingSurfaceInfo( - JNIEnv *env, - jobject obj, - jlong dsObj) -{ - JAWT_DrawingSurface *ds = (JAWT_DrawingSurface*) dsObj; - JAWT_DrawingSurfaceInfo *dsi; - jint lock; - - ds->env = env; - lock = ds->Lock(ds); - if ((lock & JAWT_LOCK_ERROR) != 0) { - fprintf(stderr, "Error locking surface\n"); - return 0; - } - - dsi = ds->GetDrawingSurfaceInfo(ds); - - if (dsi == NULL) { - fprintf(stderr, "Error GetDrawingSurfaceInfo\n"); - ds->Unlock(ds); - return 0; - } - return (jlong)dsi; -} - -JNIEXPORT -jboolean JNICALL Java_javax_media_j3d_DrawingSurfaceObjectAWT_lockAWT( - JNIEnv *env, - jobject obj, - jlong drawingSurface) -{ - JAWT_DrawingSurface *ds = (JAWT_DrawingSurface*)drawingSurface; - jint lock; - - ds->env = env; - lock = ds->Lock(ds); - - if ((lock & JAWT_LOCK_ERROR) != 0) { - return JNI_FALSE; - } else if ((lock & JAWT_LOCK_SURFACE_CHANGED) != 0) { - ds->Unlock(ds); - return JNI_FALSE; - } else { - return JNI_TRUE; - } -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_DrawingSurfaceObjectAWT_unlockAWT( - JNIEnv *env, - jobject obj, - jlong drawingSurface) -{ - JAWT_DrawingSurface *ds = (JAWT_DrawingSurface*)drawingSurface; - ds->env = env; - ds->Unlock(ds); -} - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_DrawingSurfaceObjectAWT_lockGlobal( - JNIEnv *env, - jclass obj, - jlong awt) -{ - ((JAWT *) awt)->Lock(env); -} - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_DrawingSurfaceObjectAWT_unlockGlobal( - JNIEnv *env, - jclass obj, - jlong awt) -{ - ((JAWT *) awt)->Unlock(env); -} - - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_DrawingSurfaceObjectAWT_freeResource( - JNIEnv *env, - jclass obj, - jlong awtObj, - jlong drawingSurface, - jlong drawingSurfaceInfo) -{ - JAWT *awt = (JAWT*) awtObj; - JAWT_DrawingSurface *ds = (JAWT_DrawingSurface*)drawingSurface; - JAWT_DrawingSurfaceInfo *dsi = (JAWT_DrawingSurfaceInfo *) drawingSurfaceInfo; - - ds->env = env; - ds->FreeDrawingSurfaceInfo(dsi); - awt->FreeDrawingSurface(ds); -} - - - diff --git a/src/native/ogl/GLSLInfo.h b/src/native/ogl/GLSLInfo.h deleted file mode 100644 index 445672b..0000000 --- a/src/native/ogl/GLSLInfo.h +++ /dev/null @@ -1,82 +0,0 @@ -/* - * $RCSfile$ - * - * Copyright 2005-2008 Sun Microsystems, Inc. All Rights Reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * $Revision$ - * $Date$ - * $State$ - */ - -#ifndef _Java3D_GLSLInfo_h_ -#define _Java3D_GLSLInfo_h_ - -#include "gldefs.h" - -/* Structure used to hold GLSL context information; stored in ctxInfo */ -struct GLSLCtxInfoRec { - int vertexAttrOffset; - - 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 deleted file mode 100644 index 5869a7b..0000000 --- a/src/native/ogl/GLSLShaderProgram.c +++ /dev/null @@ -1,1677 +0,0 @@ -/* - * $RCSfile$ - * - * Copyright 2005-2008 Sun Microsystems, Inc. All Rights Reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * $Revision$ - * $Date$ - * $State$ - */ - -/* j3dsys.h needs to be included before any other include files to suppres VC warning */ -#include "j3dsys.h" - -#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 jint getJavaIntEnv(JNIEnv *env, char* envStr); -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); - - /* Initialize GLSL VertexAttr info */ - glslCtxInfo->vertexAttrOffset = getJavaIntEnv(env, "glslVertexAttrOffset"); - glGetIntegerv(GL_MAX_VERTEX_ATTRIBS_ARB, &ctxInfo->maxVertexAttrs); - /* decr count to allow for reserved vertex attrs */ - ctxInfo->maxVertexAttrs -= glslCtxInfo->vertexAttrOffset; - if (ctxInfo->maxVertexAttrs < 0) { - ctxInfo->maxVertexAttrs = 0; - } - - 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_NativePipeline - * Method: createGLSLShader - * Signature: (JI[J)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_createGLSLShader( - 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_NativePipeline - * Method: destroyGLSLShader - * Signature: (JJ)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_destroyGLSLShader( - 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_NativePipeline - * Method: compileGLSLShader - * Signature: (JJLjava/lang/String;)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_compileGLSLShader( - 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_NativePipeline - * Method: createGLSLShaderProgram - * Signature: (J[J)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_createGLSLShaderProgram( - 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_NativePipeline - * Method: destroyGLSLShaderProgram - * Signature: (JJ)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_destroyGLSLShaderProgram( - 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_NativePipeline - * Method: linkGLSLShaderProgram - * Signature: (JJ[J)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_linkGLSLShaderProgram( - 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_NativePipeline - * Method: bindGLSLVertexAttrName - * Signature: (JJLjava/lang/String;I)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL -Java_javax_media_j3d_NativePipeline_bindGLSLVertexAttrName( - 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.bindGLSLVertexAttrName: %s\n", - attrNameString); - */ - - glslCtxInfo->pfnglBindAttribLocationARB((GLhandleARB)shaderProgramId, - attrIndex + glslCtxInfo->vertexAttrOffset, - 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_NativePipeline - * Method: lookupGLSLShaderAttrNames - * Signature: (JJI[Ljava/lang/String;[J[I[I[Z)V - */ -JNIEXPORT void JNICALL -Java_javax_media_j3d_NativePipeline_lookupGLSLShaderAttrNames( - 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; - -#ifdef VERBOSE - fprintf(stderr, "GLSLShaderProgramRetained.lookupGLSLShaderAttrNames\n"); -#endif - - 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); - -#ifdef VERBOSE - fprintf(stderr, - "numActiveUniforms = %d, maxStrLen = %d\n", - numActiveUniforms, maxStrLen); -#endif - - for (i = 0; i < numActiveUniforms; i++) { - int len; - - glslCtxInfo->pfnglGetActiveUniformARB((GLhandleARB) shaderProgramId, - i, - maxStrLen, - NULL, - &size, - &type, - name); - - /* - * Issue 247 - we need to workaround an ATI bug where they erroneously - * report individual elements of arrays rather than the array itself - */ - len = (int) strlen(name); - if (len >= 3 && name[len-1] == ']') { - if (strcmp(&name[len-3], "[0]") == 0) { - /* fprintf(stderr, "**** changing \"%s\" ", name); */ - name[len-3] = '\0'; - /* fprintf(stderr, "to \"%s\"\n", name); */ - } else { - /* Ignore this name */ - /* fprintf(stderr, "Uniform[%d] : %s ignored\n", i, name); */ - continue; - } - } - -#ifdef VERBOSE - fprintf(stderr, - "Uniform[%d] : name = %s ; type = %d ; size = %d\n", - i, name, type, size); -#endif - - /* 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]); - -#ifdef VERBOSE - fprintf(stderr, - "str = %s, loc = %d\n", - attrNamesString[i], loc); -#endif - - 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_NativePipeline - * Method: useGLSLShaderProgram - * Signature: (JI)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject -JNICALL Java_javax_media_j3d_NativePipeline_useGLSLShaderProgram( - 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_NativePipeline - * Method: setGLSLUniform1i - * Signature: (JJJI)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject -JNICALL Java_javax_media_j3d_NativePipeline_setGLSLUniform1i( - 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_NativePipeline - * Method: setGLSLUniform1f - * Signature: (JJJF)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject -JNICALL Java_javax_media_j3d_NativePipeline_setGLSLUniform1f( - 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_NativePipeline - * Method: setGLSLUniform2i - * Signature: (JJJ[I)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject -JNICALL Java_javax_media_j3d_NativePipeline_setGLSLUniform2i( - 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_NativePipeline - * Method: setGLSLUniform2f - * Signature: (JJJ[F)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject -JNICALL Java_javax_media_j3d_NativePipeline_setGLSLUniform2f( - 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_NativePipeline - * Method: setGLSLUniform3i - * Signature: (JJJ[I)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject -JNICALL Java_javax_media_j3d_NativePipeline_setGLSLUniform3i( - 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_NativePipeline - * Method: setGLSLUniform3f - * Signature: (JJJ[F)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject -JNICALL Java_javax_media_j3d_NativePipeline_setGLSLUniform3f( - 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_NativePipeline - * Method: setGLSLUniform4i - * Signature: (JJJ[I)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject -JNICALL Java_javax_media_j3d_NativePipeline_setGLSLUniform4i( - 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_NativePipeline - * Method: setGLSLUniform4f - * Signature: (JJJ[F)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject -JNICALL Java_javax_media_j3d_NativePipeline_setGLSLUniform4f( - 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_NativePipeline - * Method: setGLSLUniformMatrix3f - * Signature: (JJJ[F)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL Java_javax_media_j3d_NativePipeline_setGLSLUniformMatrix3f( - 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_NativePipeline - * Method: setGLSLUniformMatrix4f - * Signature: (JJJ[F)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject JNICALL Java_javax_media_j3d_NativePipeline_setGLSLUniformMatrix4f( - 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_NativePipeline - * Method: setGLSLUniform1iArray - * Signature: (JJJI[I)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject -JNICALL Java_javax_media_j3d_NativePipeline_setGLSLUniform1iArray( - 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_NativePipeline - * Method: setGLSLUniform1fArray - * Signature: (JJJI[F)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject -JNICALL Java_javax_media_j3d_NativePipeline_setGLSLUniform1fArray( - 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_NativePipeline - * Method: setGLSLUniform2iArray - * Signature: (JJJI[I)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject -JNICALL Java_javax_media_j3d_NativePipeline_setGLSLUniform2iArray( - 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_NativePipeline - * Method: setGLSLUniform2fArray - * Signature: (JJJI[F)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject -JNICALL Java_javax_media_j3d_NativePipeline_setGLSLUniform2fArray( - 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_NativePipeline - * Method: setGLSLUniform3iArray - * Signature: (JJJI[I)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject -JNICALL Java_javax_media_j3d_NativePipeline_setGLSLUniform3iArray( - 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_NativePipeline - * Method: setGLSLUniform3fArray - * Signature: (JJJI[F)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject -JNICALL Java_javax_media_j3d_NativePipeline_setGLSLUniform3fArray( - 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_NativePipeline - * Method: setGLSLUniform4iArray - * Signature: (JJJI[I)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject -JNICALL Java_javax_media_j3d_NativePipeline_setGLSLUniform4iArray( - 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_NativePipeline - * Method: setGLSLUniform4fArray - * Signature: (JJJI[F)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject -JNICALL Java_javax_media_j3d_NativePipeline_setGLSLUniform4fArray( - 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_NativePipeline - * Method: setGLSLUniformMatrix3fArray - * Signature: (JJJI[F)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject -JNICALL Java_javax_media_j3d_NativePipeline_setGLSLUniformMatrix3fArray -( - 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_NativePipeline - * Method: setGLSLUniformMatrix4fArray - * Signature: (JJJI[F)Ljavax/media/j3d/ShaderError; - */ -JNIEXPORT jobject -JNICALL Java_javax_media_j3d_NativePipeline_setGLSLUniformMatrix4fArray -( - 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+glslCtxInfo->vertexAttrOffset, - size, type, GL_FALSE, stride, pointer); -} - -static void -glslEnableVertexAttrArray( - GraphicsContextPropertiesInfo *ctxProperties, - int index) -{ - GLSLCtxInfo *glslCtxInfo = ctxProperties->glslCtxInfo; - - glslCtxInfo->pfnglEnableVertexAttribArrayARB(index+glslCtxInfo->vertexAttrOffset); -} - -static void -glslDisableVertexAttrArray( - GraphicsContextPropertiesInfo *ctxProperties, - int index) -{ - GLSLCtxInfo *glslCtxInfo = ctxProperties->glslCtxInfo; - - glslCtxInfo->pfnglDisableVertexAttribArrayARB(index+glslCtxInfo->vertexAttrOffset); -} - -static void -glslVertexAttr1fv( - GraphicsContextPropertiesInfo *ctxProperties, - int index, const float *v) -{ - GLSLCtxInfo *glslCtxInfo = ctxProperties->glslCtxInfo; - -#ifdef VERBOSE - fprintf(stderr, "glslVertexAttr1fv()\n"); -#endif - glslCtxInfo->pfnglVertexAttrib1fvARB(index+glslCtxInfo->vertexAttrOffset, 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+glslCtxInfo->vertexAttrOffset, 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+glslCtxInfo->vertexAttrOffset, 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+glslCtxInfo->vertexAttrOffset, v); -} - diff --git a/src/native/ogl/GeometryArrayRetained.c b/src/native/ogl/GeometryArrayRetained.c deleted file mode 100644 index b8e89be..0000000 --- a/src/native/ogl/GeometryArrayRetained.c +++ /dev/null @@ -1,4162 +0,0 @@ -/* - * $RCSfile$ - * - * Copyright 1998-2008 Sun Microsystems, Inc. All Rights Reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * $Revision$ - * $Date$ - * $State$ - */ - -#include <stdio.h> -#include <jni.h> - -#include "gldefs.h" - -#ifdef WIN32 -#include <wingdi.h> - -#endif /* WIN32 */ - -#ifdef DEBUG -/* Uncomment the following for VERBOSE debug messages */ -/* #define VERBOSE */ -#endif /* DEBUG */ - - -static float EPS = 0.0001f; - -#define INTERLEAVEDARRAYS_TEST() \ - useInterleavedArrays = 1; \ - switch (vformat) { \ - case GA_COORDINATES : \ - iaFormat = GL_V3F; break; \ - case (GA_COORDINATES | GA_NORMALS) : \ - iaFormat = GL_N3F_V3F; break; \ - case (GA_COORDINATES | GA_TEXTURE_COORDINATE_2) :\ - iaFormat = GL_T2F_V3F; break; \ - case (GA_COORDINATES | GA_NORMALS | GA_COLOR) : \ - case (GA_COORDINATES | GA_NORMALS | GA_COLOR | GA_WITH_ALPHA) :\ - iaFormat = GL_C4F_N3F_V3F; break; \ - case (GA_COORDINATES | GA_NORMALS | GA_TEXTURE_COORDINATE_2) :\ - iaFormat = GL_T2F_N3F_V3F; break; \ - case (GA_COORDINATES | GA_NORMALS | GA_COLOR | GA_TEXTURE_COORDINATE_2):\ - case (GA_COORDINATES | GA_NORMALS | GA_COLOR | GA_WITH_ALPHA | GA_TEXTURE_COORDINATE_2):\ - iaFormat = GL_T2F_C4F_N3F_V3F; break;\ - default: \ - useInterleavedArrays = 0; break; \ - } - - -static void enableTexCoordPointer(GraphicsContextPropertiesInfo *, int, int, - int, int, void *); -static void disableTexCoordPointer(GraphicsContextPropertiesInfo *, int); -static void clientActiveTextureUnit(GraphicsContextPropertiesInfo *, int); - - -static void -executeTexture(int texCoordSetMapLen, - int texSize, int bstride, int texCoordoff, - jint texCoordSetMapOffset[], - jint numActiveTexUnit, - float verts[], jlong ctxInfo) -{ - int i; - - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - jlong ctx = ctxProperties->context; - int tus; /* texture unit state index */ - - for (i = 0; i < numActiveTexUnit; i++) { - - tus = i; - - /* - * it's possible that texture unit state index (tus) - * is greater than the texCoordSetMapOffsetLen, in this - * case, just disable TexCoordPointer. - */ - if ((tus < texCoordSetMapLen) && - (texCoordSetMapOffset[tus] != -1)) { - enableTexCoordPointer(ctxProperties, i, - texSize, GL_FLOAT, bstride, - &(verts[texCoordoff + texCoordSetMapOffset[tus]])); - - } else { - disableTexCoordPointer(ctxProperties, i); - } - } -} - -static void -resetTexture(jlong ctxInfo) -{ - int i; - - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - - /* 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); -} - - -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 - * vertexCount is guarenteed to be >= 0. - */ -static void -lockArray(GraphicsContextPropertiesInfo *ctxProperties, - int vertexCount) { - - if (ctxProperties->compiled_vertex_array_ext) { - ctxProperties->glLockArraysEXT(0, vertexCount); - } -} - -static void -unlockArray(GraphicsContextPropertiesInfo *ctxProperties) -{ - if (ctxProperties->compiled_vertex_array_ext) { - ctxProperties->glUnlockArraysEXT(); - } -} - - -static void -executeGeometryArray( - JNIEnv *env, - jobject obj, jlong ctxInfo, jobject geo, jint geo_type, - jboolean isNonUniformScale, jboolean useAlpha, - jboolean ignoreVertexColors, - jint startVIndex, - jint vcount, jint vformat, - jint texCoordSetCount, - jintArray texCoordSetMap, jint texCoordSetMapLen, - jintArray texUnitOffset, - jint numActiveTexUnit, - jint vertexAttrCount, jintArray vertexAttrSizes, - jfloatArray varray, jobject varrayBuffer, jfloatArray carray, - jint cDirty) -{ - jclass geo_class; - JNIEnv table; - - jfloat *verts, *startVertex, *clrs, *startClrs; - jint i; - jint bstride, cbstride; - jsize strip_len; - GLsizei *strips; - GLenum iaFormat; - int useInterleavedArrays; - int primType; - jint stride, coordoff, normoff, coloroff, texCoordoff; - int alphaNeedsUpdate = 0; /* used so we can get alpha data from */ - /* JNI before using it so we can use */ - /* GetPrimitiveArrayCritical */ - jfieldID strip_field; - jarray sarray; - - jint texSize, texStride, *texCoordSetMapOffset = NULL; - - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - jlong ctx = ctxProperties->context; - - jarray start_array; - 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; - } - if ((vformat & GA_NORMALS) != 0) { - stride += 3; - coordoff += 3; - } - if ((vformat & GA_COLOR) != 0) { - if ((vformat & GA_WITH_ALPHA) != 0 ) { - stride += 4; - normoff += 4; - coordoff += 4; - } - else { /* Handle the case of executeInterleaved 3f */ - stride += 3; - normoff += 3; - coordoff += 3; - } - } - if ((vformat & GA_TEXTURE_COORDINATE) != 0) { - if ((vformat & GA_TEXTURE_COORDINATE_2) != 0) { - texSize = 2; - texStride = 2 * texCoordSetCount; - } else if ((vformat & GA_TEXTURE_COORDINATE_3) != 0) { - texSize = 3; - texStride = 3 * texCoordSetCount; - } else if ((vformat & GA_TEXTURE_COORDINATE_4) != 0) { - texSize = 4; - texStride = 4 * texCoordSetCount; - } - stride += texStride; - normoff += texStride; - coloroff += texStride; - 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); - - /* - * Call other JNI functions before entering Critical region - * i.e., GetPrimitiveArrayCritical - */ - - if (geo_type == GEO_TYPE_TRI_STRIP_SET || - geo_type == GEO_TYPE_TRI_FAN_SET || - geo_type == GEO_TYPE_LINE_STRIP_SET) { - - strip_field = (jfieldID) (*(table->GetFieldID))(env, geo_class, - "stripVertexCounts", "[I"); - sarray = (jarray)(*(table->GetObjectField))(env, geo, strip_field); - strip_len = (jsize)(*(table->GetArrayLength))(env, sarray); - - - start_field = (jfieldID) (*(table->GetFieldID))(env, geo_class, - "stripStartOffsetIndices", "[I"); - start_array = (jarray)(*(table->GetObjectField))(env, geo, - start_field); - } - - /* begin critical region */ - verts = NULL; - if(varray != NULL) { - verts = (jfloat *) (*(table->GetPrimitiveArrayCritical))(env, varray, NULL); - } - else if(varrayBuffer != NULL) { - verts = (jfloat *) (*(table->GetDirectBufferAddress))(env, varrayBuffer ); - } - 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) { - clrs = (jfloat *) (*(table->GetPrimitiveArrayCritical))(env, carray, NULL); - cstride = 4; - - } - else { - clrs = &(verts[coloroff]); - } - - - cbstride = cstride * sizeof(float); - if (texCoordSetMapLen >0) { - texCoordSetMapOffset = (jint *) (*(table->GetPrimitiveArrayCritical))(env, texUnitOffset, NULL); - } - - /* Enable normalize for non-uniform scale (which rescale can't handle) */ - if (isNonUniformScale) { - glEnable(GL_NORMALIZE); - } - - - startVertex = verts + (stride * startVIndex); - startClrs = clrs + (cstride * startVIndex); - - /*** Handle non-indexed strip GeometryArray first *******/ - if (geo_type == GEO_TYPE_TRI_STRIP_SET || - geo_type == GEO_TYPE_TRI_FAN_SET || - geo_type == GEO_TYPE_LINE_STRIP_SET) { - - - strips = (GLsizei *) (*(table->GetPrimitiveArrayCritical))(env, sarray, - NULL); - - if ((ignoreVertexColors == JNI_TRUE) || (carray != NULL) || - ((vformat & GA_TEXTURE_COORDINATE) && ((texCoordSetMapLen > 1) || - (texCoordSetCount > 1)))) { - useInterleavedArrays = 0; - } else { - INTERLEAVEDARRAYS_TEST() - } - if (useInterleavedArrays) { - glInterleavedArrays(iaFormat, bstride, startVertex); - } else { - if (vformat & GA_NORMALS) { - glNormalPointer(GL_FLOAT, bstride, &(startVertex[normoff])); - } - if (ignoreVertexColors == JNI_FALSE && vformat & GA_COLOR) { - if (vformat & GA_WITH_ALPHA || (useAlpha == GL_TRUE)) { - glColorPointer(4, GL_FLOAT, cbstride, startClrs); - } else { - /* - for (i = 0; i < vcount; i++) { - fprintf(stderr, "r = %f, g = %f, b = %f\n", verts[i*bstride +coloroff], verts[i*bstride +coloroff+1],verts[i*bstride +coloroff+2]); - } - */ - glColorPointer(3, GL_FLOAT, cbstride, startClrs); - } - } - if (vformat & GA_COORDINATES) { - /* - for (i = 0; i < vcount; i++) { - fprintf(stderr, "x = %f, y = %f, z = %f\n", verts[i*bstride +coordoff], verts[i*bstride +coordoff+1],verts[i*bstride +coordoff+2]); - } - */ - glVertexPointer(3, GL_FLOAT, bstride, &(startVertex[coordoff])); - } - - if (vformat & GA_TEXTURE_COORDINATE) { - - executeTexture(texCoordSetMapLen, - texSize, bstride, texCoordoff, - texCoordSetMapOffset, - numActiveTexUnit, - 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_TRI_STRIP_SET : - primType = GL_TRIANGLE_STRIP; - break; - case GEO_TYPE_TRI_FAN_SET : - primType = GL_TRIANGLE_FAN; - break; - case GEO_TYPE_LINE_STRIP_SET : - primType = GL_LINE_STRIP; - break; - } - /* - fprintf(stderr, "strip_len = %d\n",strip_len); - for (i=0; i < strip_len;i++) { - fprintf(stderr, "strips[i] = %d\n",strips[i]); - } - */ - - - start = (GLint *)(*(table->GetPrimitiveArrayCritical))(env, - start_array, NULL); - - if (ctxProperties->multi_draw_arrays_ext || ctxProperties->multi_draw_arrays_sun) { - /* - * Only used in the "by_copy case, so its ok to - * to temporarily modify - */ - - ctxProperties->glMultiDrawArraysEXT(primType, start, strips, strip_len); - } else { - for (i=0; i < strip_len;i++) { - glDrawArrays(primType, start[i], strips[i]); - } - } - (*(table->ReleasePrimitiveArrayCritical))(env, start_array, start, - 0); - (*(table->ReleasePrimitiveArrayCritical))(env, sarray, strips, 0); - } - /******* Handle non-indexed non-striped GeometryArray now *****/ - else if ((geo_type == GEO_TYPE_QUAD_SET) || - (geo_type == GEO_TYPE_TRI_SET) || - (geo_type == GEO_TYPE_POINT_SET) || - (geo_type == GEO_TYPE_LINE_SET)) - { - - - if ((ignoreVertexColors == JNI_TRUE) || (carray != NULL) || - ((vformat & GA_TEXTURE_COORDINATE) && ((texCoordSetMapLen > 1) || - (texCoordSetCount > 1)))) { - useInterleavedArrays = 0; - } else { - INTERLEAVEDARRAYS_TEST() - } - - if (useInterleavedArrays) { - glInterleavedArrays(iaFormat, bstride, startVertex); - } else { - if (vformat & GA_NORMALS) { - glNormalPointer(GL_FLOAT, bstride, &(startVertex[normoff])); - } - if (ignoreVertexColors == JNI_FALSE && vformat & GA_COLOR) { - if (vformat & GA_WITH_ALPHA || (useAlpha == GL_TRUE)) { - - glColorPointer(4, GL_FLOAT, cbstride, startClrs); - } else { - glColorPointer(3, GL_FLOAT, cbstride, startClrs); - } - } - if (vformat & GA_COORDINATES) { - glVertexPointer(3, GL_FLOAT, bstride, &(startVertex[coordoff])); - } - - if (vformat & GA_TEXTURE_COORDINATE) { - - executeTexture(texCoordSetMapLen, - texSize, bstride, texCoordoff, - texCoordSetMapOffset, - numActiveTexUnit, - 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; - case GEO_TYPE_TRI_SET : glDrawArrays(GL_TRIANGLES, 0, vcount);break; - case GEO_TYPE_POINT_SET : glDrawArrays(GL_POINTS, 0, vcount);break; - case GEO_TYPE_LINE_SET: glDrawArrays(GL_LINES, 0, vcount);break; - } - } - /* clean up if we turned on normalize */ - - if (isNonUniformScale) { - 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); - - if (texCoordSetMapLen > 0) - (*(table->ReleasePrimitiveArrayCritical))(env, texUnitOffset, - texCoordSetMapOffset, 0); - - if(varray != NULL) - (*(table->ReleasePrimitiveArrayCritical))(env, varray, verts, 0); - - if (vAttrSizesPtr != NULL) { - table->ReleaseIntArrayElements(env, vertexAttrSizes, vAttrSizesPtr, JNI_ABORT); - } -} - - -/* - * Class: javax_media_j3d_NativePipeline - * Method: execute - * Signature: (JLjavax/media/j3d/GeometryArrayRetained;IZZZZIIII[II[II[II[I[F[FII)V - */ -JNIEXPORT void JNICALL -Java_javax_media_j3d_NativePipeline_execute(JNIEnv *env, - jobject obj, jlong ctxInfo, jobject geo, jint geo_type, - jboolean isNonUniformScale, jboolean useAlpha, - jboolean ignoreVertexColors, - jint startVIndex, - jint vcount, jint vformat, - jint texCoordSetCount, - jintArray texCoordSetMap, jint texCoordSetMapLen, - jintArray texUnitOffset, - jint numActiveTexUnit, - jint vertexAttrCount, jintArray vertexAttrSizes, - jfloatArray varray, jfloatArray carray, - jint cDirty) -{ - -#ifdef VERBOSE - fprintf(stderr, "GeometryArrayRetained.execute() -- calling executeGeometryArray\n"); -#endif /* VERBOSE */ - - /* call executeGeometryArray */ - executeGeometryArray(env, obj, ctxInfo, geo, geo_type, isNonUniformScale, useAlpha, - ignoreVertexColors, startVIndex, vcount, vformat, - texCoordSetCount, texCoordSetMap, texCoordSetMapLen, - texUnitOffset, numActiveTexUnit, - vertexAttrCount, vertexAttrSizes, - varray, NULL, carray, cDirty); - -} - -/* interleaved data with nio buffer as data format */ -JNIEXPORT void JNICALL -Java_javax_media_j3d_NativePipeline_executeInterleavedBuffer( - JNIEnv *env, - jobject obj, jlong ctxInfo, jobject geo, jint geo_type, - jboolean isNonUniformScale, jboolean useAlpha, - jboolean ignoreVertexColors, - jint startVIndex, - jint vcount, jint vformat, - jint texCoordSetCount, - jintArray texCoordSetMap, jint texCoordSetMapLen, - jintArray texUnitOffset, - jint numActiveTexUnit, - jobject varray, jfloatArray carray, - jint cDirty) -{ - -#ifdef VERBOSE - fprintf(stderr, "GeometryArrayRetained.executeInterleavedBuffer() -- calling executeGeometryArray\n"); -#endif /* VERBOSE */ - - /* call executeGeometryArray */ - executeGeometryArray(env, obj, ctxInfo, geo, geo_type, isNonUniformScale, useAlpha, - ignoreVertexColors, startVIndex, vcount, vformat, - texCoordSetCount, texCoordSetMap, texCoordSetMapLen, - texUnitOffset, numActiveTexUnit, - 0, NULL, - NULL, varray, carray, cDirty); - -} - - -/* - * Class: javax_media_j3d_NativePipeline - * Method: buildGA - * Signature: (JLjavax/media/j3d/GeometryArrayRetained;IZZFZIIII[II[II[I[D[D[F)V - */ -JNIEXPORT - void JNICALL Java_javax_media_j3d_NativePipeline_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; - jboolean useAlpha = JNI_FALSE; - - jfloat *verts; - jint i, j; - jint bstride; - jint texStride, *texCoordSetMapOffset; - int vAttrStride = 0; - int vAttrOff; - jint *vAttrSizesPtr = NULL; - GLsizei *strips; - jfloat vertex[3]; - jfloat normal[3]; - jfloat w, winv; - - jsize strip_len; - int primType; - jint stride, coordoff, normoff, coloroff, texCoordoff; - jfieldID strip_field; - jarray sarray; - jint initialOffset = 0; - jint saveVformat = 0; - 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; - } - if ((vformat & GA_NORMALS) != 0) { - stride += 3; - coordoff += 3; - } - - if ((vformat & GA_COLOR) != 0) { - if ((vformat & GA_BY_REFERENCE) != 0) { - if (vformat & GA_WITH_ALPHA) { - stride += 4; - normoff += 4; - coordoff += 4; - } - else { - stride += 3; - normoff += 3; - coordoff += 3; - } - } - else { - stride += 4; - normoff += 4; - coordoff += 4; - } - } - - if ((vformat & GA_TEXTURE_COORDINATE) != 0) { - if ((vformat & GA_TEXTURE_COORDINATE_2) != 0) { - texStride = 2 * texCoordSetCount; - } else if ((vformat & GA_TEXTURE_COORDINATE_3) != 0) { - texStride = 3 * texCoordSetCount; - } else if ((vformat & GA_TEXTURE_COORDINATE_4) != 0) { - texStride = 4 * texCoordSetCount; - } - stride += texStride; - normoff += texStride; - coloroff += texStride; - 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; - normoff += initialOffset; - coloroff += initialOffset; - coordoff += initialOffset; - texCoordoff += initialOffset; - vAttrOff += initialOffset; - - /* - * process alpha for geometryArray without alpha - */ - if (updateAlpha == JNI_TRUE && ignoreVertexColors == JNI_FALSE) { - useAlpha = JNI_TRUE; - } - - /* - * call other JNI functions before entering Critical region - * i.e., GetPrimitiveArrayCritical - */ - if (geo_type == GEO_TYPE_TRI_STRIP_SET || - geo_type == GEO_TYPE_TRI_FAN_SET || - geo_type == GEO_TYPE_LINE_STRIP_SET) { - - strip_field = (jfieldID) (*(table->GetFieldID))(env, geo_class, - "stripVertexCounts", "[I"); - sarray = (jarray)(*(table->GetObjectField))(env, geo, strip_field); - strip_len = (jsize)(*(table->GetArrayLength))(env, sarray); - } - - - /* begin critical region */ - verts = (jfloat *) (*(table->GetPrimitiveArrayCritical))(env, varray, NULL); - - if (texCoordSetMapLen >0) { - texCoordSetMapOffset = (jint *)(*(table->GetPrimitiveArrayCritical)) - (env, texUnitOffset, NULL); - } - - - /* get the static transform if exists */ - if (xform != NULL) { - xform_ptr = (jdouble *) (*(table->GetPrimitiveArrayCritical))( - env, xform, NULL); - } - - /* get the static normals transform if exists */ - if (nxform != NULL) { - nxform_ptr = (jdouble *) (*(table->GetPrimitiveArrayCritical))( - env, nxform, NULL); - } - - - if (geo_type == GEO_TYPE_TRI_STRIP_SET || - geo_type == GEO_TYPE_TRI_FAN_SET || - geo_type == GEO_TYPE_LINE_STRIP_SET) { - - - switch (geo_type) { - case GEO_TYPE_TRI_STRIP_SET : - primType = GL_TRIANGLE_STRIP; - break; - case GEO_TYPE_TRI_FAN_SET : - primType = GL_TRIANGLE_FAN; - break; - case GEO_TYPE_LINE_STRIP_SET : - primType = GL_LINE_STRIP; - break; - } - - - strips = (GLsizei *) (*(table->GetPrimitiveArrayCritical))(env, sarray, NULL); - saveVformat = vformat; - if (ignoreVertexColors == JNI_TRUE) { - vformat &= ~GA_COLOR; - } - for (i = 0; i < strip_len; i++) { - glBegin(primType); - for (j = 0; j < strips[i]; j++) { - if (vformat & GA_NORMALS) { - if (nxform_ptr != NULL) { - normal[0] = (float) (nxform_ptr[0] * verts[normoff] + - nxform_ptr[1] * verts[normoff+1] + - nxform_ptr[2] * verts[normoff+2]); - normal[1] = (float ) (nxform_ptr[4] * verts[normoff] + - nxform_ptr[5] * verts[normoff+1] + - nxform_ptr[6] * verts[normoff+2]); - normal[2] = (float) (nxform_ptr[8] * verts[normoff] + - nxform_ptr[9] * verts[normoff+1] + - nxform_ptr[10] * verts[normoff+2]); -/* -printf("orig: < %g %g %g > transformed: < %g %g %g >\n", - verts[normoff], verts[normoff+1], verts[normoff+2], - normal[0], normal[1], normal[2]); -*/ - glNormal3fv(normal); - } else { - glNormal3fv(&verts[normoff]); - } - } - if (vformat & GA_COLOR) { - if (useAlpha ) { - color[0] = verts[coloroff]; - color[1] = verts[coloroff+1]; - color[2] = verts[coloroff+2]; - color[3] = verts[coloroff+3] * alpha; - glColor4fv(&color[0]); - } - else { - if (vformat & GA_WITH_ALPHA) { /* alpha is present */ - glColor4fv(&verts[coloroff]); - } - else { - glColor3fv(&verts[coloroff]); - } - } - } - - 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) { - - if (ctxProperties->gl13) { - if (vformat & GA_TEXTURE_COORDINATE_2) { - for (k = 0; k < texCoordSetMapLen; k++) { - if (texCoordSetMapOffset[k] != -1) { - ctxProperties->glMultiTexCoord2fv( - GL_TEXTURE0 + k, - &verts[texCoordoff + - texCoordSetMapOffset[k]]); - } - } - } else if (vformat & GA_TEXTURE_COORDINATE_3) { - for (k = 0; k < texCoordSetMapLen; k++) { - if (texCoordSetMapOffset[k] != -1) { - ctxProperties->glMultiTexCoord3fv( - GL_TEXTURE0 + k, - &verts[texCoordoff + - texCoordSetMapOffset[k]]); - } - } - } else { - for (k = 0; k < texCoordSetMapLen; k++) { - if (texCoordSetMapOffset[k] != -1) { - ctxProperties->glMultiTexCoord4fv( - GL_TEXTURE0 + k, - &verts[texCoordoff + - texCoordSetMapOffset[k]]); - } - } - } - } - else { /* no multitexture */ - - if (texCoordSetMapOffset[0] != -1) { - if (vformat & GA_TEXTURE_COORDINATE_2) { - glTexCoord2fv(&verts[texCoordoff + - texCoordSetMapOffset[0]]); - } else if (vformat & GA_TEXTURE_COORDINATE_3) { - glTexCoord3fv(&verts[texCoordoff + - texCoordSetMapOffset[0]]); - } else { - glTexCoord4fv(&verts[texCoordoff + - texCoordSetMapOffset[0]]); - } - } - } /* no multitexture */ - } - /* - * texCoordSetMapLen can't be 0 if texture coordinates - * is to be specified - */ - } - if (vformat & GA_COORDINATES) { - if (xform_ptr != NULL) { - - /* - * transform the vertex data with the - * static transform - */ - w = (float ) (xform_ptr[12] * verts[coordoff] + - xform_ptr[13] * verts[coordoff+1] + - xform_ptr[14] * verts[coordoff+2] + - xform_ptr[15]); - winv = 1.0f/w; - vertex[0] = (float ) (xform_ptr[0] * verts[coordoff] + - xform_ptr[1] * verts[coordoff+1] + - xform_ptr[2] * verts[coordoff+2] + - xform_ptr[3]) * winv; - vertex[1] = (float) (xform_ptr[4] * verts[coordoff] + - xform_ptr[5] * verts[coordoff+1] + - xform_ptr[6] * verts[coordoff+2] + - xform_ptr[7]) * winv; - vertex[2] = (float) (xform_ptr[8] * verts[coordoff] + - xform_ptr[9] * verts[coordoff+1] + - xform_ptr[10] * verts[coordoff+2] + - xform_ptr[11]) * winv; -/* -printf("orig: < %g %g %g > transformed: < %g %g %g >\n", - verts[coordoff], verts[coordoff+1], verts[coordoff+2], - vertex[0], vertex[1], vertex[2]); -*/ - glVertex3fv(vertex); - } else { - glVertex3fv(&verts[coordoff]); - } - } - normoff += stride; - coloroff += stride; - coordoff += stride; - texCoordoff += stride; - vAttrOff += stride; - } - glEnd(); - } - /* Restore the vertex format */ - vformat = saveVformat; - (*(table->ReleasePrimitiveArrayCritical))(env, sarray, strips, - 0); - - } - else if ((geo_type == GEO_TYPE_QUAD_SET) || - (geo_type == GEO_TYPE_TRI_SET) || - (geo_type == GEO_TYPE_POINT_SET) || - (geo_type == GEO_TYPE_LINE_SET)) { - - switch (geo_type) { - case GEO_TYPE_QUAD_SET : - primType = GL_QUADS; - break; - case GEO_TYPE_TRI_SET : - primType = GL_TRIANGLES; - break; - case GEO_TYPE_POINT_SET : - primType = GL_POINTS; - break; - case GEO_TYPE_LINE_SET : - primType = GL_LINES; - break; - - } - - saveVformat = vformat; - if (ignoreVertexColors == JNI_TRUE) { - vformat &= ~GA_COLOR; - } - glBegin(primType); - for (j = 0; j < vcount; j++) { - if (vformat & GA_NORMALS) { - if (nxform_ptr != NULL) { - normal[0] = (float) (nxform_ptr[0] * verts[normoff] + - nxform_ptr[1] * verts[normoff+1] + - nxform_ptr[2] * verts[normoff+2]); - normal[1] = (float) (nxform_ptr[4] * verts[normoff] + - nxform_ptr[5] * verts[normoff+1] + - nxform_ptr[6] * verts[normoff+2]); - normal[2] = (float) (nxform_ptr[8] * verts[normoff] + - nxform_ptr[9] * verts[normoff+1] + - nxform_ptr[10] * verts[normoff+2]); -/* -printf("orig: < %g %g %g > transformed: < %g %g %g >\n", - verts[normoff], verts[normoff+1], verts[normoff+2], - normal[0], normal[1], normal[2]); -*/ - glNormal3fv(normal); - } else { - glNormal3fv(&verts[normoff]); - } - } - if (vformat & GA_COLOR) { - if (useAlpha ) { - if (vformat & GA_WITH_ALPHA) { - color[0] = verts[coloroff]; - color[1] = verts[coloroff+1]; - color[2] = verts[coloroff+2]; - color[3] = verts[coloroff+3] * alpha; - } - else { - color[0] = verts[coloroff]; - color[1] = verts[coloroff+1]; - color[2] = verts[coloroff+2]; - color[3] = alpha; - } - glColor4fv(&color[0]); - - } - else { - if (vformat & GA_WITH_ALPHA) { /* alpha is present */ - glColor4fv(&verts[coloroff]); - } - else { - glColor3fv(&verts[coloroff]); - } - } - } - - 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) { - - if(ctxProperties->gl13) { - if (vformat & GA_TEXTURE_COORDINATE_2) { - for (k = 0; k < texCoordSetMapLen; k++) { - if (texCoordSetMapOffset[k] != -1) { - ctxProperties->glMultiTexCoord2fv( - GL_TEXTURE0 + k, - &verts[texCoordoff + - texCoordSetMapOffset[k]]); - } - } - } else if (vformat & GA_TEXTURE_COORDINATE_3) { - for (k = 0; k < texCoordSetMapLen; k++) { - if (texCoordSetMapOffset[k] != -1) { - ctxProperties->glMultiTexCoord3fv( - GL_TEXTURE0 + k, - &verts[texCoordoff + - texCoordSetMapOffset[k]]); - } - } - } else { - for (k = 0; k < texCoordSetMapLen; k++) { - if (texCoordSetMapOffset[k] != -1) { - ctxProperties->glMultiTexCoord4fv( - GL_TEXTURE0 + k, - &verts[texCoordoff + - texCoordSetMapOffset[k]]); - } - } - } - } - else { /* no multitexture */ - - if (texCoordSetMapOffset[0] != -1) { - if (vformat & GA_TEXTURE_COORDINATE_2) { - glTexCoord2fv(&verts[texCoordoff + - texCoordSetMapOffset[0]]); - } else if (vformat & GA_TEXTURE_COORDINATE_3) { - glTexCoord3fv(&verts[texCoordoff + - texCoordSetMapOffset[0]]); - } else { - glTexCoord4fv(&verts[texCoordoff + - texCoordSetMapOffset[0]]); - } - } - } /* no multitexture */ - } - - /* - * texCoordSetMapLen can't be 0 if texture coordinates - * is to be specified - */ - } - - if (vformat & GA_COORDINATES) { - if (xform_ptr != NULL) { - - /* - * transform the vertex data with the - * static transform - */ - w = (float) (xform_ptr[12] * verts[coordoff] + - xform_ptr[13] * verts[coordoff+1] + - xform_ptr[14] * verts[coordoff+2] + - xform_ptr[15]); - winv = 1.0f/w; - vertex[0] = (float) (xform_ptr[0] * verts[coordoff] + - xform_ptr[1] * verts[coordoff+1] + - xform_ptr[2] * verts[coordoff+2] + - xform_ptr[3]) * winv; - vertex[1] = (float) (xform_ptr[4] * verts[coordoff] + - xform_ptr[5] * verts[coordoff+1] + - xform_ptr[6] * verts[coordoff+2] + - xform_ptr[7]) * winv; - vertex[2] = (float) (xform_ptr[8] * verts[coordoff] + - xform_ptr[9] * verts[coordoff+1] + - xform_ptr[10] * verts[coordoff+2] + - xform_ptr[11]) * winv; -/* -printf("orig: < %g %g %g > transformed: < %g %g %g >\n", - verts[coordoff], verts[coordoff+1], verts[coordoff+2], - vertex[0], vertex[1], vertex[2]); -*/ - glVertex3fv(vertex); - } else { - glVertex3fv(&verts[coordoff]); - } - } - normoff += stride; - coloroff += stride; - coordoff += stride; - texCoordoff += stride; - vAttrOff += stride; - } - glEnd(); - } - /* Restore the vertex format */ - vformat = saveVformat; - - - (*(table->ReleasePrimitiveArrayCritical))(env, varray, verts, 0); - - if (texCoordSetMapLen > 0) - (*(table->ReleasePrimitiveArrayCritical))(env, texUnitOffset, - texCoordSetMapOffset, 0); - - if (xform_ptr != NULL) - (*(table->ReleasePrimitiveArrayCritical))(env, xform, xform_ptr, 0); - - if (nxform_ptr != NULL) - (*(table->ReleasePrimitiveArrayCritical))(env, nxform, nxform_ptr, 0); - - if (vAttrSizesPtr != NULL) { - table->ReleaseIntArrayElements(env, vertexAttrSizes, vAttrSizesPtr, JNI_ABORT); - } -} - -static void -enableTexCoordPointer( - GraphicsContextPropertiesInfo *ctxProperties, - int texUnit, - int texSize, - int texDataType, - int stride, - void *pointer) -{ - clientActiveTextureUnit(ctxProperties, texUnit); - glEnableClientState(GL_TEXTURE_COORD_ARRAY); - glTexCoordPointer(texSize, texDataType, stride, pointer); -} - -static void -disableTexCoordPointer( - GraphicsContextPropertiesInfo *ctxProperties, - int texUnit) -{ - clientActiveTextureUnit(ctxProperties, texUnit); - glDisableClientState(GL_TEXTURE_COORD_ARRAY); -} - -static void -clientActiveTextureUnit( - GraphicsContextPropertiesInfo *ctxProperties, - int texUnit) -{ - if (ctxProperties->gl13) { - ctxProperties->glClientActiveTexture(texUnit + GL_TEXTURE0); - } -} - - -static void -executeGeometryArrayVA( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jobject geo, - jint geo_type, - jboolean isNonUniformScale, - jboolean ignoreVertexColors, - jint vcount, - jint vformat, - jint vdefined, - jint initialCoordIndex, - jfloat* fverts, - jdouble* dverts, - jint initialColorIndex, - jfloat* fclrs, - jbyte* bclrs, - jint initialNormalIndex, - jfloat* norms, - jint vertexAttrCount, - jintArray vertexAttrSizes, - jintArray vertexAttrIndices, - jfloat ** vertexAttrPointer, - jint texCoordMapLength, - jintArray tcoordsetmap, - jint numActiveTexUnit, - jintArray texindices, - jint texStride, - jfloat** texCoordPointer, - jint cdirty, - jarray sarray, - jsize strip_len, - jarray start_array) -{ - int primType; - JNIEnv table; - jint i; - GLsizei *strips; - - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - jlong ctx = ctxProperties->context; - - GLint *start; - - jint coordoff, coloroff, normoff; - jint* initialVAttrIndices; - jint* vAttrSizes; - int texSet; - jint *texCoordSetMap; - jint* initialTexIndices; - - 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; - -#ifdef VERBOSE - fprintf(stderr, "executeGeometryArrayVA()\n"); -#endif /* VERBOSE */ - - /* Enable normalize for non-uniform scale (which rescale can't handle) */ - if (isNonUniformScale) { - glEnable(GL_NORMALIZE); - } - - coordoff = 3 * initialCoordIndex; - /* Define the data pointers */ - if (floatCoordDefined) { - glVertexPointer(3, GL_FLOAT, 0, &(fverts[coordoff])); - } else if (doubleCoordDefined){ - glVertexPointer(3, GL_DOUBLE, 0, &(dverts[coordoff])); - } - - if (floatColorsDefined) { - if (vformat & GA_WITH_ALPHA) { - coloroff = 4 * initialColorIndex; - glColorPointer(4, GL_FLOAT, 0, &(fclrs[coloroff])); - } else { - coloroff = 3 * initialColorIndex; - glColorPointer(3, GL_FLOAT, 0, &(fclrs[coloroff])); - } - } else if (byteColorsDefined) { - if (vformat & GA_WITH_ALPHA) { - coloroff = 4 * initialColorIndex; - glColorPointer(4, GL_UNSIGNED_BYTE, 0, &(bclrs[coloroff])); - } else { - coloroff = 3 * initialColorIndex; - glColorPointer(3, GL_UNSIGNED_BYTE, 0, &(bclrs[coloroff])); - } - } - if (normalsDefined) { - normoff = 3 * initialNormalIndex; - 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 tus = 0; - float *ptexCoords; - - initialTexIndices = (jint *) (*(table->GetPrimitiveArrayCritical))(env,texindices, NULL); - - texCoordSetMap = (jint *) (*(table->GetPrimitiveArrayCritical))(env,tcoordsetmap, NULL); - for (i = 0; i < numActiveTexUnit; i++) { - if ((i < texCoordMapLength) && ( - ((texSet=texCoordSetMap[i]) != -1))) { - - ptexCoords = texCoordPointer[texSet]; - - enableTexCoordPointer(ctxProperties, i, texStride, - GL_FLOAT, 0, - &ptexCoords[texStride * initialTexIndices[texSet]]); - - } else { - disableTexCoordPointer(ctxProperties, i); - } - } - - /* Reset client active texture unit to 0 */ - clientActiveTextureUnit(ctxProperties, 0); - } - - if (geo_type == GEO_TYPE_TRI_STRIP_SET || - geo_type == GEO_TYPE_TRI_FAN_SET || - geo_type == GEO_TYPE_LINE_STRIP_SET) { - - strips = (GLint *) (*(table->GetPrimitiveArrayCritical))(env, sarray, - NULL); - - switch (geo_type) { - case GEO_TYPE_TRI_STRIP_SET : - primType = GL_TRIANGLE_STRIP; - break; - case GEO_TYPE_TRI_FAN_SET : - primType = GL_TRIANGLE_FAN; - break; - case GEO_TYPE_LINE_STRIP_SET : - primType = GL_LINE_STRIP; - break; - } - - start = (GLint *)(*(table->GetPrimitiveArrayCritical))(env, - start_array, NULL); - if (ctxProperties->multi_draw_arrays_ext || ctxProperties->multi_draw_arrays_sun) { - - /* - fprintf(stderr, "strip_len = %d \n",strip_len); - for (i=0; i < strip_len;i++) { - fprintf(stderr, "numVertices = %d\n",strips[i]); - fprintf(stderr, "start = %d \n",start[i]); - } - */ - ctxProperties->glMultiDrawArraysEXT(primType, start, strips, strip_len); - } else { - for (i=0; i < strip_len;i++) { - glDrawArrays(primType, start[i], strips[i]); - } - } - (*(table->ReleasePrimitiveArrayCritical))(env, start_array, start, - 0); - (*(table->ReleasePrimitiveArrayCritical))(env, sarray, strips, 0); - } - else { - switch (geo_type){ - case GEO_TYPE_QUAD_SET : glDrawArrays(GL_QUADS, 0, vcount);break; - case GEO_TYPE_TRI_SET : glDrawArrays(GL_TRIANGLES, 0, vcount);break; - case GEO_TYPE_POINT_SET : glDrawArrays(GL_POINTS, 0, vcount);break; - case GEO_TYPE_LINE_SET: glDrawArrays(GL_LINES, 0, vcount);break; - } - } - /* clean up if we turned on normalize */ - if (isNonUniformScale) { - glDisable(GL_NORMALIZE); - } - - - 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 */ -/* - * Class: javax_media_j3d_NativePipeline - * 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_NativePipeline_executeVA( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jobject geo, - jint geo_type, - jboolean isNonUniformScale, - jboolean ignoreVertexColors, - jint vcount, - jint vformat, - jint vdefined, - jint initialCoordIndex, - jfloatArray vfcoords, - jdoubleArray vdcoords, - jint initialColorIndex, - jfloatArray cfdata, - jbyteArray cbdata, - jint initialNormalIndex, - jfloatArray ndata, - jint vertexAttrCount, - jintArray vertexAttrSizes, - jintArray vertexAttrIndices, - jobjectArray vertexAttrData, - jint texCoordMapLength, - jintArray tcoordsetmap, - jint numActiveTexUnit, - jintArray texindices, - jint texStride, - jobjectArray texCoords, - jint cdirty) -{ - - jfieldID strip_field; - jarray sarray; - jsize strip_len; - jclass geo_class; - - jarray start_array; - jfieldID start_field; - - JNIEnv table = *env; - jfloat *fverts = NULL; - jdouble *dverts = NULL; - jbyte *bclrs = NULL; - jfloat *fclrs = NULL, *norms = NULL; - jarray *vaobjs = NULL; - jfloat **vertexAttrPointer = NULL; - jfloat **texCoordPointer = NULL; - jarray *texobjs = 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) { - - strip_field = (jfieldID) (*(table->GetFieldID))(env, geo_class, - "stripVertexCounts", "[I"); - sarray = (jarray)(*(table->GetObjectField))(env, geo, strip_field); - strip_len = (jsize)(*(table->GetArrayLength))(env, sarray); - - start_field = (jfieldID) (*(table->GetFieldID))(env, geo_class, - "stripStartOffsetIndices", "[I"); - start_array = (jarray)(*(table->GetObjectField))(env, geo, - 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++) { - if (texobjs[i] != NULL) - texCoordPointer[i] = (jfloat*)(*(table->GetPrimitiveArrayCritical))(env,texobjs[i], NULL); - else - texCoordPointer[i] = NULL; - } - } - - /* get coordinate array */ - if (floatCoordDefined) { - fverts= (jfloat *) (*(table->GetPrimitiveArrayCritical))(env, vfcoords, NULL); - } else if (doubleCoordDefined) { - dverts= (jdouble *) (*(table->GetPrimitiveArrayCritical))(env, vdcoords, NULL); - } - - /* get color array */ - if (floatColorsDefined) { - fclrs = (jfloat *) (*(table->GetPrimitiveArrayCritical))(env, cfdata, NULL); - } else if (byteColorsDefined) { - bclrs = (jbyte *) (*(table->GetPrimitiveArrayCritical))(env, cbdata, NULL); - } - - /* get normal array */ - if (normalsDefined) { - 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, ignoreVertexColors, - vcount, vformat, vdefined, initialCoordIndex, - fverts, dverts, initialColorIndex, - fclrs, bclrs, initialNormalIndex, - norms, - vertexAttrCount, vertexAttrSizes, - vertexAttrIndices, vertexAttrPointer, - texCoordMapLength, - tcoordsetmap,numActiveTexUnit, - 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) { - (*(table->ReleasePrimitiveArrayCritical))(env, texobjs[i], texCoordPointer[i], 0); - } - } - } - - if (texobjs != NULL) { - free(texobjs); - } - if (texCoordPointer != NULL) { - free(texCoordPointer); - } - - if (normalsDefined) { - (*env)->ReleasePrimitiveArrayCritical(env, ndata, norms, 0); - } - - - if (floatColorsDefined) { - (*env)->ReleasePrimitiveArrayCritical(env, cfdata, fclrs, 0); - } - else if (byteColorsDefined) { - (*env)->ReleasePrimitiveArrayCritical(env, cbdata, bclrs, 0); - } - - - if (floatCoordDefined) { - (*env)->ReleasePrimitiveArrayCritical(env, vfcoords, fverts, 0); - } - else if (doubleCoordDefined) { - (*env)->ReleasePrimitiveArrayCritical(env, vdcoords, dverts, 0); - } -} - -/* execute geometry array with java array format */ -/* - * Class: javax_media_j3d_NativePipeline - * 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_NativePipeline_executeVABuffer( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jobject geo, - jint geo_type, - jboolean isNonUniformScale, - jboolean ignoreVertexColors, - jint vcount, - jint vformat, - jint vdefined, - jint initialCoordIndex, - jobject vcoords, - jint initialColorIndex, - jobject cdataBuffer, - jfloatArray cfdata, - jbyteArray cbdata, - jint initialNormalIndex, - jobject ndata, - jint vertexAttrCount, - jintArray vertexAttrSizes, - jintArray vertexAttrIndices, - jobjectArray vertexAttrData, - jint texCoordMapLength, - jintArray tcoordsetmap, - jint numActiveTexUnit, - jintArray texindices, - jint texStride, - jobjectArray texCoords, - jint cdirty) -{ - jfieldID strip_field; - jarray sarray; - jsize strip_len; - jclass geo_class; - - jarray start_array; - jfieldID start_field; - - JNIEnv table = *env; - jfloat *fverts = NULL; - jdouble *dverts = NULL ; - jbyte *bclrs = NULL; - jfloat *fclrs = NULL, *norms = NULL; - jarray *vaobjs = NULL; - jfloat **vertexAttrPointer = NULL; - jfloat **texCoordPointer = NULL; - jarray *texobjs = 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) { - - strip_field = (jfieldID) (*(table->GetFieldID))(env, geo_class, - "stripVertexCounts", "[I"); - sarray = (jarray)(*(table->GetObjectField))(env, geo, strip_field); - strip_len = (jsize)(*(table->GetArrayLength))(env, sarray); - - start_field = (jfieldID) (*(table->GetFieldID))(env, geo_class, - "stripStartOffsetIndices", "[I"); - start_array = (jarray)(*(table->GetObjectField))(env, geo, - start_field); - } - - /* get coordinate array */ - if (floatCoordDefined) { - fverts= (jfloat *)(*(table->GetDirectBufferAddress))(env, vcoords ); - } else if (doubleCoordDefined) { - dverts= (jdouble *)(*(table->GetDirectBufferAddress))(env, vcoords ); - } - - if(fverts == NULL && dverts == NULL) { - return; - } - - - /* get color array */ - if (floatColorsDefined) { - if(cfdata != NULL) - fclrs = (jfloat *) (*(table->GetPrimitiveArrayCritical))(env, cfdata, NULL); - else - fclrs = (jfloat *)(*(table->GetDirectBufferAddress))(env, cdataBuffer); - } - else if (byteColorsDefined) { - if(cbdata != NULL) - bclrs = (jbyte *) (*(table->GetPrimitiveArrayCritical))(env, cbdata, NULL); - else - bclrs = (jbyte *)(*(table->GetDirectBufferAddress))(env, cdataBuffer); - } - - /* get normal array */ - if (normalsDefined) { - 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++) { - if (texobjs[i] != NULL) - texCoordPointer[i] = (jfloat*)(*(table->GetDirectBufferAddress))(env,texobjs[i]); - else - texCoordPointer[i] = NULL; - } - } - - -#ifdef VERBOSE - fprintf(stderr, "GeometryArrayRetained.executeVABuffer() -- calling executeGeometryArrayVA\n"); -#endif /* VERBOSE */ - - executeGeometryArrayVA(env, obj, ctxInfo, geo, geo_type, - isNonUniformScale, ignoreVertexColors, - vcount, vformat, vdefined, initialCoordIndex, - fverts, dverts, initialColorIndex, - fclrs, bclrs, initialNormalIndex, - norms, - vertexAttrCount, vertexAttrSizes, - vertexAttrIndices, vertexAttrPointer, - texCoordMapLength, - tcoordsetmap,numActiveTexUnit, - texindices,texStride,texCoordPointer,cdirty, sarray, strip_len, start_array); - - if (vaobjs != NULL) { - free(vaobjs); - } - if (vertexAttrPointer != NULL) { - free(vertexAttrPointer); - } - - 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) - (*(table->ReleasePrimitiveArrayCritical))(env, cbdata, bclrs, 0); -} - - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_disableGlobalAlpha( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jobject geo, - jint vformat, - jboolean useAlpha, - jboolean ignoreVertexColors) -{ - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - jlong ctx = ctxProperties->context; - - if(ctxProperties->global_alpha_sun){ - if (ignoreVertexColors == JNI_FALSE && vformat & 0x04) { - if (useAlpha && ctxProperties->global_alpha_sun ) { - glDisable(GL_GLOBAL_ALPHA_SUN); - } - } - } -} - - -/* - * Class: javax_media_j3d_NativePipeline - * Method: setVertexFormat - * Signature: (JIZZI[I)V - */ -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_setVertexFormat( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jobject geo, - jint vformat, - jboolean useAlpha, - 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); - } - else { - glDisableClientState(GL_NORMAL_ARRAY); - } - if (ignoreVertexColors == JNI_FALSE && vformat & GA_COLOR) { - glEnableClientState(GL_COLOR_ARRAY); - } - else { - glDisableClientState(GL_COLOR_ARRAY); - - } - - if (ctxProperties->global_alpha_sun) { - if (useAlpha) { - glEnable(GL_GLOBAL_ALPHA_SUN); - } - else { - glDisable(GL_GLOBAL_ALPHA_SUN); - } - } - - if (vformat & GA_COORDINATES) { - glEnableClientState(GL_VERTEX_ARRAY); - } - else { - glDisableClientState(GL_VERTEX_ARRAY); - } -} - -static void -executeIndexedGeometryArray( - JNIEnv *env, - jobject obj, jlong ctxInfo, jobject geo, jint geo_type, - jboolean isNonUniformScale, jboolean useAlpha, - jboolean ignoreVertexColors, - jint initialIndexIndex, - jint indexCount, - jint vertexCount, - jint vformat, - jint vertexAttrCount, jintArray vertexAttrSizes, - jint texCoordSetCount, - jintArray texCoordSetMap, jint texCoordSetMapLen, - jintArray texUnitOffset, - jint numActiveTexUnit, - jfloatArray varray, jobject varrayBuffer, jfloatArray carray, - jint cDirty, - jintArray indexCoord) -{ - jclass geo_class; - JNIEnv table; - - jfloat *verts,*clrs; - jint *indices; - jint i; - jint bstride, cbstride; - jsize strip_len; - GLsizei *countArray; - int offset; - GLenum iaFormat; - int useInterleavedArrays; - int primType; - jint stride, coordoff, normoff, coloroff, texCoordoff; - int alphaNeedsUpdate = 0; /* used so we can get alpha data from */ - /* JNI before using it so we can use */ - /* GetPrimitiveArrayCritical */ - jfieldID strip_field; - jarray sarray; - jint* tmpDrawElementsIndices[100]; - - jint** multiDrawElementsIndices = NULL; - jint allocated = 0; - - jint texSize, texStride, *texCoordSetMapOffset = NULL; - - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - jlong ctx = ctxProperties->context; - - int cstride = 0; - int vAttrStride = 0; - int vAttrOff; - jint *vAttrSizesPtr = NULL; - - table = *env; - -#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; - } - if ((vformat & GA_NORMALS) != 0) { - stride += 3; - coordoff += 3; - } - if ((vformat & GA_COLOR) != 0) { - if ((vformat & GA_WITH_ALPHA) != 0 ) { - stride += 4; - normoff += 4; - coordoff += 4; - } - else { /* Handle the case of executeInterleaved 3f */ - stride += 3; - normoff += 3; - coordoff += 3; - } - } - if ((vformat & GA_TEXTURE_COORDINATE) != 0) { - if ((vformat & GA_TEXTURE_COORDINATE_2) != 0) { - texSize = 2; - texStride = 2 * texCoordSetCount; - } else if ((vformat & GA_TEXTURE_COORDINATE_3) != 0) { - texSize = 3; - texStride = 3 * texCoordSetCount; - } else if ((vformat & GA_TEXTURE_COORDINATE_4) != 0) { - texSize = 4; - texStride = 4 * texCoordSetCount; - } - stride += texStride; - normoff += texStride; - coloroff += texStride; - 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); - - /* - * call other JNI functions before entering Critical region - * i.e., GetPrimitiveArrayCritical - */ - - - 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) { - - strip_field = (jfieldID) (*(table->GetFieldID))(env, geo_class, - "stripIndexCounts", "[I"); - sarray = (jarray)(*(table->GetObjectField))(env, geo, strip_field); - strip_len = (jsize)(*(table->GetArrayLength))(env, sarray); - - - } - - /* begin critical region */ - if(varray != NULL) - verts = (jfloat *) (*(table->GetPrimitiveArrayCritical))(env, varray, NULL); - else if(varrayBuffer != NULL) - verts = (jfloat *) (*(table->GetDirectBufferAddress))(env, varrayBuffer); - - indices = (jint *) (*(table->GetPrimitiveArrayCritical))(env, indexCoord, NULL); - - - /* using byRef interleaved array and has a separate pointer, then .. */ - cstride = stride; - if (carray != NULL) { - clrs = (jfloat *) (*(table->GetPrimitiveArrayCritical))(env, carray, NULL); - cstride = 4; - - } - else { - clrs = &(verts[coloroff]); - } - cbstride = cstride * sizeof(float); - if (texCoordSetMapLen >0) { - texCoordSetMapOffset = (jint *) (*(table->GetPrimitiveArrayCritical))(env, texUnitOffset, NULL); - } - - /* Enable normalize for non-uniform scale (which rescale can't handle) */ - if (isNonUniformScale) { - glEnable(GL_NORMALIZE); - } - - /*** Handle non-indexed strip GeometryArray first *******/ - 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) { - - - countArray = (GLsizei *) (*(table->GetPrimitiveArrayCritical))(env, sarray, - NULL); - - if ((ignoreVertexColors == JNI_TRUE) || (carray != NULL) || - ((vformat & GA_TEXTURE_COORDINATE) && ((texCoordSetMapLen > 1) || - (texCoordSetCount > 1)))) { - useInterleavedArrays = 0; - } else { - INTERLEAVEDARRAYS_TEST() - } - if (useInterleavedArrays) { - glInterleavedArrays(iaFormat, bstride, verts); - } else { - if (vformat & GA_NORMALS) { - glNormalPointer(GL_FLOAT, bstride, &(verts[normoff])); - } - if (ignoreVertexColors == JNI_FALSE && vformat & GA_COLOR) { - if (vformat & GA_WITH_ALPHA || (useAlpha == GL_TRUE)) { - glColorPointer(4, GL_FLOAT, cbstride, clrs); - } else { - /* - for (i = 0; i < 4; i++) { - fprintf(stderr, "r = %f, g = %f, b = %f\n", verts[i*stride +coloroff], verts[i*stride +coloroff+1],verts[i*stride +coloroff+2]); - } - */ - glColorPointer(3, GL_FLOAT, cbstride, clrs); - } - } - if (vformat & GA_COORDINATES) { - /* - for (i = 0; i < 4; i++) { - fprintf(stderr, "x = %f, y = %f, z = %f\n", verts[i*stride +coordoff], verts[i*stride +coordoff+1],verts[i*stride +coordoff+2]); - } - */ - glVertexPointer(3, GL_FLOAT, bstride, &(verts[coordoff])); - } - - if (vformat & GA_TEXTURE_COORDINATE) { - - /* XXXX: texCoordoff == 0 ???*/ - executeTexture(texCoordSetMapLen, - texSize, bstride, texCoordoff, - texCoordSetMapOffset, - numActiveTexUnit, - 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) { - case GEO_TYPE_INDEXED_TRI_STRIP_SET : - primType = GL_TRIANGLE_STRIP; - break; - case GEO_TYPE_INDEXED_TRI_FAN_SET : - primType = GL_TRIANGLE_FAN; - break; - case GEO_TYPE_INDEXED_LINE_STRIP_SET : - primType = GL_LINE_STRIP; - break; - } - /* - fprintf(stderr, "strip_len = %d\n",strip_len); - for (i=0; i < strip_len;i++) { - fprintf(stderr, "strips[i] = %d\n",strips[i]); - } - */ - - lockArray(ctxProperties, vertexCount); - - if (ctxProperties->multi_draw_arrays_ext || ctxProperties->multi_draw_arrays_sun) { - if (strip_len > 100) { - multiDrawElementsIndices = (jint**)malloc(strip_len * sizeof(int*)); - allocated = 1; - } - else { - multiDrawElementsIndices =(jint**) &tmpDrawElementsIndices; - } - - offset = initialIndexIndex; - for (i=0; i < strip_len;i++) { - multiDrawElementsIndices[i] = &indices[offset]; - offset += countArray[i]; - } - ctxProperties->glMultiDrawElementsEXT(primType, countArray, GL_UNSIGNED_INT,(const void **)multiDrawElementsIndices, strip_len); - - } else { - offset = initialIndexIndex; - for (i=0; i < strip_len;i++) { - - glDrawElements(primType, countArray[i], GL_UNSIGNED_INT, &indices[offset]); - offset += countArray[i]; - } - } - (*(table->ReleasePrimitiveArrayCritical))(env, sarray, countArray, 0); - if (allocated) { - free(multiDrawElementsIndices); - } - - } - /******* Handle non-indexed non-striped GeometryArray now *****/ - else if ((geo_type == GEO_TYPE_INDEXED_QUAD_SET) || - (geo_type == GEO_TYPE_INDEXED_TRI_SET) || - (geo_type == GEO_TYPE_INDEXED_POINT_SET) || - (geo_type == GEO_TYPE_INDEXED_LINE_SET)) - { - if ((ignoreVertexColors == JNI_TRUE) || (carray != NULL) || - ((vformat & GA_TEXTURE_COORDINATE) && ((texCoordSetMapLen > 1) || - (texCoordSetCount > 1)))) { - useInterleavedArrays = 0; - } else { - INTERLEAVEDARRAYS_TEST() - } - if (useInterleavedArrays) { - glInterleavedArrays(iaFormat, bstride, verts); - } else { - if (vformat & GA_NORMALS) { - glNormalPointer(GL_FLOAT, bstride, &(verts[normoff])); - } - if (ignoreVertexColors == JNI_FALSE && vformat & GA_COLOR) { - if (vformat & GA_WITH_ALPHA || (useAlpha == GL_TRUE)) { - - glColorPointer(4, GL_FLOAT, cbstride, clrs); - } else { - glColorPointer(3, GL_FLOAT, cbstride, clrs); - } - } - if (vformat & GA_COORDINATES) { - glVertexPointer(3, GL_FLOAT, bstride, &(verts[coordoff])); - } - - if (vformat & GA_TEXTURE_COORDINATE) { - - /* XXXX: texCoordoff == 0 ???*/ - executeTexture(texCoordSetMapLen, - texSize, bstride, texCoordoff, - texCoordSetMapOffset, - numActiveTexUnit, - 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){ - case GEO_TYPE_INDEXED_QUAD_SET : glDrawElements(GL_QUADS,indexCount, GL_UNSIGNED_INT, &indices[initialIndexIndex]);break; - case GEO_TYPE_INDEXED_TRI_SET : glDrawElements(GL_TRIANGLES, indexCount, GL_UNSIGNED_INT, &indices[initialIndexIndex]);break; - case GEO_TYPE_INDEXED_POINT_SET : glDrawElements(GL_POINTS, indexCount, GL_UNSIGNED_INT, &indices[initialIndexIndex]);break; - case GEO_TYPE_INDEXED_LINE_SET: glDrawElements(GL_LINES, indexCount, GL_UNSIGNED_INT, &indices[initialIndexIndex]);break; - } - } - - 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 (isNonUniformScale) { - glDisable(GL_NORMALIZE); - } - if(varray != NULL) - (*(table->ReleasePrimitiveArrayCritical))(env, varray, verts, 0); - - (*(table->ReleasePrimitiveArrayCritical))(env, indexCoord, indices, 0); - - if (carray != NULL) - (*(table->ReleasePrimitiveArrayCritical))(env, carray, clrs, 0); - - if (texCoordSetMapLen > 0) - (*(table->ReleasePrimitiveArrayCritical))(env, texUnitOffset, - texCoordSetMapOffset, 0); - - if (vAttrSizesPtr != NULL) { - table->ReleaseIntArrayElements(env, vertexAttrSizes, vAttrSizesPtr, JNI_ABORT); - } -} - -JNIEXPORT void JNICALL -Java_javax_media_j3d_NativePipeline_executeIndexedGeometry( - JNIEnv *env, - jobject obj, jlong ctxInfo, jobject geo, jint geo_type, - jboolean isNonUniformScale, jboolean useAlpha, - jboolean ignoreVertexColors, - jint initialIndexIndex, - jint indexCount, - jint vertexCount, - jint vformat, - jint vertexAttrCount, jintArray vertexAttrSizes, - jint texCoordSetCount, - jintArray texCoordSetMap, jint texCoordSetMapLen, - jintArray texUnitOffset, - jint numActiveTexUnit, - jfloatArray varray, jfloatArray carray, - jint cDirty, - jintArray indexCoord) -{ - -#ifdef VERBOSE - fprintf(stderr, "IndexedGeometryArrayRetained.executeIndexedGeometry() -- calling executeIndexedGeometryArray\n"); -#endif /* VERBOSE */ - - executeIndexedGeometryArray(env, obj, ctxInfo, geo, geo_type, - isNonUniformScale, useAlpha, - ignoreVertexColors, - initialIndexIndex, - indexCount, - vertexCount, - vformat, - vertexAttrCount, vertexAttrSizes, - texCoordSetCount, - texCoordSetMap, texCoordSetMapLen, - texUnitOffset, - numActiveTexUnit, - varray, NULL, carray, - cDirty, - indexCoord); -} - -JNIEXPORT void JNICALL -Java_javax_media_j3d_NativePipeline_executeIndexedGeometryBuffer( - JNIEnv *env, - jobject obj, jlong ctxInfo, jobject geo, jint geo_type, - jboolean isNonUniformScale, jboolean useAlpha, - jboolean ignoreVertexColors, - jint initialIndexIndex, - jint indexCount, - jint vertexCount, - jint vformat, - jint texCoordSetCount, - jintArray texCoordSetMap, jint texCoordSetMapLen, - jintArray texUnitOffset, - jint numActiveTexUnit, - jobject varray, jfloatArray carray, - jint cDirty, - jintArray indexCoord) -{ - -#ifdef VERBOSE - fprintf(stderr, "IndexedGeometryArrayRetained.executeIndexedGeometryBuffer() -- calling executeIndexedGeometryArray\n"); -#endif /* VERBOSE */ - - executeIndexedGeometryArray(env, obj, ctxInfo, geo, geo_type, - isNonUniformScale, useAlpha, - ignoreVertexColors, - initialIndexIndex, - indexCount, - vertexCount, - vformat, - 0, NULL, - texCoordSetCount, - texCoordSetMap, texCoordSetMapLen, - texUnitOffset, - numActiveTexUnit, - NULL, varray, carray, - cDirty, - indexCoord); -} - - -static void -executeIndexedGeometryArrayVA( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jobject geo, - jint geo_type, - jboolean isNonUniformScale, - jboolean ignoreVertexColors, - jint initialIndexIndex, - jint validIndexCount, - jint vertexCount, - jint vformat, - jint vdefined, - jfloat* fverts, - jdouble* dverts, - jfloat* fclrs, - jbyte* bclrs, - jfloat* norms, - jint vertexAttrCount, - jintArray vertexAttrSizes, - jfloat ** vertexAttrPointer, - jint texCoordMapLength, - jintArray tcoordsetmap, - jint numActiveTexUnit, - jint texStride, - jfloat** texCoordPointer, - jint cdirty, - jintArray indexCoord, - jarray sarray, - jsize strip_len) -{ - int primType; - JNIEnv table; - jint i; - jint* tmpDrawElementsIndices[100]; - jint** multiDrawElementsIndices = NULL; - jint allocated = 0; - jint *indices; - - 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); - - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - jlong ctx = ctxProperties->context; - - int texSet; - jint *texCoordSetMap; - 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 (isNonUniformScale) { - glEnable(GL_NORMALIZE); - } - - /* Define the data pointers */ - if (floatCoordDefined) { - glVertexPointer(3, GL_FLOAT, 0, fverts); - } else if (doubleCoordDefined){ - glVertexPointer(3, GL_DOUBLE, 0, dverts); - } - if (floatColorsDefined) { - if (vformat & GA_WITH_ALPHA) { - glColorPointer(4, GL_FLOAT, 0, fclrs); - } else { - glColorPointer(3, GL_FLOAT, 0, fclrs); - } - } else if (byteColorsDefined) { - if (vformat & GA_WITH_ALPHA) { - glColorPointer(4, GL_UNSIGNED_BYTE, 0, bclrs); - } else { - glColorPointer(3, GL_UNSIGNED_BYTE, 0, bclrs); - } - } - if (normalsDefined) { - 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 tus = 0; - float *ptexCoords; - - texCoordSetMap = (jint *) (*(table->GetPrimitiveArrayCritical))(env,tcoordsetmap, NULL); - for (i = 0; i < numActiveTexUnit; i++) { - if ((i < texCoordMapLength) && ( - ((texSet=texCoordSetMap[i]) != -1))) { - - ptexCoords = texCoordPointer[texSet]; - - enableTexCoordPointer(ctxProperties, i, texStride, - GL_FLOAT, 0, - ptexCoords); - - } else { - - disableTexCoordPointer(ctxProperties, i); - } - } - - /* Reset client active texture unit to 0 */ - clientActiveTextureUnit(ctxProperties, 0); - } - indices = (jint *) (*(table->GetPrimitiveArrayCritical))(env, indexCoord, NULL); - - lockArray(ctxProperties, vertexCount); - - 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) { - - countArray = (GLint *) (*(table->GetPrimitiveArrayCritical))(env, sarray, - NULL); - - switch (geo_type) { - case GEO_TYPE_INDEXED_TRI_STRIP_SET : - primType = GL_TRIANGLE_STRIP; - break; - case GEO_TYPE_INDEXED_TRI_FAN_SET : - primType = GL_TRIANGLE_FAN; - break; - case GEO_TYPE_INDEXED_LINE_STRIP_SET : - primType = GL_LINE_STRIP; - break; - } - - - - if (ctxProperties->multi_draw_arrays_ext || ctxProperties->multi_draw_arrays_sun) { - if (strip_len > 100) { - multiDrawElementsIndices = (jint**)malloc(strip_len * sizeof(int*)); - allocated = 1; - } - else { - multiDrawElementsIndices = (jint**)&tmpDrawElementsIndices; - } - - offset = initialIndexIndex; - for (i=0; i < strip_len;i++) { - multiDrawElementsIndices[i] = &indices[offset]; - offset += countArray[i]; - } - ctxProperties->glMultiDrawElementsEXT(primType, countArray, GL_UNSIGNED_INT,(const void **)multiDrawElementsIndices, strip_len); - - } else { - offset = initialIndexIndex; - for (i=0; i < strip_len;i++) { - glDrawElements(primType, countArray[i], GL_UNSIGNED_INT, &indices[offset]); - offset += countArray[i]; - } - } - - (*(table->ReleasePrimitiveArrayCritical))(env, sarray, countArray, 0); - if (allocated) { - free(multiDrawElementsIndices); - } - } - else { - switch (geo_type){ - case GEO_TYPE_INDEXED_QUAD_SET : glDrawElements(GL_QUADS,validIndexCount, GL_UNSIGNED_INT, &indices[initialIndexIndex]);break; - case GEO_TYPE_INDEXED_TRI_SET : glDrawElements(GL_TRIANGLES, validIndexCount, GL_UNSIGNED_INT, &indices[initialIndexIndex]);break; - case GEO_TYPE_INDEXED_POINT_SET : glDrawElements(GL_POINTS, validIndexCount, GL_UNSIGNED_INT, &indices[initialIndexIndex]);break; - case GEO_TYPE_INDEXED_LINE_SET: glDrawElements(GL_LINES, validIndexCount, GL_UNSIGNED_INT, &indices[initialIndexIndex]);break; - } - } - - unlockArray(ctxProperties); - - /* clean up if we turned on normalize */ - if (isNonUniformScale) { - glDisable(GL_NORMALIZE); - } - - (*(table->ReleasePrimitiveArrayCritical))(env, indexCoord, indices, 0); - - if (vattrDefined) { - resetVertexAttrs(ctxInfo, vertexAttrCount); - } - - if (textureDefined) { - resetTexture(ctxInfo); - - (*(table->ReleasePrimitiveArrayCritical))(env, tcoordsetmap, texCoordSetMap, 0); - } -} - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_executeIndexedGeometryVA( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jobject geo, - jint geo_type, - jboolean isNonUniformScale, - jboolean ignoreVertexColors, - jint initialIndexIndex, - jint validIndexCount, - jint vertexCount, - jint vformat, - jint vdefined, - jfloatArray vfcoords, - jdoubleArray vdcoords, - jfloatArray cfdata, - jbyteArray cbdata, - jfloatArray ndata, - jint vertexAttrCount, - jintArray vertexAttrSizes, - jobjectArray vertexAttrData, - jint texCoordMapLength, - jintArray tcoordsetmap, - jint numActiveTexUnit, - jint texStride, - jobjectArray texCoords, - jint cdirty, - jintArray indexCoord) -{ - jfieldID strip_field; - jarray sarray; - jsize strip_len; - JNIEnv table; - jint i; - jclass geo_class; - - jfloat *fverts = NULL; - jdouble *dverts = NULL; - jbyte *bclrs = NULL; - jfloat *fclrs = NULL, *norms = NULL; - 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; - - 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) { - - strip_field = (jfieldID) (*(table->GetFieldID))(env, geo_class, - "stripIndexCounts", "[I"); - sarray = (jarray)(*(table->GetObjectField))(env, geo, strip_field); - strip_len = (jsize)(*(table->GetArrayLength))(env, sarray); - - } - - /* 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) - texCoordPointer[i] = (jfloat*)(*(table->GetPrimitiveArrayCritical))(env,texobjs[i], NULL); - else - texCoordPointer[i] = NULL; - - } - } - - /* get coordinate array */ - if (floatCoordDefined) { - fverts= (jfloat *) (*(table->GetPrimitiveArrayCritical))(env, vfcoords, NULL); - } else if (doubleCoordDefined) { - dverts= (jdouble *) (*(table->GetPrimitiveArrayCritical))(env, vdcoords, NULL); - } - - /* get color array */ - if (floatColorsDefined) { - fclrs = (jfloat *) (*(table->GetPrimitiveArrayCritical))(env, cfdata, NULL); - } else if (byteColorsDefined) { - bclrs = (jbyte *) (*(table->GetPrimitiveArrayCritical))(env, cbdata, NULL); - } - - /* get normal array */ - if (normalsDefined) { - norms = (jfloat *) (*(table->GetPrimitiveArrayCritical))(env,ndata, NULL); - } - -#ifdef VERBOSE - fprintf(stderr, "IndexedGeometryArrayRetained.executeIndexedGeometryVA() -- calling executeIndexedGeometryArrayVA\n"); -#endif /* VERBOSE */ - - executeIndexedGeometryArrayVA(env, - obj, - ctxInfo, - geo, - geo_type, - isNonUniformScale, - ignoreVertexColors, - initialIndexIndex, - validIndexCount, - vertexCount, - vformat, - vdefined, - fverts, - dverts, - fclrs, - bclrs, - norms, - vertexAttrCount, - vertexAttrSizes, - vertexAttrPointer, - texCoordMapLength, - tcoordsetmap, - numActiveTexUnit, - texStride, - texCoordPointer, - cdirty, - indexCoord, - sarray, - strip_len); - - if (floatCoordDefined) { - (*(table->ReleasePrimitiveArrayCritical))(env, vfcoords, fverts, 0); - } - else if (doubleCoordDefined) { - (*(table->ReleasePrimitiveArrayCritical))(env, vdcoords, dverts, 0); - } - - if (floatColorsDefined) { - (*(table->ReleasePrimitiveArrayCritical))(env, cfdata, fclrs, 0); - } - else if (byteColorsDefined) { - (*(table->ReleasePrimitiveArrayCritical))(env, cbdata, bclrs, 0); - } - - if (normalsDefined) { - (*(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) { - (*(table->ReleasePrimitiveArrayCritical))(env, texobjs[i], texCoordPointer[i], 0); - } - } - } - - if (texobjs != NULL) { - free(texobjs); - } - if (texCoordPointer != NULL) { - free(texCoordPointer); - } -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_executeIndexedGeometryVABuffer( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jobject geo, - jint geo_type, - jboolean isNonUniformScale, - jboolean ignoreVertexColors, - jint initialIndexIndex, - jint validIndexCount, - jint vertexCount, - jint vformat, - jint vdefined, - jobject vcoords, - jobject cdataBuffer, - jfloatArray cfdata, - jbyteArray cbdata, - jobject ndata, - jint vertexAttrCount, - jintArray vertexAttrSizes, - jobjectArray vertexAttrData, - jint texCoordMapLength, - jintArray tcoordsetmap, - jint numActiveTexUnit, - jint texStride, - jobjectArray texCoords, - jint cdirty, - jintArray indexCoord) -{ - jfieldID strip_field; - jarray sarray; - jsize strip_len; - JNIEnv table; - jint i; - jclass geo_class; - - jfloat *fverts = NULL; - jdouble *dverts = NULL; - jbyte *bclrs = NULL; - jfloat *fclrs = NULL, *norms = NULL; - 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; - - 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) { - - strip_field = (jfieldID) (*(table->GetFieldID))(env, geo_class, - "stripIndexCounts", "[I"); - sarray = (jarray)(*(table->GetObjectField))(env, geo, strip_field); - 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++) { - if (texobjs[i] != NULL) - texCoordPointer[i] = (jfloat*)(*(table->GetDirectBufferAddress))(env,texobjs[i]); - else - texCoordPointer[i] = NULL; - - } - } - - /* 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) - fclrs = (jfloat *) (*(table->GetPrimitiveArrayCritical))(env, cfdata, NULL); - else - fclrs = (jfloat *)(*(table->GetDirectBufferAddress))(env, cdataBuffer); - } - else if (byteColorsDefined) { - if(cbdata != NULL) - bclrs = (jbyte *) (*(table->GetPrimitiveArrayCritical))(env, cbdata, NULL); - 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, - geo, - geo_type, - isNonUniformScale, - ignoreVertexColors, - initialIndexIndex, - validIndexCount, - vertexCount, - vformat, - vdefined, - fverts, - dverts, - fclrs, - bclrs, - norms, - vertexAttrCount, - vertexAttrSizes, - vertexAttrPointer, - texCoordMapLength, - tcoordsetmap, - numActiveTexUnit, - texStride, - texCoordPointer, - cdirty, - indexCoord, - sarray, - strip_len); - - if(floatColorsDefined && cfdata != NULL) - (*(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_NativePipeline_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; - - jfloat *verts; - jint *indices; - jint i; - jint bstride; - jint texStride, *texCoordSetMapOffset, texSize; - GLsizei *countArray; - GLenum iaFormat; - int useInterleavedArrays; - jsize strip_len; - int primType; - jint stride, coordoff, normoff, coloroff, texCoordoff; - jfieldID strip_field; - jarray sarray; - jdouble *xform_ptr = NULL; - jdouble *nxform_ptr = NULL; - jfloat *tmpCoordArray = NULL, *tmpNormalArray = NULL; - jint* tmpDrawElementsIndices[100]; - - 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; - } - else { - glDisableClientState(GL_VERTEX_ARRAY); - } - - if ((vformat & GA_NORMALS) != 0) { - glEnableClientState(GL_NORMAL_ARRAY); - stride += 3; - coordoff += 3; - } - else { - glDisableClientState(GL_NORMAL_ARRAY); - } - - if ((vformat & GA_COLOR) != 0) { - glEnableClientState(GL_COLOR_ARRAY); - stride += 4; - normoff += 4; - coordoff += 4; - } - else { - glDisableClientState(GL_COLOR_ARRAY); - } - - if ((vformat & GA_TEXTURE_COORDINATE) != 0) { - if ((vformat & GA_TEXTURE_COORDINATE_2) != 0) { - texSize = 2; - texStride = 2 * texCoordSetCount; - } else if ((vformat & GA_TEXTURE_COORDINATE_3) != 0) { - texSize = 3; - texStride = 3 * texCoordSetCount; - } else if ((vformat & GA_TEXTURE_COORDINATE_4) != 0) { - texSize = 4; - texStride = 4 * texCoordSetCount; - } - stride += texStride; - normoff += texStride; - coloroff += texStride; - 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); - - /* - * process alpha for geometryArray without alpha - */ - if (updateAlpha == JNI_TRUE && ignoreVertexColors == JNI_FALSE) { - useAlpha = JNI_TRUE; - } - - /* - * call other JNI functions before entering Critical region - * i.e., GetPrimitiveArrayCritical - */ - 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) { - - strip_field = (jfieldID) (*(table->GetFieldID))(env, geo_class, - "stripIndexCounts", "[I"); - sarray = (jarray)(*(table->GetObjectField))(env, geo, strip_field); - strip_len = (jsize)(*(table->GetArrayLength))(env, sarray); - } - - - - /* begin critical region */ - verts = (jfloat *) (*(table->GetPrimitiveArrayCritical))(env, varray, NULL); - - indices = (jint *) (*(table->GetPrimitiveArrayCritical))(env, indexCoord, NULL); - - if (texCoordSetMapLen >0) { - texCoordSetMapOffset = (jint *)(*(table->GetPrimitiveArrayCritical)) - (env, texUnitOffset, NULL); - } - - - /* get the static transform if exists */ - if (xform != NULL) { - xform_ptr = (jdouble *) (*(table->GetPrimitiveArrayCritical))( - env, xform, NULL); - - } - - - /* get the static normals transform if exists */ - if (nxform != NULL) { - nxform_ptr = (jdouble *) (*(table->GetPrimitiveArrayCritical))( - env, nxform, NULL); - } - - - /* - * Check if normal is present and nxform_ptr id non-null, if yes, - * create a new normal array and apply the xform - */ - if ((vformat & GA_NORMALS) != 0 && (nxform_ptr != NULL)) { - /* create a temporary array for normals */ - tmpNormalArray = (jfloat*) malloc(vertexCount * sizeof(float) * 3); - for (i = 0; i < vertexCount*3; i+=3) { - tmpNormalArray[i] = (float) (nxform_ptr[0] * verts[normoff] + - nxform_ptr[1] * verts[normoff+1] + - nxform_ptr[2] * verts[normoff+2]); - tmpNormalArray[i+1] = (float) (nxform_ptr[4] * verts[normoff] + - nxform_ptr[5] * verts[normoff+1] + - nxform_ptr[6] * verts[normoff+2]); - tmpNormalArray[i+2] = (float) (nxform_ptr[8] * verts[normoff] + - nxform_ptr[9] * verts[normoff+1] + - nxform_ptr[10] * verts[normoff+2]); - normoff += stride; - } - } - - if ((vformat & GA_COORDINATES) != 0 && xform_ptr != NULL) { - /* create a temporary array for normals */ - tmpCoordArray = (jfloat*) malloc(vertexCount * sizeof(float) * 3); - for (i = 0; i < vertexCount*3; i+=3) { - tmpCoordArray[i] = (float) (xform_ptr[0] * verts[coordoff] + - xform_ptr[1] * verts[coordoff+1] + - xform_ptr[2] * verts[coordoff+2]); - tmpCoordArray[i+1] = (float) (xform_ptr[4] * verts[coordoff] + - xform_ptr[5] * verts[coordoff+1] + - xform_ptr[6] * verts[coordoff+2]); - tmpCoordArray[i+2] = (float) (xform_ptr[8] * verts[coordoff] + - xform_ptr[9] * verts[coordoff+1] + - xform_ptr[10] * verts[coordoff+2]); - coordoff += stride; - } - } - - - 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) { - - - switch (geo_type) { - case GEO_TYPE_INDEXED_TRI_STRIP_SET : - primType = GL_TRIANGLE_STRIP; - break; - case GEO_TYPE_INDEXED_TRI_FAN_SET : - primType = GL_TRIANGLE_FAN; - break; - case GEO_TYPE_INDEXED_LINE_STRIP_SET : - primType = GL_LINE_STRIP; - break; - } - - - countArray = (GLsizei *) (*(table->GetPrimitiveArrayCritical))(env, sarray, - NULL); - - if ((ignoreVertexColors == JNI_TRUE) || (xform_ptr != NULL) || - ((vformat & GA_TEXTURE_COORDINATE) && ((texCoordSetMapLen > 1) || - (texCoordSetCount > 1)))) { - useInterleavedArrays = 0; - } else { - INTERLEAVEDARRAYS_TEST() - } - - if (useInterleavedArrays) { - glInterleavedArrays(iaFormat, bstride, verts); - } else { - if (vformat & GA_NORMALS) { - if (nxform_ptr == NULL) { - glNormalPointer(GL_FLOAT, bstride, &(verts[normoff])); - } - else { - glNormalPointer(GL_FLOAT, 3 * sizeof(float), tmpNormalArray); - } - } - if (ignoreVertexColors == JNI_FALSE && vformat & GA_COLOR) { - if (vformat & GA_WITH_ALPHA || (useAlpha == GL_TRUE)) { - glColorPointer(4, GL_FLOAT, bstride, &(verts[coloroff])); - } else { - /* - for (i = 0; i < vcount; i++) { - fprintf(stderr, "r = %f, g = %f, b = %f\n", verts[i*bstride +coloroff], verts[i*bstride +coloroff+1],verts[i*bstride +coloroff+2]); - } - */ - glColorPointer(3, GL_FLOAT, bstride, &(verts[coloroff])); - } - } - if (vformat & GA_COORDINATES) { - if (xform_ptr == NULL) { - /* - for (i = 0; i < vcount; i++) { - fprintf(stderr, "x = %f, y = %f, z = %f\n", verts[i*bstride +coordoff], verts[i*bstride +coordoff+1],verts[i*bstride +coordoff+2]); - } - */ - glVertexPointer(3, GL_FLOAT, bstride, &(verts[coordoff])); - } - else { - glVertexPointer(3, GL_FLOAT, 3 * sizeof(float), tmpCoordArray); - } - } - - if (vformat & GA_TEXTURE_COORDINATE) { - - executeTexture(texCoordSetMapLen, - texSize, bstride, texCoordoff, - texCoordSetMapOffset, - texCoordSetMapLen, - 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) { - case GEO_TYPE_INDEXED_TRI_STRIP_SET : - primType = GL_TRIANGLE_STRIP; - break; - case GEO_TYPE_INDEXED_TRI_FAN_SET : - primType = GL_TRIANGLE_FAN; - break; - case GEO_TYPE_INDEXED_LINE_STRIP_SET : - primType = GL_LINE_STRIP; - break; - } - - lockArray(ctxProperties, vertexCount); - - if (ctxProperties->multi_draw_arrays_ext || ctxProperties->multi_draw_arrays_sun) { - if (strip_len > 100) { - multiDrawElementsIndices = (jint**)malloc(strip_len * sizeof(int*)); - allocated = 1; - } - else { - multiDrawElementsIndices =(jint**) &tmpDrawElementsIndices; - } - - offset = initialIndexIndex; - for (i=0; i < strip_len;i++) { - multiDrawElementsIndices[i] = &indices[offset]; - offset += countArray[i]; - } - ctxProperties->glMultiDrawElementsEXT(primType, countArray, GL_UNSIGNED_INT,(const void **)multiDrawElementsIndices, strip_len); - - } else { - offset = initialIndexIndex; - for (i=0; i < strip_len;i++) { - glDrawElements(primType, countArray[i], GL_UNSIGNED_INT, &indices[offset]); - offset += countArray[i]; - } - } - (*(table->ReleasePrimitiveArrayCritical))(env, sarray, countArray, 0); - if (allocated) { - free(multiDrawElementsIndices); - } - - - } - else if ((geo_type == GEO_TYPE_INDEXED_QUAD_SET) || - (geo_type == GEO_TYPE_INDEXED_TRI_SET) || - (geo_type == GEO_TYPE_INDEXED_POINT_SET) || - (geo_type == GEO_TYPE_INDEXED_LINE_SET)) { - - switch (geo_type) { - case GEO_TYPE_INDEXED_QUAD_SET : - primType = GL_QUADS; - break; - case GEO_TYPE_INDEXED_TRI_SET : - primType = GL_TRIANGLES; - break; - case GEO_TYPE_INDEXED_POINT_SET : - primType = GL_POINTS; - break; - case GEO_TYPE_INDEXED_LINE_SET : - primType = GL_LINES; - break; - - } - - if ((ignoreVertexColors == JNI_TRUE) || (xform_ptr != NULL) || - ((vformat & GA_TEXTURE_COORDINATE) && ((texCoordSetMapLen > 1) || - (texCoordSetCount > 1)))) { - useInterleavedArrays = 0; - } else { - INTERLEAVEDARRAYS_TEST() - } - - if (useInterleavedArrays) { - glInterleavedArrays(iaFormat, bstride, verts); - } else { - if (vformat & GA_NORMALS) { - - if (nxform_ptr == NULL) { - glNormalPointer(GL_FLOAT, bstride, &(verts[normoff])); - } - else { - glNormalPointer(GL_FLOAT, 3 * sizeof(float), tmpNormalArray); - } - } - if (ignoreVertexColors == JNI_FALSE && vformat & GA_COLOR) { - if (vformat & GA_WITH_ALPHA || (useAlpha == GL_TRUE)) { - glColorPointer(4, GL_FLOAT, bstride, &(verts[coloroff])); - } else { - glColorPointer(3, GL_FLOAT, bstride, &(verts[coloroff])); - } - } - if (vformat & GA_COORDINATES) { - - if (xform_ptr == NULL) { - glVertexPointer(3, GL_FLOAT, bstride, &(verts[coordoff])); - } - else { - glVertexPointer(3, GL_FLOAT, 3 * sizeof(float), tmpCoordArray); - } - } - - if (vformat & GA_TEXTURE_COORDINATE) { - executeTexture(texCoordSetMapLen, - texSize, bstride, texCoordoff, - texCoordSetMapOffset, - texCoordSetMapLen, - 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){ - case GEO_TYPE_INDEXED_QUAD_SET : glDrawElements(GL_QUADS,validIndexCount, GL_UNSIGNED_INT, &indices[initialIndexIndex]);break; - case GEO_TYPE_INDEXED_TRI_SET : glDrawElements(GL_TRIANGLES, validIndexCount, GL_UNSIGNED_INT, &indices[initialIndexIndex]);break; - case GEO_TYPE_INDEXED_POINT_SET : glDrawElements(GL_POINTS, validIndexCount, GL_UNSIGNED_INT, &indices[initialIndexIndex]);break; - case GEO_TYPE_INDEXED_LINE_SET: glDrawElements(GL_LINES, validIndexCount, GL_UNSIGNED_INT, &indices[initialIndexIndex]);break; - } - } - - unlockArray(ctxProperties); - - if (vformat & GA_VERTEX_ATTRIBUTES) { - resetVertexAttrs(ctxInfo, vertexAttrCount); - } - - if (vformat & GA_TEXTURE_COORDINATE) { - resetTexture(ctxInfo); - } - - if (tmpNormalArray != NULL) { - free(tmpNormalArray); - } - if (tmpCoordArray != NULL) { - free(tmpCoordArray); - } - - (*(table->ReleasePrimitiveArrayCritical))(env, varray, verts, 0); - - (*(table->ReleasePrimitiveArrayCritical))(env, indexCoord, indices, 0); - - - if (texCoordSetMapLen > 0) - (*(table->ReleasePrimitiveArrayCritical))(env, texUnitOffset, - texCoordSetMapOffset, 0); - - if (xform_ptr != NULL) - (*(table->ReleasePrimitiveArrayCritical))(env, xform, xform_ptr, 0); - - 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 */ -/* - * 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_NativePipeline_buildGAForByRef( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jobject geo, - jint geo_type, - jboolean isNonUniformScale, - jboolean updateAlpha, - jfloat alpha, - jboolean ignoreVertexColors, - jint vcount, - jint vformat, - jint vdefined, - jint initialCoordIndex, - jfloatArray vfcoords, - jdoubleArray vdcoords, - jint initialColorIndex, - jfloatArray cfdata, - jbyteArray cbdata, - jint initialNormalIndex, - jfloatArray ndata, - jint vertexAttrCount, - jintArray vertexAttrSizes, - jintArray vertexAttrIndices, - jobjectArray vertexAttrData, - jint texCoordMapLength, - jintArray tcoordsetmap, - jintArray texindices, - jint texStride, - jobjectArray texCoords, - jdoubleArray xform, - jdoubleArray nxform) -{ - jclass geo_class; - JNIEnv table; - jboolean useAlpha = JNI_FALSE; - jfieldID strip_field; - jarray sarray; - jint i; - jsize strip_len; - jarray start_array; - jfieldID start_field; - jfloat *fverts = NULL; - jdouble *dverts = NULL; - jbyte *bclrs = NULL; - jfloat *fclrs = NULL, *norms = NULL; - jdouble *xform_ptr = NULL; - jdouble *nxform_ptr = NULL; - jfloat *tmpFloatCoordArray = NULL, *tmpNormalArray = NULL, *tmpFloatColors = NULL; - jdouble *tmpDoubleCoordArray = NULL; - jbyte* tmpByteColors= NULL; - jfloat* fvptr = NULL, *nptr = NULL, *fcptr = NULL; - jdouble* dvptr = NULL; - jbyte* bcptr = NULL; - jarray *vaobjs = NULL; - jfloat **vertexAttrPointer = NULL; - jfloat **texCoordPointer = NULL; - jarray *texobjs = 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); - - 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); - } - } - - geo_class = (jclass) (*(table->GetObjectClass))(env, geo); - - /* - * process alpha for geometryArray without alpha - */ - if (updateAlpha == JNI_TRUE && ignoreVertexColors== JNI_FALSE) { - useAlpha = JNI_TRUE; - } - - /* - * call other JNI functions before entering Critical region - * i.e., GetPrimitiveArrayCritical - */ - if (geo_type == GEO_TYPE_TRI_STRIP_SET || - geo_type == GEO_TYPE_TRI_FAN_SET || - geo_type == GEO_TYPE_LINE_STRIP_SET) { - - strip_field = (jfieldID) (*(table->GetFieldID))(env, geo_class, - "stripVertexCounts", "[I"); - sarray = (jarray)(*(table->GetObjectField))(env, geo, strip_field); - strip_len = (jsize)(*(table->GetArrayLength))(env, sarray); - start_field = (jfieldID) (*(table->GetFieldID))(env, geo_class, - "stripStartOffsetIndices", "[I"); - start_array = (jarray)(*(table->GetObjectField))(env, geo, - start_field); - } - - if (ignoreVertexColors == JNI_TRUE) { - vformat &= ~GA_COLOR; - 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) { - for (i = 0; i < texCoordMapLength; i++) { - if (texobjs[i] != NULL) - texCoordPointer[i] = (jfloat*)(*(table->GetPrimitiveArrayCritical))(env,texobjs[i], NULL); - else - texCoordPointer[i] = NULL; - } - } - - /* get coordinate array */ - if (floatCoordDefined) { - glEnableClientState(GL_VERTEX_ARRAY); - fverts= (jfloat *) (*(table->GetPrimitiveArrayCritical))(env, vfcoords, NULL); - fvptr = fverts; - } else if (doubleCoordDefined) { - glEnableClientState(GL_VERTEX_ARRAY); - dverts= (jdouble *) (*(table->GetPrimitiveArrayCritical))(env, vdcoords, NULL); - dvptr = dverts; - } - else { - glDisableClientState(GL_VERTEX_ARRAY); - } - - /* get color array */ - if (floatColorsDefined) { - glEnableClientState(GL_COLOR_ARRAY); - fclrs = (jfloat *) (*(table->GetPrimitiveArrayCritical))(env, cfdata, NULL); - fcptr = fclrs; - } else if (byteColorsDefined) { - glEnableClientState(GL_COLOR_ARRAY); - bclrs = (jbyte *) (*(table->GetPrimitiveArrayCritical))(env, cbdata, NULL); - bcptr = bclrs; - } - else { - glDisableClientState(GL_COLOR_ARRAY); - } - /* get normal array */ - if (normalsDefined) { - glEnableClientState(GL_NORMAL_ARRAY); - norms = (jfloat *) (*(table->GetPrimitiveArrayCritical))(env,ndata, NULL); - nptr = norms; - } - else { - glDisableClientState(GL_NORMAL_ARRAY); - } - - /* get the static transform if exists */ - if (xform != NULL) { - xform_ptr = (jdouble *) (*(table->GetPrimitiveArrayCritical))( - env, xform, NULL); - - } - - - /* get the static normals transform if exists */ - if (nxform != NULL) { - nxform_ptr = (jdouble *) (*(table->GetPrimitiveArrayCritical))( - env, nxform, NULL); - } - - /* - * Check if normal is present and nxform_ptr id non-null, if yes, - * create a new normal array and apply the xform - */ - if (normalsDefined) { - if(nxform_ptr != NULL) { - /* create a temporary array for normals */ - tmpNormalArray = (jfloat*) malloc(vcount * sizeof(float) * 3); - for (i = initialNormalIndex; i < vcount*3; i+=3) { - tmpNormalArray[i] = (float) (nxform_ptr[0] * norms[i] + - nxform_ptr[1] * norms[i+1] + - nxform_ptr[2] * norms[i+2]); - tmpNormalArray[i+1] = (float) (nxform_ptr[4] * norms[i] + - nxform_ptr[5] * norms[i+1] + - nxform_ptr[6] * norms[i+2]); - tmpNormalArray[i+2] = (float) (nxform_ptr[8] * norms[i] + - nxform_ptr[9] * norms[i+1] + - nxform_ptr[10] * norms[i+2]); - } - nptr = tmpNormalArray; - } - - } - - if (xform_ptr != NULL) { - if (floatCoordDefined) { - /* create a temporary array for normals */ - tmpFloatCoordArray = (jfloat*) malloc(vcount * sizeof(float) * 3); - for (i = initialCoordIndex; i < vcount*3; i+=3) { - tmpFloatCoordArray[i] = (float) (xform_ptr[0] * fverts[i] + - xform_ptr[1] * fverts[i+1] + - xform_ptr[2] * fverts[i+2]); - tmpFloatCoordArray[i+1] = (float) (xform_ptr[4] * fverts[i] + - xform_ptr[5] * fverts[i+1] + - xform_ptr[6] * fverts[i+2]); - tmpFloatCoordArray[i+2] = (float) (xform_ptr[8] * fverts[i] + - xform_ptr[9] * fverts[i+1] + - xform_ptr[10] * fverts[i+2]); - } - fvptr = tmpFloatCoordArray; - } - else { - tmpDoubleCoordArray = (jdouble*) malloc(vcount * sizeof(double) * 3); - for (i = initialCoordIndex; i < vcount*3; i+=3) { - tmpDoubleCoordArray[i] = (double) (xform_ptr[0] * dverts[i] + - xform_ptr[1] * dverts[i+1] + - xform_ptr[2] * dverts[i+2]); - tmpDoubleCoordArray[i+1] = (double) (xform_ptr[4] * dverts[i] + - xform_ptr[5] * dverts[i+1] + - xform_ptr[6] * dverts[i+2]); - tmpDoubleCoordArray[i+2] = (double) (xform_ptr[8] * dverts[i] + - xform_ptr[9] * dverts[i+1] + - xform_ptr[10] * dverts[i+2]); - } - dvptr = tmpDoubleCoordArray; - } - - } - /* - fprintf(stderr, "floatColorsDefined = %d, useAlpha = %d\n", - floatColorsDefined,useAlpha); - */ - if (floatColorsDefined && useAlpha) { - tmpFloatColors = (jfloat*)malloc(vcount*sizeof(float) * 4); - if ((vformat & GA_WITH_ALPHA) != 0) { - /* fprintf(stderr, "with Alpha\n") */ - for (i = initialColorIndex; i < vcount*4; i+=4) { - tmpFloatColors[i] = fclrs[i]; - tmpFloatColors[i+1] = fclrs[i+1]; - tmpFloatColors[i+2] = fclrs[i+2]; - tmpFloatColors[i+3] = (float)(alpha* fclrs[i+3]); - } - } - else { - /* fprintf(stderr, "without Alpha\n") */ - int k = 0; - for (i = initialColorIndex; i < vcount*4; i+=4) { - tmpFloatColors[i] = fclrs[k++]; - tmpFloatColors[i+1] = fclrs[k++]; - tmpFloatColors[i+2] = fclrs[k++]; - tmpFloatColors[i+3] = (float)(alpha); - } - } - fcptr = tmpFloatColors; - vformat |= GA_WITH_ALPHA; - } - else if (byteColorsDefined && useAlpha) { - tmpByteColors = (jbyte*)malloc(vcount*sizeof(jbyte) * 4); - if ((vformat & GA_WITH_ALPHA) != 0) { - for (i = initialColorIndex; i < vcount*4; i+=4) { - tmpByteColors[i] = bclrs[i]; - tmpByteColors[i+1] = bclrs[i+1]; - tmpByteColors[i+2] =bclrs[i+2]; - tmpByteColors[i+3] = (jbyte) (alpha * ((int)bclrs[i+3] & 0xff)); - } - } - else { - int k = 0; - for (i = initialColorIndex; i < vcount*4; i+=4) { - tmpByteColors[i] = bclrs[k++]; - tmpByteColors[i+1] = bclrs[k++]; - tmpByteColors[i+2] =bclrs[k++]; - tmpByteColors[i+3] = (jbyte) (alpha * 255.0); - } - } - bcptr = tmpByteColors; - vformat |= GA_WITH_ALPHA; - - } - -#ifdef VERBOSE - fprintf(stderr, "GeometryArrayRetained.buildGAForByRef() -- calling executeGeometryArrayVA\n"); -#endif /* VERBOSE */ - - executeGeometryArrayVA(env, obj, ctxInfo, geo, geo_type, isNonUniformScale, - ignoreVertexColors, vcount, vformat, vdefined, - initialCoordIndex, fvptr, dvptr, initialColorIndex, - fcptr, bcptr, initialNormalIndex, - nptr, vertexAttrCount, vertexAttrSizes, - vertexAttrIndices, vertexAttrPointer, texCoordMapLength, - tcoordsetmap, texCoordMapLength, - 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) { - for (i = 0; i < texCoordMapLength; i++) { - if (texCoordPointer[i] != NULL) { - (*(table->ReleasePrimitiveArrayCritical))(env, texobjs[i], texCoordPointer[i], 0); - } - } - } - - if (texobjs != NULL) { - free(texobjs); - } - if (texCoordPointer != NULL) { - free(texCoordPointer); - } - - if (normalsDefined) { - (*env)->ReleasePrimitiveArrayCritical(env, ndata, norms, 0); - if (tmpNormalArray != NULL) { - free(tmpNormalArray); - } - } - - - if (floatColorsDefined) { - (*env)->ReleasePrimitiveArrayCritical(env, cfdata, fclrs, 0); - if (tmpFloatColors != NULL) { - free(tmpFloatColors); - } - } - else if (byteColorsDefined) { - (*env)->ReleasePrimitiveArrayCritical(env, cbdata, bclrs, 0); - if (tmpByteColors != NULL) { - free(tmpByteColors); - } - } - - - if (floatCoordDefined) { - (*env)->ReleasePrimitiveArrayCritical(env, vfcoords, fverts, 0); - if (tmpFloatCoordArray != NULL) { - free(tmpFloatCoordArray); - } - } - else if (doubleCoordDefined) { - (*env)->ReleasePrimitiveArrayCritical(env, vdcoords, dverts, 0); - if (tmpDoubleCoordArray != NULL) { - free(tmpDoubleCoordArray); - } - } -} - - -/* 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_NativePipeline_buildGAForBuffer( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jobject geo, - jint geo_type, - jboolean isNonUniformScale, - jboolean updateAlpha, - jfloat alpha, - jboolean ignoreVertexColors, - jint vcount, - jint vformat, - jint vdefined, - jint initialCoordIndex, - jobject vcoords, - jint initialColorIndex, - jobject cdataBuffer, - jint initialNormalIndex, - jobject ndata, - jint texCoordMapLength, - jintArray tcoordsetmap, - jintArray texindices, - jint texStride, - jobjectArray texCoords, - jdoubleArray xform, - jdoubleArray nxform) -{ - jclass geo_class; - JNIEnv table; - jboolean useAlpha = JNI_FALSE; - jfieldID strip_field; - jarray sarray; - jint i; - jsize strip_len; - jarray start_array; - jfieldID start_field; - jfloat *fverts = NULL; - jdouble *dverts = NULL; - jbyte *bclrs = NULL; - jfloat *fclrs = NULL, *norms = NULL; - jdouble *xform_ptr = NULL; - jdouble *nxform_ptr = NULL; - jfloat *tmpFloatCoordArray = NULL, *tmpNormalArray = NULL, *tmpFloatColors = NULL; - jdouble *tmpDoubleCoordArray = NULL; - jbyte* tmpByteColors= NULL; - jfloat* fvptr = NULL, *nptr = NULL, *fcptr = NULL; - jdouble* dvptr = NULL; - jbyte* bcptr = 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 textureDefined = ((vdefined & javax_media_j3d_GeometryArrayRetained_TEXCOORD_FLOAT) != 0); - int offset = 0; - - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - 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); - } - } - - geo_class = (jclass) (*(table->GetObjectClass))(env, geo); - - - /* - * process alpha for geometryArray without alpha - */ - if (updateAlpha == JNI_TRUE && ignoreVertexColors== JNI_FALSE) { - useAlpha = JNI_TRUE; - } - - /* - * call other JNI functions before entering Critical region - * i.e., GetPrimitiveArrayCritical - */ - if (geo_type == GEO_TYPE_TRI_STRIP_SET || - geo_type == GEO_TYPE_TRI_FAN_SET || - geo_type == GEO_TYPE_LINE_STRIP_SET) { - - strip_field = (jfieldID) (*(table->GetFieldID))(env, geo_class, - "stripVertexCounts", "[I"); - sarray = (jarray)(*(table->GetObjectField))(env, geo, strip_field); - strip_len = (jsize)(*(table->GetArrayLength))(env, sarray); - start_field = (jfieldID) (*(table->GetFieldID))(env, geo_class, - "stripStartOffsetIndices", "[I"); - start_array = (jarray)(*(table->GetObjectField))(env, geo, - start_field); - } - - if (ignoreVertexColors == JNI_TRUE) { - vformat &= ~GA_COLOR; - floatColorsDefined = JNI_FALSE; - byteColorsDefined = JNI_FALSE; - } - /* get texture arrays */ - if (textureDefined) { - for (i = 0; i < texCoordMapLength; i++) { - if (texobjs[i] != NULL) - texCoordPointer[i] = (jfloat*)(*(table->GetPrimitiveArrayCritical))(env,texobjs[i], NULL); - else - texCoordPointer[i] = NULL; - - } - } - - /* get coordinate array */ - if (floatCoordDefined) { - glEnableClientState(GL_VERTEX_ARRAY); - fverts= (jfloat *)(*(table->GetDirectBufferAddress))(env, vcoords ); - fvptr = fverts; - } else if (doubleCoordDefined) { - glEnableClientState(GL_VERTEX_ARRAY); - dverts= (jdouble *)(*(table->GetDirectBufferAddress))(env, vcoords ); - dvptr = dverts; - } - else { - glDisableClientState(GL_VERTEX_ARRAY); - } - - if(fverts == NULL && dverts == NULL) { - return; - } - - /* TODO KCR : get vertex attr arrays */ - - /* get color array */ - if (floatColorsDefined) { - glEnableClientState(GL_COLOR_ARRAY); - fclrs = (jfloat *)(*(table->GetDirectBufferAddress))(env, cdataBuffer); - fcptr = fclrs; - } else if (byteColorsDefined) { - glEnableClientState(GL_COLOR_ARRAY); - bclrs = (jbyte *)(*(table->GetDirectBufferAddress))(env, cdataBuffer); - bcptr = bclrs; - } - else { - glDisableClientState(GL_COLOR_ARRAY); - } - /* get normal array */ - if (normalsDefined) { - glEnableClientState(GL_NORMAL_ARRAY); - norms = (jfloat *)(*(table->GetDirectBufferAddress))(env, ndata); - nptr = norms; - } - else { - glDisableClientState(GL_NORMAL_ARRAY); - } - /* get the static transform if exists */ - if (xform != NULL) { - xform_ptr = (jdouble *) (*(table->GetPrimitiveArrayCritical))( - env, xform, NULL); - - } - - - /* get the static normals transform if exists */ - if (nxform != NULL) { - nxform_ptr = (jdouble *) (*(table->GetPrimitiveArrayCritical))( - env, nxform, NULL); - } - - - /* - * Check if normal is present and nxform_ptr id non-null, if yes, - * create a new normal array and apply the xform - */ - if (normalsDefined) { - if(nxform_ptr != NULL) { - /* create a temporary array for normals */ - tmpNormalArray = (jfloat*) malloc(vcount * sizeof(float) * 3); - for (i = initialNormalIndex; i < vcount*3; i+=3) { - tmpNormalArray[i] = (float) (nxform_ptr[0] * norms[i] + - nxform_ptr[1] * norms[i+1] + - nxform_ptr[2] * norms[i+2]); - tmpNormalArray[i+1] = (float) (nxform_ptr[4] * norms[i] + - nxform_ptr[5] * norms[i+1] + - nxform_ptr[6] * norms[i+2]); - tmpNormalArray[i+2] = (float) (nxform_ptr[8] * norms[i] + - nxform_ptr[9] * norms[i+1] + - nxform_ptr[10] * norms[i+2]); - } - nptr = tmpNormalArray; - } - - } - - if (xform_ptr != NULL) { - if (floatCoordDefined) { - /* create a temporary array for normals */ - tmpFloatCoordArray = (jfloat*) malloc(vcount * sizeof(float) * 3); - for (i = initialCoordIndex; i < vcount*3; i+=3) { - tmpFloatCoordArray[i] = (float) (xform_ptr[0] * fverts[i] + - xform_ptr[1] * fverts[i+1] + - xform_ptr[2] * fverts[i+2]); - tmpFloatCoordArray[i+1] = (float) (xform_ptr[4] * fverts[i] + - xform_ptr[5] * fverts[i+1] + - xform_ptr[6] * fverts[i+2]); - tmpFloatCoordArray[i+2] = (float) (xform_ptr[8] * fverts[i] + - xform_ptr[9] * fverts[i+1] + - xform_ptr[10] * fverts[i+2]); - } - fvptr = tmpFloatCoordArray; - } - else { - tmpDoubleCoordArray = (jdouble*) malloc(vcount * sizeof(double) * 3); - for (i = initialCoordIndex; i < vcount*3; i+=3) { - tmpDoubleCoordArray[i] = (double) (xform_ptr[0] * dverts[i] + - xform_ptr[1] * dverts[i+1] + - xform_ptr[2] * dverts[i+2]); - tmpDoubleCoordArray[i+1] = (double) (xform_ptr[4] * dverts[i] + - xform_ptr[5] * dverts[i+1] + - xform_ptr[6] * dverts[i+2]); - tmpDoubleCoordArray[i+2] = (double) (xform_ptr[8] * dverts[i] + - xform_ptr[9] * dverts[i+1] + - xform_ptr[10] * dverts[i+2]); - } - dvptr = tmpDoubleCoordArray; - } - - } - if (floatColorsDefined && useAlpha) { - tmpFloatColors = (jfloat*)malloc(vcount*sizeof(float) * 4); - if ((vformat & GA_WITH_ALPHA) != 0) { - for (i = initialColorIndex; i < vcount*4; i+=4) { - tmpFloatColors[i] = fclrs[i]; - tmpFloatColors[i+1] = fclrs[i+1]; - tmpFloatColors[i+2] = fclrs[i+2]; - tmpFloatColors[i+3] = (float)(alpha* fclrs[i+3]); - } - } - else { - int k = 0; - for (i = initialColorIndex; i < vcount*4; i+=4) { - tmpFloatColors[i] = fclrs[k++]; - tmpFloatColors[i+1] = fclrs[k++]; - tmpFloatColors[i+2] = fclrs[k++]; - tmpFloatColors[i+3] = (float)(alpha); - } - } - fcptr = tmpFloatColors; - vformat |= GA_WITH_ALPHA; - } - else if (byteColorsDefined && useAlpha) { - tmpByteColors = (jbyte*)malloc(vcount*sizeof(jbyte) * 4); - if ((vformat & GA_WITH_ALPHA) != 0) { - for (i = initialColorIndex; i < vcount*4; i+=4) { - tmpByteColors[i] = bclrs[i]; - tmpByteColors[i+1] = bclrs[i+1]; - tmpByteColors[i+2] =bclrs[i+2]; - tmpByteColors[i+3] = (jbyte) (alpha * ((int)bclrs[i+3] & 0xff)); - } - } - else { - int k = 0; - for (i = initialColorIndex; i < vcount*4; i+=4) { - tmpByteColors[i] = bclrs[k++]; - tmpByteColors[i+1] = bclrs[k++]; - tmpByteColors[i+2] =bclrs[k++]; - tmpByteColors[i+3] = (jbyte) (alpha * 255.0); - } - } - bcptr = tmpByteColors; - vformat |= GA_WITH_ALPHA; - - } - -#ifdef VERBOSE - fprintf(stderr, "GeometryArrayRetained.buildGAForBuffer() -- calling executeGeometryArrayVA\n"); -#endif /* VERBOSE */ - - executeGeometryArrayVA(env, obj, ctxInfo, geo, geo_type, - isNonUniformScale, ignoreVertexColors, - vcount, vformat, vdefined, initialCoordIndex, - fvptr, dvptr, initialColorIndex, - fcptr, bcptr, initialNormalIndex, - nptr, - /* TODO: vertexAttrCount, vertexAttrSizes, */ - /* TODO: vertexAttrIndices, vertexAttrPointer, */ - texCoordMapLength, - tcoordsetmap, texCoordMapLength, - texindices,texStride,texCoordPointer,0, sarray, strip_len, start_array); - if (textureDefined) { - for (i = 0; i < texCoordMapLength; i++) { - if (texCoordPointer[i] != NULL) { - (*(table->ReleasePrimitiveArrayCritical))(env, texobjs[i], texCoordPointer[i], 0); - } - } - } - - if (texobjs != NULL) { - free(texobjs); - } - if (texCoordPointer != NULL) { - free(texCoordPointer); - } - - if (tmpNormalArray != NULL) { - free(tmpNormalArray); - } - - - if (tmpFloatColors != NULL) { - free(tmpFloatColors); - } - else if (tmpByteColors != NULL) { - free(tmpByteColors); - } - - - if (tmpFloatCoordArray != NULL) { - free(tmpFloatCoordArray); - } - else if (tmpDoubleCoordArray != NULL) { - free(tmpFloatCoordArray); - } -} - -#endif /* 0 */ - diff --git a/src/native/ogl/GraphicsContext3D.c b/src/native/ogl/GraphicsContext3D.c deleted file mode 100644 index 2476878..0000000 --- a/src/native/ogl/GraphicsContext3D.c +++ /dev/null @@ -1,181 +0,0 @@ -/* - * $RCSfile$ - * - * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * $Revision$ - * $Date$ - * $State$ - */ - -#include <stdio.h> -#include <jni.h> - -#include "gldefs.h" - -extern void throwAssert(JNIEnv *env, char *str); - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_readRaster( - JNIEnv *env, jobject obj, jlong ctx, - jint type, jint xOffset, jint yOffset, - jint wRaster, jint hRaster, jint hCanvas, - jint imageDataType, - jint imageFormat, jobject imageBuffer, - jint depthFormat, jobject depthBuffer) -{ - JNIEnv table; - int yAdjusted; - GLenum oglFormat; - void *imageObjPtr; - void *depthObjPtr; - - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctx; - - table = *env; - - glPixelStorei(GL_PACK_ROW_LENGTH, wRaster); - glPixelStorei(GL_PACK_ALIGNMENT, 1); - yAdjusted = hCanvas - hRaster - yOffset; - - if ((type & javax_media_j3d_Raster_RASTER_COLOR) != 0) { - - imageObjPtr = - (void *)(*(table->GetPrimitiveArrayCritical))(env, (jarray)imageBuffer, NULL); - - if(imageDataType == IMAGE_DATA_TYPE_BYTE_ARRAY) { - - switch (imageFormat) { - /* GL_BGR */ - case IMAGE_FORMAT_BYTE_BGR: - oglFormat = GL_BGR; - break; - case IMAGE_FORMAT_BYTE_RGB: - oglFormat = GL_RGB; - break; - /* GL_ABGR_EXT */ - case IMAGE_FORMAT_BYTE_ABGR: - if (ctxProperties->abgr_ext) { /* If its zero, should never come here! */ - oglFormat = GL_ABGR_EXT; - } - else { - throwAssert(env, "readRaster : GL_ABGR_EXT format is unsupported"); - return; - } - break; - case IMAGE_FORMAT_BYTE_RGBA: - oglFormat = GL_RGBA; - break; - case IMAGE_FORMAT_BYTE_LA: - /* all LA types are stored as LA8 */ - oglFormat = GL_LUMINANCE_ALPHA; - break; - case IMAGE_FORMAT_BYTE_GRAY: - case IMAGE_FORMAT_USHORT_GRAY: - case IMAGE_FORMAT_INT_BGR: - case IMAGE_FORMAT_INT_RGB: - case IMAGE_FORMAT_INT_ARGB: - default: - throwAssert(env, "readRaster : imageFormat illegal format"); - return; - } - - glReadPixels(xOffset, yAdjusted, wRaster, hRaster, - oglFormat, GL_UNSIGNED_BYTE, imageObjPtr); - - } - else if(imageDataType == IMAGE_DATA_TYPE_INT_ARRAY) { - GLenum intType = GL_UNSIGNED_INT_8_8_8_8; - GLboolean forceAlphaToOne = GL_FALSE; - - switch (imageFormat) { - /* GL_BGR */ - case IMAGE_FORMAT_INT_BGR: /* Assume XBGR format */ - oglFormat = GL_RGBA; - intType = GL_UNSIGNED_INT_8_8_8_8_REV; - forceAlphaToOne = GL_TRUE; - break; - case IMAGE_FORMAT_INT_RGB: /* Assume XRGB format */ - forceAlphaToOne = GL_TRUE; - /* Fall through to next case */ - case IMAGE_FORMAT_INT_ARGB: - oglFormat = GL_BGRA; - intType = GL_UNSIGNED_INT_8_8_8_8_REV; - break; - /* This method only supports 3 and 4 components formats and INT types. */ - case IMAGE_FORMAT_BYTE_LA: - case IMAGE_FORMAT_BYTE_GRAY: - case IMAGE_FORMAT_USHORT_GRAY: - case IMAGE_FORMAT_BYTE_BGR: - case IMAGE_FORMAT_BYTE_RGB: - case IMAGE_FORMAT_BYTE_RGBA: - case IMAGE_FORMAT_BYTE_ABGR: - default: - throwAssert(env, "readRaster : imageFormat illegal format"); - return; - } - - /* Force Alpha to 1.0 if needed */ - if(forceAlphaToOne) { - glPixelTransferf(GL_ALPHA_SCALE, 0.0f); - glPixelTransferf(GL_ALPHA_BIAS, 1.0f); - } - - glReadPixels(xOffset, yAdjusted, wRaster, hRaster, - oglFormat, intType, imageObjPtr); - - /* Restore Alpha scale and bias */ - if(forceAlphaToOne) { - glPixelTransferf(GL_ALPHA_SCALE, 1.0f); - glPixelTransferf(GL_ALPHA_BIAS, 0.0f); - } - } - else { - throwAssert(env, "readRaster : illegal image data type"); - return; - } - - (*(table->ReleasePrimitiveArrayCritical))(env, imageBuffer, imageObjPtr, 0); - } - - if ((type & javax_media_j3d_Raster_RASTER_DEPTH) != 0) { - GLenum depthType = 0; - depthObjPtr = - (void *)(*(table->GetPrimitiveArrayCritical))(env, (jarray)depthBuffer, NULL); - - if (depthFormat == javax_media_j3d_DepthComponentRetained_DEPTH_COMPONENT_TYPE_INT) { - depthType = GL_UNSIGNED_INT; - } else { /* javax_media_j3d_DepthComponentRetained_DEPTH_COMPONENT_TYPE_FLOAT */ - depthType = GL_FLOAT; - } - - /* yOffset is adjusted for OpenGL - Y upward */ - glReadPixels(xOffset, yAdjusted, wRaster, hRaster, - GL_DEPTH_COMPONENT, depthType , depthObjPtr); - - (*(table->ReleasePrimitiveArrayCritical))(env, depthBuffer, depthObjPtr, 0); - } - -} - diff --git a/src/native/ogl/Lights.c b/src/native/ogl/Lights.c deleted file mode 100644 index e02a626..0000000 --- a/src/native/ogl/Lights.c +++ /dev/null @@ -1,187 +0,0 @@ -/* - * $RCSfile$ - * - * Copyright 1999-2008 Sun Microsystems, Inc. All Rights Reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * $Revision$ - * $Date$ - * $State$ - */ - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <math.h> -#include <jni.h> - -#include "gldefs.h" - -#ifdef DEBUG -/* Uncomment the following for VERBOSE debug messages */ -/* #define VERBOSE */ -#endif /* DEBUG */ - - -const float black[4] = { 0.0f, 0.0f, 0.0f, 1.0f }; - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateDirectionalLight( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint lightSlot, - jfloat red, - jfloat green, - jfloat blue, - jfloat dirx, - jfloat diry, - jfloat dirz) -{ - int lightNum; - float values[4]; - GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo; - jlong ctx = ctxProperties->context; - -#ifdef VERBOSE - fprintf(stderr, - "Directional Light %d: %f %f %f direction, %f %f %f color\n", - lightSlot, dirx, diry, dirz, red, green, blue); -#endif - lightNum = GL_LIGHT0 + lightSlot; - values[0] = red; - values[1] = green; - values[2] = blue; - values[3] = 1.0f; - glLightfv(lightNum, GL_DIFFUSE, values); - glLightfv(lightNum, GL_SPECULAR, values); - values[0] = -dirx; - values[1] = -diry; - values[2] = -dirz; - values[3] = 0.0f; - glLightfv(lightNum, GL_POSITION, values); - glLightfv(lightNum, GL_AMBIENT, black); - glLightf(lightNum, GL_CONSTANT_ATTENUATION, 1.0f); - glLightf(lightNum, GL_LINEAR_ATTENUATION, 0.0f); - glLightf(lightNum, GL_QUADRATIC_ATTENUATION, 0.0f); - glLightf(lightNum, GL_SPOT_EXPONENT, 0.0f); - glLightf(lightNum, GL_SPOT_CUTOFF, 180.0f); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updatePointLight( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint lightSlot, - jfloat red, - jfloat green, - jfloat blue, - jfloat attenx, - jfloat atteny, - jfloat attenz, - jfloat posx, - jfloat posy, - jfloat posz) -{ - int lightNum; - float values[4]; - -#ifdef VERBOSE - fprintf(stderr, "Positional Light %d: %f %f %f position, %f %f %f color\n\t %f %f %f attenuation\n", - lightSlot, posx, posy, posz, red, green, blue, - attenx, atteny, attenz); -#endif - - lightNum = GL_LIGHT0 + lightSlot; - values[0] = red; - values[1] = green; - values[2] = blue; - values[3] = 1.0f; - glLightfv(lightNum, GL_DIFFUSE, values); - glLightfv(lightNum, GL_SPECULAR, values); - glLightfv(lightNum, GL_AMBIENT, black); - values[0] = posx; - values[1] = posy; - values[2] = posz; - glLightfv(lightNum, GL_POSITION, values); - glLightf(lightNum, GL_CONSTANT_ATTENUATION, attenx); - glLightf(lightNum, GL_LINEAR_ATTENUATION, atteny); - glLightf(lightNum, GL_QUADRATIC_ATTENUATION, attenz); - glLightf(lightNum, GL_SPOT_EXPONENT, 0.0f); - glLightf(lightNum, GL_SPOT_CUTOFF, 180.0f); -} - -JNIEXPORT -void JNICALL Java_javax_media_j3d_NativePipeline_updateSpotLight( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint lightSlot, - jfloat red, - jfloat green, - jfloat blue, - jfloat attenx, - jfloat atteny, - jfloat attenz, - jfloat posx, - jfloat posy, - jfloat posz, - jfloat spreadAngle, - jfloat concentration, - jfloat dirx, - jfloat diry, - jfloat dirz) -{ - int lightNum; - float values[4]; - -#ifdef VERBOSE - fprintf(stderr, "Spot Light %d: %f %f %f position, %f %f %f color\n\t %f %f %f attenuation\n\t %f %f %f direction, %f spreadAngle, %f concentration\n", - lightSlot, posx, posy, posz, red, green, blue, - attenx, atteny, attenz, dirx, diry, dirz, - spreadAngle*180.0 / M_PI, concentration); -#endif - lightNum = GL_LIGHT0 + lightSlot; - values[0] = red; - values[1] = green; - values[2] = blue; - values[3] = 1.0f; - glLightfv(lightNum, GL_DIFFUSE, values); - glLightfv(lightNum, GL_SPECULAR, values); - glLightfv(lightNum, GL_AMBIENT, black); - values[0] = posx; - values[1] = posy; - values[2] = posz; - glLightfv(lightNum, GL_POSITION, values); - glLightf(lightNum, GL_CONSTANT_ATTENUATION, attenx); - glLightf(lightNum, GL_LINEAR_ATTENUATION, atteny); - glLightf(lightNum, GL_QUADRATIC_ATTENUATION, attenz); - values[0] = dirx; - values[1] = diry; - values[2] = dirz; - glLightfv(lightNum, GL_SPOT_DIRECTION, values); - glLightf(lightNum, GL_SPOT_EXPONENT, concentration); - glLightf(lightNum, GL_SPOT_CUTOFF, (float) (spreadAngle * 180.0f / M_PI)); -} - diff --git a/src/native/ogl/MasterControl.c b/src/native/ogl/MasterControl.c deleted file mode 100644 index 0e37139..0000000 --- a/src/native/ogl/MasterControl.c +++ /dev/null @@ -1,203 +0,0 @@ -/* - * $RCSfile$ - * - * Copyright 1999-2008 Sun Microsystems, Inc. All Rights Reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * $Revision$ - * $Date$ - * $State$ - */ - -/* - * 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. - */ - -#ifdef DEBUG -#define DPRINT(args) fprintf args -#else -#define DPRINT(args) -#endif /* DEBUG */ - -#include <jni.h> -#include <math.h> -#include <string.h> -#include "gldefs.h" - -#ifdef WIN32 -#include <windows.h> -#include <winbase.h> -#endif /* WIN32 */ - -#if defined(UNIX) -#include <unistd.h> -#ifdef SOLARIS -#include <thread.h> -#else -#include <pthread.h> -#endif -#include <dlfcn.h> -#include <X11/X.h> -#include <X11/Xlib.h> -#include <X11/Xutil.h> - -#if defined(SOLARIS) && defined(__sparc) -#pragma weak glXInitThreadsSUN -#pragma weak glXDisableXineramaSUN -#pragma weak XPanoramiXQueryExtension - -extern int glXInitThreadsSUN(); -extern int glXDisableXineramaSUN(Display *dpy); - - -/* - * The following is currently an unsupported, undocumented function to query - * whether the X server is running with Xinerama support. This is an interim - * solution until it is made part of the X Window System standard or replaced - * with a fully supported API. It is currently available in the libXext - * shipped with Solaris 9 and patched versions of Solaris 7 and 8. dlsym() is - * used to check for its existence. - */ -extern Bool XPanoramiXQueryExtension(Display *dpy, - int *event_base, int *error_base); -#endif /* SOLARIS && __sparc */ - -#endif /* UNIX_ */ - -/* defined in Canvas3D.c */ -extern int isExtensionSupported(const char *allExtensions, - const char *extension); - -JNIEXPORT jboolean JNICALL -Java_javax_media_j3d_NativePipeline_initializeJ3D( - JNIEnv *env, jobject obj, jboolean disableXinerama) -{ - jboolean glIsMTSafe = JNI_TRUE; - - /* Nothing to do for non-sparc-solaris platforms */ - -#if defined(SOLARIS) && defined(__sparc) - Display* dpy; - int event_base, error_base; - const char *glxExtStr = NULL; - - glIsMTSafe = JNI_FALSE; - - dpy = XOpenDisplay(NULL); - glxExtStr = glXGetClientString((Display*)dpy, GLX_EXTENSIONS); - -#ifdef GLX_SUN_init_threads - if(isExtensionSupported(glxExtStr, "GLX_SUN_init_threads")) { - if (glXInitThreadsSUN()) { - glIsMTSafe = JNI_TRUE; - } - else { - DPRINT((stderr, "Failed initializing OpenGL for MT rendering.\n")); - DPRINT((stderr, "glXInitThreadsSUN returned false.\n")); - } - } - else { - DPRINT((stderr, "Failed to initialize OpenGL for MT rendering.\n")); - DPRINT((stderr, "GLX_SUN_init_threads not available.\n")); - } -#endif /* GLX_SUN_init_threads */ - - if (disableXinerama) { - DPRINT((stderr, "Property j3d.disableXinerama true ")); - - if ((! dlsym(RTLD_DEFAULT, "XPanoramiXQueryExtension")) || - (! dlsym(RTLD_DEFAULT, "XDgaGetXineramaInfo"))) { - - DPRINT((stderr, "but required API not available.\n")); - return glIsMTSafe; - } - - if (XPanoramiXQueryExtension(dpy, &event_base, &error_base)) { - DPRINT((stderr, "and Xinerama is in use.\n")); -#ifdef GLX_SUN_disable_xinerama - if(isExtensionSupported(glxExtStr, "GLX_SUN_disable_xinerama")) { - - if (glXDisableXineramaSUN((Display *)dpy)) { - jclass cls = (*env)->GetObjectClass(env, obj); - jfieldID disabledField = - (*env)->GetFieldID(env, cls, "xineramaDisabled", "Z"); - - (*env)->SetBooleanField(env, obj, disabledField, JNI_TRUE); - DPRINT((stderr, "Successfully disabled Xinerama.\n")); - } - else { - DPRINT((stderr, "Failed to disable Xinerama: ")); - DPRINT((stderr, "glXDisableXineramaSUN returns false.\n")); - } - } else { - DPRINT((stderr, "Failed to disable Xinerama: ")); - DPRINT((stderr, "GLX_SUN_disable_xinerama not available.\n")); - } -#endif /* GLX_SUN_disable_xinerama */ - } else { - DPRINT((stderr, "but Xinerama is not in use.\n")); - } - } -#endif /* SOLARIS && __sparc */ - - return glIsMTSafe; -} - - -#ifdef WIN32 -DWORD countBits(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; -} - -#endif /* WIN32 */ - -JNIEXPORT -jint JNICALL Java_javax_media_j3d_NativePipeline_getMaximumLights( - JNIEnv *env, - jobject obj - ) { - -#ifdef SOLARIS - return 32; -#endif /* SOLARIS */ - -#ifdef WIN32 - return 8; -#endif /* WIN32 */ - -#ifdef LINUX - return 8; -#endif /* LINUX */ -} diff --git a/src/native/ogl/NativeConfigTemplate3D.c b/src/native/ogl/NativeConfigTemplate3D.c deleted file mode 100644 index dc8a356..0000000 --- a/src/native/ogl/NativeConfigTemplate3D.c +++ /dev/null @@ -1,1807 +0,0 @@ -/* - * $RCSfile$ - * - * Copyright 1998-2008 Sun Microsystems, Inc. All Rights Reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * $Revision$ - * $Date$ - * $State$ - */ - -/* - * 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. - */ - -/* j3dsys.h needs to be included before any other include files to suppres VC warning */ -#include "j3dsys.h" - -#include <jni.h> -#include <math.h> -#include <stdlib.h> - -#include "gldefs.h" - -#if defined(UNIX) -#include <X11/X.h> -#include <X11/Xlib.h> -#include <X11/Xutil.h> -#include <dlfcn.h> -#endif - -#ifdef WIN32 -#include <windows.h> -#endif - -/* check if the extension is supported */ -extern int isExtensionSupported(const char *allExtensions, const char *extension); - -/* by MIK OF CLASSX */ -extern jboolean getJavaBoolEnv(JNIEnv *env, char* envStr); - -#if defined(UNIX) - -/* Fix for issue 20 */ -#define MAX_GLX_ATTRS_LENGTH 100 - - -GLXFBConfig *find_S_FBConfigs(jlong display, - jint screen, - int* glxAttrs, - 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 (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); - - if(fbConfigList != NULL) { - return fbConfigList; - } - } - - 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 */ - - index = sIndex; - glxAttrs[index] = None; - - /* For debug only - { - int i=0; - fprintf(stderr, "find_S_S_FBConfigs stereoVal = %d\n", stereoVal); - - while(glxAttrs[i] != None) { - fprintf(stderr, "glxAttrs[%d] = %x", i, glxAttrs[i]); - i++; - fprintf(stderr, " glxAttrs[%d] = %x\n", i, glxAttrs[i]); - i++; - } - } - */ - - fbConfigList = find_S_FBConfigs(display, screen, glxAttrs, stencilVal, index); - - if(fbConfigList != NULL) { - return fbConfigList; - } - } - - if (stereoVal == UNNECESSARY) { - index = sIndex; - glxAttrs[index++] = GLX_STEREO; - glxAttrs[index++] = True; - glxAttrs[index] = None; - - /* - fbConfigList = pGLXChooseFbConfig((Display*)display, screen, - glxAttrs, &numFBConfigs); - */ - fbConfigList = find_S_FBConfigs(display, screen, glxAttrs, stencilVal, index); - - if(fbConfigList != NULL) { - return fbConfigList; - } - } - - return NULL; -} - -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; - int index = antialiasIndex; - - - J3D_ASSERT((antialiasIndex+7) < MAX_GLX_ATTRS_LENGTH); - - if(antialiasVal == REQUIRED || antialiasVal== PREFERRED) { - glxExtensions = (const char *) glXGetClientString((Display*)display, GLX_EXTENSIONS); - - if(isExtensionSupported(glxExtensions, "GLX_ARB_multisample")){ - static const int SAMPLE_LENGTH = 5; - static const int samples[] = {8,6,4,3,2}; - int i, samplesIndex; - - index = antialiasIndex; - glxAttrs[index++] = GLX_SAMPLE_BUFFERS_ARB; - glxAttrs[index++] = 1; - glxAttrs[index++] = GLX_SAMPLES_ARB; - samplesIndex = index++; /* Will assign samples in the sample selection loop */ - glxAttrs[index] = None; - - for(i=0; i < SAMPLE_LENGTH; i++) { - /* fprintf(stderr, "find_AA_S_S_FBConfigs samples = %d\n", samples[i]); */ - glxAttrs[samplesIndex] = samples[i]; - fbConfigList = find_S_S_FBConfigs(display, screen, glxAttrs, stereoVal, - stencilVal, index); - - if(fbConfigList != NULL) { - return fbConfigList; - } - } - } - } - - if ( antialiasVal == REQUIRED ) { - index = antialiasIndex; - glxAttrs[index++] = GLX_ACCUM_RED_SIZE; - glxAttrs[index++] = 8; - glxAttrs[index++] = GLX_ACCUM_GREEN_SIZE; - glxAttrs[index++] = 8; - glxAttrs[index++] = GLX_ACCUM_BLUE_SIZE; - glxAttrs[index++] = 8; - glxAttrs[index] = None; - - fbConfigList = find_S_S_FBConfigs(display, screen, glxAttrs, - stereoVal, stencilVal, index); - - if(fbConfigList != NULL) { - return fbConfigList; - } - } - - glxAttrs[antialiasIndex] = None; - - if (antialiasVal == UNNECESSARY || antialiasVal == PREFERRED) { - fbConfigList = find_S_S_FBConfigs(display, screen, glxAttrs, - stereoVal, stencilVal, index); - - if(fbConfigList != NULL) { - return fbConfigList; - } - } - /* We will stop trying even if no fbConfigList is found and - antialiasVal = UNNECESSARY */ - - return NULL; - -} - -GLXFBConfig *find_DB_AA_S_S_FBConfigs(jlong display, - jint screen, - int* glxAttrs, - int stereoVal, int dbVal, - int antialiasVal, - int stencilVal, - int dbIndex) { - - GLXFBConfig *fbConfigList = NULL; - int index = dbIndex; - - J3D_ASSERT((dbIndex+3) < MAX_GLX_ATTRS_LENGTH); - - if (dbVal == REQUIRED || dbVal== PREFERRED) { - - index = dbIndex; - glxAttrs[index++] = GLX_DOUBLEBUFFER; - glxAttrs[index++] = True; - glxAttrs[index] = None; - - fbConfigList = find_AA_S_S_FBConfigs(display, screen, glxAttrs, - stereoVal, antialiasVal, - stencilVal, index); - - if(fbConfigList != NULL) { - return fbConfigList; - } - } - - if (dbVal == UNNECESSARY || dbVal== PREFERRED) { - index = dbIndex; - glxAttrs[index++] = GLX_DOUBLEBUFFER; - glxAttrs[index++] = False; - glxAttrs[index] = None; - - 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_S_FBConfigs(display, screen, glxAttrs, - stereoVal, antialiasVal, - stencilVal, index); - - if(fbConfigList != NULL) { - return fbConfigList; - } - } - - return NULL; -} - -/* - * Uses the passed in array to choose the best OpenGL visual. - * When the "best" visual cannot be used, the "enums" (three - * state attributes) are looped through setting/resetting in all - * combinations in hopes of finding an valid visual. - */ -JNIEXPORT -jint JNICALL Java_javax_media_j3d_X11NativeConfigTemplate3D_chooseOglVisual( - JNIEnv *env, - jobject obj, - jlong display, - jint screen, - jintArray attrList, - jlongArray fbConfigArray) -{ - jint *mx_ptr; - int glxAttrs[MAX_GLX_ATTRS_LENGTH]; /* value, attr pair plus a None */ - int index; - GLXFBConfig *fbConfigList = NULL; - - /* use to cycle through when attr is not REQUIRED */ - int dbVal; /* value for double buffering */ - int stereoVal; /* value for stereo */ - int antialiasVal; /* value for antialias */ - int stencilVal; /* value for stencil size */ - - int drawableIndex; - - jlong *fbConfigListPtr = NULL; - int status, major, minor; - - Display *dpy = (Display *) display; - - fbConfigListPtr = (*env)->GetLongArrayElements(env, fbConfigArray, NULL); - mx_ptr = (*env)->GetIntArrayElements(env, attrList, NULL); - - /* - * convert Java 3D values to GLX - */ - index = 0; - - /* Specify pbuffer as default */ - /* Fix for Issue 20 */ - glxAttrs[index++] = GLX_DRAWABLE_TYPE; - drawableIndex = index; - glxAttrs[index++] = (GLX_PBUFFER_BIT | GLX_WINDOW_BIT); - - /* only interested in RGBA type */ - glxAttrs[index++] = GLX_RENDER_TYPE; - glxAttrs[index++] = GLX_RGBA_BIT; - - /* only interested in FBConfig with associated X Visual type */ - glxAttrs[index++] = GLX_X_RENDERABLE; - glxAttrs[index++] = True; - - glxAttrs[index++] = GLX_RED_SIZE; - glxAttrs[index++] = mx_ptr[RED_SIZE]; - glxAttrs[index++] = GLX_GREEN_SIZE; - glxAttrs[index++] = mx_ptr[GREEN_SIZE]; - glxAttrs[index++] = GLX_BLUE_SIZE; - glxAttrs[index++] = mx_ptr[BLUE_SIZE]; - - /* by MIK OF CLASSX */ - if (getJavaBoolEnv(env, "transparentOffScreen")) { - glxAttrs[index++] = GLX_ALPHA_SIZE; - glxAttrs[index++] = 1; - } - - glxAttrs[index++] = GLX_DEPTH_SIZE; - glxAttrs[index++] = mx_ptr[DEPTH_SIZE]; - glxAttrs[index] = None; - - dbVal = mx_ptr[DOUBLEBUFFER]; - stereoVal = mx_ptr[STEREO]; - antialiasVal = mx_ptr[ANTIALIASING]; - stencilVal = mx_ptr[STENCIL_SIZE]; - - (*env)->ReleaseIntArrayElements(env, attrList, mx_ptr, JNI_ABORT); - - /* Get Pbuffer-capable visual unless j3d.usePbuffer property is FALSE */ - if (getJavaBoolEnv(env,"usePbuffer")) { - 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_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_S_FBConfigs(display, screen, glxAttrs, stereoVal, - dbVal, antialiasVal, stencilVal, index); - } - - fbConfigListPtr[0] = (jlong)fbConfigList; - (*env)->ReleaseLongArrayElements(env, fbConfigArray, fbConfigListPtr, 0); - - /* For debug only. - if(fbConfigList != NULL) { - int val; - - glXGetFBConfigAttrib(dpy, fbConfigList[0], - GLX_FBCONFIG_ID, &val); - - fprintf(stderr, "display 0x%x, fbConfigList 0x%x, fbConfig 0x%x, fbConfigId %d\n", - (int) display, (int) fbConfigList, (int) fbConfigList[0], val); - - } - else { - fprintf(stderr, "display 0x%x, fbConfigList 0x%x\n", - (int) display, (int) fbConfigList); - } - */ - - if(fbConfigList != NULL) { - int vis_id; - - if(glXGetFBConfigAttrib(dpy, fbConfigList[0], GLX_VISUAL_ID, &vis_id) != Success) { - fprintf(stderr, "Java 3D ERROR: unable to get VisualID\n"); - return 0; - } - - /* fprintf(stderr, "********* VisualID = %d\n", vis_id ); */ - - return (jint) vis_id; - - } else { - return 0; - } -} - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_X11NativeConfigTemplate3D_freeFBConfig( - JNIEnv *env, - jclass class, /* this is a static native method */ - jlong fbConfigListPtr) -{ - GLXFBConfig *fbConfigList = (GLXFBConfig *) fbConfigListPtr; - XFree(fbConfigList); -} - - -JNIEXPORT -jboolean JNICALL Java_javax_media_j3d_X11NativeConfigTemplate3D_isStereoAvailable( - JNIEnv *env, - jobject obj, - jlong display, - jint screen, - jint vid) -{ - Display *dpy = (Display*) display; - XVisualInfo *vinfo, template; - int nitems; - int stereoFlag; - static GLboolean first_time = GL_TRUE; - static GLboolean force_no_stereo = GL_FALSE; - - if (first_time) { - if (getenv("J3D_NO_STEREO") != NULL) { - fprintf(stderr, "Java 3D: stereo mode disabled\n"); - force_no_stereo = GL_TRUE; - } - first_time = GL_FALSE; - } - - if (force_no_stereo) - return JNI_FALSE; - - template.visualid = vid; - vinfo = XGetVisualInfo(dpy, VisualIDMask, &template, &nitems); - if (nitems != 1) { - fprintf(stderr, "Warning Canvas3D_isStereoAvailable got unexpected number of matching visuals %d\n", nitems); - } - - glXGetConfig(dpy, vinfo, GLX_STEREO, &stereoFlag); - - return (stereoFlag ? JNI_TRUE : JNI_FALSE); -} - -JNIEXPORT jint JNICALL Java_javax_media_j3d_X11NativeConfigTemplate3D_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_X11NativeConfigTemplate3D_isDoubleBufferAvailable( - JNIEnv *env, - jobject obj, - jlong display, - jint screen, - jint vid) -{ - Display *dpy = (Display*) display; - XVisualInfo *vinfo, template; - int nitems; - int doubleBufferFlag; - - template.visualid = vid; - vinfo = XGetVisualInfo(dpy, VisualIDMask, &template, &nitems); - if (nitems != 1) { - fprintf(stderr, "Warning Canvas3D_isDoubleBufferAvailable got unexpected number of matching visuals %d\n", nitems); - } - - glXGetConfig(dpy, vinfo, GLX_DOUBLEBUFFER, &doubleBufferFlag); - - return (doubleBufferFlag ? JNI_TRUE : JNI_FALSE); -} - -JNIEXPORT -jboolean JNICALL Java_javax_media_j3d_X11NativeConfigTemplate3D_isSceneAntialiasingAccumAvailable( - JNIEnv *env, - jobject obj, - jlong display, - jint screen, - jint vid) -{ - Display *dpy = (Display*) display; - XVisualInfo *vinfo, template; - int nitems; - int numAccumRedBits; - - template.visualid = vid; - vinfo = XGetVisualInfo(dpy, VisualIDMask, &template, &nitems); - if (nitems != 1) { - fprintf(stderr, "Warning Canvas3D_isSceneAntialiasingAvailable got unexpected number of matching visuals %d\n", nitems); - } - - glXGetConfig(dpy, vinfo, GLX_ACCUM_RED_SIZE, &numAccumRedBits); - - return (numAccumRedBits > 0 ? JNI_TRUE : JNI_FALSE); -} - -JNIEXPORT -jboolean JNICALL Java_javax_media_j3d_X11NativeConfigTemplate3D_isSceneAntialiasingMultisampleAvailable( - JNIEnv *env, - jobject obj, - jlong display, - jint screen, - jint vid) -{ - Display *dpy = (Display*) display; - XVisualInfo *vinfo, template; - int nitems; - - const char *glxExtensions; - int numSampleBuffers; - int numSamples; - - template.visualid = vid; - vinfo = XGetVisualInfo(dpy, VisualIDMask, &template, &nitems); - if (nitems != 1) { - fprintf(stderr, "Warning Canvas3D_isSceneAntialiasingAvailable got unexpected number of matching visuals %d\n", nitems); - } - /* try GLX_ARB_multisample */ - glxExtensions = (const char *)glXGetClientString((Display*)display, GLX_EXTENSIONS); - - if(isExtensionSupported(glxExtensions, "GLX_ARB_multisample")){ - glXGetConfig(dpy, vinfo, GLX_SAMPLE_BUFFERS_ARB, &numSampleBuffers); - glXGetConfig(dpy, vinfo, GLX_SAMPLES_ARB, &numSamples); - if(numSampleBuffers > 0 && numSamples > 1){ - return JNI_TRUE; - } - } - - return JNI_FALSE; -} -#endif /* UNIX_ */ - - -#ifdef WIN32 - -extern HWND createDummyWindow(const char* szAppName); - - -PIXELFORMATDESCRIPTOR getDummyPFD() { - - /* Dummy pixel format. -- Chien */ - static PIXELFORMATDESCRIPTOR dummy_pfd = { - sizeof(PIXELFORMATDESCRIPTOR), - 1, /* Version number */ - PFD_DRAW_TO_WINDOW | - PFD_SUPPORT_OPENGL, - PFD_TYPE_RGBA, - 16, /* 16 bit color depth */ - 0, 0, 0, /* RGB bits and pixel sizes */ - 0, 0, 0, /* Do not care about them */ - 0, 0, /* no alpha buffer info */ - 0, 0, 0, 0, 0, /* no accumulation buffer */ - 8, /* 8 bit depth buffer */ - 0, /* no stencil buffer */ - 0, /* no auxiliary buffers */ - PFD_MAIN_PLANE, /* layer type */ - 0, /* reserved, must be 0 */ - 0, /* no layer mask */ - 0, /* no visible mask */ - 0 /* no damage mask */ - }; - - return dummy_pfd; -} - -/* -void printPixelDescriptor(PIXELFORMATDESCRIPTOR *pfd) -{ - - printf("color : r=%d, g=%d, b=%d, a=%d, shift r=%d, g=%d, b=%d, a=%d\n", - pfd->cRedBits, pfd->cGreenBits, pfd->cBlueBits, pfd->cAlphaBits, - pfd->cRedShift, pfd->cGreenShift, pfd->cBlueShift, pfd->cAlphaShift); - printf("Accum r=%d, g=%d, b=%d, a=%d, depth %d, stencil %d, AuxBuffers %d\n", - pfd->cAccumRedBits, pfd->cAccumGreenBits, pfd->cAccumBlueBits, - pfd->cAccumAlphaBits, pfd->cDepthBits, pfd->cStencilBits, pfd->cAuxBuffers); - printf("iLayerType %x, bReserved %x, dwLayerMask %x, dwVisibleMask %x, dwDamageMask %x\n", - pfd->iLayerType, pfd->bReserved, pfd->dwLayerMask, pfd->dwVisibleMask, pfd->dwDamageMask); - if (pfd->dwFlags & PFD_SUPPORT_OPENGL) { - printf("SUPPORT_OPENGL "); - } - if (pfd->dwFlags & PFD_DRAW_TO_WINDOW) { - printf("DRAW_TO_WINDOW "); - } - if (pfd->dwFlags & PFD_DRAW_TO_BITMAP) { - printf("DRAW_TO_BITMAP "); - } - if (pfd->dwFlags & PFD_SUPPORT_GDI) { - printf("SUPPORT_GDI "); - } - if (pfd->dwFlags & PFD_SUPPORT_GDI) { - printf("NEED_PALETTE "); - } - if (pfd->dwFlags & PFD_SUPPORT_GDI) { - printf("NEED_SYSTEM_PALETTE "); - } - if (pfd->dwFlags & PFD_STEREO) { - printf("STEREO "); - } - if (pfd->dwFlags & PFD_SUPPORT_GDI) { - printf("SWAP_LAYER_BUFFERS "); - } - if (pfd->dwFlags & PFD_GENERIC_FORMAT) { - printf("PFD_GENERIC_FORMAT "); - } - if (pfd->dwFlags & PFD_GENERIC_ACCELERATED) { - printf("PFD_GENERIC_FORMAT "); - } - if (pfd->dwFlags & PFD_DOUBLEBUFFER) { - printf("PFD_DOUBLEBUFFER "); - } - printf("\n"); - -} -*/ - -BOOL isSupportedWGL(const char *extensions, const char *extension_string) { - /* get the list of supported extensions */ - const char *p = extensions; - - /* search for extension_string in the list */ - while(p = strstr(p, extension_string)){ - const char *q = p + strlen(extension_string); - - /* must be terminated by <space> or <nul> */ - if(*q == ' ' || *q == '\0') { - return TRUE; - } - - /* try to find another match */ - p = q; - } - return FALSE; -} - -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 stencilVal) -{ - int pf; - PIXELFORMATDESCRIPTOR newpfd; - - pf = ChoosePixelFormat(hdc, pfd); - - if(!offScreen) { - /* onScreen : Check if pixel format support min. requirement */ - DescribePixelFormat(hdc, pf, sizeof(newpfd), &newpfd); - - if ((newpfd.cRedBits < (unsigned char) mx_ptr[RED_SIZE]) || - (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))) - { - return -1; - } - - if ((mx_ptr[ANTIALIASING] == REQUIRED) && - ((newpfd.cAccumRedBits <= 0) || - (newpfd.cAccumGreenBits <= 0) || - (newpfd.cAccumBlueBits <= 0))) - { - return -1; - } - } - - return pf; -} - - -void printErrorMessage(char *message) -{ - DWORD err; - char * errString; - - err = GetLastError(); - FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM, - NULL, err, 0, (LPTSTR)&errString, 0, NULL); - fprintf(stderr, "Java 3D ERROR : %s - %s\n", message, errString); - LocalFree(errString); -} - -/* Fix for issue 76 */ -#define MAX_WGL_ATTRS_LENGTH 100 - - -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++] = stencilVal; - /* - * Terminate by 2 zeros to avoid driver bugs - * that assume attributes always come in pairs. - */ - wglAttrs[index] = 0; - wglAttrs[index+1] = 0; - - pFormat = -1; - - if ((pFormatInfo->wglChoosePixelFormatARB(hdc, wglAttrs, NULL, 1, - &pFormat, &availableFormats)) && (availableFormats > 0)) { - - /* - fprintf(stderr, "Stencil : wglChoosePixelFormatARB : pFormat %d availableFormats %d\n", - pFormat, availableFormats); - */ - return pFormat; - } - - /* - fprintf(stderr, "Stencil : wglChoosePixelFormatARB (TRY 1): FAIL -- stencilVal = %d\n", - stencilVal); - */ - - 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. - */ - wglAttrs[index] = 0; - 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; - } - - /* fprintf(stderr, "wglChoosePixelFormatARB (TRY 2): FAIL\n"); */ - return -1; -} - -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 (stereoVal == REQUIRED || stereoVal== PREFERRED) { - - index = sIndex; - wglAttrs[index++] = WGL_STEREO_ARB; - wglAttrs[index++] = TRUE; - /* - * Terminate by 2 zeros to avoid driver bugs - * that assume attributes always come in pairs. - */ - wglAttrs[index] = 0; - wglAttrs[index+1] = 0; - - pFormat = find_S_PixelFormat(hdc, pFormatInfo, wglAttrs, - stencilVal, index); - /* fprintf(stderr,"STEREO REQUIRED or PREFERRED ***pFormat %d\n", pFormat); */ - - if(pFormat >= 0) { - return pFormat; - } - } - - if (stereoVal == UNNECESSARY || stereoVal== PREFERRED) { - - index = sIndex; - wglAttrs[index++] = WGL_STEREO_ARB; - wglAttrs[index++] = FALSE; - /* - * Terminate by 2 zeros to avoid driver bugs - * that assume attributes always come in pairs. - */ - wglAttrs[index] = 0; - wglAttrs[index+1] = 0; - - pFormat = find_S_PixelFormat(hdc, pFormatInfo, wglAttrs, - stencilVal, index); - - /* fprintf(stderr,"STEREO UNNECC. or PREFERRED ***pFormat %d\n", pFormat); */ - - if(pFormat >= 0) { - return pFormat; - } - } - - if (stereoVal == UNNECESSARY) { - index = sIndex; - wglAttrs[index++] = WGL_STEREO_ARB; - wglAttrs[index++] = TRUE; - /* - * Terminate by 2 zeros to avoid driver bugs - * that assume attributes always come in pairs. - */ - wglAttrs[index] = 0; - wglAttrs[index+1] = 0; - - pFormat = find_S_PixelFormat(hdc, pFormatInfo, wglAttrs, - stencilVal, index); - - /* fprintf(stderr,"STEREO UNNECC. ***pFormat %d\n", pFormat); */ - - if(pFormat >= 0) { - return pFormat; - } - } - - return -1; -} - - -int find_AA_S_S_PixelFormat( HDC hdc, PixelFormatInfo * pFormatInfo, - int* wglAttrs, int stereoVal, int antialiasVal, - int stencilVal, int antialiasIndex) { - - int index; - int pFormat; - GLboolean supportMS = GL_FALSE; - - J3D_ASSERT((antialiasIndex+8) < MAX_WGL_ATTRS_LENGTH); - - if(antialiasVal == REQUIRED || antialiasVal== PREFERRED) { - - if(isSupportedWGL(pFormatInfo->supportedExtensions, "WGL_ARB_multisample")) { - supportMS = GL_TRUE; - } - else { - /* Under Wildcat III it doesn't use wglGetExtensionString */ - char *supportedExtensions = (char *) glGetString(GL_EXTENSIONS); - - /* fprintf(stderr, "GL Supported extensions: %s.\n", supportedExtensions); */ - - if (isSupportedWGL(supportedExtensions, "GL_ARB_multisample")) { - supportMS = GL_TRUE; - } - } - - if(supportMS) { - static const int SAMPLE_LENGTH = 5; - static const int samples[] = {8,6,4,3,2}; - int i, samplesIndex; - - index = antialiasIndex; - wglAttrs[index++] = WGL_SAMPLE_BUFFERS_ARB; - wglAttrs[index++] = 1; - wglAttrs[index++] = WGL_SAMPLES_ARB; - samplesIndex = index++; /* Will assign samples in the sample selection loop */ - /* - * Terminate by 2 zeros to avoid driver bugs - * that assume attributes always come in pairs. - */ - wglAttrs[index] = 0; - wglAttrs[index+1] = 0; - - - for(i=0; i < SAMPLE_LENGTH; i++) { - /* fprintf(stderr, "find_AA_S_S_PixelFormat samples = %d\n", samples[i]); */ - - wglAttrs[samplesIndex] = samples[i]; - pFormat = find_S_S_PixelFormat(hdc, pFormatInfo, wglAttrs, - stereoVal, stencilVal, index); - if(pFormat >= 0) { - return pFormat; - } - } - } - } - - if ( antialiasVal == REQUIRED ) { - - index = antialiasIndex; - wglAttrs[index++] = WGL_ACCUM_RED_BITS_ARB; - wglAttrs[index++] = 8; - wglAttrs[index++] = WGL_ACCUM_GREEN_BITS_ARB; - wglAttrs[index++] = 8; - wglAttrs[index++] = WGL_ACCUM_BLUE_BITS_ARB; - wglAttrs[index++] = 8; - /* - * Terminate by 2 zeros to avoid driver bugs - * that assume attributes always come in pairs. - */ - wglAttrs[index] = 0; - wglAttrs[index+1] = 0; - - pFormat = find_S_S_PixelFormat(hdc, pFormatInfo, wglAttrs, - stereoVal, stencilVal, index); - - if(pFormat >= 0) { - return pFormat; - } - } - - /* - * Terminate by 2 zeros to avoid driver bugs - * that assume attributes always come in pairs. - */ - index = antialiasIndex; - wglAttrs[index] = 0; - wglAttrs[index+1] = 0; - - if (antialiasVal == UNNECESSARY || antialiasVal == PREFERRED) { - - pFormat = find_S_S_PixelFormat(hdc, pFormatInfo, wglAttrs, - stereoVal, stencilVal, index); - - if(pFormat >= 0) { - return pFormat; - } - - } - - return -1; - -} - - -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; - - J3D_ASSERT((dbIndex+4) < MAX_WGL_ATTRS_LENGTH); - - if (dbVal == REQUIRED || dbVal== PREFERRED) { - - index = dbIndex; - wglAttrs[index++] = WGL_DOUBLE_BUFFER_ARB; - wglAttrs[index++] = TRUE; - /* - * Terminate by 2 zeros to avoid driver bugs - * that assume attributes always come in pairs. - */ - wglAttrs[index] = 0; - wglAttrs[index+1] = 0; - - pFormat = find_AA_S_S_PixelFormat(hdc, pFormatInfo, - wglAttrs, stereoVal, - antialiasVal, stencilVal, index); - - if(pFormat >= 0) { - return pFormat; - } - } - - if (dbVal == UNNECESSARY || dbVal== PREFERRED) { - index = dbIndex; - wglAttrs[index++] = WGL_DOUBLE_BUFFER_ARB; - wglAttrs[index++] = FALSE; /* Partial fix to issue 100. */ - /* - * Terminate by 2 zeros to avoid driver bugs - * that assume attributes always come in pairs. - */ - wglAttrs[index] = 0; - wglAttrs[index+1] = 0; - - pFormat = find_AA_S_S_PixelFormat(hdc, pFormatInfo, - wglAttrs, stereoVal, - antialiasVal, stencilVal, index); - - if(pFormat >= 0) { - return pFormat; - } - } - - if (dbVal == UNNECESSARY) { - index = dbIndex; - wglAttrs[index++] = WGL_DOUBLE_BUFFER_ARB; - wglAttrs[index++] = TRUE; - /* - * Terminate by 2 zeros to avoid driver bugs - * that assume attributes always come in pairs. - */ - wglAttrs[index] = 0; - wglAttrs[index+1] = 0; - - pFormat = find_AA_S_S_PixelFormat(hdc, pFormatInfo, - wglAttrs, stereoVal, - antialiasVal, stencilVal, index); - - if(pFormat >= 0) { - return pFormat; - } - } - - return -1; -} - -/* Fix to issue 77 */ -/* Check PixelFormat capabilities and cache the info. into pFormatInfo structure */ -void checkPixelFormat(HDC hdc, - PixelFormatInfo *pFormatInfo, - GLboolean offScreen ) -{ - int wglAttrs[3]; - int piValues[2]; - int pf = -1; - GLboolean hasMultisample = GL_FALSE; - GLboolean hasStereo = GL_FALSE; - GLboolean hasDoubleBuffer = GL_FALSE; - GLboolean hasAccum - = GL_FALSE; - int stencilSize = 0; - PIXELFORMATDESCRIPTOR pfd; - - /* fprintf(stderr, "*** checkPixelFormat : offScreen = %d\n", offScreen); */ - - if(!offScreen) { - pf = pFormatInfo->onScreenPFormat; - } - else { - pf = pFormatInfo->offScreenPFormat; - } - - /* Assert that pf is valid */ - J3D_ASSERT(pf >= 0); - piValues[0] = GL_FALSE; - piValues[1] = -1; - - if( pFormatInfo->supportARB && - isSupportedWGL( pFormatInfo->supportedExtensions, "WGL_ARB_multisample")){ - wglAttrs[0] = WGL_SAMPLE_BUFFERS_ARB; - wglAttrs[1] = WGL_SAMPLES_ARB; - wglAttrs[2] = 0; - if (pFormatInfo->wglGetPixelFormatAttribivARB(hdc, pf, 0, 2, - wglAttrs, piValues)) { - if ((piValues[0]) && (piValues[1] > 1)) { - hasMultisample = GL_TRUE; - } - } - /* - fprintf(stderr, "*** checkPixelFormat : hasMultisample = %d numSamples %d\n", - hasMultisample, piValues[1]); - */ - } - - DescribePixelFormat(hdc, pf, sizeof(pfd), &pfd); - - if (pfd.dwFlags & PFD_STEREO) { - hasStereo = GL_TRUE; - } - if (pfd.dwFlags & PFD_DOUBLEBUFFER) { - hasDoubleBuffer = GL_TRUE; - } - if (pfd.cAccumRedBits > 0) { - hasAccum = GL_TRUE; - } - - stencilSize = pfd.cStencilBits; - - /* - fprintf(stderr, "hasStereo = %d, hasDoubleBuffer %d, hasAccum %d stencilSize %d\n", - hasStereo, hasDoubleBuffer, hasAccum, pfd.cStencilBits); - */ - - if(pFormatInfo->onScreenPFormat == pFormatInfo->offScreenPFormat) { - pFormatInfo->onScreenHasMultisample = hasMultisample; - 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; - } - -} - - -int chooseSTDPixelFormat( - JNIEnv *env, - jint screen, - jintArray attrList, - HDC hdc, - GLboolean offScreen) -{ - int *mx_ptr; - int dbVal; /* value for double buffering */ - 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; /* When would this change? */ - pfd.iPixelType = PFD_TYPE_RGBA; - - /* - * Convert Java 3D values to PixelFormat - */ - mx_ptr = (*env)->GetIntArrayElements(env, attrList, NULL); - - if(!offScreen) { - - pfd.cRedBits = (unsigned char) mx_ptr[RED_SIZE]; - pfd.cGreenBits = (unsigned char) mx_ptr[GREEN_SIZE]; - pfd.cBlueBits = (unsigned char) mx_ptr[BLUE_SIZE]; - pfd.cDepthBits = (unsigned char) mx_ptr[DEPTH_SIZE]; - - if (mx_ptr[DOUBLEBUFFER] == REQUIRED || mx_ptr[DOUBLEBUFFER] == PREFERRED) - dbVal = PFD_DOUBLEBUFFER; - else - dbVal = PFD_DOUBLEBUFFER_DONTCARE; - - stereoVal = 0; - if (mx_ptr[STEREO] == REQUIRED || mx_ptr[STEREO] == PREFERRED) { - stereoVal = PFD_STEREO; - } else { - stereoVal = PFD_STEREO_DONTCARE; - } - - pfd.dwFlags = dbVal | stereoVal | PFD_SUPPORT_OPENGL | PFD_DRAW_TO_WINDOW; - - /* 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; - pfd.cAccumGreenBits = 8; - pfd.cAccumBlueBits = 8; - } - - } - 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; - if (getJavaBoolEnv(env, "transparentOffScreen")) { - pfd.cRedBits = 8; - pfd.cGreenBits = 8; - pfd.cBlueBits = 8; - pfd.cAlphaBits = 8; - pfd.cColorBits = 32; - } - else { - pfd.cRedBits = 8; - pfd.cGreenBits = 8; - pfd.cBlueBits = 8; - pfd.cAlphaBits = 0; - pfd.cColorBits = 24; - } - pfd.cDepthBits = 32; - pfd.iLayerType = PFD_MAIN_PLANE; - pfd.dwFlags = PFD_SUPPORT_OPENGL | PFD_DRAW_TO_BITMAP | PFD_SUPPORT_GDI; - - } - - pFormat = find_DB_S_STDPixelFormat(&pfd, hdc, mx_ptr, offScreen, stencilVal); - - if ((pFormat == -1) && (userReq == GL_FALSE)) { - /* try disable stencil buffer */ - pfd.cStencilBits = 0; - stencilVal = 0; - pFormat = find_DB_S_STDPixelFormat(&pfd, hdc, mx_ptr, offScreen, stencilVal); - } - - (*env)->ReleaseIntArrayElements(env, attrList, mx_ptr, JNI_ABORT); - return pFormat; -} - -PixelFormatInfo * newPixelFormatInfo(HDC hdc, jboolean usePbuffer) -{ - PFNWGLGETEXTENSIONSSTRINGARBPROC wglGetExtensionsStringARB = NULL; - - PixelFormatInfo *pFormatInfo = (PixelFormatInfo *) malloc(sizeof(PixelFormatInfo)); - - /* Initialize pFormatInfo */ - pFormatInfo->onScreenPFormat = -1; - pFormatInfo->onScreenHasMultisample = GL_FALSE; - 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; - pFormatInfo->supportPbuffer = GL_FALSE; - pFormatInfo->supportedExtensions = NULL; - pFormatInfo->wglChoosePixelFormatARB = NULL; - pFormatInfo->wglGetPixelFormatAttribivARB = NULL; - pFormatInfo->wglCreatePbufferARB = NULL; - pFormatInfo->wglGetPbufferDCARB = NULL; - pFormatInfo->wglReleasePbufferDCARB = NULL; - pFormatInfo->wglDestroyPbufferARB = NULL; - pFormatInfo->wglQueryPbufferARB = NULL; - - wglGetExtensionsStringARB = (PFNWGLGETEXTENSIONSSTRINGARBPROC) - wglGetProcAddress("wglGetExtensionsStringARB"); - if (wglGetExtensionsStringARB == NULL) { - printErrorMessage("wglGetExtensionsStringARB not support !\n"); - /* Doesn't support extensions, return to use standard choosePixelFormat. */ - return pFormatInfo; - } - - /* get the list of supported extensions */ - pFormatInfo->supportedExtensions = (char *)wglGetExtensionsStringARB(hdc); - - /* fprintf(stderr, "WGL Supported extensions: %s.\n", - pFormatInfo->supportedExtensions); */ - - if (isSupportedWGL(pFormatInfo->supportedExtensions, "WGL_ARB_pixel_format")) { - pFormatInfo->wglChoosePixelFormatARB = (PFNWGLCHOOSEPIXELFORMATARBPROC) - wglGetProcAddress("wglChoosePixelFormatARB"); - - pFormatInfo->wglGetPixelFormatAttribivARB = - (PFNWGLGETPIXELFORMATATTRIBIVARBPROC) - wglGetProcAddress("wglGetPixelFormatAttribivARB"); - - if ((pFormatInfo->wglChoosePixelFormatARB != NULL) && - (pFormatInfo->wglGetPixelFormatAttribivARB != NULL)){ - - /* fprintf(stderr, "wglChoosePixelFormatARB is supported.\n"); */ - pFormatInfo->supportARB = GL_TRUE; - - if (usePbuffer && - isSupportedWGL(pFormatInfo->supportedExtensions, "WGL_ARB_pbuffer")) { - /* Get pbuffer entry points */ - pFormatInfo->wglCreatePbufferARB = (PFNWGLCREATEPBUFFERARBPROC) - wglGetProcAddress("wglCreatePbufferARB"); - pFormatInfo->wglGetPbufferDCARB = (PFNWGLGETPBUFFERDCARBPROC) - wglGetProcAddress("wglGetPbufferDCARB"); - pFormatInfo->wglReleasePbufferDCARB = (PFNWGLRELEASEPBUFFERDCARBPROC) - wglGetProcAddress("wglReleasePbufferDCARB"); - pFormatInfo->wglDestroyPbufferARB = (PFNWGLDESTROYPBUFFERARBPROC) - wglGetProcAddress("wglDestroyPbufferARB"); - pFormatInfo->wglQueryPbufferARB = (PFNWGLQUERYPBUFFERARBPROC) - wglGetProcAddress("wglQueryPbufferARB"); - - if((pFormatInfo->wglCreatePbufferARB != NULL) && - (pFormatInfo->wglGetPbufferDCARB != NULL) && - (pFormatInfo->wglReleasePbufferDCARB != NULL) && - (pFormatInfo->wglDestroyPbufferARB != NULL) && - (pFormatInfo->wglQueryPbufferARB != NULL)) { - - pFormatInfo->supportPbuffer = GL_TRUE; - /* fprintf(stderr, "WGL support Pbuffer\n"); */ - - } - else { - printErrorMessage("Problem in getting WGL_ARB_pbuffer functions !\n"); - } - } - } - else { - printErrorMessage("Problem in getting WGL_ARB_pixel_format functions !\n"); - } - } - - return pFormatInfo; -} - - -JNIEXPORT -jint JNICALL Java_javax_media_j3d_Win32NativeConfigTemplate3D_choosePixelFormat( - JNIEnv *env, - jobject obj, - jlong ctxInfo, - jint screen, - jintArray attrList, - jlongArray offScreenPFArray) -{ - static const BOOL debug = TRUE; - static char szAppName[] = "Choose Pixel Format"; - - int *mx_ptr; - int dbVal; /* value for double buffering */ - int stereoVal; /* value for stereo */ - int antialiasVal; /* value for antialias */ - int stencilVal; /* value for stencil size */ - - HWND hwnd; - HGLRC hrc; - HDC hdc; - int pixelFormat; - int wglAttrs[MAX_WGL_ATTRS_LENGTH]; - int index, lastIndex; - PixelFormatInfo *pFormatInfo = NULL; - jlong * offScreenPFListPtr; - PIXELFORMATDESCRIPTOR dummy_pfd = getDummyPFD(); - - /* - * Select any pixel format and bound current context to - * it so that we can get the wglChoosePixelFormatARB entry point. - * Otherwise wglxxx entry point will always return null. - * That's why we need to create a dummy window also. - */ - hwnd = createDummyWindow((const char *)szAppName); - - if (!hwnd) { - return -1; - } - hdc = GetDC(hwnd); - - pixelFormat = ChoosePixelFormat(hdc, &dummy_pfd); - - if (pixelFormat<1) { - printErrorMessage("In NativeConfigTemplate : Failed in ChoosePixelFormat"); - DestroyWindow(hwnd); - UnregisterClass(szAppName, (HINSTANCE)NULL); - return -1; - } - - if (!SetPixelFormat(hdc, pixelFormat, NULL)) { - printErrorMessage("In NativeConfigTemplate : Failed in SetPixelFormat"); - DestroyWindow(hwnd); - UnregisterClass(szAppName, (HINSTANCE)NULL); - return -1; - } - - hrc = wglCreateContext(hdc); - if (!hrc) { - printErrorMessage("In NativeConfigTemplate : Failed in wglCreateContext"); - DestroyWindow(hwnd); - UnregisterClass(szAppName, (HINSTANCE)NULL); - return -1; - } - - if (!wglMakeCurrent(hdc, hrc)) { - printErrorMessage("In NativeConfigTemplate : Failed in wglMakeCurrent"); - wglDeleteContext(hrc); - ReleaseDC(hwnd, hdc); - DestroyWindow(hwnd); - UnregisterClass(szAppName, (HINSTANCE)NULL); - return -1; - } - - pFormatInfo = newPixelFormatInfo(hdc, getJavaBoolEnv(env,"usePbuffer")); - - offScreenPFListPtr = (*env)->GetLongArrayElements(env, offScreenPFArray, NULL); - - if (pFormatInfo->supportARB) { - - /* fprintf(stderr, "Using non standard ChoosePixelFormat.\n"); */ - - mx_ptr = (*env)->GetIntArrayElements(env, attrList, NULL); - - /* - * convert Java 3D values to WGL - */ - index = 0; - - wglAttrs[index++] = WGL_SUPPORT_OPENGL_ARB; - wglAttrs[index++] = TRUE; - wglAttrs[index++] = WGL_ACCELERATION_ARB; - wglAttrs[index++] = WGL_FULL_ACCELERATION_ARB; - wglAttrs[index++] = WGL_DRAW_TO_WINDOW_ARB; - wglAttrs[index++] = TRUE; - wglAttrs[index++] = WGL_RED_BITS_ARB; - wglAttrs[index++] = mx_ptr[RED_SIZE]; - wglAttrs[index++] = WGL_GREEN_BITS_ARB; - wglAttrs[index++] = mx_ptr[GREEN_SIZE]; - wglAttrs[index++] = WGL_BLUE_BITS_ARB; - wglAttrs[index++] = mx_ptr[BLUE_SIZE]; - - /* by MIK OF CLASSX */ - if (getJavaBoolEnv(env, "transparentOffScreen")) { - wglAttrs[index++] = WGL_ALPHA_BITS_ARB; - wglAttrs[index++] = 1; - } - - wglAttrs[index++] = WGL_DEPTH_BITS_ARB; - wglAttrs[index++] = mx_ptr[DEPTH_SIZE]; - - lastIndex = index; - - dbVal = mx_ptr[DOUBLEBUFFER]; - stereoVal = mx_ptr[STEREO]; - antialiasVal = mx_ptr[ANTIALIASING]; - stencilVal = mx_ptr[STENCIL_SIZE]; - - (*env)->ReleaseIntArrayElements(env, attrList, mx_ptr, JNI_ABORT); - - if(pFormatInfo->supportPbuffer) { - - wglAttrs[index++] = WGL_DRAW_TO_PBUFFER_ARB; - wglAttrs[index++] = TRUE; - - /* - * Terminate by 2 zeros to avoid driver bugs - * that assume attributes always come in pairs. - */ - wglAttrs[index] = 0; - wglAttrs[index+1] = 0; - - 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, - we can use it for onScreen and offScreen. */ - pFormatInfo->drawToPbuffer = GL_TRUE; - pFormatInfo->offScreenPFormat = pFormatInfo->onScreenPFormat; - - /* Fix to issue 77 */ - checkPixelFormat(hdc, pFormatInfo, GL_FALSE ); - - offScreenPFListPtr[0] = (jlong) pFormatInfo; - (*env)->ReleaseLongArrayElements(env, offScreenPFArray, offScreenPFListPtr, 0); - - /* Destroy all dummy objects */ - wglDeleteContext(hrc); - ReleaseDC(hwnd, hdc); - DestroyWindow(hwnd); - UnregisterClass(szAppName, (HINSTANCE)NULL); - - return (jint) pFormatInfo->onScreenPFormat; - } - } - - /* Create a onScreen without Pbuffer */ - pFormatInfo->drawToPbuffer = GL_FALSE; - index = lastIndex; - - /* - * Terminate by 2 zeros to avoid driver bugs - * that assume attributes always come in pairs. - */ - wglAttrs[index] = 0; - wglAttrs[index+1] = 0; - - 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"); - - pFormatInfo->onScreenPFormat = (jint) chooseSTDPixelFormat( env, screen, - attrList, hdc, GL_FALSE); - } - - if(pFormatInfo->onScreenPFormat < 0) { - /* - printErrorMessage("In NativeConfigTemplate : Can't choose a onScreen pixel format"); - */ - - offScreenPFListPtr[0] = (jlong) pFormatInfo; - (*env)->ReleaseLongArrayElements(env, offScreenPFArray, offScreenPFListPtr, 0); - - /* We are done with dummy context, so destroy all dummy objects */ - wglDeleteContext(hrc); - ReleaseDC(hwnd, hdc); - DestroyWindow(hwnd); - UnregisterClass(szAppName, (HINSTANCE)NULL); - - return -1; - } - - /* Fix to issue 77 */ - checkPixelFormat(hdc, pFormatInfo, GL_FALSE ); - - /* Create offScreen with standard ChoosePixelFormat */ - pFormatInfo->offScreenPFormat = chooseSTDPixelFormat( env, screen, attrList, hdc, GL_TRUE); - - /* fprintf(stderr, "********* offScreenPFormat = %d\n", pFormatInfo->offScreenPFormat ); */ - - /* Fix to issue 77 */ - if(pFormatInfo->offScreenPFormat >= 0) { - checkPixelFormat(hdc, pFormatInfo, GL_TRUE ); - } - - offScreenPFListPtr[0] = (jlong) pFormatInfo; - (*env)->ReleaseLongArrayElements(env, offScreenPFArray, offScreenPFListPtr, 0); - - /* We are done with dummy context, so destroy all dummy objects */ - wglDeleteContext(hrc); - ReleaseDC(hwnd, hdc); - DestroyWindow(hwnd); - UnregisterClass(szAppName, (HINSTANCE)NULL); - - return (jint) pFormatInfo->onScreenPFormat; -} - - -JNIEXPORT -void JNICALL Java_javax_media_j3d_Win32NativeConfigTemplate3D_freePixelFormatInfo( - JNIEnv *env, - jclass class, /* this is a static native method */ - jlong pFormatInfo) -{ - PixelFormatInfo *pfInfo = (PixelFormatInfo *) pFormatInfo; - if(pfInfo->supportedExtensions != NULL) { - free(pfInfo->supportedExtensions); - pfInfo->supportedExtensions = NULL; - } - pfInfo->wglChoosePixelFormatARB = NULL; - pfInfo->wglGetPixelFormatAttribivARB = NULL; - pfInfo->wglCreatePbufferARB = NULL; - pfInfo->wglGetPbufferDCARB = NULL; - pfInfo->wglReleasePbufferDCARB = NULL; - pfInfo->wglDestroyPbufferARB = NULL; - pfInfo->wglQueryPbufferARB = NULL; - free(pfInfo); -} - - -JNIEXPORT -jboolean JNICALL Java_javax_media_j3d_Win32NativeConfigTemplate3D_isStereoAvailable( - JNIEnv *env, - jobject obj, - jlong pFormatInfo, - jboolean offScreen) -{ - - static GLboolean first_time = GL_TRUE; - static GLboolean force_no_stereo = GL_FALSE; - PixelFormatInfo *pfInfo = (PixelFormatInfo *) pFormatInfo; - - if (first_time) { - if (getenv("J3D_NO_STEREO") != NULL) { - fprintf(stderr, "Java 3D: stereo mode disabled\n"); - force_no_stereo = GL_TRUE; - } - first_time = GL_FALSE; - } - - if (force_no_stereo) - return JNI_FALSE; - - if(offScreen) { - /* fprintf(stderr, "offScreen isStereoAvailable %d\n", - pfInfo->offScreenHasStereo); */ - - return pfInfo->offScreenHasStereo; - } - else { - /* fprintf(stderr, "onScreen isStereoAvailable %d\n", - pfInfo->onScreenHasStereo); */ - - return pfInfo->onScreenHasStereo; - } - -} - -JNIEXPORT jint JNICALL Java_javax_media_j3d_Win32NativeConfigTemplate3D_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_Win32NativeConfigTemplate3D_isDoubleBufferAvailable( - JNIEnv *env, - jobject obj, - jlong pFormatInfo, - jboolean offScreen) -{ - - PixelFormatInfo *pfInfo = (PixelFormatInfo *) pFormatInfo; - if(offScreen) { - /* fprintf(stderr, "offScreen isDoubleBufferAvailable %d\n", - pfInfo->offScreenHasDoubleBuffer); */ - - return pfInfo->offScreenHasDoubleBuffer; - } - else { - /* fprintf(stderr, "onScreen isDoubleBufferAvailable %d\n", - pfInfo->onScreenHasDoubleBuffer); */ - - return pfInfo->onScreenHasDoubleBuffer; - } - -} - -JNIEXPORT -jboolean JNICALL Java_javax_media_j3d_Win32NativeConfigTemplate3D_isSceneAntialiasingAccumAvailable( - JNIEnv *env, - jobject obj, - jlong pFormatInfo, - jboolean offScreen) -{ - PixelFormatInfo *pfInfo = (PixelFormatInfo *) pFormatInfo; - if(offScreen) { - /* fprintf(stderr, "offScreen isSceneAntialiasingAccumAvailable %d\n", - pfInfo->offScreenHasAccum); */ - - return pfInfo->offScreenHasAccum; - } - else { - /* fprintf(stderr, "onScreen isSceneAntialiasingAccumAvailable %d\n", - pfInfo->onScreenHasAccum); */ - - return pfInfo->onScreenHasAccum; - } -} - -JNIEXPORT -jboolean JNICALL Java_javax_media_j3d_Win32NativeConfigTemplate3D_isSceneAntialiasingMultisampleAvailable( - JNIEnv *env, - jobject obj, - jlong pFormatInfo, - jboolean offScreen, - jint screen) -{ - /* Fix to issue 77 */ - PixelFormatInfo *pfInfo = (PixelFormatInfo *) pFormatInfo; - if(offScreen) { - /* fprintf(stderr, "offScreen isSceneAntialiasingMultisampleAvailable %d\n", - pfInfo->offScreenHasMultisample); */ - - return pfInfo->offScreenHasMultisample; - } - else { - /* fprintf(stderr, "onScreen isSceneAntialiasingMultisampleAvailable %d\n", - pfInfo->onScreenHasMultisample); */ - - return pfInfo->onScreenHasMultisample; - } -} -#endif /* WIN32 */ diff --git a/src/native/ogl/NativeScreenInfo.c b/src/native/ogl/NativeScreenInfo.c deleted file mode 100644 index 38f546a..0000000 --- a/src/native/ogl/NativeScreenInfo.c +++ /dev/null @@ -1,261 +0,0 @@ -/* - * $RCSfile$ - * - * Copyright 1999-2008 Sun Microsystems, Inc. All Rights Reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * $Revision$ - * $Date$ - * $State$ - */ - -/* - * 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. - */ - -/* j3dsys.h needs to be included before any other include files to suppres VC warning */ -#include "j3dsys.h" - -#include <jni.h> -#include <math.h> -#include <stdio.h> - -#include "gldefs.h" - -#if defined(UNIX) -#include <X11/X.h> -#include <X11/Xlib.h> -#include <X11/Xutil.h> -#include <dlfcn.h> -#endif - -#ifdef WIN32 -#include <windows.h> -#endif - -#if defined(UNIX) - - -/* - * Class: javax_media_j3d_X11NativeScreenInfo - * Method: openDisplay - * Signature: ()J - */ -JNIEXPORT jlong JNICALL -Java_javax_media_j3d_X11NativeScreenInfo_openDisplay( - JNIEnv *env, - jclass cls) -{ - Display* dpy; - dpy = XOpenDisplay(NULL); - return (jlong)dpy; -} - -/* - * Class: javax_media_j3d_X11NativeScreenInfo - * Method: getDefaultScreen - * Signature: (J)I - */ -JNIEXPORT jint JNICALL -Java_javax_media_j3d_X11NativeScreenInfo_getDefaultScreen( - JNIEnv *env, - jclass cls, - jlong display) -{ - Display* dpy = (Display*)display; - return (jint)DefaultScreen(dpy); -} - -/* - * Class: javax_media_j3d_X11NativeScreenInfo - * Method: queryGLX13 - * Signature: (J)Z - */ -JNIEXPORT jboolean JNICALL -Java_javax_media_j3d_X11NativeScreenInfo_queryGLX13( - JNIEnv *env, - jclass cls, - jlong display) -{ - /* Fix for Issue 20 */ - MYPFNGLXCHOOSEFBCONFIG tmpfp; - int major, minor; - int errorBase, eventBase; - Display* dpy = (Display*)display; - /* It should be cleaner to return both the major and minor to the caller. */ - - if (!glXQueryExtension(dpy, &errorBase, &eventBase)) { - fprintf(stderr, "Java 3D ERROR : GLX extension is not supported\n"); - fprintf(stderr, " GLX version 1.3 or higher is required\n"); - return JNI_FALSE; - } - - /* 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; - } - /*fprintf(stderr, "Checking GLX version : %d.%d\n", major, minor);*/ - - tmpfp = (MYPFNGLXCHOOSEFBCONFIG)dlsym(RTLD_DEFAULT, "glXChooseFBConfig"); - - if (tmpfp == NULL) { - 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; - } - - /* 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; -} - -#endif /* Solaris and Linux */ - - -#ifdef WIN32 - -extern HWND createDummyWindow(const char* szAppName); -extern void printErrorMessage(char *message); -extern PIXELFORMATDESCRIPTOR getDummyPFD(); -extern BOOL isSupportedWGL(const char *extensions, const char *extension_string); - -/* - * Class: javax_media_j3d_Win32NativeScreenInfo - * Method: queryWglARB - * Signature: (J)Z - */ -JNIEXPORT jboolean JNICALL -Java_javax_media_j3d_Win32NativeScreenInfo_queryWglARB( - JNIEnv *env, - jclass cls) -{ - - static const BOOL debug = TRUE; - static char szAppName[] = "Choose Pixel Format"; - - PIXELFORMATDESCRIPTOR dummy_pfd = getDummyPFD(); - HWND hwnd; - HGLRC hrc; - HDC hdc; - int pixelFormat; - const char* supportedExtensions; - - /* declare function pointers for WGL functions */ - PFNWGLGETEXTENSIONSSTRINGARBPROC wglGetExtensionsStringARB = NULL; - - /* - * Select any pixel format and bound current context to - * it so that we can get the wglChoosePixelFormatARB entry point. - * Otherwise wglxxx entry point will always return null. - * That's why we need to create a dummy window also. - */ - hwnd = createDummyWindow((const char *)szAppName); - - if (!hwnd) { - return JNI_FALSE; - } - hdc = GetDC(hwnd); - - pixelFormat = ChoosePixelFormat(hdc, &dummy_pfd); - - if (pixelFormat<1) { - printErrorMessage("Failed in ChoosePixelFormat"); - DestroyWindow(hwnd); - UnregisterClass(szAppName, (HINSTANCE)NULL); - return JNI_FALSE; - } - - if (!SetPixelFormat(hdc, pixelFormat, NULL)) { - printErrorMessage("Failed in SetPixelFormat"); - DestroyWindow(hwnd); - UnregisterClass(szAppName, (HINSTANCE)NULL); - return -1; - } - - hrc = wglCreateContext(hdc); - if (!hrc) { - printErrorMessage("Failed in wglCreateContext"); - DestroyWindow(hwnd); - UnregisterClass(szAppName, (HINSTANCE)NULL); - return JNI_FALSE; - } - - if (!wglMakeCurrent(hdc, hrc)) { - printErrorMessage("Failed in wglMakeCurrent"); - wglDeleteContext(hrc); - ReleaseDC(hwnd, hdc); - DestroyWindow(hwnd); - UnregisterClass(szAppName, (HINSTANCE)NULL); - return JNI_FALSE; - } - - wglGetExtensionsStringARB = (PFNWGLGETEXTENSIONSSTRINGARBPROC) - wglGetProcAddress("wglGetExtensionsStringARB"); - if (wglGetExtensionsStringARB == NULL) { - /* printErrorMessage("wglGetExtensionsStringARB not support !\n"); */ - return JNI_FALSE; - } - else { - - /* get the list of supported extensions */ - supportedExtensions = (const char *)wglGetExtensionsStringARB(hdc); - - if (debug) { - fprintf(stderr, "WGL Supported extensions: %s.\n", supportedExtensions); - } - - if(!isSupportedWGL(supportedExtensions, "WGL_ARB_pixel_format")) { - fprintf(stderr, "WGL_ARB_pixel_format not supported.\n"); - return JNI_FALSE; - } - } - - wglDeleteContext(hrc); - ReleaseDC(hwnd, hdc); - DestroyWindow(hwnd); - UnregisterClass(szAppName, (HINSTANCE)NULL); - return JNI_TRUE; - - -} -#endif /* WIN32 */ diff --git a/src/native/ogl/OglCheck.c b/src/native/ogl/OglCheck.c deleted file mode 100644 index b444780..0000000 --- a/src/native/ogl/OglCheck.c +++ /dev/null @@ -1,421 +0,0 @@ -/* - * $RCSfile$ - * - * Copyright 2007-2008 Sun Microsystems, Inc. All Rights Reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * $Revision$ - * $Date$ - * $State$ - */ - -#ifdef DEBUG -/* #define VERBOSE */ -#endif /* DEBUG */ - -/* This entire file is Windows-only */ -#ifdef WIN32 - -/* j3dsys.h needs to be included before any other include files to suppres VC warning */ -#include "j3dsys.h" - -#include <jni.h> -#include <math.h> -#include <stdlib.h> -#include <string.h> -#include <windows.h> - -#include <GL/gl.h> -#include "wglext.h" -#include "javax_media_j3d_NativePipeline.h" - - -static void -printErrorMessage(char *message) -{ - DWORD err; - char * errString; - - err = GetLastError(); - FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM, - NULL, err, 0, (LPTSTR)&errString, 0, NULL); - fprintf(stderr, "Java 3D ERROR : %s - %s\n", message, errString); - LocalFree(errString); -} - - -/* - * A dummy WndProc for dummy window - */ -static LONG WINAPI -WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - /* This function handles any messages that we didn't. */ - /* (Which is most messages) It belongs to the OS. */ - return (LONG) DefWindowProc( hWnd, msg, wParam, lParam ); -} - - -static HWND -createDummyWindow(const char* szAppName) -{ - static const char *szTitle = "Dummy Window"; - WNDCLASS wc; /* windows class sruct */ - - HWND hWnd; - - /* Fill in window class structure with parameters that */ - /* describe the main window. */ - - wc.style = - CS_HREDRAW | CS_VREDRAW;/* Class style(s). */ - wc.lpfnWndProc = - (WNDPROC)WndProc; /* Window Procedure */ - wc.cbClsExtra = 0; /* No per-class extra data. */ - wc.cbWndExtra = 0; /* No per-window extra data. */ - wc.hInstance = - NULL; /* Owner of this class */ - wc.hIcon = NULL; /* Icon name */ - wc.hCursor = - NULL;/* Cursor */ - wc.hbrBackground = - (HBRUSH)(COLOR_WINDOW+1);/* Default color */ - wc.lpszMenuName = NULL; /* Menu from .RC */ - wc.lpszClassName = - szAppName; /* Name to register as - - /* Register the window class */ - - if(RegisterClass( &wc )==0) { - printErrorMessage("createDummyWindow: couldn't register class"); - return NULL; - } - - /* Create a main window for this application instance. */ - - hWnd = CreateWindow( - szAppName, /* app name */ - szTitle, /* Text for window title bar */ - WS_OVERLAPPEDWINDOW/* Window style */ - /* NEED THESE for OpenGL calls to work!*/ - | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, - CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, - NULL, /* no parent window */ - NULL, /* Use the window class menu.*/ - NULL, /* This instance owns this window */ - NULL /* We don't use any extra data */ - ); - - /* If window could not be created, return zero */ - if ( !hWnd ){ - printErrorMessage("createDummyWindow: couldn't create window"); - UnregisterClass(szAppName, (HINSTANCE)NULL); - return NULL; - } - return hWnd; -} - - -static PIXELFORMATDESCRIPTOR -getDummyPFD() -{ - - /* Dummy pixel format. -- Chien */ - static PIXELFORMATDESCRIPTOR dummy_pfd = { - sizeof(PIXELFORMATDESCRIPTOR), - 1, /* Version number */ - PFD_DRAW_TO_WINDOW | - PFD_SUPPORT_OPENGL, - PFD_TYPE_RGBA, - 16, /* 16 bit color depth */ - 0, 0, 0, /* RGB bits and pixel sizes */ - 0, 0, 0, /* Do not care about them */ - 0, 0, /* no alpha buffer info */ - 0, 0, 0, 0, 0, /* no accumulation buffer */ - 8, /* 8 bit depth buffer */ - 0, /* no stencil buffer */ - 0, /* no auxiliary buffers */ - PFD_MAIN_PLANE, /* layer type */ - 0, /* reserved, must be 0 */ - 0, /* no layer mask */ - 0, /* no visible mask */ - 0 /* no damage mask */ - }; - - return dummy_pfd; -} - - -static BOOL -isSupportedWGL(const char *extensions, const char *extension_string) -{ - /* get the list of supported extensions */ - const char *p = extensions; - - /* search for extension_string in the list */ - while(p = strstr(p, extension_string)){ - const char *q = p + strlen(extension_string); - - /* must be terminated by <space> or <nul> */ - if(*q == ' ' || *q == '\0') { - return TRUE; - } - - /* try to find another match */ - p = q; - } - return FALSE; -} - - -/* -static HDC -getMonitorDC(int screen) -{ - return CreateDC("DISPLAY", NULL, NULL, NULL); -} -*/ - - -/* - * Extract the version numbers from a copy of the version string. - * Upon return, numbers[0] contains major version number - * numbers[1] contains minor version number - * Note that the passed in version string is modified. - */ -static void -extractVersionInfo(char *versionStr, int* numbers) -{ - char *majorNumStr; - char *minorNumStr; - - numbers[0] = numbers[1] = -1; - majorNumStr = strtok(versionStr, (char *)"."); - minorNumStr = strtok(0, (char *)"."); - if (majorNumStr != NULL) - numbers[0] = atoi(majorNumStr); - if (minorNumStr != NULL) - numbers[1] = atoi(minorNumStr); -} - - -/* - * get properties from current context - */ -static char* -queryVendorString(HDC hdc, HGLRC hrc) -{ - char *glVersion; - char *tmpVersionStr; - int versionNumbers[2]; - char *glVendor; - char *supportedExtensions; - PFNWGLGETEXTENSIONSSTRINGARBPROC wglGetExtensionsStringARB; - - if (!wglMakeCurrent(hdc, hrc)) { -#ifdef DEBUG - printErrorMessage("getSupportedOglVendorNative : Failed in wglMakeCurrent"); -#endif /* DEBUG */ - return NULL; - } - - wglGetExtensionsStringARB = (PFNWGLGETEXTENSIONSSTRINGARBPROC) - wglGetProcAddress("wglGetExtensionsStringARB"); - if (wglGetExtensionsStringARB == NULL) { -#ifdef DEBUG - printErrorMessage("getSupportedOglVendorNative : wglGetExtensionsStringARB not supported\n"); -#endif /* DEBUG */ - return NULL; - } - - /* get the list of supported extensions */ - supportedExtensions = (char *)wglGetExtensionsStringARB(hdc); - -#ifdef VERBOSE - fprintf(stderr, "WGL Supported extensions: %s\n", - supportedExtensions); -#endif /* VERBOSE */ - - if (supportedExtensions == NULL || - !isSupportedWGL(supportedExtensions, "WGL_ARB_pixel_format") || - wglGetProcAddress("wglChoosePixelFormatARB") == NULL || - wglGetProcAddress("wglGetPixelFormatAttribivARB") == NULL) { -#ifdef DEBUG - printErrorMessage("getSupportedOglVendorNative : wglChoosePixelFormatARB/GetPixelFormatAttribivARB not supported\n"); -#endif /* DEBUG */ - return NULL; - } - - /* Get the OpenGL version */ - glVersion = (char *)glGetString(GL_VERSION); - if (glVersion == NULL) { -#ifdef DEBUG - fprintf(stderr, "JAVA 3D ERROR : glVersion == null\n"); -#endif /* DEBUG */ - return NULL; - } - - /* find out the version, major and minor version number */ - tmpVersionStr = strdup(glVersion); - extractVersionInfo(tmpVersionStr, versionNumbers); - free(tmpVersionStr); - -#ifdef VERBOSE - fprintf(stderr, "GL_VERSION string = %s\n", glVersion); - fprintf(stderr, "GL_VERSION (major.minor) = %d.%d\n", - versionNumbers[0], versionNumbers[1]); -#endif /* VERBOSE */ - - /* - * Check for OpenGL 1.2 or later. - */ - if (versionNumbers[0] < 1 || - (versionNumbers[0] == 1 && versionNumbers[1] < 2)) { -#ifdef DEBUG - fprintf(stderr, - "Java 3D ERROR : OpenGL 1.2 or better is required (GL_VERSION=%d.%d)\n", - versionNumbers[0], versionNumbers[1]); -#endif /* DEBUG */ - return NULL; - } - - /* Get the OpenGL vendor */ - glVendor = (char *)glGetString(GL_VENDOR); - if (glVendor == NULL) { -#ifdef DEBUG - fprintf(stderr, "JAVA 3D ERROR : glVendor == null\n"); -#endif /* DEBUG */ - return NULL; - } - -#ifdef VERBOSE - fprintf(stderr, "GL_VENDOR = %s\n", glVendor); -#endif /* VERBOSE */ - - return glVendor; -} - - -/* - * Class: javax_media_j3d_NativePipeline - * Method: getSupportedOglVendorNative - * Signature: ()Ljava/lang/String; - */ -JNIEXPORT jstring JNICALL -Java_javax_media_j3d_NativePipeline_getSupportedOglVendorNative( - JNIEnv *env, - jclass clazz) -{ - static char szAppName[] = "OglCheck"; - - static int wglAttrs[] = { - WGL_SUPPORT_OPENGL_ARB, - TRUE, - WGL_ACCELERATION_ARB, - WGL_FULL_ACCELERATION_ARB, - WGL_DRAW_TO_WINDOW_ARB, - TRUE, - WGL_RED_BITS_ARB, - 4, - WGL_GREEN_BITS_ARB, - 4, - WGL_BLUE_BITS_ARB, - 4, - WGL_DEPTH_BITS_ARB, - 16, - }; - - HWND hwnd; - HGLRC hrc; - HDC hdc; - int pixelFormat; - PIXELFORMATDESCRIPTOR dummy_pfd = getDummyPFD(); - char *glVendor = NULL; - jstring glVendorString = NULL; - - JNIEnv table = *env; - -#ifdef VERBOSE - fprintf(stderr, "NativePipeline.getSupportedOglVendorNative()\n"); -#endif /* VERBOSE */ - - /* - * Select any pixel format and bound current context to - * it so that we can get the wglChoosePixelFormatARB entry point. - * Otherwise wglxxx entry point will always return null. - * That's why we need to create a dummy window also. - */ - hwnd = createDummyWindow((const char *)szAppName); - - if (!hwnd) { - return NULL; - } - hdc = GetDC(hwnd); - - pixelFormat = ChoosePixelFormat(hdc, &dummy_pfd); - - if (pixelFormat<1) { -#ifdef DEBUG - printErrorMessage("getSupportedOglVendorNative : Failed in ChoosePixelFormat"); -#endif /* DEBUG */ - DestroyWindow(hwnd); - UnregisterClass(szAppName, (HINSTANCE)NULL); - return NULL; - } - - if (!SetPixelFormat(hdc, pixelFormat, NULL)) { -#ifdef DEBUG - printErrorMessage("getSupportedOglVendorNative : Failed in SetPixelFormat"); -#endif /* DEBUG */ - DestroyWindow(hwnd); - UnregisterClass(szAppName, (HINSTANCE)NULL); - return NULL; - } - - hrc = wglCreateContext(hdc); - if (!hrc) { -#ifdef DEBUG - printErrorMessage("getSupportedOglVendorNative : Failed in wglCreateContext"); -#endif /* DEBUG */ - DestroyWindow(hwnd); - UnregisterClass(szAppName, (HINSTANCE)NULL); - return NULL; - } - - /* Check OpenGL extensions & version, and return vendor string */ - glVendor = queryVendorString(hdc, hrc); - if (glVendor != NULL) { - glVendorString = table->NewStringUTF(env, glVendor); - } - - /* Destroy all dummy objects */ - wglDeleteContext(hrc); - ReleaseDC(hwnd, hdc); - DestroyWindow(hwnd); - UnregisterClass(szAppName, (HINSTANCE)NULL); - - return glVendorString; -} - -#endif /* WIN32 */ diff --git a/src/native/ogl/build-linux-amd64.xml b/src/native/ogl/build-linux-amd64.xml deleted file mode 100644 index e3e5b6a..0000000 --- a/src/native/ogl/build-linux-amd64.xml +++ /dev/null @@ -1,75 +0,0 @@ -<?xml version="1.0"?> - -<!-- Ant file for building native ogl renderer files for Linux/amd64 --> -<project name="j3d-core native" default="compile"> - - <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/amd64"/> - - <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 64 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="-m64 -march=k8 -I${oglsrc} -I${java.home}/../include -I${java.home}/../include/linux -I${javahCoreTarget} ${bldFlag} -DLINUX ${cflags.cg} -c ${oglsrc}/DrawingSurfaceObjectAWT.c ${oglsrc}/Canvas3D.c ${oglsrc}/GraphicsContext3D.c ${oglsrc}/NativeScreenInfo.c ${oglsrc}/NativeConfigTemplate3D.c ${oglsrc}/MasterControl.c ${oglsrc}/GeometryArrayRetained.c ${oglsrc}/Attributes.c ${oglsrc}/CgShaderProgram.c ${oglsrc}/GLSLShaderProgram.c ${oglsrc}/Lights.c"/> - </exec> - - <!-- Create the library file--> - <exec dir="${build}/${platform}/${bldType}/native/ogl/objs" executable="ld"> - <arg line="DrawingSurfaceObjectAWT.o Canvas3D.o GraphicsContext3D.o NativeScreenInfo.o NativeConfigTemplate3D.o MasterControl.o GeometryArrayRetained.o Attributes.o CgShaderProgram.o GLSLShaderProgram.o Lights.o -G -z defs -L/usr/X11R6/lib64 -ldl -lGL -lX11 -lXext -lm -lnsl -lc -L${java.home}/lib/amd64 -ljawt -L${java.home}/lib/amd64/server -ljvm -o libj3dcore-ogl.so"/> - </exec> - - </target> - - <target name="compile-ogl-cg" if="build.cg"> - <!-- Compile the wrapper --> - <exec dir="${build}/${platform}/${bldType}/native/ogl/objs" executable="gcc"> - <arg line="-m64 -march=k8 -I${oglsrc} -I${java.home}/../include -I${java.home}/../include/linux -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/lib64 -ldl -lCg -lCgGL -lpthread -lGL -lX11 -lXext -lm -lnsl -lc -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/amd64"> - <fileset dir="${build}/${platform}/${bldType}/native/ogl/objs" - includes="libj3dcore-ogl*.so" - /> - </copy> - - </target> - - <target name="dist"> - <!-- Create the distribution directory --> - <mkdir dir="${dist}/${platform}/lib/amd64"/> - - <!-- Copy the library files --> - <copy todir="${dist}/${platform}/lib/amd64"> - <fileset dir="${build}/${platform}/opt/lib/amd64" - includes="libj3dcore-ogl*.so" - /> - </copy> - - </target> - -</project> diff --git a/src/native/ogl/build-linux-i586.xml b/src/native/ogl/build-linux-i586.xml deleted file mode 100644 index df697c5..0000000 --- a/src/native/ogl/build-linux-i586.xml +++ /dev/null @@ -1,75 +0,0 @@ -<?xml version="1.0"?> - -<!-- Ant file for building native ogl renderer files for Linux/x86 --> -<project name="j3d-core native" default="compile"> - - <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${oglsrc} -I${java.home}/../include -I${java.home}/../include/linux -I${javahCoreTarget} ${bldFlag} -DLINUX ${cflags.cg} -c ${oglsrc}/DrawingSurfaceObjectAWT.c ${oglsrc}/Canvas3D.c ${oglsrc}/GraphicsContext3D.c ${oglsrc}/NativeScreenInfo.c ${oglsrc}/NativeConfigTemplate3D.c ${oglsrc}/MasterControl.c ${oglsrc}/GeometryArrayRetained.c ${oglsrc}/Attributes.c ${oglsrc}/CgShaderProgram.c ${oglsrc}/GLSLShaderProgram.c ${oglsrc}/Lights.c"/> - </exec> - - <!-- Create the library file--> - <exec dir="${build}/${platform}/${bldType}/native/ogl/objs" executable="ld"> - <arg line="DrawingSurfaceObjectAWT.o Canvas3D.o GraphicsContext3D.o NativeScreenInfo.o NativeConfigTemplate3D.o MasterControl.o GeometryArrayRetained.o Attributes.o CgShaderProgram.o GLSLShaderProgram.o Lights.o -G -z defs -L/usr/X11R6/lib -ldl -lGL -lX11 -lXext -lm -lnsl -lc -L${java.home}/lib/i386 -ljawt -L${java.home}/lib/i386/server -ljvm -o libj3dcore-ogl.so"/> - </exec> - - </target> - - <target name="compile-ogl-cg" if="build.cg"> - <!-- Compile the wrapper --> - <exec dir="${build}/${platform}/${bldType}/native/ogl/objs" executable="gcc"> - <arg line="-m32 -mcpu=i386 -I${oglsrc} -I${java.home}/../include -I${java.home}/../include/linux -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 -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> - - <target name="dist"> - <!-- Create the distribution directory --> - <mkdir dir="${dist}/${platform}/lib/i386"/> - - <!-- Copy the library files --> - <copy todir="${dist}/${platform}/lib/i386"> - <fileset dir="${build}/${platform}/opt/lib/i386" - includes="libj3dcore-ogl*.so" - /> - </copy> - - </target> - -</project> diff --git a/src/native/ogl/build-linux-ia64.xml b/src/native/ogl/build-linux-ia64.xml deleted file mode 100644 index de2afad..0000000 --- a/src/native/ogl/build-linux-ia64.xml +++ /dev/null @@ -1,52 +0,0 @@ -<?xml version="1.0"?> - -<!-- Ant file for building native ogl renderer files for Linux IA64 --> -<project name="j3d-core native" default="compile"> - - <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 --> - <mkdir dir="${build}/${platform}/${bldType}/native/ogl/objs"/> - <mkdir dir="${build}/${platform}/${bldType}/lib/ia64"/> - - <property name="oglsrc" location="${src}/native/ogl"/> - - <!-- Compile the c source files; based on build-linux-amd64.xml--> - <exec dir="${build}/${platform}/${bldType}/native/ogl/objs" executable="gcc"> - <arg line="-I${oglsrc} -I${java.home}/../include -I${java.home}/../include/linux -I${javahCoreTarget} ${bldFlag} -DLINUX -c ${oglsrc}/DrawingSurfaceObjectAWT.c ${oglsrc}/Canvas3D.c ${oglsrc}/GraphicsContext3D.c ${oglsrc}/NativeScreenInfo.c ${oglsrc}/NativeConfigTemplate3D.c ${oglsrc}/MasterControl.c ${oglsrc}/GeometryArrayRetained.c ${oglsrc}/Attributes.c ${oglsrc}/CgShaderProgram.c ${oglsrc}/GLSLShaderProgram.c ${oglsrc}/Lights.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 NativeScreenInfo.o NativeConfigTemplate3D.o MasterControl.o GeometryArrayRetained.o Attributes.o CgShaderProgram.o GLSLShaderProgram.o Lights.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/jrockit -ljvm -o libj3dcore-ogl.so"/> - </exec> -<!-- -L${java.home}/lib/ia64/server -ljvm -o libj3dcore-ogl.so"/> --> - - <!-- Copy the copyright library file --> - <copy file="${build}/${platform}/${bldType}/native/ogl/objs/libj3dcore-ogl.so" - todir="${build}/${platform}/${bldType}/lib/ia64"/> - - </target> - - <target name="dist"> - <!-- Create the distribution directory --> - <mkdir dir="${dist}/${platform}/lib/ia64"/> - - <!-- Copy the library files --> - <copy file="${build}/${platform}/opt/lib/ia64/libj3dcore-ogl.so" - todir="${dist}/${platform}/lib/ia64"/> - - </target> - -</project> diff --git a/src/native/ogl/build-linux-ppc.xml b/src/native/ogl/build-linux-ppc.xml deleted file mode 100644 index dce7a6f..0000000 --- a/src/native/ogl/build-linux-ppc.xml +++ /dev/null @@ -1,50 +0,0 @@ -<?xml version="1.0"?> - -<!-- Ant file for building native ogl renderer files for Linux PPC --> -<project name="j3d-core native" 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${oglsrc} -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}/NativeScreenInfo.c ${oglsrc}/NativeConfigTemplate3D.c ${oglsrc}/MasterControl.c ${oglsrc}/GeometryArrayRetained.c ${oglsrc}/Attributes.c ${oglsrc}/CgShaderProgram.c ${oglsrc}/GLSLShaderProgram.c ${oglsrc}/Lights.c"/> - </exec> - - <!-- Create the library file--> - <exec dir="${build}/${platform}/${bldType}/native/ogl/objs" executable="ld"> - <arg line="DrawingSurfaceObjectAWT.o Canvas3D.o GraphicsContext3D.o NativeScreenInfo.o NativeConfigTemplate3D.o MasterControl.o GeometryArrayRetained.o Attributes.o CgShaderProgram.o GLSLShaderProgram.o Lights.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 deleted file mode 100644 index cdd7832..0000000 --- a/src/native/ogl/build-solaris-sparc-forte.xml +++ /dev/null @@ -1,67 +0,0 @@ -<?xml version="1.0"?> - -<!-- Ant file for building native ogl renderer files for Solaris --> -<project name="j3d-core native" default="compile"> - - <target name="compile"> - - <echo message="Executing 32 bit native renderer build [${bldType}]"/> - - <!-- Create the build directories for sparc --> - <mkdir dir="${build}/${platform}/${bldType}/native/ogl/objs"/> - <mkdir dir="${build}/${platform}/${bldType}/lib/sparc"/> - - <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=ultra -xarch=v8a -xcode=pic32 -I${oglsrc} -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}/NativeScreenInfo.c ${oglsrc}/NativeConfigTemplate3D.c ${oglsrc}/MasterControl.c ${oglsrc}/GeometryArrayRetained.c ${oglsrc}/Attributes.c ${oglsrc}/CgShaderProgram.c ${oglsrc}/GLSLShaderProgram.c ${oglsrc}/Lights.c"/> - </exec> - - <!-- Create the library file--> - <exec dir="${build}/${platform}/${bldType}/native/ogl/objs" executable="ld"> - <arg line="DrawingSurfaceObjectAWT.o Canvas3D.o GraphicsContext3D.o NativeScreenInfo.o NativeConfigTemplate3D.o MasterControl.o GeometryArrayRetained.o Attributes.o CgShaderProgram.o GLSLShaderProgram.o Lights.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 --> - <copy file="${build}/${platform}/${bldType}/native/ogl/objs/libj3dcore-ogl.so" - todir="${build}/${platform}/${bldType}/lib/sparc"/> - -<!-- ********************************************************************** --> - <echo message="Executing 64 bit native renderer build [${bldType}]"/> - - <!-- Create the build directories for sparcv9 --> - <mkdir dir="${build}/${platform}/${bldType}/native/ogl/objs/sparcv9"/> - <mkdir dir="${build}/${platform}/${bldType}/lib/sparcv9"/> - - <!-- 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${oglsrc} -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}/NativeScreenInfo.c ${oglsrc}/NativeConfigTemplate3D.c ${oglsrc}/MasterControl.c ${oglsrc}/GeometryArrayRetained.c ${oglsrc}/Attributes.c ${oglsrc}/CgShaderProgram.c ${oglsrc}/GLSLShaderProgram.c ${oglsrc}/Lights.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 NativeScreenInfo.o NativeConfigTemplate3D.o MasterControl.o GeometryArrayRetained.o Attributes.o CgShaderProgram.o GLSLShaderProgram.o Lights.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 --> - <copy file="${build}/${platform}/${bldType}/native/ogl/objs/sparcv9/libj3dcore-ogl.so" - todir="${build}/${platform}/${bldType}/lib/sparcv9"/> - - </target> - - <target name="dist"> - <!-- Create the distribution directory --> - <mkdir dir="${dist}/${platform}/lib/sparc"/> - <mkdir dir="${dist}/${platform}/lib/sparcv9"/> - - <!-- Copy the library files --> - <copy file="${build}/${platform}/opt/lib/sparc/libj3dcore-ogl.so" - todir="${dist}/${platform}/lib/sparc"/> - - <copy file="${build}/${platform}/opt/lib/sparcv9/libj3dcore-ogl.so" - todir="${dist}/${platform}/lib/sparcv9"/> - </target> - -</project> diff --git a/src/native/ogl/build-solaris-sparc-gcc.xml b/src/native/ogl/build-solaris-sparc-gcc.xml deleted file mode 100644 index b58abe0..0000000 --- a/src/native/ogl/build-solaris-sparc-gcc.xml +++ /dev/null @@ -1,67 +0,0 @@ -<?xml version="1.0"?> - -<!-- Ant file for building native ogl renderer files for Solaris --> -<project name="j3d-core native" default="compile"> - - <target name="compile"> - - <echo message="Executing 32 bit native renderer build [${bldType}]"/> - - <!-- Create the build directories for sparc --> - <mkdir dir="${build}/${platform}/${bldType}/native/ogl/objs"/> - <mkdir dir="${build}/${platform}/${bldType}/lib/sparc"/> - - <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 -mcpu=v9 -I${oglsrc} -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}/NativeScreenInfo.c ${oglsrc}/NativeConfigTemplate3D.c ${oglsrc}/MasterControl.c ${oglsrc}/GeometryArrayRetained.c ${oglsrc}/Attributes.c ${oglsrc}/CgShaderProgram.c ${oglsrc}/GLSLShaderProgram.c ${oglsrc}/Lights.c"/> - </exec> - - <!-- Create the library file--> - <exec dir="${build}/${platform}/${bldType}/native/ogl/objs" executable="ld"> - <arg line="DrawingSurfaceObjectAWT.o Canvas3D.o GraphicsContext3D.o NativeScreenInfo.o NativeConfigTemplate3D.o MasterControl.o GeometryArrayRetained.o Attributes.o CgShaderProgram.o GLSLShaderProgram.o Lights.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 --> - <copy file="${build}/${platform}/${bldType}/native/ogl/objs/libj3dcore-ogl.so" - todir="${build}/${platform}/${bldType}/lib/sparc"/> - -<!-- ********************************************************************** --> - <echo message="Executing 64 bit native renderer build [${bldType}]"/> - - <!-- Create the build directories for sparcv9 --> - <mkdir dir="${build}/${platform}/${bldType}/native/ogl/objs/sparcv9"/> - <mkdir dir="${build}/${platform}/${bldType}/lib/sparcv9"/> - - <!-- Compile the c source files--> - <exec dir="${build}/${platform}/${bldType}/native/ogl/objs/sparcv9" executable="gcc"> - <arg line="-m64 -mcpu=v9 -I${oglsrc} -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}/NativeScreenInfo.c ${oglsrc}/NativeConfigTemplate3D.c ${oglsrc}/MasterControl.c ${oglsrc}/GeometryArrayRetained.c ${oglsrc}/Attributes.c ${oglsrc}/CgShaderProgram.c ${oglsrc}/GLSLShaderProgram.c ${oglsrc}/Lights.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 NativeScreenInfo.o NativeConfigTemplate3D.o MasterControl.o GeometryArrayRetained.o Attributes.o CgShaderProgram.o GLSLShaderProgram.o Lights.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 --> - <copy file="${build}/${platform}/${bldType}/native/ogl/objs/sparcv9/libj3dcore-ogl.so" - todir="${build}/${platform}/${bldType}/lib/sparcv9"/> - - </target> - - <target name="dist"> - <!-- Create the distribution directory --> - <mkdir dir="${dist}/${platform}/lib/sparc"/> - <mkdir dir="${dist}/${platform}/lib/sparcv9"/> - - <!-- Copy the library files --> - <copy file="${build}/${platform}/opt/lib/sparc/libj3dcore-ogl.so" - todir="${dist}/${platform}/lib/sparc"/> - - <copy file="${build}/${platform}/opt/lib/sparcv9/libj3dcore-ogl.so" - todir="${dist}/${platform}/lib/sparcv9"/> - </target> - -</project> diff --git a/src/native/ogl/build-solaris-x86-forte.xml b/src/native/ogl/build-solaris-x86-forte.xml deleted file mode 100644 index 61d6048..0000000 --- a/src/native/ogl/build-solaris-x86-forte.xml +++ /dev/null @@ -1,74 +0,0 @@ -<?xml version="1.0"?> - -<!-- Ant file for building native ogl renderer files for Solaris --> -<project name="j3d-core native" 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${oglsrc} -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}/NativeScreenInfo.c ${oglsrc}/NativeConfigTemplate3D.c ${oglsrc}/MasterControl.c ${oglsrc}/GeometryArrayRetained.c ${oglsrc}/Attributes.c ${oglsrc}/CgShaderProgram.c ${oglsrc}/GLSLShaderProgram.c ${oglsrc}/Lights.c"/> - </exec> - - <!-- Create the library file--> - <exec dir="${build}/${platform}/${bldType}/native/ogl/objs" executable="ld"> - <arg line="DrawingSurfaceObjectAWT.o Canvas3D.o GraphicsContext3D.o NativeScreenInfo.o NativeConfigTemplate3D.o MasterControl.o GeometryArrayRetained.o Attributes.o CgShaderProgram.o GLSLShaderProgram.o Lights.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${oglsrc} -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}/NativeScreenInfo.c ${oglsrc}/NativeConfigTemplate3D.c ${oglsrc}/MasterControl.c ${oglsrc}/GeometryArrayRetained.c ${oglsrc}/Attributes.c ${oglsrc}/CgShaderProgram.c ${oglsrc}/GLSLShaderProgram.c ${oglsrc}/Lights.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 NativeScreenInfo.o NativeConfigTemplate3D.o MasterControl.o GeometryArrayRetained.o Attributes.o CgShaderProgram.o GLSLShaderProgram.o Lights.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 deleted file mode 100644 index bcd7b18..0000000 --- a/src/native/ogl/build-solaris-x86-gcc.xml +++ /dev/null @@ -1,74 +0,0 @@ -<?xml version="1.0"?> - -<!-- Ant file for building native ogl renderer files for Solaris --> -<project name="j3d-core native" 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${oglsrc} -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}/NativeScreenInfo.c ${oglsrc}/NativeConfigTemplate3D.c ${oglsrc}/MasterControl.c ${oglsrc}/GeometryArrayRetained.c ${oglsrc}/Attributes.c ${oglsrc}/CgShaderProgram.c ${oglsrc}/GLSLShaderProgram.c ${oglsrc}/Lights.c"/> - </exec> - - <!-- Create the library file--> - <exec dir="${build}/${platform}/${bldType}/native/ogl/objs" executable="ld"> - <arg line="DrawingSurfaceObjectAWT.o Canvas3D.o GraphicsContext3D.o NativeScreenInfo.o NativeConfigTemplate3D.o MasterControl.o GeometryArrayRetained.o Attributes.o CgShaderProgram.o GLSLShaderProgram.o Lights.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${oglsrc} -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}/NativeScreenInfo.c ${oglsrc}/NativeConfigTemplate3D.c ${oglsrc}/MasterControl.c ${oglsrc}/GeometryArrayRetained.c ${oglsrc}/Attributes.c ${oglsrc}/CgShaderProgram.c ${oglsrc}/GLSLShaderProgram.c ${oglsrc}/Lights.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 NativeScreenInfo.o NativeConfigTemplate3D.o MasterControl.o GeometryArrayRetained.o Attributes.o CgShaderProgram.o GLSLShaderProgram.o Lights.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-amd64-vc.xml b/src/native/ogl/build-windows-amd64-vc.xml deleted file mode 100644 index a0fffd7..0000000 --- a/src/native/ogl/build-windows-amd64-vc.xml +++ /dev/null @@ -1,94 +0,0 @@ -<?xml version="1.0"?> - -<!-- -/* 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-amd64 --> -<project name="j3d-core native" default="compile"> - - - - <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 64 bit native renderer build [${bldType}]"/> - - <property name="javaInclude" - location="${java.home}/../include"/> - - <property name="javaWin32Include" - 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"${oglsrc}" -I"${javaInclude}" -I"${javaWin32Include}" -I"${javahCoreTarget}" -I"${cg.home}\include" -nologo -MT -W3 -EHsc -wd4996 -Ox -FD ${bldFlag} ${cflags.cg} -c "${oglsrc}/DrawingSurfaceObjectAWT.c" "${oglsrc}/Canvas3D.c" "${oglsrc}/GraphicsContext3D.c" "${oglsrc}/NativeScreenInfo.c" "${oglsrc}/NativeConfigTemplate3D.c" "${oglsrc}/MasterControl.c" "${oglsrc}/GeometryArrayRetained.c" "${oglsrc}/Attributes.c" "${oglsrc}/CgShaderProgram.c" "${oglsrc}/GLSLShaderProgram.c" "${oglsrc}/Lights.c""/> - </exec> - - <!-- Create the library file--> - <exec dir="${build}/${platform}/${bldType}/native/ogl/objs" executable="link"> - <arg line="-nologo -dll -subsystem:windows -pdb:none -out:j3dcore-ogl.dll DrawingSurfaceObjectAWT.obj Canvas3D.obj GraphicsContext3D.obj NativeScreenInfo.obj NativeConfigTemplate3D.obj MasterControl.obj GeometryArrayRetained.obj Attributes.obj CgShaderProgram.obj GLSLShaderProgram.obj Lights.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> - - </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"${oglsrc}" -I"${javaInclude}" -I"${javaWin32Include}" -I"${javahCoreTarget}" -I"${cg.home}\include" -nologo -MT -W3 -EHsc -Ox -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 -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> - - <target name="dist"> - <!-- Create the distribution directory --> - <mkdir dir="${dist}/${platform}/bin"/> - - <!-- Copy the library files --> - <copy todir="${dist}/${platform}/bin"> - <fileset dir="${build}/${platform}/opt/bin" - includes="j3dcore-ogl*.dll" - /> - </copy> - - </target> - -</project> diff --git a/src/native/ogl/build-windows-i586-gcc.xml b/src/native/ogl/build-windows-i586-gcc.xml deleted file mode 100644 index 8274695..0000000 --- a/src/native/ogl/build-windows-i586-gcc.xml +++ /dev/null @@ -1,78 +0,0 @@ -<?xml version="1.0"?> - -<!-- Ant file for building native ogl renderer files for Windows-i586 --> -<project name="j3d-core native" default="compile"> - - <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 --> - <mkdir dir="${build}/${platform}/${bldType}/native/ogl/objs"/> - <mkdir dir="${build}/${platform}/${bldType}/bin"/> - - <property name="javaInclude" - location="${java.home}/../include"/> - - <property name="javaWin32Include" - location="${java.home}/../include/win32"/> - - <property name="oglsrc" location="${src}/native/ogl"/> - - <!-- Inhibit all warning for native build. Remove -w to switch warning on --> - - <!-- Compile the c source files for the core ogl library --> - <exec dir="${build}/${platform}/${bldType}/native/ogl/objs" executable="gcc"> - <arg line="-w -D_WINGDI_ -D_JNI_IMPLEMENTATION_ -I"${oglsrc}" -I"${javaInclude}" -I"${javaWin32Include}" -I"${javahCoreTarget}" ${bldFlag} -c "${oglsrc}/DrawingSurfaceObjectAWT.c" "${oglsrc}/Canvas3D.c" "${oglsrc}/GraphicsContext3D.c" "${oglsrc}/NativeScreenInfo.c" "${oglsrc}/NativeConfigTemplate3D.c" "${oglsrc}/MasterControl.c" "${oglsrc}/GeometryArrayRetained.c" "${oglsrc}/Attributes.c" "${oglsrc}/CgShaderProgram.c" "${oglsrc}/GLSLShaderProgram.c" "${oglsrc}/Lights.c""/> - </exec> - - <!-- Create the core ogl 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 NativeScreenInfo.o NativeConfigTemplate3D.o MasterControl.o GeometryArrayRetained.o Attributes.o CgShaderProgram.o GLSLShaderProgram.o Lights.o -Wl,--kill-at -L"${java.home}\..\lib" -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -luuid -lodbc32 -lodbccp32 -lopengl32 -ljawt"/> - </exec> - - <!-- Compile the c source files for the ogl-chk library --> - <exec dir="${build}/${platform}/${bldType}/native/ogl/objs" executable="gcc"> - <arg line="-w -D_WINGDI_ -D_JNI_IMPLEMENTATION_ -I"${oglsrc}" -I"${javaInclude}" -I"${javaWin32Include}" -I"${javahCoreTarget}" ${bldFlag} -c "${oglsrc}/OglCheck.c""/> - </exec> - - <!-- Create the ogl-chk library file--> - <exec dir="${build}/${platform}/${bldType}/native/ogl/objs" executable="gcc"> - <arg line="-shared -o j3dcore-ogl-chk.dll OglCheck.o -Wl,--kill-at -L"${java.home}\..\lib" -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -luuid -lodbc32 -lodbccp32 -lopengl32"/> - </exec> - - <!-- Copy the library files --> - <copy todir="${build}/${platform}/${bldType}/bin"> - <fileset dir="${build}/${platform}/${bldType}/native/ogl/objs" - includes="j3dcore-ogl*.dll" - /> - </copy> - - </target> - - <target name="dist"> - <!-- Create the distribution directory --> - <mkdir dir="${dist}/${platform}/bin"/> - - <!-- Copy the library files --> - <copy file="${build}/${platform}/opt/bin/j3dcore-ogl.dll" - todir="${dist}/${platform}/bin"/> - - </target> - -</project> diff --git a/src/native/ogl/build-windows-i586-vc.xml b/src/native/ogl/build-windows-i586-vc.xml deleted file mode 100644 index d675afe..0000000 --- a/src/native/ogl/build-windows-i586-vc.xml +++ /dev/null @@ -1,104 +0,0 @@ -<?xml version="1.0"?> - -<!-- -/* 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="j3d-core native" default="compile"> - - - - <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"/> - - <property name="javaWin32Include" - 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 for the core ogl library --> - <exec dir="${build}/${platform}/${bldType}/native/ogl/objs" executable="cl"> - <arg line="-I"${oglsrc}" -I"${javaInclude}" -I"${javaWin32Include}" -I"${javahCoreTarget}" -I"${cg.home}\include" -nologo -MT -W3 -EHsc -O2 -FD ${bldFlag} ${cflags.cg} -c "${oglsrc}/DrawingSurfaceObjectAWT.c" "${oglsrc}/Canvas3D.c" "${oglsrc}/GraphicsContext3D.c" "${oglsrc}/NativeScreenInfo.c" "${oglsrc}/NativeConfigTemplate3D.c" "${oglsrc}/MasterControl.c" "${oglsrc}/GeometryArrayRetained.c" "${oglsrc}/Attributes.c" "${oglsrc}/CgShaderProgram.c" "${oglsrc}/GLSLShaderProgram.c" "${oglsrc}/Lights.c""/> - </exec> - - <!-- Create the core ogl library file--> - <exec dir="${build}/${platform}/${bldType}/native/ogl/objs" executable="link"> - <arg line="-nologo -dll -subsystem:windows -machine:I386 -out:j3dcore-ogl.dll DrawingSurfaceObjectAWT.obj Canvas3D.obj GraphicsContext3D.obj NativeScreenInfo.obj NativeConfigTemplate3D.obj MasterControl.obj GeometryArrayRetained.obj Attributes.obj CgShaderProgram.obj GLSLShaderProgram.obj Lights.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> - - <!-- Compile the c source files for the ogl-chk library --> - <exec dir="${build}/${platform}/${bldType}/native/ogl/objs" executable="cl"> - <arg line="-I"${oglsrc}" -I"${javaInclude}" -I"${javaWin32Include}" -I"${javahCoreTarget}" -nologo -MT -W3 -EHsc -O2 -FD ${bldFlag} -c "${oglsrc}/OglCheck.c" "/> - </exec> - - <!-- Create the ogl-chk library file--> - <exec dir="${build}/${platform}/${bldType}/native/ogl/objs" executable="link"> - <arg line="-nologo -dll -subsystem:windows -machine:I386 -out:j3dcore-ogl-chk.dll OglCheck.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"/> - </exec> - - </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"${oglsrc}" -I"${javaInclude}" -I"${javaWin32Include}" -I"${javahCoreTarget}" -I"${cg.home}\include" -nologo -MT -W3 -EHsc -O2 -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 -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 -LIBPATH:"${cg.home}\lib" cg.lib cgGL.lib"/> - </exec> - - </target> - - - - <target name="compile" depends="init,compile-ogl,compile-ogl-cg"> - - <!-- Copy the library files --> - <copy todir="${build}/${platform}/${bldType}/bin"> - <fileset dir="${build}/${platform}/${bldType}/native/ogl/objs" - includes="j3dcore-ogl*.dll" - /> - </copy> - - </target> - - <target name="dist"> - <!-- Create the distribution directory --> - <mkdir dir="${dist}/${platform}/bin"/> - - <!-- Copy the library files --> - <copy todir="${dist}/${platform}/bin"> - <fileset dir="${build}/${platform}/opt/bin" - includes="j3dcore-ogl*.dll" - /> - </copy> - - </target> - -</project> diff --git a/src/native/ogl/gldefs.h b/src/native/ogl/gldefs.h deleted file mode 100644 index f8fe282..0000000 --- a/src/native/ogl/gldefs.h +++ /dev/null @@ -1,705 +0,0 @@ -/* - * $RCSfile$ - * - * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * $Revision$ - * $Date$ - * $State$ - */ - -#ifndef _Java3D_gldefs_h_ -#define _Java3D_gldefs_h_ - -/* - * 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. - */ - -#include <math.h> -#include <stdlib.h> -#include <string.h> - -/* - * Before we include gl.h we need to ensure that our versions of the - * wglext.h and glext.h files get loaded, not the platform's versions. - */ -#ifndef __glext_h_ -#define __glext_h_ -#define Java3D_undef__glext_h_ -#endif - -#ifndef __wglext_h_ -#define __wglext_h_ -#define Java3D_undef__wglext_h_ -#endif - -#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> -#ifdef Java3D_undef__glext_h_ -#undef __glext_h_ -#endif -#include "glext.h" -#endif - -#ifdef WIN32 -#include <windows.h> - -#ifndef _WIN32 -#define _WIN32 -#endif - -#define M_PI 3.14159265358979323846 - -/* Some constant defined in those javax_media_j3d_*.h */ -/* TODO: remove those constant when D3D automatically include those *.h files */ -#ifdef D3D - -/* used in GeometryArrayRetained, execute geometry in by REFERENCE case */ -#ifndef javax_media_j3d_GeometryArrayRetained_COORD_FLOAT -#define javax_media_j3d_GeometryArrayRetained_COORD_FLOAT 1L -#endif -#ifndef javax_media_j3d_GeometryArrayRetained_COORD_DOUBLE -#define javax_media_j3d_GeometryArrayRetained_COORD_DOUBLE 2L -#endif -#ifndef javax_media_j3d_GeometryArrayRetained_COLOR_FLOAT -#define javax_media_j3d_GeometryArrayRetained_COLOR_FLOAT 4L -#endif -#ifndef javax_media_j3d_GeometryArrayRetained_COLOR_BYTE -#define javax_media_j3d_GeometryArrayRetained_COLOR_BYTE 8L -#endif -#ifndef javax_media_j3d_GeometryArrayRetained_NORMAL_FLOAT -#define javax_media_j3d_GeometryArrayRetained_NORMAL_FLOAT 16L -#endif -#ifndef javax_media_j3d_GeometryArrayRetained_TEXCOORD_FLOAT -#define javax_media_j3d_GeometryArrayRetained_TEXCOORD_FLOAT 32L -#endif - -#endif /* end of ifdef D3D */ - -#ifndef D3D -#include <GL/gl.h> -#ifdef Java3D_undef__wglext_h_ -#undef __wglext_h_ -#endif -#ifdef Java3D_undef__glext_h_ -#undef __glext_h_ -#endif -#include "wglext.h" -#include "glext.h" -#endif - -#endif /* WIN32 */ - -/* include those .h files generated by javah */ -#include "javax_media_j3d_Background.h" -#include "javax_media_j3d_Canvas3D.h" -#include "javax_media_j3d_ColoringAttributes.h" -#include "javax_media_j3d_ColoringAttributesRetained.h" -#include "javax_media_j3d_DepthComponentRetained.h" -#include "javax_media_j3d_DirectionalLightRetained.h" -#include "javax_media_j3d_DisplayListRenderMethod.h" -#include "javax_media_j3d_DrawingSurfaceObjectAWT.h" -#include "javax_media_j3d_ExponentialFogRetained.h" -#include "javax_media_j3d_GeometryRetained.h" -#include "javax_media_j3d_GeometryArray.h" -#include "javax_media_j3d_GeometryArrayRetained.h" -#include "javax_media_j3d_GraphicsContext3D.h" -#include "javax_media_j3d_ImageComponent.h" -#include "javax_media_j3d_ImageComponentRetained.h" -#include "javax_media_j3d_ImageComponent2DRetained.h" -#include "javax_media_j3d_IndexedGeometryArrayRetained.h" -#include "javax_media_j3d_LineAttributes.h" -#include "javax_media_j3d_LineAttributesRetained.h" -#include "javax_media_j3d_LinearFogRetained.h" -#include "javax_media_j3d_MasterControl.h" -#include "javax_media_j3d_Material.h" -#include "javax_media_j3d_MaterialRetained.h" -#include "javax_media_j3d_ModelClipRetained.h" -#include "javax_media_j3d_NativeConfigTemplate3D.h" -#include "javax_media_j3d_NativePipeline.h" -#include "javax_media_j3d_NodeRetained.h" -#include "javax_media_j3d_PointAttributesRetained.h" -#include "javax_media_j3d_PointLightRetained.h" -#include "javax_media_j3d_PolygonAttributes.h" -#include "javax_media_j3d_PolygonAttributesRetained.h" -#include "javax_media_j3d_Raster.h" -#include "javax_media_j3d_RasterRetained.h" -#include "javax_media_j3d_Renderer.h" -#include "javax_media_j3d_RenderingAttributes.h" -#include "javax_media_j3d_RenderingAttributesRetained.h" -#include "javax_media_j3d_RenderMolecule.h" -#include "javax_media_j3d_SpotLightRetained.h" -#include "javax_media_j3d_TexCoordGeneration.h" -#include "javax_media_j3d_TexCoordGenerationRetained.h" -#include "javax_media_j3d_Texture.h" -#include "javax_media_j3d_Texture2D.h" -#include "javax_media_j3d_Texture2DRetained.h" -#include "javax_media_j3d_Texture3DRetained.h" -#include "javax_media_j3d_TextureAttributes.h" -#include "javax_media_j3d_TextureAttributesRetained.h" -#include "javax_media_j3d_TextureCubeMapRetained.h" -#include "javax_media_j3d_TextureRetained.h" -#include "javax_media_j3d_TextureUnitStateRetained.h" -#include "javax_media_j3d_TransparencyAttributes.h" -#include "javax_media_j3d_TransparencyAttributesRetained.h" -#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" - -#ifdef WIN32 -#include "javax_media_j3d_Win32NativeConfigTemplate3D.h" -#include "javax_media_j3d_Win32NativeScreenInfo.h" -#else -#include "javax_media_j3d_X11NativeConfigTemplate3D.h" -#include "javax_media_j3d_X11NativeScreenInfo.h" -#endif - -/* Used to compare floating point values close to 0.0 */ -#define J3D_SMALL_FLOAT 0.00001f - -/* - * General purpose assertion macro - */ -#define J3D_ASSERT(expr) \ - if (!(expr)) { \ - fprintf(stderr, \ - "\nAssertion failed in module '%s' at line %d\n", \ - __FILE__, __LINE__); \ - fprintf(stderr, "\t%s\n\n", #expr); \ - } - -#define EPSILON 1e-2 -#define J3D_FNE(a,b) ((a)>((b)+EPSILON)||(a)<((b)-EPSILON)) - - -/* - * Macro to copy and transpose one matrix to another. - * - * NOTE: the source and dest must not be the same (no aliasing check - * is performed). - */ -#define COPY_TRANSPOSE(src,dst) { \ - (dst)[0] = (src)[0]; \ - (dst)[1] = (src)[4]; \ - (dst)[2] = (src)[8]; \ - (dst)[3] = (src)[12]; \ - (dst)[4] = (src)[1]; \ - (dst)[5] = (src)[5]; \ - (dst)[6] = (src)[9]; \ - (dst)[7] = (src)[13]; \ - (dst)[8] = (src)[2]; \ - (dst)[9] = (src)[6]; \ - (dst)[10] = (src)[10]; \ - (dst)[11] = (src)[14]; \ - (dst)[12] = (src)[3]; \ - (dst)[13] = (src)[7]; \ - (dst)[14] = (src)[11]; \ - (dst)[15] = (src)[15]; \ -} - - -/* - * These match the constants in GeometryRetained - */ - -#define GEO_TYPE_NONE javax_media_j3d_GeometryRetained_GEO_TYPE_NONE -#define GEO_TYPE_QUAD_SET javax_media_j3d_GeometryRetained_GEO_TYPE_QUAD_SET -#define GEO_TYPE_TRI_SET javax_media_j3d_GeometryRetained_GEO_TYPE_TRI_SET -#define GEO_TYPE_POINT_SET javax_media_j3d_GeometryRetained_GEO_TYPE_POINT_SET -#define GEO_TYPE_LINE_SET javax_media_j3d_GeometryRetained_GEO_TYPE_LINE_SET -#define GEO_TYPE_TRI_STRIP_SET javax_media_j3d_GeometryRetained_GEO_TYPE_TRI_STRIP_SET -#define GEO_TYPE_TRI_FAN_SET javax_media_j3d_GeometryRetained_GEO_TYPE_TRI_FAN_SET -#define GEO_TYPE_LINE_STRIP_SET javax_media_j3d_GeometryRetained_GEO_TYPE_LINE_STRIP_SET -#define GEO_TYPE_INDEXED_QUAD_SET javax_media_j3d_GeometryRetained_GEO_TYPE_INDEXED_QUAD_SET -#define GEO_TYPE_INDEXED_TRI_SET javax_media_j3d_GeometryRetained_GEO_TYPE_INDEXED_TRI_SET -#define GEO_TYPE_INDEXED_POINT_SET javax_media_j3d_GeometryRetained_GEO_TYPE_INDEXED_POINT_SET -#define GEO_TYPE_INDEXED_LINE_SET javax_media_j3d_GeometryRetained_GEO_TYPE_INDEXED_LINE_SET -#define GEO_TYPE_INDEXED_TRI_STRIP_SET javax_media_j3d_GeometryRetained_GEO_TYPE_INDEXED_TRI_STRIP_SET -#define GEO_TYPE_INDEXED_TRI_FAN_SET javax_media_j3d_GeometryRetained_GEO_TYPE_INDEXED_TRI_FAN_SET -#define GEO_TYPE_INDEXED_LINE_STRIP_SET javax_media_j3d_GeometryRetained_GEO_TYPE_INDEXED_LINE_STRIP_SET -#define GEO_TYPE_RASTER javax_media_j3d_GeometryRetained_GEO_TYPE_RASTER -#define GEO_TYPE_TEXT3D javax_media_j3d_GeometryRetained_GEO_TYPE_TEXT3D -#define GEO_TYPE_COMPRESSED javax_media_j3d_GeometryRetained_GEO_TYPE_COMPRESSED -#define GEO_TYPE_TOTAL javax_media_j3d_GeometryRetained_GEO_TYPE_TOTAL - -/* - * These match the constants in ImageComponent - */ - -#define FORMAT_RGB javax_media_j3d_ImageComponent_FORMAT_RGB -#define FORMAT_RGBA javax_media_j3d_ImageComponent_FORMAT_RGBA -#define FORMAT_RGB5 javax_media_j3d_ImageComponent_FORMAT_RGB5 -#define FORMAT_RGB5_A1 javax_media_j3d_ImageComponent_FORMAT_RGB5_A1 -#define FORMAT_RGB4 javax_media_j3d_ImageComponent_FORMAT_RGB4 -#define FORMAT_RGBA4 javax_media_j3d_ImageComponent_FORMAT_RGBA4 -#define FORMAT_LUM4_ALPHA4 javax_media_j3d_ImageComponent_FORMAT_LUM4_ALPHA4 -#define FORMAT_LUM8_ALPHA8 javax_media_j3d_ImageComponent_FORMAT_LUM8_ALPHA8 -#define FORMAT_R3_G3_B2 javax_media_j3d_ImageComponent_FORMAT_R3_G3_B2 -#define FORMAT_CHANNEL8 javax_media_j3d_ImageComponent_FORMAT_CHANNEL8 - - -/* now the imagecomponent formats are reduced the ones below */ -#define IMAGE_FORMAT_BYTE_BGR javax_media_j3d_ImageComponentRetained_TYPE_BYTE_BGR -#define IMAGE_FORMAT_BYTE_RGB javax_media_j3d_ImageComponentRetained_TYPE_BYTE_RGB -#define IMAGE_FORMAT_BYTE_ABGR javax_media_j3d_ImageComponentRetained_TYPE_BYTE_ABGR -#define IMAGE_FORMAT_BYTE_RGBA javax_media_j3d_ImageComponentRetained_TYPE_BYTE_RGBA -#define IMAGE_FORMAT_BYTE_LA javax_media_j3d_ImageComponentRetained_TYPE_BYTE_LA -#define IMAGE_FORMAT_BYTE_GRAY javax_media_j3d_ImageComponentRetained_TYPE_BYTE_GRAY -#define IMAGE_FORMAT_USHORT_GRAY javax_media_j3d_ImageComponentRetained_TYPE_USHORT_GRAY -#define IMAGE_FORMAT_INT_BGR javax_media_j3d_ImageComponentRetained_TYPE_INT_BGR -#define IMAGE_FORMAT_INT_RGB javax_media_j3d_ImageComponentRetained_TYPE_INT_RGB -#define IMAGE_FORMAT_INT_ARGB javax_media_j3d_ImageComponentRetained_TYPE_INT_ARGB - -#define IMAGE_DATA_TYPE_BYTE_ARRAY javax_media_j3d_ImageComponentRetained_IMAGE_DATA_TYPE_BYTE_ARRAY -#define IMAGE_DATA_TYPE_INT_ARRAY javax_media_j3d_ImageComponentRetained_IMAGE_DATA_TYPE_INT_ARRAY -#define IMAGE_DATA_TYPE_BYTE_BUFFER javax_media_j3d_ImageComponentRetained_IMAGE_DATA_TYPE_BYTE_BUFFER -#define IMAGE_DATA_TYPE_INT_BUFFER javax_media_j3d_ImageComponentRetained_IMAGE_DATA_TYPE_INT_BUFFER - - -/* These match the definitions in GeometryArray.java */ -/* These have a GA prefix to avoid confusion with TEXTURE_COORDINATE_2 above */ -#define GA_COORDINATES javax_media_j3d_GeometryArray_COORDINATES -#define GA_NORMALS javax_media_j3d_GeometryArray_NORMALS -#define GA_COLOR javax_media_j3d_GeometryArray_COLOR -#define GA_WITH_ALPHA javax_media_j3d_GeometryArray_WITH_ALPHA -#define GA_TEXTURE_COORDINATE_2 javax_media_j3d_GeometryArray_TEXTURE_COORDINATE_2 -#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 - */ - -#define RED_SIZE javax_media_j3d_NativeConfigTemplate3D_RED_SIZE -#define GREEN_SIZE javax_media_j3d_NativeConfigTemplate3D_GREEN_SIZE -#define BLUE_SIZE javax_media_j3d_NativeConfigTemplate3D_BLUE_SIZE -#define ALPHA_SIZE javax_media_j3d_NativeConfigTemplate3D_ALPHA_SIZE -#define ACCUM_BUFFER javax_media_j3d_NativeConfigTemplate3D_ACCUM_BUFFER -#define DEPTH_SIZE javax_media_j3d_NativeConfigTemplate3D_DEPTH_SIZE - /* this maps to GLX_ACCUM_RED, */ - /* GLX_ACCUM_GREEN and */ - /* GLX_ACCUM_BLUE so NUM_ITEMS */ - /* must be incremented by 3 for */ - /* this attribute. */ -#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) - /* total + 2 beacause of */ - /* DEPTH_SIZE */ - -/* values for "enum" entries for GraphicsConfiguration */ -#define REQUIRED 1 -#define PREFERRED 2 -#define UNNECESSARY 3 - - - -#define INTENSITY javax_media_j3d_Texture_INTENSITY -#define LUMINANCE javax_media_j3d_Texture_LUMINANCE -#define ALPHA javax_media_j3d_Texture_ALPHA -#define LUMINANCE_ALPHA javax_media_j3d_Texture_LUMINANCE_ALPHA -#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 - -#ifndef APIENTRY -#define APIENTRY -#endif - -/* define function prototypes */ -typedef void (APIENTRY * MYPFNGLBLENDCOLORPROC) (GLclampf red, GLclampf green, - GLclampf blue, GLclampf alpha); -typedef void (APIENTRY * MYPFNGLBLENDCOLOREXTPROC) (GLclampf red, GLclampf green, - GLclampf blue, GLclampf alpha); -typedef void (APIENTRY * MYPFNGLCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); -typedef void (APIENTRY * MYPFNGLGETCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRY * MYPFNGLGETCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table); -typedef void (APIENTRY * MYPFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture); -typedef void (APIENTRY * MYPFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, GLint *first, GLsizei *count, GLsizei primcount); -typedef void (APIENTRY * MYPFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum, GLsizei *, GLenum, const GLvoid**, GLsizei); -typedef void (APIENTRY * MYPFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count); -typedef void (APIENTRY * MYPFNGLUNLOCKARRAYSEXTPROC) (void); - -typedef void (APIENTRY * MYPFNGLMULTITEXCOORD2FVPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRY * MYPFNGLMULTITEXCOORD3FVPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRY * MYPFNGLMULTITEXCOORD4FVPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRY * MYPFNGLLOADTRANSPOSEMATRIXDPROC) (const GLdouble *m); -typedef void (APIENTRY * MYPFNGLMULTTRANSPOSEMATRIXDPROC) (const GLdouble *m); -typedef void (APIENTRY * MYPFNGLACTIVETEXTUREPROC) (GLenum texture); -typedef void (APIENTRY * MYPFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRY * MYPFNGLTEXSUBIMAGE3DPROC) (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 * MYPFNGLGLOBALALPHAFACTORFSUNPROC) (GLfloat factor); - -typedef void (APIENTRY * MYPFNGLCOMBINERINPUTNV) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); -typedef void (APIENTRY * MYPFNGLFINALCOMBINERINPUTNV) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); -typedef void (APIENTRY * MYPFNGLCOMBINEROUTPUTNV) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); -typedef void (APIENTRY * MYPFNGLCOMBINERPARAMETERFVNV) (GLenum pname, const GLfloat *params); -typedef void (APIENTRY * MYPFNGLCOMBINERPARAMETERIVNV) (GLenum pname, const GLint *params); -typedef void (APIENTRY * MYPFNGLCOMBINERPARAMETERFNV) (GLenum pname, GLfloat param); -typedef void (APIENTRY * MYPFNGLCOMBINERPARAMETERINV) (GLenum pname, GLint param); -typedef void (APIENTRY * MYPFNGLSHARPENTEXFUNCSGI) (GLenum target, GLsizei n, const GLfloat *points); -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(UNIX) -typedef GLXFBConfig * (APIENTRY * MYPFNGLXCHOOSEFBCONFIG) (Display *dpy, int screen, const int *attrib_list, int *nelements); -#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 */ -struct GraphicsContextPropertiesInfoRec { - jlong context; - - /* version and extension info */ - char *versionStr; - char *vendorStr; - char *rendererStr; - char *extensionStr; - int versionNumbers[2]; - jboolean gl13; /* OpenGL 1.3 or greater */ - jboolean gl14; /* OpenGL 1.4 or greater */ - jboolean gl20; /* OpenGL 2.0 or greater */ - - /* GL_ARB_imaging subset */ - /* GL_EXT_blend_color or GL_BLEND_COLOR */ - jboolean blend_color_ext; - GLenum blendFunctionTable[MAX_BLEND_FUNC_TABLE_SIZE]; - - /* texture_lod */ - jboolean textureLodAvailable; - GLenum texture_min_lod_enum; - GLenum texture_max_lod_enum; - GLenum texture_base_level_enum; - GLenum texture_max_level_enum; - - - /* ***** GL extensions ***** */ - - /* GL_CLAMP_TO_BORDER or GL_CLAMP */ - GLenum texture_clamp_to_border_enum; - - /* GL_SUN_multi_draw_arrays */ - jboolean multi_draw_arrays_sun; - - /* GL_SUN_global_alpha */ - jboolean global_alpha_sun; - - /* GL_EXT_abgr */ - jboolean abgr_ext; - /* GL_EXT_multi_draw_arrays */ - jboolean multi_draw_arrays_ext; - - /* GL_EXT_compiled_vertex_array */ - jboolean compiled_vertex_array_ext; - - /* Multitexture parameters */ - 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; - int textureColorTableSize; - - /* GL_ARB_texture_env_combine */ - /* GL_EXT_texture_env_combine */ - jboolean textureEnvCombineAvailable; - jboolean textureCombineDot3Available; - jboolean textureCombineSubtractAvailable; - - /* GL_NV_register_combiners */ - jboolean textureRegisterCombinersAvailable; - GLenum currentTextureUnit; - GLenum currentCombinerUnit; - - /* save the enum for the combine modes since the enums between - ARB & EXT might be different. - */ - GLenum combine_enum; - GLenum combine_add_signed_enum; - GLenum combine_interpolate_enum; - GLenum combine_subtract_enum; - GLenum combine_dot3_rgb_enum; - GLenum combine_dot3_rgba_enum; - - /* GL mulitsample functionality */ - jboolean multisample; - - /* - By default, full scene antialiasing is disable if - multisampling pixel format (or visual) is chosen. - To honor display driver multisampling antialiasing - setting (e.g. force scene antialiasing), set the - implicit multisample flag to true in this case. - This cause Java3D not to invoke any native - multisampling API to enable/disable scene antialiasing. - */ - jboolean implicit_multisample; - - /* by MIK OF CLASSX */ - /* - Used by transparentOffScreen feature. - This is the value of the alpha channel - of the background. - */ - GLfloat alphaClearValue; - - /* GL_SGIS_sharpen_texture */ - jboolean textureSharpenAvailable; - GLenum linear_sharpen_enum; - GLenum linear_sharpen_rgb_enum; - GLenum linear_sharpen_alpha_enum; - - /* GL_SGIS_detail_texture */ - jboolean textureDetailAvailable; - GLenum texture_detail_ext_enum; - GLenum linear_detail_enum; - GLenum linear_detail_rgb_enum; - GLenum linear_detail_alpha_enum; - GLenum texture_detail_mode_enum; - GLenum texture_detail_level_enum; - - /* GL_SGIS_texture_filter4 */ - jboolean textureFilter4Available; - GLenum filter4_enum; - - /* GL_EXT_texture_filter_anisotropic */ - jboolean textureAnisotropicFilterAvailable; - GLenum texture_filter_anisotropic_ext_enum; - GLenum max_texture_filter_anisotropy_enum; - - /* GL_SGIX_texture_lod_bias */ - jboolean textureLodBiasAvailable; - - /* extension mask */ - jint extMask; - jint textureExtMask; - - /* function pointers */ - MYPFNGLBLENDCOLORPROC glBlendColor; - MYPFNGLBLENDCOLOREXTPROC glBlendColorEXT; - MYPFNGLCOLORTABLEPROC glColorTable; - MYPFNGLGETCOLORTABLEPARAMETERIVPROC glGetColorTableParameteriv; - MYPFNGLTEXIMAGE3DPROC glTexImage3DEXT; - MYPFNGLTEXSUBIMAGE3DPROC glTexSubImage3DEXT; - MYPFNGLCLIENTACTIVETEXTUREPROC glClientActiveTexture; - MYPFNGLACTIVETEXTUREPROC glActiveTexture; - MYPFNGLMULTIDRAWARRAYSEXTPROC glMultiDrawArraysEXT; - MYPFNGLMULTIDRAWELEMENTSEXTPROC glMultiDrawElementsEXT; - MYPFNGLLOCKARRAYSEXTPROC glLockArraysEXT; - MYPFNGLUNLOCKARRAYSEXTPROC glUnlockArraysEXT; - MYPFNGLMULTITEXCOORD2FVPROC glMultiTexCoord2fv; - MYPFNGLMULTITEXCOORD3FVPROC glMultiTexCoord3fv; - MYPFNGLMULTITEXCOORD4FVPROC glMultiTexCoord4fv; - MYPFNGLLOADTRANSPOSEMATRIXDPROC glLoadTransposeMatrixd; - MYPFNGLMULTTRANSPOSEMATRIXDPROC glMultTransposeMatrixd; - MYPFNGLGLOBALALPHAFACTORFSUNPROC glGlobalAlphaFactorfSUN; - - MYPFNGLCOMBINERINPUTNV glCombinerInputNV; - MYPFNGLCOMBINEROUTPUTNV glCombinerOutputNV; - MYPFNGLFINALCOMBINERINPUTNV glFinalCombinerInputNV; - MYPFNGLCOMBINERPARAMETERFVNV glCombinerParameterfvNV; - MYPFNGLCOMBINERPARAMETERIVNV glCombinerParameterivNV; - MYPFNGLCOMBINERPARAMETERFNV glCombinerParameterfNV; - MYPFNGLCOMBINERPARAMETERINV glCombinerParameteriNV; - - MYPFNGLSHARPENTEXFUNCSGI glSharpenTexFuncSGIS; - MYPFNGLDETAILTEXFUNCSGI glDetailTexFuncSGIS; - MYPFNGLTEXFILTERFUNCSGI glTexFilterFuncSGIS; - - /* Shading language support */ - jboolean shadingLanguageGLSL; - jboolean shadingLanguageCg; - - /* 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 - -/* define the structure to hold the info. of a pixel format */ -typedef struct PixelFormatInfoRec PixelFormatInfo; - -struct PixelFormatInfoRec { - /* Information about onScreen pixel format */ - int onScreenPFormat; /* PixelFormat for onScreen */ - GLboolean onScreenHasMultisample; /* TRUE if WGL_SAMPLE_BUFFERS_ARB is TRUE and - WGL_SAMPLES_ARB > 1 */ - 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 - WGL_SAMPLES_ARB > 1 */ - GLboolean offScreenHasStereo; - GLboolean offScreenHasDoubleBuffer; - GLboolean offScreenHasAccum; - int offScreenStencilSize; - - GLboolean drawToPbuffer; /* value of DRAW_TO_PBUFFER attr for offScreenPFormat */ - - /* Information about extension support */ - char* supportedExtensions; /* list of supported ARB extensions */ - GLboolean supportARB; /* TRUE if wgl*PixelFormat*ARB functions supported */ - GLboolean supportPbuffer; /* TRUE if wgl*Pbuffer functions supported */ - - - /* handle to ARB functions */ - PFNWGLCHOOSEPIXELFORMATARBPROC wglChoosePixelFormatARB; - PFNWGLGETPIXELFORMATATTRIBIVARBPROC wglGetPixelFormatAttribivARB; - PFNWGLCREATEPBUFFERARBPROC wglCreatePbufferARB; - PFNWGLGETPBUFFERDCARBPROC wglGetPbufferDCARB; - PFNWGLRELEASEPBUFFERDCARBPROC wglReleasePbufferDCARB; - PFNWGLDESTROYPBUFFERARBPROC wglDestroyPbufferARB; - PFNWGLQUERYPBUFFERARBPROC wglQueryPbufferARB; -}; - -#endif /* WIN32 */ - -/* define the structure to hold the info. of a offScreen buffer */ -typedef struct OffScreenBufferInfoRec OffScreenBufferInfo; - -struct OffScreenBufferInfoRec { - GLboolean isPbuffer; /* GL_TRUE if Pbuffer is used. */ - -#if defined(UNIX) -#endif - -#ifdef WIN32 - HPBUFFERARB hpbuf; /* Handle to the Pbuffer */ -#endif /* WIN32 */ - -}; - - -#endif /* D3D */ -#endif /* _Java3D_gldefs_h_ */ diff --git a/src/native/ogl/glext.h b/src/native/ogl/glext.h deleted file mode 100644 index 2519a6c..0000000 --- a/src/native/ogl/glext.h +++ /dev/null @@ -1,7260 +0,0 @@ -#ifndef __glext_h_ -#define __glext_h_ - -#ifdef __cplusplus -extern "C" { -#endif - -/* -** Copyright (c) 2007 The Khronos Group Inc. -** -** Permission is hereby granted, free of charge, to any person obtaining a -** copy of this software and/or associated documentation files (the -** "Materials"), to deal in the Materials without restriction, including -** without limitation the rights to use, copy, modify, merge, publish, -** distribute, sublicense, and/or sell copies of the Materials, and to -** permit persons to whom the Materials are furnished to do so, subject to -** the following conditions: -** -** The above copyright notice and this permission notice shall be included -** in all copies or substantial portions of the Materials. -** -** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. -*/ - -#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) -#define WIN32_LEAN_AND_MEAN 1 -#include <windows.h> -#endif - -#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 */ -/* glext.h last updated 2007/02/12 */ -/* Current version at http://www.opengl.org/registry/ */ -#define GL_GLEXT_VERSION 39 - -#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 -#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 -#define GL_BLEND_COLOR 0x8005 -#define GL_FUNC_ADD 0x8006 -#define GL_MIN 0x8007 -#define GL_MAX 0x8008 -#define GL_BLEND_EQUATION 0x8009 -#define GL_FUNC_SUBTRACT 0x800A -#define GL_FUNC_REVERSE_SUBTRACT 0x800B -#define GL_CONVOLUTION_1D 0x8010 -#define GL_CONVOLUTION_2D 0x8011 -#define GL_SEPARABLE_2D 0x8012 -#define GL_CONVOLUTION_BORDER_MODE 0x8013 -#define GL_CONVOLUTION_FILTER_SCALE 0x8014 -#define GL_CONVOLUTION_FILTER_BIAS 0x8015 -#define GL_REDUCE 0x8016 -#define GL_CONVOLUTION_FORMAT 0x8017 -#define GL_CONVOLUTION_WIDTH 0x8018 -#define GL_CONVOLUTION_HEIGHT 0x8019 -#define GL_MAX_CONVOLUTION_WIDTH 0x801A -#define GL_MAX_CONVOLUTION_HEIGHT 0x801B -#define GL_POST_CONVOLUTION_RED_SCALE 0x801C -#define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D -#define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E -#define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F -#define GL_POST_CONVOLUTION_RED_BIAS 0x8020 -#define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 -#define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 -#define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 -#define GL_HISTOGRAM 0x8024 -#define GL_PROXY_HISTOGRAM 0x8025 -#define GL_HISTOGRAM_WIDTH 0x8026 -#define GL_HISTOGRAM_FORMAT 0x8027 -#define GL_HISTOGRAM_RED_SIZE 0x8028 -#define GL_HISTOGRAM_GREEN_SIZE 0x8029 -#define GL_HISTOGRAM_BLUE_SIZE 0x802A -#define GL_HISTOGRAM_ALPHA_SIZE 0x802B -#define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C -#define GL_HISTOGRAM_SINK 0x802D -#define GL_MINMAX 0x802E -#define GL_MINMAX_FORMAT 0x802F -#define GL_MINMAX_SINK 0x8030 -#define GL_TABLE_TOO_LARGE 0x8031 -#define GL_COLOR_MATRIX 0x80B1 -#define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 -#define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 -#define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 -#define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 -#define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 -#define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 -#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 -#define GL_PROXY_COLOR_TABLE 0x80D3 -#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 -#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 -#define GL_COLOR_TABLE_SCALE 0x80D6 -#define GL_COLOR_TABLE_BIAS 0x80D7 -#define GL_COLOR_TABLE_FORMAT 0x80D8 -#define GL_COLOR_TABLE_WIDTH 0x80D9 -#define GL_COLOR_TABLE_RED_SIZE 0x80DA -#define GL_COLOR_TABLE_GREEN_SIZE 0x80DB -#define GL_COLOR_TABLE_BLUE_SIZE 0x80DC -#define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD -#define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE -#define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF -#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_VERSION_2_1 -#define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F -#define GL_PIXEL_PACK_BUFFER 0x88EB -#define GL_PIXEL_UNPACK_BUFFER 0x88EC -#define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED -#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF -#define GL_FLOAT_MAT2x3 0x8B65 -#define GL_FLOAT_MAT2x4 0x8B66 -#define GL_FLOAT_MAT3x2 0x8B67 -#define GL_FLOAT_MAT3x4 0x8B68 -#define GL_FLOAT_MAT4x2 0x8B69 -#define GL_FLOAT_MAT4x3 0x8B6A -#define GL_SRGB 0x8C40 -#define GL_SRGB8 0x8C41 -#define GL_SRGB_ALPHA 0x8C42 -#define GL_SRGB8_ALPHA8 0x8C43 -#define GL_SLUMINANCE_ALPHA 0x8C44 -#define GL_SLUMINANCE8_ALPHA8 0x8C45 -#define GL_SLUMINANCE 0x8C46 -#define GL_SLUMINANCE8 0x8C47 -#define GL_COMPRESSED_SRGB 0x8C48 -#define GL_COMPRESSED_SRGB_ALPHA 0x8C49 -#define GL_COMPRESSED_SLUMINANCE 0x8C4A -#define GL_COMPRESSED_SLUMINANCE_ALPHA 0x8C4B -#endif - -#ifndef GL_ARB_multitexture -#define GL_TEXTURE0_ARB 0x84C0 -#define GL_TEXTURE1_ARB 0x84C1 -#define GL_TEXTURE2_ARB 0x84C2 -#define GL_TEXTURE3_ARB 0x84C3 -#define GL_TEXTURE4_ARB 0x84C4 -#define GL_TEXTURE5_ARB 0x84C5 -#define GL_TEXTURE6_ARB 0x84C6 -#define GL_TEXTURE7_ARB 0x84C7 -#define GL_TEXTURE8_ARB 0x84C8 -#define GL_TEXTURE9_ARB 0x84C9 -#define GL_TEXTURE10_ARB 0x84CA -#define GL_TEXTURE11_ARB 0x84CB -#define GL_TEXTURE12_ARB 0x84CC -#define GL_TEXTURE13_ARB 0x84CD -#define GL_TEXTURE14_ARB 0x84CE -#define GL_TEXTURE15_ARB 0x84CF -#define GL_TEXTURE16_ARB 0x84D0 -#define GL_TEXTURE17_ARB 0x84D1 -#define GL_TEXTURE18_ARB 0x84D2 -#define GL_TEXTURE19_ARB 0x84D3 -#define GL_TEXTURE20_ARB 0x84D4 -#define GL_TEXTURE21_ARB 0x84D5 -#define GL_TEXTURE22_ARB 0x84D6 -#define GL_TEXTURE23_ARB 0x84D7 -#define GL_TEXTURE24_ARB 0x84D8 -#define GL_TEXTURE25_ARB 0x84D9 -#define GL_TEXTURE26_ARB 0x84DA -#define GL_TEXTURE27_ARB 0x84DB -#define GL_TEXTURE28_ARB 0x84DC -#define GL_TEXTURE29_ARB 0x84DD -#define GL_TEXTURE30_ARB 0x84DE -#define GL_TEXTURE31_ARB 0x84DF -#define GL_ACTIVE_TEXTURE_ARB 0x84E0 -#define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 -#define GL_MAX_TEXTURE_UNITS_ARB 0x84E2 -#endif - -#ifndef GL_ARB_transpose_matrix -#define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3 -#define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4 -#define GL_TRANSPOSE_TEXTURE_MATRIX_ARB 0x84E5 -#define GL_TRANSPOSE_COLOR_MATRIX_ARB 0x84E6 -#endif - -#ifndef GL_ARB_multisample -#define GL_MULTISAMPLE_ARB 0x809D -#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F -#define GL_SAMPLE_COVERAGE_ARB 0x80A0 -#define GL_SAMPLE_BUFFERS_ARB 0x80A8 -#define GL_SAMPLES_ARB 0x80A9 -#define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA -#define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB -#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 -#define GL_TEXTURE_CUBE_MAP_ARB 0x8513 -#define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A -#define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851C -#endif - -#ifndef GL_ARB_texture_compression -#define GL_COMPRESSED_ALPHA_ARB 0x84E9 -#define GL_COMPRESSED_LUMINANCE_ARB 0x84EA -#define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB -#define GL_COMPRESSED_INTENSITY_ARB 0x84EC -#define GL_COMPRESSED_RGB_ARB 0x84ED -#define GL_COMPRESSED_RGBA_ARB 0x84EE -#define GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF -#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 -#define GL_WEIGHT_SUM_UNITY_ARB 0x86A6 -#define GL_VERTEX_BLEND_ARB 0x86A7 -#define GL_CURRENT_WEIGHT_ARB 0x86A8 -#define GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9 -#define GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA -#define GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB -#define GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC -#define GL_WEIGHT_ARRAY_ARB 0x86AD -#define GL_MODELVIEW0_ARB 0x1700 -#define GL_MODELVIEW1_ARB 0x850A -#define GL_MODELVIEW2_ARB 0x8722 -#define GL_MODELVIEW3_ARB 0x8723 -#define GL_MODELVIEW4_ARB 0x8724 -#define GL_MODELVIEW5_ARB 0x8725 -#define GL_MODELVIEW6_ARB 0x8726 -#define GL_MODELVIEW7_ARB 0x8727 -#define GL_MODELVIEW8_ARB 0x8728 -#define GL_MODELVIEW9_ARB 0x8729 -#define GL_MODELVIEW10_ARB 0x872A -#define GL_MODELVIEW11_ARB 0x872B -#define GL_MODELVIEW12_ARB 0x872C -#define GL_MODELVIEW13_ARB 0x872D -#define GL_MODELVIEW14_ARB 0x872E -#define GL_MODELVIEW15_ARB 0x872F -#define GL_MODELVIEW16_ARB 0x8730 -#define GL_MODELVIEW17_ARB 0x8731 -#define GL_MODELVIEW18_ARB 0x8732 -#define GL_MODELVIEW19_ARB 0x8733 -#define GL_MODELVIEW20_ARB 0x8734 -#define GL_MODELVIEW21_ARB 0x8735 -#define GL_MODELVIEW22_ARB 0x8736 -#define GL_MODELVIEW23_ARB 0x8737 -#define GL_MODELVIEW24_ARB 0x8738 -#define GL_MODELVIEW25_ARB 0x8739 -#define GL_MODELVIEW26_ARB 0x873A -#define GL_MODELVIEW27_ARB 0x873B -#define GL_MODELVIEW28_ARB 0x873C -#define GL_MODELVIEW29_ARB 0x873D -#define GL_MODELVIEW30_ARB 0x873E -#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 0x891B -#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 - -#ifndef GL_EXT_blend_color -#define GL_CONSTANT_COLOR_EXT 0x8001 -#define GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002 -#define GL_CONSTANT_ALPHA_EXT 0x8003 -#define GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004 -#define GL_BLEND_COLOR_EXT 0x8005 -#endif - -#ifndef GL_EXT_polygon_offset -#define GL_POLYGON_OFFSET_EXT 0x8037 -#define GL_POLYGON_OFFSET_FACTOR_EXT 0x8038 -#define GL_POLYGON_OFFSET_BIAS_EXT 0x8039 -#endif - -#ifndef GL_EXT_texture -#define GL_ALPHA4_EXT 0x803B -#define GL_ALPHA8_EXT 0x803C -#define GL_ALPHA12_EXT 0x803D -#define GL_ALPHA16_EXT 0x803E -#define GL_LUMINANCE4_EXT 0x803F -#define GL_LUMINANCE8_EXT 0x8040 -#define GL_LUMINANCE12_EXT 0x8041 -#define GL_LUMINANCE16_EXT 0x8042 -#define GL_LUMINANCE4_ALPHA4_EXT 0x8043 -#define GL_LUMINANCE6_ALPHA2_EXT 0x8044 -#define GL_LUMINANCE8_ALPHA8_EXT 0x8045 -#define GL_LUMINANCE12_ALPHA4_EXT 0x8046 -#define GL_LUMINANCE12_ALPHA12_EXT 0x8047 -#define GL_LUMINANCE16_ALPHA16_EXT 0x8048 -#define GL_INTENSITY_EXT 0x8049 -#define GL_INTENSITY4_EXT 0x804A -#define GL_INTENSITY8_EXT 0x804B -#define GL_INTENSITY12_EXT 0x804C -#define GL_INTENSITY16_EXT 0x804D -#define GL_RGB2_EXT 0x804E -#define GL_RGB4_EXT 0x804F -#define GL_RGB5_EXT 0x8050 -#define GL_RGB8_EXT 0x8051 -#define GL_RGB10_EXT 0x8052 -#define GL_RGB12_EXT 0x8053 -#define GL_RGB16_EXT 0x8054 -#define GL_RGBA2_EXT 0x8055 -#define GL_RGBA4_EXT 0x8056 -#define GL_RGB5_A1_EXT 0x8057 -#define GL_RGBA8_EXT 0x8058 -#define GL_RGB10_A2_EXT 0x8059 -#define GL_RGBA12_EXT 0x805A -#define GL_RGBA16_EXT 0x805B -#define GL_TEXTURE_RED_SIZE_EXT 0x805C -#define GL_TEXTURE_GREEN_SIZE_EXT 0x805D -#define GL_TEXTURE_BLUE_SIZE_EXT 0x805E -#define GL_TEXTURE_ALPHA_SIZE_EXT 0x805F -#define GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060 -#define GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061 -#define GL_REPLACE_EXT 0x8062 -#define GL_PROXY_TEXTURE_1D_EXT 0x8063 -#define GL_PROXY_TEXTURE_2D_EXT 0x8064 -#define GL_TEXTURE_TOO_LARGE_EXT 0x8065 -#endif - -#ifndef GL_EXT_texture3D -#define GL_PACK_SKIP_IMAGES_EXT 0x806B -#define GL_PACK_IMAGE_HEIGHT_EXT 0x806C -#define GL_UNPACK_SKIP_IMAGES_EXT 0x806D -#define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E -#define GL_TEXTURE_3D_EXT 0x806F -#define GL_PROXY_TEXTURE_3D_EXT 0x8070 -#define GL_TEXTURE_DEPTH_EXT 0x8071 -#define GL_TEXTURE_WRAP_R_EXT 0x8072 -#define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073 -#endif - -#ifndef GL_SGIS_texture_filter4 -#define GL_FILTER4_SGIS 0x8146 -#define GL_TEXTURE_FILTER4_SIZE_SGIS 0x8147 -#endif - -#ifndef GL_EXT_subtexture -#endif - -#ifndef GL_EXT_copy_texture -#endif - -#ifndef GL_EXT_histogram -#define GL_HISTOGRAM_EXT 0x8024 -#define GL_PROXY_HISTOGRAM_EXT 0x8025 -#define GL_HISTOGRAM_WIDTH_EXT 0x8026 -#define GL_HISTOGRAM_FORMAT_EXT 0x8027 -#define GL_HISTOGRAM_RED_SIZE_EXT 0x8028 -#define GL_HISTOGRAM_GREEN_SIZE_EXT 0x8029 -#define GL_HISTOGRAM_BLUE_SIZE_EXT 0x802A -#define GL_HISTOGRAM_ALPHA_SIZE_EXT 0x802B -#define GL_HISTOGRAM_LUMINANCE_SIZE_EXT 0x802C -#define GL_HISTOGRAM_SINK_EXT 0x802D -#define GL_MINMAX_EXT 0x802E -#define GL_MINMAX_FORMAT_EXT 0x802F -#define GL_MINMAX_SINK_EXT 0x8030 -#define GL_TABLE_TOO_LARGE_EXT 0x8031 -#endif - -#ifndef GL_EXT_convolution -#define GL_CONVOLUTION_1D_EXT 0x8010 -#define GL_CONVOLUTION_2D_EXT 0x8011 -#define GL_SEPARABLE_2D_EXT 0x8012 -#define GL_CONVOLUTION_BORDER_MODE_EXT 0x8013 -#define GL_CONVOLUTION_FILTER_SCALE_EXT 0x8014 -#define GL_CONVOLUTION_FILTER_BIAS_EXT 0x8015 -#define GL_REDUCE_EXT 0x8016 -#define GL_CONVOLUTION_FORMAT_EXT 0x8017 -#define GL_CONVOLUTION_WIDTH_EXT 0x8018 -#define GL_CONVOLUTION_HEIGHT_EXT 0x8019 -#define GL_MAX_CONVOLUTION_WIDTH_EXT 0x801A -#define GL_MAX_CONVOLUTION_HEIGHT_EXT 0x801B -#define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C -#define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D -#define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E -#define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F -#define GL_POST_CONVOLUTION_RED_BIAS_EXT 0x8020 -#define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021 -#define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022 -#define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023 -#endif - -#ifndef GL_SGI_color_matrix -#define GL_COLOR_MATRIX_SGI 0x80B1 -#define GL_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B2 -#define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3 -#define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4 -#define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5 -#define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6 -#define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7 -#define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8 -#define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9 -#define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA -#define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB -#endif - -#ifndef GL_SGI_color_table -#define GL_COLOR_TABLE_SGI 0x80D0 -#define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1 -#define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2 -#define GL_PROXY_COLOR_TABLE_SGI 0x80D3 -#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4 -#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5 -#define GL_COLOR_TABLE_SCALE_SGI 0x80D6 -#define GL_COLOR_TABLE_BIAS_SGI 0x80D7 -#define GL_COLOR_TABLE_FORMAT_SGI 0x80D8 -#define GL_COLOR_TABLE_WIDTH_SGI 0x80D9 -#define GL_COLOR_TABLE_RED_SIZE_SGI 0x80DA -#define GL_COLOR_TABLE_GREEN_SIZE_SGI 0x80DB -#define GL_COLOR_TABLE_BLUE_SIZE_SGI 0x80DC -#define GL_COLOR_TABLE_ALPHA_SIZE_SGI 0x80DD -#define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE -#define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF -#endif - -#ifndef GL_SGIS_pixel_texture -#define GL_PIXEL_TEXTURE_SGIS 0x8353 -#define GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS 0x8354 -#define GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS 0x8355 -#define GL_PIXEL_GROUP_COLOR_SGIS 0x8356 -#endif - -#ifndef GL_SGIX_pixel_texture -#define GL_PIXEL_TEX_GEN_SGIX 0x8139 -#define GL_PIXEL_TEX_GEN_MODE_SGIX 0x832B -#endif - -#ifndef GL_SGIS_texture4D -#define GL_PACK_SKIP_VOLUMES_SGIS 0x8130 -#define GL_PACK_IMAGE_DEPTH_SGIS 0x8131 -#define GL_UNPACK_SKIP_VOLUMES_SGIS 0x8132 -#define GL_UNPACK_IMAGE_DEPTH_SGIS 0x8133 -#define GL_TEXTURE_4D_SGIS 0x8134 -#define GL_PROXY_TEXTURE_4D_SGIS 0x8135 -#define GL_TEXTURE_4DSIZE_SGIS 0x8136 -#define GL_TEXTURE_WRAP_Q_SGIS 0x8137 -#define GL_MAX_4D_TEXTURE_SIZE_SGIS 0x8138 -#define GL_TEXTURE_4D_BINDING_SGIS 0x814F -#endif - -#ifndef GL_SGI_texture_color_table -#define GL_TEXTURE_COLOR_TABLE_SGI 0x80BC -#define GL_PROXY_TEXTURE_COLOR_TABLE_SGI 0x80BD -#endif - -#ifndef GL_EXT_cmyka -#define GL_CMYK_EXT 0x800C -#define GL_CMYKA_EXT 0x800D -#define GL_PACK_CMYK_HINT_EXT 0x800E -#define GL_UNPACK_CMYK_HINT_EXT 0x800F -#endif - -#ifndef GL_EXT_texture_object -#define GL_TEXTURE_PRIORITY_EXT 0x8066 -#define GL_TEXTURE_RESIDENT_EXT 0x8067 -#define GL_TEXTURE_1D_BINDING_EXT 0x8068 -#define GL_TEXTURE_2D_BINDING_EXT 0x8069 -#define GL_TEXTURE_3D_BINDING_EXT 0x806A -#endif - -#ifndef GL_SGIS_detail_texture -#define GL_DETAIL_TEXTURE_2D_SGIS 0x8095 -#define GL_DETAIL_TEXTURE_2D_BINDING_SGIS 0x8096 -#define GL_LINEAR_DETAIL_SGIS 0x8097 -#define GL_LINEAR_DETAIL_ALPHA_SGIS 0x8098 -#define GL_LINEAR_DETAIL_COLOR_SGIS 0x8099 -#define GL_DETAIL_TEXTURE_LEVEL_SGIS 0x809A -#define GL_DETAIL_TEXTURE_MODE_SGIS 0x809B -#define GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS 0x809C -#endif - -#ifndef GL_SGIS_sharpen_texture -#define GL_LINEAR_SHARPEN_SGIS 0x80AD -#define GL_LINEAR_SHARPEN_ALPHA_SGIS 0x80AE -#define GL_LINEAR_SHARPEN_COLOR_SGIS 0x80AF -#define GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS 0x80B0 -#endif - -#ifndef GL_EXT_packed_pixels -#define GL_UNSIGNED_BYTE_3_3_2_EXT 0x8032 -#define GL_UNSIGNED_SHORT_4_4_4_4_EXT 0x8033 -#define GL_UNSIGNED_SHORT_5_5_5_1_EXT 0x8034 -#define GL_UNSIGNED_INT_8_8_8_8_EXT 0x8035 -#define GL_UNSIGNED_INT_10_10_10_2_EXT 0x8036 -#endif - -#ifndef GL_SGIS_texture_lod -#define GL_TEXTURE_MIN_LOD_SGIS 0x813A -#define GL_TEXTURE_MAX_LOD_SGIS 0x813B -#define GL_TEXTURE_BASE_LEVEL_SGIS 0x813C -#define GL_TEXTURE_MAX_LEVEL_SGIS 0x813D -#endif - -#ifndef GL_SGIS_multisample -#define GL_MULTISAMPLE_SGIS 0x809D -#define GL_SAMPLE_ALPHA_TO_MASK_SGIS 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE_SGIS 0x809F -#define GL_SAMPLE_MASK_SGIS 0x80A0 -#define GL_1PASS_SGIS 0x80A1 -#define GL_2PASS_0_SGIS 0x80A2 -#define GL_2PASS_1_SGIS 0x80A3 -#define GL_4PASS_0_SGIS 0x80A4 -#define GL_4PASS_1_SGIS 0x80A5 -#define GL_4PASS_2_SGIS 0x80A6 -#define GL_4PASS_3_SGIS 0x80A7 -#define GL_SAMPLE_BUFFERS_SGIS 0x80A8 -#define GL_SAMPLES_SGIS 0x80A9 -#define GL_SAMPLE_MASK_VALUE_SGIS 0x80AA -#define GL_SAMPLE_MASK_INVERT_SGIS 0x80AB -#define GL_SAMPLE_PATTERN_SGIS 0x80AC -#endif - -#ifndef GL_EXT_rescale_normal -#define GL_RESCALE_NORMAL_EXT 0x803A -#endif - -#ifndef GL_EXT_vertex_array -#define GL_VERTEX_ARRAY_EXT 0x8074 -#define GL_NORMAL_ARRAY_EXT 0x8075 -#define GL_COLOR_ARRAY_EXT 0x8076 -#define GL_INDEX_ARRAY_EXT 0x8077 -#define GL_TEXTURE_COORD_ARRAY_EXT 0x8078 -#define GL_EDGE_FLAG_ARRAY_EXT 0x8079 -#define GL_VERTEX_ARRAY_SIZE_EXT 0x807A -#define GL_VERTEX_ARRAY_TYPE_EXT 0x807B -#define GL_VERTEX_ARRAY_STRIDE_EXT 0x807C -#define GL_VERTEX_ARRAY_COUNT_EXT 0x807D -#define GL_NORMAL_ARRAY_TYPE_EXT 0x807E -#define GL_NORMAL_ARRAY_STRIDE_EXT 0x807F -#define GL_NORMAL_ARRAY_COUNT_EXT 0x8080 -#define GL_COLOR_ARRAY_SIZE_EXT 0x8081 -#define GL_COLOR_ARRAY_TYPE_EXT 0x8082 -#define GL_COLOR_ARRAY_STRIDE_EXT 0x8083 -#define GL_COLOR_ARRAY_COUNT_EXT 0x8084 -#define GL_INDEX_ARRAY_TYPE_EXT 0x8085 -#define GL_INDEX_ARRAY_STRIDE_EXT 0x8086 -#define GL_INDEX_ARRAY_COUNT_EXT 0x8087 -#define GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088 -#define GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089 -#define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A -#define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B -#define GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C -#define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D -#define GL_VERTEX_ARRAY_POINTER_EXT 0x808E -#define GL_NORMAL_ARRAY_POINTER_EXT 0x808F -#define GL_COLOR_ARRAY_POINTER_EXT 0x8090 -#define GL_INDEX_ARRAY_POINTER_EXT 0x8091 -#define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092 -#define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093 -#endif - -#ifndef GL_EXT_misc_attribute -#endif - -#ifndef GL_SGIS_generate_mipmap -#define GL_GENERATE_MIPMAP_SGIS 0x8191 -#define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192 -#endif - -#ifndef GL_SGIX_clipmap -#define GL_LINEAR_CLIPMAP_LINEAR_SGIX 0x8170 -#define GL_TEXTURE_CLIPMAP_CENTER_SGIX 0x8171 -#define GL_TEXTURE_CLIPMAP_FRAME_SGIX 0x8172 -#define GL_TEXTURE_CLIPMAP_OFFSET_SGIX 0x8173 -#define GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8174 -#define GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX 0x8175 -#define GL_TEXTURE_CLIPMAP_DEPTH_SGIX 0x8176 -#define GL_MAX_CLIPMAP_DEPTH_SGIX 0x8177 -#define GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8178 -#define GL_NEAREST_CLIPMAP_NEAREST_SGIX 0x844D -#define GL_NEAREST_CLIPMAP_LINEAR_SGIX 0x844E -#define GL_LINEAR_CLIPMAP_NEAREST_SGIX 0x844F -#endif - -#ifndef GL_SGIX_shadow -#define GL_TEXTURE_COMPARE_SGIX 0x819A -#define GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B -#define GL_TEXTURE_LEQUAL_R_SGIX 0x819C -#define GL_TEXTURE_GEQUAL_R_SGIX 0x819D -#endif - -#ifndef GL_SGIS_texture_edge_clamp -#define GL_CLAMP_TO_EDGE_SGIS 0x812F -#endif - -#ifndef GL_SGIS_texture_border_clamp -#define GL_CLAMP_TO_BORDER_SGIS 0x812D -#endif - -#ifndef GL_EXT_blend_minmax -#define GL_FUNC_ADD_EXT 0x8006 -#define GL_MIN_EXT 0x8007 -#define GL_MAX_EXT 0x8008 -#define GL_BLEND_EQUATION_EXT 0x8009 -#endif - -#ifndef GL_EXT_blend_subtract -#define GL_FUNC_SUBTRACT_EXT 0x800A -#define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B -#endif - -#ifndef GL_EXT_blend_logic_op -#endif - -#ifndef GL_SGIX_interlace -#define GL_INTERLACE_SGIX 0x8094 -#endif - -#ifndef GL_SGIX_pixel_tiles -#define GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX 0x813E -#define GL_PIXEL_TILE_CACHE_INCREMENT_SGIX 0x813F -#define GL_PIXEL_TILE_WIDTH_SGIX 0x8140 -#define GL_PIXEL_TILE_HEIGHT_SGIX 0x8141 -#define GL_PIXEL_TILE_GRID_WIDTH_SGIX 0x8142 -#define GL_PIXEL_TILE_GRID_HEIGHT_SGIX 0x8143 -#define GL_PIXEL_TILE_GRID_DEPTH_SGIX 0x8144 -#define GL_PIXEL_TILE_CACHE_SIZE_SGIX 0x8145 -#endif - -#ifndef GL_SGIS_texture_select -#define GL_DUAL_ALPHA4_SGIS 0x8110 -#define GL_DUAL_ALPHA8_SGIS 0x8111 -#define GL_DUAL_ALPHA12_SGIS 0x8112 -#define GL_DUAL_ALPHA16_SGIS 0x8113 -#define GL_DUAL_LUMINANCE4_SGIS 0x8114 -#define GL_DUAL_LUMINANCE8_SGIS 0x8115 -#define GL_DUAL_LUMINANCE12_SGIS 0x8116 -#define GL_DUAL_LUMINANCE16_SGIS 0x8117 -#define GL_DUAL_INTENSITY4_SGIS 0x8118 -#define GL_DUAL_INTENSITY8_SGIS 0x8119 -#define GL_DUAL_INTENSITY12_SGIS 0x811A -#define GL_DUAL_INTENSITY16_SGIS 0x811B -#define GL_DUAL_LUMINANCE_ALPHA4_SGIS 0x811C -#define GL_DUAL_LUMINANCE_ALPHA8_SGIS 0x811D -#define GL_QUAD_ALPHA4_SGIS 0x811E -#define GL_QUAD_ALPHA8_SGIS 0x811F -#define GL_QUAD_LUMINANCE4_SGIS 0x8120 -#define GL_QUAD_LUMINANCE8_SGIS 0x8121 -#define GL_QUAD_INTENSITY4_SGIS 0x8122 -#define GL_QUAD_INTENSITY8_SGIS 0x8123 -#define GL_DUAL_TEXTURE_SELECT_SGIS 0x8124 -#define GL_QUAD_TEXTURE_SELECT_SGIS 0x8125 -#endif - -#ifndef GL_SGIX_sprite -#define GL_SPRITE_SGIX 0x8148 -#define GL_SPRITE_MODE_SGIX 0x8149 -#define GL_SPRITE_AXIS_SGIX 0x814A -#define GL_SPRITE_TRANSLATION_SGIX 0x814B -#define GL_SPRITE_AXIAL_SGIX 0x814C -#define GL_SPRITE_OBJECT_ALIGNED_SGIX 0x814D -#define GL_SPRITE_EYE_ALIGNED_SGIX 0x814E -#endif - -#ifndef GL_SGIX_texture_multi_buffer -#define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E -#endif - -#ifndef GL_EXT_point_parameters -#define GL_POINT_SIZE_MIN_EXT 0x8126 -#define GL_POINT_SIZE_MAX_EXT 0x8127 -#define GL_POINT_FADE_THRESHOLD_SIZE_EXT 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 - -#ifndef GL_SGIX_instruments -#define GL_INSTRUMENT_BUFFER_POINTER_SGIX 0x8180 -#define GL_INSTRUMENT_MEASUREMENTS_SGIX 0x8181 -#endif - -#ifndef GL_SGIX_texture_scale_bias -#define GL_POST_TEXTURE_FILTER_BIAS_SGIX 0x8179 -#define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A -#define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B -#define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C -#endif - -#ifndef GL_SGIX_framezoom -#define GL_FRAMEZOOM_SGIX 0x818B -#define GL_FRAMEZOOM_FACTOR_SGIX 0x818C -#define GL_MAX_FRAMEZOOM_FACTOR_SGIX 0x818D -#endif - -#ifndef GL_SGIX_tag_sample_buffer -#endif - -#ifndef GL_FfdMaskSGIX -#define GL_TEXTURE_DEFORMATION_BIT_SGIX 0x00000001 -#define GL_GEOMETRY_DEFORMATION_BIT_SGIX 0x00000002 -#endif - -#ifndef GL_SGIX_polynomial_ffd -#define GL_GEOMETRY_DEFORMATION_SGIX 0x8194 -#define GL_TEXTURE_DEFORMATION_SGIX 0x8195 -#define GL_DEFORMATIONS_MASK_SGIX 0x8196 -#define GL_MAX_DEFORMATION_ORDER_SGIX 0x8197 -#endif - -#ifndef GL_SGIX_reference_plane -#define GL_REFERENCE_PLANE_SGIX 0x817D -#define GL_REFERENCE_PLANE_EQUATION_SGIX 0x817E -#endif - -#ifndef GL_SGIX_flush_raster -#endif - -#ifndef GL_SGIX_depth_texture -#define GL_DEPTH_COMPONENT16_SGIX 0x81A5 -#define GL_DEPTH_COMPONENT24_SGIX 0x81A6 -#define GL_DEPTH_COMPONENT32_SGIX 0x81A7 -#endif - -#ifndef GL_SGIS_fog_function -#define GL_FOG_FUNC_SGIS 0x812A -#define GL_FOG_FUNC_POINTS_SGIS 0x812B -#define GL_MAX_FOG_FUNC_POINTS_SGIS 0x812C -#endif - -#ifndef GL_SGIX_fog_offset -#define GL_FOG_OFFSET_SGIX 0x8198 -#define GL_FOG_OFFSET_VALUE_SGIX 0x8199 -#endif - -#ifndef GL_HP_image_transform -#define GL_IMAGE_SCALE_X_HP 0x8155 -#define GL_IMAGE_SCALE_Y_HP 0x8156 -#define GL_IMAGE_TRANSLATE_X_HP 0x8157 -#define GL_IMAGE_TRANSLATE_Y_HP 0x8158 -#define GL_IMAGE_ROTATE_ANGLE_HP 0x8159 -#define GL_IMAGE_ROTATE_ORIGIN_X_HP 0x815A -#define GL_IMAGE_ROTATE_ORIGIN_Y_HP 0x815B -#define GL_IMAGE_MAG_FILTER_HP 0x815C -#define GL_IMAGE_MIN_FILTER_HP 0x815D -#define GL_IMAGE_CUBIC_WEIGHT_HP 0x815E -#define GL_CUBIC_HP 0x815F -#define GL_AVERAGE_HP 0x8160 -#define GL_IMAGE_TRANSFORM_2D_HP 0x8161 -#define GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8162 -#define GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8163 -#endif - -#ifndef GL_HP_convolution_border_modes -#define GL_IGNORE_BORDER_HP 0x8150 -#define GL_CONSTANT_BORDER_HP 0x8151 -#define GL_REPLICATE_BORDER_HP 0x8153 -#define GL_CONVOLUTION_BORDER_COLOR_HP 0x8154 -#endif - -#ifndef GL_INGR_palette_buffer -#endif - -#ifndef GL_SGIX_texture_add_env -#define GL_TEXTURE_ENV_BIAS_SGIX 0x80BE -#endif - -#ifndef GL_EXT_color_subtable -#endif - -#ifndef GL_PGI_vertex_hints -#define GL_VERTEX_DATA_HINT_PGI 0x1A22A -#define GL_VERTEX_CONSISTENT_HINT_PGI 0x1A22B -#define GL_MATERIAL_SIDE_HINT_PGI 0x1A22C -#define GL_MAX_VERTEX_HINT_PGI 0x1A22D -#define GL_COLOR3_BIT_PGI 0x00010000 -#define GL_COLOR4_BIT_PGI 0x00020000 -#define GL_EDGEFLAG_BIT_PGI 0x00040000 -#define GL_INDEX_BIT_PGI 0x00080000 -#define GL_MAT_AMBIENT_BIT_PGI 0x00100000 -#define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000 -#define GL_MAT_DIFFUSE_BIT_PGI 0x00400000 -#define GL_MAT_EMISSION_BIT_PGI 0x00800000 -#define GL_MAT_COLOR_INDEXES_BIT_PGI 0x01000000 -#define GL_MAT_SHININESS_BIT_PGI 0x02000000 -#define GL_MAT_SPECULAR_BIT_PGI 0x04000000 -#define GL_NORMAL_BIT_PGI 0x08000000 -#define GL_TEXCOORD1_BIT_PGI 0x10000000 -#define GL_TEXCOORD2_BIT_PGI 0x20000000 -#define GL_TEXCOORD3_BIT_PGI 0x40000000 -#define GL_TEXCOORD4_BIT_PGI 0x80000000 -#define GL_VERTEX23_BIT_PGI 0x00000004 -#define GL_VERTEX4_BIT_PGI 0x00000008 -#endif - -#ifndef GL_PGI_misc_hints -#define GL_PREFER_DOUBLEBUFFER_HINT_PGI 0x1A1F8 -#define GL_CONSERVE_MEMORY_HINT_PGI 0x1A1FD -#define GL_RECLAIM_MEMORY_HINT_PGI 0x1A1FE -#define GL_NATIVE_GRAPHICS_HANDLE_PGI 0x1A202 -#define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 0x1A203 -#define GL_NATIVE_GRAPHICS_END_HINT_PGI 0x1A204 -#define GL_ALWAYS_FAST_HINT_PGI 0x1A20C -#define GL_ALWAYS_SOFT_HINT_PGI 0x1A20D -#define GL_ALLOW_DRAW_OBJ_HINT_PGI 0x1A20E -#define GL_ALLOW_DRAW_WIN_HINT_PGI 0x1A20F -#define GL_ALLOW_DRAW_FRG_HINT_PGI 0x1A210 -#define GL_ALLOW_DRAW_MEM_HINT_PGI 0x1A211 -#define GL_STRICT_DEPTHFUNC_HINT_PGI 0x1A216 -#define GL_STRICT_LIGHTING_HINT_PGI 0x1A217 -#define GL_STRICT_SCISSOR_HINT_PGI 0x1A218 -#define GL_FULL_STIPPLE_HINT_PGI 0x1A219 -#define GL_CLIP_NEAR_HINT_PGI 0x1A220 -#define GL_CLIP_FAR_HINT_PGI 0x1A221 -#define GL_WIDE_LINE_HINT_PGI 0x1A222 -#define GL_BACK_NORMALS_HINT_PGI 0x1A223 -#endif - -#ifndef GL_EXT_paletted_texture -#define GL_COLOR_INDEX1_EXT 0x80E2 -#define GL_COLOR_INDEX2_EXT 0x80E3 -#define GL_COLOR_INDEX4_EXT 0x80E4 -#define GL_COLOR_INDEX8_EXT 0x80E5 -#define GL_COLOR_INDEX12_EXT 0x80E6 -#define GL_COLOR_INDEX16_EXT 0x80E7 -#define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED -#endif - -#ifndef GL_EXT_clip_volume_hint -#define GL_CLIP_VOLUME_CLIPPING_HINT_EXT 0x80F0 -#endif - -#ifndef GL_SGIX_list_priority -#define GL_LIST_PRIORITY_SGIX 0x8182 -#endif - -#ifndef GL_SGIX_ir_instrument1 -#define GL_IR_INSTRUMENT1_SGIX 0x817F -#endif - -#ifndef GL_SGIX_calligraphic_fragment -#define GL_CALLIGRAPHIC_FRAGMENT_SGIX 0x8183 -#endif - -#ifndef GL_SGIX_texture_lod_bias -#define GL_TEXTURE_LOD_BIAS_S_SGIX 0x818E -#define GL_TEXTURE_LOD_BIAS_T_SGIX 0x818F -#define GL_TEXTURE_LOD_BIAS_R_SGIX 0x8190 -#endif - -#ifndef GL_SGIX_shadow_ambient -#define GL_SHADOW_AMBIENT_SGIX 0x80BF -#endif - -#ifndef GL_EXT_index_texture -#endif - -#ifndef GL_EXT_index_material -#define GL_INDEX_MATERIAL_EXT 0x81B8 -#define GL_INDEX_MATERIAL_PARAMETER_EXT 0x81B9 -#define GL_INDEX_MATERIAL_FACE_EXT 0x81BA -#endif - -#ifndef GL_EXT_index_func -#define GL_INDEX_TEST_EXT 0x81B5 -#define GL_INDEX_TEST_FUNC_EXT 0x81B6 -#define GL_INDEX_TEST_REF_EXT 0x81B7 -#endif - -#ifndef GL_EXT_index_array_formats -#define GL_IUI_V2F_EXT 0x81AD -#define GL_IUI_V3F_EXT 0x81AE -#define GL_IUI_N3F_V2F_EXT 0x81AF -#define GL_IUI_N3F_V3F_EXT 0x81B0 -#define GL_T2F_IUI_V2F_EXT 0x81B1 -#define GL_T2F_IUI_V3F_EXT 0x81B2 -#define GL_T2F_IUI_N3F_V2F_EXT 0x81B3 -#define GL_T2F_IUI_N3F_V3F_EXT 0x81B4 -#endif - -#ifndef GL_EXT_compiled_vertex_array -#define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT 0x81A8 -#define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT 0x81A9 -#endif - -#ifndef GL_EXT_cull_vertex -#define GL_CULL_VERTEX_EXT 0x81AA -#define GL_CULL_VERTEX_EYE_POSITION_EXT 0x81AB -#define GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC -#endif - -#ifndef GL_SGIX_ycrcb -#define GL_YCRCB_422_SGIX 0x81BB -#define GL_YCRCB_444_SGIX 0x81BC -#endif - -#ifndef GL_SGIX_fragment_lighting -#define GL_FRAGMENT_LIGHTING_SGIX 0x8400 -#define GL_FRAGMENT_COLOR_MATERIAL_SGIX 0x8401 -#define GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX 0x8402 -#define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX 0x8403 -#define GL_MAX_FRAGMENT_LIGHTS_SGIX 0x8404 -#define GL_MAX_ACTIVE_LIGHTS_SGIX 0x8405 -#define GL_CURRENT_RASTER_NORMAL_SGIX 0x8406 -#define GL_LIGHT_ENV_MODE_SGIX 0x8407 -#define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX 0x8408 -#define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX 0x8409 -#define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX 0x840A -#define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX 0x840B -#define GL_FRAGMENT_LIGHT0_SGIX 0x840C -#define GL_FRAGMENT_LIGHT1_SGIX 0x840D -#define GL_FRAGMENT_LIGHT2_SGIX 0x840E -#define GL_FRAGMENT_LIGHT3_SGIX 0x840F -#define GL_FRAGMENT_LIGHT4_SGIX 0x8410 -#define GL_FRAGMENT_LIGHT5_SGIX 0x8411 -#define GL_FRAGMENT_LIGHT6_SGIX 0x8412 -#define GL_FRAGMENT_LIGHT7_SGIX 0x8413 -#endif - -#ifndef GL_IBM_rasterpos_clip -#define GL_RASTER_POSITION_UNCLIPPED_IBM 0x19262 -#endif - -#ifndef GL_HP_texture_lighting -#define GL_TEXTURE_LIGHTING_MODE_HP 0x8167 -#define GL_TEXTURE_POST_SPECULAR_HP 0x8168 -#define GL_TEXTURE_PRE_SPECULAR_HP 0x8169 -#endif - -#ifndef GL_EXT_draw_range_elements -#define GL_MAX_ELEMENTS_VERTICES_EXT 0x80E8 -#define GL_MAX_ELEMENTS_INDICES_EXT 0x80E9 -#endif - -#ifndef GL_WIN_phong_shading -#define GL_PHONG_WIN 0x80EA -#define GL_PHONG_HINT_WIN 0x80EB -#endif - -#ifndef GL_WIN_specular_fog -#define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC -#endif - -#ifndef GL_EXT_light_texture -#define GL_FRAGMENT_MATERIAL_EXT 0x8349 -#define GL_FRAGMENT_NORMAL_EXT 0x834A -#define GL_FRAGMENT_COLOR_EXT 0x834C -#define GL_ATTENUATION_EXT 0x834D -#define GL_SHADOW_ATTENUATION_EXT 0x834E -#define GL_TEXTURE_APPLICATION_MODE_EXT 0x834F -#define GL_TEXTURE_LIGHT_EXT 0x8350 -#define GL_TEXTURE_MATERIAL_FACE_EXT 0x8351 -#define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352 -/* reuse GL_FRAGMENT_DEPTH_EXT */ -#endif - -#ifndef GL_SGIX_blend_alpha_minmax -#define GL_ALPHA_MIN_SGIX 0x8320 -#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 -#endif - -#ifndef GL_SGIX_async -#define GL_ASYNC_MARKER_SGIX 0x8329 -#endif - -#ifndef GL_SGIX_async_pixel -#define GL_ASYNC_TEX_IMAGE_SGIX 0x835C -#define GL_ASYNC_DRAW_PIXELS_SGIX 0x835D -#define GL_ASYNC_READ_PIXELS_SGIX 0x835E -#define GL_MAX_ASYNC_TEX_IMAGE_SGIX 0x835F -#define GL_MAX_ASYNC_DRAW_PIXELS_SGIX 0x8360 -#define GL_MAX_ASYNC_READ_PIXELS_SGIX 0x8361 -#endif - -#ifndef GL_SGIX_async_histogram -#define GL_ASYNC_HISTOGRAM_SGIX 0x832C -#define GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D -#endif - -#ifndef GL_INTEL_texture_scissor -#endif - -#ifndef GL_INTEL_parallel_arrays -#define GL_PARALLEL_ARRAYS_INTEL 0x83F4 -#define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5 -#define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6 -#define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7 -#define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8 -#endif - -#ifndef GL_HP_occlusion_test -#define GL_OCCLUSION_TEST_HP 0x8165 -#define GL_OCCLUSION_TEST_RESULT_HP 0x8166 -#endif - -#ifndef GL_EXT_pixel_transform -#define GL_PIXEL_TRANSFORM_2D_EXT 0x8330 -#define GL_PIXEL_MAG_FILTER_EXT 0x8331 -#define GL_PIXEL_MIN_FILTER_EXT 0x8332 -#define GL_PIXEL_CUBIC_WEIGHT_EXT 0x8333 -#define GL_CUBIC_EXT 0x8334 -#define GL_AVERAGE_EXT 0x8335 -#define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336 -#define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337 -#define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT 0x8338 -#endif - -#ifndef GL_EXT_pixel_transform_color_table -#endif - -#ifndef GL_EXT_shared_texture_palette -#define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB -#endif - -#ifndef GL_EXT_separate_specular_color -#define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8 -#define GL_SINGLE_COLOR_EXT 0x81F9 -#define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA -#endif - -#ifndef GL_EXT_secondary_color -#define GL_COLOR_SUM_EXT 0x8458 -#define GL_CURRENT_SECONDARY_COLOR_EXT 0x8459 -#define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A -#define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B -#define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C -#define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D -#define GL_SECONDARY_COLOR_ARRAY_EXT 0x845E -#endif - -#ifndef GL_EXT_texture_perturb_normal -#define GL_PERTURB_EXT 0x85AE -#define GL_TEXTURE_NORMAL_EXT 0x85AF -#endif - -#ifndef GL_EXT_multi_draw_arrays -#endif - -#ifndef GL_EXT_fog_coord -#define GL_FOG_COORDINATE_SOURCE_EXT 0x8450 -#define GL_FOG_COORDINATE_EXT 0x8451 -#define GL_FRAGMENT_DEPTH_EXT 0x8452 -#define GL_CURRENT_FOG_COORDINATE_EXT 0x8453 -#define GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454 -#define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455 -#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456 -#define GL_FOG_COORDINATE_ARRAY_EXT 0x8457 -#endif - -#ifndef GL_REND_screen_coordinates -#define GL_SCREEN_COORDINATES_REND 0x8490 -#define GL_INVERTED_SCREEN_W_REND 0x8491 -#endif - -#ifndef GL_EXT_coordinate_frame -#define GL_TANGENT_ARRAY_EXT 0x8439 -#define GL_BINORMAL_ARRAY_EXT 0x843A -#define GL_CURRENT_TANGENT_EXT 0x843B -#define GL_CURRENT_BINORMAL_EXT 0x843C -#define GL_TANGENT_ARRAY_TYPE_EXT 0x843E -#define GL_TANGENT_ARRAY_STRIDE_EXT 0x843F -#define GL_BINORMAL_ARRAY_TYPE_EXT 0x8440 -#define GL_BINORMAL_ARRAY_STRIDE_EXT 0x8441 -#define GL_TANGENT_ARRAY_POINTER_EXT 0x8442 -#define GL_BINORMAL_ARRAY_POINTER_EXT 0x8443 -#define GL_MAP1_TANGENT_EXT 0x8444 -#define GL_MAP2_TANGENT_EXT 0x8445 -#define GL_MAP1_BINORMAL_EXT 0x8446 -#define GL_MAP2_BINORMAL_EXT 0x8447 -#endif - -#ifndef GL_EXT_texture_env_combine -#define GL_COMBINE_EXT 0x8570 -#define GL_COMBINE_RGB_EXT 0x8571 -#define GL_COMBINE_ALPHA_EXT 0x8572 -#define GL_RGB_SCALE_EXT 0x8573 -#define GL_ADD_SIGNED_EXT 0x8574 -#define GL_INTERPOLATE_EXT 0x8575 -#define GL_CONSTANT_EXT 0x8576 -#define GL_PRIMARY_COLOR_EXT 0x8577 -#define GL_PREVIOUS_EXT 0x8578 -#define GL_SOURCE0_RGB_EXT 0x8580 -#define GL_SOURCE1_RGB_EXT 0x8581 -#define GL_SOURCE2_RGB_EXT 0x8582 -#define GL_SOURCE0_ALPHA_EXT 0x8588 -#define GL_SOURCE1_ALPHA_EXT 0x8589 -#define GL_SOURCE2_ALPHA_EXT 0x858A -#define GL_OPERAND0_RGB_EXT 0x8590 -#define GL_OPERAND1_RGB_EXT 0x8591 -#define GL_OPERAND2_RGB_EXT 0x8592 -#define GL_OPERAND0_ALPHA_EXT 0x8598 -#define GL_OPERAND1_ALPHA_EXT 0x8599 -#define GL_OPERAND2_ALPHA_EXT 0x859A -#endif - -#ifndef GL_APPLE_specular_vector -#define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0 -#endif - -#ifndef GL_APPLE_transform_hint -#define GL_TRANSFORM_HINT_APPLE 0x85B1 -#endif - -#ifndef GL_SGIX_fog_scale -#define GL_FOG_SCALE_SGIX 0x81FC -#define GL_FOG_SCALE_VALUE_SGIX 0x81FD -#endif - -#ifndef GL_SUNX_constant_data -#define GL_UNPACK_CONSTANT_DATA_SUNX 0x81D5 -#define GL_TEXTURE_CONSTANT_DATA_SUNX 0x81D6 -#endif - -#ifndef GL_SUN_global_alpha -#define GL_GLOBAL_ALPHA_SUN 0x81D9 -#define GL_GLOBAL_ALPHA_FACTOR_SUN 0x81DA -#endif - -#ifndef GL_SUN_triangle_list -#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 -#define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1 -#define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2 -#define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3 -#define GL_R1UI_V3F_SUN 0x85C4 -#define GL_R1UI_C4UB_V3F_SUN 0x85C5 -#define GL_R1UI_C3F_V3F_SUN 0x85C6 -#define GL_R1UI_N3F_V3F_SUN 0x85C7 -#define GL_R1UI_C4F_N3F_V3F_SUN 0x85C8 -#define GL_R1UI_T2F_V3F_SUN 0x85C9 -#define GL_R1UI_T2F_N3F_V3F_SUN 0x85CA -#define GL_R1UI_T2F_C4F_N3F_V3F_SUN 0x85CB -#endif - -#ifndef GL_SUN_vertex -#endif - -#ifndef GL_EXT_blend_func_separate -#define GL_BLEND_DST_RGB_EXT 0x80C8 -#define GL_BLEND_SRC_RGB_EXT 0x80C9 -#define GL_BLEND_DST_ALPHA_EXT 0x80CA -#define GL_BLEND_SRC_ALPHA_EXT 0x80CB -#endif - -#ifndef GL_INGR_color_clamp -#define GL_RED_MIN_CLAMP_INGR 0x8560 -#define GL_GREEN_MIN_CLAMP_INGR 0x8561 -#define GL_BLUE_MIN_CLAMP_INGR 0x8562 -#define GL_ALPHA_MIN_CLAMP_INGR 0x8563 -#define GL_RED_MAX_CLAMP_INGR 0x8564 -#define GL_GREEN_MAX_CLAMP_INGR 0x8565 -#define GL_BLUE_MAX_CLAMP_INGR 0x8566 -#define GL_ALPHA_MAX_CLAMP_INGR 0x8567 -#endif - -#ifndef GL_INGR_interlace_read -#define GL_INTERLACE_READ_INGR 0x8568 -#endif - -#ifndef GL_EXT_stencil_wrap -#define GL_INCR_WRAP_EXT 0x8507 -#define GL_DECR_WRAP_EXT 0x8508 -#endif - -#ifndef GL_EXT_422_pixels -#define GL_422_EXT 0x80CC -#define GL_422_REV_EXT 0x80CD -#define GL_422_AVERAGE_EXT 0x80CE -#define GL_422_REV_AVERAGE_EXT 0x80CF -#endif - -#ifndef GL_NV_texgen_reflection -#define GL_NORMAL_MAP_NV 0x8511 -#define GL_REFLECTION_MAP_NV 0x8512 -#endif - -#ifndef GL_EXT_texture_cube_map -#define GL_NORMAL_MAP_EXT 0x8511 -#define GL_REFLECTION_MAP_EXT 0x8512 -#define GL_TEXTURE_CUBE_MAP_EXT 0x8513 -#define GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A -#define GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C -#endif - -#ifndef GL_SUN_convolution_border_modes -#define GL_WRAP_BORDER_SUN 0x81D4 -#endif - -#ifndef GL_EXT_texture_env_add -#endif - -#ifndef GL_EXT_texture_lod_bias -#define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD -#define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500 -#define GL_TEXTURE_LOD_BIAS_EXT 0x8501 -#endif - -#ifndef GL_EXT_texture_filter_anisotropic -#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE -#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF -#endif - -#ifndef GL_EXT_vertex_weighting -#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_MODELVIEW1_MATRIX_EXT 0x8506 -#define GL_VERTEX_WEIGHTING_EXT 0x8509 -#define GL_MODELVIEW0_EXT GL_MODELVIEW -#define GL_MODELVIEW1_EXT 0x850A -#define GL_CURRENT_VERTEX_WEIGHT_EXT 0x850B -#define GL_VERTEX_WEIGHT_ARRAY_EXT 0x850C -#define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT 0x850D -#define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT 0x850E -#define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F -#define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510 -#endif - -#ifndef GL_NV_light_max_exponent -#define GL_MAX_SHININESS_NV 0x8504 -#define GL_MAX_SPOT_EXPONENT_NV 0x8505 -#endif - -#ifndef GL_NV_vertex_array_range -#define GL_VERTEX_ARRAY_RANGE_NV 0x851D -#define GL_VERTEX_ARRAY_RANGE_LENGTH_NV 0x851E -#define GL_VERTEX_ARRAY_RANGE_VALID_NV 0x851F -#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520 -#define GL_VERTEX_ARRAY_RANGE_POINTER_NV 0x8521 -#endif - -#ifndef GL_NV_register_combiners -#define GL_REGISTER_COMBINERS_NV 0x8522 -#define GL_VARIABLE_A_NV 0x8523 -#define GL_VARIABLE_B_NV 0x8524 -#define GL_VARIABLE_C_NV 0x8525 -#define GL_VARIABLE_D_NV 0x8526 -#define GL_VARIABLE_E_NV 0x8527 -#define GL_VARIABLE_F_NV 0x8528 -#define GL_VARIABLE_G_NV 0x8529 -#define GL_CONSTANT_COLOR0_NV 0x852A -#define GL_CONSTANT_COLOR1_NV 0x852B -#define GL_PRIMARY_COLOR_NV 0x852C -#define GL_SECONDARY_COLOR_NV 0x852D -#define GL_SPARE0_NV 0x852E -#define GL_SPARE1_NV 0x852F -#define GL_DISCARD_NV 0x8530 -#define GL_E_TIMES_F_NV 0x8531 -#define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532 -#define GL_UNSIGNED_IDENTITY_NV 0x8536 -#define GL_UNSIGNED_INVERT_NV 0x8537 -#define GL_EXPAND_NORMAL_NV 0x8538 -#define GL_EXPAND_NEGATE_NV 0x8539 -#define GL_HALF_BIAS_NORMAL_NV 0x853A -#define GL_HALF_BIAS_NEGATE_NV 0x853B -#define GL_SIGNED_IDENTITY_NV 0x853C -#define GL_SIGNED_NEGATE_NV 0x853D -#define GL_SCALE_BY_TWO_NV 0x853E -#define GL_SCALE_BY_FOUR_NV 0x853F -#define GL_SCALE_BY_ONE_HALF_NV 0x8540 -#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541 -#define GL_COMBINER_INPUT_NV 0x8542 -#define GL_COMBINER_MAPPING_NV 0x8543 -#define GL_COMBINER_COMPONENT_USAGE_NV 0x8544 -#define GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545 -#define GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546 -#define GL_COMBINER_MUX_SUM_NV 0x8547 -#define GL_COMBINER_SCALE_NV 0x8548 -#define GL_COMBINER_BIAS_NV 0x8549 -#define GL_COMBINER_AB_OUTPUT_NV 0x854A -#define GL_COMBINER_CD_OUTPUT_NV 0x854B -#define GL_COMBINER_SUM_OUTPUT_NV 0x854C -#define GL_MAX_GENERAL_COMBINERS_NV 0x854D -#define GL_NUM_GENERAL_COMBINERS_NV 0x854E -#define GL_COLOR_SUM_CLAMP_NV 0x854F -#define GL_COMBINER0_NV 0x8550 -#define GL_COMBINER1_NV 0x8551 -#define GL_COMBINER2_NV 0x8552 -#define GL_COMBINER3_NV 0x8553 -#define GL_COMBINER4_NV 0x8554 -#define GL_COMBINER5_NV 0x8555 -#define GL_COMBINER6_NV 0x8556 -#define GL_COMBINER7_NV 0x8557 -/* reuse GL_TEXTURE0_ARB */ -/* reuse GL_TEXTURE1_ARB */ -/* reuse GL_ZERO */ -/* reuse GL_NONE */ -/* reuse GL_FOG */ -#endif - -#ifndef GL_NV_fog_distance -#define GL_FOG_DISTANCE_MODE_NV 0x855A -#define GL_EYE_RADIAL_NV 0x855B -#define GL_EYE_PLANE_ABSOLUTE_NV 0x855C -/* reuse GL_EYE_PLANE */ -#endif - -#ifndef GL_NV_texgen_emboss -#define GL_EMBOSS_LIGHT_NV 0x855D -#define GL_EMBOSS_CONSTANT_NV 0x855E -#define GL_EMBOSS_MAP_NV 0x855F -#endif - -#ifndef GL_NV_blend_square -#endif - -#ifndef GL_NV_texture_env_combine4 -#define GL_COMBINE4_NV 0x8503 -#define GL_SOURCE3_RGB_NV 0x8583 -#define GL_SOURCE3_ALPHA_NV 0x858B -#define GL_OPERAND3_RGB_NV 0x8593 -#define GL_OPERAND3_ALPHA_NV 0x859B -#endif - -#ifndef GL_MESA_resize_buffers -#endif - -#ifndef GL_MESA_window_pos -#endif - -#ifndef GL_EXT_texture_compression_s3tc -#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 -#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 -#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 -#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 -#endif - -#ifndef GL_IBM_cull_vertex -#define GL_CULL_VERTEX_IBM 103050 -#endif - -#ifndef GL_IBM_multimode_draw_arrays -#endif - -#ifndef GL_IBM_vertex_array_lists -#define GL_VERTEX_ARRAY_LIST_IBM 103070 -#define GL_NORMAL_ARRAY_LIST_IBM 103071 -#define GL_COLOR_ARRAY_LIST_IBM 103072 -#define GL_INDEX_ARRAY_LIST_IBM 103073 -#define GL_TEXTURE_COORD_ARRAY_LIST_IBM 103074 -#define GL_EDGE_FLAG_ARRAY_LIST_IBM 103075 -#define GL_FOG_COORDINATE_ARRAY_LIST_IBM 103076 -#define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077 -#define GL_VERTEX_ARRAY_LIST_STRIDE_IBM 103080 -#define GL_NORMAL_ARRAY_LIST_STRIDE_IBM 103081 -#define GL_COLOR_ARRAY_LIST_STRIDE_IBM 103082 -#define GL_INDEX_ARRAY_LIST_STRIDE_IBM 103083 -#define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084 -#define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085 -#define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086 -#define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087 -#endif - -#ifndef GL_SGIX_subsample -#define GL_PACK_SUBSAMPLE_RATE_SGIX 0x85A0 -#define GL_UNPACK_SUBSAMPLE_RATE_SGIX 0x85A1 -#define GL_PIXEL_SUBSAMPLE_4444_SGIX 0x85A2 -#define GL_PIXEL_SUBSAMPLE_2424_SGIX 0x85A3 -#define GL_PIXEL_SUBSAMPLE_4242_SGIX 0x85A4 -#endif - -#ifndef GL_SGIX_ycrcb_subsample -#endif - -#ifndef GL_SGIX_ycrcba -#define GL_YCRCB_SGIX 0x8318 -#define GL_YCRCBA_SGIX 0x8319 -#endif - -#ifndef GL_SGI_depth_pass_instrument -#define GL_DEPTH_PASS_INSTRUMENT_SGIX 0x8310 -#define GL_DEPTH_PASS_INSTRUMENT_COUNTERS_SGIX 0x8311 -#define GL_DEPTH_PASS_INSTRUMENT_MAX_SGIX 0x8312 -#endif - -#ifndef GL_3DFX_texture_compression_FXT1 -#define GL_COMPRESSED_RGB_FXT1_3DFX 0x86B0 -#define GL_COMPRESSED_RGBA_FXT1_3DFX 0x86B1 -#endif - -#ifndef GL_3DFX_multisample -#define GL_MULTISAMPLE_3DFX 0x86B2 -#define GL_SAMPLE_BUFFERS_3DFX 0x86B3 -#define GL_SAMPLES_3DFX 0x86B4 -#define GL_MULTISAMPLE_BIT_3DFX 0x20000000 -#endif - -#ifndef GL_3DFX_tbuffer -#endif - -#ifndef GL_EXT_multisample -#define GL_MULTISAMPLE_EXT 0x809D -#define GL_SAMPLE_ALPHA_TO_MASK_EXT 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F -#define GL_SAMPLE_MASK_EXT 0x80A0 -#define GL_1PASS_EXT 0x80A1 -#define GL_2PASS_0_EXT 0x80A2 -#define GL_2PASS_1_EXT 0x80A3 -#define GL_4PASS_0_EXT 0x80A4 -#define GL_4PASS_1_EXT 0x80A5 -#define GL_4PASS_2_EXT 0x80A6 -#define GL_4PASS_3_EXT 0x80A7 -#define GL_SAMPLE_BUFFERS_EXT 0x80A8 -#define GL_SAMPLES_EXT 0x80A9 -#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 -#define GL_VERTEX_PRECLIP_SGIX 0x83EE -#define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF -#endif - -#ifndef GL_SGIX_convolution_accuracy -#define GL_CONVOLUTION_HINT_SGIX 0x8316 -#endif - -#ifndef GL_SGIX_resample -#define GL_PACK_RESAMPLE_SGIX 0x842C -#define GL_UNPACK_RESAMPLE_SGIX 0x842D -#define GL_RESAMPLE_REPLICATE_SGIX 0x842E -#define GL_RESAMPLE_ZERO_FILL_SGIX 0x842F -#define GL_RESAMPLE_DECIMATE_SGIX 0x8430 -#endif - -#ifndef GL_SGIS_point_line_texgen -#define GL_EYE_DISTANCE_TO_POINT_SGIS 0x81F0 -#define GL_OBJECT_DISTANCE_TO_POINT_SGIS 0x81F1 -#define GL_EYE_DISTANCE_TO_LINE_SGIS 0x81F2 -#define GL_OBJECT_DISTANCE_TO_LINE_SGIS 0x81F3 -#define GL_EYE_POINT_SGIS 0x81F4 -#define GL_OBJECT_POINT_SGIS 0x81F5 -#define GL_EYE_LINE_SGIS 0x81F6 -#define GL_OBJECT_LINE_SGIS 0x81F7 -#endif - -#ifndef GL_SGIS_texture_color_mask -#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_OES_read_format -#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A -#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B -#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 - -#ifndef GL_EXT_framebuffer_object -#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506 -#define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8 -#define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6 -#define GL_RENDERBUFFER_BINDING_EXT 0x8CA7 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4 -#define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5 -#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6 -#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7 -#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9 -#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA -#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB -#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC -#define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD -#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF -#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 -#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 -#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 -#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 -#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 -#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 -#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 -#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 -#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 -#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 -#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA -#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB -#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC -#define GL_COLOR_ATTACHMENT13_EXT 0x8CED -#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE -#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF -#define GL_DEPTH_ATTACHMENT_EXT 0x8D00 -#define GL_STENCIL_ATTACHMENT_EXT 0x8D20 -#define GL_FRAMEBUFFER_EXT 0x8D40 -#define GL_RENDERBUFFER_EXT 0x8D41 -#define GL_RENDERBUFFER_WIDTH_EXT 0x8D42 -#define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43 -#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44 -#define GL_STENCIL_INDEX1_EXT 0x8D46 -#define GL_STENCIL_INDEX4_EXT 0x8D47 -#define GL_STENCIL_INDEX8_EXT 0x8D48 -#define GL_STENCIL_INDEX16_EXT 0x8D49 -#define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50 -#define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51 -#define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52 -#define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53 -#define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54 -#define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55 -#endif - -#ifndef GL_GREMEDY_string_marker -#endif - -#ifndef GL_EXT_packed_depth_stencil -#define GL_DEPTH_STENCIL_EXT 0x84F9 -#define GL_UNSIGNED_INT_24_8_EXT 0x84FA -#define GL_DEPTH24_STENCIL8_EXT 0x88F0 -#define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1 -#endif - -#ifndef GL_EXT_stencil_clear_tag -#define GL_STENCIL_TAG_BITS_EXT 0x88F2 -#define GL_STENCIL_CLEAR_TAG_VALUE_EXT 0x88F3 -#endif - -#ifndef GL_EXT_texture_sRGB -#define GL_SRGB_EXT 0x8C40 -#define GL_SRGB8_EXT 0x8C41 -#define GL_SRGB_ALPHA_EXT 0x8C42 -#define GL_SRGB8_ALPHA8_EXT 0x8C43 -#define GL_SLUMINANCE_ALPHA_EXT 0x8C44 -#define GL_SLUMINANCE8_ALPHA8_EXT 0x8C45 -#define GL_SLUMINANCE_EXT 0x8C46 -#define GL_SLUMINANCE8_EXT 0x8C47 -#define GL_COMPRESSED_SRGB_EXT 0x8C48 -#define GL_COMPRESSED_SRGB_ALPHA_EXT 0x8C49 -#define GL_COMPRESSED_SLUMINANCE_EXT 0x8C4A -#define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8C4B -#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F -#endif - -#ifndef GL_EXT_framebuffer_blit -#define GL_READ_FRAMEBUFFER_EXT 0x8CA8 -#define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9 -#define GL_READ_FRAMEBUFFER_BINDING_EXT GL_FRAMEBUFFER_BINDING_EXT -#define GL_DRAW_FRAMEBUFFER_BINDING_EXT 0x8CAA -#endif - -#ifndef GL_EXT_framebuffer_multisample -#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 -#define GL_MAX_SAMPLES_EXT 0x8D57 -#endif - -#ifndef GL_MESAX_texture_stack -#define GL_TEXTURE_1D_STACK_MESAX 0x8759 -#define GL_TEXTURE_2D_STACK_MESAX 0x875A -#define GL_PROXY_TEXTURE_1D_STACK_MESAX 0x875B -#define GL_PROXY_TEXTURE_2D_STACK_MESAX 0x875C -#define GL_TEXTURE_1D_STACK_BINDING_MESAX 0x875D -#define GL_TEXTURE_2D_STACK_BINDING_MESAX 0x875E -#endif - -#ifndef GL_EXT_timer_query -#define GL_TIME_ELAPSED_EXT 0x88BF -#endif - -#ifndef GL_EXT_gpu_program_parameters -#endif - -#ifndef GL_APPLE_flush_buffer_range -#define GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8A12 -#define GL_BUFFER_FLUSHING_UNMAP_APPLE 0x8A13 -#endif - -#ifndef GL_NV_gpu_program4 -#define GL_MIN_PROGRAM_TEXEL_OFFSET_NV 0x8904 -#define GL_MAX_PROGRAM_TEXEL_OFFSET_NV 0x8905 -#define GL_PROGRAM_ATTRIB_COMPONENTS_NV 0x8906 -#define GL_PROGRAM_RESULT_COMPONENTS_NV 0x8907 -#define GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV 0x8908 -#define GL_MAX_PROGRAM_RESULT_COMPONENTS_NV 0x8909 -#define GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV 0x8DA5 -#define GL_MAX_PROGRAM_GENERIC_RESULTS_NV 0x8DA6 -#endif - -#ifndef GL_NV_geometry_program4 -#define GL_LINES_ADJACENCY_EXT 0x000A -#define GL_LINE_STRIP_ADJACENCY_EXT 0x000B -#define GL_TRIANGLES_ADJACENCY_EXT 0x000C -#define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0x000D -#define GL_GEOMETRY_PROGRAM_NV 0x8C26 -#define GL_MAX_PROGRAM_OUTPUT_VERTICES_NV 0x8C27 -#define GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV 0x8C28 -#define GL_GEOMETRY_VERTICES_OUT_EXT 0x8DDA -#define GL_GEOMETRY_INPUT_TYPE_EXT 0x8DDB -#define GL_GEOMETRY_OUTPUT_TYPE_EXT 0x8DDC -#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29 -#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7 -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8 -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT 0x8DA9 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4 -#define GL_PROGRAM_POINT_SIZE_EXT 0x8642 -#endif - -#ifndef GL_EXT_geometry_shader4 -#define GL_GEOMETRY_SHADER_EXT 0x8DD9 -/* reuse GL_GEOMETRY_VERTICES_OUT_EXT */ -/* reuse GL_GEOMETRY_INPUT_TYPE_EXT */ -/* reuse GL_GEOMETRY_OUTPUT_TYPE_EXT */ -/* reuse GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT */ -#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT 0x8DDD -#define GL_MAX_VERTEX_VARYING_COMPONENTS_EXT 0x8DDE -#define GL_MAX_VARYING_COMPONENTS_EXT 0x8B4B -#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF -#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0 -#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1 -/* reuse GL_LINES_ADJACENCY_EXT */ -/* reuse GL_LINE_STRIP_ADJACENCY_EXT */ -/* reuse GL_TRIANGLES_ADJACENCY_EXT */ -/* reuse GL_TRIANGLE_STRIP_ADJACENCY_EXT */ -/* reuse GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT */ -/* reuse GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT */ -/* reuse GL_PROGRAM_POINT_SIZE_EXT */ -#endif - -#ifndef GL_NV_vertex_program4 -#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV 0x88FD -#endif - -#ifndef GL_EXT_gpu_shader4 -#define GL_SAMPLER_1D_ARRAY_EXT 0x8DC0 -#define GL_SAMPLER_2D_ARRAY_EXT 0x8DC1 -#define GL_SAMPLER_BUFFER_EXT 0x8DC2 -#define GL_SAMPLER_1D_ARRAY_SHADOW_EXT 0x8DC3 -#define GL_SAMPLER_2D_ARRAY_SHADOW_EXT 0x8DC4 -#define GL_SAMPLER_CUBE_SHADOW_EXT 0x8DC5 -#define GL_UNSIGNED_INT_VEC2_EXT 0x8DC6 -#define GL_UNSIGNED_INT_VEC3_EXT 0x8DC7 -#define GL_UNSIGNED_INT_VEC4_EXT 0x8DC8 -#define GL_INT_SAMPLER_1D_EXT 0x8DC9 -#define GL_INT_SAMPLER_2D_EXT 0x8DCA -#define GL_INT_SAMPLER_3D_EXT 0x8DCB -#define GL_INT_SAMPLER_CUBE_EXT 0x8DCC -#define GL_INT_SAMPLER_2D_RECT_EXT 0x8DCD -#define GL_INT_SAMPLER_1D_ARRAY_EXT 0x8DCE -#define GL_INT_SAMPLER_2D_ARRAY_EXT 0x8DCF -#define GL_INT_SAMPLER_BUFFER_EXT 0x8DD0 -#define GL_UNSIGNED_INT_SAMPLER_1D_EXT 0x8DD1 -#define GL_UNSIGNED_INT_SAMPLER_2D_EXT 0x8DD2 -#define GL_UNSIGNED_INT_SAMPLER_3D_EXT 0x8DD3 -#define GL_UNSIGNED_INT_SAMPLER_CUBE_EXT 0x8DD4 -#define GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT 0x8DD5 -#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT 0x8DD6 -#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT 0x8DD7 -#define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8 -#endif - -#ifndef GL_EXT_draw_instanced -#endif - -#ifndef GL_EXT_packed_float -#define GL_R11F_G11F_B10F_EXT 0x8C3A -#define GL_UNSIGNED_INT_10F_11F_11F_REV_EXT 0x8C3B -#define GL_RGBA_SIGNED_COMPONENTS_EXT 0x8C3C -#endif - -#ifndef GL_EXT_texture_array -#define GL_TEXTURE_1D_ARRAY_EXT 0x8C18 -#define GL_PROXY_TEXTURE_1D_ARRAY_EXT 0x8C19 -#define GL_TEXTURE_2D_ARRAY_EXT 0x8C1A -#define GL_PROXY_TEXTURE_2D_ARRAY_EXT 0x8C1B -#define GL_TEXTURE_BINDING_1D_ARRAY_EXT 0x8C1C -#define GL_TEXTURE_BINDING_2D_ARRAY_EXT 0x8C1D -#define GL_MAX_ARRAY_TEXTURE_LAYERS_EXT 0x88FF -#define GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT 0x884E -/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT */ -#endif - -#ifndef GL_EXT_texture_buffer_object -#define GL_TEXTURE_BUFFER_EXT 0x8C2A -#define GL_MAX_TEXTURE_BUFFER_SIZE_EXT 0x8C2B -#define GL_TEXTURE_BINDING_BUFFER_EXT 0x8C2C -#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D -#define GL_TEXTURE_BUFFER_FORMAT_EXT 0x8C2E -#endif - -#ifndef GL_EXT_texture_compression_latc -#define GL_COMPRESSED_LUMINANCE_LATC1_EXT 0x8C70 -#define GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT 0x8C71 -#define GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT 0x8C72 -#define GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT 0x8C73 -#endif - -#ifndef GL_EXT_texture_compression_rgtc -#define GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB -#define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC -#define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD -#define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE -#endif - -#ifndef GL_EXT_texture_shared_exponent -#define GL_RGB9_E5_EXT 0x8C3D -#define GL_UNSIGNED_INT_5_9_9_9_REV_EXT 0x8C3E -#define GL_TEXTURE_SHARED_SIZE_EXT 0x8C3F -#endif - -#ifndef GL_NV_depth_buffer_float -#define GL_DEPTH_COMPONENT32F_NV 0x8DAB -#define GL_DEPTH32F_STENCIL8_NV 0x8DAC -#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV 0x8DAD -#define GL_DEPTH_BUFFER_FLOAT_MODE_NV 0x8DAF -#endif - -#ifndef GL_NV_fragment_program4 -#endif - -#ifndef GL_NV_framebuffer_multisample_coverage -#define GL_RENDERBUFFER_COVERAGE_SAMPLES_NV 0x8CAB -#define GL_RENDERBUFFER_COLOR_SAMPLES_NV 0x8E10 -#define GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV 0x8E11 -#define GL_MULTISAMPLE_COVERAGE_MODES_NV 0x8E12 -#endif - -#ifndef GL_EXT_framebuffer_sRGB -#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 -#define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA -#endif - -#ifndef GL_NV_geometry_shader4 -#endif - -#ifndef GL_NV_parameter_buffer_object -#define GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV 0x8DA0 -#define GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV 0x8DA1 -#define GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV 0x8DA2 -#define GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV 0x8DA3 -#define GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV 0x8DA4 -#endif - -#ifndef GL_EXT_draw_buffers2 -#endif - -#ifndef GL_NV_transform_feedback -#define GL_BACK_PRIMARY_COLOR_NV 0x8C77 -#define GL_BACK_SECONDARY_COLOR_NV 0x8C78 -#define GL_TEXTURE_COORD_NV 0x8C79 -#define GL_CLIP_DISTANCE_NV 0x8C7A -#define GL_VERTEX_ID_NV 0x8C7B -#define GL_PRIMITIVE_ID_NV 0x8C7C -#define GL_GENERIC_ATTRIB_NV 0x8C7D -#define GL_TRANSFORM_FEEDBACK_ATTRIBS_NV 0x8C7E -#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV 0x8C7F -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV 0x8C80 -#define GL_ACTIVE_VARYINGS_NV 0x8C81 -#define GL_ACTIVE_VARYING_MAX_LENGTH_NV 0x8C82 -#define GL_TRANSFORM_FEEDBACK_VARYINGS_NV 0x8C83 -#define GL_TRANSFORM_FEEDBACK_BUFFER_START_NV 0x8C84 -#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV 0x8C85 -#define GL_TRANSFORM_FEEDBACK_RECORD_NV 0x8C86 -#define GL_PRIMITIVES_GENERATED_NV 0x8C87 -#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV 0x8C88 -#define GL_RASTERIZER_DISCARD_NV 0x8C89 -#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_ATTRIBS_NV 0x8C8A -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV 0x8C8B -#define GL_INTERLEAVED_ATTRIBS_NV 0x8C8C -#define GL_SEPARATE_ATTRIBS_NV 0x8C8D -#define GL_TRANSFORM_FEEDBACK_BUFFER_NV 0x8C8E -#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV 0x8C8F -#endif - -#ifndef GL_EXT_bindable_uniform -#define GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT 0x8DE2 -#define GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT 0x8DE3 -#define GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT 0x8DE4 -#define GL_MAX_BINDABLE_UNIFORM_SIZE_EXT 0x8DED -#define GL_UNIFORM_BUFFER_EXT 0x8DEE -#define GL_UNIFORM_BUFFER_BINDING_EXT 0x8DEF -#endif - -#ifndef GL_EXT_texture_integer -#define GL_RGBA32UI_EXT 0x8D70 -#define GL_RGB32UI_EXT 0x8D71 -#define GL_ALPHA32UI_EXT 0x8D72 -#define GL_INTENSITY32UI_EXT 0x8D73 -#define GL_LUMINANCE32UI_EXT 0x8D74 -#define GL_LUMINANCE_ALPHA32UI_EXT 0x8D75 -#define GL_RGBA16UI_EXT 0x8D76 -#define GL_RGB16UI_EXT 0x8D77 -#define GL_ALPHA16UI_EXT 0x8D78 -#define GL_INTENSITY16UI_EXT 0x8D79 -#define GL_LUMINANCE16UI_EXT 0x8D7A -#define GL_LUMINANCE_ALPHA16UI_EXT 0x8D7B -#define GL_RGBA8UI_EXT 0x8D7C -#define GL_RGB8UI_EXT 0x8D7D -#define GL_ALPHA8UI_EXT 0x8D7E -#define GL_INTENSITY8UI_EXT 0x8D7F -#define GL_LUMINANCE8UI_EXT 0x8D80 -#define GL_LUMINANCE_ALPHA8UI_EXT 0x8D81 -#define GL_RGBA32I_EXT 0x8D82 -#define GL_RGB32I_EXT 0x8D83 -#define GL_ALPHA32I_EXT 0x8D84 -#define GL_INTENSITY32I_EXT 0x8D85 -#define GL_LUMINANCE32I_EXT 0x8D86 -#define GL_LUMINANCE_ALPHA32I_EXT 0x8D87 -#define GL_RGBA16I_EXT 0x8D88 -#define GL_RGB16I_EXT 0x8D89 -#define GL_ALPHA16I_EXT 0x8D8A -#define GL_INTENSITY16I_EXT 0x8D8B -#define GL_LUMINANCE16I_EXT 0x8D8C -#define GL_LUMINANCE_ALPHA16I_EXT 0x8D8D -#define GL_RGBA8I_EXT 0x8D8E -#define GL_RGB8I_EXT 0x8D8F -#define GL_ALPHA8I_EXT 0x8D90 -#define GL_INTENSITY8I_EXT 0x8D91 -#define GL_LUMINANCE8I_EXT 0x8D92 -#define GL_LUMINANCE_ALPHA8I_EXT 0x8D93 -#define GL_RED_INTEGER_EXT 0x8D94 -#define GL_GREEN_INTEGER_EXT 0x8D95 -#define GL_BLUE_INTEGER_EXT 0x8D96 -#define GL_ALPHA_INTEGER_EXT 0x8D97 -#define GL_RGB_INTEGER_EXT 0x8D98 -#define GL_RGBA_INTEGER_EXT 0x8D99 -#define GL_BGR_INTEGER_EXT 0x8D9A -#define GL_BGRA_INTEGER_EXT 0x8D9B -#define GL_LUMINANCE_INTEGER_EXT 0x8D9C -#define GL_LUMINANCE_ALPHA_INTEGER_EXT 0x8D9D -#define GL_RGBA_INTEGER_MODE_EXT 0x8D9E -#endif - - -/*************************************************************/ - -#include <stddef.h> -#ifndef GL_VERSION_2_0 -/* GL type for 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 program/shader text */ -typedef char GLcharARB; /* native character */ -typedef unsigned int GLhandleARB; /* shader object handle */ -#endif - -/* GL types for "half" precision (s10e5) float data in host memory */ -#ifndef GL_ARB_half_float_pixel -typedef unsigned short GLhalfARB; -#endif - -#ifndef GL_NV_half_float -typedef unsigned short GLhalfNV; -#endif - -#ifndef GLEXT_64_TYPES_DEFINED -/* This code block is duplicated in glext.h, so must be protected */ -#define GLEXT_64_TYPES_DEFINED -/* Define int32_t, int64_t, and uint64_t types for UST/MSC */ -/* (as used in the GL_EXT_timer_query extension). */ -#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L -#include <inttypes.h> -#elif defined(__sun__) -#include <inttypes.h> -#if defined(__STDC__) -#if defined(__arch64__) -typedef long int int64_t; -typedef unsigned long int uint64_t; -#else -typedef long long int int64_t; -typedef unsigned long long int uint64_t; -#endif /* __arch64__ */ -#endif /* __STDC__ */ -#elif defined( __VMS ) -#include <inttypes.h> -#elif defined(__SCO__) || defined(__USLC__) -#include <stdint.h> -#elif defined(__UNIXOS2__) || defined(__SOL64__) -typedef long int int32_t; -typedef long long int int64_t; -typedef unsigned long long int uint64_t; -#elif defined(_WIN32) && defined(__GNUC__) -#include <stdint.h> -#elif defined(_WIN32) -typedef __int32 int32_t; -typedef __int64 int64_t; -typedef unsigned __int64 uint64_t; -#else -#include <inttypes.h> /* Fallback option */ -#endif -#endif - -#ifndef GL_EXT_timer_query -typedef int64_t GLint64EXT; -typedef uint64_t GLuint64EXT; -#endif - -#ifndef GL_VERSION_1_2 -#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_VERSION_2_1 -#define GL_VERSION_2_1 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glUniformMatrix2x3fv (GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glUniformMatrix3x2fv (GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glUniformMatrix2x4fv (GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glUniformMatrix4x2fv (GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glUniformMatrix3x4fv (GLint, GLsizei, GLboolean, const GLfloat *); -GLAPI void APIENTRY glUniformMatrix4x3fv (GLint, GLsizei, GLboolean, const GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -#endif - -#ifndef GL_ARB_multitexture -#define GL_ARB_multitexture 1 -#ifdef GL_GLEXT_PROTOTYPES -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 -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 (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 -GLAPI void APIENTRY glSampleCoverageARB (GLclampf, GLboolean); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSAMPLECOVERAGEARBPROC) (GLclampf value, GLboolean invert); -#endif - -#ifndef GL_ARB_texture_env_add -#define GL_ARB_texture_env_add 1 -#endif - -#ifndef GL_ARB_texture_cube_map -#define GL_ARB_texture_cube_map 1 -#endif - -#ifndef GL_ARB_texture_compression -#define GL_ARB_texture_compression 1 -#ifdef GL_GLEXT_PROTOTYPES -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 (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 -#define GL_EXT_abgr 1 -#endif - -#ifndef GL_EXT_blend_color -#define GL_EXT_blend_color 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendColorEXT (GLclampf, GLclampf, GLclampf, GLclampf); -#endif /* GL_GLEXT_PROTOTYPES */ -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 -GLAPI void APIENTRY glPolygonOffsetEXT (GLfloat, GLfloat); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bias); -#endif - -#ifndef GL_EXT_texture -#define GL_EXT_texture 1 -#endif - -#ifndef GL_EXT_texture3D -#define GL_EXT_texture3D 1 -#ifdef GL_GLEXT_PROTOTYPES -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 (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 -GLAPI void APIENTRY glGetTexFilterFuncSGIS (GLenum, GLenum, GLfloat *); -GLAPI void APIENTRY glTexFilterFuncSGIS (GLenum, GLenum, GLsizei, const GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -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 -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 (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 -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 (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 -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 -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_SGI_color_matrix -#define GL_SGI_color_matrix 1 -#endif - -#ifndef GL_SGI_color_table -#define GL_SGI_color_table 1 -#ifdef GL_GLEXT_PROTOTYPES -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 (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 -GLAPI void APIENTRY glPixelTexGenSGIX (GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPIXELTEXGENSGIXPROC) (GLenum mode); -#endif - -#ifndef GL_SGIS_pixel_texture -#define GL_SGIS_pixel_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -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 (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 -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 (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 -#define GL_SGI_texture_color_table 1 -#endif - -#ifndef GL_EXT_cmyka -#define GL_EXT_cmyka 1 -#endif - -#ifndef GL_EXT_texture_object -#define GL_EXT_texture_object 1 -#ifdef GL_GLEXT_PROTOTYPES -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 (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 -GLAPI void APIENTRY glDetailTexFuncSGIS (GLenum, GLsizei, const GLfloat *); -GLAPI void APIENTRY glGetDetailTexFuncSGIS (GLenum, GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -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 -GLAPI void APIENTRY glSharpenTexFuncSGIS (GLenum, GLsizei, const GLfloat *); -GLAPI void APIENTRY glGetSharpenTexFuncSGIS (GLenum, GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -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 -#define GL_EXT_packed_pixels 1 -#endif - -#ifndef GL_SGIS_texture_lod -#define GL_SGIS_texture_lod 1 -#endif - -#ifndef GL_SGIS_multisample -#define GL_SGIS_multisample 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSampleMaskSGIS (GLclampf, GLboolean); -GLAPI void APIENTRY glSamplePatternSGIS (GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSAMPLEMASKSGISPROC) (GLclampf value, GLboolean invert); -typedef void (APIENTRYP PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern); -#endif - -#ifndef GL_EXT_rescale_normal -#define GL_EXT_rescale_normal 1 -#endif - -#ifndef GL_EXT_vertex_array -#define GL_EXT_vertex_array 1 -#ifdef GL_GLEXT_PROTOTYPES -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 -#define GL_EXT_misc_attribute 1 -#endif - -#ifndef GL_SGIS_generate_mipmap -#define GL_SGIS_generate_mipmap 1 -#endif - -#ifndef GL_SGIX_clipmap -#define GL_SGIX_clipmap 1 -#endif - -#ifndef GL_SGIX_shadow -#define GL_SGIX_shadow 1 -#endif - -#ifndef GL_SGIS_texture_edge_clamp -#define GL_SGIS_texture_edge_clamp 1 -#endif - -#ifndef GL_SGIS_texture_border_clamp -#define GL_SGIS_texture_border_clamp 1 -#endif - -#ifndef GL_EXT_blend_minmax -#define GL_EXT_blend_minmax 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendEquationEXT (GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDEQUATIONEXTPROC) (GLenum mode); -#endif - -#ifndef GL_EXT_blend_subtract -#define GL_EXT_blend_subtract 1 -#endif - -#ifndef GL_EXT_blend_logic_op -#define GL_EXT_blend_logic_op 1 -#endif - -#ifndef GL_SGIX_interlace -#define GL_SGIX_interlace 1 -#endif - -#ifndef GL_SGIX_pixel_tiles -#define GL_SGIX_pixel_tiles 1 -#endif - -#ifndef GL_SGIX_texture_select -#define GL_SGIX_texture_select 1 -#endif - -#ifndef GL_SGIX_sprite -#define GL_SGIX_sprite 1 -#ifdef GL_GLEXT_PROTOTYPES -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 (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 -#define GL_SGIX_texture_multi_buffer 1 -#endif - -#ifndef GL_EXT_point_parameters -#define GL_EXT_point_parameters 1 -#ifdef GL_GLEXT_PROTOTYPES -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 (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 -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 (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 -#define GL_SGIX_texture_scale_bias 1 -#endif - -#ifndef GL_SGIX_framezoom -#define GL_SGIX_framezoom 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFrameZoomSGIX (GLint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFRAMEZOOMSGIXPROC) (GLint factor); -#endif - -#ifndef GL_SGIX_tag_sample_buffer -#define GL_SGIX_tag_sample_buffer 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTagSampleBufferSGIX (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTAGSAMPLEBUFFERSGIXPROC) (void); -#endif - -#ifndef GL_SGIX_polynomial_ffd -#define GL_SGIX_polynomial_ffd 1 -#ifdef GL_GLEXT_PROTOTYPES -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 (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 -GLAPI void APIENTRY glReferencePlaneSGIX (const GLdouble *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLREFERENCEPLANESGIXPROC) (const GLdouble *equation); -#endif - -#ifndef GL_SGIX_flush_raster -#define GL_SGIX_flush_raster 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFlushRasterSGIX (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFLUSHRASTERSGIXPROC) (void); -#endif - -#ifndef GL_SGIX_depth_texture -#define GL_SGIX_depth_texture 1 -#endif - -#ifndef GL_SGIS_fog_function -#define GL_SGIS_fog_function 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFogFuncSGIS (GLsizei, const GLfloat *); -GLAPI void APIENTRY glGetFogFuncSGIS (GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFOGFUNCSGISPROC) (GLsizei n, const GLfloat *points); -typedef void (APIENTRYP PFNGLGETFOGFUNCSGISPROC) (GLfloat *points); -#endif - -#ifndef GL_SGIX_fog_offset -#define GL_SGIX_fog_offset 1 -#endif - -#ifndef GL_HP_image_transform -#define GL_HP_image_transform 1 -#ifdef GL_GLEXT_PROTOTYPES -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 (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 -#define GL_HP_convolution_border_modes 1 -#endif - -#ifndef GL_SGIX_texture_add_env -#define GL_SGIX_texture_add_env 1 -#endif - -#ifndef GL_EXT_color_subtable -#define GL_EXT_color_subtable 1 -#ifdef GL_GLEXT_PROTOTYPES -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 (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 -#define GL_PGI_vertex_hints 1 -#endif - -#ifndef GL_PGI_misc_hints -#define GL_PGI_misc_hints 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glHintPGI (GLenum, GLint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLHINTPGIPROC) (GLenum target, GLint mode); -#endif - -#ifndef GL_EXT_paletted_texture -#define GL_EXT_paletted_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -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 (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 -#define GL_EXT_clip_volume_hint 1 -#endif - -#ifndef GL_SGIX_list_priority -#define GL_SGIX_list_priority 1 -#ifdef GL_GLEXT_PROTOTYPES -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 (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 -#define GL_SGIX_ir_instrument1 1 -#endif - -#ifndef GL_SGIX_calligraphic_fragment -#define GL_SGIX_calligraphic_fragment 1 -#endif - -#ifndef GL_SGIX_texture_lod_bias -#define GL_SGIX_texture_lod_bias 1 -#endif - -#ifndef GL_SGIX_shadow_ambient -#define GL_SGIX_shadow_ambient 1 -#endif - -#ifndef GL_EXT_index_texture -#define GL_EXT_index_texture 1 -#endif - -#ifndef GL_EXT_index_material -#define GL_EXT_index_material 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glIndexMaterialEXT (GLenum, GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode); -#endif - -#ifndef GL_EXT_index_func -#define GL_EXT_index_func 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glIndexFuncEXT (GLenum, GLclampf); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLINDEXFUNCEXTPROC) (GLenum func, GLclampf ref); -#endif - -#ifndef GL_EXT_index_array_formats -#define GL_EXT_index_array_formats 1 -#endif - -#ifndef GL_EXT_compiled_vertex_array -#define GL_EXT_compiled_vertex_array 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glLockArraysEXT (GLint, GLsizei); -GLAPI void APIENTRY glUnlockArraysEXT (void); -#endif /* GL_GLEXT_PROTOTYPES */ -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 -GLAPI void APIENTRY glCullParameterdvEXT (GLenum, GLdouble *); -GLAPI void APIENTRY glCullParameterfvEXT (GLenum, GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCULLPARAMETERDVEXTPROC) (GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat *params); -#endif - -#ifndef GL_SGIX_ycrcb -#define GL_SGIX_ycrcb 1 -#endif - -#ifndef GL_SGIX_fragment_lighting -#define GL_SGIX_fragment_lighting 1 -#ifdef GL_GLEXT_PROTOTYPES -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 -#define GL_IBM_rasterpos_clip 1 -#endif - -#ifndef GL_HP_texture_lighting -#define GL_HP_texture_lighting 1 -#endif - -#ifndef GL_EXT_draw_range_elements -#define GL_EXT_draw_range_elements 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawRangeElementsEXT (GLenum, GLuint, GLuint, GLsizei, GLenum, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); -#endif - -#ifndef GL_WIN_phong_shading -#define GL_WIN_phong_shading 1 -#endif - -#ifndef GL_WIN_specular_fog -#define GL_WIN_specular_fog 1 -#endif - -#ifndef GL_EXT_light_texture -#define GL_EXT_light_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glApplyTextureEXT (GLenum); -GLAPI void APIENTRY glTextureLightEXT (GLenum); -GLAPI void APIENTRY glTextureMaterialEXT (GLenum, GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -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 -#define GL_SGIX_blend_alpha_minmax 1 -#endif - -#ifndef GL_EXT_bgra -#define GL_EXT_bgra 1 -#endif - -#ifndef GL_SGIX_async -#define GL_SGIX_async 1 -#ifdef GL_GLEXT_PROTOTYPES -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 (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 -#define GL_SGIX_async_pixel 1 -#endif - -#ifndef GL_SGIX_async_histogram -#define GL_SGIX_async_histogram 1 -#endif - -#ifndef GL_INTEL_parallel_arrays -#define GL_INTEL_parallel_arrays 1 -#ifdef GL_GLEXT_PROTOTYPES -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 (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 -#define GL_HP_occlusion_test 1 -#endif - -#ifndef GL_EXT_pixel_transform -#define GL_EXT_pixel_transform 1 -#ifdef GL_GLEXT_PROTOTYPES -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 (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 -#define GL_EXT_pixel_transform_color_table 1 -#endif - -#ifndef GL_EXT_shared_texture_palette -#define GL_EXT_shared_texture_palette 1 -#endif - -#ifndef GL_EXT_separate_specular_color -#define GL_EXT_separate_specular_color 1 -#endif - -#ifndef GL_EXT_secondary_color -#define GL_EXT_secondary_color 1 -#ifdef GL_GLEXT_PROTOTYPES -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 -GLAPI void APIENTRY glTextureNormalEXT (GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXTURENORMALEXTPROC) (GLenum mode); -#endif - -#ifndef GL_EXT_multi_draw_arrays -#define GL_EXT_multi_draw_arrays 1 -#ifdef GL_GLEXT_PROTOTYPES -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 (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 -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 (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 -#define GL_REND_screen_coordinates 1 -#endif - -#ifndef GL_EXT_coordinate_frame -#define GL_EXT_coordinate_frame 1 -#ifdef GL_GLEXT_PROTOTYPES -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 -#define GL_EXT_texture_env_combine 1 -#endif - -#ifndef GL_APPLE_specular_vector -#define GL_APPLE_specular_vector 1 -#endif - -#ifndef GL_APPLE_transform_hint -#define GL_APPLE_transform_hint 1 -#endif - -#ifndef GL_SGIX_fog_scale -#define GL_SGIX_fog_scale 1 -#endif - -#ifndef GL_SUNX_constant_data -#define GL_SUNX_constant_data 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFinishTextureSUNX (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFINISHTEXTURESUNXPROC) (void); -#endif - -#ifndef GL_SUN_global_alpha -#define GL_SUN_global_alpha 1 -#ifdef GL_GLEXT_PROTOTYPES -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 -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 (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 -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 -GLAPI void APIENTRY glBlendFuncSeparateEXT (GLenum, GLenum, GLenum, GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -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 -#define GL_INGR_color_clamp 1 -#endif - -#ifndef GL_INGR_interlace_read -#define GL_INGR_interlace_read 1 -#endif - -#ifndef GL_EXT_stencil_wrap -#define GL_EXT_stencil_wrap 1 -#endif - -#ifndef GL_EXT_422_pixels -#define GL_EXT_422_pixels 1 -#endif - -#ifndef GL_NV_texgen_reflection -#define GL_NV_texgen_reflection 1 -#endif - -#ifndef GL_SUN_convolution_border_modes -#define GL_SUN_convolution_border_modes 1 -#endif - -#ifndef GL_EXT_texture_env_add -#define GL_EXT_texture_env_add 1 -#endif - -#ifndef GL_EXT_texture_lod_bias -#define GL_EXT_texture_lod_bias 1 -#endif - -#ifndef GL_EXT_texture_filter_anisotropic -#define GL_EXT_texture_filter_anisotropic 1 -#endif - -#ifndef GL_EXT_vertex_weighting -#define GL_EXT_vertex_weighting 1 -#ifdef GL_GLEXT_PROTOTYPES -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 (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 -#define GL_NV_light_max_exponent 1 -#endif - -#ifndef GL_NV_vertex_array_range -#define GL_NV_vertex_array_range 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFlushVertexArrayRangeNV (void); -GLAPI void APIENTRY glVertexArrayRangeNV (GLsizei, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -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 -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 -#define GL_NV_fog_distance 1 -#endif - -#ifndef GL_NV_texgen_emboss -#define GL_NV_texgen_emboss 1 -#endif - -#ifndef GL_NV_blend_square -#define GL_NV_blend_square 1 -#endif - -#ifndef GL_NV_texture_env_combine4 -#define GL_NV_texture_env_combine4 1 -#endif - -#ifndef GL_MESA_resize_buffers -#define GL_MESA_resize_buffers 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glResizeBuffersMESA (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLRESIZEBUFFERSMESAPROC) (void); -#endif - -#ifndef GL_MESA_window_pos -#define GL_MESA_window_pos 1 -#ifdef GL_GLEXT_PROTOTYPES -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 -#define GL_IBM_cull_vertex 1 -#endif - -#ifndef GL_IBM_multimode_draw_arrays -#define GL_IBM_multimode_draw_arrays 1 -#ifdef GL_GLEXT_PROTOTYPES -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 (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 -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 -#define GL_SGIX_subsample 1 -#endif - -#ifndef GL_SGIX_ycrcba -#define GL_SGIX_ycrcba 1 -#endif - -#ifndef GL_SGIX_ycrcb_subsample -#define GL_SGIX_ycrcb_subsample 1 -#endif - -#ifndef GL_SGIX_depth_pass_instrument -#define GL_SGIX_depth_pass_instrument 1 -#endif - -#ifndef GL_3DFX_texture_compression_FXT1 -#define GL_3DFX_texture_compression_FXT1 1 -#endif - -#ifndef GL_3DFX_multisample -#define GL_3DFX_multisample 1 -#endif - -#ifndef GL_3DFX_tbuffer -#define GL_3DFX_tbuffer 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTbufferMask3DFX (GLuint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTBUFFERMASK3DFXPROC) (GLuint mask); -#endif - -#ifndef GL_EXT_multisample -#define GL_EXT_multisample 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSampleMaskEXT (GLclampf, GLboolean); -GLAPI void APIENTRY glSamplePatternEXT (GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSAMPLEMASKEXTPROC) (GLclampf value, GLboolean invert); -typedef void (APIENTRYP PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern); -#endif - -#ifndef GL_SGIX_vertex_preclip -#define GL_SGIX_vertex_preclip 1 -#endif - -#ifndef GL_SGIX_convolution_accuracy -#define GL_SGIX_convolution_accuracy 1 -#endif - -#ifndef GL_SGIX_resample -#define GL_SGIX_resample 1 -#endif - -#ifndef GL_SGIS_point_line_texgen -#define GL_SGIS_point_line_texgen 1 -#endif - -#ifndef GL_SGIS_texture_color_mask -#define GL_SGIS_texture_color_mask 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTextureColorMaskSGIS (GLboolean, GLboolean, GLboolean, GLboolean); -#endif /* GL_GLEXT_PROTOTYPES */ -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 -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 (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, 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, 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_OES_read_format -#define GL_OES_read_format 1 -#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 - -#ifndef GL_EXT_framebuffer_object -#define GL_EXT_framebuffer_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLboolean APIENTRY glIsRenderbufferEXT (GLuint); -GLAPI void APIENTRY glBindRenderbufferEXT (GLenum, GLuint); -GLAPI void APIENTRY glDeleteRenderbuffersEXT (GLsizei, const GLuint *); -GLAPI void APIENTRY glGenRenderbuffersEXT (GLsizei, GLuint *); -GLAPI void APIENTRY glRenderbufferStorageEXT (GLenum, GLenum, GLsizei, GLsizei); -GLAPI void APIENTRY glGetRenderbufferParameterivEXT (GLenum, GLenum, GLint *); -GLAPI GLboolean APIENTRY glIsFramebufferEXT (GLuint); -GLAPI void APIENTRY glBindFramebufferEXT (GLenum, GLuint); -GLAPI void APIENTRY glDeleteFramebuffersEXT (GLsizei, const GLuint *); -GLAPI void APIENTRY glGenFramebuffersEXT (GLsizei, GLuint *); -GLAPI GLenum APIENTRY glCheckFramebufferStatusEXT (GLenum); -GLAPI void APIENTRY glFramebufferTexture1DEXT (GLenum, GLenum, GLenum, GLuint, GLint); -GLAPI void APIENTRY glFramebufferTexture2DEXT (GLenum, GLenum, GLenum, GLuint, GLint); -GLAPI void APIENTRY glFramebufferTexture3DEXT (GLenum, GLenum, GLenum, GLuint, GLint, GLint); -GLAPI void APIENTRY glFramebufferRenderbufferEXT (GLenum, GLenum, GLenum, GLuint); -GLAPI void APIENTRY glGetFramebufferAttachmentParameterivEXT (GLenum, GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGenerateMipmapEXT (GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFEREXTPROC) (GLuint renderbuffer); -typedef void (APIENTRYP PFNGLBINDRENDERBUFFEREXTPROC) (GLenum target, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSEXTPROC) (GLsizei n, const GLuint *renderbuffers); -typedef void (APIENTRYP PFNGLGENRENDERBUFFERSEXTPROC) (GLsizei n, GLuint *renderbuffers); -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFEREXTPROC) (GLuint framebuffer); -typedef void (APIENTRYP PFNGLBINDFRAMEBUFFEREXTPROC) (GLenum target, GLuint framebuffer); -typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSEXTPROC) (GLsizei n, const GLuint *framebuffers); -typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSEXTPROC) (GLsizei n, GLuint *framebuffers); -typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) (GLenum target); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGENERATEMIPMAPEXTPROC) (GLenum target); -#endif - -#ifndef GL_GREMEDY_string_marker -#define GL_GREMEDY_string_marker 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glStringMarkerGREMEDY (GLsizei, const GLvoid *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSTRINGMARKERGREMEDYPROC) (GLsizei len, const GLvoid *string); -#endif - -#ifndef GL_EXT_packed_depth_stencil -#define GL_EXT_packed_depth_stencil 1 -#endif - -#ifndef GL_EXT_stencil_clear_tag -#define GL_EXT_stencil_clear_tag 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glStencilClearTagEXT (GLsizei, GLuint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSTENCILCLEARTAGEXTPROC) (GLsizei stencilTagBits, GLuint stencilClearTag); -#endif - -#ifndef GL_EXT_texture_sRGB -#define GL_EXT_texture_sRGB 1 -#endif - -#ifndef GL_EXT_framebuffer_blit -#define GL_EXT_framebuffer_blit 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlitFramebufferEXT (GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLbitfield, GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLITFRAMEBUFFEREXTPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -#endif - -#ifndef GL_EXT_framebuffer_multisample -#define GL_EXT_framebuffer_multisample 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glRenderbufferStorageMultisampleEXT (GLenum, GLsizei, GLenum, GLsizei, GLsizei); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -#endif - -#ifndef GL_MESAX_texture_stack -#define GL_MESAX_texture_stack 1 -#endif - -#ifndef GL_EXT_timer_query -#define GL_EXT_timer_query 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetQueryObjecti64vEXT (GLuint, GLenum, GLint64EXT *); -GLAPI void APIENTRY glGetQueryObjectui64vEXT (GLuint, GLenum, GLuint64EXT *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64EXT *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64EXT *params); -#endif - -#ifndef GL_EXT_gpu_program_parameters -#define GL_EXT_gpu_program_parameters 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramEnvParameters4fvEXT (GLenum, GLuint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glProgramLocalParameters4fvEXT (GLenum, GLuint, GLsizei, const GLfloat *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params); -#endif - -#ifndef GL_APPLE_flush_buffer_range -#define GL_APPLE_flush_buffer_range 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBufferParameteriAPPLE (GLenum, GLenum, GLint); -GLAPI void APIENTRY glFlushMappedBufferRangeAPPLE (GLenum, GLintptr, GLsizeiptr); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBUFFERPARAMETERIAPPLEPROC) (GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC) (GLenum target, GLintptr offset, GLsizeiptr size); -#endif - -#ifndef GL_NV_gpu_program4 -#define GL_NV_gpu_program4 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramLocalParameterI4iNV (GLenum, GLuint, GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glProgramLocalParameterI4ivNV (GLenum, GLuint, const GLint *); -GLAPI void APIENTRY glProgramLocalParametersI4ivNV (GLenum, GLuint, GLsizei, const GLint *); -GLAPI void APIENTRY glProgramLocalParameterI4uiNV (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glProgramLocalParameterI4uivNV (GLenum, GLuint, const GLuint *); -GLAPI void APIENTRY glProgramLocalParametersI4uivNV (GLenum, GLuint, GLsizei, const GLuint *); -GLAPI void APIENTRY glProgramEnvParameterI4iNV (GLenum, GLuint, GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glProgramEnvParameterI4ivNV (GLenum, GLuint, const GLint *); -GLAPI void APIENTRY glProgramEnvParametersI4ivNV (GLenum, GLuint, GLsizei, const GLint *); -GLAPI void APIENTRY glProgramEnvParameterI4uiNV (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glProgramEnvParameterI4uivNV (GLenum, GLuint, const GLuint *); -GLAPI void APIENTRY glProgramEnvParametersI4uivNV (GLenum, GLuint, GLsizei, const GLuint *); -GLAPI void APIENTRY glGetProgramLocalParameterIivNV (GLenum, GLuint, GLint *); -GLAPI void APIENTRY glGetProgramLocalParameterIuivNV (GLenum, GLuint, GLuint *); -GLAPI void APIENTRY glGetProgramEnvParameterIivNV (GLenum, GLuint, GLint *); -GLAPI void APIENTRY glGetProgramEnvParameterIuivNV (GLenum, GLuint, GLuint *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params); -#endif - -#ifndef GL_NV_geometry_program4 -#define GL_NV_geometry_program4 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramVertexLimitNV (GLenum, GLint); -GLAPI void APIENTRY glFramebufferTextureEXT (GLenum, GLenum, GLuint, GLint); -GLAPI void APIENTRY glFramebufferTextureLayerEXT (GLenum, GLenum, GLuint, GLint, GLint); -GLAPI void APIENTRY glFramebufferTextureFaceEXT (GLenum, GLenum, GLuint, GLint, GLenum); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPROGRAMVERTEXLIMITNVPROC) (GLenum target, GLint limit); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); -#endif - -#ifndef GL_EXT_geometry_shader4 -#define GL_EXT_geometry_shader4 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramParameteriEXT (GLuint, GLenum, GLint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value); -#endif - -#ifndef GL_NV_vertex_program4 -#define GL_NV_vertex_program4 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribI1iEXT (GLuint, GLint); -GLAPI void APIENTRY glVertexAttribI2iEXT (GLuint, GLint, GLint); -GLAPI void APIENTRY glVertexAttribI3iEXT (GLuint, GLint, GLint, GLint); -GLAPI void APIENTRY glVertexAttribI4iEXT (GLuint, GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glVertexAttribI1uiEXT (GLuint, GLuint); -GLAPI void APIENTRY glVertexAttribI2uiEXT (GLuint, GLuint, GLuint); -GLAPI void APIENTRY glVertexAttribI3uiEXT (GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glVertexAttribI4uiEXT (GLuint, GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glVertexAttribI1ivEXT (GLuint, const GLint *); -GLAPI void APIENTRY glVertexAttribI2ivEXT (GLuint, const GLint *); -GLAPI void APIENTRY glVertexAttribI3ivEXT (GLuint, const GLint *); -GLAPI void APIENTRY glVertexAttribI4ivEXT (GLuint, const GLint *); -GLAPI void APIENTRY glVertexAttribI1uivEXT (GLuint, const GLuint *); -GLAPI void APIENTRY glVertexAttribI2uivEXT (GLuint, const GLuint *); -GLAPI void APIENTRY glVertexAttribI3uivEXT (GLuint, const GLuint *); -GLAPI void APIENTRY glVertexAttribI4uivEXT (GLuint, const GLuint *); -GLAPI void APIENTRY glVertexAttribI4bvEXT (GLuint, const GLbyte *); -GLAPI void APIENTRY glVertexAttribI4svEXT (GLuint, const GLshort *); -GLAPI void APIENTRY glVertexAttribI4ubvEXT (GLuint, const GLubyte *); -GLAPI void APIENTRY glVertexAttribI4usvEXT (GLuint, const GLushort *); -GLAPI void APIENTRY glVertexAttribIPointerEXT (GLuint, GLint, GLenum, GLsizei, const GLvoid *); -GLAPI void APIENTRY glGetVertexAttribIivEXT (GLuint, GLenum, GLint *); -GLAPI void APIENTRY glGetVertexAttribIuivEXT (GLuint, GLenum, GLuint *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IEXTPROC) (GLuint index, GLint x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IEXTPROC) (GLuint index, GLint x, GLint y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IEXTPROC) (GLuint index, GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IEXTPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIEXTPROC) (GLuint index, GLuint x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIEXTPROC) (GLuint index, GLuint x, GLuint y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVEXTPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVEXTPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVEXTPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVEXTPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVEXTPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVEXTPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVEXTPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVEXTPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVEXTPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVEXTPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVEXTPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVEXTPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVEXTPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVEXTPROC) (GLuint index, GLenum pname, GLuint *params); -#endif - -#ifndef GL_EXT_gpu_shader4 -#define GL_EXT_gpu_shader4 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetUniformuivEXT (GLuint, GLint, GLuint *); -GLAPI void APIENTRY glBindFragDataLocationEXT (GLuint, GLuint, const GLchar *); -GLAPI GLint APIENTRY glGetFragDataLocationEXT (GLuint, const GLchar *); -GLAPI void APIENTRY glUniform1uiEXT (GLint, GLuint); -GLAPI void APIENTRY glUniform2uiEXT (GLint, GLuint, GLuint); -GLAPI void APIENTRY glUniform3uiEXT (GLint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glUniform4uiEXT (GLint, GLuint, GLuint, GLuint, GLuint); -GLAPI void APIENTRY glUniform1uivEXT (GLint, GLsizei, const GLuint *); -GLAPI void APIENTRY glUniform2uivEXT (GLint, GLsizei, const GLuint *); -GLAPI void APIENTRY glUniform3uivEXT (GLint, GLsizei, const GLuint *); -GLAPI void APIENTRY glUniform4uivEXT (GLint, GLsizei, const GLuint *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETUNIFORMUIVEXTPROC) (GLuint program, GLint location, GLuint *params); -typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONEXTPROC) (GLuint program, GLuint color, const GLchar *name); -typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONEXTPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLUNIFORM1UIEXTPROC) (GLint location, GLuint v0); -typedef void (APIENTRYP PFNGLUNIFORM2UIEXTPROC) (GLint location, GLuint v0, GLuint v1); -typedef void (APIENTRYP PFNGLUNIFORM3UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2); -typedef void (APIENTRYP PFNGLUNIFORM4UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -typedef void (APIENTRYP PFNGLUNIFORM1UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLUNIFORM2UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLUNIFORM3UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLUNIFORM4UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); -#endif - -#ifndef GL_EXT_draw_instanced -#define GL_EXT_draw_instanced 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawArraysInstancedEXT (GLenum, GLint, GLsizei, GLsizei); -GLAPI void APIENTRY glDrawElementsInstancedEXT (GLenum, GLsizei, GLenum, const GLvoid *, GLsizei); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDEXTPROC) (GLenum mode, GLint start, GLsizei count, GLsizei primcount); -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDEXTPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); -#endif - -#ifndef GL_EXT_packed_float -#define GL_EXT_packed_float 1 -#endif - -#ifndef GL_EXT_texture_array -#define GL_EXT_texture_array 1 -#endif - -#ifndef GL_EXT_texture_buffer_object -#define GL_EXT_texture_buffer_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexBufferEXT (GLenum, GLenum, GLuint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXBUFFEREXTPROC) (GLenum target, GLenum internalformat, GLuint buffer); -#endif - -#ifndef GL_EXT_texture_compression_latc -#define GL_EXT_texture_compression_latc 1 -#endif - -#ifndef GL_EXT_texture_compression_rgtc -#define GL_EXT_texture_compression_rgtc 1 -#endif - -#ifndef GL_EXT_texture_shared_exponent -#define GL_EXT_texture_shared_exponent 1 -#endif - -#ifndef GL_NV_depth_buffer_float -#define GL_NV_depth_buffer_float 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDepthRangedNV (GLdouble, GLdouble); -GLAPI void APIENTRY glClearDepthdNV (GLdouble); -GLAPI void APIENTRY glDepthBoundsdNV (GLdouble, GLdouble); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDEPTHRANGEDNVPROC) (GLdouble zNear, GLdouble zFar); -typedef void (APIENTRYP PFNGLCLEARDEPTHDNVPROC) (GLdouble depth); -typedef void (APIENTRYP PFNGLDEPTHBOUNDSDNVPROC) (GLdouble zmin, GLdouble zmax); -#endif - -#ifndef GL_NV_fragment_program4 -#define GL_NV_fragment_program4 1 -#endif - -#ifndef GL_NV_framebuffer_multisample_coverage -#define GL_NV_framebuffer_multisample_coverage 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glRenderbufferStorageMultisampleCoverageNV (GLenum, GLsizei, GLsizei, GLenum, GLsizei, GLsizei); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); -#endif - -#ifndef GL_EXT_framebuffer_sRGB -#define GL_EXT_framebuffer_sRGB 1 -#endif - -#ifndef GL_NV_geometry_shader4 -#define GL_NV_geometry_shader4 1 -#endif - -#ifndef GL_NV_parameter_buffer_object -#define GL_NV_parameter_buffer_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramBufferParametersfvNV (GLenum, GLuint, GLuint, GLsizei, const GLfloat *); -GLAPI void APIENTRY glProgramBufferParametersIivNV (GLenum, GLuint, GLuint, GLsizei, const GLint *); -GLAPI void APIENTRY glProgramBufferParametersIuivNV (GLenum, GLuint, GLuint, GLsizei, const GLuint *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC) (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLfloat *params); -typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC) (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC) (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLuint *params); -#endif - -#ifndef GL_EXT_draw_buffers2 -#define GL_EXT_draw_buffers2 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorMaskIndexedEXT (GLuint, GLboolean, GLboolean, GLboolean, GLboolean); -GLAPI void APIENTRY glGetBooleanIndexedvEXT (GLenum, GLuint, GLboolean *); -GLAPI void APIENTRY glGetIntegerIndexedvEXT (GLenum, GLuint, GLint *); -GLAPI void APIENTRY glEnableIndexedEXT (GLenum, GLuint); -GLAPI void APIENTRY glDisableIndexedEXT (GLenum, GLuint); -GLAPI GLboolean APIENTRY glIsEnabledIndexedEXT (GLenum, GLuint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOLORMASKINDEXEDEXTPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -typedef void (APIENTRYP PFNGLGETBOOLEANINDEXEDVEXTPROC) (GLenum target, GLuint index, GLboolean *data); -typedef void (APIENTRYP PFNGLGETINTEGERINDEXEDVEXTPROC) (GLenum target, GLuint index, GLint *data); -typedef void (APIENTRYP PFNGLENABLEINDEXEDEXTPROC) (GLenum target, GLuint index); -typedef void (APIENTRYP PFNGLDISABLEINDEXEDEXTPROC) (GLenum target, GLuint index); -typedef GLboolean (APIENTRYP PFNGLISENABLEDINDEXEDEXTPROC) (GLenum target, GLuint index); -#endif - -#ifndef GL_NV_transform_feedback -#define GL_NV_transform_feedback 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBeginTransformFeedbackNV (GLenum); -GLAPI void APIENTRY glEndTransformFeedbackNV (void); -GLAPI void APIENTRY glTransformFeedbackAttribsNV (GLuint, const GLint *, GLenum); -GLAPI void APIENTRY glBindBufferRangeNV (GLenum, GLuint, GLuint, GLintptr, GLsizeiptr); -GLAPI void APIENTRY glBindBufferOffsetNV (GLenum, GLuint, GLuint, GLintptr); -GLAPI void APIENTRY glBindBufferBaseNV (GLenum, GLuint, GLuint); -GLAPI void APIENTRY glTransformFeedbackVaryingsNV (GLuint, GLsizei, const GLint *, GLenum); -GLAPI void APIENTRY glActiveVaryingNV (GLuint, const GLchar *); -GLAPI GLint APIENTRY glGetVaryingLocationNV (GLuint, const GLchar *); -GLAPI void APIENTRY glGetActiveVaryingNV (GLuint, GLuint, GLsizei, GLsizei *, GLsizei *, GLenum *, GLchar *); -GLAPI void APIENTRY glGetTransformFeedbackVaryingNV (GLuint, GLuint, GLint *); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKNVPROC) (GLenum primitiveMode); -typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKNVPROC) (void); -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC) (GLuint count, const GLint *attribs, GLenum bufferMode); -typedef void (APIENTRYP PFNGLBINDBUFFERRANGENVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETNVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); -typedef void (APIENTRYP PFNGLBINDBUFFERBASENVPROC) (GLenum target, GLuint index, GLuint buffer); -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC) (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode); -typedef void (APIENTRYP PFNGLACTIVEVARYINGNVPROC) (GLuint program, const GLchar *name); -typedef GLint (APIENTRYP PFNGLGETVARYINGLOCATIONNVPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLGETACTIVEVARYINGNVPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC) (GLuint program, GLuint index, GLint *location); -#endif - -#ifndef GL_EXT_bindable_uniform -#define GL_EXT_bindable_uniform 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glUniformBufferEXT (GLuint, GLint, GLuint); -GLAPI GLint APIENTRY glGetUniformBufferSizeEXT (GLuint, GLint); -GLAPI GLintptr APIENTRY glGetUniformOffsetEXT (GLuint, GLint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLUNIFORMBUFFEREXTPROC) (GLuint program, GLint location, GLuint buffer); -typedef GLint (APIENTRYP PFNGLGETUNIFORMBUFFERSIZEEXTPROC) (GLuint program, GLint location); -typedef GLintptr (APIENTRYP PFNGLGETUNIFORMOFFSETEXTPROC) (GLuint program, GLint location); -#endif - -#ifndef GL_EXT_texture_integer -#define GL_EXT_texture_integer 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexParameterIivEXT (GLenum, GLenum, const GLint *); -GLAPI void APIENTRY glTexParameterIuivEXT (GLenum, GLenum, const GLuint *); -GLAPI void APIENTRY glGetTexParameterIivEXT (GLenum, GLenum, GLint *); -GLAPI void APIENTRY glGetTexParameterIuivEXT (GLenum, GLenum, GLuint *); -GLAPI void APIENTRY glClearColorIiEXT (GLint, GLint, GLint, GLint); -GLAPI void APIENTRY glClearColorIuiEXT (GLuint, GLuint, GLuint, GLuint); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, const GLuint *params); -typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLCLEARCOLORIIEXTPROC) (GLint red, GLint green, GLint blue, GLint alpha); -typedef void (APIENTRYP PFNGLCLEARCOLORIUIEXTPROC) (GLuint red, GLuint green, GLuint blue, GLuint alpha); -#endif - - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/src/native/ogl/j3dsys.h b/src/native/ogl/j3dsys.h deleted file mode 100644 index 9abb437..0000000 --- a/src/native/ogl/j3dsys.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * $RCSfile$ - * - * Copyright 2007-2008 Sun Microsystems, Inc. All Rights Reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * $Revision$ - * $Date$ - * $State$ - */ - -#ifndef _j3dsys_h_ -#define _j3dsys_h_ - -// Suppress VS2005 compiler warning -#if defined(WIN32) -#define _CRT_SECURE_NO_DEPRECATE -#define _CRT_NONSTDC_NO_DEPRECATE -#endif - -#if defined(LINUX) -#define _GNU_SOURCE 1 -#endif - -#endif /* _j3dsys_h_ */ diff --git a/src/native/ogl/panoramiXext.h b/src/native/ogl/panoramiXext.h deleted file mode 100644 index 0deac63..0000000 --- a/src/native/ogl/panoramiXext.h +++ /dev/null @@ -1,90 +0,0 @@ -/* $TOG: panoramiXext.h /main/3 1998/02/13 13:08:51 kaleb $ */ -/***************************************************************** - -Copyright (c) 1991, 1997 Digital Equipment Corporation, Maynard, Massachusetts. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -DIGITAL EQUIPMENT CORPORATION BE LIABLE FOR ANY CLAIM, DAMAGES, INCLUDING, -BUT NOT LIMITED TO CONSEQUENTIAL OR INCIDENTAL DAMAGES, OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of Digital Equipment Corporation -shall not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from Digital -Equipment Corporation. - -******************************************************************/ -/* - * PanoramiX definitions - */ - -/* THIS IS NOT AN X PROJECT TEAM SPECIFICATION */ - -#define PANORAMIX_MAJOR_VERSION 1 /* current version number */ -#define PANORAMIX_MINOR_VERSION 0 - -typedef struct { - Window window; /* PanoramiX window - may not exist */ - int screen; - int State; /* PanroamiXOff, PanoramiXOn */ - int width; /* width of this screen */ - int height; /* height of this screen */ - int ScreenCount; /* real physical number of screens */ - XID eventMask; /* selected events for this client */ -} XPanoramiXInfo; - -extern XPanoramiXInfo *XPanoramiXAllocInfo ( -#if NeedFunctionPrototypes - void -#endif -); - -#define XINERAMA_PLACE_TOP 1 -#define XINERAMA_PLACE_BOTTOM 2 -#define XINERAMA_PLACE_RIGHT 4 -#define XINERAMA_PLACE_LEFT 8 - -#ifndef _XINERAMAINFO_ -#define _XINERAMAINFO_ - -#define XinID int -#define MAXSCREEN 16 -#define DELTA int -#define POINT int - -typedef struct subwid -{ - XinID wid; /* sub window id */ - DELTA dx,dy; /* delta in screen co-ord from virtual zero */ - POINT x,y; /* location of window in screen co-ord */ - DELTA wdx,wdy;/* size of window in screen co-ord */ -}SubWID, *pSubWID; - -typedef struct xineramainfo -{ - XinID wid; /* Window ID of requested virtual window */ - SubWID subs[MAXSCREEN]; /* there will be 16 slots */ -}XineramaInfo, *pXineramaInfo; -#endif - -#ifndef NO_PROTO_HERE -Bool XDgaGetXineramaInfo( -#if NeedFunctionPrototypes -/* this brakes the server -Display *, int, XID, XineramaInfo * -*/ -#endif -); -#endif diff --git a/src/native/ogl/wglext.h b/src/native/ogl/wglext.h deleted file mode 100644 index 18804be..0000000 --- a/src/native/ogl/wglext.h +++ /dev/null @@ -1,648 +0,0 @@ -#ifndef __wglext_h_ -#define __wglext_h_ - -#ifdef __cplusplus -extern "C" { -#endif - -/* -** Copyright (c) 2007 The Khronos Group Inc. -** -** Permission is hereby granted, free of charge, to any person obtaining a -** copy of this software and/or associated documentation files (the -** "Materials"), to deal in the Materials without restriction, including -** without limitation the rights to use, copy, modify, merge, publish, -** distribute, sublicense, and/or sell copies of the Materials, and to -** permit persons to whom the Materials are furnished to do so, subject to -** the following conditions: -** -** The above copyright notice and this permission notice shall be included -** in all copies or substantial portions of the Materials. -** -** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. -*/ - -#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) -#define WIN32_LEAN_AND_MEAN 1 -#include <windows.h> -#endif - -#ifndef APIENTRY -#define APIENTRY -#endif -#ifndef APIENTRYP -#define APIENTRYP APIENTRY * -#endif -#ifndef GLAPI -#define GLAPI extern -#endif - -/*************************************************************/ - -/* Header file version number */ -/* wglext.h last updated 2007/02/09 */ -/* Current version at http://www.opengl.org/registry/ */ -#define WGL_WGLEXT_VERSION 9 - -#ifndef WGL_ARB_buffer_region -#define WGL_FRONT_COLOR_BUFFER_BIT_ARB 0x00000001 -#define WGL_BACK_COLOR_BUFFER_BIT_ARB 0x00000002 -#define WGL_DEPTH_BUFFER_BIT_ARB 0x00000004 -#define WGL_STENCIL_BUFFER_BIT_ARB 0x00000008 -#endif - -#ifndef WGL_ARB_multisample -#define WGL_SAMPLE_BUFFERS_ARB 0x2041 -#define WGL_SAMPLES_ARB 0x2042 -#endif - -#ifndef WGL_ARB_extensions_string -#endif - -#ifndef WGL_ARB_pixel_format -#define WGL_NUMBER_PIXEL_FORMATS_ARB 0x2000 -#define WGL_DRAW_TO_WINDOW_ARB 0x2001 -#define WGL_DRAW_TO_BITMAP_ARB 0x2002 -#define WGL_ACCELERATION_ARB 0x2003 -#define WGL_NEED_PALETTE_ARB 0x2004 -#define WGL_NEED_SYSTEM_PALETTE_ARB 0x2005 -#define WGL_SWAP_LAYER_BUFFERS_ARB 0x2006 -#define WGL_SWAP_METHOD_ARB 0x2007 -#define WGL_NUMBER_OVERLAYS_ARB 0x2008 -#define WGL_NUMBER_UNDERLAYS_ARB 0x2009 -#define WGL_TRANSPARENT_ARB 0x200A -#define WGL_TRANSPARENT_RED_VALUE_ARB 0x2037 -#define WGL_TRANSPARENT_GREEN_VALUE_ARB 0x2038 -#define WGL_TRANSPARENT_BLUE_VALUE_ARB 0x2039 -#define WGL_TRANSPARENT_ALPHA_VALUE_ARB 0x203A -#define WGL_TRANSPARENT_INDEX_VALUE_ARB 0x203B -#define WGL_SHARE_DEPTH_ARB 0x200C -#define WGL_SHARE_STENCIL_ARB 0x200D -#define WGL_SHARE_ACCUM_ARB 0x200E -#define WGL_SUPPORT_GDI_ARB 0x200F -#define WGL_SUPPORT_OPENGL_ARB 0x2010 -#define WGL_DOUBLE_BUFFER_ARB 0x2011 -#define WGL_STEREO_ARB 0x2012 -#define WGL_PIXEL_TYPE_ARB 0x2013 -#define WGL_COLOR_BITS_ARB 0x2014 -#define WGL_RED_BITS_ARB 0x2015 -#define WGL_RED_SHIFT_ARB 0x2016 -#define WGL_GREEN_BITS_ARB 0x2017 -#define WGL_GREEN_SHIFT_ARB 0x2018 -#define WGL_BLUE_BITS_ARB 0x2019 -#define WGL_BLUE_SHIFT_ARB 0x201A -#define WGL_ALPHA_BITS_ARB 0x201B -#define WGL_ALPHA_SHIFT_ARB 0x201C -#define WGL_ACCUM_BITS_ARB 0x201D -#define WGL_ACCUM_RED_BITS_ARB 0x201E -#define WGL_ACCUM_GREEN_BITS_ARB 0x201F -#define WGL_ACCUM_BLUE_BITS_ARB 0x2020 -#define WGL_ACCUM_ALPHA_BITS_ARB 0x2021 -#define WGL_DEPTH_BITS_ARB 0x2022 -#define WGL_STENCIL_BITS_ARB 0x2023 -#define WGL_AUX_BUFFERS_ARB 0x2024 -#define WGL_NO_ACCELERATION_ARB 0x2025 -#define WGL_GENERIC_ACCELERATION_ARB 0x2026 -#define WGL_FULL_ACCELERATION_ARB 0x2027 -#define WGL_SWAP_EXCHANGE_ARB 0x2028 -#define WGL_SWAP_COPY_ARB 0x2029 -#define WGL_SWAP_UNDEFINED_ARB 0x202A -#define WGL_TYPE_RGBA_ARB 0x202B -#define WGL_TYPE_COLORINDEX_ARB 0x202C -#endif - -#ifndef WGL_ARB_make_current_read -#define ERROR_INVALID_PIXEL_TYPE_ARB 0x2043 -#define ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB 0x2054 -#endif - -#ifndef WGL_ARB_pbuffer -#define WGL_DRAW_TO_PBUFFER_ARB 0x202D -#define WGL_MAX_PBUFFER_PIXELS_ARB 0x202E -#define WGL_MAX_PBUFFER_WIDTH_ARB 0x202F -#define WGL_MAX_PBUFFER_HEIGHT_ARB 0x2030 -#define WGL_PBUFFER_LARGEST_ARB 0x2033 -#define WGL_PBUFFER_WIDTH_ARB 0x2034 -#define WGL_PBUFFER_HEIGHT_ARB 0x2035 -#define WGL_PBUFFER_LOST_ARB 0x2036 -#endif - -#ifndef WGL_ARB_render_texture -#define WGL_BIND_TO_TEXTURE_RGB_ARB 0x2070 -#define WGL_BIND_TO_TEXTURE_RGBA_ARB 0x2071 -#define WGL_TEXTURE_FORMAT_ARB 0x2072 -#define WGL_TEXTURE_TARGET_ARB 0x2073 -#define WGL_MIPMAP_TEXTURE_ARB 0x2074 -#define WGL_TEXTURE_RGB_ARB 0x2075 -#define WGL_TEXTURE_RGBA_ARB 0x2076 -#define WGL_NO_TEXTURE_ARB 0x2077 -#define WGL_TEXTURE_CUBE_MAP_ARB 0x2078 -#define WGL_TEXTURE_1D_ARB 0x2079 -#define WGL_TEXTURE_2D_ARB 0x207A -#define WGL_MIPMAP_LEVEL_ARB 0x207B -#define WGL_CUBE_MAP_FACE_ARB 0x207C -#define WGL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x207D -#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x207E -#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x207F -#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x2080 -#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x2081 -#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x2082 -#define WGL_FRONT_LEFT_ARB 0x2083 -#define WGL_FRONT_RIGHT_ARB 0x2084 -#define WGL_BACK_LEFT_ARB 0x2085 -#define WGL_BACK_RIGHT_ARB 0x2086 -#define WGL_AUX0_ARB 0x2087 -#define WGL_AUX1_ARB 0x2088 -#define WGL_AUX2_ARB 0x2089 -#define WGL_AUX3_ARB 0x208A -#define WGL_AUX4_ARB 0x208B -#define WGL_AUX5_ARB 0x208C -#define WGL_AUX6_ARB 0x208D -#define WGL_AUX7_ARB 0x208E -#define WGL_AUX8_ARB 0x208F -#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 - -#ifndef WGL_EXT_pixel_format -#define WGL_NUMBER_PIXEL_FORMATS_EXT 0x2000 -#define WGL_DRAW_TO_WINDOW_EXT 0x2001 -#define WGL_DRAW_TO_BITMAP_EXT 0x2002 -#define WGL_ACCELERATION_EXT 0x2003 -#define WGL_NEED_PALETTE_EXT 0x2004 -#define WGL_NEED_SYSTEM_PALETTE_EXT 0x2005 -#define WGL_SWAP_LAYER_BUFFERS_EXT 0x2006 -#define WGL_SWAP_METHOD_EXT 0x2007 -#define WGL_NUMBER_OVERLAYS_EXT 0x2008 -#define WGL_NUMBER_UNDERLAYS_EXT 0x2009 -#define WGL_TRANSPARENT_EXT 0x200A -#define WGL_TRANSPARENT_VALUE_EXT 0x200B -#define WGL_SHARE_DEPTH_EXT 0x200C -#define WGL_SHARE_STENCIL_EXT 0x200D -#define WGL_SHARE_ACCUM_EXT 0x200E -#define WGL_SUPPORT_GDI_EXT 0x200F -#define WGL_SUPPORT_OPENGL_EXT 0x2010 -#define WGL_DOUBLE_BUFFER_EXT 0x2011 -#define WGL_STEREO_EXT 0x2012 -#define WGL_PIXEL_TYPE_EXT 0x2013 -#define WGL_COLOR_BITS_EXT 0x2014 -#define WGL_RED_BITS_EXT 0x2015 -#define WGL_RED_SHIFT_EXT 0x2016 -#define WGL_GREEN_BITS_EXT 0x2017 -#define WGL_GREEN_SHIFT_EXT 0x2018 -#define WGL_BLUE_BITS_EXT 0x2019 -#define WGL_BLUE_SHIFT_EXT 0x201A -#define WGL_ALPHA_BITS_EXT 0x201B -#define WGL_ALPHA_SHIFT_EXT 0x201C -#define WGL_ACCUM_BITS_EXT 0x201D -#define WGL_ACCUM_RED_BITS_EXT 0x201E -#define WGL_ACCUM_GREEN_BITS_EXT 0x201F -#define WGL_ACCUM_BLUE_BITS_EXT 0x2020 -#define WGL_ACCUM_ALPHA_BITS_EXT 0x2021 -#define WGL_DEPTH_BITS_EXT 0x2022 -#define WGL_STENCIL_BITS_EXT 0x2023 -#define WGL_AUX_BUFFERS_EXT 0x2024 -#define WGL_NO_ACCELERATION_EXT 0x2025 -#define WGL_GENERIC_ACCELERATION_EXT 0x2026 -#define WGL_FULL_ACCELERATION_EXT 0x2027 -#define WGL_SWAP_EXCHANGE_EXT 0x2028 -#define WGL_SWAP_COPY_EXT 0x2029 -#define WGL_SWAP_UNDEFINED_EXT 0x202A -#define WGL_TYPE_RGBA_EXT 0x202B -#define WGL_TYPE_COLORINDEX_EXT 0x202C -#endif - -#ifndef WGL_EXT_pbuffer -#define WGL_DRAW_TO_PBUFFER_EXT 0x202D -#define WGL_MAX_PBUFFER_PIXELS_EXT 0x202E -#define WGL_MAX_PBUFFER_WIDTH_EXT 0x202F -#define WGL_MAX_PBUFFER_HEIGHT_EXT 0x2030 -#define WGL_OPTIMAL_PBUFFER_WIDTH_EXT 0x2031 -#define WGL_OPTIMAL_PBUFFER_HEIGHT_EXT 0x2032 -#define WGL_PBUFFER_LARGEST_EXT 0x2033 -#define WGL_PBUFFER_WIDTH_EXT 0x2034 -#define WGL_PBUFFER_HEIGHT_EXT 0x2035 -#endif - -#ifndef WGL_EXT_depth_float -#define WGL_DEPTH_FLOAT_EXT 0x2040 -#endif - -#ifndef WGL_3DFX_multisample -#define WGL_SAMPLE_BUFFERS_3DFX 0x2060 -#define WGL_SAMPLES_3DFX 0x2061 -#endif - -#ifndef WGL_EXT_multisample -#define WGL_SAMPLE_BUFFERS_EXT 0x2041 -#define WGL_SAMPLES_EXT 0x2042 -#endif - -#ifndef WGL_I3D_digital_video_control -#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_FRAMEBUFFER_I3D 0x2050 -#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_VALUE_I3D 0x2051 -#define WGL_DIGITAL_VIDEO_CURSOR_INCLUDED_I3D 0x2052 -#define WGL_DIGITAL_VIDEO_GAMMA_CORRECTED_I3D 0x2053 -#endif - -#ifndef WGL_I3D_gamma -#define WGL_GAMMA_TABLE_SIZE_I3D 0x204E -#define WGL_GAMMA_EXCLUDE_DESKTOP_I3D 0x204F -#endif - -#ifndef WGL_I3D_genlock -#define WGL_GENLOCK_SOURCE_MULTIVIEW_I3D 0x2044 -#define WGL_GENLOCK_SOURCE_EXTENAL_SYNC_I3D 0x2045 -#define WGL_GENLOCK_SOURCE_EXTENAL_FIELD_I3D 0x2046 -#define WGL_GENLOCK_SOURCE_EXTENAL_TTL_I3D 0x2047 -#define WGL_GENLOCK_SOURCE_DIGITAL_SYNC_I3D 0x2048 -#define WGL_GENLOCK_SOURCE_DIGITAL_FIELD_I3D 0x2049 -#define WGL_GENLOCK_SOURCE_EDGE_FALLING_I3D 0x204A -#define WGL_GENLOCK_SOURCE_EDGE_RISING_I3D 0x204B -#define WGL_GENLOCK_SOURCE_EDGE_BOTH_I3D 0x204C -#endif - -#ifndef WGL_I3D_image_buffer -#define WGL_IMAGE_BUFFER_MIN_ACCESS_I3D 0x00000001 -#define WGL_IMAGE_BUFFER_LOCK_I3D 0x00000002 -#endif - -#ifndef WGL_I3D_swap_frame_lock -#endif - -#ifndef WGL_NV_render_depth_texture -#define WGL_BIND_TO_TEXTURE_DEPTH_NV 0x20A3 -#define WGL_BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV 0x20A4 -#define WGL_DEPTH_TEXTURE_FORMAT_NV 0x20A5 -#define WGL_TEXTURE_DEPTH_COMPONENT_NV 0x20A6 -#define WGL_DEPTH_COMPONENT_NV 0x20A7 -#endif - -#ifndef WGL_NV_render_texture_rectangle -#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV 0x20A0 -#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV 0x20A1 -#define WGL_TEXTURE_RECTANGLE_NV 0x20A2 -#endif - -#ifndef WGL_ATI_pixel_format_float -#define WGL_TYPE_RGBA_FLOAT_ATI 0x21A0 -#endif - -#ifndef WGL_NV_float_buffer -#define WGL_FLOAT_COMPONENTS_NV 0x20B0 -#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV 0x20B1 -#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV 0x20B2 -#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV 0x20B3 -#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV 0x20B4 -#define WGL_TEXTURE_FLOAT_R_NV 0x20B5 -#define WGL_TEXTURE_FLOAT_RG_NV 0x20B6 -#define WGL_TEXTURE_FLOAT_RGB_NV 0x20B7 -#define WGL_TEXTURE_FLOAT_RGBA_NV 0x20B8 -#endif - -#ifndef WGL_3DL_stereo_control -#define WGL_STEREO_EMITTER_ENABLE_3DL 0x2055 -#define WGL_STEREO_EMITTER_DISABLE_3DL 0x2056 -#define WGL_STEREO_POLARITY_NORMAL_3DL 0x2057 -#define WGL_STEREO_POLARITY_INVERT_3DL 0x2058 -#endif - -#ifndef WGL_EXT_pixel_format_packed_float -#define WGL_TYPE_RGBA_UNSIGNED_FLOAT_EXT 0x20A8 -#endif - -#ifndef WGL_EXT_framebuffer_sRGB -#define WGL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20A9 -#endif - - -/*************************************************************/ - -#ifndef WGL_ARB_pbuffer -DECLARE_HANDLE(HPBUFFERARB); -#endif -#ifndef WGL_EXT_pbuffer -DECLARE_HANDLE(HPBUFFEREXT); -#endif - -#ifndef WGL_ARB_buffer_region -#define WGL_ARB_buffer_region 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern HANDLE WINAPI wglCreateBufferRegionARB (HDC, int, UINT); -extern VOID WINAPI wglDeleteBufferRegionARB (HANDLE); -extern BOOL WINAPI wglSaveBufferRegionARB (HANDLE, int, int, int, int); -extern BOOL WINAPI wglRestoreBufferRegionARB (HANDLE, int, int, int, int, int, int); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef HANDLE (WINAPI * PFNWGLCREATEBUFFERREGIONARBPROC) (HDC hDC, int iLayerPlane, UINT uType); -typedef VOID (WINAPI * PFNWGLDELETEBUFFERREGIONARBPROC) (HANDLE hRegion); -typedef BOOL (WINAPI * PFNWGLSAVEBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height); -typedef BOOL (WINAPI * PFNWGLRESTOREBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc); -#endif - -#ifndef WGL_ARB_multisample -#define WGL_ARB_multisample 1 -#endif - -#ifndef WGL_ARB_extensions_string -#define WGL_ARB_extensions_string 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern const char * WINAPI wglGetExtensionsStringARB (HDC); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef const char * (WINAPI * PFNWGLGETEXTENSIONSSTRINGARBPROC) (HDC hdc); -#endif - -#ifndef WGL_ARB_pixel_format -#define WGL_ARB_pixel_format 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern BOOL WINAPI wglGetPixelFormatAttribivARB (HDC, int, int, UINT, const int *, int *); -extern BOOL WINAPI wglGetPixelFormatAttribfvARB (HDC, int, int, UINT, const int *, FLOAT *); -extern BOOL WINAPI wglChoosePixelFormatARB (HDC, const int *, const FLOAT *, UINT, int *, UINT *); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, int *piValues); -typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, FLOAT *pfValues); -typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATARBPROC) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats); -#endif - -#ifndef WGL_ARB_make_current_read -#define WGL_ARB_make_current_read 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern BOOL WINAPI wglMakeContextCurrentARB (HDC, HDC, HGLRC); -extern HDC WINAPI wglGetCurrentReadDCARB (void); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef BOOL (WINAPI * PFNWGLMAKECONTEXTCURRENTARBPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc); -typedef HDC (WINAPI * PFNWGLGETCURRENTREADDCARBPROC) (void); -#endif - -#ifndef WGL_ARB_pbuffer -#define WGL_ARB_pbuffer 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern HPBUFFERARB WINAPI wglCreatePbufferARB (HDC, int, int, int, const int *); -extern HDC WINAPI wglGetPbufferDCARB (HPBUFFERARB); -extern int WINAPI wglReleasePbufferDCARB (HPBUFFERARB, HDC); -extern BOOL WINAPI wglDestroyPbufferARB (HPBUFFERARB); -extern BOOL WINAPI wglQueryPbufferARB (HPBUFFERARB, int, int *); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef HPBUFFERARB (WINAPI * PFNWGLCREATEPBUFFERARBPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList); -typedef HDC (WINAPI * PFNWGLGETPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer); -typedef int (WINAPI * PFNWGLRELEASEPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer, HDC hDC); -typedef BOOL (WINAPI * PFNWGLDESTROYPBUFFERARBPROC) (HPBUFFERARB hPbuffer); -typedef BOOL (WINAPI * PFNWGLQUERYPBUFFERARBPROC) (HPBUFFERARB hPbuffer, int iAttribute, int *piValue); -#endif - -#ifndef WGL_ARB_render_texture -#define WGL_ARB_render_texture 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern BOOL WINAPI wglBindTexImageARB (HPBUFFERARB, int); -extern BOOL WINAPI wglReleaseTexImageARB (HPBUFFERARB, int); -extern BOOL WINAPI wglSetPbufferAttribARB (HPBUFFERARB, const int *); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef BOOL (WINAPI * PFNWGLBINDTEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer); -typedef BOOL (WINAPI * PFNWGLRELEASETEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer); -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 -extern GLboolean WINAPI wglCreateDisplayColorTableEXT (GLushort); -extern GLboolean WINAPI wglLoadDisplayColorTableEXT (const GLushort *, GLuint); -extern GLboolean WINAPI wglBindDisplayColorTableEXT (GLushort); -extern VOID WINAPI wglDestroyDisplayColorTableEXT (GLushort); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef GLboolean (WINAPI * PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC) (GLushort id); -typedef GLboolean (WINAPI * PFNWGLLOADDISPLAYCOLORTABLEEXTPROC) (const GLushort *table, GLuint length); -typedef GLboolean (WINAPI * PFNWGLBINDDISPLAYCOLORTABLEEXTPROC) (GLushort id); -typedef VOID (WINAPI * PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC) (GLushort id); -#endif - -#ifndef WGL_EXT_extensions_string -#define WGL_EXT_extensions_string 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern const char * WINAPI wglGetExtensionsStringEXT (void); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef const char * (WINAPI * PFNWGLGETEXTENSIONSSTRINGEXTPROC) (void); -#endif - -#ifndef WGL_EXT_make_current_read -#define WGL_EXT_make_current_read 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern BOOL WINAPI wglMakeContextCurrentEXT (HDC, HDC, HGLRC); -extern HDC WINAPI wglGetCurrentReadDCEXT (void); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef BOOL (WINAPI * PFNWGLMAKECONTEXTCURRENTEXTPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc); -typedef HDC (WINAPI * PFNWGLGETCURRENTREADDCEXTPROC) (void); -#endif - -#ifndef WGL_EXT_pbuffer -#define WGL_EXT_pbuffer 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern HPBUFFEREXT WINAPI wglCreatePbufferEXT (HDC, int, int, int, const int *); -extern HDC WINAPI wglGetPbufferDCEXT (HPBUFFEREXT); -extern int WINAPI wglReleasePbufferDCEXT (HPBUFFEREXT, HDC); -extern BOOL WINAPI wglDestroyPbufferEXT (HPBUFFEREXT); -extern BOOL WINAPI wglQueryPbufferEXT (HPBUFFEREXT, int, int *); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef HPBUFFEREXT (WINAPI * PFNWGLCREATEPBUFFEREXTPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList); -typedef HDC (WINAPI * PFNWGLGETPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer); -typedef int (WINAPI * PFNWGLRELEASEPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer, HDC hDC); -typedef BOOL (WINAPI * PFNWGLDESTROYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer); -typedef BOOL (WINAPI * PFNWGLQUERYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer, int iAttribute, int *piValue); -#endif - -#ifndef WGL_EXT_pixel_format -#define WGL_EXT_pixel_format 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern BOOL WINAPI wglGetPixelFormatAttribivEXT (HDC, int, int, UINT, int *, int *); -extern BOOL WINAPI wglGetPixelFormatAttribfvEXT (HDC, int, int, UINT, int *, FLOAT *); -extern BOOL WINAPI wglChoosePixelFormatEXT (HDC, const int *, const FLOAT *, UINT, int *, UINT *); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, int *piValues); -typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, FLOAT *pfValues); -typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATEXTPROC) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats); -#endif - -#ifndef WGL_EXT_swap_control -#define WGL_EXT_swap_control 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern BOOL WINAPI wglSwapIntervalEXT (int); -extern int WINAPI wglGetSwapIntervalEXT (void); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef BOOL (WINAPI * PFNWGLSWAPINTERVALEXTPROC) (int interval); -typedef int (WINAPI * PFNWGLGETSWAPINTERVALEXTPROC) (void); -#endif - -#ifndef WGL_EXT_depth_float -#define WGL_EXT_depth_float 1 -#endif - -#ifndef WGL_NV_vertex_array_range -#define WGL_NV_vertex_array_range 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern void* WINAPI wglAllocateMemoryNV (GLsizei, GLfloat, GLfloat, GLfloat); -extern void WINAPI wglFreeMemoryNV (void *); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef void* (WINAPI * PFNWGLALLOCATEMEMORYNVPROC) (GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority); -typedef void (WINAPI * PFNWGLFREEMEMORYNVPROC) (void *pointer); -#endif - -#ifndef WGL_3DFX_multisample -#define WGL_3DFX_multisample 1 -#endif - -#ifndef WGL_EXT_multisample -#define WGL_EXT_multisample 1 -#endif - -#ifndef WGL_OML_sync_control -#define WGL_OML_sync_control 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern BOOL WINAPI wglGetSyncValuesOML (HDC, INT64 *, INT64 *, INT64 *); -extern BOOL WINAPI wglGetMscRateOML (HDC, INT32 *, INT32 *); -extern INT64 WINAPI wglSwapBuffersMscOML (HDC, INT64, INT64, INT64); -extern INT64 WINAPI wglSwapLayerBuffersMscOML (HDC, int, INT64, INT64, INT64); -extern BOOL WINAPI wglWaitForMscOML (HDC, INT64, INT64, INT64, INT64 *, INT64 *, INT64 *); -extern BOOL WINAPI wglWaitForSbcOML (HDC, INT64, INT64 *, INT64 *, INT64 *); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef BOOL (WINAPI * PFNWGLGETSYNCVALUESOMLPROC) (HDC hdc, INT64 *ust, INT64 *msc, INT64 *sbc); -typedef BOOL (WINAPI * PFNWGLGETMSCRATEOMLPROC) (HDC hdc, INT32 *numerator, INT32 *denominator); -typedef INT64 (WINAPI * PFNWGLSWAPBUFFERSMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder); -typedef INT64 (WINAPI * PFNWGLSWAPLAYERBUFFERSMSCOMLPROC) (HDC hdc, int fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder); -typedef BOOL (WINAPI * PFNWGLWAITFORMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64 *ust, INT64 *msc, INT64 *sbc); -typedef BOOL (WINAPI * PFNWGLWAITFORSBCOMLPROC) (HDC hdc, INT64 target_sbc, INT64 *ust, INT64 *msc, INT64 *sbc); -#endif - -#ifndef WGL_I3D_digital_video_control -#define WGL_I3D_digital_video_control 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern BOOL WINAPI wglGetDigitalVideoParametersI3D (HDC, int, int *); -extern BOOL WINAPI wglSetDigitalVideoParametersI3D (HDC, int, const int *); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef BOOL (WINAPI * PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int *piValue); -typedef BOOL (WINAPI * PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int *piValue); -#endif - -#ifndef WGL_I3D_gamma -#define WGL_I3D_gamma 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern BOOL WINAPI wglGetGammaTableParametersI3D (HDC, int, int *); -extern BOOL WINAPI wglSetGammaTableParametersI3D (HDC, int, const int *); -extern BOOL WINAPI wglGetGammaTableI3D (HDC, int, USHORT *, USHORT *, USHORT *); -extern BOOL WINAPI wglSetGammaTableI3D (HDC, int, const USHORT *, const USHORT *, const USHORT *); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef BOOL (WINAPI * PFNWGLGETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int *piValue); -typedef BOOL (WINAPI * PFNWGLSETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int *piValue); -typedef BOOL (WINAPI * PFNWGLGETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, USHORT *puRed, USHORT *puGreen, USHORT *puBlue); -typedef BOOL (WINAPI * PFNWGLSETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, const USHORT *puRed, const USHORT *puGreen, const USHORT *puBlue); -#endif - -#ifndef WGL_I3D_genlock -#define WGL_I3D_genlock 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern BOOL WINAPI wglEnableGenlockI3D (HDC); -extern BOOL WINAPI wglDisableGenlockI3D (HDC); -extern BOOL WINAPI wglIsEnabledGenlockI3D (HDC, BOOL *); -extern BOOL WINAPI wglGenlockSourceI3D (HDC, UINT); -extern BOOL WINAPI wglGetGenlockSourceI3D (HDC, UINT *); -extern BOOL WINAPI wglGenlockSourceEdgeI3D (HDC, UINT); -extern BOOL WINAPI wglGetGenlockSourceEdgeI3D (HDC, UINT *); -extern BOOL WINAPI wglGenlockSampleRateI3D (HDC, UINT); -extern BOOL WINAPI wglGetGenlockSampleRateI3D (HDC, UINT *); -extern BOOL WINAPI wglGenlockSourceDelayI3D (HDC, UINT); -extern BOOL WINAPI wglGetGenlockSourceDelayI3D (HDC, UINT *); -extern BOOL WINAPI wglQueryGenlockMaxSourceDelayI3D (HDC, UINT *, UINT *); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef BOOL (WINAPI * PFNWGLENABLEGENLOCKI3DPROC) (HDC hDC); -typedef BOOL (WINAPI * PFNWGLDISABLEGENLOCKI3DPROC) (HDC hDC); -typedef BOOL (WINAPI * PFNWGLISENABLEDGENLOCKI3DPROC) (HDC hDC, BOOL *pFlag); -typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEI3DPROC) (HDC hDC, UINT uSource); -typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEI3DPROC) (HDC hDC, UINT *uSource); -typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT uEdge); -typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT *uEdge); -typedef BOOL (WINAPI * PFNWGLGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT uRate); -typedef BOOL (WINAPI * PFNWGLGETGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT *uRate); -typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT uDelay); -typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT *uDelay); -typedef BOOL (WINAPI * PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC) (HDC hDC, UINT *uMaxLineDelay, UINT *uMaxPixelDelay); -#endif - -#ifndef WGL_I3D_image_buffer -#define WGL_I3D_image_buffer 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern LPVOID WINAPI wglCreateImageBufferI3D (HDC, DWORD, UINT); -extern BOOL WINAPI wglDestroyImageBufferI3D (HDC, LPVOID); -extern BOOL WINAPI wglAssociateImageBufferEventsI3D (HDC, const HANDLE *, const LPVOID *, const DWORD *, UINT); -extern BOOL WINAPI wglReleaseImageBufferEventsI3D (HDC, const LPVOID *, UINT); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef LPVOID (WINAPI * PFNWGLCREATEIMAGEBUFFERI3DPROC) (HDC hDC, DWORD dwSize, UINT uFlags); -typedef BOOL (WINAPI * PFNWGLDESTROYIMAGEBUFFERI3DPROC) (HDC hDC, LPVOID pAddress); -typedef BOOL (WINAPI * PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC) (HDC hDC, const HANDLE *pEvent, const LPVOID *pAddress, const DWORD *pSize, UINT count); -typedef BOOL (WINAPI * PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC) (HDC hDC, const LPVOID *pAddress, UINT count); -#endif - -#ifndef WGL_I3D_swap_frame_lock -#define WGL_I3D_swap_frame_lock 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern BOOL WINAPI wglEnableFrameLockI3D (void); -extern BOOL WINAPI wglDisableFrameLockI3D (void); -extern BOOL WINAPI wglIsEnabledFrameLockI3D (BOOL *); -extern BOOL WINAPI wglQueryFrameLockMasterI3D (BOOL *); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef BOOL (WINAPI * PFNWGLENABLEFRAMELOCKI3DPROC) (void); -typedef BOOL (WINAPI * PFNWGLDISABLEFRAMELOCKI3DPROC) (void); -typedef BOOL (WINAPI * PFNWGLISENABLEDFRAMELOCKI3DPROC) (BOOL *pFlag); -typedef BOOL (WINAPI * PFNWGLQUERYFRAMELOCKMASTERI3DPROC) (BOOL *pFlag); -#endif - -#ifndef WGL_I3D_swap_frame_usage -#define WGL_I3D_swap_frame_usage 1 -#ifdef WGL_WGLEXT_PROTOTYPES -extern BOOL WINAPI wglGetFrameUsageI3D (float *); -extern BOOL WINAPI wglBeginFrameTrackingI3D (void); -extern BOOL WINAPI wglEndFrameTrackingI3D (void); -extern BOOL WINAPI wglQueryFrameTrackingI3D (DWORD *, DWORD *, float *); -#endif /* WGL_WGLEXT_PROTOTYPES */ -typedef BOOL (WINAPI * PFNWGLGETFRAMEUSAGEI3DPROC) (float *pUsage); -typedef BOOL (WINAPI * PFNWGLBEGINFRAMETRACKINGI3DPROC) (void); -typedef BOOL (WINAPI * PFNWGLENDFRAMETRACKINGI3DPROC) (void); -typedef BOOL (WINAPI * PFNWGLQUERYFRAMETRACKINGI3DPROC) (DWORD *pFrameCount, DWORD *pMissedFrames, float *pLastMissedUsage); -#endif - -#ifndef WGL_ATI_pixel_format_float -#define WGL_ATI_pixel_format_float 1 -#endif - -#ifndef WGL_NV_float_buffer -#define WGL_NV_float_buffer 1 -#endif - -#ifndef WGL_EXT_pixel_format_packed_float -#define WGL_EXT_pixel_format_packed_float 1 -#endif - -#ifndef WGL_EXT_framebuffer_sRGB -#define WGL_EXT_framebuffer_sRGB 1 -#endif - - -#ifdef __cplusplus -} -#endif - -#endif |