1 2 /* 3 * Copyright 2010 Google Inc. 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8 9 10 11 #ifndef GrIndexBuffer_DEFINED 12 #define GrIndexBuffer_DEFINED 13 14 #include "GrGeometryBuffer.h" 15 16 17 class GrIndexBuffer : public GrGeometryBuffer { 18 public: ComputeScratchKey(size_t size,bool dynamic,GrScratchKey * key)19 static void ComputeScratchKey(size_t size, bool dynamic, GrScratchKey* key) { 20 static const GrScratchKey::ResourceType kType = GrScratchKey::GenerateResourceType(); 21 22 GrScratchKey::Builder builder(key, kType, 2); 23 24 builder[0] = SkToUInt(size); 25 builder[1] = dynamic ? 1 : 0; 26 } 27 28 /** 29 * Retrieves the maximum number of quads that could be rendered 30 * from the index buffer (using kTriangles_GrPrimitiveType). 31 * @return the maximum number of quads using full size of index buffer. 32 */ maxQuads()33 int maxQuads() const { 34 return static_cast<int>(this->gpuMemorySize() / (sizeof(uint16_t) * 6)); 35 } 36 protected: GrIndexBuffer(GrGpu * gpu,size_t gpuMemorySize,bool dynamic,bool cpuBacked)37 GrIndexBuffer(GrGpu* gpu, size_t gpuMemorySize, bool dynamic, bool cpuBacked) 38 : INHERITED(gpu, gpuMemorySize, dynamic, cpuBacked) { 39 // We currently only make buffers scratch if they're both pow2 sized and not cpuBacked. 40 if (!cpuBacked && SkIsPow2(gpuMemorySize)) { 41 GrScratchKey key; 42 ComputeScratchKey(gpuMemorySize, dynamic, &key); 43 this->setScratchKey(key); 44 } 45 } 46 47 private: 48 typedef GrGeometryBuffer INHERITED; 49 }; 50 51 #endif 52