1*c8dee2aaSAndroid Build Coastguard Worker /*
2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2015 Google Inc.
3*c8dee2aaSAndroid Build Coastguard Worker *
4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be
5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file.
6*c8dee2aaSAndroid Build Coastguard Worker */
7*c8dee2aaSAndroid Build Coastguard Worker
8*c8dee2aaSAndroid Build Coastguard Worker #ifndef GrSimpleMesh_DEFINED
9*c8dee2aaSAndroid Build Coastguard Worker #define GrSimpleMesh_DEFINED
10*c8dee2aaSAndroid Build Coastguard Worker
11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRefCnt.h"
12*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/base/SkAssert.h"
13*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/base/SkDebug.h"
14*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/gpu/ganesh/GrTypesPriv.h"
15*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrBuffer.h"
16*c8dee2aaSAndroid Build Coastguard Worker
17*c8dee2aaSAndroid Build Coastguard Worker #include <cstdint>
18*c8dee2aaSAndroid Build Coastguard Worker #include <utility>
19*c8dee2aaSAndroid Build Coastguard Worker
20*c8dee2aaSAndroid Build Coastguard Worker /**
21*c8dee2aaSAndroid Build Coastguard Worker * Used to communicate simple (non-instanced, direct) draws from GrOp to GrOpsRenderPass.
22*c8dee2aaSAndroid Build Coastguard Worker * TODO: Consider migrating every Op to make the appropriate draw directly on GrOpsRenderPass.
23*c8dee2aaSAndroid Build Coastguard Worker */
24*c8dee2aaSAndroid Build Coastguard Worker struct GrSimpleMesh {
25*c8dee2aaSAndroid Build Coastguard Worker void set(sk_sp<const GrBuffer> vertexBuffer, int vertexCount, int baseVertex);
26*c8dee2aaSAndroid Build Coastguard Worker void setIndexed(sk_sp<const GrBuffer> indexBuffer, int indexCount, int baseIndex,
27*c8dee2aaSAndroid Build Coastguard Worker uint16_t minIndexValue, uint16_t maxIndexValue, GrPrimitiveRestart,
28*c8dee2aaSAndroid Build Coastguard Worker sk_sp<const GrBuffer> vertexBuffer, int baseVertex);
29*c8dee2aaSAndroid Build Coastguard Worker void setIndexedPatterned(sk_sp<const GrBuffer> indexBuffer, int indexCount,
30*c8dee2aaSAndroid Build Coastguard Worker int patternRepeatCount, int maxPatternRepetitionsInIndexBuffer,
31*c8dee2aaSAndroid Build Coastguard Worker sk_sp<const GrBuffer> vertexBuffer, int patternVertexCount,
32*c8dee2aaSAndroid Build Coastguard Worker int baseVertex);
33*c8dee2aaSAndroid Build Coastguard Worker
34*c8dee2aaSAndroid Build Coastguard Worker sk_sp<const GrBuffer> fIndexBuffer;
35*c8dee2aaSAndroid Build Coastguard Worker int fIndexCount;
36*c8dee2aaSAndroid Build Coastguard Worker int fPatternRepeatCount;
37*c8dee2aaSAndroid Build Coastguard Worker int fMaxPatternRepetitionsInIndexBuffer;
38*c8dee2aaSAndroid Build Coastguard Worker int fBaseIndex;
39*c8dee2aaSAndroid Build Coastguard Worker uint16_t fMinIndexValue;
40*c8dee2aaSAndroid Build Coastguard Worker uint16_t fMaxIndexValue;
41*c8dee2aaSAndroid Build Coastguard Worker GrPrimitiveRestart fPrimitiveRestart = GrPrimitiveRestart::kNo;
42*c8dee2aaSAndroid Build Coastguard Worker
43*c8dee2aaSAndroid Build Coastguard Worker sk_sp<const GrBuffer> fVertexBuffer;
44*c8dee2aaSAndroid Build Coastguard Worker int fVertexCount;
45*c8dee2aaSAndroid Build Coastguard Worker int fBaseVertex = 0;
46*c8dee2aaSAndroid Build Coastguard Worker
47*c8dee2aaSAndroid Build Coastguard Worker SkDEBUGCODE(bool fIsInitialized = false;)
48*c8dee2aaSAndroid Build Coastguard Worker };
49*c8dee2aaSAndroid Build Coastguard Worker
set(sk_sp<const GrBuffer> vertexBuffer,int vertexCount,int baseVertex)50*c8dee2aaSAndroid Build Coastguard Worker inline void GrSimpleMesh::set(sk_sp<const GrBuffer> vertexBuffer, int vertexCount, int baseVertex) {
51*c8dee2aaSAndroid Build Coastguard Worker SkASSERT(baseVertex >= 0);
52*c8dee2aaSAndroid Build Coastguard Worker fIndexBuffer.reset();
53*c8dee2aaSAndroid Build Coastguard Worker fVertexBuffer = std::move(vertexBuffer);
54*c8dee2aaSAndroid Build Coastguard Worker fVertexCount = vertexCount;
55*c8dee2aaSAndroid Build Coastguard Worker fBaseVertex = baseVertex;
56*c8dee2aaSAndroid Build Coastguard Worker SkDEBUGCODE(fIsInitialized = true;)
57*c8dee2aaSAndroid Build Coastguard Worker }
58*c8dee2aaSAndroid Build Coastguard Worker
setIndexed(sk_sp<const GrBuffer> indexBuffer,int indexCount,int baseIndex,uint16_t minIndexValue,uint16_t maxIndexValue,GrPrimitiveRestart primitiveRestart,sk_sp<const GrBuffer> vertexBuffer,int baseVertex)59*c8dee2aaSAndroid Build Coastguard Worker inline void GrSimpleMesh::setIndexed(sk_sp<const GrBuffer> indexBuffer, int indexCount,
60*c8dee2aaSAndroid Build Coastguard Worker int baseIndex, uint16_t minIndexValue, uint16_t maxIndexValue,
61*c8dee2aaSAndroid Build Coastguard Worker GrPrimitiveRestart primitiveRestart,
62*c8dee2aaSAndroid Build Coastguard Worker sk_sp<const GrBuffer> vertexBuffer, int baseVertex) {
63*c8dee2aaSAndroid Build Coastguard Worker SkASSERT(indexBuffer);
64*c8dee2aaSAndroid Build Coastguard Worker SkASSERT(indexCount >= 1);
65*c8dee2aaSAndroid Build Coastguard Worker SkASSERT(baseIndex >= 0);
66*c8dee2aaSAndroid Build Coastguard Worker SkASSERT(maxIndexValue >= minIndexValue);
67*c8dee2aaSAndroid Build Coastguard Worker SkASSERT(baseVertex >= 0);
68*c8dee2aaSAndroid Build Coastguard Worker fIndexBuffer = std::move(indexBuffer);
69*c8dee2aaSAndroid Build Coastguard Worker fIndexCount = indexCount;
70*c8dee2aaSAndroid Build Coastguard Worker fPatternRepeatCount = 0;
71*c8dee2aaSAndroid Build Coastguard Worker fBaseIndex = baseIndex;
72*c8dee2aaSAndroid Build Coastguard Worker fMinIndexValue = minIndexValue;
73*c8dee2aaSAndroid Build Coastguard Worker fMaxIndexValue = maxIndexValue;
74*c8dee2aaSAndroid Build Coastguard Worker fPrimitiveRestart = primitiveRestart;
75*c8dee2aaSAndroid Build Coastguard Worker fVertexBuffer = std::move(vertexBuffer);
76*c8dee2aaSAndroid Build Coastguard Worker fBaseVertex = baseVertex;
77*c8dee2aaSAndroid Build Coastguard Worker SkDEBUGCODE(fIsInitialized = true;)
78*c8dee2aaSAndroid Build Coastguard Worker }
79*c8dee2aaSAndroid Build Coastguard Worker
setIndexedPatterned(sk_sp<const GrBuffer> indexBuffer,int indexCount,int patternRepeatCount,int maxPatternRepetitionsInIndexBuffer,sk_sp<const GrBuffer> vertexBuffer,int patternVertexCount,int baseVertex)80*c8dee2aaSAndroid Build Coastguard Worker inline void GrSimpleMesh::setIndexedPatterned(
81*c8dee2aaSAndroid Build Coastguard Worker sk_sp<const GrBuffer> indexBuffer, int indexCount, int patternRepeatCount,
82*c8dee2aaSAndroid Build Coastguard Worker int maxPatternRepetitionsInIndexBuffer, sk_sp<const GrBuffer> vertexBuffer,
83*c8dee2aaSAndroid Build Coastguard Worker int patternVertexCount, int baseVertex) {
84*c8dee2aaSAndroid Build Coastguard Worker SkASSERT(indexBuffer);
85*c8dee2aaSAndroid Build Coastguard Worker SkASSERT(indexCount >= 1);
86*c8dee2aaSAndroid Build Coastguard Worker SkASSERT(patternVertexCount >= 1);
87*c8dee2aaSAndroid Build Coastguard Worker SkASSERT(patternRepeatCount >= 1);
88*c8dee2aaSAndroid Build Coastguard Worker SkASSERT(maxPatternRepetitionsInIndexBuffer >= 1);
89*c8dee2aaSAndroid Build Coastguard Worker SkASSERT(baseVertex >= 0);
90*c8dee2aaSAndroid Build Coastguard Worker fIndexBuffer = std::move(indexBuffer);
91*c8dee2aaSAndroid Build Coastguard Worker fIndexCount = indexCount;
92*c8dee2aaSAndroid Build Coastguard Worker fPatternRepeatCount = patternRepeatCount;
93*c8dee2aaSAndroid Build Coastguard Worker fVertexCount = patternVertexCount;
94*c8dee2aaSAndroid Build Coastguard Worker fMaxPatternRepetitionsInIndexBuffer = maxPatternRepetitionsInIndexBuffer;
95*c8dee2aaSAndroid Build Coastguard Worker fPrimitiveRestart = GrPrimitiveRestart::kNo;
96*c8dee2aaSAndroid Build Coastguard Worker fVertexBuffer = std::move(vertexBuffer);
97*c8dee2aaSAndroid Build Coastguard Worker fBaseVertex = baseVertex;
98*c8dee2aaSAndroid Build Coastguard Worker SkDEBUGCODE(fIsInitialized = true;)
99*c8dee2aaSAndroid Build Coastguard Worker }
100*c8dee2aaSAndroid Build Coastguard Worker
101*c8dee2aaSAndroid Build Coastguard Worker #endif
102