aboutsummaryrefslogtreecommitdiffstats
path: root/al
diff options
context:
space:
mode:
Diffstat (limited to 'al')
-rw-r--r--al/buffer.cpp32
-rw-r--r--al/buffer.h3
2 files changed, 35 insertions, 0 deletions
diff --git a/al/buffer.cpp b/al/buffer.cpp
index 8f4228a8..abad6236 100644
--- a/al/buffer.cpp
+++ b/al/buffer.cpp
@@ -1090,6 +1090,26 @@ START_API_FUNC
albuf->PackAlign = static_cast<ALuint>(value);
break;
+ case AL_AMBISONIC_LAYOUT_SOFT:
+ if UNLIKELY(ReadRef(albuf->ref) != 0)
+ context->setError(AL_INVALID_OPERATION, "Modifying in-use buffer %u's ambisonic layout",
+ buffer);
+ else if UNLIKELY(value != AL_FUMA_SOFT && value != AL_ACN_SOFT)
+ context->setError(AL_INVALID_VALUE, "Invalid unpack ambisonic layout %04x", value);
+ else
+ albuf->AmbiLayout = value;
+ break;
+
+ case AL_AMBISONIC_SCALING_SOFT:
+ if UNLIKELY(ReadRef(albuf->ref) != 0)
+ context->setError(AL_INVALID_OPERATION, "Modifying in-use buffer %u's ambisonic scaling",
+ buffer);
+ else if UNLIKELY(value != AL_FUMA_SOFT && value != AL_SN3D_SOFT && value != AL_N3D_SOFT)
+ context->setError(AL_INVALID_VALUE, "Invalid unpack ambisonic scaling %04x", value);
+ else
+ albuf->AmbiScaling = value;
+ break;
+
default:
context->setError(AL_INVALID_ENUM, "Invalid buffer integer property 0x%04x", param);
}
@@ -1125,6 +1145,8 @@ START_API_FUNC
{
case AL_UNPACK_BLOCK_ALIGNMENT_SOFT:
case AL_PACK_BLOCK_ALIGNMENT_SOFT:
+ case AL_AMBISONIC_LAYOUT_SOFT:
+ case AL_AMBISONIC_SCALING_SOFT:
alBufferi(buffer, param, values[0]);
return;
}
@@ -1277,6 +1299,14 @@ START_API_FUNC
*value = static_cast<ALint>(albuf->PackAlign);
break;
+ case AL_AMBISONIC_LAYOUT_SOFT:
+ *value = albuf->AmbiLayout;
+ break;
+
+ case AL_AMBISONIC_SCALING_SOFT:
+ *value = albuf->AmbiScaling;
+ break;
+
default:
context->setError(AL_INVALID_ENUM, "Invalid buffer integer property 0x%04x", param);
}
@@ -1317,6 +1347,8 @@ START_API_FUNC
case AL_SAMPLE_LENGTH_SOFT:
case AL_UNPACK_BLOCK_ALIGNMENT_SOFT:
case AL_PACK_BLOCK_ALIGNMENT_SOFT:
+ case AL_AMBISONIC_LAYOUT_SOFT:
+ case AL_AMBISONIC_SCALING_SOFT:
alGetBufferi(buffer, param, values);
return;
}
diff --git a/al/buffer.h b/al/buffer.h
index d41eec5d..ad7aeb35 100644
--- a/al/buffer.h
+++ b/al/buffer.h
@@ -79,6 +79,9 @@ struct ALbuffer {
ALuint OriginalSize{0};
ALuint OriginalAlign{0};
+ ALenum AmbiLayout{AL_FUMA_SOFT};
+ ALenum AmbiScaling{AL_FUMA_SOFT};
+
ALuint LoopStart{0u};
ALuint LoopEnd{0u};