skia2/obsolete/SkGLDevice.h
epoger@google.com ec3ed6a5eb Automatic update of all copyright notices to reflect new license terms.
I have manually examined all of these diffs and restored a few files that
seem to require manual adjustment.

The following files still need to be modified manually, in a separate CL:

android_sample/SampleApp/AndroidManifest.xml
android_sample/SampleApp/res/layout/layout.xml
android_sample/SampleApp/res/menu/sample.xml
android_sample/SampleApp/res/values/strings.xml
android_sample/SampleApp/src/com/skia/sampleapp/SampleApp.java
android_sample/SampleApp/src/com/skia/sampleapp/SampleView.java
experimental/CiCarbonSampleMain.c
experimental/CocoaDebugger/main.m
experimental/FileReaderApp/main.m
experimental/SimpleCocoaApp/main.m
experimental/iOSSampleApp/Shared/SkAlertPrompt.h
experimental/iOSSampleApp/Shared/SkAlertPrompt.m
experimental/iOSSampleApp/SkiOSSampleApp-Base.xcconfig
experimental/iOSSampleApp/SkiOSSampleApp-Debug.xcconfig
experimental/iOSSampleApp/SkiOSSampleApp-Release.xcconfig
gpu/src/android/GrGLDefaultInterface_android.cpp
gyp/common.gypi
gyp_skia
include/ports/SkHarfBuzzFont.h
include/views/SkOSWindow_wxwidgets.h
make.bat
make.py
src/opts/memset.arm.S
src/opts/memset16_neon.S
src/opts/memset32_neon.S
src/opts/opts_check_arm.cpp
src/ports/SkDebug_brew.cpp
src/ports/SkMemory_brew.cpp
src/ports/SkOSFile_brew.cpp
src/ports/SkXMLParser_empty.cpp
src/utils/ios/SkImageDecoder_iOS.mm
src/utils/ios/SkOSFile_iOS.mm
src/utils/ios/SkStream_NSData.mm
tests/FillPathTest.cpp
Review URL: http://codereview.appspot.com/4816058

git-svn-id: http://skia.googlecode.com/svn/trunk@1982 2bbb7eff-a529-9590-31e7-b0007b416f81
2011-07-28 14:26:00 +00:00

171 lines
5.8 KiB
C++

/*
* Copyright 2011 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef SkGLDevice_DEFINED
#define SkGLDevice_DEFINED
#include "SkDevice.h"
#include "SkGL.h"
#include "SkRegion.h"
#ifdef SK_BUILD_FOR_MAC
#include <OpenGL/gl.h>
#elif defined(ANDROID)
#include <GLES/gl.h>
#endif
class SkGLDeviceFactory : public SkDeviceFactory {
public:
virtual SkDevice* newDevice(SkBitmap::Config config, int width, int height,
bool isOpaque, bool isForLayer);
};
struct SkGLDrawProcs;
class SkGLDevice : public SkDevice {
public:
SkGLDevice(const SkBitmap& bitmap, bool offscreen);
virtual ~SkGLDevice();
virtual SkDeviceFactory* getDeviceFactory() {
return SkNEW(SkGLDeviceFactory);
}
virtual uint32_t getDeviceCapabilities() { return kGL_Capability; }
// used to identify GLTextCache data in the glyphcache
static void GlyphCacheAuxProc(void* data);
enum TexOrientation {
kNo_TexOrientation,
kTopToBottom_TexOrientation,
kBottomToTop_TexOrientation
};
/** Called when this device is no longer a candidate for a render target,
but will instead be used as a texture to be drawn. Be sure to call
the base impl if you override, as it will compute size and max.
*/
virtual TexOrientation bindDeviceAsTexture();
// returns true if complex
SkGLClipIter* updateMatrixClip();
// call to set the clip to the specified rect
void scissor(const SkIRect&);
// overrides from SkDevice
virtual void gainFocus(SkCanvas*);
virtual void setMatrixClip(const SkMatrix& matrix, const SkRegion& clip);
virtual void drawPaint(const SkDraw&, const SkPaint& paint);
virtual void drawPoints(const SkDraw&, SkCanvas::PointMode mode, size_t count,
const SkPoint[], const SkPaint& paint);
virtual void drawRect(const SkDraw&, const SkRect& r,
const SkPaint& paint);
virtual void drawPath(const SkDraw&, const SkPath& path,
const SkPaint& paint);
virtual void drawBitmap(const SkDraw&, const SkBitmap& bitmap,
const SkMatrix& matrix, const SkPaint& paint);
virtual void drawSprite(const SkDraw&, const SkBitmap& bitmap,
int x, int y, const SkPaint& paint);
virtual void drawText(const SkDraw&, const void* text, size_t len,
SkScalar x, SkScalar y, const SkPaint& paint);
virtual void drawPosText(const SkDraw&, const void* text, size_t len,
const SkScalar pos[], SkScalar constY,
int scalarsPerPos, const SkPaint& paint);
virtual void drawTextOnPath(const SkDraw&, const void* text, size_t len,
const SkPath& path, const SkMatrix* matrix,
const SkPaint& paint);
virtual void drawVertices(const SkDraw&, SkCanvas::VertexMode, int vertexCount,
const SkPoint verts[], const SkPoint texs[],
const SkColor colors[], SkXfermode* xmode,
const uint16_t indices[], int indexCount,
const SkPaint& paint);
virtual void drawDevice(const SkDraw&, SkDevice*, int x, int y,
const SkPaint&);
// settings for the global texture cache
static size_t GetTextureCacheMaxCount();
static void SetTextureCacheMaxCount(size_t count);
static size_t GetTextureCacheMaxSize();
static void SetTextureCacheMaxSize(size_t size);
/** Call glDeleteTextures for all textures (including those for text)
This should be called while the gl-context is still valid. Its purpose
is to free up gl resources. Note that if a bitmap or text is drawn after
this call, new caches will be created.
*/
static void DeleteAllTextures();
/** Forget all textures without calling delete (including those for text).
This should be called if the gl-context has changed, and the texture
IDs that have been cached are no longer valid.
*/
static void AbandonAllTextures();
protected:
/** Return the current glmatrix, from a previous call to setMatrixClip */
const SkMatrix& matrix() const { return fMatrix; }
/** Return the current clip, from a previous call to setMatrixClip */
const SkRegion& clip() const { return fClip; }
private:
SkGLMatrix fGLMatrix;
SkMatrix fMatrix;
SkRegion fClip;
bool fDirty;
SkGLClipIter fClipIter;
SkGLDrawProcs* fDrawProcs;
void setupForText(SkDraw* draw, const SkPaint& paint);
// global texture cache methods
class TexCache;
static TexCache* LockTexCache(const SkBitmap&, GLuint* name,
SkPoint* size);
static void UnlockTexCache(TexCache*);
class SkAutoLockTexCache {
public:
SkAutoLockTexCache(const SkBitmap& bitmap, GLuint* name,
SkPoint* size) {
fTex = SkGLDevice::LockTexCache(bitmap, name, size);
}
~SkAutoLockTexCache() {
if (fTex) {
SkGLDevice::UnlockTexCache(fTex);
}
}
TexCache* get() const { return fTex; }
private:
TexCache* fTex;
};
friend class SkAutoTexCache;
// returns cache if the texture is bound for the shader
TexCache* setupGLPaintShader(const SkPaint& paint);
class AutoPaintShader {
public:
AutoPaintShader(SkGLDevice*, const SkPaint& paint);
~AutoPaintShader();
bool useTex() const { return fTexCache != 0; }
private:
SkGLDevice* fDevice;
TexCache* fTexCache;
};
friend class AutoPaintShader;
typedef SkDevice INHERITED;
};
#endif