| 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 "GrGpuGL.h" | 8 #include "GrGpuGL.h" |
| 9 | 9 |
| 10 #include "GrEffect.h" | 10 #include "GrEffect.h" |
| (...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 203 void GrGpuGL::abandonResources(){ | 203 void GrGpuGL::abandonResources(){ |
| 204 INHERITED::abandonResources(); | 204 INHERITED::abandonResources(); |
| 205 fProgramCache->abandon(); | 205 fProgramCache->abandon(); |
| 206 fHWProgramID = 0; | 206 fHWProgramID = 0; |
| 207 } | 207 } |
| 208 | 208 |
| 209 //////////////////////////////////////////////////////////////////////////////// | 209 //////////////////////////////////////////////////////////////////////////////// |
| 210 | 210 |
| 211 #define GL_CALL(X) GR_GL_CALL(this->glInterface(), X) | 211 #define GL_CALL(X) GR_GL_CALL(this->glInterface(), X) |
| 212 | 212 |
| 213 void GrGpuGL::flushPathStencilMatrix() { | |
| 214 const SkMatrix& viewMatrix = this->getDrawState().getViewMatrix(); | |
| 215 const GrRenderTarget* rt = this->getDrawState().getRenderTarget(); | |
| 216 SkISize size; | |
| 217 size.set(rt->width(), rt->height()); | |
| 218 const SkMatrix& vm = this->getDrawState().getViewMatrix(); | |
| 219 | |
| 220 if (fHWProjectionMatrixState.fRenderTargetOrigin != rt->origin() || | |
| 221 !fHWProjectionMatrixState.fViewMatrix.cheapEqualTo(viewMatrix) || | |
| 222 fHWProjectionMatrixState.fRenderTargetSize!= size) { | |
| 223 | |
| 224 fHWProjectionMatrixState.fViewMatrix = vm; | |
| 225 fHWProjectionMatrixState.fRenderTargetSize = size; | |
| 226 fHWProjectionMatrixState.fRenderTargetOrigin = rt->origin(); | |
| 227 | |
| 228 GrGLfloat projectionMatrix[4 * 4]; | |
| 229 fHWProjectionMatrixState.getGLMatrix<4>(projectionMatrix); | |
| 230 GL_CALL(MatrixMode(GR_GL_PROJECTION)); | |
| 231 GL_CALL(LoadMatrixf(projectionMatrix)); | |
| 232 } | |
| 233 } | |
| 234 | |
| 235 bool GrGpuGL::flushGraphicsState(DrawType type, const GrDeviceCoordTexture* dstC
opy) { | 213 bool GrGpuGL::flushGraphicsState(DrawType type, const GrDeviceCoordTexture* dstC
opy) { |
| 236 const GrDrawState& drawState = this->getDrawState(); | 214 const GrDrawState& drawState = this->getDrawState(); |
| 237 | 215 |
| 238 // GrGpu::setupClipAndFlushState should have already checked this and bailed
if not true. | 216 // GrGpu::setupClipAndFlushState should have already checked this and bailed
if not true. |
| 239 SkASSERT(NULL != drawState.getRenderTarget()); | 217 SkASSERT(NULL != drawState.getRenderTarget()); |
| 240 | 218 |
| 241 if (kStencilPath_DrawType == type) { | 219 if (kStencilPath_DrawType == type) { |
| 242 this->flushPathStencilMatrix(); | 220 const GrRenderTarget* rt = this->getDrawState().getRenderTarget(); |
| 221 SkISize size; |
| 222 size.set(rt->width(), rt->height()); |
| 223 this->setProjectionMatrix(drawState.getViewMatrix(), size, rt->origin())
; |
| 243 } else { | 224 } else { |
| 244 this->flushMiscFixedFunctionState(); | 225 this->flushMiscFixedFunctionState(); |
| 245 | 226 |
| 246 GrBlendCoeff srcCoeff; | 227 GrBlendCoeff srcCoeff; |
| 247 GrBlendCoeff dstCoeff; | 228 GrBlendCoeff dstCoeff; |
| 248 GrDrawState::BlendOptFlags blendOpts = drawState.getBlendOpts(false, &sr
cCoeff, &dstCoeff); | 229 GrDrawState::BlendOptFlags blendOpts = drawState.getBlendOpts(false, &sr
cCoeff, &dstCoeff); |
| 249 if (GrDrawState::kSkipDraw_BlendOptFlag & blendOpts) { | 230 if (GrDrawState::kSkipDraw_BlendOptFlag & blendOpts) { |
| 250 return false; | 231 return false; |
| 251 } | 232 } |
| 252 | 233 |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 353 GrCrash("Unknown geometry src type!"); | 334 GrCrash("Unknown geometry src type!"); |
| 354 } | 335 } |
| 355 | 336 |
| 356 SkASSERT(NULL != ibuf); | 337 SkASSERT(NULL != ibuf); |
| 357 SkASSERT(!ibuf->isLocked()); | 338 SkASSERT(!ibuf->isLocked()); |
| 358 *indexOffsetInBytes += ibuf->baseOffset(); | 339 *indexOffsetInBytes += ibuf->baseOffset(); |
| 359 } | 340 } |
| 360 GrGLAttribArrayState* attribState = | 341 GrGLAttribArrayState* attribState = |
| 361 fHWGeometryState.bindArrayAndBuffersToDraw(this, vbuf, ibuf); | 342 fHWGeometryState.bindArrayAndBuffersToDraw(this, vbuf, ibuf); |
| 362 | 343 |
| 363 uint32_t usedAttribArraysMask = 0; | 344 if (!fCurrentProgram->hasVertexShader()) { |
| 364 const GrVertexAttrib* vertexAttrib = this->getDrawState().getVertexAttribs()
; | 345 int posIdx = this->getDrawState().positionAttributeIndex(); |
| 365 int vertexAttribCount = this->getDrawState().getVertexAttribCount(); | 346 const GrVertexAttrib* vertexArray = this->getDrawState().getVertexAttrib
s() + posIdx; |
| 366 for (int vertexAttribIndex = 0; vertexAttribIndex < vertexAttribCount; | 347 GrVertexAttribType vertexArrayType = vertexArray->fType; |
| 367 ++vertexAttribIndex, ++vertexAttrib) { | 348 SkASSERT(!GrGLAttribTypeToLayout(vertexArrayType).fNormalized); |
| 349 SkASSERT(GrGLAttribTypeToLayout(vertexArrayType).fCount == 2); |
| 350 attribState->setFixedFunctionVertexArray(this, |
| 351 vbuf, |
| 352 2, |
| 353 GrGLAttribTypeToLayout(vertexAr
rayType).fType, |
| 354 stride, |
| 355 reinterpret_cast<GrGLvoid*>( |
| 356 vertexOffsetInBytes + vertexArr
ay->fOffset)); |
| 357 attribState->disableUnusedArrays(this, 0, true); |
| 358 } else { |
| 359 uint32_t usedAttribArraysMask = 0; |
| 360 const GrVertexAttrib* vertexAttrib = this->getDrawState().getVertexAttri
bs(); |
| 361 int vertexAttribCount = this->getDrawState().getVertexAttribCount(); |
| 362 for (int vertexAttribIndex = 0; vertexAttribIndex < vertexAttribCount; |
| 363 ++vertexAttribIndex, ++vertexAttrib) { |
| 368 | 364 |
| 369 usedAttribArraysMask |= (1 << vertexAttribIndex); | 365 usedAttribArraysMask |= (1 << vertexAttribIndex); |
| 370 GrVertexAttribType attribType = vertexAttrib->fType; | 366 GrVertexAttribType attribType = vertexAttrib->fType; |
| 371 attribState->set(this, | 367 attribState->set(this, |
| 372 vertexAttribIndex, | 368 vertexAttribIndex, |
| 373 vbuf, | 369 vbuf, |
| 374 GrGLAttribTypeToLayout(attribType).fCount, | 370 GrGLAttribTypeToLayout(attribType).fCount, |
| 375 GrGLAttribTypeToLayout(attribType).fType, | 371 GrGLAttribTypeToLayout(attribType).fType, |
| 376 GrGLAttribTypeToLayout(attribType).fNormalized, | 372 GrGLAttribTypeToLayout(attribType).fNormalized, |
| 377 stride, | 373 stride, |
| 378 reinterpret_cast<GrGLvoid*>( | 374 reinterpret_cast<GrGLvoid*>( |
| 379 vertexOffsetInBytes + vertexAttrib->fOffset)); | 375 vertexOffsetInBytes + vertexAttrib->fOffset)); |
| 376 } |
| 377 |
| 378 attribState->disableUnusedArrays(this, usedAttribArraysMask, false); |
| 380 } | 379 } |
| 381 | |
| 382 attribState->disableUnusedArrays(this, usedAttribArraysMask, false); | |
| 383 } | 380 } |
| OLD | NEW |