gpt4 book ai didi

java - GLSL 不受支持的版本

转载 作者:行者123 更新时间:2023-11-30 07:51:21 25 4
gpt4 key购买 nike

我正在尝试编译 GLSL 着色器以在带有 OpenGL 的 LWJGL 中使用。我在 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;
}
}

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

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

最佳答案

你好,我不是 Java 专家,我使用 JOGL 做了一些实验,所以我可能无法给你提示以在正确的方向上工作。

MAC 上换行的问题 How to append a newline to StringBuilder

第二个:

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

The #version directive must occur in a shader before anything else, except for comments and white space.

这在 JOGL 中看起来像 RAW,您看到在版本指令之后需要换行符,其他所有内容都有一个分号作为语句分隔符。

  // 
// 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);

关于java - GLSL 不受支持的版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47255057/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com