void Image::setFilename(const std::string& sFilename, TextureCompression comp) { assertValid(); AVG_TRACE(Logger::category::MEMORY, Logger::severity::INFO, "Loading " << sFilename); BitmapPtr pBmp = loadBitmap(sFilename); if (comp == TEXTURECOMPRESSION_B5G6R5 && pBmp->hasAlpha()) { throw Exception(AVG_ERR_UNSUPPORTED, "B5G6R5-compressed textures with an alpha channel are not supported."); } changeSource(FILE); m_pBmp = pBmp; m_sFilename = sFilename; switch (comp) { case TEXTURECOMPRESSION_B5G6R5: m_pBmp = BitmapPtr(new Bitmap(pBmp->getSize(), B5G6R5, sFilename)); if (!BitmapLoader::get()->isBlueFirst()) { FilterFlipRGB().applyInPlace(pBmp); } m_pBmp->copyPixels(*pBmp); break; case TEXTURECOMPRESSION_NONE: break; default: assert(false); } if (m_State == GPU) { m_pSurface->destroy(); setupSurface(); } assertValid(); }
SkData* setupAndDrawToCanvasReturnPng(SkDebugCanvas* debugCanvas, int n) { GrContextOptions grContextOpts; SkAutoTDelete<GrContextFactory> factory(new GrContextFactory(grContextOpts)); SkAutoTUnref<SkSurface> surface(setupSurface(factory.get())); SkASSERT(debugCanvas); SkCanvas* canvas = surface->getCanvas(); debugCanvas->drawTo(canvas, n); return writeCanvasToPng(canvas); }
CVideoSurface *CSurfaceFaderBase::fade(CScreenManager *screenManager, CVideoSurface *srcSurface) { if (_index == -1 || _index >= _count) return srcSurface; if (!_count && !setupSurface(screenManager, srcSurface)) return nullptr; srcSurface->lock(); _videoSurface->lock(); CSurfaceArea srCSurfaceArea(srcSurface); CSurfaceArea destSurfaceObj(_videoSurface); // Copy the surface with fading copySurface(srCSurfaceArea, destSurfaceObj); srcSurface->unlock(); _videoSurface->unlock(); ++_index; return _videoSurface; }
void Image::moveToGPU() { assertValid(); if (m_State == CPU) { switch (m_Source) { case FILE: case BITMAP: setupSurface(); break; case SCENE: m_pSurface->create(B8G8R8X8, m_pCanvas->getTex(), MCTexturePtr(), MCTexturePtr(), MCTexturePtr(), true); break; case NONE: break; default: AVG_ASSERT(false); } m_State = GPU; } assertValid(); }