Index: src/gpu/gl/GrGpuGL_program.cpp |
diff --git a/src/gpu/gl/GrGpuGL_program.cpp b/src/gpu/gl/GrGpuGL_program.cpp |
index 8a3444e508f364333c29094aa281d2fa45ca3a28..92eed8d9bb85751e6736408d3ec881e69a21f114 100644 |
--- a/src/gpu/gl/GrGpuGL_program.cpp |
+++ b/src/gpu/gl/GrGpuGL_program.cpp |
@@ -210,28 +210,6 @@ void GrGpuGL::abandonResources(){ |
#define GL_CALL(X) GR_GL_CALL(this->glInterface(), X) |
-void GrGpuGL::flushPathStencilMatrix() { |
- const SkMatrix& viewMatrix = this->getDrawState().getViewMatrix(); |
- const GrRenderTarget* rt = this->getDrawState().getRenderTarget(); |
- SkISize size; |
- size.set(rt->width(), rt->height()); |
- const SkMatrix& vm = this->getDrawState().getViewMatrix(); |
- |
- if (fHWProjectionMatrixState.fRenderTargetOrigin != rt->origin() || |
- !fHWProjectionMatrixState.fViewMatrix.cheapEqualTo(viewMatrix) || |
- fHWProjectionMatrixState.fRenderTargetSize!= size) { |
- |
- fHWProjectionMatrixState.fViewMatrix = vm; |
- fHWProjectionMatrixState.fRenderTargetSize = size; |
- fHWProjectionMatrixState.fRenderTargetOrigin = rt->origin(); |
- |
- GrGLfloat projectionMatrix[4 * 4]; |
- fHWProjectionMatrixState.getGLMatrix<4>(projectionMatrix); |
- GL_CALL(MatrixMode(GR_GL_PROJECTION)); |
- GL_CALL(LoadMatrixf(projectionMatrix)); |
- } |
-} |
- |
bool GrGpuGL::flushGraphicsState(DrawType type, const GrDeviceCoordTexture* dstCopy) { |
const GrDrawState& drawState = this->getDrawState(); |
@@ -239,7 +217,10 @@ bool GrGpuGL::flushGraphicsState(DrawType type, const GrDeviceCoordTexture* dstC |
SkASSERT(NULL != drawState.getRenderTarget()); |
if (kStencilPath_DrawType == type) { |
- this->flushPathStencilMatrix(); |
+ const GrRenderTarget* rt = this->getDrawState().getRenderTarget(); |
+ SkISize size; |
+ size.set(rt->width(), rt->height()); |
+ this->setProjectionMatrix(drawState.getViewMatrix(), size, rt->origin()); |
} else { |
this->flushMiscFixedFunctionState(); |
@@ -360,24 +341,40 @@ void GrGpuGL::setupGeometry(const DrawInfo& info, size_t* indexOffsetInBytes) { |
GrGLAttribArrayState* attribState = |
fHWGeometryState.bindArrayAndBuffersToDraw(this, vbuf, ibuf); |
- uint32_t usedAttribArraysMask = 0; |
- const GrVertexAttrib* vertexAttrib = this->getDrawState().getVertexAttribs(); |
- int vertexAttribCount = this->getDrawState().getVertexAttribCount(); |
- for (int vertexAttribIndex = 0; vertexAttribIndex < vertexAttribCount; |
- ++vertexAttribIndex, ++vertexAttrib) { |
- |
- usedAttribArraysMask |= (1 << vertexAttribIndex); |
- GrVertexAttribType attribType = vertexAttrib->fType; |
- attribState->set(this, |
- vertexAttribIndex, |
- vbuf, |
- GrGLAttribTypeToLayout(attribType).fCount, |
- GrGLAttribTypeToLayout(attribType).fType, |
- GrGLAttribTypeToLayout(attribType).fNormalized, |
- stride, |
- reinterpret_cast<GrGLvoid*>( |
- vertexOffsetInBytes + vertexAttrib->fOffset)); |
- } |
+ if (!fCurrentProgram->hasVertexShader()) { |
+ int posIdx = this->getDrawState().positionAttributeIndex(); |
+ const GrVertexAttrib* vertexArray = this->getDrawState().getVertexAttribs() + posIdx; |
+ GrVertexAttribType vertexArrayType = vertexArray->fType; |
+ SkASSERT(!GrGLAttribTypeToLayout(vertexArrayType).fNormalized); |
+ SkASSERT(GrGLAttribTypeToLayout(vertexArrayType).fCount == 2); |
+ attribState->setFixedFunctionVertexArray(this, |
+ vbuf, |
+ 2, |
+ GrGLAttribTypeToLayout(vertexArrayType).fType, |
+ stride, |
+ reinterpret_cast<GrGLvoid*>( |
+ vertexOffsetInBytes + vertexArray->fOffset)); |
+ attribState->disableUnusedArrays(this, 0, true); |
+ } else { |
+ uint32_t usedAttribArraysMask = 0; |
+ const GrVertexAttrib* vertexAttrib = this->getDrawState().getVertexAttribs(); |
+ int vertexAttribCount = this->getDrawState().getVertexAttribCount(); |
+ for (int vertexAttribIndex = 0; vertexAttribIndex < vertexAttribCount; |
+ ++vertexAttribIndex, ++vertexAttrib) { |
+ |
+ usedAttribArraysMask |= (1 << vertexAttribIndex); |
+ GrVertexAttribType attribType = vertexAttrib->fType; |
+ attribState->set(this, |
+ vertexAttribIndex, |
+ vbuf, |
+ GrGLAttribTypeToLayout(attribType).fCount, |
+ GrGLAttribTypeToLayout(attribType).fType, |
+ GrGLAttribTypeToLayout(attribType).fNormalized, |
+ stride, |
+ reinterpret_cast<GrGLvoid*>( |
+ vertexOffsetInBytes + vertexAttrib->fOffset)); |
+ } |
- attribState->disableUnusedArrays(this, usedAttribArraysMask, false); |
+ attribState->disableUnusedArrays(this, usedAttribArraysMask, false); |
+ } |
} |