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