你需要使用
texImage2D
函数。你可以按照以下方式调用它:
import Data.Vector.Storable (unsafeWith)
import Graphics.Rendering.OpenGL.GL.Texturing.Specification (texImage2D, Level, Border, TextureSize2D(..))
import Graphics.Rendering.OpenGL.GL.PixelRectangles.ColorTable (Proxy(..), PixelInternalFormat(..))
import Graphics.Rendering.OpenGL.GL.PixelRectangles.Rasterization (PixelData(..))
(ImageRGBA8 (Image width height dat)) ->
unsafeWith dat $ \ptr ->
texImage2D
Nothing
NoProxy
0
RGBA8
(TextureSize2D width height)
0
(PixelData RGBA UnsignedByte ptr)
请注意,Juicy并不总是返回RGBA格式的图像。您需要处理每个不同的图像变体:
ImageY8, ImageYA8, ImageRGB8, ImageRGBA8, ImageYCrCb8
此命令执行前,您必须绑定一个纹理对象以存储纹理数据。
import Data.ObjectName (genObjectNames)
import Graphics.Rendering.OpenGL.GL.Texturing.Objects (textureBinding)
import Graphics.Rendering.OpenGL.GL.Texturing.Specification (TextureTarget(..))
[texObject] <- genObjectNames 1
textureBinding Texture2D $= Just texObject
顺便说一下,当你导入Graphics.Rendering.OpenGL
时,许多这些导入将自动添加;如果不需要单独导入每个内容。