github.com/SahandAslani/gomobile@v0.0.0-20210909130135-2cb2d44c09b2/exp/audio/al/alc_android.go (about)

     1  // Copyright 2015 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package al
     6  
     7  /*
     8  #include <stdlib.h>
     9  #include <dlfcn.h>
    10  #include <AL/al.h>
    11  #include <AL/alc.h>
    12  
    13  ALCint call_alcGetError(LPALCGETERROR fn, ALCdevice* d) {
    14    return fn(d);
    15  }
    16  
    17  ALCdevice* call_alcOpenDevice(LPALCOPENDEVICE fn, const ALCchar* name) {
    18    return fn(name);
    19  }
    20  
    21  ALCboolean call_alcCloseDevice(LPALCCLOSEDEVICE fn, ALCdevice* d) {
    22    return fn(d);
    23  }
    24  
    25  ALCcontext* call_alcCreateContext(LPALCCREATECONTEXT fn, ALCdevice* d, const ALCint* attrs) {
    26    return fn(d, attrs);
    27  }
    28  
    29  ALCboolean call_alcMakeContextCurrent(LPALCMAKECONTEXTCURRENT fn, ALCcontext* c) {
    30    return fn(c);
    31  }
    32  
    33  void call_alcDestroyContext(LPALCDESTROYCONTEXT fn, ALCcontext* c) {
    34    return fn(c);
    35  }
    36  */
    37  import "C"
    38  import (
    39  	"sync"
    40  	"unsafe"
    41  )
    42  
    43  var once sync.Once
    44  
    45  func alcGetError(d unsafe.Pointer) int32 {
    46  	dev := (*C.ALCdevice)(d)
    47  	return int32(C.call_alcGetError(alcGetErrorFunc, dev))
    48  }
    49  
    50  func alcOpenDevice(name string) unsafe.Pointer {
    51  	once.Do(initAL)
    52  	n := C.CString(name)
    53  	defer C.free(unsafe.Pointer(n))
    54  
    55  	return (unsafe.Pointer)(C.call_alcOpenDevice(alcOpenDeviceFunc, (*C.ALCchar)(unsafe.Pointer(n))))
    56  }
    57  
    58  func alcCloseDevice(d unsafe.Pointer) bool {
    59  	dev := (*C.ALCdevice)(d)
    60  	return C.call_alcCloseDevice(alcCloseDeviceFunc, dev) == C.AL_TRUE
    61  }
    62  
    63  func alcCreateContext(d unsafe.Pointer, attrs []int32) unsafe.Pointer {
    64  	dev := (*C.ALCdevice)(d)
    65  	// TODO(jbd): Handle attrs.
    66  	return (unsafe.Pointer)(C.call_alcCreateContext(alcCreateContextFunc, dev, nil))
    67  }
    68  
    69  func alcMakeContextCurrent(c unsafe.Pointer) bool {
    70  	ctx := (*C.ALCcontext)(c)
    71  	return C.call_alcMakeContextCurrent(alcMakeContextCurrentFunc, ctx) == C.AL_TRUE
    72  }
    73  
    74  func alcDestroyContext(c unsafe.Pointer) {
    75  	C.call_alcDestroyContext(alcDestroyContextFunc, (*C.ALCcontext)(c))
    76  }