mirror of
https://github.com/mackron/miniaudio.git
synced 2026-04-22 00:06:59 +02:00
Update documentation to make it clear that structs are transparent.
This commit is contained in:
+17
@@ -26,6 +26,12 @@ miniaudio includes both low level and high level APIs. The low level API is good
|
|||||||
to do all of their mixing themselves and only require a light weight interface to the underlying
|
to do all of their mixing themselves and only require a light weight interface to the underlying
|
||||||
audio device. The high level API is good for those who have complex mixing and effect requirements.
|
audio device. The high level API is good for those who have complex mixing and effect requirements.
|
||||||
|
|
||||||
|
In miniaudio, objects are transparent structures. Unlike many other libraries, there are no handles
|
||||||
|
to opaque objects which means you need to allocate memory for objects yourself. In the examples
|
||||||
|
presented in this documentation you will often see objects declared on the stack. You need to be
|
||||||
|
careful when translating these examples to your own code so that you don't accidentally declare
|
||||||
|
your objects on the stack and then cause them to become invalid once the function returns.
|
||||||
|
|
||||||
|
|
||||||
1.1. Low Level API
|
1.1. Low Level API
|
||||||
------------------
|
------------------
|
||||||
@@ -304,6 +310,17 @@ with `ma_engine_get_resource_manager()`. The engine itself is a node graph (`ma_
|
|||||||
means you can pass a pointer to the engine object into any of the `ma_node_graph` APIs (with a
|
means you can pass a pointer to the engine object into any of the `ma_node_graph` APIs (with a
|
||||||
cast). Alternatively, you can use `ma_engine_get_node_graph()` instead of a cast.
|
cast). Alternatively, you can use `ma_engine_get_node_graph()` instead of a cast.
|
||||||
|
|
||||||
|
Note that all objects in miniaudio, including the `ma_engine` object in the example above, are
|
||||||
|
transparent structures. There are no handles to opaque structures in miniaudio which means you need
|
||||||
|
to be mindful of how you declare them. In the example above we are declaring it on the stack, but
|
||||||
|
this will result in the struct being invalidated once the function encapsulating it returns. If
|
||||||
|
allocating the engine on the heap is more appropriate, you can easily do so with a standard call
|
||||||
|
to malloc() or whatever heap allocation routine you like:
|
||||||
|
|
||||||
|
```c
|
||||||
|
ma_engine* pEngine = ma_malloc(sizeof(*pEngine), &myAllocationCallbacks);
|
||||||
|
```
|
||||||
|
|
||||||
The `ma_engine` API uses the same config/init pattern used all throughout miniaudio. To configure
|
The `ma_engine` API uses the same config/init pattern used all throughout miniaudio. To configure
|
||||||
an engine, you can fill out a `ma_engine_config` object and pass it into the first parameter of
|
an engine, you can fill out a `ma_engine_config` object and pass it into the first parameter of
|
||||||
`ma_engine_init()`:
|
`ma_engine_init()`:
|
||||||
|
|||||||
Reference in New Issue
Block a user