我正在尝试将图像加载到 OpenGL 纹理中。
我创建了一个窗口和 GL 4.4 Core Forward-Compatible 上下文:

这是我用来加载图像和创建纹理的代码:
load :: IO ()
load = do
    image <- JP.readImage "image.png"
    case image of
        (Left err) -> do print err
                         exitWith (ExitFailure 1)
        (Right imgData) -> do 
            a <- malloc
            glGenTextures 1 a
            texId <- peek a
            free a
            loadImgIntoTexture texId imgData
loadImgIntoTexture texId (JP.ImageRGBA8 (JP.Image width height dat)) = do
    glBindTexture GL_TEXTURE_2D texId
    unsafeWith dat $ glTexImage2D GL_TEXTURE_2D 0 GL_RGBA (fromIntegral width) (fromIntegral height) 0 GL_RGBA GL_UNSIGNED_BYTE . castPtr
    --p <- mallocBytes $ (fromIntegral width) * (fromIntegral height) * 4
    --glTexImage2D GL_TEXTURE_2D 0 GL_RGBA (fromIntegral width) (fromIntegral height) 0 GL_RGBA GL_UNSIGNED_BYTE (castPtr p)
    print "everything ok"
注释掉的行是另一种尝试将任何有意义的东西放入该纹理中。
以下是 gDebugger 报告的纹理信息:

以下是它显示的纹理内容:

当我打印出 JuicyPixels 返回的结构时,它会打印出不同的字节序列,这些字节序列肯定不会产生平面图像。
在此示例中,我没有渲染纹理,而是使用gl包生成的原始绑定。使用 package.json 时,我的行为完全相同(具有相同的蓝绿色)OpenGL。不出所料,它在屏幕上呈现为一个平面矩形。
我尝试过使用不同的图像,尺寸为 128x128 和 NPOT(如屏幕截图所示为 100x100)。
什么可能导致这种行为?
完整源码。