X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fpixelformat.cpp;h=e915e92fa61160908f8639828ffac60c89b893a7;hp=d866bcf8094b9f9d677ccea8c00bf36db8842cd7;hb=e19309340e90ee881e9cb2f8b7c33a5b89681aa6;hpb=8f373af3e375799dd739fe932bc697e8595756b4 diff --git a/source/pixelformat.cpp b/source/pixelformat.cpp index d866bcf8..e915e92f 100644 --- a/source/pixelformat.cpp +++ b/source/pixelformat.cpp @@ -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;