我目前正在游戏中使用着色器,它与nVidia GeForceGT330m配合使用,但是带有ATI 4670(支持ps_4.1)我遇到黑屏。
以下是HLSL效果的来源:
struct Explo
{
float3 position;
float4 color;
float power;
int time;
};
float2 DisplacementScroll;
texture colortexture;
int nb;
Explo explos[5];
float ambient;
float4 ambientColor;
float screenWidth;
float screenHeight;
sampler ColorMap = sampler_state
{
Texture = <colortexture>;
};
float4 CalculateLight(Explo ex, float4 base, float3 pixelPosition)
{
float3 direction = ex.position - pixelPosition;
float distance = 1 / length(ex.position - pixelPosition) * ex.power;
float amount = max(dot(base, normalize(distance)), 0);
return base * distance * amount * ex.color * ambient;
}
float4 Explosion(float2 texCoords : TEXCOORD0) : COLOR
{
//texCoords = tex2D(NormalMap, DisplacementScroll + texCoords / 3)*0.2 - 0.15;
float4 base = tex2D(ColorMap, texCoords);
float3 pixelPosition = float3(screenWidth * (texCoords.x),
screenHeight * (texCoords.y),0);
float4 finalColor = (base * ambientColor * ambient);
for (int i=0; i<nb; i++)
{
finalColor += CalculateLight(explos[i], base, pixelPosition);
}
return finalColor;
}
technique KaBoom
{
pass Pass1
{
PixelShader = compile ps_3_0 Explosion();
}
}
答案 0 :(得分:0)
我记得有过类似的问题。着色器在ATI上无效。问题是顶点和像素着色器被编译为不同的着色器模型(vs_3_0和ps_2_0)。它适用于NVIDIA,但不适用于ATI。在你的情况下,你只是绑定一个像素着色器的传递,谁知道最后一个顶点着色器是什么。
当然,这只有在您确定问题与着色器有关时才有意义,而不是其他问题,例如:你的DIP。
祝你好运