1

私は OpenGL から始めて、最初のシェーダーを作成しました (チュートリアルに従って)。チュートリアルを文字どおりに実行したにもかかわらず、いくつかのエラーが発生しました (チュートリアル提供者とは異なります)。

徹底的かつ独創的なグーグル検索にもかかわらず、何が問題なのかについての助けも説明も見つかりませんでした。

私のシェーダーのソースは次のとおりです。

basicVertex.vs:

#version 330

layout (location = 0) in vec3 position;

void main() 
{
    gl_Position = vec4(position, 1.0);
}



basicFragment.fs:

#version 330

out vec4 fragColor;

void main() 
{
    fragColor = vec4(0.0, 1.0, 1.0); 
}

エラーは次のとおりです。

Shader could not be run: 
ERROR: 0:? : '' : storage qualifier not valid with layout qualifier id 
ERROR: 0:7: 'gl_Position' : undeclared identifier 
ERROR: 0:7: 'assign' :  cannot convert from '4-component vector of float' to 'float'

(これはコマンドライン出力全体です)。

シェーダーの読み込み/コンパイル コードは次のとおりです。

パッケージ uk.co.gossfunkel.citadel3d.shader;

静的 org.lwjgl.opengl.GL20 をインポートします。; 静的 org.lwjgl.opengl.GL32 をインポートします。;

public class Shader { プライベート int プログラム;

    public Shader() throws ShaderLoadException {
            program = glCreateProgram();

            if (program == 0) {
                    throw new ShaderLoadException();
            }
    }

    public void bind() {
            glUseProgram(program);
    }

    public void addVertexShader(String text) throws ShaderLoadException {
            addProgram(text, GL_VERTEX_SHADER);
    }

    public void addGeometryShader(String text) throws ShaderLoadException {
            addProgram(text, GL_GEOMETRY_SHADER);
    }

    public void addFragmentShader(String text) throws ShaderLoadException {
            addProgram(text, GL_FRAGMENT_SHADER);
    }

    public void compileShader() throws ShaderLoadException {
            glLinkProgram(program);

            if (glGetProgrami(program, GL_LINK_STATUS) == 0) {
                    throw new ShaderLoadException(glGetShaderInfoLog(program, 1024));
            }

            glValidateProgram(program);

            if (glGetProgrami(program, GL_VALIDATE_STATUS) == 0) {
                    throw new ShaderLoadException(glGetShaderInfoLog(program, 1024));
            }
    }

    private void addProgram(String text, int type) throws ShaderLoadException {
            int shader = glCreateShader(type);
            if (shader == 0) {
                    throw new ShaderLoadException();
            }
            glShaderSource(shader, text);
            glCompileShader(shader);

            if (glGetShaderi(shader, GL_COMPILE_STATUS) == 0) {
                    throw new ShaderLoadException(glGetShaderInfoLog(shader, 1024));
            }

            glAttachShader(program, shader);
    }

}

誰かが私に解決策を教えてくれたり、何が問題なのかを教えてくれたりしたら、ぜひ聞いてみたいです。ただし、「OpenGL の詳細を確認してください」と言うだけでは役に立ちません。ありがとう!

4

0 に答える 0