@@ -145,8 +145,8 @@ uniform float3 _BackColor <
145
145
[Textures and Samplers]
146
146
*/
147
147
148
- CREATE_TEXTURE_POOLED (TempTex0_RGBA8 , BUFFER_SIZE_0, RGBA8, 8 )
149
- CREATE_SRGB_SAMPLER (SampleTempTex0, TempTex0_RGBA8 , LINEAR, MIRROR , MIRROR , MIRROR )
148
+ CREATE_TEXTURE_POOLED (TempTex0_RGBA8_8 , BUFFER_SIZE_0, RGBA8, 8 )
149
+ CREATE_SRGB_SAMPLER (SampleTempTex0, TempTex0_RGBA8_8 , LINEAR, MIRROR , MIRROR , MIRROR )
150
150
151
151
sampler2D CShade_SampleColorTexMirror
152
152
{
@@ -226,70 +226,69 @@ float GetTileCircleLength(Tile Input)
226
226
[Pixel Shaders]
227
227
*/
228
228
229
- float4 PS_Blit (CShade_VS2PS_Quad Input) : SV_TARGET0
230
- {
231
- return tex2D (CShade_SampleColorTex, Input.Tex0);
232
- }
233
-
234
229
#if ENABLE_MONO
235
- float4 PS_Circles (CShade_VS2PS_Quad Input) : SV_TARGET0
230
+ float4 PS_Blit (CShade_VS2PS_Quad Input) : SV_TARGET0
236
231
{
237
- // Precalculate our needed LOD for all channels
238
- float2 TexSize = CShade_GetScreenSizeFromTex (Input.Tex0);
239
- float LOD = max (0.0 , log2 (max (TexSize.x, TexSize.y) / _CircleAmount));
240
-
241
- // Create tiles
242
- Tile MainTiles = GetTiles (Input.Tex0.xy, _Offset);
243
-
244
- // Get texture information
245
- float4 Blocks = tex2Dlod (SampleTempTex0, float4 (GetBlockTex (MainTiles.Index), 0.0 , LOD));
246
- Blocks = (Blocks * _InputMultiplier) + _InputBias;
247
-
248
- float Feature = 0.0 ;
249
-
232
+ float4 Color = tex2D (CShade_SampleColorTex, Input.Tex0);
250
233
switch (_Select)
251
234
{
252
235
case 0 :
253
- Feature = CColor_GetHSVfromRGB (Blocks .rgb).r;
236
+ Color.a = CColor_GetHSVfromRGB (Color .rgb).r;
254
237
break ;
255
238
case 1 :
256
- Feature = CColor_GetHSVfromRGB (Blocks .rgb).g;
239
+ Color.a = CColor_GetHSVfromRGB (Color .rgb).g;
257
240
break ;
258
241
case 2 :
259
- Feature = CColor_GetHSVfromRGB (Blocks .rgb).b;
242
+ Color.a = CColor_GetHSVfromRGB (Color .rgb).b;
260
243
break ;
261
244
case 3 :
262
- Feature = CColor_GetHSLfromRGB (Blocks .rgb).r;
245
+ Color.a = CColor_GetHSLfromRGB (Color .rgb).r;
263
246
break ;
264
247
case 4 :
265
- Feature = CColor_GetHSLfromRGB (Blocks .rgb).g;
248
+ Color.a = CColor_GetHSLfromRGB (Color .rgb).g;
266
249
break ;
267
250
case 5 :
268
- Feature = CColor_GetHSLfromRGB (Blocks .rgb).b;
251
+ Color.a = CColor_GetHSLfromRGB (Color .rgb).b;
269
252
break ;
270
253
case 6 :
271
- Feature = CColor_GetHSIfromRGB (Blocks .rgb).r;
254
+ Color.a = CColor_GetHSIfromRGB (Color .rgb).r;
272
255
break ;
273
256
case 7 :
274
- Feature = CColor_GetHSIfromRGB (Blocks .rgb).g;
257
+ Color.a = CColor_GetHSIfromRGB (Color .rgb).g;
275
258
break ;
276
259
case 8 :
277
- Feature = CColor_GetHSIfromRGB (Blocks .rgb).b;
260
+ Color.a = CColor_GetHSIfromRGB (Color .rgb).b;
278
261
break ;
279
262
default :
280
- Feature = 0 .0 ;
263
+ Color.a = 1 .0 ;
281
264
break ;
282
265
}
283
266
267
+ return Color;
268
+ }
269
+
270
+ float4 PS_Circles (CShade_VS2PS_Quad Input) : SV_TARGET0
271
+ {
272
+ // Precalculate our needed LOD for all channels
273
+ float2 TexSize = CShade_GetScreenSizeFromTex (Input.Tex0);
274
+ float LOD = max (0.0 , log2 (max (TexSize.x, TexSize.y) / _CircleAmount));
275
+
276
+ // Create tiles
277
+ Tile MainTiles = GetTiles (Input.Tex0.xy, _Offset);
278
+
279
+ // Get texture information
280
+ float4 Blocks = tex2Dlod (SampleTempTex0, float4 (GetBlockTex (MainTiles.Index), 0.0 , LOD));
281
+ Blocks.a = (Blocks.a * _InputMultiplier) + _InputBias;
282
+
284
283
// Create the UV for the circles
285
284
float CircleDist = GetTileCircleLength (MainTiles);
286
285
287
286
// Create the circle
288
- float Circles = smoothstep (0.89 - fwidth (CircleDist), 0.9 , CircleDist + Feature );
287
+ float Circles = smoothstep (0.89 - fwidth (CircleDist), 0.9 , CircleDist + Blocks.a );
289
288
290
289
// Mix colors together
291
290
float3 OutputColor = lerp (_FrontColor, _BackColor, Circles);
292
- OutputColor = lerp (OutputColor, _BackColor, saturate (Feature ));
291
+ OutputColor = lerp (OutputColor, _BackColor, saturate (Blocks.a ));
293
292
294
293
// Crop the image
295
294
OutputColor = lerp (_BackColor, OutputColor, MainTiles.Value.x > _Crop.x);
@@ -300,6 +299,11 @@ float4 PS_Blit(CShade_VS2PS_Quad Input) : SV_TARGET0
300
299
return CBlend_OutputChannels (float4 (OutputColor.rgb, _CShadeAlphaFactor));
301
300
}
302
301
#else
302
+ float4 PS_Blit (CShade_VS2PS_Quad Input) : SV_TARGET0
303
+ {
304
+ return tex2D (CShade_SampleColorTex, Input.Tex0);
305
+ }
306
+
303
307
float4 PS_Circles (CShade_VS2PS_Quad Input) : SV_TARGET0
304
308
{
305
309
// Precalculate our needed LOD for all channels
@@ -357,7 +361,7 @@ technique CShade_Circles < ui_tooltip = "Creates circles based on image features
357
361
{
358
362
VertexShader = CShade_VS_Quad;
359
363
PixelShader = PS_Blit;
360
- RenderTarget = TempTex0_RGBA8 ;
364
+ RenderTarget = TempTex0_RGBA8_8 ;
361
365
}
362
366
363
367
pass
0 commit comments