Hi,
Thanks to Eric's help earlier, I managed to get wx running and run
some simple programs in it. I have run into the following
(unconnected) problems with the API:
There doesn't seem to be a binding to wxImage's "SetOption" call. I
need to this to save a JPEG at anything other than the default
quality. I'm loading in a JPEG, cropping, and saving out: if you
recompress that at low quality you really suffer from jpg artifacts.
There doesn't seem to be a binding to the "wxImage-from-WXStream"
constructor. In particular, it would be nice to have a version using a
wxMemoryInputStream so that you can load a wxImage from a Ptr, such as
if you get an image via a network protocol or embedded in a larger
file.
I have random segfaults when calling imageGetPixels. Seems to be with
a probability of something like 25%. Here is the code I've written
(which generates an openGL texture from a WX bitmap):
textureFromBitmap bmp = do
image <- imageCreateFromBitmap bmp
pixels <- imageGetData image
putStrLn $ "pixels : " ++ show pixels
bytes <- peekArray 8 (castPtr pixels)
putStrLn $ "bytes : " ++ show (bytes :: [Word8])
WX.Size w h <- imageGetSize image
putStrLn $ "Image size : " ++ show (w,h)
pixs <- imageGetPixels image
putStrLn $ "number of pixs = " ++ show (length pixs)
putStrLn $ "first pixel " ++ show (head pixs)
[tex] <- genObjectNames 1
textureBinding Texture2D $= Just tex
textureWrapMode Texture2D T $= (Repeated,Repeat)
textureWrapMode Texture2D S $= (Repeated,Repeat)
textureFilter Texture2D $= ((Nearest, Nothing), Linear')
let wxToColor3 :: WX.Color -> Color3 GLubyte
wxToColor3 c = Color3 (fromIntegral $ WX.colorRed c)
(fromIntegral $ WX.colorGreen c)
(fromIntegral $ WX.colorBlue c)
padded | w `mod` 2 == 0 = pixs
| otherwise = concatMap (\x -> x ++ [WX.colorRGB 0 0 0]) .
chunksOf w $ pixs
chunksOf n l = takeWhile (not.null) . map (take n) . iterate
(drop n) $ l
withArray (map wxToColor3 padded) $
\a -> texImage2D Nothing NoProxy 0 RGBA' (TextureSize2D
(fromIntegral w) (fromIntegral h)) 0
(PixelData RGB UnsignedByte a)
return tex
It doesn't appear to be relevant where the bitmap comes from, I've
seen the segfault with bitmaps coming from "bitmapCreateFromFile" as
well as from "bitmapCreateEmpty".
About 1 time in 4, this will segfault with the last thing printed
being the "Image size" putStrLn, leading me to think that
imageGetPixels is segfaulting. gdb doesn't tell me anything useful
- presumably because my wx libraries are not compiled with debug info?
Is there a wx configure option for that? I'll have a look and see what
I can see.
Thanks for providing such a useful binding,
Jules Bean
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
wxhaskell-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/wxhaskell-users