// Copyright 2015 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package al /* #include #include #include #include ALCint call_alcGetError(LPALCGETERROR fn, ALCdevice* d) { return fn(d); } ALCdevice* call_alcOpenDevice(LPALCOPENDEVICE fn, const ALCchar* name) { return fn(name); } ALCboolean call_alcCloseDevice(LPALCCLOSEDEVICE fn, ALCdevice* d) { return fn(d); } ALCcontext* call_alcCreateContext(LPALCCREATECONTEXT fn, ALCdevice* d, const ALCint* attrs) { return fn(d, attrs); } ALCboolean call_alcMakeContextCurrent(LPALCMAKECONTEXTCURRENT fn, ALCcontext* c) { return fn(c); } void call_alcDestroyContext(LPALCDESTROYCONTEXT fn, ALCcontext* c) { return fn(c); } */ import "C" import ( "sync" "unsafe" ) var once sync.Once func alcGetError(d unsafe.Pointer) int32 { dev := (*C.ALCdevice)(d) return int32(C.call_alcGetError(alcGetErrorFunc, dev)) } func alcOpenDevice(name string) unsafe.Pointer { once.Do(initAL) n := C.CString(name) defer C.free(unsafe.Pointer(n)) return (unsafe.Pointer)(C.call_alcOpenDevice(alcOpenDeviceFunc, (*C.ALCchar)(unsafe.Pointer(n)))) } func alcCloseDevice(d unsafe.Pointer) bool { dev := (*C.ALCdevice)(d) return C.call_alcCloseDevice(alcCloseDeviceFunc, dev) == C.AL_TRUE } func alcCreateContext(d unsafe.Pointer, attrs []int32) unsafe.Pointer { dev := (*C.ALCdevice)(d) // TODO(jbd): Handle attrs. return (unsafe.Pointer)(C.call_alcCreateContext(alcCreateContextFunc, dev, nil)) } func alcMakeContextCurrent(c unsafe.Pointer) bool { ctx := (*C.ALCcontext)(c) return C.call_alcMakeContextCurrent(alcMakeContextCurrentFunc, ctx) == C.AL_TRUE } func alcDestroyContext(c unsafe.Pointer) { C.call_alcDestroyContext(alcDestroyContextFunc, (*C.ALCcontext)(c)) }