1

画像を 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)) }'
4

1 に答える 1

4

型シグネチャtexImage2D

texImage2D :: TwoDimensionalTextureTarget t
           => t -> Proxy -> Level -> PixelInternalFormat -> TextureSize2D -> Border -> PixelData a -> IO ()

クラスTwoDimensionalTextureTargetのインスタンスはTextureTargetCubeMapFace、、、TextureTargetCubeMapおよびTextureTarget2Dです。これらはいずれも、あらゆるタイプのフォームのタイプ シノニムではありませんMaybe t。したがって、Nothing最初の引数として を指定してtextImage2Dも、型チェックは行われません。(他にもエラーがある可能性があります。 Hackageのエラー メッセージから関連する型を調べただけです。)

于 2013-10-20T03:08:40.227 に答える