GLSL 着色器在英特尔的集成 GPU 上运行完美,但在 NVIDIA 上没有任何运行
GLSL Shaders run perfect on Intel's integrated GPU but nothing on NVIDIA
我正在使用几何着色器进行几何放大。该代码在 Windows 和 OS X 中与英特尔显卡完美运行。
我更改了配置以使用我的Windows机器上的专用NVIDIA GPUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA无。
此代码:
void testError(std::string src) {
GLenum err = glGetError();
if (err != GL_NO_ERROR){
printf("(%s) Error: %s %dn", src.c_str(), gluErrorString(err), err);
}
}
...
printf("glIsProgram: %sn", 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 %sn", 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:
Ð
日志还有一个奇怪的行为,因为它不打印任何东西,但长度将是 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少。有什么解决方案可以在不减少顶点的情况下解决这个问题吗?
看起来您超出了GEOMETRY_TOTAL_OUTPUT_COMPONENTS
限制。
在 OpenGL 4.4 规范中 - 第 11.3.4.5 节 - 第 388 页
顶点总数与所有顶点之和的乘积 所有活动输出变量的分量不得超过
MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS
的值。 如果确定LinkProgram
将失败 将违反总组件限制。
即max_vertices
不能超过MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS / number_of_components
最低要求详见表23.60 - 第585页
GEOMETRY_TOTAL_OUTPUT_COMPONENTS 1024
看起来你有 8 个分量,所以只能有 128 个顶点。 您必须减少分量数或顶点数。
检查每台设备上的GEOMETRY_TOTAL_OUTPUT_COMPONENTS
值以确保。
相关文章:
- 运行同一解决方案的另一个项目的项目
- CMake-按正确顺序将项目与C运行时对象文件链接
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- 代码在main()中运行,但在函数中出现错误
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 试试完美的正方形,你能给点小费吗
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何在运行中期切换GTK CSS style_context
- C++ - 代码在Visual Studio中完美运行,但命令行中的.exe不断崩溃
- 我的 c++ 程序不打印任何字符,但是如果我将它们更改为 int,代码可以完美运行
- C++程序在Linux上完美运行,但不能在Windows上运行
- 如何检查程序是否由Windows服务启动和完美运行
- Simplecrypt让我的QT应用程序在OS X Mountain Lion上崩溃,但在Windows上完美运行
- 当我的应用程序无法在调试模式下运行,但 exe 文件可以完美运行时,这意味着什么?
- 此代码在代码块中完美运行,但在 ideone.com 时出现运行时错误
- GLSL 着色器在英特尔的集成 GPU 上运行完美,但在 NVIDIA 上没有任何运行
- MSVC 中"vector<bool> iterator not dereferencable"错误,但在使用 g++ 编译时可以完美运行
- OpenGL代码在IDE, CodeXL和GPU PerfStudio中完美运行,但如果从Windows启动则给出空白屏
- 非常奇怪的行为:我的c++程序突然退出,但它在Eclipse CDT的调试模式下完美地运行到了最后