OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2012 Google Inc. | 2 * Copyright 2012 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "GrDrawState.h" | 8 #include "GrDrawState.h" |
9 #include "GrPaint.h" | 9 #include "GrPaint.h" |
10 | 10 |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
115 GrAssert(count <= GrDrawState::kAttribIndexCount); | 115 GrAssert(count <= GrDrawState::kAttribIndexCount); |
116 fVertexAttribs.reset(); | 116 fVertexAttribs.reset(); |
117 for (int index = 0; index < count; ++index) { | 117 for (int index = 0; index < count; ++index) { |
118 fVertexAttribs.push_back(attribs[index]); | 118 fVertexAttribs.push_back(attribs[index]); |
119 } | 119 } |
120 } | 120 } |
121 | 121 |
122 //////////////////////////////////////////////////////////////////////////////// | 122 //////////////////////////////////////////////////////////////////////////////// |
123 | 123 |
124 void GrDrawState::setDefaultVertexAttribs() { | 124 void GrDrawState::setDefaultVertexAttribs() { |
| 125 static const GrVertexAttrib kPositionAttrib = {kVec2f_GrVertexAttribType, 0}
; |
125 fVertexAttribs.reset(); | 126 fVertexAttribs.reset(); |
126 fVertexAttribs.push_back(GrVertexAttrib(kVec2f_GrVertexAttribType, 0)); | 127 fVertexAttribs.push_back(kPositionAttrib); |
127 | 128 |
128 fCommon.fAttribBindings = kDefault_AttribBindings; | 129 fCommon.fAttribBindings = kDefault_AttribBindings; |
129 | 130 |
130 fAttribIndices[kPosition_AttribIndex] = 0; | 131 fAttribIndices[kPosition_AttribIndex] = 0; |
131 } | 132 } |
132 | 133 |
133 //////////////////////////////////////////////////////////////////////////////// | 134 //////////////////////////////////////////////////////////////////////////////// |
134 | 135 |
135 bool GrDrawState::AttributesBindExplicitTexCoords(GrAttribBindings attribBinding
s) { | 136 bool GrDrawState::AttributesBindExplicitTexCoords(GrAttribBindings attribBinding
s) { |
136 return SkToBool(kTexCoord_AttribBindingsMask & attribBindings); | 137 return SkToBool(kTexCoord_AttribBindingsMask & attribBindings); |
137 } | 138 } |
138 | 139 |
139 //////////////////////////////////////////////////////////////////////////////// | 140 //////////////////////////////////////////////////////////////////////////////// |
140 | 141 |
141 void GrDrawState::VertexAttributesUnitTest() { | 142 void GrDrawState::VertexAttributesUnitTest() { |
142 // Ensure that our tex coord mask is correct | 143 // Ensure that our tex coord mask is correct |
143 GrAttribBindings texCoordMask; | 144 GrAttribBindings texCoordMask; |
144 gen_tex_coord_mask(&texCoordMask); | 145 gen_tex_coord_mask(&texCoordMask); |
145 GrAssert(texCoordMask == kTexCoord_AttribBindingsMask); | 146 GrAssert(texCoordMask == kTexCoord_AttribBindingsMask); |
146 | 147 |
147 // not necessarily exhaustive | 148 // not necessarily exhaustive |
148 static bool run; | 149 static bool run; |
149 if (!run) { | 150 if (!run) { |
150 run = true; | 151 run = true; |
151 | 152 |
152 GrVertexAttribArray<6> attribs; | 153 GrVertexAttribArray<6> attribs; |
153 GrAssert(0 == vertex_size(attribs.begin(), attribs.count())); | 154 GrAssert(0 == vertex_size(attribs.begin(), attribs.count())); |
154 | 155 |
155 attribs.push_back(GrVertexAttrib(kFloat_GrVertexAttribType, 0)); | 156 GrVertexAttrib currAttrib = {kFloat_GrVertexAttribType, 0}; |
| 157 attribs.push_back(currAttrib); |
156 GrAssert(sizeof(float) == vertex_size(attribs.begin(), attribs.count()))
; | 158 GrAssert(sizeof(float) == vertex_size(attribs.begin(), attribs.count()))
; |
157 attribs[0].fType = kVec2f_GrVertexAttribType; | 159 attribs[0].fType = kVec2f_GrVertexAttribType; |
158 GrAssert(2*sizeof(float) == vertex_size(attribs.begin(), attribs.count()
)); | 160 GrAssert(2*sizeof(float) == vertex_size(attribs.begin(), attribs.count()
)); |
159 attribs[0].fType = kVec3f_GrVertexAttribType; | 161 attribs[0].fType = kVec3f_GrVertexAttribType; |
160 GrAssert(3*sizeof(float) == vertex_size(attribs.begin(), attribs.count()
)); | 162 GrAssert(3*sizeof(float) == vertex_size(attribs.begin(), attribs.count()
)); |
161 attribs[0].fType = kVec4f_GrVertexAttribType; | 163 attribs[0].fType = kVec4f_GrVertexAttribType; |
162 GrAssert(4*sizeof(float) == vertex_size(attribs.begin(), attribs.count()
)); | 164 GrAssert(4*sizeof(float) == vertex_size(attribs.begin(), attribs.count()
)); |
163 attribs[0].fType = kVec4ub_GrVertexAttribType; | 165 attribs[0].fType = kVec4ub_GrVertexAttribType; |
164 GrAssert(4*sizeof(char) == vertex_size(attribs.begin(), attribs.count())
); | 166 GrAssert(4*sizeof(char) == vertex_size(attribs.begin(), attribs.count())
); |
165 | 167 |
166 attribs.push_back(GrVertexAttrib(kVec2f_GrVertexAttribType, attribs[0].f
Offset + 4*sizeof(char))); | 168 currAttrib.set(kVec2f_GrVertexAttribType, attribs[0].fOffset + 4*sizeof(
char)); |
| 169 attribs.push_back(currAttrib); |
167 GrAssert(4*sizeof(char) + 2*sizeof(float) == vertex_size(attribs.begin()
, attribs.count())); | 170 GrAssert(4*sizeof(char) + 2*sizeof(float) == vertex_size(attribs.begin()
, attribs.count())); |
168 attribs.push_back(GrVertexAttrib(kVec3f_GrVertexAttribType, attribs[1].f
Offset + 2*sizeof(float))); | 171 currAttrib.set(kVec3f_GrVertexAttribType, attribs[1].fOffset + 2*sizeof(
float)); |
| 172 attribs.push_back(currAttrib); |
169 GrAssert(4*sizeof(char) + 2*sizeof(float) + 3*sizeof(float) == | 173 GrAssert(4*sizeof(char) + 2*sizeof(float) + 3*sizeof(float) == |
170 vertex_size(attribs.begin(), attribs.count())); | 174 vertex_size(attribs.begin(), attribs.count())); |
171 attribs.push_back(GrVertexAttrib(kFloat_GrVertexAttribType, attribs[2].f
Offset + 3*sizeof(float))); | 175 currAttrib.set(kFloat_GrVertexAttribType, attribs[2].fOffset + 3*sizeof(
float)); |
| 176 attribs.push_back(currAttrib); |
172 GrAssert(4*sizeof(char) + 2*sizeof(float) + 3*sizeof(float) + sizeof(flo
at) == | 177 GrAssert(4*sizeof(char) + 2*sizeof(float) + 3*sizeof(float) + sizeof(flo
at) == |
173 vertex_size(attribs.begin(), attribs.count())); | 178 vertex_size(attribs.begin(), attribs.count())); |
174 attribs.push_back(GrVertexAttrib(kVec4f_GrVertexAttribType, attribs[3].f
Offset + sizeof(float))); | 179 currAttrib.set(kVec4f_GrVertexAttribType, attribs[3].fOffset + sizeof(fl
oat)); |
| 180 attribs.push_back(currAttrib); |
175 GrAssert(4*sizeof(char) + 2*sizeof(float) + 3*sizeof(float) + sizeof(flo
at) + 4*sizeof(float) == | 181 GrAssert(4*sizeof(char) + 2*sizeof(float) + 3*sizeof(float) + sizeof(flo
at) + 4*sizeof(float) == |
176 vertex_size(attribs.begin(), attribs.count())); | 182 vertex_size(attribs.begin(), attribs.count())); |
177 | 183 |
178 GrAttribBindings tcMask = 0; | 184 GrAttribBindings tcMask = 0; |
179 GrAssert(!AttributesBindExplicitTexCoords(0)); | 185 GrAssert(!AttributesBindExplicitTexCoords(0)); |
180 for (int s = 0; s < GrDrawState::kNumStages; ++s) { | 186 for (int s = 0; s < GrDrawState::kNumStages; ++s) { |
181 tcMask |= ExplicitTexCoordAttribBindingsBit(s); | 187 tcMask |= ExplicitTexCoordAttribBindingsBit(s); |
182 GrAssert(AttributesBindExplicitTexCoords(tcMask)); | 188 GrAssert(AttributesBindExplicitTexCoords(tcMask)); |
183 GrAssert(StageBindsExplicitTexCoords(tcMask, s)); | 189 GrAssert(StageBindsExplicitTexCoords(tcMask, s)); |
184 for (int s2 = s + 1; s2 < GrDrawState::kNumStages; ++s2) { | 190 for (int s2 = s + 1; s2 < GrDrawState::kNumStages; ++s2) { |
(...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
477 } | 483 } |
478 fRestoreMask |= (1 << s); | 484 fRestoreMask |= (1 << s); |
479 GrEffectStage* stage = drawState->fStages + s; | 485 GrEffectStage* stage = drawState->fStages + s; |
480 stage->saveCoordChange(&fSavedCoordChanges[s]); | 486 stage->saveCoordChange(&fSavedCoordChanges[s]); |
481 stage->preConcatCoordChange(invVM); | 487 stage->preConcatCoordChange(invVM); |
482 } | 488 } |
483 } | 489 } |
484 drawState->viewMatrix()->reset(); | 490 drawState->viewMatrix()->reset(); |
485 return true; | 491 return true; |
486 } | 492 } |
OLD | NEW |