Java LWJGL OpenGL在创建着色器时未找到上下文
调用glCreateShader()时,在当前线程中找不到OpenGL上下文。运行时异常,我在执行此操作之前已初始化显示 这是我的主要职责:Java LWJGL OpenGL在创建着色器时未找到上下文,java,opengl,shader,lwjgl,Java,Opengl,Shader,Lwjgl,调用glCreateShader()时,在当前线程中找不到OpenGL上下文。运行时异常,我在执行此操作之前已初始化显示 这是我的主要职责: public static void main(String[] args) { MainDisplay md = new MainDisplay(); md.create(); md.init(); md.run(); } 以下是创建函数: public void create() { try {
public static void main(String[] args) {
MainDisplay md = new MainDisplay();
md.create();
md.init();
md.run();
}
以下是创建函数:
public void create() {
try {
Display.setDisplayMode(new DisplayMode(1920, 1080));
Display.setTitle("Dryad Engine 1.0.0");
Display.setFullscreen(false);
Display.setResizable(true);
} catch (LWJGLException ex) {
Logger.getLogger(MainDisplay.class.getName()).log(Level.SEVERE, null, ex);
System.exit(-1);
}
}
以下是init func:
public void init() {
//glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // commented because I get the same error ..
try {
shaderProgramID = ShaderFactory.createShaderProgram("vertexShader", "fragmentShader");
glUseProgram(shaderProgramID);
bunny = OBJLoader.parseOBJ(new File("src/com/dryadengine/assets/bunny.obj"));
FloatBuffer vbo = BufferUtils.createFloatBuffer(bunny.getVertices().length);
vbo.put(bunny.getVertices());
vbo.flip();
vboID = glGenBuffers();
glBindBuffer(GL_ARRAY_BUFFER, vboID);
glBufferData(GL_ARRAY_BUFFER, vbo, GL_STATIC_DRAW);
vPositionID = glGetAttribLocation(shaderProgramID, "vPosition");
glEnableVertexAttribArray(vPositionID);
} catch (FileNotFoundException ex) {
Logger.getLogger(MainDisplay.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(MainDisplay.class.getName()).log(Level.SEVERE, null, ex);
}
}
shaderProgramID = ShaderFactory.createShaderProgram("vertexShader", "fragmentShader");
我在init func中从该调用中获得异常:
public void init() {
//glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // commented because I get the same error ..
try {
shaderProgramID = ShaderFactory.createShaderProgram("vertexShader", "fragmentShader");
glUseProgram(shaderProgramID);
bunny = OBJLoader.parseOBJ(new File("src/com/dryadengine/assets/bunny.obj"));
FloatBuffer vbo = BufferUtils.createFloatBuffer(bunny.getVertices().length);
vbo.put(bunny.getVertices());
vbo.flip();
vboID = glGenBuffers();
glBindBuffer(GL_ARRAY_BUFFER, vboID);
glBufferData(GL_ARRAY_BUFFER, vbo, GL_STATIC_DRAW);
vPositionID = glGetAttribLocation(shaderProgramID, "vPosition");
glEnableVertexAttribArray(vPositionID);
} catch (FileNotFoundException ex) {
Logger.getLogger(MainDisplay.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(MainDisplay.class.getName()).log(Level.SEVERE, null, ex);
}
}
shaderProgramID = ShaderFactory.createShaderProgram("vertexShader", "fragmentShader");
以下是createShaderProgram函数:
public static int createShaderProgram(String vertexShaderName, String fragmentShaderName) throws FileNotFoundException, IOException {
ArrayList<Integer> shaders = new ArrayList();
shaders.add(ShaderFactory.compileShader(GL_VERTEX_SHADER, getShaderFileCode(COMMON_SHADERS_PATH + vertexShaderName + SHADER_EXTENSION)));
shaders.add(ShaderFactory.compileShader(GL_FRAGMENT_SHADER, getShaderFileCode(COMMON_SHADERS_PATH + fragmentShaderName + SHADER_EXTENSION)));
return ShaderFactory.linkProgram(shaders);
}
现在更准确地说,异常来自compileShader func中的此调用:
int shaderID = glCreateShader(shaderType);
似乎openGL无法为我生成一个新的着色器程序,为什么?我在调用显示之前初始化了它,所以它可能是什么?您需要调用
Display.create()
来创建OpengGL上下文。你可以在你的create()
方法中将这个添加到try块的末尾。我真是个白痴,不知道我怎么会错过它。谢谢