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