# This .cfg file provides common options used among all GLU glue code
# generated for Jogl on all platforms.
Style ImplOnly
ImplPackage javax.media.opengl.glu
ImplJavaClass GLU
JavaOutputDir ../build/gensrc/classes
NativeOutputDir ../build/gensrc/native/jogl
HierarchicalNativeOutput false

EmitProcAddressTable true
ProcAddressTablePackage   com.sun.opengl.impl
ProcAddressTableClassName GLUProcAddressTable
GetProcAddressTableExpr   getGLUProcAddressTable()

# Pick up on-line OpenGL javadoc thanks to user cylab on javagaming.org forums
TagNativeBinding true

#
# Imports needed by all glue code
#
Import java.nio.*
Import javax.media.opengl.*
Import javax.media.opengl.glu.*
Import com.sun.opengl.impl.*

# GLU needs access to the GLUtesselatorImpl class for GLUtesselator
# and to the Mipmap class for scaling and mipmap generation
Import com.sun.opengl.impl.tessellator.GLUtessellatorImpl
Import com.sun.opengl.impl.error.Error
Import com.sun.opengl.impl.mipmap.Mipmap
Import com.sun.opengl.impl.registry.Registry
Import com.sun.opengl.util.*
Import java.security.*

# Custom Java code for GLU class
IncludeAs CustomJavaCode GLU glu-CustomJavaCode.java

CustomCCode /* Include the OpenGL GLU header */
CustomCCode #include <GL/glu.h>

# Raise GLException instead of RuntimeException in glue code
RuntimeExceptionType GLException

#
# Opaques and other directives for platform-independent routines
#

Opaque boolean GLboolean
Opaque boolean BOOL

#
# Don't output #defines of GLU version identifier strings as constants, 
# because we don't need them java-side. 
#
Ignore GLU_VERSION_.+

#
# Ignore the non-GLU functions 
#
Ignore gl[^u].+

#
# Ignore the non-GLU constants
#
Ignore GL[^U]?_.+

#
# Ignore the GLU extension constants, since we don't need them java-side
#
Ignore GLU_EXT_.+

# Javadoc for the GLU class
ClassJavadoc GLU /**
ClassJavadoc GLU  * Provides access to the OpenGL Utility Library (GLU). This library
ClassJavadoc GLU  * provides standard methods for setting up view volumes, building
ClassJavadoc GLU  * mipmaps and performing other common operations.  The GLU NURBS
ClassJavadoc GLU  * routines are not currently exposed.
ClassJavadoc GLU  * 
ClassJavadoc GLU  * <P>
ClassJavadoc GLU  *
ClassJavadoc GLU  * Notes from the Reference Implementation for this class:
ClassJavadoc GLU  * Thanks to the contributions of many individuals, this class is a
ClassJavadoc GLU  * pure Java port of SGI's original C sources. All of the projection,
ClassJavadoc GLU  * mipmap, scaling, and tessellation routines that are exposed are
ClassJavadoc GLU  * compatible with the GLU 1.3 specification. The GLU NURBS routines
ClassJavadoc GLU  * are not currently exposed.
ClassJavadoc GLU  */

#
# We ignore most of the function declarations in glu.h because we
# provide a pure Java implementation of most of GLU. Currently the
# only reason we generate glue code for this class is to provide a
# fallback path to the C code for the mipmap routines in case of bugs
# with the Java port (although it has been pretty thoroughly debugged
# at this point).
# 

#
# ------------------------
#    Utility routines
# ------------------------
#

# These are implemented by pure Java
Ignore gluCheckExtension
Ignore gluErrorString
Ignore gluGetString

#
# ------------------------
#         NURBS
# ------------------------
#

#
# !!!!!!!!!!!!! FIXME:
# Ignore these Nurbs things until we get other stuff working
#
Ignore gluBeginCurve
Ignore gluBeginSurface
Ignore gluBeginTrim
Ignore gluEndCurve
Ignore gluEndSurface
Ignore gluEndTrim
Ignore gluLoadSamplingMatrices
Ignore gluPwlCurve
Ignore gluNewNurbsRenderer
Ignore gluDeleteNurbsRenderer
Ignore gluNurbsProperty
Ignore gluGetNurbsProperty
Ignore gluNurbsCallback.*
Ignore gluNurbsCurve
Ignore gluNurbsSurface
Ignore GLU_NURB.+
Ignore GLU_.*PARAMETRIC.+
Ignore GLUnurbs

#
# ------------------------
#     Tesselators
# ------------------------
#

#
# Ignore these methods; we must manually implement their C and Java code
#
Ignore gluBeginPolygon
Ignore gluTessCallback
Ignore gluDeleteTess
Ignore gluEndPolygon
Ignore gluGetTessProperty
Ignore gluNewTess
Ignore gluNextContour
Ignore gluTessBeginContour
Ignore gluTessBeginPolygon
Ignore gluTessEndContour
Ignore gluTessEndPolygon
Ignore gluTessNormal
Ignore gluTessProperty
Ignore gluTessVertex
Ignore gluTessCallback.*
Ignore GLUtesselator

#
# ------------------------
#     Quadrics
# ------------------------
#
#
# !!!!!!!!!!!!! FIXME:
# Ignore these Quadric things until we get other stuff working
#
Ignore gluQuadricCallback.*

# Manually implement the GLU quadric functionality to mostly conform
# to the C APIs
Ignore GLUquadric
Ignore gluCylinder
Ignore gluDeleteQuadric
Ignore gluDisk
Ignore gluNewQuadric
Ignore gluPartialDisk
Ignore gluQuadricDrawStyle
Ignore gluQuadricNormals
Ignore gluQuadricOrientation
Ignore gluQuadricTexture
Ignore gluSphere

# Ignore a few of the projection/unprojection APIs altogether because
# their signatures aren't specified correctly in the header file
Ignore gluProject
Ignore gluUnProject
Ignore gluUnProject4

# Manually implement the rest of the projection / unprojection APIs
Ignore gluOrtho2D
Ignore gluPerspective
Ignore gluLookAt
Ignore gluPickMatrix





#
# Some functions that return native byte pointers or accept them as
# arguments should have them auto-converted to Java Strings
#
# ReturnsString gluGetString
# ReturnsString gluErrorString
# ArgumentIsString gluCheckExtension 0 1

#
# Some routines should only use the Java New IO package
#
#NIOOnly gluScaleImage
#NIOOnly gluBuild1DMipmaps
#NIOOnly gluBuild2DMipmaps
#NIOOnly gluBuild3DMipmaps
#NIOOnly gluBuild1DMipmapLevels
#NIOOnly gluBuild2DMipmapLevels
#NIOOnly gluBuild3DMipmapLevels

#
# ------------------------
#        Mipmaps
# ------------------------
#
# Ignore the C versions of the mipmap code in the public interface and
# use GKW's Java port instead. The bindings to the C entry points are
# still being left in for now, but only for debugging purposes and the
# intent is to remove them in a future release.

# Emit these entry points as private

AccessControl gluBuild1DMipmapLevels PRIVATE
AccessControl gluBuild1DMipmaps      PRIVATE
AccessControl gluBuild2DMipmapLevels PRIVATE
AccessControl gluBuild2DMipmaps      PRIVATE
AccessControl gluBuild3DMipmapLevels PRIVATE
AccessControl gluBuild3DMipmaps      PRIVATE
AccessControl gluScaleImage          PRIVATE

# Rename these methods in the implementing class

RenameJavaMethod gluBuild1DMipmapLevels gluBuild1DMipmapLevelsC
RenameJavaMethod gluBuild1DMipmaps      gluBuild1DMipmapsC
RenameJavaMethod gluBuild2DMipmapLevels gluBuild2DMipmapLevelsC
RenameJavaMethod gluBuild2DMipmaps      gluBuild2DMipmapsC
RenameJavaMethod gluBuild3DMipmapLevels gluBuild3DMipmapLevelsC
RenameJavaMethod gluBuild3DMipmaps      gluBuild3DMipmapsC
RenameJavaMethod gluScaleImage          gluScaleImageC