|
|
|
@ -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); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|