OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 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 "GrGLProgram.h" | 8 #include "GrGLProgram.h" |
9 | 9 |
10 #include "GrAllocator.h" | 10 #include "GrAllocator.h" |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
125 textureAccess.getParams(), | 125 textureAccess.getParams(), |
126 static_cast<GrGLTexture*>(textureAccess.getTexture()))
; | 126 static_cast<GrGLTexture*>(textureAccess.getTexture()))
; |
127 } | 127 } |
128 } | 128 } |
129 | 129 |
130 | 130 |
131 /////////////////////////////////////////////////////////////////////////////// | 131 /////////////////////////////////////////////////////////////////////////////// |
132 | 132 |
133 void GrGLProgram::setData(const GrOptDrawState& optState) { | 133 void GrGLProgram::setData(const GrOptDrawState& optState) { |
134 GrColor color = optState.getColor(); | 134 GrColor color = optState.getColor(); |
135 uint8_t coverage = optState.getCoverage(); | |
136 | 135 |
| 136 // TODO delete this once the path processor can set color |
137 this->setColor(optState, color); | 137 this->setColor(optState, color); |
138 this->setCoverage(optState, coverage); | |
139 this->setMatrixAndRenderTargetHeight(optState); | 138 this->setMatrixAndRenderTargetHeight(optState); |
140 | 139 |
141 const GrDeviceCoordTexture* dstCopy = optState.getDstCopy(); | 140 const GrDeviceCoordTexture* dstCopy = optState.getDstCopy(); |
142 if (dstCopy) { | 141 if (dstCopy) { |
143 if (fBuiltinUniformHandles.fDstCopyTopLeftUni.isValid()) { | 142 if (fBuiltinUniformHandles.fDstCopyTopLeftUni.isValid()) { |
144 fProgramDataManager.set2f(fBuiltinUniformHandles.fDstCopyTopLeftUni, | 143 fProgramDataManager.set2f(fBuiltinUniformHandles.fDstCopyTopLeftUni, |
145 static_cast<GrGLfloat>(dstCopy->offset().
fX), | 144 static_cast<GrGLfloat>(dstCopy->offset().
fX), |
146 static_cast<GrGLfloat>(dstCopy->offset().
fY)); | 145 static_cast<GrGLfloat>(dstCopy->offset().
fY)); |
147 fProgramDataManager.set2f(fBuiltinUniformHandles.fDstCopyScaleUni, | 146 fProgramDataManager.set2f(fBuiltinUniformHandles.fDstCopyScaleUni, |
148 1.f / dstCopy->texture()->width(), | 147 1.f / dstCopy->texture()->width(), |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
203 transforms[t].fCurrentValue = matrix; | 202 transforms[t].fCurrentValue = matrix; |
204 } | 203 } |
205 } | 204 } |
206 } | 205 } |
207 | 206 |
208 void GrGLProgram::didSetData(GrGpu::DrawType drawType) { | 207 void GrGLProgram::didSetData(GrGpu::DrawType drawType) { |
209 SkASSERT(!GrGpu::IsPathRenderingDrawType(drawType)); | 208 SkASSERT(!GrGpu::IsPathRenderingDrawType(drawType)); |
210 } | 209 } |
211 | 210 |
212 void GrGLProgram::setColor(const GrOptDrawState& optState, GrColor color) { | 211 void GrGLProgram::setColor(const GrOptDrawState& optState, GrColor color) { |
213 const GrProgramDesc::KeyHeader& header = fDesc.header(); | 212 const GrGLProgramDescBuilder::GLKeyHeader& header = GrGLProgramDescBuilder::
GetHeader(fDesc); |
214 switch (header.fColorInput) { | 213 if (header.fUseNvpr) { |
215 case GrProgramDesc::kAttribute_ColorInput: | 214 if (fColor != color && fBuiltinUniformHandles.fColorUni.isValid()) { |
216 // Attribute case is handled in GrGpuGL::setupGeometry | 215 // OpenGL ES doesn't support unsigned byte varieties of glUniform |
217 break; | 216 GrGLfloat c[4]; |
218 case GrProgramDesc::kUniform_ColorInput: | 217 GrColorToRGBAFloat(color, c); |
219 if (fColor != color && fBuiltinUniformHandles.fColorUni.isValid()) { | 218 fProgramDataManager.set4fv(fBuiltinUniformHandles.fColorUni, 1, c); |
220 // OpenGL ES doesn't support unsigned byte varieties of glUnifor
m | 219 fColor = color; |
221 GrGLfloat c[4]; | 220 } |
222 GrColorToRGBAFloat(color, c); | |
223 fProgramDataManager.set4fv(fBuiltinUniformHandles.fColorUni, 1,
c); | |
224 fColor = color; | |
225 } | |
226 break; | |
227 case GrProgramDesc::kAllOnes_ColorInput: | |
228 // Handled by shader creation | |
229 break; | |
230 default: | |
231 SkFAIL("Unexpected color type."); | |
232 } | 221 } |
233 } | 222 } |
234 | 223 |
235 void GrGLProgram::setCoverage(const GrOptDrawState& optState, uint8_t coverage)
{ | |
236 const GrProgramDesc::KeyHeader& header = fDesc.header(); | |
237 switch (header.fCoverageInput) { | |
238 case GrProgramDesc::kAttribute_ColorInput: | |
239 // Attribute case is handled in GrGpuGL::setupGeometry | |
240 break; | |
241 case GrProgramDesc::kUniform_ColorInput: | |
242 if (fCoverage != coverage) { | |
243 // OpenGL ES doesn't support unsigned byte varieties of glUnifor
m | |
244 GrGLfloat c = GrNormalizeByteToFloat(coverage); | |
245 fProgramDataManager.set1f(fBuiltinUniformHandles.fCoverageUni, c
); | |
246 fCoverage = coverage; | |
247 } | |
248 break; | |
249 case GrProgramDesc::kAllOnes_ColorInput: | |
250 // Handled by shader creation | |
251 break; | |
252 default: | |
253 SkFAIL("Unexpected coverage type."); | |
254 } | |
255 } | |
256 | |
257 void GrGLProgram::setMatrixAndRenderTargetHeight(const GrOptDrawState& optState)
{ | 224 void GrGLProgram::setMatrixAndRenderTargetHeight(const GrOptDrawState& optState)
{ |
258 // Load the RT height uniform if it is needed to y-flip gl_FragCoord. | 225 // Load the RT height uniform if it is needed to y-flip gl_FragCoord. |
259 if (fBuiltinUniformHandles.fRTHeightUni.isValid() && | 226 if (fBuiltinUniformHandles.fRTHeightUni.isValid() && |
260 fMatrixState.fRenderTargetSize.fHeight != optState.getRenderTarget()->he
ight()) { | 227 fMatrixState.fRenderTargetSize.fHeight != optState.getRenderTarget()->he
ight()) { |
261 fProgramDataManager.set1f(fBuiltinUniformHandles.fRTHeightUni, | 228 fProgramDataManager.set1f(fBuiltinUniformHandles.fRTHeightUni, |
262 SkIntToScalar(optState.getRenderTarget()->hei
ght())); | 229 SkIntToScalar(optState.getRenderTarget()->hei
ght())); |
263 } | 230 } |
264 | 231 |
265 // call subclasses to set the actual view matrix | 232 // call subclasses to set the actual view matrix |
266 this->onSetMatrixAndRenderTargetHeight(optState); | 233 this->onSetMatrixAndRenderTargetHeight(optState); |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
390 for (int t = 0; t < numTransforms; ++t) { | 357 for (int t = 0; t < numTransforms; ++t) { |
391 const SkMatrix& transform = get_transform_matrix(proc, t); | 358 const SkMatrix& transform = get_transform_matrix(proc, t); |
392 GrGLPathRendering::PathTexGenComponents components = | 359 GrGLPathRendering::PathTexGenComponents components = |
393 GrGLPathRendering::kST_PathTexGenComponents; | 360 GrGLPathRendering::kST_PathTexGenComponents; |
394 if (proc.isPerspectiveCoordTransform(t)) { | 361 if (proc.isPerspectiveCoordTransform(t)) { |
395 components = GrGLPathRendering::kSTR_PathTexGenComponents; | 362 components = GrGLPathRendering::kSTR_PathTexGenComponents; |
396 } | 363 } |
397 fGpu->glPathRendering()->enablePathTexGen(texCoordIndex++, components, t
ransform); | 364 fGpu->glPathRendering()->enablePathTexGen(texCoordIndex++, components, t
ransform); |
398 } | 365 } |
399 } | 366 } |
OLD | NEW |