Estoy tratando de compilar sombreadores GLSL para usar en LWJGL con OpenGL. Estoy en macOS Sierra.

Recibo el siguiente error al intentar compilar los sombreadores:

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

El código de sombreado funciona en Windows, pero cuando se prueba en macOS no lo hace. Aquí está el código de sombreado:

#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;
}

Así es como estoy cargando la sombreado ...

    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;
        }
    }

La declaración de impresión devuelve la salida correcta, pero todavía me da el error.

He buscado una solución en todo el stackoverflow, pero todos dicen que la están compilando sin saltos de línea, lo que tengo. Estoy confundido en cuanto a por qué ocurre esto.

2
Erouax 13 nov. 2017 a las 02:11

2 respuestas

La mejor respuesta

Hola, no soy un experto en Java, hice algunos experimentos usando JOGL, así que tal vez no pueda darte una pista para trabajar en la dirección correcta.

Un problema con la nueva línea en MAC Cómo agregar una nueva línea a StringBuilder

Segunda:

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

La directiva #version debe aparecer en un sombreador antes que cualquier otra cosa, excepto los comentarios y los espacios en blanco.

Esto es lo que parece RAW en JOGL. Usted ve que la nueva línea es necesaria después de la directiva de versión, todo lo demás tiene un punto y coma como separadores de declaraciones.

  // 
  // 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);
2
nabr 13 nov. 2017 a las 12:56