【发布时间】:2016-03-01 17:04:01
【问题描述】:
我正在使用几何着色器进行几何放大。 该代码可以在 Windows 和 OS X 中完美运行 Intel 显卡。
我将配置更改为使用我的 Windows 机器上的专用 NVIDIA GPU aaaaaaaaaa 并且......什么都没有。
这段代码:
void testError(std::string src) {
GLenum err = glGetError();
if (err != GL_NO_ERROR){
printf("(%s) Error: %s %d\n", src.c_str(), gluErrorString(err), err);
}
}
...
printf("glIsProgram: %s\n", glIsProgram(shaderProgram)?"True":"false");
glUseProgram(shaderProgram);
testError("GOGO 111");
GLint isLinked = 0;
glGetProgramiv(shaderProgram, GL_LINK_STATUS, (int *)&isLinked);
if (isLinked == GL_FALSE)
{
GLint maxLength = 0;
glGetProgramiv(shaderProgram, GL_INFO_LOG_LENGTH, &maxLength);
//The maxLength includes the NULL character
std::vector<GLchar> infoLog(maxLength);
glGetProgramInfoLog(shaderProgram, maxLength, &maxLength, &infoLog[0]);
printf("Program Not Linked %d:\n %s\n", maxLength, infoLog);
//We don't need the program anymore.
glDeleteProgram(shaderProgram);
//Use the infoLog as you see fit.
//In this simple program, we'll just leave
return 0;
}
输出:
glIsProgram: True
(GOGO 111) Error: invalid operation 1282
Program Not Linked 116:
Ð
Log 也有一个奇怪的行为,因为它没有打印任何内容,但长度为 116。
谢谢。
编辑 这个:
char * infoLog;
glGetProgramiv(shaderProgram, GL_INFO_LOG_LENGTH, &maxLength);
打印出结果。
Program Not Linked 116:
Geometry info
-------------
(0) : error C6033: Hardware limitation reached, can only emit 128 vertices of this size
来自:
const GLchar* geometryShaderSrc = GLSL(
layout(points) in;
layout(triangle_strip, max_vertices = 256) out;
...
英特尔集成 GPU 的硬件(内存?)模仿比 NVIDIA GPU 更少,这很奇怪。 有什么解决方案可以在不减少顶点的情况下解决这个问题?
【问题讨论】:
-
您不需要将 std::vector 转换为 char 数组以供
printf使用吗? -
使用
infoLog.data()作为“程序未链接”printf调用的最后一个参数。 -
当您从 OpenGL Wiki 复制并粘贴该内容时,您是否没有注意到“使用您认为合适的信息日志”。部分? “如你所见”将包括有用的东西,如打印出来。
-
您应该对每个着色器分别使用
glGetShaderInfoLog以查看真正的错误。请参阅complete GL+VAO/VBO+GLSL+shaders example in C++ 了解如何使用它的信息...不仅仅是链接程序...另外,如果您的着色器是问题,为什么您没有在此处复制它以便我们可以看到它... -
感谢@LJᛃ,打印了结果。
标签: c++ visual-studio opengl glsl nvidia