您使用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)) ->
-- Access the data vector pointer
unsafeWith dat $ \ptr ->
-- Generate the texture
texImage2D
-- No cube map
Nothing
-- No proxy
NoProxy
-- No mipmaps
0
-- Internal storage format: use R8G8B8A8 as internal storage
RGBA8
-- Size of the image
(TextureSize2D width height)
-- No borders
0
-- The pixel data: the vector contains Bytes, in RGBA order
(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(..))
-- ...
-- Generate 1 texture object
[texObject] <- genObjectNames 1
-- Make it the "currently bound 2D texture"
textureBinding Texture2D $= Just texObject
BTW,很多的。這些導入是在您導入Graphics.Rendering.OpenGL
時自動添加的;如果你不想要,你不必單獨導入每一件東西。
請注意,這部分是JuicyPixels-Repa有幫助的,但它需要更新Repa-3.0(GHC 7.4或更高版本)。 –
糟糕。我忘了我已經做了一些工作來更新JP-repa的新補丁。好極了。 –