在Ogre3D cg片段着色器中解决“在此配置文件中不支持”功能'地板'

时间:2011-03-06 09:48:59

标签: opengl ogre3d cg

我正在阅读“Ogre3D 1.7 Beginngers指南”这本书。我写了一个cg片段着色器,但遇到编译器抱怨,“功能'地板'不支持此配置文件”。

片段着色器定义在这里:

   fragment_program MyFragmentShader8 cg
{
    source Ogre3DBeginnersGuideShaders.cg
    entry_point MyFragmentShader8
    profiles ps_1_1 arbfp1
}

实施在这里:

void MyFragmentShader8(float2 uv    :TEXCOORD0,
    out float4 color    :COLOR,
    uniform sampler2D texture)
{
    float num = 50;
    float stepsize = 1.0 / num;
    float2 fragment = float2(stepsize * floor(uv.x * num), stepsize * floor(uv.y * num));
    color = tex2D(texture, fragment);
}

3 个答案:

答案 0 :(得分:1)

您可以替换此行:

float2 fragment = float2(stepsize * floor(uv.x * num), stepsize * floor(uv.y * num));

这3行:

int tmp1 = uv.x * num;
int tmp2 = uv.y * num;
float2 fragment = float2(stepsize * tmp1, stepsize * tmp2);

转换为int是一个隐含的楼层()。

答案 1 :(得分:0)

您标记了问题opengl,但是您使用的是directx的个人资料:

profiles ps_1_1 ...

您可以将着色器定义更改为

profiles fp40 fp30 arbfp1

看看你原来的功能是否有效。 这些配置文件记录在nvidia cg编译器附带的用户手册pdf中。

答案 2 :(得分:0)

在您设置的材料中

profiles ps_1_1 ...

就像书中一样,但ps_1_1是directX8,它有一个功能湖

你应该使用

profiles ps_2_0 ...

所以,你将使用directX9