【发布时间】:2020-04-27 23:35:46
【问题描述】:
我正在编写一个程序,它大量使用 OpenGL 中的计算着色器(在 Java 中使用 JOGL),它在我的台式计算机上运行良好,但不会链接我笔记本电脑上的着色器。
我目前有一个桌面系统,运行带有 GTX 1060 的 Ubuntu 18.04LTS,它运行时没有问题,但是在我的笔记本电脑上运行时,运行 Ubuntu 18.04LTS,GTX 1650,着色器无法正确链接并打印“错误: 在着色器程序日志中与未编译/非专业着色器链接。
我认为这可能是驱动程序问题,并尝试切换到专有的 nVidia 驱动程序,但没有成功。两个平台都运行相同的 Open-jdk 8。
注意:图形着色器按预期工作,它仅在尝试链接计算着色器时发生,即使使用相同的方法读取源代码,所以我确信那里没有问题。
将着色器链接到程序时出现问题:
int computeShader = gl.glCreateShader(GL4.GL_COMPUTE_SHADER); //Create compute shader
gl.glShaderSource(computeShader, computeShaderSrc.length, computeShaderSrc, null);
gl.glCompileShader(computeShader);
int shaderProg = gl.glCreateProgram(); //Create shader program and attach compute shader
printProgramLog(shaderProg);
System.out.println("Created shader\n");
System.out.println("Attaching shader");
gl.glAttachShader(shaderProg, computeShader);
printProgramLog(shaderProg);
System.out.println("Attached shader\n");
System.out.println("Linking shader");
gl.glLinkProgram(shaderProg);
printProgramLog(shaderProg);
System.out.println("Linked Shader\n");
gl.glDeleteShader(computeShader);
这个输出:
Created shader
Attaching shader
Attached shader
Linking shader
Program Info Log:
error: linking with uncompiled/unspecialized shader
Linked Shader
【问题讨论】:
-
错误最有可能发生在编译时,而不是链接时。程序日志不会显示编译错误。为此,您需要 Shader Info 日志。此外,最好明确检查编译/链接是否与 glGetShaderiv(shader, GL_COMPILE_STATUS, &flag) glGetProgramiv(program, GL_LINK_STATUS, &flag) 一起使用
-
@HughFisher 这是正确的,检查着色器信息日志指出了一些变量初始化问题,这些问题现已解决。您知道为什么它可能在一台设备上出现问题,但在另一台计算机上仍能正常编译吗?
-
@Bash09 如果您需要帮助,请给我们一个 SSCCE。
标签: java opengl shader jogl compute-shader