画像を OpenGL テクスチャにロードしようとしていますが、発生したタイプ エラーを解決する方法がわかりません。エラー テキストに基づいて、GL.texImage2D
通話のどこかでおかしくなっていると思いますが、ここでは何も問題はないようです。
import Graphics.Rendering.OpenGL as GL
import Graphics.Rendering.OpenGL (($=))
import Codec.Picture.Repa as Repa
newImage fname = do
img <- Repa.readImage fname
case img of
Left _ -> return Nothing
Right x -> do
let (dat, w, h) = Repa.toForeignPtr . Repa.reverseColorChannel $ x
[tex] <- genObjectNames 1
GL.textureBinding GL.Texture2D $= Just tex
withForeignPtr dat $ \ptr -> do
(GL.texImage2D
Nothing
GL.NoProxy
0
GL.RGBA8
(GL.TextureSize2D (fromIntegral w) (fromIntegral h))
0
(GL.PixelData GL.RGBA GL.UnsignedByte ptr))
return $ Just tex
これが私が得ているエラーです。
No instance for (TwoDimensionalTextureTarget (Maybe a0))
arising from a use of `texImage2D'
Possible fix:
add an instance declaration for
(TwoDimensionalTextureTarget (Maybe a0))
In a stmt of a 'do' block:
(texImage2D
Nothing
NoProxy
0
RGBA8
(TextureSize2D (fromIntegral w) (fromIntegral h))
0
(PixelData RGBA UnsignedByte ptr))
In the expression:
do { (texImage2D
Nothing
NoProxy
0
RGBA8
(TextureSize2D (fromIntegral w) (fromIntegral h))
0
(PixelData RGBA UnsignedByte ptr)) }
In the second argument of `($)', namely
`\ ptr
-> do { (texImage2D
Nothing
NoProxy
0
RGBA8
(TextureSize2D (fromIntegral w) (fromIntegral h))
0
(PixelData RGBA UnsignedByte ptr)) }'