X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fpixelformat.cpp;h=26600b33661fca3c7e73729702278f0aa4664feb;hb=798703e937da6b4bbbc4a33f6670ca6fa61e47c3;hp=836012f9d0c7cfd294e542bcbb0c10d3cc932c69;hpb=619aae12e01f25e79626a94c973927e5599e99a5;p=libs%2Fgl.git diff --git a/source/pixelformat.cpp b/source/pixelformat.cpp index 836012f9..26600b33 100644 --- a/source/pixelformat.cpp +++ b/source/pixelformat.cpp @@ -48,13 +48,27 @@ PixelFormat pixelformat_from_graphics(Graphics::PixelFormat pf) case Graphics::LUMINANCE: return LUMINANCE; case Graphics::LUMINANCE_ALPHA: return LUMINANCE_ALPHA; case Graphics::RGB: return RGB; + case Graphics::RGBX: case Graphics::RGBA: return RGBA; case Graphics::BGR: return BGR; + case Graphics::BGRX: case Graphics::BGRA: return BGRA; default: throw invalid_argument("pixelformat_from_graphics"); } } +PixelFormat storage_pixelformat_from_graphics(Graphics::PixelFormat pf) +{ + switch(pf) + { + case Graphics::RGBX: + case Graphics::BGR: + case Graphics::BGRX: return RGB; + case Graphics::BGRA: return RGBA; + default: return pixelformat_from_graphics(pf); + } +} + PixelFormat get_base_pixelformat(PixelFormat pf) { switch(pf) @@ -75,6 +89,31 @@ PixelFormat get_base_pixelformat(PixelFormat pf) } } +unsigned get_component_count(PixelFormat pf) +{ + switch(get_base_pixelformat(pf)) + { + case COLOR_INDEX: + case STENCIL_INDEX: + case DEPTH_COMPONENT: + case RED: + case GREEN: + case BLUE: + case LUMINANCE: + return 1; + case LUMINANCE_ALPHA: + return 2; + case RGB: + case BGR: + return 3; + case RGBA: + case BGRA: + return 4; + default: + throw invalid_argument("get_pixelformat_component_count"); + } +} + void require_pixelformat(PixelFormat pf) { switch(pf)