
Am Donnerstag, 20. November 2008 17:17:43 schrieb Neal Alexander:
[...] If you use a single thread for OpenGL, but want to offload resource loading to a worker thread, you can mapBuffer in the GL thread then send the pointer to a worker thread (no GL context), then queue the unmapBuffer in the GL thread.
withMappedBuffer locks everything into the calling thread. [...]
I am not 100% convinced that there is no way around this using withMappedBuffer (e.g. by passing the pointer from the wrapped action to another thread), but nevertheless, I've added mapBuffer and unmapBuffer to the exported API of the OpenGL package. Note the signature of mapBuffer: mapBuffer :: BufferTarget -> BufferAccess -> IO (Maybe (Ptr a)) Although not strictly necessary, I've explicitly wrapped the resulting pointer into a Maybe, making it crystal-clear that the caller should handle errors somehow. For consistency reasons, I've added the beginQuery/endQuery pair as an alternative for withQuery, too. Although I'm really striving for API minimality, anticipating all possible uses of an API is really hard. Having 2 ways of achieving things is not nice, but it is probably the safest thing to do here. *sigh* Cheers, S.