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 fGpu->bindTexture(samplers[s].fTextureUnit, | 125 fGpu->bindTexture(samplers[s].fTextureUnit, |
126 textureAccess.getParams(), | 126 textureAccess.getParams(), |
127 static_cast<GrGLTexture*>(textureAccess.getTexture()))
; | 127 static_cast<GrGLTexture*>(textureAccess.getTexture()))
; |
128 } | 128 } |
129 } | 129 } |
130 | 130 |
131 | 131 |
132 /////////////////////////////////////////////////////////////////////////////// | 132 /////////////////////////////////////////////////////////////////////////////// |
133 | 133 |
134 void GrGLProgram::setData(const GrOptDrawState& optState) { | 134 void GrGLProgram::setData(const GrOptDrawState& optState) { |
135 this->setMatrixAndRenderTargetHeight(optState); | 135 this->setRenderTargetState(optState); |
136 | 136 |
137 const GrDeviceCoordTexture* dstCopy = optState.getDstCopy(); | 137 const GrDeviceCoordTexture* dstCopy = optState.getDstCopy(); |
138 if (dstCopy) { | 138 if (dstCopy) { |
139 if (fBuiltinUniformHandles.fDstCopyTopLeftUni.isValid()) { | 139 if (fBuiltinUniformHandles.fDstCopyTopLeftUni.isValid()) { |
140 fProgramDataManager.set2f(fBuiltinUniformHandles.fDstCopyTopLeftUni, | 140 fProgramDataManager.set2f(fBuiltinUniformHandles.fDstCopyTopLeftUni, |
141 static_cast<GrGLfloat>(dstCopy->offset().
fX), | 141 static_cast<GrGLfloat>(dstCopy->offset().
fX), |
142 static_cast<GrGLfloat>(dstCopy->offset().
fY)); | 142 static_cast<GrGLfloat>(dstCopy->offset().
fY)); |
143 fProgramDataManager.set2f(fBuiltinUniformHandles.fDstCopyScaleUni, | 143 fProgramDataManager.set2f(fBuiltinUniformHandles.fDstCopyScaleUni, |
144 1.f / dstCopy->texture()->width(), | 144 1.f / dstCopy->texture()->width(), |
145 1.f / dstCopy->texture()->height()); | 145 1.f / dstCopy->texture()->height()); |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
198 fProgramDataManager.setSkMatrix(transforms[t].fHandle.convertToUnifo
rmHandle(), matrix); | 198 fProgramDataManager.setSkMatrix(transforms[t].fHandle.convertToUnifo
rmHandle(), matrix); |
199 transforms[t].fCurrentValue = matrix; | 199 transforms[t].fCurrentValue = matrix; |
200 } | 200 } |
201 } | 201 } |
202 } | 202 } |
203 | 203 |
204 void GrGLProgram::didSetData(GrGpu::DrawType drawType) { | 204 void GrGLProgram::didSetData(GrGpu::DrawType drawType) { |
205 SkASSERT(!GrGpu::IsPathRenderingDrawType(drawType)); | 205 SkASSERT(!GrGpu::IsPathRenderingDrawType(drawType)); |
206 } | 206 } |
207 | 207 |
208 void GrGLProgram::setMatrixAndRenderTargetHeight(const GrOptDrawState& optState)
{ | 208 void GrGLProgram::setRenderTargetState(const GrOptDrawState& optState) { |
209 // Load the RT height uniform if it is needed to y-flip gl_FragCoord. | 209 // Load the RT height uniform if it is needed to y-flip gl_FragCoord. |
210 if (fBuiltinUniformHandles.fRTHeightUni.isValid() && | 210 if (fBuiltinUniformHandles.fRTHeightUni.isValid() && |
211 fMatrixState.fRenderTargetSize.fHeight != optState.getRenderTarget()->he
ight()) { | 211 fRenderTargetState.fRenderTargetSize.fHeight != optState.getRenderTarget
()->height()) { |
212 fProgramDataManager.set1f(fBuiltinUniformHandles.fRTHeightUni, | 212 fProgramDataManager.set1f(fBuiltinUniformHandles.fRTHeightUni, |
213 SkIntToScalar(optState.getRenderTarget()->hei
ght())); | 213 SkIntToScalar(optState.getRenderTarget()->hei
ght())); |
214 } | 214 } |
215 | 215 |
216 // call subclasses to set the actual view matrix | 216 // call subclasses to set the actual view matrix |
217 this->onSetMatrixAndRenderTargetHeight(optState); | 217 this->onSetRenderTargetState(optState); |
218 } | 218 } |
219 | 219 |
220 void GrGLProgram::onSetMatrixAndRenderTargetHeight(const GrOptDrawState& optStat
e) { | 220 void GrGLProgram::onSetRenderTargetState(const GrOptDrawState& optState) { |
221 const GrRenderTarget* rt = optState.getRenderTarget(); | 221 const GrRenderTarget* rt = optState.getRenderTarget(); |
222 SkISize size; | 222 SkISize size; |
223 size.set(rt->width(), rt->height()); | 223 size.set(rt->width(), rt->height()); |
224 if (fMatrixState.fRenderTargetOrigin != rt->origin() || | 224 if (fRenderTargetState.fRenderTargetOrigin != rt->origin() || |
225 fMatrixState.fRenderTargetSize != size || | 225 fRenderTargetState.fRenderTargetSize != size) { |
226 !fMatrixState.fViewMatrix.cheapEqualTo(optState.getViewMatrix())) { | 226 fRenderTargetState.fRenderTargetSize = size; |
227 SkASSERT(fBuiltinUniformHandles.fViewMatrixUni.isValid()); | 227 fRenderTargetState.fRenderTargetOrigin = rt->origin(); |
228 | |
229 fMatrixState.fViewMatrix = optState.getViewMatrix(); | |
230 fMatrixState.fRenderTargetSize = size; | |
231 fMatrixState.fRenderTargetOrigin = rt->origin(); | |
232 | |
233 GrGLfloat viewMatrix[3 * 3]; | |
234 fMatrixState.getGLMatrix<3>(viewMatrix); | |
235 fProgramDataManager.setMatrix3f(fBuiltinUniformHandles.fViewMatrixUni, v
iewMatrix); | |
236 | 228 |
237 GrGLfloat rtAdjustmentVec[4]; | 229 GrGLfloat rtAdjustmentVec[4]; |
238 fMatrixState.getRTAdjustmentVec(rtAdjustmentVec); | 230 fRenderTargetState.getRTAdjustmentVec(rtAdjustmentVec); |
239 fProgramDataManager.set4fv(fBuiltinUniformHandles.fRTAdjustmentUni, 1, r
tAdjustmentVec); | 231 fProgramDataManager.set4fv(fBuiltinUniformHandles.fRTAdjustmentUni, 1, r
tAdjustmentVec); |
240 } | 232 } |
241 } | 233 } |
242 | 234 |
243 ////////////////////////////////////////////////////////////////////////////////
///////// | 235 ////////////////////////////////////////////////////////////////////////////////
///////// |
244 | 236 |
245 GrGLNvprProgramBase::GrGLNvprProgramBase(GrGLGpu* gpu, | 237 GrGLNvprProgramBase::GrGLNvprProgramBase(GrGLGpu* gpu, |
246 const GrProgramDesc& desc, | 238 const GrProgramDesc& desc, |
247 const BuiltinUniformHandles& builtinUni
forms, | 239 const BuiltinUniformHandles& builtinUni
forms, |
248 GrGLuint programID, | 240 GrGLuint programID, |
249 const UniformInfoArray& uniforms, | 241 const UniformInfoArray& uniforms, |
250 GrGLInstalledGeoProc* primProc, | 242 GrGLInstalledGeoProc* primProc, |
251 GrGLInstalledXferProc* xferProcessor, | 243 GrGLInstalledXferProc* xferProcessor, |
252 GrGLInstalledFragProcs* fragmentProcess
ors) | 244 GrGLInstalledFragProcs* fragmentProcess
ors) |
253 : INHERITED(gpu, desc, builtinUniforms, programID, uniforms, primProc, | 245 : INHERITED(gpu, desc, builtinUniforms, programID, uniforms, primProc, |
254 xferProcessor, fragmentProcessors) { | 246 xferProcessor, fragmentProcessors) { |
255 } | 247 } |
256 | 248 |
257 void GrGLNvprProgramBase::onSetMatrixAndRenderTargetHeight(const GrOptDrawState&
optState) { | 249 void GrGLNvprProgramBase::onSetRenderTargetState(const GrOptDrawState& optState)
{ |
258 SkASSERT(GrGpu::IsPathRenderingDrawType(optState.drawType())); | 250 SkASSERT(GrGpu::IsPathRenderingDrawType(optState.drawType())); |
259 const GrRenderTarget* rt = optState.getRenderTarget(); | 251 const GrRenderTarget* rt = optState.getRenderTarget(); |
260 SkISize size; | 252 SkISize size; |
261 size.set(rt->width(), rt->height()); | 253 size.set(rt->width(), rt->height()); |
262 fGpu->glPathRendering()->setProjectionMatrix(optState.getViewMatrix(), size,
rt->origin()); | 254 fGpu->glPathRendering()->setProjectionMatrix(optState.getPrimitiveProcessor(
)->viewMatrix(), |
| 255 size, rt->origin()); |
263 } | 256 } |
264 | 257 |
265 ////////////////////////////////////////////////////////////////////////////////
///////// | 258 ////////////////////////////////////////////////////////////////////////////////
///////// |
266 | 259 |
267 GrGLNvprProgram::GrGLNvprProgram(GrGLGpu* gpu, | 260 GrGLNvprProgram::GrGLNvprProgram(GrGLGpu* gpu, |
268 const GrProgramDesc& desc, | 261 const GrProgramDesc& desc, |
269 const BuiltinUniformHandles& builtinUniforms, | 262 const BuiltinUniformHandles& builtinUniforms, |
270 GrGLuint programID, | 263 GrGLuint programID, |
271 const UniformInfoArray& uniforms, | 264 const UniformInfoArray& uniforms, |
272 GrGLInstalledGeoProc* primProc, | 265 GrGLInstalledGeoProc* primProc, |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
346 for (int t = 0; t < numTransforms; ++t) { | 339 for (int t = 0; t < numTransforms; ++t) { |
347 const SkMatrix& transform = get_transform_matrix(proc, t, localMatrix); | 340 const SkMatrix& transform = get_transform_matrix(proc, t, localMatrix); |
348 GrGLPathRendering::PathTexGenComponents components = | 341 GrGLPathRendering::PathTexGenComponents components = |
349 GrGLPathRendering::kST_PathTexGenComponents; | 342 GrGLPathRendering::kST_PathTexGenComponents; |
350 if (proc.isPerspectiveCoordTransform(t)) { | 343 if (proc.isPerspectiveCoordTransform(t)) { |
351 components = GrGLPathRendering::kSTR_PathTexGenComponents; | 344 components = GrGLPathRendering::kSTR_PathTexGenComponents; |
352 } | 345 } |
353 fGpu->glPathRendering()->enablePathTexGen(texCoordIndex++, components, t
ransform); | 346 fGpu->glPathRendering()->enablePathTexGen(texCoordIndex++, components, t
ransform); |
354 } | 347 } |
355 } | 348 } |
OLD | NEW |