【问题标题】:OpenGL Compute Shader doesn't link on laptopOpenGL Compute Shader 未在笔记本电脑上链接
【发布时间】: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


【解决方案1】:

参考cmets,shader编译问题,设备间不一致。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-27
    • 2022-01-25
    • 2019-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多