OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |