2011-12-16 10 views
8

La especificación de la versión GLSL produce un error de sintaxis cuando se utiliza LWJGL. No he intentado reproducir este problema fuera de LWJGL. Esto está sucediendo en múltiples Macs ejecutando Lion.GLSL #version da error de sintaxis (LWJGL en Mac)

He obtenido sombreados de vértices y fragmentos para trabajar sin usar #version. Pero estoy a punto de usar la función texture, que parece requerir una directiva #version.

Aquí está el ejemplo más simple en su defecto:

#version 120 

void main() { 
    gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0); 
} 

la compilación de este fragment shader y llamando glGetShaderInfoLog da este error:

ERROR: 0:1: '' : syntax error #version 

Sustitución 120 con cualquier otra cosa, como por ejemplo 110, también se da un error. Curiosamente, sin embargo, si uso 130 o más, da el mismo error más una queja sobre la versión que no es compatible. (Sé que mi sistema no tiene GLSL 1.3, pero todavía es extraño que este error se muestre cuando el compilador actúa como si no entendiera la etiqueta de la versión).

Estoy en una Mac con ATI Radeon HD 4670. GL_VERSION es 2.1 ATI-7.12.9 y GL_SHADING_LANGUAGE_VERSION es 1.20.

Dado que, no veo ningún motivo por el que GLSL 1.20 no esté disponible. Y es realmente extraño para mí decir que #version es un error de sintaxis, en lugar de decir algo acerca de una versión GLSL no compatible.

+0

¿Dónde está su código de carga shader? –

+0

Puedo pegar eso una vez que tengo internet. (Usando mi teléfono ahora mismo.) ¿Sería útil ese código fuente? – rlkw1024

Respuesta

17

¡Resuelto! No tiene nada que ver con OpenGL. Mi código de lector de archivos estaba cayendo todos los saltos de línea. Esto estaba bien en el cuerpo del sombreador, que tenía punto y coma. Pero la directiva del preprocesador no tenía punto y coma para protegerlo de este error.

Así que para cualquiera que tenga este problema, asegúrese de que el código que realmente está pasando a glShaderSource todavía tenga sus saltos de línea.

+1

¡Muchas gracias, me has salvado la noche! Estoy en Mac con SDL y C++, pero con este oscuro mensaje de error OpenGL intentaba decirme lo mismo. – zubko

+0

Una forma de abordar esto se puede encontrar [aquí] (http://schabby.de/opengl-shader-example/).El BufferedReader extrae la fuente de sombreado línea por línea, descartando caracteres CR/LF. Luego vuelves a agregar explícitamente un carácter de línea nueva a cada línea usando StringBuilder (mira aproximadamente 2/3 del recorrido de esa página). –

+0

Muchas gracias también. Este era el problema exacto que estaba teniendo. ¡Pesky Java IO eliminando saltos de línea! – Textfield

1

Tanto el vértice como el sombreador de fragmentos deben tener la misma versión. Entonces, si agrega un #version 120 al sombreador de fragmentos, también debe agregarlo al sombreador de vértices. Pero es un poco extraño que esto se informa como un error de sintaxis. Tal vez haya otro error, pero ambos definitivamente tienen que tener la misma etiqueta de versión.

EDIT: También tenga en cuenta que la etiqueta de versión debe ser la primera línea del código fuente del sombreador (las nuevas líneas y los comentarios deben estar bien por especificación, pero quién sabe qué piensan los controladores).

+0

Intenté usar la misma versión en ambos, pero no tuve suerte. Como esto ocurre en compilación y sin vinculación, no creo que los sombreadores se conozcan el uno al otro de todos modos. – rlkw1024

+0

@Jarrett Teniendo en cuenta el proveedor ominoso de su tarjeta gráfica, también puede ser un error del controlador. Aunque esta es realmente una característica muy simple y no debería ser un problema apoyar, pero, de nuevo, sigue siendo ATI. –

+0

Jusy verificó el mismo problema con una GeForce 320M. Así que estoy empezando a dudar de que ambos proveedores tengan exactamente el mismo error en una característica básica. – rlkw1024