Exemplo n.º 1
0
osg::Image* doColourSpaceConversion(ColourSpaceOperation op, osg::Image* image, osg::Vec4& colour)
{
    switch(op)
    {
        case (MODULATE_ALPHA_BY_LUMINANCE):
        {
            std::cout<<"doing conversion MODULATE_ALPHA_BY_LUMINANCE"<<std::endl;
            osg::modifyImage(image,ModulateAlphaByLuminanceOperator());
            return image;
        }
        case (MODULATE_ALPHA_BY_COLOUR):
        {
            std::cout<<"doing conversion MODULATE_ALPHA_BY_COLOUR"<<std::endl;
            osg::modifyImage(image,ModulateAlphaByColourOperator(colour));
            return image;
        }
        case (REPLACE_ALPHA_WITH_LUMINANCE):
        {
            std::cout<<"doing conversion REPLACE_ALPHA_WITH_LUMINANCE"<<std::endl;
            osg::modifyImage(image,ReplaceAlphaWithLuminanceOperator());
            return image;
        }
        case (REPLACE_RGB_WITH_LUMINANCE):
        {
            std::cout<<"doing conversion REPLACE_ALPHA_WITH_LUMINANCE"<<std::endl;
            osg::Image* newImage = new osg::Image;
            newImage->allocateImage(image->s(), image->t(), image->r(), GL_LUMINANCE, image->getDataType());
            osg::copyImage(image, 0, 0, 0, image->s(), image->t(), image->r(),
                        newImage, 0, 0, 0, false);
            return newImage;
        }
        default:
            return image;
    }
}
Exemplo n.º 2
0
osg::Image* colorSpaceConversion(ColorSpaceOperation op, osg::Image* image, const osg::Vec4& colour)
{
    GLenum requiredPixelFormat = image->getPixelFormat();
    switch(op)
    {
        case (MODULATE_ALPHA_BY_LUMINANCE):
        case (MODULATE_ALPHA_BY_COLOR):
        case (REPLACE_ALPHA_WITH_LUMINANCE):
            if (image->getPixelFormat()==GL_RGB || image->getPixelFormat()==GL_BGR) requiredPixelFormat = GL_RGBA;
            break;
        case (REPLACE_RGB_WITH_LUMINANCE):
            if (image->getPixelFormat()==GL_RGB || image->getPixelFormat()==GL_BGR) requiredPixelFormat = GL_LUMINANCE;
            break;
        default:
            break;
    }

    if (requiredPixelFormat!=image->getPixelFormat())
    {
        osg::Image* newImage = new osg::Image;
        newImage->allocateImage(image->s(), image->t(), image->r(), requiredPixelFormat, image->getDataType());
        osg::copyImage(image, 0, 0, 0, image->s(), image->t(), image->r(),
                    newImage, 0, 0, 0, false);

        image = newImage;
    }

    switch(op)
    {
        case (MODULATE_ALPHA_BY_LUMINANCE):
        {
            OSG_NOTICE<<"doing conversion MODULATE_ALPHA_BY_LUMINANCE"<<std::endl;
            osg::modifyImage(image, ModulateAlphaByLuminanceOperator());
            return image;
        }
        case (MODULATE_ALPHA_BY_COLOR):
        {
            OSG_NOTICE<<"doing conversion MODULATE_ALPHA_BY_COLOUR"<<std::endl;
            osg::modifyImage(image, ModulateAlphaByColorOperator(colour));
            return image;
        }
        case (REPLACE_ALPHA_WITH_LUMINANCE):
        {
            OSG_NOTICE<<"doing conversion REPLACE_ALPHA_WITH_LUMINANCE"<<std::endl;
            osg::modifyImage(image, ReplaceAlphaWithLuminanceOperator());
            return image;
        }
        case (REPLACE_RGB_WITH_LUMINANCE):
        {
            OSG_NOTICE<<"doing conversion REPLACE_RGB_WITH_LUMINANCE"<<std::endl;
            // no work here required to be done as it'll already be done by copyImage above.
            return image;
        }
        default:
            return image;
    }
}