я начинаю изучать некоторые манипуляции с шейдерами с помощью C ++ и HLSL, я использую D3DXCompileShaderFromFile , чтобы выполнить некоторые тесты во время обучения
Мне удалось скомпилировать и запустить несколько VertexShader и PixelShader, отправить некоторые атрибуты, например
float, float2, float3, float4, float4x4, чтобы установить worldMatrix, информацию о цвете и т. д., вот несколько примеров:
void CShader::SetVector4(char name[], Vect4f vect)
{
D3DXVECTOR4 v(vect.x,vect.y,vect.z,vect.w);
D3DXHANDLE h = m_pConstantTable->GetConstantByName(NULL, name);
m_pConstantTable->SetVector(m_pDevice, h, &v);
}
почти то же самое с SetMatrix и SetFloat, например:
myShader->SetVector4("Diffuse",Vect4f(1.0f,0.0f,0.0f,1.0f) );
но я столкнулся с проблемой при этом Basic Light shader
как я могу отправить текстуру моему "pixelShader"? в моем ps объявлен как тип "sampler2d", поэтому я не уверен, что использовать для отправки этой информации
float4 Diffuse;
float4 Ambient;
sampler2D baseMap;
float4 Main(float3 L: TEXCOORD0, float3 N: TEXCOORD1,float2 texCoord: TEXCOORD2 ) : COLOR
{
float facingRatio = dot(L, N);
float4 tex = tex2D( baseMap, texCoord );
return tex * Diffuse * facingRatio + Ambient * tex;
}