私は 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 の詳細を確認してください」と言うだけでは役に立ちません。ありがとう!