Index: src/gpu/gl/GrGLVertexArray.h |
diff --git a/src/gpu/gl/GrGLVertexArray.h b/src/gpu/gl/GrGLVertexArray.h |
index 7352caf88b66518f66ee6287a56adbef862c4144..5cc7b5fd5bec7593cfd7f46b89acd454b5b157d9 100644 |
--- a/src/gpu/gl/GrGLVertexArray.h |
+++ b/src/gpu/gl/GrGLVertexArray.h |
@@ -49,7 +49,12 @@ static inline const GrGLAttribLayout& GrGLAttribTypeToLayout(GrVertexAttribType |
*/ |
class GrGLAttribArrayState { |
public: |
- explicit GrGLAttribArrayState(int arrayCount = 0) { this->resize(arrayCount); } |
+ explicit GrGLAttribArrayState(int arrayCount = 0) { |
+ this->resize(arrayCount); |
+ // glVertexPointer doesn't have a normalization param. |
+ fFixedFunctionVertexArray.fNormalized = false; |
+ fUnusedFixedFunctionArraysDisabled = false; |
+ } |
void resize(int newCount) { |
fAttribArrayStates.resize_back(newCount); |
@@ -72,17 +77,26 @@ public: |
GrGLsizei stride, |
GrGLvoid* offset); |
+ void setFixedFunctionVertexArray(const GrGpuGL*, |
+ GrGLVertexBuffer*, |
+ GrGLint size, |
+ GrGLenum type, |
+ GrGLsizei stride, |
+ GrGLvoid* offset); |
+ |
/** |
* This function disables vertex attribs not present in the mask. It is assumed that the |
* GrGLAttribArrayState is tracking the state of the currently bound vertex array object. |
*/ |
- void disableUnusedAttribArrays(const GrGpuGL*, uint64_t usedAttribArrayMask); |
+ void disableUnusedArrays(const GrGpuGL*, uint64_t usedAttribArrayMask, bool usingFFVertexArray); |
void invalidate() { |
int count = fAttribArrayStates.count(); |
for (int i = 0; i < count; ++i) { |
fAttribArrayStates[i].invalidate(); |
} |
+ fFixedFunctionVertexArray.invalidate(); |
+ fUnusedFixedFunctionArraysDisabled = false; |
} |
void notifyVertexBufferDelete(GrGLuint id) { |
@@ -93,6 +107,10 @@ public: |
fAttribArrayStates[i].invalidate(); |
} |
} |
+ if (fFixedFunctionVertexArray.fAttribPointerIsValid && |
+ id == fFixedFunctionVertexArray.fVertexBufferID) { |
+ fFixedFunctionVertexArray.invalidate(); |
+ } |
} |
/** |
@@ -122,6 +140,13 @@ private: |
}; |
SkSTArray<16, AttribArrayState, true> fAttribArrayStates; |
+ |
+ // Tracks the array specified by glVertexPointer. |
+ AttribArrayState fFixedFunctionVertexArray; |
+ |
+ // Tracks whether we've disabled the other fixed function arrays that we don't |
+ // use (e.g. glNormalPointer). |
+ bool fUnusedFixedFunctionArraysDisabled; |
}; |
/** |