palette crush effect
							parent
							
								
									b1395babfe
								
							
						
					
					
						commit
						2c113ed642
					
				
										
											Binary file not shown.
										
									
								
							|  | @ -0,0 +1,66 @@ | ||||||
|  | #include "Macros.fxh" | ||||||
|  | 
 | ||||||
|  | #define FLT_MAX 3.402823466e+38 | ||||||
|  | 
 | ||||||
|  | DECLARE_TEXTURE(Texture, 0); | ||||||
|  | DECLARE_TEXTURE(Palette, 1); | ||||||
|  | 
 | ||||||
|  | BEGIN_CONSTANTS | ||||||
|  | 
 | ||||||
|  | 	int PaletteWidth   _ps(c0)   _cb(c0); | ||||||
|  | 
 | ||||||
|  | END_CONSTANTS | ||||||
|  | 
 | ||||||
|  | struct VertexInput | ||||||
|  | { | ||||||
|  | 	float4 Position : POSITION; | ||||||
|  | 	float2 TexCoord : TEXCOORD; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | struct PixelInput | ||||||
|  | { | ||||||
|  | 	float4 Position : SV_POSITION; | ||||||
|  | 	float2 TexCoord : TEXCOORD0; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | PixelInput main_vs(VertexInput input) | ||||||
|  | { | ||||||
|  | 	PixelInput output; | ||||||
|  | 
 | ||||||
|  | 	output.Position = input.Position; | ||||||
|  | 	output.TexCoord = input.TexCoord; | ||||||
|  | 
 | ||||||
|  | 	return output; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | float4 main_ps(PixelInput input) : SV_TARGET0 | ||||||
|  | { | ||||||
|  | 	float4 sampled = SAMPLE_TEXTURE(Texture, input.TexCoord); | ||||||
|  | 
 | ||||||
|  | 	float3 sampled_color = sampled.rgb; | ||||||
|  | 	 | ||||||
|  | 	float3 closest_color = float3(0, 0, 0); | ||||||
|  | 	float closest_dist = FLT_MAX; | ||||||
|  | 
 | ||||||
|  | 	for (int i = 0; i < PaletteWidth; i++) | ||||||
|  | 	{ | ||||||
|  | 		float3 palette_color = SAMPLE_TEXTURE(Palette, float2(i / (float)PaletteWidth, 0)); | ||||||
|  | 		float dist = distance(palette_color, sampled_color); | ||||||
|  | 		if (dist < closest_dist) | ||||||
|  | 		{ | ||||||
|  | 			closest_dist = dist; | ||||||
|  | 			closest_color = palette_color; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return float4(closest_color, sampled.a); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | Technique PaletteCrush | ||||||
|  | { | ||||||
|  | 	Pass | ||||||
|  | 	{ | ||||||
|  | 		VertexShader = compile vs_3_0 main_vs(); | ||||||
|  | 		PixelShader = compile ps_3_0 main_ps(); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | @ -0,0 +1,51 @@ | ||||||
|  | using Microsoft.Xna.Framework.Graphics; | ||||||
|  | 
 | ||||||
|  | namespace Kav | ||||||
|  | { | ||||||
|  |     public class PaletteCrushEffect : Effect | ||||||
|  |     { | ||||||
|  |         EffectParameter textureParam; | ||||||
|  |         EffectParameter paletteParam; | ||||||
|  |         EffectParameter paletteWidthParam; | ||||||
|  | 
 | ||||||
|  |         Texture2D texture; | ||||||
|  |         Texture2D palette; | ||||||
|  | 
 | ||||||
|  |         int paletteWidth; | ||||||
|  | 
 | ||||||
|  |         public Texture2D Texture | ||||||
|  |         { | ||||||
|  |             get { return texture; } | ||||||
|  |             set  | ||||||
|  |             {  | ||||||
|  |                 texture = value; | ||||||
|  |                 textureParam.SetValue(texture);  | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public Texture2D Palette | ||||||
|  |         { | ||||||
|  |             get { return palette; } | ||||||
|  |             set | ||||||
|  |             { | ||||||
|  |                 palette = value; | ||||||
|  |                 paletteWidth = palette.Width; | ||||||
|  |                 paletteParam.SetValue(palette); | ||||||
|  |                 paletteWidthParam.SetValue(paletteWidth); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public PaletteCrushEffect(GraphicsDevice graphicsDevice) : base(graphicsDevice, Resources.PaletteCrushEffect) | ||||||
|  |         { | ||||||
|  |             CacheEffectParameters(); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         void CacheEffectParameters() | ||||||
|  |         { | ||||||
|  |             textureParam = Parameters["Texture"]; | ||||||
|  |             paletteParam = Parameters["Palette"]; | ||||||
|  | 
 | ||||||
|  |             paletteWidthParam = Parameters["PaletteWidth"]; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -58,6 +58,9 @@ | ||||||
|     <EmbeddedResource Include="Effects\FXB\DiffuseLitSpriteEffect.fxb"> |     <EmbeddedResource Include="Effects\FXB\DiffuseLitSpriteEffect.fxb"> | ||||||
|       <LogicalName>Kav.Resources.DiffuseLitSpriteEffect.fxb</LogicalName> |       <LogicalName>Kav.Resources.DiffuseLitSpriteEffect.fxb</LogicalName> | ||||||
| 		</EmbeddedResource> | 		</EmbeddedResource> | ||||||
|  |     <EmbeddedResource Include="Effects\FXB\PaletteCrushEffect.fxb"> | ||||||
|  |       <LogicalName>Kav.Resources.PaletteCrushEffect.fxb</LogicalName> | ||||||
|  | 		</EmbeddedResource> | ||||||
|     <EmbeddedResource Include="Models\UnitCube.glb"> |     <EmbeddedResource Include="Models\UnitCube.glb"> | ||||||
|       <LogicalName>Kav.Resources.UnitCube.glb</LogicalName> |       <LogicalName>Kav.Resources.UnitCube.glb</LogicalName> | ||||||
| 		</EmbeddedResource> | 		</EmbeddedResource> | ||||||
|  |  | ||||||
|  | @ -58,6 +58,9 @@ | ||||||
|     <EmbeddedResource Include="Effects\FXB\DiffuseLitSpriteEffect.fxb"> |     <EmbeddedResource Include="Effects\FXB\DiffuseLitSpriteEffect.fxb"> | ||||||
|       <LogicalName>Kav.Resources.DiffuseLitSpriteEffect.fxb</LogicalName> |       <LogicalName>Kav.Resources.DiffuseLitSpriteEffect.fxb</LogicalName> | ||||||
| 		</EmbeddedResource> | 		</EmbeddedResource> | ||||||
|  |     <EmbeddedResource Include="Effects\FXB\PaletteCrushEffect.fxb"> | ||||||
|  |       <LogicalName>Kav.Resources.PaletteCrushEffect.fxb</LogicalName> | ||||||
|  | 		</EmbeddedResource> | ||||||
|     <EmbeddedResource Include="Models\UnitCube.glb"> |     <EmbeddedResource Include="Models\UnitCube.glb"> | ||||||
|       <LogicalName>Kav.Resources.UnitCube.glb</LogicalName> |       <LogicalName>Kav.Resources.UnitCube.glb</LogicalName> | ||||||
| 		</EmbeddedResource> | 		</EmbeddedResource> | ||||||
|  |  | ||||||
|  | @ -180,7 +180,7 @@ namespace Kav | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         private IEnumerable<(MeshSprite, Matrix)> BillboardTransforms( |         private static IEnumerable<(MeshSprite, Matrix)> BillboardTransforms( | ||||||
|             PerspectiveCamera camera, |             PerspectiveCamera camera, | ||||||
|             IEnumerable<(MeshSprite, SpriteBillboardConstraint, Matrix)> meshSpriteBillboardTransforms |             IEnumerable<(MeshSprite, SpriteBillboardConstraint, Matrix)> meshSpriteBillboardTransforms | ||||||
|         ) { |         ) { | ||||||
|  |  | ||||||
							
								
								
									
										13
									
								
								Resources.cs
								
								
								
								
							
							
						
						
									
										13
									
								
								Resources.cs
								
								
								
								
							|  | @ -171,6 +171,18 @@ namespace Kav | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         public static byte[] PaletteCrushEffect | ||||||
|  |         { | ||||||
|  |             get | ||||||
|  |             { | ||||||
|  |                 if (paletteCrushEffect == null) | ||||||
|  |                 { | ||||||
|  |                     paletteCrushEffect = GetResource("PaletteCrushEffect.fxb"); | ||||||
|  |                 } | ||||||
|  |                 return paletteCrushEffect; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         public static byte[] UnitCubeModel |         public static byte[] UnitCubeModel | ||||||
|         { |         { | ||||||
|             get |             get | ||||||
|  | @ -197,6 +209,7 @@ namespace Kav | ||||||
|         private static byte[] linearDepthEffectInstanced; |         private static byte[] linearDepthEffectInstanced; | ||||||
|         private static byte[] skyboxEffect; |         private static byte[] skyboxEffect; | ||||||
|         private static byte[] diffuseLitSpriteEffect; |         private static byte[] diffuseLitSpriteEffect; | ||||||
|  |         private static byte[] paletteCrushEffect; | ||||||
| 
 | 
 | ||||||
|         private static byte[] unitCubeModel; |         private static byte[] unitCubeModel; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue