CallbackDeviceTracker.java
com.mojang.blaze3d.audio.CallbackDeviceTracker
信息
- 全限定名:com.mojang.blaze3d.audio.CallbackDeviceTracker
- 类型:public class
- 包:com.mojang.blaze3d.audio
- 源码路径:src/main/java/com/mojang/blaze3d/audio/CallbackDeviceTracker.java
- 起始行号:L14
- 继承:AbstractDeviceTracker
- 职责:
TODO
字段/常量
-
LOGGER- 类型:
Logger - 修饰符:
private static final - 源码定位:
L15 - 说明:
TODO
- 类型:
-
updateRequested- 类型:
boolean - 修饰符:
private volatile - 源码定位:
L16 - 说明:
TODO
- 类型:
-
SUBSCRIBED_EVENT_TYPES- 类型:
int[] - 修饰符:
private static final - 源码定位:
L17 - 说明:
TODO
- 类型:
-
HEX_FORMAT- 类型:
HexFormat - 修饰符:
public static final - 源码定位:
L18 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
public CallbackDeviceTracker(DeviceList deviceList) @ L20
- 构造器名:CallbackDeviceTracker
- 源码定位:L20
- 修饰符:public
参数:
- deviceList: DeviceList
说明:
TODO
方法
下面的方法块按源码顺序生成。
protected boolean isUpdateRequested() @ L24
- 方法名:isUpdateRequested
- 源码定位:L24
- 返回类型:boolean
- 修饰符:protected
参数:
- 无
说明:
TODO
protected void discardUpdateRequest() @ L29
- 方法名:discardUpdateRequest
- 源码定位:L29
- 返回类型:void
- 修饰符:protected
参数:
- 无
说明:
TODO
public static boolean isSupported() @ L34
- 方法名:isSupported
- 源码定位:L34
- 返回类型:boolean
- 修饰符:public static
参数:
- 无
说明:
TODO
public static CallbackDeviceTracker createAndInstall(DeviceList deviceList) @ L44
- 方法名:createAndInstall
- 源码定位:L44
- 返回类型:CallbackDeviceTracker
- 修饰符:public static
参数:
- deviceList: DeviceList
说明:
TODO
private SOFTSystemEventProcI createCallback() @ L51
- 方法名:createCallback
- 源码定位:L51
- 返回类型:SOFTSystemEventProcI
- 修饰符:private
参数:
- 无
说明:
TODO
private static boolean isSupportedForPlaybackDevice(int eventType) @ L72
- 方法名:isSupportedForPlaybackDevice
- 源码定位:L72
- 返回类型:boolean
- 修饰符:private static
参数:
- eventType: int
说明:
TODO
private static String deviceTypeToString(int deviceType) @ L83
- 方法名:deviceTypeToString
- 源码定位:L83
- 返回类型:String
- 修饰符:private static
参数:
- deviceType: int
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class CallbackDeviceTracker extends AbstractDeviceTracker {
private static final Logger LOGGER = LogUtils.getLogger();
private volatile boolean updateRequested;
private static final int[] SUBSCRIBED_EVENT_TYPES = new int[]{6614, 6615, 6616};
public static final HexFormat HEX_FORMAT = HexFormat.of();
public CallbackDeviceTracker(DeviceList deviceList) {
super(deviceList);
}
@Override
protected boolean isUpdateRequested() {
return this.updateRequested;
}
@Override
protected void discardUpdateRequest() {
this.updateRequested = false;
}
public static boolean isSupported() {
for (int eventType : SUBSCRIBED_EVENT_TYPES) {
if (!isSupportedForPlaybackDevice(eventType)) {
return false;
}
}
return true;
}
public static CallbackDeviceTracker createAndInstall(DeviceList deviceList) {
CallbackDeviceTracker result = new CallbackDeviceTracker(deviceList);
SOFTSystemEvents.alcEventControlSOFT(SUBSCRIBED_EVENT_TYPES, true);
SOFTSystemEvents.alcEventCallbackSOFT(result.createCallback(), 0L);
return result;
}
private SOFTSystemEventProcI createCallback() {
return (eventType, deviceType, device, messageLength, messagePtr, userParam) -> {
String deviceTypeString = deviceTypeToString(deviceType);
String message = MemoryUtil.memASCII(messagePtr, messageLength);
switch (eventType) {
case 6614:
LOGGER.debug("Default {} device changed: {}", deviceTypeString, message);
break;
case 6615:
LOGGER.debug("Added new {} device: {}", deviceTypeString, message);
break;
case 6616:
LOGGER.debug("Removed {} device: {}", deviceTypeString, message);
}
if (deviceType == 6612) {
this.updateRequested = true;
}
};
}
private static boolean isSupportedForPlaybackDevice(int eventType) {
int result = SOFTSystemEvents.alcEventIsSupportedSOFT(eventType, 6612);
if (result == 0) {
int error = ALC10.alcGetError(0L);
LOGGER.warn("Failed to check event {}, error: {}", HEX_FORMAT.toHexDigits(eventType), HEX_FORMAT.toHexDigits(error));
return false;
} else {
return result == 6617;
}
}
private static String deviceTypeToString(int deviceType) {
return switch (deviceType) {
case 6612 -> "playback";
case 6613 -> "capture";
default -> "unknown (0x" + HEX_FORMAT.toHexDigits(deviceType) + ")";
};
}
}引用的其他类
-
- 引用位置:
继承
- 引用位置:
-
- 引用位置:
参数
- 引用位置: