X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fpixelformat.cpp;h=320fef1f84dd16e447b106df64f1069275c55b89;hb=21eaad595acb574d81bad5140d24b570da4f9785;hp=3fdf6942c63cc606c04babdf54316330878ec1f9;hpb=49323eea600fb989d4181ccfd437ee12722ae733;p=libs%2Fgl.git diff --git a/source/pixelformat.cpp b/source/pixelformat.cpp index 3fdf6942..320fef1f 100644 --- a/source/pixelformat.cpp +++ b/source/pixelformat.cpp @@ -14,6 +14,10 @@ void operator>>(const LexicalConverter &conv, PixelFormat &fmt) fmt = STENCIL_INDEX; else if(conv.get()=="DEPTH_COMPONENT") fmt = DEPTH_COMPONENT; + else if(conv.get()=="RED") + fmt = RED; + else if(conv.get()=="RG") + fmt = RG; else if(conv.get()=="RGB") fmt = RGB; else if(conv.get()=="RGBA") @@ -76,6 +80,12 @@ PixelFormat get_base_pixelformat(PixelFormat pf) { switch(pf) { + case R8: + case R16F: + case R32F: return RED; + case RG8: + case RG16F: + case RG32F: return RG; case RGB8: case RGB16F: case RGB32F: @@ -87,13 +97,9 @@ PixelFormat get_base_pixelformat(PixelFormat pf) case SRGB_ALPHA: case SRGB8_ALPHA8: return RGBA; case LUMINANCE8: - case LUMINANCE16F: - case LUMINANCE32F: case SLUMINANCE: case SLUMINANCE8: return LUMINANCE; case LUMINANCE_ALPHA8: - case LUMINANCE_ALPHA16F: - case LUMINANCE_ALPHA32F: case SLUMINANCE_ALPHA: case SLUMINANCE8_ALPHA8: return LUMINANCE_ALPHA; case DEPTH_COMPONENT16: @@ -107,6 +113,8 @@ PixelFormat get_sized_pixelformat(PixelFormat pf) { switch(pf) { + case RED: return R8; + case RG: return RG8; case RGB: return RGB8; case RGBA: return RGBA8; case SRGB: return SRGB8; @@ -146,9 +154,11 @@ unsigned get_component_count(PixelFormat pf) { case STENCIL_INDEX: case DEPTH_COMPONENT: + case RED: case LUMINANCE: case SLUMINANCE: return 1; + case RG: case LUMINANCE_ALPHA: case SLUMINANCE_ALPHA: return 2; @@ -167,42 +177,62 @@ unsigned get_component_size(PixelFormat pf) { switch(pf) { + case R8: + case RG8: + case RGB8: + case RGBA8: + case SRGB8: + case SRGB8_ALPHA8: + case LUMINANCE8: + case LUMINANCE8_ALPHA8: + case SLUMINANCE8: + case SLUMINANCE8_ALPHA8: + return 1; + case R16F: + case RG16F: case RGB16F: case RGBA16F: - case LUMINANCE16F: - case LUMINANCE_ALPHA16F: case DEPTH_COMPONENT16: return 2; case DEPTH_COMPONENT24: return 3; + case R32F: + case RG32F: case RGB32F: case RGBA32F: - case LUMINANCE32F: - case LUMINANCE_ALPHA32F: case DEPTH_COMPONENT32: return 4; default: - return 1; + return 0; } } unsigned get_pixel_size(PixelFormat pf) { - return get_component_count(pf)*get_component_size(pf); + return get_component_count(pf)*max(get_component_size(pf), 1U); } void require_pixelformat(PixelFormat pf) { switch(pf) { + case RED: + case R8: + case RG: + case RG8: + { static Require _req(ARB_texture_rg); } + break; + case R16F: + case R32F: + case RG16F: + case RG32F: + { static Require _req(ARB_texture_rg); } + { static Require _req(ARB_texture_float); } + break; case RGB16F: case RGB32F: case RGBA16F: case RGBA32F: - case LUMINANCE16F: - case LUMINANCE32F: - case LUMINANCE_ALPHA16F: - case LUMINANCE_ALPHA32F: { static Require _req(ARB_texture_float); } break; case SRGB: