开发者

How to use glGenTextures

开发者_如何学Go

In C I would do the following:

GLuint a;
glGenTextures(1, &a);

The type of glGenTextures in Haskell is:

GLsizei -> Ptr GLuint -> IO ()

How can I get a value of the type Ptr GLuint ?


First of all, I'd like to point out that Haskell OpenGL bindings have a high-level incarnation that doesn't require the user to do manual memory management.

In general, for any Storable type a you can obtain a block of memory sufficient to hold n elements of the said type with mallocArray. The result of mallocArray has type Ptr a; like in C, you should use free to free allocated memory space afterwards. You can also use allocaArray to allocate memory temporarily (the equivalent of stack allocation in C). Here's how the OpenGL library uses allocaArray in conjunction with glGenTextures:

   genObjectNames n =
      allocaArray n $ \buf -> do
        glGenTextures (fromIntegral n) buf
        fmap (map TextureObject) $ peekArray n buf

You can find more information on these topics in the Haskell Wiki.


I think the exact traslation of:

GLuint a;
glGenTextures(1, &a);

Is:

import Foreign.Marshal.Utils( with )

with a $ \dir_a -> glGenTextures 1 dir_a

If you need to pass an array, you can use withArray that get a list, and reserve and initilialize a buffer with that list. Also allocaArray can create for you the buffer without initialize it.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜