Вы используете функцию 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
Кстати, многие. эти импорт автоматически добавляется при импорте Graphics.Rendering.OpenGL
; вам не нужно импортировать каждую вещь индивидуально, если вы этого не хотите.
Обратите внимание, что это частично то, что JuicyPixels-Repa было полезно, но для обновления Repa-3.0 (GHC 7.4 или выше) требуется обновление. –
К сожалению. Я забыл, что уже проделал определенную работу по обновлению JP-repa для новой репа. Ура. –