当我输入无效的文件名和目录(因为它应该)时,此代码返回“找不到文件”IOExeption,但是当我输入有效的PNG文件时,它会崩溃。错误消息告诉我崩溃时的resister和地址值,以及“有问题的框架:C [lwjgl_opengl.dll + 0xf46d]”,但我没有看到我出错的地方(我主要分析其他代码,因为我不明白如何纹理加载。)
public static int loadTexture( String name ) throws IOException
{
FileInputStream in = new FileInputStream( name );
PNGDecoder decoder = new PNGDecoder( in );
ByteBuffer buf = ByteBuffer.allocateDirect( 3 * decoder.getWidth()*decoder.getHeight() );
decoder.decode( buf, decoder.getWidth() * 3, PNGDecoder.Format.RGB );
buf.flip();
int texture = glGenTextures();
glBindTexture( GL_TEXTURE_2D, texture );
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, decoder.getWidth(), decoder.getHeight(), 0, GL_RGB, GL_UNSIGNED_BYTE, buf );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
in.close();
return texture;
}
我想如果我可以使用STBImage,那就不错了,但老实说我不明白其中任何一个,我发现了更多关于PNGDecoder的信息。
我正在使用LWJGL 3。
编辑:错误是glGenTextures();
上的运行时错误。
答案 0 :(得分:0)
由于您没有上传完整的崩溃报告,我对此并不是100%肯定,但是当您调用glGenTextures或者您的LWJGL jar文件来自不同版本时,您没有OpenGL上下文。
因此,在加载纹理之前,请确保在LWJGL 3中调用 UIApplication.shared.open(URL(string:"App-Prefs:root=General")!, options: [:], completionHandler: nil)
或在LWJGL 2中调用GL.createCapabilities()
。