Проблема компиляции шейдеров OpenGL - Неожиданный EOF

Поэтому я решил попробовать написать простое приложение OpenGL используя Java, просто чтобы посмотреть, как он по сравнению с другими моими усилиями, и я столкнулся с проблемой, когда мои шейдеры отказываются компилироваться. Они действительно Я не мог быть намного проще, вот мой вершинный шейдер, чтобы продемонстрировать, что я имею в виду:

//Minimal vertex shader

#version 330

in vec3 in_Position;
in vec3 in_Color;
out vec3 var_Color;

void main(void)
{
    gl_Position = vec4(in_Position, 1.0);
    var_Color = in_Color;
}

Фрагментный шейдер так же прост, поэтому я не буду публиковать его, если кто-то не попросит об этом. Когда я проверяю журналы, я получаю следующую ошибку (для обоих шейдеров):

(0) : error C0000: syntax error, unexpected $end at token "<EOF>"

Я не уверен, что это актуально ... но я разрабатываю на Linux (Ubuntu 11.04) с использованием Java. Единственные библиотеки, которые я использую, - это JOGL (для привязок openGL) и стандартная библиотека Java (если это даже считается ...) Моя видеокарта - Nvidia GeForce 9600M GS, и я проверил расширения, и она полностью поддерживает OpenGL 3.3.

Помогите мне Stack Overflow, на вас моя единственная надежда.

РЕДАКТИРОВАТЬ:

По запросу, вот функция, которая отвечает за загрузку и компиляцию исходного кода шейдера. Кроме того, когда дело доходит до GLSL, я супер n00b, поэтому я действительно не знаю, что искать, чтобы убедиться, что все правильно отформатировано для OpenGL. Приветствуется ссылка на недавний (т.е. имеющий дело с OpenGL 3.x) учебник по этому вопросу.

private int CreateCompiledShader(File source, int shader, GL3 gl){
        int shaderloc = gl.glCreateShader(shader);

        BufferedReader input = null;
        ArrayList<String> lines = new ArrayList<String>();
        ArrayList<Integer> lengths = new ArrayList<Integer>();
        try{
            input = new BufferedReader(new FileReader(source));
            String buffer;

            while(input.ready()){
                buffer = input.readLine();
                lines.add(buffer);
                lengths.add(buffer.length());
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            if(input != null){
                try {
                    input.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        int[] iLengths = new int[lengths.size()];
        for(int i = 0; i < lengths.size(); i++){
        iLengths[i] = lengths.get(i).intValue();
        }

        gl.glShaderSource(shaderloc, lines.size(), lines.toArray(new String[0]), iLengths, 0);
        gl.glCompileShader(shaderloc);

        int error = gl.glGetError();
        if(error != GL3.GL_NO_ERROR){
            Logger.log(new GLU().gluErrorString(error), Logger.ERROR, "Shader compilation");
        }

        return shaderloc;
    }

В стороне, оператор if в конце, где я проверяю glGetError () , не на самом деле там, где обнаруживается ошибка, этого не происходит, пока выполнение не вернется к вызывающей функции, и я не проверил журналы шейдера. Это может быть актуально, но опять же, я тоже мог бессвязно.

9
задан rjacks 19 June 2011 в 06:47
поделиться