|
@@ -103,14 +103,19 @@ public final class GLImageFormats {
|
|
public static GLImageFormat[][] getFormatsForCaps(EnumSet<Caps> caps) {
|
|
public static GLImageFormat[][] getFormatsForCaps(EnumSet<Caps> caps) {
|
|
GLImageFormat[][] formatToGL = new GLImageFormat[2][Image.Format.values().length];
|
|
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+)
|
|
// Core Profile Formats (supported by both OpenGL Core 3.3 and OpenGL ES 3.0+)
|
|
if (caps.contains(Caps.CoreProfile)) {
|
|
if (caps.contains(Caps.CoreProfile)) {
|
|
formatSwiz(formatToGL, Format.Alpha8, GL3.GL_R8, GL.GL_RED, GL.GL_UNSIGNED_BYTE);
|
|
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.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.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.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.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);
|
|
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.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);
|
|
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 {
|
|
} else {
|
|
// Actually, the internal format isn't used for OpenGL ES 2! This is the same as the above..
|
|
// Actually, the internal format isn't used for OpenGL ES 2! This is the same as the above..
|
|
if (!caps.contains(Caps.CoreProfile)) {
|
|
if (!caps.contains(Caps.CoreProfile)) {
|
|
@@ -182,25 +192,25 @@ public final class GLImageFormats {
|
|
|
|
|
|
if (caps.contains(Caps.FloatTexture)) {
|
|
if (caps.contains(Caps.FloatTexture)) {
|
|
if (!caps.contains(Caps.CoreProfile)) {
|
|
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.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.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);
|
|
format(formatToGL, Format.RGBA32F, GLExt.GL_RGBA32F_ARB, GL.GL_RGBA, GL.GL_FLOAT);
|
|
}
|
|
}
|
|
if (caps.contains(Caps.PackedFloatTexture)) {
|
|
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);
|
|
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)) {
|
|
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)) {
|
|
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);
|
|
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)) {
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|