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 511593004: Make setVertexAttribs in GrDrawState take a stride parameter. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years, 3 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
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 347 matching lines...) Expand 10 before | Expand all | Expand 10 after
358 GrDrawState* drawState = fGpu->drawState(); 358 GrDrawState* drawState = fGpu->drawState();
359 drawState->setRenderTarget(texture->asRenderTarget()); 359 drawState->setRenderTarget(texture->asRenderTarget());
360 360
361 // if filtering is not desired then we want to ensure all 361 // if filtering is not desired then we want to ensure all
362 // texels in the resampled image are copies of texels from 362 // texels in the resampled image are copies of texels from
363 // the original. 363 // the original.
364 GrTextureParams params(SkShader::kClamp_TileMode, filter ? GrTexturePara ms::kBilerp_FilterMode : 364 GrTextureParams params(SkShader::kClamp_TileMode, filter ? GrTexturePara ms::kBilerp_FilterMode :
365 GrTexturePara ms::kNone_FilterMode); 365 GrTexturePara ms::kNone_FilterMode);
366 drawState->addColorTextureEffect(clampedTexture, SkMatrix::I(), params); 366 drawState->addColorTextureEffect(clampedTexture, SkMatrix::I(), params);
367 367
368 drawState->setVertexAttribs<gVertexAttribs>(SK_ARRAY_COUNT(gVertexAttrib s)); 368 drawState->setVertexAttribs<gVertexAttribs>(SK_ARRAY_COUNT(gVertexAttrib s),
369 2 * sizeof(SkPoint));
369 370
370 GrDrawTarget::AutoReleaseGeometry arg(fGpu, 4, 0); 371 GrDrawTarget::AutoReleaseGeometry arg(fGpu, 4, 0);
371 372
372 if (arg.succeeded()) { 373 if (arg.succeeded()) {
373 SkPoint* verts = (SkPoint*) arg.vertices(); 374 SkPoint* verts = (SkPoint*) arg.vertices();
374 verts[0].setIRectFan(0, 0, texture->width(), texture->height(), 2 * sizeof(SkPoint)); 375 verts[0].setIRectFan(0, 0, texture->width(), texture->height(), 2 * sizeof(SkPoint));
375 verts[1].setIRectFan(0, 0, 1, 1, 2 * sizeof(SkPoint)); 376 verts[1].setIRectFan(0, 0, 1, 1, 2 * sizeof(SkPoint));
376 fGpu->drawNonIndexed(kTriangleFan_GrPrimitiveType, 0, 4); 377 fGpu->drawNonIndexed(kTriangleFan_GrPrimitiveType, 0, 4);
377 } 378 }
378 } else { 379 } else {
(...skipping 564 matching lines...) Expand 10 before | Expand all | Expand 10 after
943 static void set_vertex_attributes(GrDrawState* drawState, 944 static void set_vertex_attributes(GrDrawState* drawState,
944 const SkPoint* texCoords, 945 const SkPoint* texCoords,
945 const GrColor* colors, 946 const GrColor* colors,
946 int* colorOffset, 947 int* colorOffset,
947 int* texOffset) { 948 int* texOffset) {
948 *texOffset = -1; 949 *texOffset = -1;
949 *colorOffset = -1; 950 *colorOffset = -1;
950 951
951 if (NULL != texCoords && NULL != colors) { 952 if (NULL != texCoords && NULL != colors) {
952 *texOffset = sizeof(SkPoint); 953 *texOffset = sizeof(SkPoint);
953 *colorOffset = 2*sizeof(SkPoint); 954 *colorOffset = 2*sizeof(SkPoint);
bsalomon 2014/08/27 17:46:27 static consts?
egdaniel 2014/08/27 18:33:55 Done.
954 drawState->setVertexAttribs<gPosUVColorAttribs>(3); 955 drawState->setVertexAttribs<gPosUVColorAttribs>(3, 2 * sizeof(SkPoint) + sizeof(SkColor));
955 } else if (NULL != texCoords) { 956 } else if (NULL != texCoords) {
956 *texOffset = sizeof(SkPoint); 957 *texOffset = sizeof(SkPoint);
957 drawState->setVertexAttribs<gPosUVColorAttribs>(2); 958 drawState->setVertexAttribs<gPosUVColorAttribs>(2, 2 * sizeof(SkPoint));
958 } else if (NULL != colors) { 959 } else if (NULL != colors) {
959 *colorOffset = sizeof(SkPoint); 960 *colorOffset = sizeof(SkPoint);
960 drawState->setVertexAttribs<gPosColorAttribs>(2); 961 drawState->setVertexAttribs<gPosColorAttribs>(2, sizeof(SkPoint) + sizeo f(SkColor));
961 } else { 962 } else {
962 drawState->setVertexAttribs<gPosColorAttribs>(1); 963 drawState->setVertexAttribs<gPosColorAttribs>(1, sizeof(SkPoint));
963 } 964 }
964 } 965 }
965 966
966 }; 967 };
967 968
968 void GrContext::drawVertices(const GrPaint& paint, 969 void GrContext::drawVertices(const GrPaint& paint,
969 GrPrimitiveType primitiveType, 970 GrPrimitiveType primitiveType,
970 int vertexCount, 971 int vertexCount,
971 const SkPoint positions[], 972 const SkPoint positions[],
972 const SkPoint texCoords[], 973 const SkPoint texCoords[],
973 const GrColor colors[], 974 const GrColor colors[],
974 const uint16_t indices[], 975 const uint16_t indices[],
975 int indexCount) { 976 int indexCount) {
976 AutoRestoreEffects are; 977 AutoRestoreEffects are;
977 AutoCheckFlush acf(this); 978 AutoCheckFlush acf(this);
978 GrDrawTarget::AutoReleaseGeometry geo; // must be inside AutoCheckFlush scop e 979 GrDrawTarget::AutoReleaseGeometry geo; // must be inside AutoCheckFlush scop e
979 980
980 GrDrawTarget* target = this->prepareToDraw(&paint, BUFFERED_DRAW, &are, &acf ); 981 GrDrawTarget* target = this->prepareToDraw(&paint, BUFFERED_DRAW, &are, &acf );
981 if (NULL == target) { 982 if (NULL == target) {
982 return; 983 return;
983 } 984 }
984 GrDrawState* drawState = target->drawState(); 985 GrDrawState* drawState = target->drawState();
985 986
986 GR_CREATE_TRACE_MARKER("GrContext::drawVertices", target); 987 GR_CREATE_TRACE_MARKER("GrContext::drawVertices", target);
987 988
988 int colorOffset = -1, texOffset = -1; 989 int colorOffset = -1, texOffset = -1;
989 set_vertex_attributes(drawState, texCoords, colors, &colorOffset, &texOffset ); 990 set_vertex_attributes(drawState, texCoords, colors, &colorOffset, &texOffset );
990 991
991 size_t vertexSize = drawState->getVertexSize(); 992 size_t VertexStride = drawState->getVertexStride();
992 if (sizeof(SkPoint) != vertexSize) { 993 if (sizeof(SkPoint) != VertexStride) {
993 if (!geo.set(target, vertexCount, 0)) { 994 if (!geo.set(target, vertexCount, 0)) {
994 GrPrintf("Failed to get space for vertices!\n"); 995 GrPrintf("Failed to get space for vertices!\n");
995 return; 996 return;
996 } 997 }
997 void* curVertex = geo.vertices(); 998 void* curVertex = geo.vertices();
998 999
999 for (int i = 0; i < vertexCount; ++i) { 1000 for (int i = 0; i < vertexCount; ++i) {
1000 *((SkPoint*)curVertex) = positions[i]; 1001 *((SkPoint*)curVertex) = positions[i];
1001 1002
1002 if (texOffset >= 0) { 1003 if (texOffset >= 0) {
1003 *(SkPoint*)((intptr_t)curVertex + texOffset) = texCoords[i]; 1004 *(SkPoint*)((intptr_t)curVertex + texOffset) = texCoords[i];
1004 } 1005 }
1005 if (colorOffset >= 0) { 1006 if (colorOffset >= 0) {
1006 *(GrColor*)((intptr_t)curVertex + colorOffset) = colors[i]; 1007 *(GrColor*)((intptr_t)curVertex + colorOffset) = colors[i];
1007 } 1008 }
1008 curVertex = (void*)((intptr_t)curVertex + vertexSize); 1009 curVertex = (void*)((intptr_t)curVertex + VertexStride);
1009 } 1010 }
1010 } else { 1011 } else {
1011 target->setVertexSourceToArray(positions, vertexCount); 1012 target->setVertexSourceToArray(positions, vertexCount);
1012 } 1013 }
1013 1014
1014 // we don't currently apply offscreen AA to this path. Need improved 1015 // we don't currently apply offscreen AA to this path. Need improved
1015 // management of GrDrawTarget's geometry to avoid copying points per-tile. 1016 // management of GrDrawTarget's geometry to avoid copying points per-tile.
1016 1017
1017 if (NULL != indices) { 1018 if (NULL != indices) {
1018 target->setIndexSourceToArray(indices, indexCount); 1019 target->setIndexSourceToArray(indices, indexCount);
(...skipping 927 matching lines...) Expand 10 before | Expand all | Expand 10 after
1946 fDrawBuffer->removeGpuTraceMarker(marker); 1947 fDrawBuffer->removeGpuTraceMarker(marker);
1947 } 1948 }
1948 } 1949 }
1949 1950
1950 /////////////////////////////////////////////////////////////////////////////// 1951 ///////////////////////////////////////////////////////////////////////////////
1951 #if GR_CACHE_STATS 1952 #if GR_CACHE_STATS
1952 void GrContext::printCacheStats() const { 1953 void GrContext::printCacheStats() const {
1953 fResourceCache->printStats(); 1954 fResourceCache->printStats();
1954 } 1955 }
1955 #endif 1956 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698