私はLWJGLを使ってJavaからopenglを学びたいと思っています。シェーダプログラムをコンパイルしようとするとエラーが発生するGLSL:#
java.lang.Exception: Error compiling shading code: 0:1(1): preprocessor error: Illegal non-directive after #
私はCのみのJavaについて何も知らない。
#version 330
layout (location =0) in vec3 position;
void main()
{
gl_Position = vec4(position, 1.0);
}
#version 330
out vec4 fragColor;
main()
{
fragColor = vec4(0.0, 0.5, 0.5, 1.0);
}
これは私の2つのシェーダファイルです。
これはそれらをロードするコードです:
public void createVertexShader(String code) throws Exception{
vertexShaderId = createShader(code,GL_VERTEX_SHADER);
}
public void createFragmentShader(String code) throws Exception{
fragmentShaderId = createShader(code,GL_FRAGMENT_SHADER);
}
protected int createShader(String code, int type) throws Exception{
int shaderId = glCreateShader(type);
if(shaderId == 0){
throw new Exception("error createing shader. type: "+type);
}
glShaderSource(shaderId,code);
glCompileShader(shaderId);
if(glGetShaderi(shaderId, GL_COMPILE_STATUS) == 0){
throw new Exception("Error compiling shading code: "+glGetShaderInfoLog(shaderId,1024));
}
glAttachShader(programId, shaderId);
return shaderId;
}
public static String loadResource(String fileName) throws Exception {
StringBuilder result = new StringBuilder();
try (InputStream in = Utils.class.getClass().getResourceAsStream(fileName);
Scanner scanner = new Scanner(in, "UTF-8")) {
while(scanner.hasNext()){
result.append(scanner.next());
}
}
return result.toString();
私はこの単純なファイルをコンパイルするために何をする必要があるか理解していません。
StringBuilder builder = new StringBuilder();
try (InputStream in = new FileInputStream(fileName);
BufferedReader reader = new BufferedReader(new InputStreamReader(in))) {
String line;
while ((line = reader.readLine()) != null) {
builder.append(line).append("\n");
}
} catch (IOException ex) {
throw new RuntimeException("Failed to load a shader file!"
+ System.lineSeparator() + ex.getMessage());
}
String source = builder.toString();
return source;
これを別のプログラムで動作するシェーダローダーに変更しました。しかしここでも私はまだ未知の新しい識別子を取得しています。 何か?
はい、それは言う:0:1(1):エラー:予期せぬ構文エラーNEW_IDENTIFIER – madmax