drivers.cpp 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. auto Program::videoDriverUpdate() -> void {
  2. ruby::video.create(settings.video.driver);
  3. ruby::video.setContext(presentation.viewport.handle());
  4. videoMonitorUpdate();
  5. videoFormatUpdate();
  6. ruby::video.setExclusive(settings.video.exclusive);
  7. ruby::video.setBlocking(settings.video.blocking);
  8. ruby::video.setFlush(settings.video.flush);
  9. ruby::video.setShader(settings.video.shader);
  10. if(!ruby::video.ready()) {
  11. MessageDialog().setText({"Failed to initialize ", settings.video.driver, " video driver."}).setAlignment(presentation).error();
  12. settings.video.driver = "None";
  13. driverSettings.videoDriverUpdate();
  14. }
  15. presentation.loadShaders();
  16. }
  17. auto Program::videoMonitorUpdate() -> void {
  18. if(!ruby::video.hasMonitor(settings.video.monitor)) {
  19. settings.video.monitor = ruby::video.monitor();
  20. }
  21. ruby::video.setMonitor(settings.video.monitor);
  22. }
  23. auto Program::videoFormatUpdate() -> void {
  24. if(!ruby::video.hasFormat(settings.video.format)) {
  25. settings.video.format = ruby::video.format();
  26. }
  27. ruby::video.setFormat(settings.video.format);
  28. }
  29. auto Program::videoFullScreenToggle() -> void {
  30. if(!ruby::video.hasFullScreen()) return;
  31. ruby::video.clear();
  32. if(!ruby::video.fullScreen()) {
  33. ruby::video.setFullScreen(true);
  34. if(!ruby::input.acquired()) {
  35. if(ruby::video.exclusive() || ruby::video.hasMonitors().size() == 1) {
  36. ruby::input.acquire();
  37. }
  38. }
  39. } else {
  40. if(ruby::input.acquired()) {
  41. ruby::input.release();
  42. }
  43. ruby::video.setFullScreen(false);
  44. presentation.viewport.setFocused();
  45. }
  46. }
  47. //
  48. auto Program::audioDriverUpdate() -> void {
  49. ruby::audio.create(settings.audio.driver);
  50. ruby::audio.setContext(presentation.viewport.handle());
  51. audioDeviceUpdate();
  52. audioFrequencyUpdate();
  53. audioLatencyUpdate();
  54. ruby::audio.setExclusive(settings.audio.exclusive);
  55. ruby::audio.setBlocking(settings.audio.blocking);
  56. ruby::audio.setDynamic(settings.audio.dynamic);
  57. if(!ruby::audio.ready()) {
  58. MessageDialog().setText({"Failed to initialize ", settings.audio.driver, " audio driver."}).setAlignment(presentation).error();
  59. settings.audio.driver = "None";
  60. driverSettings.audioDriverUpdate();
  61. }
  62. }
  63. auto Program::audioDeviceUpdate() -> void {
  64. if(!ruby::audio.hasDevice(settings.audio.device)) {
  65. settings.audio.device = ruby::audio.device();
  66. }
  67. ruby::audio.setDevice(settings.audio.device);
  68. }
  69. auto Program::audioFrequencyUpdate() -> void {
  70. if(!ruby::audio.hasFrequency(settings.audio.frequency)) {
  71. settings.audio.frequency = ruby::audio.frequency();
  72. }
  73. ruby::audio.setFrequency(settings.audio.frequency);
  74. for(auto& stream : streams) {
  75. stream->setResamplerFrequency(ruby::audio.frequency());
  76. }
  77. }
  78. auto Program::audioLatencyUpdate() -> void {
  79. if(!ruby::audio.hasLatency(settings.audio.latency)) {
  80. settings.audio.latency = ruby::audio.latency();
  81. }
  82. ruby::audio.setLatency(settings.audio.latency);
  83. }
  84. //
  85. auto Program::inputDriverUpdate() -> void {
  86. ruby::input.create(settings.input.driver);
  87. ruby::input.setContext(presentation.viewport.handle());
  88. ruby::input.onChange({&InputManager::eventInput, &inputManager});
  89. if(!ruby::input.ready()) {
  90. MessageDialog().setText({"Failed to initialize ", settings.input.driver, " input driver."}).setAlignment(presentation).error();
  91. settings.input.driver = "None";
  92. driverSettings.inputDriverUpdate();
  93. }
  94. inputManager.poll(true);
  95. }