Files
wagic/JGE/src/DirectX/BasicSprites.Instancing.vs.hlsl
2013-12-17 22:01:55 +01:00

52 lines
1.5 KiB
HLSL

// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
//
// Copyright (c) Microsoft Corporation. All rights reserved
//----------------------------------------------------------------------
cbuffer RenderTargetInfoCB
{
float2 renderTargetSize;
};
struct VertexShaderInput
{
float2 pos : POSITION;
float2 tex : TEXCOORD0;
float2 origin : TRANSFORM0;
float2 offset : TRANSFORM1;
float rotation : TRANSFORM2;
float4 color : COLOR0;
};
struct PixelShaderInput
{
float4 pos : SV_POSITION;
float2 tex : TEXCOORD0;
float4 color : COLOR0;
};
// This shader takes a fixed-position vertex buffer, and using per-sprite
// instance data, transforms the vertices so that the sprite is rendered
// at the desired position, rotation, and scale.
PixelShaderInput main(VertexShaderInput input)
{
PixelShaderInput ret;
float sinRotation;
float cosRotation;
sincos(input.rotation, sinRotation, cosRotation);
float2 posDelta = input.pos * input.offset;
posDelta = float2(
posDelta.x * cosRotation - posDelta.y * sinRotation,
posDelta.x * sinRotation + posDelta.y * cosRotation
);
posDelta /= renderTargetSize;
ret.pos = float4(input.origin + posDelta, 0.5f, 1.0f);
ret.tex = input.tex;
ret.color = input.color;
return ret;
}