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

Side by Side Diff: src/effects/SkLightingShader.cpp

Issue 1270533003: Minor cleanup of SkLightingShader (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: update Created 5 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/ports/SkGlobalInitialization_chromium.cpp » ('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 2015 Google Inc. 3 * Copyright 2015 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 #include "SkBitmapProcState.h" 9 #include "SkBitmapProcState.h"
10 #include "SkColor.h" 10 #include "SkColor.h"
11 #include "SkEmptyShader.h" 11 #include "SkEmptyShader.h"
12 #include "SkErrorInternals.h" 12 #include "SkErrorInternals.h"
13 #include "SkLightingShader.h" 13 #include "SkLightingShader.h"
14 #include "SkMathPriv.h" 14 #include "SkMathPriv.h"
15 #include "SkReadBuffer.h" 15 #include "SkReadBuffer.h"
16 #include "SkWriteBuffer.h" 16 #include "SkWriteBuffer.h"
17 17
18 //////////////////////////////////////////////////////////////////////////////// /////////// 18 ////////////////////////////////////////////////////////////////////////////
19 19
20 /* 20 /*
21 SkLightingShader TODOs: 21 SkLightingShader TODOs:
22 support other than clamp mode 22 support other than clamp mode
23 allow 'diffuse' & 'normal' to be of different dimensions? 23 allow 'diffuse' & 'normal' to be of different dimensions?
24 support different light types 24 support different light types
25 support multiple lights 25 support multiple lights
26 enforce normal map is 4 channel 26 enforce normal map is 4 channel
27 use SkImages instead if SkBitmaps 27 use SkImages instead if SkBitmaps
28 vec3 for ambient and light-color 28 vec3 for ambient and light-color
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
86 86
87 private: 87 private:
88 SkBitmapProcState* fDiffuseState; 88 SkBitmapProcState* fDiffuseState;
89 SkBitmapProcState* fNormalState; 89 SkBitmapProcState* fNormalState;
90 uint32_t fFlags; 90 uint32_t fFlags;
91 91
92 typedef SkShader::Context INHERITED; 92 typedef SkShader::Context INHERITED;
93 }; 93 };
94 94
95 SK_TO_STRING_OVERRIDE() 95 SK_TO_STRING_OVERRIDE()
96 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(LightingShader) 96 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkLightingShaderImpl)
97 97
98 protected: 98 protected:
99 void flatten(SkWriteBuffer&) const override; 99 void flatten(SkWriteBuffer&) const override;
100 Context* onCreateContext(const ContextRec&, void*) const override; 100 Context* onCreateContext(const ContextRec&, void*) const override;
101 101
102 private: 102 private:
103 SkBitmap fDiffuseMap; 103 SkBitmap fDiffuseMap;
104 SkBitmap fNormalMap; 104 SkBitmap fNormalMap;
105 SkLightingShader::Light fLight; 105 SkLightingShader::Light fLight;
106 SkColor fAmbientColor; // linear (unpremul) color 106 SkColor fAmbientColor; // linear (unpremul) color
107 107
108 friend class SkLightingShader;
109
108 typedef SkShader INHERITED; 110 typedef SkShader INHERITED;
109 }; 111 };
110 112
111 //////////////////////////////////////////////////////////////////////////// 113 ////////////////////////////////////////////////////////////////////////////
112 114
113 #if SK_SUPPORT_GPU 115 #if SK_SUPPORT_GPU
114 116
115 #include "GrCoordTransform.h" 117 #include "GrCoordTransform.h"
116 #include "GrFragmentProcessor.h" 118 #include "GrFragmentProcessor.h"
117 #include "GrTextureAccess.h" 119 #include "GrTextureAccess.h"
(...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after
440 } 442 }
441 443
442 diffMProc(*fDiffuseState, tmpColor, n, x, y); 444 diffMProc(*fDiffuseState, tmpColor, n, x, y);
443 diffSProc(*fDiffuseState, tmpColor, n, tmpColor2); 445 diffSProc(*fDiffuseState, tmpColor, n, tmpColor2);
444 446
445 normalMProc(*fNormalState, tmpNormal, n, x, y); 447 normalMProc(*fNormalState, tmpNormal, n, x, y);
446 normalSProc(*fNormalState, tmpNormal, n, tmpNormal2); 448 normalSProc(*fNormalState, tmpNormal, n, tmpNormal2);
447 449
448 for (int i = 0; i < n; ++i) { 450 for (int i = 0; i < n; ++i) {
449 SkASSERT(0xFF == SkColorGetA(tmpNormal2[i])); // opaque -> unpremul 451 SkASSERT(0xFF == SkColorGetA(tmpNormal2[i])); // opaque -> unpremul
450 norm.set(SkIntToScalar(SkColorGetR(tmpNormal2[i]))-127.0f, 452 norm.set(SkIntToScalar(SkGetPackedR32(tmpNormal2[i]))-127.0f,
451 SkIntToScalar(SkColorGetG(tmpNormal2[i]))-127.0f, 453 SkIntToScalar(SkGetPackedG32(tmpNormal2[i]))-127.0f,
452 SkIntToScalar(SkColorGetB(tmpNormal2[i]))-127.0f); 454 SkIntToScalar(SkGetPackedB32(tmpNormal2[i]))-127.0f);
453 norm.normalize(); 455 norm.normalize();
454 456
455 SkColor diffColor = SkUnPreMultiply::PMColorToColor(tmpColor2[i]); 457 SkColor diffColor = SkUnPreMultiply::PMColorToColor(tmpColor2[i]);
456 NdotL = norm.dot(lightShader.fLight.fDirection); 458 NdotL = norm.dot(lightShader.fLight.fDirection);
457 459
458 // This is all done in linear unpremul color space 460 // This is all done in linear unpremul color space
459 r = light(SkColorGetR(lightShader.fLight.fColor), SkColorGetR(diffCo lor), NdotL, 461 r = light(SkColorGetR(lightShader.fLight.fColor), SkColorGetR(diffCo lor), NdotL,
460 SkColorGetR(lightShader.fAmbientColor)); 462 SkColorGetR(lightShader.fAmbientColor));
461 g = light(SkColorGetG(lightShader.fLight.fColor), SkColorGetG(diffCo lor), NdotL, 463 g = light(SkColorGetG(lightShader.fLight.fColor), SkColorGetG(diffCo lor), NdotL,
462 SkColorGetG(lightShader.fAmbientColor)); 464 SkColorGetG(lightShader.fAmbientColor));
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
575 normal.isNull() || bitmap_is_too_big(normal) || 577 normal.isNull() || bitmap_is_too_big(normal) ||
576 diffuse.width() != normal.width() || 578 diffuse.width() != normal.width() ||
577 diffuse.height() != normal.height()) { 579 diffuse.height() != normal.height()) {
578 return nullptr; 580 return nullptr;
579 } 581 }
580 582
581 return SkNEW_ARGS(SkLightingShaderImpl, (diffuse, normal, light, ambient, lo calMatrix)); 583 return SkNEW_ARGS(SkLightingShaderImpl, (diffuse, normal, light, ambient, lo calMatrix));
582 } 584 }
583 585
584 /////////////////////////////////////////////////////////////////////////////// 586 ///////////////////////////////////////////////////////////////////////////////
587
588 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingShader)
589 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkLightingShaderImpl)
590 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END
591
592 ///////////////////////////////////////////////////////////////////////////////
OLDNEW
« no previous file with comments | « no previous file | src/ports/SkGlobalInitialization_chromium.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698