@ -103,14 +103,19 @@ public final class GLImageFormats {
public static GLImageFormat [ ] [ ] getFormatsForCaps ( EnumSet < Caps > caps ) {
GLImageFormat [ ] [ ] formatToGL = new GLImageFormat [ 2 ] [ Image . Format . values ( ) . length ] ;
int halfFloatFormat = GLExt . GL_HALF_FLOAT_ARB ;
if ( caps . contains ( Caps . OpenGLES20 ) ) {
halfFloatFormat = GLExt . GL_HALF_FLOAT_OES ;
}
// Core Profile Formats (supported by both OpenGL Core 3.3 and OpenGL ES 3.0+)
if ( caps . contains ( Caps . CoreProfile ) ) {
formatSwiz ( formatToGL , Format . Alpha8 , GL3 . GL_R8 , GL . GL_RED , GL . GL_UNSIGNED_BYTE ) ;
formatSwiz ( formatToGL , Format . Luminance8 , GL3 . GL_R8 , GL . GL_RED , GL . GL_UNSIGNED_BYTE ) ;
formatSwiz ( formatToGL , Format . Luminance8Alpha8 , GL3 . GL_RG8 , GL3 . GL_RG , GL . GL_UNSIGNED_BYTE ) ;
formatSwiz ( formatToGL , Format . Luminance16F , GL3 . GL_R16F , GL . GL_RED , GLExt . GL_HALF_FLOAT_ARB ) ;
formatSwiz ( formatToGL , Format . Luminance16F , GL3 . GL_R16F , GL . GL_RED , halfFloatFormat ) ;
formatSwiz ( formatToGL , Format . Luminance32F , GL3 . GL_R32F , GL . GL_RED , GL . GL_FLOAT ) ;
formatSwiz ( formatToGL , Format . Luminance16FAlpha16F , GL3 . GL_RG16F , GL3 . GL_RG , GLExt . GL_HALF_FLOAT_ARB ) ;
formatSwiz ( formatToGL , Format . Luminance16FAlpha16F , GL3 . GL_RG16F , GL3 . GL_RG , halfFloatFormat ) ;
formatSrgbSwiz ( formatToGL , Format . Luminance8 , GLExt . GL_SRGB8_EXT , GL . GL_RED , GL . GL_UNSIGNED_BYTE ) ;
formatSrgbSwiz ( formatToGL , Format . Luminance8Alpha8 , GLExt . GL_SRGB8_ALPHA8_EXT , GL3 . GL_RG , GL . GL_UNSIGNED_BYTE ) ;
@ -163,6 +168,11 @@ public final class GLImageFormats {
}
format ( formatToGL , Format . RGB8 , GLExt . GL_RGBA8 , GL . GL_RGB , GL . GL_UNSIGNED_BYTE ) ;
format ( formatToGL , Format . RGBA8 , GLExt . GL_RGBA8 , GL . GL_RGBA , GL . GL_UNSIGNED_BYTE ) ;
formatSwiz ( formatToGL , Format . BGR8 , GL2 . GL_RGB8 , GL2 . GL_RGB , GL . GL_UNSIGNED_BYTE ) ;
formatSwiz ( formatToGL , Format . ARGB8 , GLExt . GL_RGBA8 , GL2 . GL_RGBA , GL . GL_UNSIGNED_BYTE ) ;
formatSwiz ( formatToGL , Format . BGRA8 , GLExt . GL_RGBA8 , GL2 . GL_RGBA , GL . GL_UNSIGNED_BYTE ) ;
formatSwiz ( formatToGL , Format . ABGR8 , GLExt . GL_RGBA8 , GL . GL_RGBA , GL . GL_UNSIGNED_BYTE ) ;
} else {
// Actually, the internal format isn't used for OpenGL ES 2! This is the same as the above..
if ( ! caps . contains ( Caps . CoreProfile ) ) {
@ -182,25 +192,25 @@ public final class GLImageFormats {
if ( caps . contains ( Caps . FloatTexture ) ) {
if ( ! caps . contains ( Caps . CoreProfile ) ) {
format ( formatToGL , Format . Luminance16F , GLExt . GL_LUMINANCE16F_ARB , GL . GL_LUMINANCE , GLExt . GL_HALF_FLOAT_ARB ) ;
format ( formatToGL , Format . Luminance16F , GLExt . GL_LUMINANCE16F_ARB , GL . GL_LUMINANCE , halfFloatFormat ) ;
format ( formatToGL , Format . Luminance32F , GLExt . GL_LUMINANCE32F_ARB , GL . GL_LUMINANCE , GL . GL_FLOAT ) ;
format ( formatToGL , Format . Luminance16FAlpha16F , GLExt . GL_LUMINANCE_ALPHA16F_ARB , GL . GL_LUMINANCE_ALPHA , GLExt . GL_HALF_FLOAT_ARB ) ;
format ( formatToGL , Format . Luminance16FAlpha16F , GLExt . GL_LUMINANCE_ALPHA16F_ARB , GL . GL_LUMINANCE_ALPHA , halfFloatFormat ) ;
}
format ( formatToGL , Format . RGB16F , GLExt . GL_RGB16F_ARB , GL . GL_RGB , GLExt . GL_HALF_FLOAT_ARB ) ;
format ( formatToGL , Format . RGB16F , GLExt . GL_RGB16F_ARB , GL . GL_RGB , halfFloatFormat ) ;
format ( formatToGL , Format . RGB32F , GLExt . GL_RGB32F_ARB , GL . GL_RGB , GL . GL_FLOAT ) ;
format ( formatToGL , Format . RGBA16F , GLExt . GL_RGBA16F_ARB , GL . GL_RGBA , GLExt . GL_HALF_FLOAT_ARB ) ;
format ( formatToGL , Format . RGBA16F , GLExt . GL_RGBA16F_ARB , GL . GL_RGBA , halfFloatFormat ) ;
format ( formatToGL , Format . RGBA32F , GLExt . GL_RGBA32F_ARB , GL . GL_RGBA , GL . GL_FLOAT ) ;
}
if ( caps . contains ( Caps . PackedFloatTexture ) ) {
format ( formatToGL , Format . RGB111110F , GLExt . GL_R11F_G11F_B10F_EXT , GL . GL_RGB , GLExt . GL_UNSIGNED_INT_10F_11F_11F_REV_EXT ) ;
if ( caps . contains ( Caps . FloatTexture ) ) {
format ( formatToGL , Format . RGB16F_to_RGB111110F , GLExt . GL_R11F_G11F_B10F_EXT , GL . GL_RGB , GLExt . GL_HALF_FLOAT_ARB ) ;
format ( formatToGL , Format . RGB16F_to_RGB111110F , GLExt . GL_R11F_G11F_B10F_EXT , GL . GL_RGB , halfFloatFormat ) ;
}
}
if ( caps . contains ( Caps . SharedExponentTexture ) ) {
format ( formatToGL , Format . RGB9E5 , GLExt . GL_RGB9_E5_EXT , GL . GL_RGB , GLExt . GL_UNSIGNED_INT_5_9_9_9_REV_EXT ) ;
if ( caps . contains ( Caps . FloatTexture ) ) {
format ( formatToGL , Format . RGB16F_to_RGB9E5 , GLExt . GL_RGB9_E5_EXT , GL . GL_RGB , GLExt . GL_HALF_FLOAT_ARB ) ;
format ( formatToGL , Format . RGB16F_to_RGB9E5 , GLExt . GL_RGB9_E5_EXT , GL . GL_RGB , halfFloatFormat ) ;
}
}