作者:swanteschol
项目:codin
func Quit() {
C.Mix_CloseAudio()
//for C.Mix_Init(0) != 0 {C.Mix_Quit()} // force a quit
if GSDLWasInitHere {
C.SDL_Quit()
}
}
作者:rsaarel
项目:teratoge
func mainLoop(width, height int) {
// SDL window must be created in the same thread where the events are
// polled. Hence this stuff must be in a separate goroutine along with the
// event loop.
initFlags := int64(C.SDL_INIT_VIDEO) | int64(C.SDL_INIT_AUDIO)
screenFlags := 0
if C.SDL_Init(C.Uint32(initFlags)) == C.int(-1) {
panic(getError())
}
screen := C.SDL_SetVideoMode(
C.int(width), C.int(height), 32, C.Uint32(screenFlags))
if screen == nil {
panic(getError())
}
C.SDL_EnableUNICODE(1)
C.SDL_EnableKeyRepeat(C.SDL_DEFAULT_REPEAT_DELAY, C.SDL_DEFAULT_REPEAT_INTERVAL)
initAudio()
// Synchronize with Run function.
coord <- true
eventLoop()
C.SDL_Quit()
// Synchronize with Stop function.
coord <- true
runLevel = off
}
作者:jaz30
项目:go-sdl
func Quit() {
C.SDL_Quit()
eventFilterCache = nil
for k, _ := range eventWatchesCache {
delete(eventWatchesCache, k)
}
}
作者:griff
项目:starfis
//Closes the window.
func CloseDisplay() {
if screen != nil {
close(kill)
C.SDL_FreeSurface(screen)
screen = nil
C.SDL_Quit()
}
}
作者:kearsle
项目:Go-SD
// Shuts down SDL
func Quit() {
GlobalMutex.Lock()
if currentVideoSurface != nil {
currentVideoSurface.destroy()
currentVideoSurface = nil
}
C.SDL_Quit()
GlobalMutex.Unlock()
}
作者:JamesOwenHal
项目:zer
func LaunchGame(title string, width, height int) error {
// Convert the title to a c-string
ctitle := C.CString(title)
defer C.free(unsafe.Pointer(ctitle))
// Initialize SDL
if C.SDL_Init(C.SDL_INIT_VIDEO) < 0 {
return errors.New("SDL_Init")
}
defer C.SDL_Quit()
// Create the window
window = C.SDL_CreateWindow(ctitle, C.SDL_WINDOWPOS_UNDEFINED, C.SDL_WINDOWPOS_UNDEFINED, C.int(width), C.int(height), C.SDL_WINDOW_SHOWN)
if window == nil {
return errors.New("SDL_CreateWindow")
}
defer C.SDL_DestroyWindow(window)
// Create the renderer
renderer = C.SDL_CreateRenderer(window, C.int(-1), C.SDL_RENDERER_ACCELERATED|C.SDL_RENDERER_PRESENTVSYNC)
if renderer == nil {
return errors.New("SDL_CreateRenderer")
}
defer C.SDL_DestroyRenderer(renderer)
// Initialize image support
if success := int(C.initIMG()); success == 0 {
return errors.New("IMG_Init")
}
EventInit()
C.gameLoop()
destroyTextures()
return nil
}
作者:genbattl
项目:Go2
func Quit() {
C.SDL_Quit()
}
作者:anthonyreg
项目:gosm
// Cleanup should be called before the program closes
func Cleanup() {
C.SDL_Quit()
}
作者:reuse
项目:playe
func main() {
runtime.GOMAXPROCS(32)
// sdl
C.SDL_Init(C.SDL_INIT_AUDIO | C.SDL_INIT_VIDEO | C.SDL_INIT_TIMER)
defer C.SDL_Quit()
runtime.LockOSThread()
window := C.SDL_CreateWindow(C.CString("play"), 0, 0, 1680, 1050,
C.SDL_WINDOW_BORDERLESS|C.SDL_WINDOW_RESIZABLE|C.SDL_WINDOW_MAXIMIZED|C.SDL_WINDOW_OPENGL)
if window == nil {
fatalSDLError()
}
defer C.SDL_DestroyWindow(window)
C.SDL_DisableScreenSaver()
renderer := C.SDL_CreateRenderer(window, -1, C.SDL_RENDERER_ACCELERATED)
if renderer == nil {
fatalSDLError()
}
defer C.SDL_DestroyRenderer(renderer)
var width, height C.int
C.SDL_GetWindowSize(window, &width, &height)
texture := C.SDL_CreateTexture(renderer,
C.SDL_PIXELFORMAT_YV12,
C.SDL_TEXTUREACCESS_STREAMING,
width, height)
if texture == nil {
fatalSDLError()
}
defer C.SDL_DestroyTexture(texture)
// sdl ttf
if C.TTF_Init() == C.int(-1) {
log.Fatal("sdl ttf init failed")
}
defer C.TTF_Quit()
font := C.TTF_OpenFont(C.CString("/home/reus/font.ttf"), 32)
if font == nil {
fatalTTFError()
}
defer C.TTF_CloseFont(font)
// open decoder
decoder, err := NewDecoder(os.Args[1])
if err != nil {
log.Fatal(err)
}
if len(decoder.AudioStreams) == 0 || len(decoder.VideoStreams) == 0 {
log.Fatal("no video or audio")
}
defer decoder.Close()
// audio
aCodecCtx := decoder.AudioStreams[0].codec
audioStream := setupAudioOutput(int(aCodecCtx.sample_rate), int(aCodecCtx.channels), decoder)
// call closure in sdl thread
callEventCode := C.SDL_RegisterEvents(1)
callbacks := make(chan func(Env), 1024)
call := func(f func(env Env)) {
var event C.SDL_Event
var userevent C.SDL_UserEvent
userevent._type = C.SDL_USEREVENT
userevent.code = C.Sint32(callEventCode)
C.set_userevent(&event, userevent)
callbacks <- f
C.SDL_PushEvent(&event)
}
// show fps
nFrames := 0
var fpsTexture *C.SDL_Texture
var fpsColor C.SDL_Color
var fpsSrc, fpsDst C.SDL_Rect
fpsColor.r = 255
fpsColor.g = 255
fpsColor.b = 255
fpsColor.a = 0
go func() {
for _ = range time.NewTicker(time.Second * 1).C {
call(func(env Env) {
cText := C.CString(fmt.Sprintf("%d", nFrames))
sur := C.TTF_RenderUTF8_Blended(font, cText, fpsColor)
fpsSrc.w = sur.w
fpsSrc.h = sur.h
fpsDst.w = sur.w
fpsDst.h = sur.h
C.SDL_DestroyTexture(fpsTexture)
fpsTexture = C.SDL_CreateTextureFromSurface(env.renderer, sur)
C.SDL_FreeSurface(sur)
C.free(unsafe.Pointer(cText))
nFrames = 0
})
}
}()
// render
go func() {
for {
frame := <-decoder.timedFrames
nFrames++
//.........这里部分代码省略.........