当前位置: 首页 > 知识库问答 >
问题:

GLSL不支持的版本

宇文和同
2023-03-14

我试图编译GLSL着色器在LWJGL使用OpenGL。我在MacOS Sierra上。

尝试编译着色器时出现以下错误:

ERROR: 0:1: '' :  version '400' is not supported
ERROR: 0:1: '' : syntax error: #version

着色器代码在Windows上工作,但在macOS上测试时却不能。下面是着色器代码:

#version 400 core

in vec3 position;
in vec2 textureCoords;

out vec2 pass_textureCoords;

uniform mat4 projectionMatrix;
uniform mat4 viewMatrix;

void main(void)
{
    gl_Position = projectionMatrix * viewMatrix * vec4(position, 1.0);
    pass_textureCoords = textureCoords;
}

下面是我如何加载着色器。。。

    private static int loadShader(String file, int type) throws IOException {
        StringBuilder shaderSource = new StringBuilder();
        try (BufferedReader reader = new BufferedReader(new InputStreamReader(
                    ShaderProgram.class.getClassLoader().getResourceAsStream("shaders/" + file))
            )) {

            String line;
            while ((line = reader.readLine()) != null) {
                shaderSource.append(line).append('\n');
            }

            System.out.println(shaderSource.toString());

            int shaderID = GL20.glCreateShader(type);

            GL20.glShaderSource(shaderID, shaderSource);
            GL20.glCompileShader(shaderID);

            if (GL20.glGetShaderi(shaderID, GL20.GL_COMPILE_STATUS) == GL11.GL_FALSE) {
                System.out.println(GL20.glGetShaderInfoLog(shaderID, 500));
                System.err.println("Error compiling shader " + file);
                System.exit(-1);
            }

            return shaderID;
        }
    }

print语句返回正确的输出,但它仍然给我错误。

我在stackoverflow上下搜索了一个解决方案,但每个人都说他们在编译它时没有换行符,我有。我不明白为什么会这样。

共有2个答案

彭弘方
2023-03-14

如果另一个答案不能解决您的问题,我怀疑您正在使用错误的OpenGL版本创建OpenGL上下文。您将需要使用核心配置文件创建上下文——这也意味着不支持遗留函数和特性,因此如果您使用了其中的任何一个,您将需要用更新的等价物替换它们。(核心配置文件不向后兼容。)

施梓
2023-03-14

您好,我不是这里的java专家,我用JOGL做了一些实验,所以可能我不能给您一个正确方向的提示。

MAC上的新行问题如何将新行附加到StringBuilder

第二:

https://www.khronos.org/registry/OpenGL/specs/gl/GLSLangSpec.4.00.pdf

除注释和空白外,#version指令必须首先出现在着色器中。

这是JOGL中看起来像RAW的东西,你看换行符是在version指令之后需要的,其他任何东西都有一个分号作为语句分隔符。

  // 
  // create fragment Shader
  int fragShader = gl4.glCreateShader(GL4.GL_FRAGMENT_SHADER);
  gl4.glShaderSource(fragShader, 1, 
    new String[]{"#version 420 \n"
    +"out vec4 fragColor;"
    +"void main(void) {"
    +"fragColor = vec4(0.2, 0.2, 0.5, 1.0);}" }, null);
    gl4.glCompileShader(fragShader);
 类似资料:
  • 我有一个项目正在使用Java8。 到目前为止,在pom中,我们将源版本和目标版本指定为1.8: 我们希望利用 Java 9 的“-发布”选项,并添加了以下内容: 但是现在我们得到了下面的错误: 我们使用maven 3.5.3,3.8.0版本中的maven-compiler-plugin和Java 10来编译这个项目。 这里怎么了?

  • 我使用的是IntelliJ IDEA Ultimate 2019.3.1。每当我尝试启动任何简单的Java Maven项目(甚至可能是一个简单的Hello World)时,我都会得到以下错误: 通过终端运行,得到以下输出: 通过终端运行,得到以下输出:

  • 问题内容: 我正在尝试构建一个应用程序,但是它给出了一些错误。我的JDK版本如下: 这是我的错误日志: 问题答案: 发生这种情况是因为在编译时JDK较高,而在运行时JDK较低。 以下是版本列表:

  • 问题内容: Hello Hello.html Error 可能是什么问题? 问题答案: 问题是由于Java版本不匹配。参考类参考: Java SE 12 = 56(十六进制0x38) Java SE 11 = 55(十六进制0x37) Java SE 10 = 54 Java SE 9 = 53 Java SE 8 = 52 Java SE 7 = 51 Java SE 6.0 = 50 Java

  • 我在启动install Launcher时遇到这个错误。$JAVA_HOME/bin/java-jar rundeck-launcher-2.8.2.jar 线程“main”java.lang.UnsupportedClassVersionError中出现异常:com/dtoLabs/rundeck/expandrunserver:不支持Major.Minor版本52.0 $JAVA_HOME/b

  • 在生成APK时,我得到了一个错误:项目使用的是一个不受支持的Gradle版本。我正在使用Android Studio3.5版本。 我试图更改build gradle类路径以匹配gradle-wrapper.properties中的distributionUrl,但是错误仍然存在。 首先,在项目级设置中,选择Use default gadle wrapper。 build.gradle文件: