Update C library

This commit is contained in:
Milan Nikolic 2017-11-14 04:10:20 +01:00
parent 793e521511
commit 2d8472fb63
11 changed files with 360 additions and 302 deletions

View file

@ -39,6 +39,62 @@ import (
"runtime"
)
// CallQueueCap is the capacity of the call queue.
//
// The default value is 16.
var CallQueueCap = 16
// callInMain calls a function in the main thread. It is only properly initialized inside raylib.Main(..).
// As a default, it panics.
var callInMain = func(f func()) {
panic("raylib.Main(main func()) must be called before raylib.Do(f func())")
}
func init() {
// Make sure the main goroutine is bound to the main thread.
runtime.LockOSThread()
}
// Main entry point. Run this function at the beginning of main(), and pass your own main body to it as a function. E.g.:
//
// func main() {
// raylib.Main(func() {
// // Your code here....
// // [....]
//
// // Calls to raylib can be made by any goroutine, but always guarded by raylib.Do()
// raylib.Do(func() {
// raylib.DrawTexture(..)
// })
// })
// }
func Main(main func()) {
// Queue of functions that are thread-sensitive
callQueue := make(chan func(), CallQueueCap)
done := make(chan bool, 1)
// Properly initialize callInMain for use by raylib.Do(..)
callInMain = func(f func()) {
callQueue <- func() {
f()
done <- true
}
<-done
}
go func() {
main()
close(callQueue)
}()
for f := range callQueue {
f()
}
}
// Do queues function f on the main thread and blocks until the function f finishes
func Do(f func()) {
callInMain(f)
}