void ossimPlanetQtImage::convertToOssimImage()
{
   if(format() != QImage::Format_RGB32)
   {
      (*this) = convertToFormat(QImage::Format_RGB32);
   }

   ossim_uint32 w = width();
   ossim_uint32 h = height();
   ossim_uint32 area = w*h;
   const ossim_uint32* bitsPtr = (ossim_uint32*)bits();
   theImage = new ossimImageData(0,
                                 OSSIM_UINT8,
                                 3,
                                 w,
                                 h);
   theImage->initialize();
   
   ossim_uint8* outBufRed   = (ossim_uint8*)theImage->getBuf(0);
   ossim_uint8* outBufGreen = (ossim_uint8*)theImage->getBuf(1);
   ossim_uint8* outBufBlue  = (ossim_uint8*)theImage->getBuf(2);
                                 
   if(bitsPtr)
   {
      ossim_uint32 offset = 0;

      while(offset < area)
      {
         *outBufRed   = (ossim_uint8)(((*bitsPtr)&0x00ff0000)>>16);
         *outBufGreen = (ossim_uint8)(((*bitsPtr)&0x0000ff00)>>8);
         *outBufBlue  = (ossim_uint8)(((*bitsPtr)&0x000000ff));
         
         ++outBufRed;
         ++outBufGreen;
         ++outBufBlue;
         ++bitsPtr;
         ++offset;
      }
   }
   theImage->validate();
}
void Basic2DWindowOpenGLDisplayPlugin::customizeContext() {
#if defined(Q_OS_ANDROID)
    qreal dpi = getFullscreenTarget()->physicalDotsPerInch();
    _virtualPadPixelSize = dpi * VirtualPad::Manager::BASE_DIAMETER_PIXELS / VirtualPad::Manager::DPI;

    if (!_virtualPadStickTexture) {
        auto iconPath = PathUtils::resourcesPath() + "images/analog_stick.png";
        auto image = QImage(iconPath);
        if (image.format() != QImage::Format_ARGB32) {
            image = image.convertToFormat(QImage::Format_ARGB32);
        }
        if ((image.width() > 0) && (image.height() > 0)) {
            image = image.scaled(_virtualPadPixelSize, _virtualPadPixelSize, Qt::KeepAspectRatio);

            _virtualPadStickTexture = gpu::Texture::createStrict(
                    gpu::Element(gpu::VEC4, gpu::NUINT8, gpu::RGBA),
                    image.width(), image.height(),
                    gpu::Texture::MAX_NUM_MIPS,
                    gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_MIP_LINEAR));
            _virtualPadStickTexture->setSource("virtualPad stick");
            auto usage = gpu::Texture::Usage::Builder().withColor().withAlpha();
            _virtualPadStickTexture->setUsage(usage.build());
            _virtualPadStickTexture->setStoredMipFormat(gpu::Element(gpu::VEC4, gpu::NUINT8, gpu::RGBA));
            _virtualPadStickTexture->assignStoredMip(0, image.byteCount(), image.constBits());
            _virtualPadStickTexture->setAutoGenerateMips(true);
        }
    }

    if (!_virtualPadStickBaseTexture) {
        auto iconPath = PathUtils::resourcesPath() + "images/analog_stick_base.png";
        auto image = QImage(iconPath);
        if (image.format() != QImage::Format_ARGB32) {
            image = image.convertToFormat(QImage::Format_ARGB32);
        }
        if ((image.width() > 0) && (image.height() > 0)) {
            image = image.scaled(_virtualPadPixelSize, _virtualPadPixelSize, Qt::KeepAspectRatio);

            _virtualPadStickBaseTexture = gpu::Texture::createStrict(
                    gpu::Element(gpu::VEC4, gpu::NUINT8, gpu::RGBA),
                    image.width(), image.height(),
                    gpu::Texture::MAX_NUM_MIPS,
                    gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_MIP_LINEAR));
            _virtualPadStickBaseTexture->setSource("virtualPad base");
            auto usage = gpu::Texture::Usage::Builder().withColor().withAlpha();
            _virtualPadStickBaseTexture->setUsage(usage.build());
            _virtualPadStickBaseTexture->setStoredMipFormat(gpu::Element(gpu::VEC4, gpu::NUINT8, gpu::RGBA));
            _virtualPadStickBaseTexture->assignStoredMip(0, image.byteCount(), image.constBits());
            _virtualPadStickBaseTexture->setAutoGenerateMips(true);
        }
    }

    if (_virtualPadButtons.size() == 0) {
        _virtualPadButtons.append(VirtualPadButton(
                dpi * VirtualPad::Manager::BTN_FULL_PIXELS / VirtualPad::Manager::DPI,
                PathUtils::resourcesPath() + "images/fly.png",
                VirtualPad::Manager::Button::JUMP));
        _virtualPadButtons.append(VirtualPadButton(
                dpi * VirtualPad::Manager::BTN_FULL_PIXELS / VirtualPad::Manager::DPI,
                PathUtils::resourcesPath() + "images/handshake.png",
                VirtualPad::Manager::Button::HANDSHAKE));
    }
#endif
    Parent::customizeContext();
}