GrGpuObject.h revision 8fe72477f204b1a45393e6a64caa84fd287b805b
18fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com/* 28fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com Copyright 2011 Google Inc. 38fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com 48fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com Licensed under the Apache License, Version 2.0 (the "License"); 58fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com you may not use this file except in compliance with the License. 68fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com You may obtain a copy of the License at 78fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com 88fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com http://www.apache.org/licenses/LICENSE-2.0 98fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com 108fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com Unless required by applicable law or agreed to in writing, software 118fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com distributed under the License is distributed on an "AS IS" BASIS, 128fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com See the License for the specific language governing permissions and 148fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com limitations under the License. 158fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com */ 168fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com 178fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com#ifndef GrResource_DEFINED 188fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com#define GrResource_DEFINED 198fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com 208fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com#include "GrRefCnt.h" 218fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com 228fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.comclass GrGpu; 238fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com 248fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.comclass GrResource : public GrRefCnt { 258fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.compublic: 268fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com explicit GrResource(GrGpu* gpu); 278fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com 288fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com virtual ~GrResource() { 298fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com // subclass should have released this. 308fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com GrAssert(!isValid()); 318fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com } 328fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com 338fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com /** 348fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com * Frees the resource in the underlying 3D API. It must be safe to call this 358fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com * when the resource has been previously abandoned. 368fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com */ 378fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com void release(); 388fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com 398fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com /** 408fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com * Removes references to objects in the underlying 3D API without freeing 418fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com * them. Used when the API context has been torn down before the GrContext. 428fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com */ 438fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com void abandon(); 448fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com 458fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com /** 468fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com * Tests whether a resource has been abandoned or released. All resources 478fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com * will be in this state after their creating GrContext is destroyed or has 488fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com * contextLost called. It's up to the client to test isValid() before 498fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com * attempting to use a resource if it holds refs on resources across 508fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com * ~GrContext, freeResources with the force flag, or contextLost. 518fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com * 528fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com * @return true if the resource has been released or abandoned, 538fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com * false otherwise. 548fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com */ 558fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com bool isValid() const { return NULL != fGpu; } 568fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com 578fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.comprotected: 588fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com 598fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com virtual void onRelease() = 0; 608fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com virtual void onAbandon() = 0; 618fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com 628fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com GrGpu* getGpu() const { return fGpu; } 638fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com 648fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.comprivate: 658fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com GrResource(); // unimpl 668fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com 678fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com GrGpu* fGpu; // not reffed. This can outlive the GrGpu. 688fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com 698fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com friend class GrGpu; // GrGpu manages list of resources. 708fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com 718fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com GrResource* fNext; // dl-list of resources per-GrGpu 728fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com GrResource* fPrevious; 738fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com 748fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com typedef GrRefCnt INHERITED; 758fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com}; 768fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com 778fe72477f204b1a45393e6a64caa84fd287b805bbsalomon@google.com#endif 78