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

Unified Diff: src/gpu/gl/GrGLRenderTarget.h

Issue 963973002: Revert of Improve tracking of bound FBOs in GrGLGpu. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 10 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
« no previous file with comments | « src/gpu/gl/GrGLGpu.cpp ('k') | src/gpu/gl/GrGLRenderTarget.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/gl/GrGLRenderTarget.h
diff --git a/src/gpu/gl/GrGLRenderTarget.h b/src/gpu/gl/GrGLRenderTarget.h
index 485ae4a7919d1d967b8600ac8c8093da80fe4af1..7e7349257f054ac44e8a32cd5626c1cf94e1041c 100644
--- a/src/gpu/gl/GrGLRenderTarget.h
+++ b/src/gpu/gl/GrGLRenderTarget.h
@@ -15,59 +15,15 @@
class GrGLGpu;
-/** Represents a GL FBO object. It has a gen ID which is valid whenever the FBO ID owned by the
- object is valid. The gen IDs are not recycled after FBOs are freed, unlike FBO IDs, and so
- can be used to uniquely identity FBO ID instantiations. If this object owns an FBO ID, the ID
- must be deleted or abandoned before this object is freed. FBO IDs should never be owned by
- more than one instance. */
-class GrGLFBO : public SkNVRefCnt<GrGLFBO> {
-public:
- SK_DECLARE_INST_COUNT(GrGLFBO);
-
- /** Initializes to an FBO. The FBO should already be valid in the relevant GL context. */
- GrGLFBO(GrGLint id) : fID(id), fIsValid(true) {}
-
- /** Initializes to an FBO ID generated using the interface. */
- GrGLFBO(const GrGLInterface* gl) {
- GR_GL_CALL(gl, GenFramebuffers(1, &fID));
- fIsValid = SkToBool(fID);
- }
-
- ~GrGLFBO() { SkASSERT(!this->isValid()); }
-
- /** Has this object been released or abandoned? */
- bool isValid() const { return fIsValid; }
-
- GrGLint fboID() const { SkASSERT(this->isValid()); return fID; }
-
- bool isDefaultFramebuffer() const { return fIsValid && 0 == fID; }
-
- /** Give up ownership of the FBO ID owned by this object without deleting it. */
- void abandon();
-
- /** Delete and give up ownership of the the FBO ID if it is valid. */
- void release(const GrGLInterface*);
-
-private:
- static uint32_t NextGenID() {
- static int32_t gGenID = SK_InvalidGenID + 1;
- return static_cast<uint32_t>(sk_atomic_inc(&gGenID));
- }
-
- GrGLuint fID;
- bool fIsValid;
-
- typedef SkRefCnt INHERITED;
-};
-
-//////////////////////////////////////////////////////////////////////////////
-
-/** GL-specific subclass of GrRenderTarget. */
class GrGLRenderTarget : public GrRenderTarget {
public:
+ // set fTexFBOID to this value to indicate that it is multisampled but
+ // Gr doesn't know how to resolve it.
+ enum { kUnresolvableFBOID = 0 };
+
struct IDDesc {
- SkAutoTUnref<GrGLFBO> fRenderFBO;
- SkAutoTUnref<GrGLFBO> fTextureFBO;
+ GrGLuint fRTFBOID;
+ GrGLuint fTexFBOID;
GrGLuint fMSColorRenderbufferID;
GrGpuResource::LifeCycle fLifeCycle;
};
@@ -77,33 +33,21 @@
void setViewport(const GrGLIRect& rect) { fViewport = rect; }
const GrGLIRect& getViewport() const { return fViewport; }
- // For multisampled renderbuffer render targets, these will return different GrGLFBO objects. If
- // the render target is not texturable, textureFBO() returns NULL. If the render target auto
- // resolves to a texture, the same object is returned.
-
- // FBO that should be rendered into. Always non-NULL unless this resource is destroyed
- // (this->wasDestroyed()).
- const GrGLFBO* renderFBO() const {
- SkASSERT(fRenderFBO && fRenderFBO->isValid());
- return fRenderFBO;
- }
-
- // FBO that has the target's texture ID attached. The return value may be:
- // * NULL when this render target is not a texture,
- // * the same as renderFBO() when this surface is not multisampled or auto-resolves,
- // * or different than renderFBO() when it requires explicit resolving via
- // glBlitFramebuffer.
- const GrGLFBO* textureFBO() const {
- SkASSERT(!fTextureFBO || fTextureFBO->isValid());
- return fTextureFBO;
- }
+ // The following two functions return the same ID when a
+ // texture/render target is multisampled, and different IDs when
+ // it is.
+ // FBO ID used to render into
+ GrGLuint renderFBOID() const { return fRTFBOID; }
+ // FBO ID that has texture ID attached.
+ GrGLuint textureFBOID() const { return fTexFBOID; }
// override of GrRenderTarget
ResolveType getResolveType() const SK_OVERRIDE {
- if (!this->isMultisampled() || this->renderFBO() == this->textureFBO()) {
+ if (!this->isMultisampled() ||
+ fRTFBOID == fTexFBOID) {
// catches FBO 0 and non MSAA case
return kAutoResolves_ResolveType;
- } else if (!this->textureFBO()) {
+ } else if (kUnresolvableFBOID == fTexFBOID) {
return kCantResolve_ResolveType;
} else {
return kCanResolve_ResolveType;
@@ -129,23 +73,23 @@
size_t onGpuMemorySize() const SK_OVERRIDE;
private:
- SkAutoTUnref<GrGLFBO> fRenderFBO;
- SkAutoTUnref<GrGLFBO> fTextureFBO;
- GrGLuint fMSColorRenderbufferID;
+ GrGLuint fRTFBOID;
+ GrGLuint fTexFBOID;
+ GrGLuint fMSColorRenderbufferID;
// We track this separately from GrGpuResource because this may be both a texture and a render
// target, and the texture may be wrapped while the render target is not.
- bool fIsWrapped;
+ bool fIsWrapped;
// when we switch to this render target we want to set the viewport to
// only render to content area (as opposed to the whole allocation) and
// we want the rendering to be at top left (GL has origin in bottom left)
- GrGLIRect fViewport;
+ GrGLIRect fViewport;
// onGpuMemorySize() needs to know what how many color values are owned per pixel. However,
// abandon and release zero out the IDs and the cache needs to know the size even after those
// actions.
- uint8_t fColorValuesPerPixel;
+ uint8_t fColorValuesPerPixel;
typedef GrRenderTarget INHERITED;
};
« no previous file with comments | « src/gpu/gl/GrGLGpu.cpp ('k') | src/gpu/gl/GrGLRenderTarget.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698