1515using namespace geode ::prelude;
1616
1717void loadShaders () {
18-
18+ bool alt = Mod::get ()->getSettingValue <bool >(" alternative-shader" );
19+
1920 std::string fragIcon = R"(
2021 #ifdef GL_ES
2122 precision mediump float;
@@ -35,6 +36,21 @@ void loadShaders() {
3536 gl_FragColor = v_fragmentColor * c;
3637 }
3738 )" ;
39+ if (alt) {
40+ fragIcon = R"(
41+ #ifdef GL_ES
42+ precision mediump float;
43+ #endif
44+
45+ varying vec4 v_fragmentColor;
46+ varying vec2 v_texCoord;
47+ uniform sampler2D CC_Texture0;
48+
49+ void main() {
50+ gl_FragColor = texture2D(CC_Texture0, v_texCoord) * v_fragmentColor;
51+ }
52+ )" ;
53+ }
3854
3955 ShaderCache::get ()->createShader (" icon" , fragIcon);
4056
@@ -59,12 +75,34 @@ void loadShaders() {
5975 gl_FragColor = v_fragmentColor * c;
6076 }
6177 )" ;
78+ if (alt) {
79+ fragOutline = R"(
80+ #ifdef GL_ES
81+ precision mediump float;
82+ #endif
83+
84+ varying vec4 v_fragmentColor;
85+ varying vec2 v_texCoord;
86+ uniform sampler2D CC_Texture0;
87+
88+ void main() {
89+ vec4 c = texture2D(CC_Texture0, v_texCoord);
90+ float brightness = dot(c.rgb, vec3(1./3.)) / c.a;
91+ float isOutline = smoothstep(0.9, 0.0, brightness);
92+ c = vec4(c.a * isOutline);
93+ gl_FragColor = c * v_fragmentColor;
94+ }
95+ )" ;
96+ }
6297
6398 ShaderCache::get ()->createShader (" outline" , fragOutline);
6499};
65100
66101$on_mod(Loaded) {
67102 loadShaders ();
103+ listenForSettingChanges (" alternative-shader" , [](bool ) {
104+ loadShaders ();
105+ });
68106}
69107
70108class $modify(MyGameManager, GameManager) {
@@ -87,6 +125,8 @@ void removeShaders(CCSprite* spr) {
87125void updateSprite (CCSprite* spr, ccColor3B color = {0 , 0 , 0 }) {
88126 if (!spr || color == ccColor3B{0 , 0 , 0 }) return ;
89127
128+ bool alt = Mod::get ()->getSettingValue <bool >(" alternative-shader" );
129+
90130 spr->setCascadeOpacityEnabled (true );
91131
92132 CCSprite* blackOutline = CCSprite::createWithSpriteFrame (spr->displayFrame ());
@@ -100,14 +140,16 @@ void updateSprite(CCSprite* spr, ccColor3B color = {0, 0, 0}) {
100140 prgOutline->setUniformsForBuiltins ();
101141 blackOutline->setShaderProgram (prgOutline);
102142 prgOutline->use ();
103- blackOutline->setBlendFunc ({GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA});
143+ if (!alt)
144+ blackOutline->setBlendFunc ({GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA});
104145 }
105146
106147 if (CCGLProgram* progIcon = ShaderCache::get ()->getProgram (" icon" )) {
107148 progIcon->setUniformsForBuiltins ();
108149 spr->setShaderProgram (progIcon);
109150 progIcon->use ();
110- spr->setBlendFunc ({GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA});
151+ if (!alt)
152+ spr->setBlendFunc ({GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA});
111153 }
112154
113155 spr->removeChildByID (" black_outline" _spr);
0 commit comments