2015-05-30 68 views
0

我有一个问题,通过使用统一到我的顶点着色器从C++传递一个浮点数。这个浮动只是为了不断增加自己。通过统一浮点数到顶点着色器opengl

在我的头,我有

float pauto; 
void pautoupdate(int program); 

现在我的CPP

void World::pautoupdate(int program) 
{ 
    pauto += 0.1f; 

    glUniform1f(glGetUniformLocation(program, "pauto"), pauto); 
} 

中在我的顶点着色器被声明为和它只是增加X值

uniform float pauto; 

terrx = Position.x; 
terrx += pauto; 

从这里开始,我没有得到任何结果,我不确定我是否错误地poi nting它或某物。

+2

目前还不清楚这是否会发生,因为您只显示一小部分代码。但请记住,'glUniform *()'在活动程序上设置值。所以你需要在'glUniform *()'之前调用'glUseProgram()'。 –

回答

2

尝试以下操作:

  1. 我假设你展示GLSL程序不整的代码,因为没有主或任何东西。
  2. 检查,当你进入功能
  3. 商店glGetUniformLocation的输出,并检查它的OK
  4. 做一个呼叫glGetError前/后,看是否GL检测到问题是程序设置。

如果你想在各种情况下快速测试和设置着色器,有几种工具可以帮助你做到这一点。在线上,例如ShaderToy(http://www.shadertoy.com)。离线,让我推荐一款我开发的,Tao3D(http://tao3d.sf.net)。

0

GlUniform *应该glUseProgram(程序)和glUseProgram之间(0)被施加:

1.使用着色器
2.设置制服
3.Render东西4.Dispose着色器

这是因为OpenGL必须知道你正在发送制服的女巫节目。

相关问题