This test is entirely dependent on user settings and would fail if hrtfs
were disabled on the testing machines OpenAL installation.
Signed-off-by: Squareys <Squareys@googlemail.com>
Since `ALC_HRTF_SOFT` is a ALC extension, we need to use `alcGetIntegerv()`
instead of `alGetIntegerv()` which requires access to the OpenAL device
stored in `Audio::Context` and therefore the aforementioned methods have
been moved there.
Signed-off-by: Squareys <Squareys@googlemail.com>
If and only if the quaternions to interpolate are equal, the angle between
them is 0.0 and we therefore cannot safely divide by the sin of that angle.
Credits to @wivlaro for finding this one.
Fixes#117.
Signed-off-by: Squareys <Squareys@googlemail.com>
Polished some minor stuff in the code, reordered Renderer getter-only
functions to be at the top, fixed \al_extension and \alc_extension
Doxygen commands to link to proper place and some other minor
Doxygen-related stuff.
Add `HrtfStatus` and queries in `Audio::Renderer`, `ALC::SOFT::HRTF` and
`@requires_alc_extension` notes for relevant methods in `Configuration`.
Signed-off-by: Squareys <Squareys@googlemail.com>
`ALC_SOFTX_HRTF` is the "in dev" hrtf extension present in OpenAL Soft
version 1.16.0, whereas `ALC_SOFT_HRTF` is the finished version of the Hrtf
extension, probably released with OpenAL Soft version 1.17.0.
Signed-off-by: Squareys <Squareys@googlemail.com>
Left todo: once there is a common OpenAL extension registry again,
use that for the al_extension and alc_extension aliases/expansions.
Signed-off-by: Squareys <Squareys@googlemail.com>
Analog to Magnum::Extensions, but without Version, since OpenAL has only
one Version which is in use (OpenAL 1.1).
Signed-off-by: Squareys <Squareys@googlemail.com>
AMD is behaving the same as NVidia (at least on Windows) -- when
creating core context with minimum specified version set to 3.1, it
forces that version instead of going with the largest available version,
which, again, is pretty useless behavior.
Enabling that on both Linux and Windows, the behavior is confirmed on
Windows but I bet it's doing the same on Linux.
GL 3.2 has texelFetch() and layout(pixel_center_integer), which means
that we integer coordinates with no precision loss when addressing
individual pixels in the source texture. In the versions before we have
to craft floating-point coordinates for texture() to grab the value of
wanted pixel with no jumping around or interpolation.
This change improves the behavior *a bit*, but not fully. I'm postponing
this to the point when I have an unit test that compares the output with
ground truth.
For some reason this was causing the inner for cycle to loop
indefinitely on AMD cards. Not a problem or NVidia drivers, Intel
Windows drivers or Mesa. Thanks a lot to @LB-- for the investigation.
The shader code took the image size from uniform if the GL was older
than version 3.2 (GLSL 1.50). But the shader class was setting that
uniform only if the GL was older than version 3.0. Thus the distance
field converter worked only on GL 2.1 and GL >= 3.2.
This was discovered only by accident, thanks to the quite recent
attempts to create core contexts by default. Because apparently setting
explicit version requirements (core GL 3.1) on AMDwill make
wglCreateContext() stay on that version and not choosing any later
compatible version, similarly to how NVidia behaves. That's another bug
for later.
Before the application was just creating the context the old way, thus
all cards compatible with GL3 were at least on GL 3.2 and thus the
missing uniform setting did not affect anybody, thus the bug was
effectively hidden.