无法创建着色器程序 OpenGL LWJGL3
Unable to create shader program OpenGL LWJGL3
我无法创建一个着色器程序来绑定到 openGL 的程序 ID。我的着色器程序类如下所示:
public abstract class ShaderProgram {
private int programID;
private int vertexShaderID;
private int fragmentShaderID;
public ShaderProgram(String vertexFile, String fragmentFile) { // Constructor takes the file names for both shaders and loads them into memory
// --- Vertex shader does points in 3d space --- fragment shader does colour ---
if (programID == -1) { // Error checking for shader program
programID = GL20.glCreateProgram();
}
if (programID == 0) {
System.out.println("Could not create shader program");
System.exit(-1);
}
vertexShaderID = loadShader(vertexFile, GL20.GL_VERTEX_SHADER);
fragmentShaderID = loadShader(fragmentFile, GL20.GL_FRAGMENT_SHADER);
GL20.glAttachShader(programID, vertexShaderID); // Bind shader to programID
GL20.glAttachShader(programID, fragmentShaderID);
bindAttributes();
GL20.glLinkProgram(programID);
GL20.glValidateProgram(programID);
}
protected abstract void bindAttributes();
protected void bindAttribute(String variableName, int attribute) { // Takes vao to bind to vertex shader
GL20.glBindAttribLocation(programID, attribute, variableName);
}
public void start() { // Start shader program bound to programID
GL20.glUseProgram(programID);
}
public void stop() { // Stop shader program
GL20.glUseProgram(0);
}
public void cleanUp() { // Unbind shaderID's and delete program from memory
stop();
GL20.glDetachShader(programID, vertexShaderID);
GL20.glDetachShader(programID, fragmentShaderID);
GL20.glDeleteShader(vertexShaderID);
GL20.glDeleteShader(fragmentShaderID);
GL20.glDeleteProgram(programID);
}
private int loadShader(String file, int type) { // Read shader file input by filename and shader type
// and store it in a string buffer
StringBuilder shaderSource = new StringBuilder();
InputStream in = Class.class.getResourceAsStream(file);
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line;
try {
while((line = reader.readLine()) != null) {
shaderSource.append(line).append("//n");
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
System.err.println("Could not Load Shader File");
System.exit(-1);
}
int shaderID = GL20.glCreateShader(type);
GL20.glShaderSource(shaderID, shaderSource); // Creates shader by file and loads it into a new id
GL20.glCompileShader(shaderID);
if (GL20.glGetShaderi(shaderID, GL20.GL_COMPILE_STATUS) == GL11.GL_FALSE) { // Get gl compile status of shader
System.out.println(GL20.glGetShaderInfoLog(shaderID, 1000)); // In case of error, force close and print what went wrong
System.err.println("Could not compile shader!");
System.exit(-1);
}
return shaderID;
}
}
它返回一个 Java 堆错误,如下所示:错误
我已经为我的 github 存储库附加了一个链接,其中包含所有随附的代码。 我相信这是对glfw的处理不当。 所有引擎文件都位于 renderEngine 的边界包中。 提前感谢!GitHub KR0N05
我已经解决了这个问题。 @BDL是正确的,在我调用着色器创建之前,我没有在render.prepare中加载上下文。谢谢!
相关文章:
- OpenGL - 在 NDC 中计算位置适用于着色器,但不适用于'regular'程序
- 如何使实例化在我的 OpenGL 程序中工作?
- OpenGL程序不显示三角形
- C++ 如何在 OpenGL 程序中远程调用控制台窗口
- 您是否必须在 OpenGL 程序中调用 glfwSwapInterval(1)?
- 如何在 debian 下正确链接一个 opengl 程序?
- OpenGL 相机移动程序顶点着色器问题
- OpenGL GLFW 应用程序 - 客户端内存限制
- 如何并行运行与OpenGL并行的程序
- 在OpenGL中使用程序集代码渲染视频时出错
- 从OpenGL应用程序中提取颜色/深度缓冲区
- OpenGL应用程序在不同的计算机上的工作方式不同
- 无法与 mingw 交叉编译 opengl 程序
- OpenGL 程序无法链接?
- opengl 飞行模拟器应用程序中的文本呈现问题
- 如何找到 NVIDIA OpenGL 驱动程序的错误 ID 名称?
- OpenGL 应用程序退出,退出代码为 -1073741515 (0xC0000135)
- OpenGL 着色器程序无法验证,但不提供错误消息
- OpenGL 程序着色器链接错误
- 无法创建着色器程序 OpenGL LWJGL3