]> git.tdb.fi Git - libs/gl.git/blobdiff - source/pixelformat.cpp
Make extensions compatible with OpenGL ES
[libs/gl.git] / source / pixelformat.cpp
index d866bcf8094b9f9d677ccea8c00bf36db8842cd7..e915e92fa61160908f8639828ffac60c89b893a7 100644 (file)
@@ -113,7 +113,8 @@ PixelFormat get_unsized_pixelformat(PixelFormat pf)
        case SLUMINANCE8_ALPHA8: return SLUMINANCE_ALPHA;
        case DEPTH_COMPONENT16:
        case DEPTH_COMPONENT24:
-       case DEPTH_COMPONENT32: return DEPTH_COMPONENT;
+       case DEPTH_COMPONENT32:
+       case DEPTH_COMPONENT32F: return DEPTH_COMPONENT;
        default: return pf;
        }
 }
@@ -171,7 +172,7 @@ PixelFormat get_sized_pixelformat(PixelFormat pf, unsigned size)
                case RG: return RG32F;
                case RGB: return RGB32F;
                case RGBA: return RGBA32F;
-               case DEPTH_COMPONENT: return DEPTH_COMPONENT32;
+               case DEPTH_COMPONENT: return ARB_depth_buffer_float ? DEPTH_COMPONENT32F : DEPTH_COMPONENT32;
                default: throw invalid_argument("get_sized_pixelformat");
                }
        default:
@@ -248,6 +249,7 @@ unsigned get_component_size(PixelFormat pf)
        case RGB32F:
        case RGBA32F:
        case DEPTH_COMPONENT32:
+       case DEPTH_COMPONENT32F:
                return 4;
        default:
                return 0;
@@ -261,8 +263,17 @@ unsigned get_pixel_size(PixelFormat pf)
 
 void require_pixelformat(PixelFormat pf)
 {
+       /* TODO These checks are only accurate for textures.  On OpenGL ES some
+       formats are allowed for render buffers earlier than textures.  In particular
+       it's possible to create a 16-bit depth renderbuffer on OpenGL ES 2.0 but
+       depth textures are only available with 3.0 or the OES_depth_texture
+       extension.*/
        switch(pf)
        {
+       case RGB8:
+       case RGBA8:
+               { static Require _req(OES_required_internalformat); }
+               break;
        case RED:
        case R8:
        case RG:
@@ -297,10 +308,19 @@ void require_pixelformat(PixelFormat pf)
                { static Require _req(EXT_bgra); }
                break;
        case DEPTH_COMPONENT:
+               { static Require _req(ARB_depth_texture); }
+               break;
        case DEPTH_COMPONENT16:
        case DEPTH_COMPONENT24:
        case DEPTH_COMPONENT32:
                { static Require _req(ARB_depth_texture); }
+               { static Require _req(OES_required_internalformat); }
+               break;
+       case DEPTH_COMPONENT32F:
+               { static Require _req(ARB_depth_buffer_float); }
+               break;
+       case STENCIL_INDEX:
+               { static Require _req(OES_texture_stencil8); }
                break;
        default:
                break;