LWJGL在尝试将PNG加载为纹理时导致运行时错误:“有问题的框架:C [lwjgl_opengl.dll + 0xf46d]”

时间:2018-03-07 19:25:44

标签: opengl textures lwjgl

当我输入无效的文件名和目录(因为它应该)时,此代码返回“找不到文件”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();上的运行时错误。

1 个答案:

答案 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()