Шейдеры не компилируются, выходит пустая ошибка
Вот код vertex шейдера:
#version 430 core
layout (location = 0) in vec3 attrib_Position;
layout (location = 1) in vec4 attrib_Colour;
out vec4 colour;
out vec3 position;
void main()
{
position = attrib_Position;
colour = attrib_Colour;
gl_Position = vec4(attrib_Position, 1.0f);
}
Код fragment шейдера:
#version 430 core
layout (location = 0) out vec4 out_Colour;
in vec3 position;
in vec4 colour;
void main()
{
out_Colour = colour;
}
Вот код Shader.java:
public int id;
public void error303(String l) {
JFrame frame = new JFrame();
JOptionPane.showMessageDialog(frame, "[Error 303]: Failed to compile Vertex Shader or Fragment. : " + l, "Error 303", JOptionPane.ERROR_MESSAGE);
}
public void error304(String l) {
JFrame frame = new JFrame();
JOptionPane.showMessageDialog(frame, "[Error 304]: Cannot link shader program! : " + l, "Error 304", JOptionPane.ERROR_MESSAGE);
}
public Shader(String vsSrc, String fsSrc) {
Map<Integer, String> shaderSrc = new HashMap<Integer, String>(2);
shaderSrc.put(1, this.readfile(vsSrc));
shaderSrc.put(2, this.readfile(fsSrc));
this.compile(shaderSrc);
}
public void compile(Map<Integer, String> shaderSrc) {
int prog = glCreateBuffers();
List<Integer> shaderIds = new ArrayList<Integer>();
int shaderididxs = 1;
for(int i = 0; i < shaderSrc.size(); i++) {
int type = i == 0 ? GL_VERTEX_SHADER : i == 1 ? GL_FRAGMENT_SHADER : -1;
String source = shaderSrc.get(shaderididxs);
int shader = glCreateShader(type);
glShaderSource(shader, source);
glCompileShader(shader);
int isCompiled = 0;
isCompiled = glGetShaderi(shader, GL_COMPILE_STATUS);
if(isCompiled == GL_FALSE) {
int maxLength = 0;
maxLength = glGetShaderi(shader, GL_INFO_LOG_LENGTH);
String info_log = "";
info_log = glGetShaderInfoLog(shader, maxLength);
glDeleteShader(shader);
error303(info_log);
System.out.println(info_log);
System.exit(-1);
}
glAttachShader(prog, shader);
shaderididxs++;
}
glLinkProgram(prog);
int isLinked = 0;
isLinked = glGetProgrami(prog, GL_LINK_STATUS);
if(isLinked == GL_FALSE) {
int maxLength = 0;
maxLength = glGetProgrami(prog, GL_INFO_LOG_LENGTH);
String info_log = "";
info_log = glGetProgramInfoLog(prog, maxLength);
for(int shaderId : shaderIds) {
glDetachShader(prog, shaderId);
}
for(int shaderId : shaderIds) {
glDeleteShader(shaderId);
}
error304(info_log);
System.exit(-1);
}
for(int shaderId : shaderIds) {
glDetachShader(prog, shaderId);
}
this.id = prog;
}
public String readfile(String file) {
boolean appendSlashes = false;
boolean returnInOneLine = false;
StringBuilder shaderSource = new StringBuilder();
try {
InputStream in = getResourceAsStream(file);
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line;
while((line = reader.readLine())!=null) {
shaderSource.append(line);
if(appendSlashes) shaderSource.append("//");
if(!returnInOneLine) shaderSource.append("\n");
}
reader.close();
return shaderSource.toString();
}
catch(IOException e) {
System.out.println("[Error 305]: This file '" + file + "' cound be read.");
e.printStackTrace();
Runtime.getRuntime().exit(-1);
}
return "[Error 305]: This file '" + file + "' cound be read.";
}
public void bind() {
glUseProgram(this.id);
}
public void unbind() {
glUseProgram(0);
}
}
Когда я компилирую шейдеры, у меня всплывает диалоговое окно с пустой ошибкой:
public void error304(String l) {
JFrame frame = new JFrame();
JOptionPane.showMessageDialog(frame, "[Error 304]: Cannot link shader program! : " + l, "Error 304", JOptionPane.ERROR_MESSAGE);
}
Подскажите, что делать, умоляю!!
