我正在尝试编译 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/