游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3067|回复: 1

求助:GeForce显卡上的GLSL编译错误

[复制链接]

29

主题

157

帖子

163

积分

注册会员

Rank: 2

积分
163
发表于 2008-5-25 13:22:00 | 显示全部楼层 |阅读模式
在nVidia显卡上,GLSL代码编译总是出错。以下为创建vertex shader的代码, 使用了OpenGL2.0的API。
其中m_hVertexShader的类型为GLuint


  1. bool LoadVSCode(const char* strCode)
  2. {
  3.         if(m_hVertexShader == 0)
  4.         {
  5.                 m_hVertexShader        = glCreateShader(GL_VERTEX_SHADER);
  6.         }

  7.         GLint bVSCompiled;

  8.         glShaderSource(m_hVertexShader, 1, &strCode, NULL);
  9.         glCompileShader(m_hVertexShader);

  10.         glGetShaderiv(m_hVertexShader, GL_COMPILE_STATUS, &bVSCompiled); //在此处bVSCompiled的返回值总是为0,说明编译有错误。

  11.         if(bVSCompiled == GL_FALSE)
  12.         {
  13.                 char  strInfoLog[512];
  14.                 glGetShaderInfoLog(m_hVertexShader, 512, NULL, strInfoLog);
  15.                 return false;
  16.         }

  17.         return true;
  18. }

  19. //以下为vertex shader 的代码:

  20. void main()                    
  21. {
  22.    gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
  23.    gl_TexCoord[0] = gl_MultiTexCoord0;
  24. }
复制代码


调用函数glGetShaderInfoLog(m_hVertexShader, 512, NULL, strInfoLog) 得到的错误信息strInfoLog为:
0x0012f0a0 "(6) : error C0000: syntax error, unexpected $undefined at token "<undefined>"
(6) : error C0501: type name expected at token "<undefined>""

以上代码我在nVidia GeForce 6200, GeForce 8400 和 GeForce 9600上测试都是同样的错误.
但是在ATI显卡上却能正常运行.

有人碰到过同样的情况吗?

29

主题

157

帖子

163

积分

注册会员

Rank: 2

积分
163
 楼主| 发表于 2008-5-25 13:43:00 | 显示全部楼层

Re:求助:GeForce显卡上的GLSL编译错误

汗颜啊,原因找到了。我上nVidia网站下了个使用GLSL的例子,Debug了一下发现是因为读完GLSL代码后,没有给strCode加上'\0', ATI的shader编译器能自动识别并处理这个问题, 而nVidia的不行,结果就出现了上述的错误。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-22 10:10

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表