ScarletBlackMarket/sample/SampleVS02_HLSL.txt

81 lines
2.3 KiB
Plaintext

sampler samp0_ : register(s0);
//2 top-level semantics are provided by the engine in the case of 2D render objects:
// WORLD:
// Contains the transformation matrix of the render object.
// VIEWPROJECTION:
// Contains the projection*camera matrix, used for correctly tranforming vertices to screen-space coordinates.
float4x4 g_mViewProj : VIEWPROJECTION;
float frame_;
float2 waveRadius_;
float waveSine_;
float2 enemyPos_;
float2 framePos_;
float3 waveColor_;
static const float RENDER_LEFT = 32.5f / 1024.0f; //mininum render width
static const float RENDER_TOP = 16.5f / 512.0f; //maximum render width
static const float RENDER_RIGHT = 415.5f / 1024.0f; //mininum render height
static const float RENDER_BOTTOM = 463.5f / 512.0f; //maximum render height
static const float2 SCREEN_SPACE = float2(1024.0f, 512.0f);
struct VS_INPUT {
float4 position : POSITION;
float4 diffuse : COLOR0;
float2 texCoord : TEXCOORD0;
};
struct PS_INPUT {
float4 position : POSITION;
float4 diffuse : COLOR0;
float2 texCoord : TEXCOORD0;
float blend : FOG;
};
struct PS_OUTPUT {
float4 color : COLOR0;
};
PS_INPUT mainVS(VS_INPUT inVs) {
PS_INPUT outVs;
float mul_scale = waveRadius_.x / waveRadius_.y;
float2 posVertex = inVs.position.xy * mul_scale;
float dist = length(inVs.position.xy * mul_scale);
outVs.blend = saturate((waveRadius_.x - dist) / waveRadius_.x);
float2 cos_sin = posVertex.xy / dist;
float2 distortPos = cos_sin.xy * waveRadius_.x * min(outVs.blend, 0.22f) * 0.5f * waveSine_;
distortPos.x += (cos_sin.x * outVs.blend) * 16.0f;
distortPos.y += (cos_sin.y * outVs.blend) * 16.0f;
outVs.texCoord = inVs.texCoord * mul_scale + enemyPos_ / SCREEN_SPACE;
outVs.position = mul(float4(posVertex + enemyPos_ + distortPos, inVs.position.zw), g_mViewProj);
outVs.position.zw = (float2)1.0f;
outVs.diffuse = inVs.diffuse;
return outVs;
}
PS_OUTPUT mainPS(PS_INPUT inPs) {
PS_OUTPUT outPs;
inPs.texCoord.x = clamp(inPs.texCoord.x, RENDER_LEFT, RENDER_RIGHT);
inPs.texCoord.y = clamp(inPs.texCoord.y, RENDER_TOP, RENDER_BOTTOM);
float3 colorRGB = tex2D(samp0_, inPs.texCoord).rgb;
colorRGB.rgb -= (1.0f - waveColor_.xyz) * inPs.blend;
outPs.color = float4(colorRGB, 1.0f) * inPs.diffuse;
return outPs;
}
technique Render {
pass P0 {
VertexShader = compile vs_3_0 mainVS();
PixelShader = compile ps_3_0 mainPS();
}
}