Chromium Code Reviews| Index: src/gpu/GrDrawState.h |
| =================================================================== |
| --- src/gpu/GrDrawState.h (revision 8720) |
| +++ src/gpu/GrDrawState.h (working copy) |
| @@ -120,15 +120,15 @@ |
| */ |
| /** |
| - * Sets vertex attributes for next draw. |
| - * |
| - * @param attribs the array of vertex attributes to set. |
| - * @param count the number of attributes being set, limited to kMaxVertexAttribCnt. |
| + * Sets vertex attributes for next draw. The object driving the templatization |
| + * should be a global GrVertexAttrib that is never changed. |
|
bsalomon
2013/04/19 18:25:13
global GrVertexAttrib ^array that is never changed
robertphillips
2013/04/19 19:04:47
Done.
|
| */ |
| - void setVertexAttribs(const GrVertexAttrib attribs[], int count); |
| + template <const GrVertexAttrib A[]> void setVertexAttribs(int count) { |
| + this->setVertexAttribs(A, count); |
| + } |
| - const GrVertexAttrib* getVertexAttribs() const { return fCommon.fVertexAttribs.begin(); } |
| - int getVertexAttribCount() const { return fCommon.fVertexAttribs.count(); } |
| + const GrVertexAttrib* getVertexAttribs() const { return fCommon.fVAPtr; } |
| + int getVertexAttribCount() const { return fCommon.fVACount; } |
| size_t getVertexSize() const; |
| @@ -177,17 +177,20 @@ |
| AutoVertexAttribRestore(GrDrawState* drawState) { |
| GrAssert(NULL != drawState); |
| fDrawState = drawState; |
| - fVertexAttribs = drawState->fCommon.fVertexAttribs; |
| + fVAPtr = drawState->fCommon.fVAPtr; |
| + fVACount = drawState->fCommon.fVACount; |
| fDrawState->setDefaultVertexAttribs(); |
| } |
| ~AutoVertexAttribRestore(){ |
| - fDrawState->fCommon.fVertexAttribs = fVertexAttribs; |
| + fDrawState->fCommon.fVAPtr = fVAPtr; |
| + fDrawState->fCommon.fVACount = fVACount; |
| } |
| private: |
| - GrDrawState* fDrawState; |
| - GrVertexAttribArray<kMaxVertexAttribCnt> fVertexAttribs; |
| + GrDrawState* fDrawState; |
| + const GrVertexAttrib* fVAPtr; |
| + int fVACount; |
| }; |
| /** |
| @@ -1034,19 +1037,20 @@ |
| /** Fields that are identical in GrDrawState and GrDrawState::DeferredState. */ |
| struct CommonState { |
| // These fields are roughly sorted by decreasing likelihood of being different in op== |
| - GrColor fColor; |
| - SkMatrix fViewMatrix; |
| - GrBlendCoeff fSrcBlend; |
| - GrBlendCoeff fDstBlend; |
| - GrColor fBlendConstant; |
| - uint32_t fFlagBits; |
| - GrVertexAttribArray<kMaxVertexAttribCnt> fVertexAttribs; |
| - GrStencilSettings fStencilSettings; |
| - int fFirstCoverageStage; |
| - GrColor fCoverage; |
| - SkXfermode::Mode fColorFilterMode; |
| - GrColor fColorFilterColor; |
| - DrawFace fDrawFace; |
| + GrColor fColor; |
| + SkMatrix fViewMatrix; |
| + GrBlendCoeff fSrcBlend; |
| + GrBlendCoeff fDstBlend; |
| + GrColor fBlendConstant; |
| + uint32_t fFlagBits; |
| + const GrVertexAttrib* fVAPtr; |
| + int fVACount; |
| + GrStencilSettings fStencilSettings; |
| + int fFirstCoverageStage; |
| + GrColor fCoverage; |
| + SkXfermode::Mode fColorFilterMode; |
| + GrColor fColorFilterColor; |
| + DrawFace fDrawFace; |
| // This is simply a different representation of info in fVertexAttribs and thus does |
| // not need to be compared in op==. |
| @@ -1059,7 +1063,9 @@ |
| fDstBlend == other.fDstBlend && |
| fBlendConstant == other.fBlendConstant && |
| fFlagBits == other.fFlagBits && |
| - fVertexAttribs == other.fVertexAttribs && |
| + fVACount == other.fVACount && |
| + // TODO: maybe make this just a pointer comparison? |
| + !memcmp(fVAPtr, other.fVAPtr, fVACount * sizeof(GrVertexAttrib)) && |
| fStencilSettings == other.fStencilSettings && |
| fFirstCoverageStage == other.fFirstCoverageStage && |
| fCoverage == other.fCoverage && |
| @@ -1146,6 +1152,14 @@ |
| CommonState fCommon; |
| GrEffectStage fStages[kNumStages]; |
| + /** |
| + * Sets vertex attributes for next draw. |
| + * |
| + * @param attribs the array of vertex attributes to set. |
| + * @param count the number of attributes being set, limited to kMaxVertexAttribCnt. |
| + */ |
| + void setVertexAttribs(const GrVertexAttrib attribs[], int count); |
| + |
| typedef GrRefCnt INHERITED; |
| }; |