6-1 GRS_Quad_With_Dynamic_Index_Multi_Instance.hlsl 1.4 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
#include "0-1 HDR_COLOR_CONV.hlsli"
#include "0-3 GRS_Scene_CB_Def.hlsli"

Texture2D g_Texture2DArray[] : register(t0);
SamplerState g_smpLinear : register(s0);

struct ST_GRS_HLSL_VS_IN
{
	float4	 m_v4LPosition	 : POSITION;
	float4	 m_v4Color		 : COLOR0;
	float2	 m_v2UV			 : TEXCOORD;
	float4x4 m_mxQuad2World	 : WORLD;
	uint	 m_nTextureIndex : COLOR1;
};

struct ST_GRS_HLSL_PS_IN
{
	float4		m_v4Position	: SV_POSITION;
	float4		m_v4Color		: COLOR0;
	float2		m_v2UV			: TEXCOORD;
	uint		m_nTextureIndex : COLOR1;
};

ST_GRS_HLSL_PS_IN VSMain( ST_GRS_HLSL_VS_IN stVSInput )
{
	ST_GRS_HLSL_PS_IN stVSOutput;

	stVSOutput.m_v4Position = mul(stVSInput.m_v4LPosition, stVSInput.m_mxQuad2World);

	// 下面两句是二选一,一般2D渲染的时候 World 和 View 矩阵都取了单位矩阵,但不排除特殊情况,所以一般还是乘以MVP综合矩阵
	//stVSOutput.m_v4Position = mul(stVSOutput.m_v4Position, g_mxProj);
	stVSOutput.m_v4Position		= mul(stVSOutput.m_v4Position, g_mxWVP);
	
	stVSOutput.m_v4Color		= stVSInput.m_v4Color;
	stVSOutput.m_v2UV			= stVSInput.m_v2UV;	
	stVSOutput.m_nTextureIndex	= stVSInput.m_nTextureIndex;

	return stVSOutput;
}

float4 PSMain(ST_GRS_HLSL_PS_IN stPSInput) : SV_TARGET
{
	//float3 v3SRGBColor 
	//= LinearToSRGB(g_Texture2DArray[stPSInput.m_nTextureIndex].Sample(g_smpLinear, stPSInput.m_v2UV).rgb);
	//return float4(v3SRGBColor,1.0f);

	return float4(g_Texture2DArray[stPSInput.m_nTextureIndex].Sample(g_smpLinear, stPSInput.m_v2UV).rgb,1.0f);
}