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

Side by Side Diff: src/effects/gradients/SkGradientShader.cpp

Issue 2221133002: Refactor various gradient effect classes (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Brian's suggestions Created 4 years, 4 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
« no previous file with comments | « no previous file | src/effects/gradients/SkGradientShaderPriv.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 * Copyright 2006 The Android Open Source Project 2 * Copyright 2006 The Android Open Source Project
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "Sk4fLinearGradient.h" 8 #include "Sk4fLinearGradient.h"
9 #include "SkGradientShaderPriv.h" 9 #include "SkGradientShaderPriv.h"
10 #include "SkLinearGradient.h" 10 #include "SkLinearGradient.h"
(...skipping 893 matching lines...) Expand 10 before | Expand all | Expand 10 after
904 904
905 #include "effects/GrTextureStripAtlas.h" 905 #include "effects/GrTextureStripAtlas.h"
906 #include "GrContext.h" 906 #include "GrContext.h"
907 #include "GrInvariantOutput.h" 907 #include "GrInvariantOutput.h"
908 #include "gl/GrGLContext.h" 908 #include "gl/GrGLContext.h"
909 #include "glsl/GrGLSLFragmentShaderBuilder.h" 909 #include "glsl/GrGLSLFragmentShaderBuilder.h"
910 #include "glsl/GrGLSLProgramDataManager.h" 910 #include "glsl/GrGLSLProgramDataManager.h"
911 #include "glsl/GrGLSLUniformHandler.h" 911 #include "glsl/GrGLSLUniformHandler.h"
912 #include "SkGr.h" 912 #include "SkGr.h"
913 913
914 GrGLGradientEffect::GrGLGradientEffect() 914 GrGradientEffect::GLSLProcessor::GLSLProcessor()
915 : fCachedYCoord(SK_ScalarMax) { 915 : fCachedYCoord(SK_ScalarMax) {
916 } 916 }
917 917
918 void GrGLGradientEffect::emitUniforms(GrGLSLUniformHandler* uniformHandler, 918 void GrGradientEffect::GLSLProcessor::emitUniforms(GrGLSLUniformHandler* uniform Handler,
919 const GrGradientEffect& ge) { 919 const GrGradientEffect& ge) {
920 920
921 if (SkGradientShaderBase::kTwo_GpuColorType == ge.getColorType()) { // 2 Col or case 921 if (SkGradientShaderBase::kTwo_GpuColorType == ge.getColorType()) { // 2 Col or case
922 fColorStartUni = uniformHandler->addUniform(kFragment_GrShaderFlag, 922 fColorStartUni = uniformHandler->addUniform(kFragment_GrShaderFlag,
923 kVec4f_GrSLType, kDefault_Gr SLPrecision, 923 kVec4f_GrSLType, kDefault_Gr SLPrecision,
924 "GradientStartColor"); 924 "GradientStartColor");
925 fColorEndUni = uniformHandler->addUniform(kFragment_GrShaderFlag, 925 fColorEndUni = uniformHandler->addUniform(kFragment_GrShaderFlag,
926 kVec4f_GrSLType, kDefault_GrSL Precision, 926 kVec4f_GrSLType, kDefault_GrSL Precision,
927 "GradientEndColor"); 927 "GradientEndColor");
928 928
929 } else if (SkGradientShaderBase::kThree_GpuColorType == ge.getColorType()) { // 3 Color Case 929 } else if (SkGradientShaderBase::kThree_GpuColorType == ge.getColorType()) { // 3 Color Case
(...skipping 29 matching lines...) Expand all
959 const SkColor* color){ 959 const SkColor* color){
960 float a = SkColorGetA(*color) / 255.f; 960 float a = SkColorGetA(*color) / 255.f;
961 float aDiv255 = a / 255.f; 961 float aDiv255 = a / 255.f;
962 pdman.set4f(uni, 962 pdman.set4f(uni,
963 SkColorGetR(*color) * aDiv255, 963 SkColorGetR(*color) * aDiv255,
964 SkColorGetG(*color) * aDiv255, 964 SkColorGetG(*color) * aDiv255,
965 SkColorGetB(*color) * aDiv255, 965 SkColorGetB(*color) * aDiv255,
966 a); 966 a);
967 } 967 }
968 968
969 void GrGLGradientEffect::onSetData(const GrGLSLProgramDataManager& pdman, 969 void GrGradientEffect::GLSLProcessor::onSetData(const GrGLSLProgramDataManager& pdman,
970 const GrProcessor& processor) { 970 const GrProcessor& processor) {
971 971
972 const GrGradientEffect& e = processor.cast<GrGradientEffect>(); 972 const GrGradientEffect& e = processor.cast<GrGradientEffect>();
973 973
974 974
975 if (SkGradientShaderBase::kTwo_GpuColorType == e.getColorType()){ 975 if (SkGradientShaderBase::kTwo_GpuColorType == e.getColorType()){
976 976
977 if (GrGradientEffect::kBeforeInterp_PremulType == e.getPremulType()) { 977 if (GrGradientEffect::kBeforeInterp_PremulType == e.getPremulType()) {
978 set_mul_color_uni(pdman, fColorStartUni, e.getColors(0)); 978 set_mul_color_uni(pdman, fColorStartUni, e.getColors(0));
979 set_mul_color_uni(pdman, fColorEndUni, e.getColors(1)); 979 set_mul_color_uni(pdman, fColorEndUni, e.getColors(1));
980 } else { 980 } else {
(...skipping 16 matching lines...) Expand all
997 997
998 SkScalar yCoord = e.getYCoord(); 998 SkScalar yCoord = e.getYCoord();
999 if (yCoord != fCachedYCoord) { 999 if (yCoord != fCachedYCoord) {
1000 pdman.set1f(fFSYUni, yCoord); 1000 pdman.set1f(fFSYUni, yCoord);
1001 fCachedYCoord = yCoord; 1001 fCachedYCoord = yCoord;
1002 } 1002 }
1003 } 1003 }
1004 } 1004 }
1005 1005
1006 1006
1007 uint32_t GrGLGradientEffect::GenBaseGradientKey(const GrProcessor& processor) { 1007 uint32_t GrGradientEffect::GLSLProcessor::GenBaseGradientKey(const GrProcessor& processor) {
1008 const GrGradientEffect& e = processor.cast<GrGradientEffect>(); 1008 const GrGradientEffect& e = processor.cast<GrGradientEffect>();
1009 1009
1010 uint32_t key = 0; 1010 uint32_t key = 0;
1011 1011
1012 if (SkGradientShaderBase::kTwo_GpuColorType == e.getColorType()) { 1012 if (SkGradientShaderBase::kTwo_GpuColorType == e.getColorType()) {
1013 key |= kTwoColorKey; 1013 key |= kTwoColorKey;
1014 } else if (SkGradientShaderBase::kThree_GpuColorType == e.getColorType()) { 1014 } else if (SkGradientShaderBase::kThree_GpuColorType == e.getColorType()) {
1015 key |= kThreeColorKey; 1015 key |= kThreeColorKey;
1016 } 1016 }
1017 1017
1018 if (GrGradientEffect::kBeforeInterp_PremulType == e.getPremulType()) { 1018 if (GrGradientEffect::kBeforeInterp_PremulType == e.getPremulType()) {
1019 key |= kPremulBeforeInterpKey; 1019 key |= kPremulBeforeInterpKey;
1020 } 1020 }
1021 1021
1022 return key; 1022 return key;
1023 } 1023 }
1024 1024
1025 void GrGLGradientEffect::emitColor(GrGLSLFPFragmentBuilder* fragBuilder, 1025 void GrGradientEffect::GLSLProcessor::emitColor(GrGLSLFPFragmentBuilder* fragBui lder,
1026 GrGLSLUniformHandler* uniformHandler, 1026 GrGLSLUniformHandler* uniformHan dler,
1027 const GrGLSLCaps* glslCaps, 1027 const GrGLSLCaps* glslCaps,
1028 const GrGradientEffect& ge, 1028 const GrGradientEffect& ge,
1029 const char* gradientTValue, 1029 const char* gradientTValue,
1030 const char* outputColor, 1030 const char* outputColor,
1031 const char* inputColor, 1031 const char* inputColor,
1032 const SamplerHandle* texSamplers) { 1032 const SamplerHandle* texSamplers ) {
1033 if (SkGradientShaderBase::kTwo_GpuColorType == ge.getColorType()){ 1033 if (SkGradientShaderBase::kTwo_GpuColorType == ge.getColorType()){
1034 fragBuilder->codeAppendf("\tvec4 colorTemp = mix(%s, %s, clamp(%s, 0.0, 1.0));\n", 1034 fragBuilder->codeAppendf("\tvec4 colorTemp = mix(%s, %s, clamp(%s, 0.0, 1.0));\n",
1035 uniformHandler->getUniformVariable(fColorStartU ni).c_str(), 1035 uniformHandler->getUniformVariable(fColorStartU ni).c_str(),
1036 uniformHandler->getUniformVariable(fColorEndUni ).c_str(), 1036 uniformHandler->getUniformVariable(fColorEndUni ).c_str(),
1037 gradientTValue); 1037 gradientTValue);
1038 // Note that we could skip this step if both colors are known to be opaq ue. Two 1038 // Note that we could skip this step if both colors are known to be opaq ue. Two
1039 // considerations: 1039 // considerations:
1040 // The gradient SkShader reporting opaque is more restrictive than neces sary in the two pt 1040 // The gradient SkShader reporting opaque is more restrictive than neces sary in the two pt
1041 // case. Make sure the key reflects this optimization (and note that it can use the same 1041 // case. Make sure the key reflects this optimization (and note that it can use the same
1042 // shader as thekBeforeIterp case). This same optimization applies to th e 3 color case 1042 // shader as thekBeforeIterp case). This same optimization applies to th e 3 color case
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
1208 (*stops)[i] = stop; 1208 (*stops)[i] = stop;
1209 stop = i < outColors - 1 ? stop + random->nextUScalar1() * (1.f - st op) : 1.f; 1209 stop = i < outColors - 1 ? stop + random->nextUScalar1() * (1.f - st op) : 1.f;
1210 } 1210 }
1211 } 1211 }
1212 *tm = static_cast<SkShader::TileMode>(random->nextULessThan(SkShader::kTileM odeCount)); 1212 *tm = static_cast<SkShader::TileMode>(random->nextULessThan(SkShader::kTileM odeCount));
1213 1213
1214 return outColors; 1214 return outColors;
1215 } 1215 }
1216 1216
1217 #endif 1217 #endif
OLDNEW
« no previous file with comments | « no previous file | src/effects/gradients/SkGradientShaderPriv.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698