| Index: skia/gl/SkGLCanvas.cpp
|
| ===================================================================
|
| --- skia/gl/SkGLCanvas.cpp (revision 16859)
|
| +++ skia/gl/SkGLCanvas.cpp (working copy)
|
| @@ -1,179 +0,0 @@
|
| -#include "SkGLCanvas.h"
|
| -#include "SkGLDevice.h"
|
| -#include "SkBlitter.h"
|
| -#include "SkDraw.h"
|
| -#include "SkDrawProcs.h"
|
| -#include "SkGL.h"
|
| -#include "SkTemplates.h"
|
| -#include "SkUtils.h"
|
| -#include "SkXfermode.h"
|
| -
|
| -#ifdef SK_GL_DEVICE_FBO
|
| - #define USE_FBO_DEVICE
|
| - #include "SkGLDevice_FBO.h"
|
| -#else
|
| - #define USE_SWLAYER_DEVICE
|
| - #include "SkGLDevice_SWLayer.h"
|
| -#endif
|
| -
|
| -// maximum number of entries in our texture cache (before purging)
|
| -#define kTexCountMax_Default 256
|
| -// maximum number of bytes used (by gl) for the texture cache (before purging)
|
| -#define kTexSizeMax_Default (4 * 1024 * 1024)
|
| -
|
| -///////////////////////////////////////////////////////////////////////////////
|
| -
|
| -SkGLCanvas::SkGLCanvas() {
|
| - glEnable(GL_TEXTURE_2D);
|
| - glEnable(GL_SCISSOR_TEST);
|
| - glEnableClientState(GL_VERTEX_ARRAY);
|
| -
|
| - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
|
| -
|
| - fViewportSize.set(0, 0);
|
| -}
|
| -
|
| -SkGLCanvas::~SkGLCanvas() {
|
| - // call this now, while our override of restore() is in effect
|
| - this->restoreToCount(1);
|
| -}
|
| -
|
| -///////////////////////////////////////////////////////////////////////////////
|
| -
|
| -bool SkGLCanvas::getViewport(SkIPoint* size) const {
|
| - if (size) {
|
| - *size = fViewportSize;
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -bool SkGLCanvas::setViewport(int width, int height) {
|
| - fViewportSize.set(width, height);
|
| -
|
| - const bool isOpaque = false; // should this be a parameter to setViewport?
|
| - const bool isForLayer = false; // viewport is the base layer
|
| - SkDevice* device = this->createDevice(SkBitmap::kARGB_8888_Config, width,
|
| - height, isOpaque, isForLayer);
|
| - this->setDevice(device)->unref();
|
| -
|
| - return true;
|
| -}
|
| -
|
| -SkDevice* SkGLCanvas::createDevice(SkBitmap::Config, int width, int height,
|
| - bool isOpaque, bool isForLayer) {
|
| - SkBitmap bitmap;
|
| -
|
| - bitmap.setConfig(SkBitmap::kARGB_8888_Config, width, height);
|
| - bitmap.setIsOpaque(isOpaque);
|
| -
|
| -#ifdef USE_FBO_DEVICE
|
| - return SkNEW_ARGS(SkGLDevice_FBO, (bitmap, isForLayer));
|
| -#elif defined(USE_SWLAYER_DEVICE)
|
| - if (isForLayer) {
|
| - bitmap.allocPixels();
|
| - if (!bitmap.isOpaque()) {
|
| - bitmap.eraseColor(0);
|
| - }
|
| - return SkNEW_ARGS(SkGLDevice_SWLayer, (bitmap));
|
| - } else {
|
| - return SkNEW_ARGS(SkGLDevice, (bitmap, isForLayer));
|
| - }
|
| -#else
|
| - return SkNEW_ARGS(SkGLDevice, (bitmap, isForLayer));
|
| -#endif
|
| -}
|
| -
|
| -///////////////////////////////////////////////////////////////////////////////
|
| -
|
| -#include "SkTextureCache.h"
|
| -#include "SkThread.h"
|
| -
|
| -static SkMutex gTextureCacheMutex;
|
| -static SkTextureCache gTextureCache(kTexCountMax_Default, kTexSizeMax_Default);
|
| -
|
| -SkGLDevice::TexCache* SkGLDevice::LockTexCache(const SkBitmap& bitmap,
|
| - GLuint* name, SkPoint* size) {
|
| - SkAutoMutexAcquire amc(gTextureCacheMutex);
|
| -
|
| - SkTextureCache::Entry* entry = gTextureCache.lock(bitmap);
|
| - if (NULL != entry) {
|
| - if (name) {
|
| - *name = entry->name();
|
| - }
|
| - if (size) {
|
| - *size = entry->texSize();
|
| - }
|
| - }
|
| - return (TexCache*)entry;
|
| -}
|
| -
|
| -void SkGLDevice::UnlockTexCache(TexCache* cache) {
|
| - SkAutoMutexAcquire amc(gTextureCacheMutex);
|
| - gTextureCache.unlock((SkTextureCache::Entry*)cache);
|
| -}
|
| -
|
| -// public exposure of texture cache settings
|
| -
|
| -size_t SkGLCanvas::GetTextureCacheMaxCount() {
|
| - SkAutoMutexAcquire amc(gTextureCacheMutex);
|
| - return gTextureCache.getMaxCount();
|
| -}
|
| -
|
| -size_t SkGLCanvas::GetTextureCacheMaxSize() {
|
| - SkAutoMutexAcquire amc(gTextureCacheMutex);
|
| - return gTextureCache.getMaxSize();
|
| -}
|
| -
|
| -void SkGLCanvas::SetTextureCacheMaxCount(size_t count) {
|
| - SkAutoMutexAcquire amc(gTextureCacheMutex);
|
| - gTextureCache.setMaxCount(count);
|
| -}
|
| -
|
| -void SkGLCanvas::SetTextureCacheMaxSize(size_t size) {
|
| - SkAutoMutexAcquire amc(gTextureCacheMutex);
|
| - gTextureCache.setMaxSize(size);
|
| -}
|
| -
|
| -///////////////////////////////////////////////////////////////////////////////
|
| -
|
| -#include "SkGLTextCache.h"
|
| -
|
| -static bool deleteCachesProc(SkGlyphCache* cache, void* texturesAreValid) {
|
| - void* auxData;
|
| - if (cache->getAuxProcData(SkGLDevice::GlyphCacheAuxProc, &auxData)) {
|
| - bool valid = texturesAreValid != NULL;
|
| - SkGLTextCache* textCache = static_cast<SkGLTextCache*>(auxData);
|
| - // call this before delete, in case valid is false
|
| - textCache->deleteAllStrikes(valid);
|
| - // now free the memory for the cache itself
|
| - SkDELETE(textCache);
|
| - // now remove the entry in the glyphcache (does not call the proc)
|
| - cache->removeAuxProc(SkGLDevice::GlyphCacheAuxProc);
|
| - }
|
| - return false; // keep going
|
| -}
|
| -
|
| -void SkGLCanvas::DeleteAllTextures() {
|
| - // free the textures in our cache
|
| -
|
| - gTextureCacheMutex.acquire();
|
| - gTextureCache.deleteAllCaches(true);
|
| - gTextureCacheMutex.release();
|
| -
|
| - // now free the textures in the font cache
|
| -
|
| - SkGlyphCache::VisitAllCaches(deleteCachesProc, reinterpret_cast<void*>(true));
|
| -}
|
| -
|
| -void SkGLCanvas::AbandonAllTextures() {
|
| - // abandon the textures in our cache
|
| -
|
| - gTextureCacheMutex.acquire();
|
| - gTextureCache.deleteAllCaches(false);
|
| - gTextureCacheMutex.release();
|
| -
|
| - // abandon the textures in the font cache
|
| -
|
| - SkGlyphCache::VisitAllCaches(deleteCachesProc, reinterpret_cast<void*>(false));
|
| -}
|
| -
|
|
|