Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3)

Side by Side Diff: src/gpu/GrContext.cpp

Issue 13296005: Revise attribute binding interface (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: Fix fExperimentalGS in GrGLProgramDesc Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/gpu/GrAARectRenderer.cpp ('k') | src/gpu/GrDrawState.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2011 Google Inc. 3 * Copyright 2011 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 9
10 #include "GrContext.h" 10 #include "GrContext.h"
(...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after
351 GrDrawTarget::AutoStateRestore asr(fGpu, GrDrawTarget::kReset_ASRInit); 351 GrDrawTarget::AutoStateRestore asr(fGpu, GrDrawTarget::kReset_ASRInit);
352 GrDrawState* drawState = fGpu->drawState(); 352 GrDrawState* drawState = fGpu->drawState();
353 drawState->setRenderTarget(texture->asRenderTarget()); 353 drawState->setRenderTarget(texture->asRenderTarget());
354 354
355 // if filtering is not desired then we want to ensure all 355 // if filtering is not desired then we want to ensure all
356 // texels in the resampled image are copies of texels from 356 // texels in the resampled image are copies of texels from
357 // the original. 357 // the original.
358 GrTextureParams params(SkShader::kClamp_TileMode, needsFiltering); 358 GrTextureParams params(SkShader::kClamp_TileMode, needsFiltering);
359 drawState->createTextureEffect(0, clampedTexture, SkMatrix::I(), params) ; 359 drawState->createTextureEffect(0, clampedTexture, SkMatrix::I(), params) ;
360 360
361 // position + texture coordinate 361 // position + local coordinate
362 static const GrVertexAttrib kVertexAttribs[] = { 362 static const GrVertexAttrib kVertexAttribs[] = {
363 {kVec2f_GrVertexAttribType, 0}, 363 {kVec2f_GrVertexAttribType, 0, kPosition_GrVertexAttri bBinding},
364 {kVec2f_GrVertexAttribType, sizeof(GrPoint)} 364 {kVec2f_GrVertexAttribType, sizeof(GrPoint), kLocalCoord_GrVertexAtt ribBinding}
365 }; 365 };
366 drawState->setVertexAttribs(kVertexAttribs, SK_ARRAY_COUNT(kVertexAttrib s));
366 367
367 static const GrAttribBindings kAttribBindings = GrDrawState::kLocalCoord s_AttribBindingsBit;
368 drawState->setAttribBindings(kAttribBindings);
369 drawState->setVertexAttribs(kVertexAttribs, SK_ARRAY_COUNT(kVertexAttrib s));
370 drawState->setAttribIndex(GrDrawState::kPosition_AttribIndex, 0);
371 drawState->setAttribIndex(GrDrawState::kLocalCoords_AttribIndex, 1);
372 GrDrawTarget::AutoReleaseGeometry arg(fGpu, 4, 0); 368 GrDrawTarget::AutoReleaseGeometry arg(fGpu, 4, 0);
373 369
374 if (arg.succeeded()) { 370 if (arg.succeeded()) {
375 GrPoint* verts = (GrPoint*) arg.vertices(); 371 GrPoint* verts = (GrPoint*) arg.vertices();
376 verts[0].setIRectFan(0, 0, texture->width(), texture->height(), 2 * sizeof(GrPoint)); 372 verts[0].setIRectFan(0, 0, texture->width(), texture->height(), 2 * sizeof(GrPoint));
377 verts[1].setIRectFan(0, 0, 1, 1, 2 * sizeof(GrPoint)); 373 verts[1].setIRectFan(0, 0, 1, 1, 2 * sizeof(GrPoint));
378 fGpu->drawNonIndexed(kTriangleFan_GrPrimitiveType, 0, 4); 374 fGpu->drawNonIndexed(kTriangleFan_GrPrimitiveType, 0, 4);
379 } 375 }
380 texture->releaseRenderTarget(); 376 texture->releaseRenderTarget();
381 } else { 377 } else {
(...skipping 536 matching lines...) Expand 10 before | Expand all | Expand 10 after
918 GrDrawTarget::AutoReleaseGeometry geo; 914 GrDrawTarget::AutoReleaseGeometry geo;
919 915
920 GrDrawTarget* target = this->prepareToDraw(&paint, BUFFERED_DRAW); 916 GrDrawTarget* target = this->prepareToDraw(&paint, BUFFERED_DRAW);
921 GrDrawState::AutoStageDisable atr(fDrawState); 917 GrDrawState::AutoStageDisable atr(fDrawState);
922 918
923 GrDrawState* drawState = target->drawState(); 919 GrDrawState* drawState = target->drawState();
924 920
925 GrVertexAttribArray<3> attribs; 921 GrVertexAttribArray<3> attribs;
926 size_t currentOffset = 0; 922 size_t currentOffset = 0;
927 int colorOffset = -1, texOffset = -1; 923 int colorOffset = -1, texOffset = -1;
928 GrAttribBindings bindings = GrDrawState::kDefault_AttribBindings;
929 924
930 // set position attribute 925 // set position attribute
931 drawState->setAttribIndex(GrDrawState::kPosition_AttribIndex, attribs.count( )); 926 GrVertexAttrib currAttrib =
932 GrVertexAttrib currAttrib = {kVec2f_GrVertexAttribType, currentOffset}; 927 {kVec2f_GrVertexAttribType, currentOffset, kPosition_GrVertexAttribBindi ng};
933 attribs.push_back(currAttrib); 928 attribs.push_back(currAttrib);
934 currentOffset += sizeof(GrPoint); 929 currentOffset += sizeof(GrPoint);
935 930
936 // set up optional texture coordinate attributes 931 // set up optional texture coordinate attributes
937 if (NULL != texCoords) { 932 if (NULL != texCoords) {
938 bindings |= GrDrawState::kLocalCoords_AttribBindingsBit; 933 currAttrib.set(kVec2f_GrVertexAttribType, currentOffset, kLocalCoord_GrV ertexAttribBinding);
939 drawState->setAttribIndex(GrDrawState::kLocalCoords_AttribIndex, attribs .count());
940 currAttrib.set(kVec2f_GrVertexAttribType, currentOffset);
941 attribs.push_back(currAttrib); 934 attribs.push_back(currAttrib);
942 texOffset = currentOffset; 935 texOffset = currentOffset;
943 currentOffset += sizeof(GrPoint); 936 currentOffset += sizeof(GrPoint);
944 } 937 }
945 938
946 // set up optional color attributes 939 // set up optional color attributes
947 if (NULL != colors) { 940 if (NULL != colors) {
948 bindings |= GrDrawState::kColor_AttribBindingsBit; 941 currAttrib.set(kVec4ub_GrVertexAttribType, currentOffset, kColor_GrVerte xAttribBinding);
949 drawState->setAttribIndex(GrDrawState::kColor_AttribIndex, attribs.count ());
950 currAttrib.set(kVec4ub_GrVertexAttribType, currentOffset);
951 attribs.push_back(currAttrib); 942 attribs.push_back(currAttrib);
952 colorOffset = currentOffset; 943 colorOffset = currentOffset;
953 currentOffset += sizeof(GrColor); 944 currentOffset += sizeof(GrColor);
954 } 945 }
955 946
956 drawState->setVertexAttribs(attribs.begin(), attribs.count()); 947 drawState->setVertexAttribs(attribs.begin(), attribs.count());
957 drawState->setAttribBindings(bindings);
958 948
959 size_t vertexSize = drawState->getVertexSize(); 949 size_t vertexSize = drawState->getVertexSize();
960 GrAssert(vertexSize == currentOffset); 950 GrAssert(vertexSize == currentOffset);
961 if (sizeof(GrPoint) != vertexSize) { 951 if (sizeof(GrPoint) != vertexSize) {
962 if (!geo.set(target, vertexCount, 0)) { 952 if (!geo.set(target, vertexCount, 0)) {
963 GrPrintf("Failed to get space for vertices!\n"); 953 GrPrintf("Failed to get space for vertices!\n");
964 return; 954 return;
965 } 955 }
966 void* curVertex = geo.vertices(); 956 void* curVertex = geo.vertices();
967 957
(...skipping 840 matching lines...) Expand 10 before | Expand all | Expand 10 after
1808 return srcTexture; 1798 return srcTexture;
1809 } 1799 }
1810 } 1800 }
1811 1801
1812 /////////////////////////////////////////////////////////////////////////////// 1802 ///////////////////////////////////////////////////////////////////////////////
1813 #if GR_CACHE_STATS 1803 #if GR_CACHE_STATS
1814 void GrContext::printCacheStats() const { 1804 void GrContext::printCacheStats() const {
1815 fTextureCache->printStats(); 1805 fTextureCache->printStats();
1816 } 1806 }
1817 #endif 1807 #endif
OLDNEW
« no previous file with comments | « src/gpu/GrAARectRenderer.cpp ('k') | src/gpu/GrDrawState.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698