Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(224)

Unified Diff: src/gpu/GrDrawTarget.h

Issue 12843026: Make GrDrawTarget::Caps ref counted and GrGLCaps derive from it. (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/gpu/GrDrawTarget.h
===================================================================
--- src/gpu/GrDrawTarget.h (revision 8359)
+++ src/gpu/GrDrawTarget.h (working copy)
@@ -30,10 +30,40 @@
class GrDrawTarget : public GrRefCnt {
protected:
- /** This helper class allows GrDrawTarget subclasses to set the caps values without having to be
- made a friend of GrDrawTarget::Caps. */
- class CapsInternals {
+ class DrawInfo;
+
+public:
+ SK_DECLARE_INST_COUNT(GrDrawTarget)
+
+ /**
+ * Represents the draw target capabilities.
+ */
+ class Caps : public SkRefCnt {
public:
+ Caps() { this->reset(); }
+ Caps(const Caps& c) { *this = c; }
+ Caps& operator= (const Caps& c);
+
+ virtual void reset();
+ virtual void print() const;
+
+ bool eightBitPaletteSupport() const { return f8BitPaletteSupport; }
+ bool npotTextureTileSupport() const { return fNPOTTextureTileSupport; }
+ bool twoSidedStencilSupport() const { return fTwoSidedStencilSupport; }
+ bool stencilWrapOpsSupport() const { return fStencilWrapOpsSupport; }
+ bool hwAALineSupport() const { return fHWAALineSupport; }
+ bool shaderDerivativeSupport() const { return fShaderDerivativeSupport; }
+ bool geometryShaderSupport() const { return fGeometryShaderSupport; }
+ bool dualSourceBlendingSupport() const { return fDualSourceBlendingSupport; }
+ bool bufferLockSupport() const { return fBufferLockSupport; }
+ bool pathStencilingSupport() const { return fPathStencilingSupport; }
+
+ int maxRenderTargetSize() const { return fMaxRenderTargetSize; }
+ int maxTextureSize() const { return fMaxTextureSize; }
+ // Will be 0 if MSAA is not supported
+ int maxSampleCount() const { return fMaxSampleCount; }
+ protected:
+
bool f8BitPaletteSupport : 1;
bool fNPOTTextureTileSupport : 1;
bool fTwoSidedStencilSupport : 1;
@@ -41,7 +71,6 @@
bool fHWAALineSupport : 1;
bool fShaderDerivativeSupport : 1;
bool fGeometryShaderSupport : 1;
- bool fFSAASupport : 1;
bool fDualSourceBlendingSupport : 1;
bool fBufferLockSupport : 1;
bool fPathStencilingSupport : 1;
@@ -51,45 +80,6 @@
int fMaxSampleCount;
};
- class DrawInfo;
-
-public:
- SK_DECLARE_INST_COUNT(GrDrawTarget)
-
- /**
- * Represents the draw target capabilities.
- */
- class Caps {
- public:
- Caps() { memset(this, 0, sizeof(Caps)); }
- Caps(const Caps& c) { *this = c; }
- Caps& operator= (const Caps& c) {
- memcpy(this, &c, sizeof(Caps));
- return *this;
- }
- void print() const;
-
- bool eightBitPaletteSupport() const { return fInternals.f8BitPaletteSupport; }
- bool npotTextureTileSupport() const { return fInternals.fNPOTTextureTileSupport; }
- bool twoSidedStencilSupport() const { return fInternals.fTwoSidedStencilSupport; }
- bool stencilWrapOpsSupport() const { return fInternals.fStencilWrapOpsSupport; }
- bool hwAALineSupport() const { return fInternals.fHWAALineSupport; }
- bool shaderDerivativeSupport() const { return fInternals.fShaderDerivativeSupport; }
- bool geometryShaderSupport() const { return fInternals.fGeometryShaderSupport; }
- bool fsaaSupport() const { return fInternals.fFSAASupport; }
- bool dualSourceBlendingSupport() const { return fInternals.fDualSourceBlendingSupport; }
- bool bufferLockSupport() const { return fInternals.fBufferLockSupport; }
- bool pathStencilingSupport() const { return fInternals.fPathStencilingSupport; }
-
- int maxRenderTargetSize() const { return fInternals.fMaxRenderTargetSize; }
- int maxTextureSize() const { return fInternals.fMaxTextureSize; }
- // Will be 0 if MSAA is not supported
- int maxSampleCount() const { return fInternals.fMaxSampleCount; }
- private:
- CapsInternals fInternals;
- friend class GrDrawTarget; // to set values of fInternals
- };
-
///////////////////////////////////////////////////////////////////////////
// The context may not be fully constructed and should not be used during GrDrawTarget
@@ -100,7 +90,7 @@
/**
* Gets the capabilities of the draw target.
*/
- const Caps& getCaps() const { return fCaps; }
+ const Caps* caps() const { return fCaps.get(); }
/**
* Sets the current clip to the region specified by clip. All draws will be
@@ -652,9 +642,6 @@
GrContext* getContext() { return fContext; }
const GrContext* getContext() const { return fContext; }
- // allows derived class to set the caps
- CapsInternals* capsInternals() { return &fCaps.fInternals; }
-
// A subclass may override this function if it wishes to be notified when the clip is changed.
// The override should call INHERITED::clipWillBeSet().
virtual void clipWillBeSet(const GrClipData* clipData);
@@ -673,7 +660,8 @@
return this->getGeomSrc().fVertexSize;
}
- Caps fCaps;
+ // Subclass must initialize this in its constructor.
+ SkAutoTUnref<const Caps> fCaps;
/**
* Used to communicate draws to subclass's onDraw function.
« no previous file with comments | « src/gpu/GrContext.cpp ('k') | src/gpu/GrDrawTarget.cpp » ('j') | src/gpu/gl/GrGLContext.cpp » ('J')

Powered by Google App Engine
This is Rietveld 408576698