Browse Source

macOS/iOS: Add a Metal layer renderer

This restores the functionality of JUCE_COREGRAPHICS_RENDER_WITH_MULTIPLE_PAINT_CALLS.
Using this preprocessor flag may avoid Core Graphics rendering much larger regions than
necessary, but the small regions that are rendered will likely be rendered slower.
Whether using this flag improves or degrades the performance of your rendering overall
will be specific to each application.

Previously enabling JUCE_COREGRAPHICS_RENDER_WITH_MULTIPLE_PAINT_CALLS was ineffective
from versions of macOS around 10.13, but enabling it didn't have any negative impact on
performance. Now enabling JUCE_COREGRAPHICS_RENDER_WITH_MULTIPLE_PAINT_CALLS may result
in slower rendering.
pull/22/head
Tom Poole 4 years ago
parent
commit
3dd812052e
59 changed files with 622 additions and 29 deletions
  1. +29
    -0
      BREAKING-CHANGES.txt
  2. +1
    -1
      README.md
  3. +2
    -0
      examples/DemoRunner/Builds/Android/app/CMakeLists.txt
  4. +2
    -0
      examples/DemoRunner/Builds/MacOSX/DemoRunner.xcodeproj/project.pbxproj
  5. +1
    -0
      examples/DemoRunner/Builds/VisualStudio2015/DemoRunner_App.vcxproj
  6. +3
    -0
      examples/DemoRunner/Builds/VisualStudio2015/DemoRunner_App.vcxproj.filters
  7. +1
    -0
      examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj
  8. +3
    -0
      examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj.filters
  9. +1
    -0
      examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj
  10. +3
    -0
      examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters
  11. +1
    -0
      examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj
  12. +3
    -0
      examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters
  13. +2
    -0
      examples/DemoRunner/Builds/iOS/DemoRunner.xcodeproj/project.pbxproj
  14. +2
    -0
      extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt
  15. +2
    -0
      extras/AudioPerformanceTest/Builds/MacOSX/AudioPerformanceTest.xcodeproj/project.pbxproj
  16. +1
    -0
      extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj
  17. +3
    -0
      extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters
  18. +2
    -0
      extras/AudioPerformanceTest/Builds/iOS/AudioPerformanceTest.xcodeproj/project.pbxproj
  19. +2
    -0
      extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt
  20. +2
    -0
      extras/AudioPluginHost/Builds/MacOSX/AudioPluginHost.xcodeproj/project.pbxproj
  21. +1
    -0
      extras/AudioPluginHost/Builds/VisualStudio2015/AudioPluginHost_App.vcxproj
  22. +3
    -0
      extras/AudioPluginHost/Builds/VisualStudio2015/AudioPluginHost_App.vcxproj.filters
  23. +1
    -0
      extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj
  24. +3
    -0
      extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj.filters
  25. +1
    -0
      extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj
  26. +3
    -0
      extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters
  27. +1
    -0
      extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj
  28. +3
    -0
      extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters
  29. +2
    -0
      extras/AudioPluginHost/Builds/iOS/AudioPluginHost.xcodeproj/project.pbxproj
  30. +2
    -0
      extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt
  31. +2
    -0
      extras/NetworkGraphicsDemo/Builds/MacOSX/NetworkGraphicsDemo.xcodeproj/project.pbxproj
  32. +1
    -0
      extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj
  33. +3
    -0
      extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters
  34. +2
    -0
      extras/NetworkGraphicsDemo/Builds/iOS/NetworkGraphicsDemo.xcodeproj/project.pbxproj
  35. +2
    -0
      extras/Projucer/Builds/MacOSX/Projucer.xcodeproj/project.pbxproj
  36. +1
    -0
      extras/Projucer/Builds/VisualStudio2015/Projucer_App.vcxproj
  37. +3
    -0
      extras/Projucer/Builds/VisualStudio2015/Projucer_App.vcxproj.filters
  38. +1
    -0
      extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj
  39. +3
    -0
      extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj.filters
  40. +1
    -0
      extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj
  41. +3
    -0
      extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters
  42. +1
    -0
      extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj
  43. +3
    -0
      extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters
  44. +2
    -0
      extras/UnitTestRunner/Builds/MacOSX/UnitTestRunner.xcodeproj/project.pbxproj
  45. +1
    -0
      extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj
  46. +3
    -0
      extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj.filters
  47. +1
    -0
      extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj
  48. +3
    -0
      extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters
  49. +1
    -0
      extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj
  50. +3
    -0
      extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters
  51. +1
    -0
      extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj
  52. +3
    -0
      extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj.filters
  53. +3
    -0
      modules/juce_core/native/juce_mac_ObjCHelpers.h
  54. +2
    -2
      modules/juce_core/system/juce_TargetPlatform.h
  55. +2
    -0
      modules/juce_gui_basics/juce_gui_basics.cpp
  56. +4
    -2
      modules/juce_gui_basics/juce_gui_basics.h
  57. +65
    -6
      modules/juce_gui_basics/native/juce_ios_UIViewComponentPeer.mm
  58. +338
    -0
      modules/juce_gui_basics/native/juce_mac_CGMetalLayerRenderer.h
  59. +78
    -18
      modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm

+ 29
- 0
BREAKING-CHANGES.txt View File

@@ -4,6 +4,35 @@ JUCE breaking changes
develop
=======

Change
------
The optional JUCE_COREGRAPHICS_RENDER_WITH_MULTIPLE_PAINT_CALLS preprocessor
flag will now use a new Metal layer renderer when running on macOS 10.14 or
later. The minimum requirements for building macOS and iOS software are now
macOS 10.13.6 and Xcode 10.1.

Possible Issues
---------------
Previously enabling JUCE_COREGRAPHICS_RENDER_WITH_MULTIPLE_PAINT_CALLS had no
negative effect on performance. Now it may slow rendering down.

Workaround
----------
Disable JUCE_COREGRAPHICS_RENDER_WITH_MULTIPLE_PAINT_CALLS.

Rationale
---------
JUCE_COREGRAPHICS_RENDER_WITH_MULTIPLE_PAINT_CALLS has been ineffective when
running on macOS 10.13 or later. Enabling this flag, and hence using the new
Metal layer renderer when running on macOS 10.14, restores the previous
behaviour and fixes problems where Core Graphics will render much larger
regions than necessary. However, the new renderer will may be slower than the
recently introduced default of asynchronous Core Graphics rendering, depending
on the regions that Core Graphcis is redrawing. Whether
JUCE_COREGRAPHICS_RENDER_WITH_MULTIPLE_PAINT_CALLS improves or degrades
performance is specific to an application.


Change
------
The optional JUCE_COREGRAPHICS_DRAW_ASYNC preprocessor flag has been removed


+ 1
- 1
README.md View File

@@ -56,7 +56,7 @@ of the target you wish to build.

#### Building JUCE Projects

- __macOS/iOS__: Xcode 9.2 (macOS 10.12.6)
- __macOS/iOS__: Xcode 10.1 (macOS 10.13.6)
- __Windows__: Windows 8.1 and Visual Studio 2015 Update 3 64-bit
- __Linux__: g++ 5.0 or Clang 3.4 (for a full list of dependencies, see
[here](/docs/Linux%20Dependencies.md)).


+ 2
- 0
examples/DemoRunner/Builds/Android/app/CMakeLists.txt View File

@@ -1598,6 +1598,7 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_gui_basics/native/juce_ios_Windowing.mm"
"../../../../../modules/juce_gui_basics/native/juce_linux_FileChooser.cpp"
"../../../../../modules/juce_gui_basics/native/juce_linux_Windowing.cpp"
"../../../../../modules/juce_gui_basics/native/juce_mac_CGMetalLayerRenderer.h"
"../../../../../modules/juce_gui_basics/native/juce_mac_FileChooser.mm"
"../../../../../modules/juce_gui_basics/native/juce_mac_MainMenu.mm"
"../../../../../modules/juce_gui_basics/native/juce_mac_MouseCursor.mm"
@@ -3417,6 +3418,7 @@ set_source_files_properties("../../../../../modules/juce_gui_basics/native/juce_
set_source_files_properties("../../../../../modules/juce_gui_basics/native/juce_ios_Windowing.mm" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_gui_basics/native/juce_linux_FileChooser.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_gui_basics/native/juce_linux_Windowing.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_gui_basics/native/juce_mac_CGMetalLayerRenderer.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_gui_basics/native/juce_mac_FileChooser.mm" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_gui_basics/native/juce_mac_MainMenu.mm" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_gui_basics/native/juce_mac_MouseCursor.mm" PROPERTIES HEADER_FILE_ONLY TRUE)


+ 2
- 0
examples/DemoRunner/Builds/MacOSX/DemoRunner.xcodeproj/project.pbxproj View File

@@ -563,6 +563,7 @@
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules";
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion";
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion";
OTHER_LDFLAGS = "-weak_framework Metal -weak_framework MetalKit";
PRODUCT_BUNDLE_IDENTIFIER = com.rmsl.jucedemorunner;
PRODUCT_NAME = "DemoRunner";
USE_HEADERMAP = NO;
@@ -644,6 +645,7 @@
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules";
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion";
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion";
OTHER_LDFLAGS = "-weak_framework Metal -weak_framework MetalKit";
PRODUCT_BUNDLE_IDENTIFIER = com.rmsl.jucedemorunner;
PRODUCT_NAME = "DemoRunner";
USE_HEADERMAP = NO;


+ 1
- 0
examples/DemoRunner/Builds/VisualStudio2015/DemoRunner_App.vcxproj View File

@@ -3322,6 +3322,7 @@
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_MultiTouchMapper.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_ScopedDPIAwarenessDisabler.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_win32_ScopedThreadDPIAwarenessSetter.h"/>


+ 3
- 0
examples/DemoRunner/Builds/VisualStudio2015/DemoRunner_App.vcxproj.filters View File

@@ -5601,6 +5601,9 @@
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h">
<Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h">
<Filter>JUCE Modules\juce_gui_basics\native</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_MultiTouchMapper.h">
<Filter>JUCE Modules\juce_gui_basics\native</Filter>
</ClInclude>


+ 1
- 0
examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj View File

@@ -3322,6 +3322,7 @@
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_MultiTouchMapper.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_ScopedDPIAwarenessDisabler.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_win32_ScopedThreadDPIAwarenessSetter.h"/>


+ 3
- 0
examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj.filters View File

@@ -5601,6 +5601,9 @@
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h">
<Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h">
<Filter>JUCE Modules\juce_gui_basics\native</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_MultiTouchMapper.h">
<Filter>JUCE Modules\juce_gui_basics\native</Filter>
</ClInclude>


+ 1
- 0
examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj View File

@@ -3322,6 +3322,7 @@
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_MultiTouchMapper.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_ScopedDPIAwarenessDisabler.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_win32_ScopedThreadDPIAwarenessSetter.h"/>


+ 3
- 0
examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters View File

@@ -5601,6 +5601,9 @@
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h">
<Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h">
<Filter>JUCE Modules\juce_gui_basics\native</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_MultiTouchMapper.h">
<Filter>JUCE Modules\juce_gui_basics\native</Filter>
</ClInclude>


+ 1
- 0
examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj View File

@@ -3322,6 +3322,7 @@
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_MultiTouchMapper.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_ScopedDPIAwarenessDisabler.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_win32_ScopedThreadDPIAwarenessSetter.h"/>


+ 3
- 0
examples/DemoRunner/Builds/VisualStudio2022/DemoRunner_App.vcxproj.filters View File

@@ -5601,6 +5601,9 @@
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h">
<Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h">
<Filter>JUCE Modules\juce_gui_basics\native</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_MultiTouchMapper.h">
<Filter>JUCE Modules\juce_gui_basics\native</Filter>
</ClInclude>


+ 2
- 0
examples/DemoRunner/Builds/iOS/DemoRunner.xcodeproj/project.pbxproj View File

@@ -566,6 +566,7 @@
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules";
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion";
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion";
OTHER_LDFLAGS = "-weak_framework Metal -weak_framework MetalKit";
PRODUCT_BUNDLE_IDENTIFIER = com.rmsl.jucedemorunner;
PRODUCT_NAME = "DemoRunner";
USE_HEADERMAP = NO;
@@ -647,6 +648,7 @@
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules";
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion";
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion";
OTHER_LDFLAGS = "-weak_framework Metal -weak_framework MetalKit";
PRODUCT_BUNDLE_IDENTIFIER = com.rmsl.jucedemorunner;
PRODUCT_NAME = "DemoRunner";
USE_HEADERMAP = NO;


+ 2
- 0
extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt View File

@@ -1383,6 +1383,7 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_gui_basics/native/juce_ios_Windowing.mm"
"../../../../../modules/juce_gui_basics/native/juce_linux_FileChooser.cpp"
"../../../../../modules/juce_gui_basics/native/juce_linux_Windowing.cpp"
"../../../../../modules/juce_gui_basics/native/juce_mac_CGMetalLayerRenderer.h"
"../../../../../modules/juce_gui_basics/native/juce_mac_FileChooser.mm"
"../../../../../modules/juce_gui_basics/native/juce_mac_MainMenu.mm"
"../../../../../modules/juce_gui_basics/native/juce_mac_MouseCursor.mm"
@@ -2900,6 +2901,7 @@ set_source_files_properties("../../../../../modules/juce_gui_basics/native/juce_
set_source_files_properties("../../../../../modules/juce_gui_basics/native/juce_ios_Windowing.mm" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_gui_basics/native/juce_linux_FileChooser.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_gui_basics/native/juce_linux_Windowing.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_gui_basics/native/juce_mac_CGMetalLayerRenderer.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_gui_basics/native/juce_mac_FileChooser.mm" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_gui_basics/native/juce_mac_MainMenu.mm" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_gui_basics/native/juce_mac_MouseCursor.mm" PROPERTIES HEADER_FILE_ONLY TRUE)


+ 2
- 0
extras/AudioPerformanceTest/Builds/MacOSX/AudioPerformanceTest.xcodeproj/project.pbxproj View File

@@ -362,6 +362,7 @@
INSTALL_PATH = "$(HOME)/Applications";
MACOSX_DEPLOYMENT_TARGET = 10.11;
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules";
OTHER_LDFLAGS = "-weak_framework Metal -weak_framework MetalKit";
PRODUCT_BUNDLE_IDENTIFIER = com.juce.AudioPerformanceTest;
PRODUCT_NAME = "AudioPerformanceTest";
USE_HEADERMAP = NO;
@@ -425,6 +426,7 @@
LLVM_LTO = YES;
MACOSX_DEPLOYMENT_TARGET = 10.11;
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules";
OTHER_LDFLAGS = "-weak_framework Metal -weak_framework MetalKit";
PRODUCT_BUNDLE_IDENTIFIER = com.juce.AudioPerformanceTest;
PRODUCT_NAME = "AudioPerformanceTest";
USE_HEADERMAP = NO;


+ 1
- 0
extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj View File

@@ -2821,6 +2821,7 @@
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_MultiTouchMapper.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_ScopedDPIAwarenessDisabler.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_win32_ScopedThreadDPIAwarenessSetter.h"/>


+ 3
- 0
extras/AudioPerformanceTest/Builds/VisualStudio2022/AudioPerformanceTest_App.vcxproj.filters View File

@@ -4716,6 +4716,9 @@
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h">
<Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h">
<Filter>JUCE Modules\juce_gui_basics\native</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_MultiTouchMapper.h">
<Filter>JUCE Modules\juce_gui_basics\native</Filter>
</ClInclude>


+ 2
- 0
extras/AudioPerformanceTest/Builds/iOS/AudioPerformanceTest.xcodeproj/project.pbxproj View File

@@ -374,6 +374,7 @@
INFOPLIST_PREPROCESS = NO;
INSTALL_PATH = "$(HOME)/Applications";
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules";
OTHER_LDFLAGS = "-weak_framework Metal -weak_framework MetalKit";
PRODUCT_BUNDLE_IDENTIFIER = com.juce.AudioPerformanceTest;
PRODUCT_NAME = "AudioPerformanceTest";
USE_HEADERMAP = NO;
@@ -436,6 +437,7 @@
INSTALL_PATH = "$(HOME)/Applications";
LLVM_LTO = YES;
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules";
OTHER_LDFLAGS = "-weak_framework Metal -weak_framework MetalKit";
PRODUCT_BUNDLE_IDENTIFIER = com.juce.AudioPerformanceTest;
PRODUCT_NAME = "AudioPerformanceTest";
USE_HEADERMAP = NO;


+ 2
- 0
extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt View File

@@ -1505,6 +1505,7 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_gui_basics/native/juce_ios_Windowing.mm"
"../../../../../modules/juce_gui_basics/native/juce_linux_FileChooser.cpp"
"../../../../../modules/juce_gui_basics/native/juce_linux_Windowing.cpp"
"../../../../../modules/juce_gui_basics/native/juce_mac_CGMetalLayerRenderer.h"
"../../../../../modules/juce_gui_basics/native/juce_mac_FileChooser.mm"
"../../../../../modules/juce_gui_basics/native/juce_mac_MainMenu.mm"
"../../../../../modules/juce_gui_basics/native/juce_mac_MouseCursor.mm"
@@ -3176,6 +3177,7 @@ set_source_files_properties("../../../../../modules/juce_gui_basics/native/juce_
set_source_files_properties("../../../../../modules/juce_gui_basics/native/juce_ios_Windowing.mm" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_gui_basics/native/juce_linux_FileChooser.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_gui_basics/native/juce_linux_Windowing.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_gui_basics/native/juce_mac_CGMetalLayerRenderer.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_gui_basics/native/juce_mac_FileChooser.mm" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_gui_basics/native/juce_mac_MainMenu.mm" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_gui_basics/native/juce_mac_MouseCursor.mm" PROPERTIES HEADER_FILE_ONLY TRUE)


+ 2
- 0
extras/AudioPluginHost/Builds/MacOSX/AudioPluginHost.xcodeproj/project.pbxproj View File

@@ -488,6 +488,7 @@
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules";
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion";
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion";
OTHER_LDFLAGS = "-weak_framework Metal -weak_framework MetalKit";
PRODUCT_BUNDLE_IDENTIFIER = com.juce.pluginhost;
PRODUCT_NAME = "AudioPluginHost";
USE_HEADERMAP = NO;
@@ -617,6 +618,7 @@
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules";
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion";
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion";
OTHER_LDFLAGS = "-weak_framework Metal -weak_framework MetalKit";
PRODUCT_BUNDLE_IDENTIFIER = com.juce.pluginhost;
PRODUCT_NAME = "AudioPluginHost";
USE_HEADERMAP = NO;


+ 1
- 0
extras/AudioPluginHost/Builds/VisualStudio2015/AudioPluginHost_App.vcxproj View File

@@ -3056,6 +3056,7 @@
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_MultiTouchMapper.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_ScopedDPIAwarenessDisabler.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_win32_ScopedThreadDPIAwarenessSetter.h"/>


+ 3
- 0
extras/AudioPluginHost/Builds/VisualStudio2015/AudioPluginHost_App.vcxproj.filters View File

@@ -5151,6 +5151,9 @@
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h">
<Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h">
<Filter>JUCE Modules\juce_gui_basics\native</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_MultiTouchMapper.h">
<Filter>JUCE Modules\juce_gui_basics\native</Filter>
</ClInclude>


+ 1
- 0
extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj View File

@@ -3056,6 +3056,7 @@
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_MultiTouchMapper.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_ScopedDPIAwarenessDisabler.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_win32_ScopedThreadDPIAwarenessSetter.h"/>


+ 3
- 0
extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj.filters View File

@@ -5151,6 +5151,9 @@
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h">
<Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h">
<Filter>JUCE Modules\juce_gui_basics\native</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_MultiTouchMapper.h">
<Filter>JUCE Modules\juce_gui_basics\native</Filter>
</ClInclude>


+ 1
- 0
extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj View File

@@ -3056,6 +3056,7 @@
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_MultiTouchMapper.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_ScopedDPIAwarenessDisabler.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_win32_ScopedThreadDPIAwarenessSetter.h"/>


+ 3
- 0
extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters View File

@@ -5151,6 +5151,9 @@
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h">
<Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h">
<Filter>JUCE Modules\juce_gui_basics\native</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_MultiTouchMapper.h">
<Filter>JUCE Modules\juce_gui_basics\native</Filter>
</ClInclude>


+ 1
- 0
extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj View File

@@ -3056,6 +3056,7 @@
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_MultiTouchMapper.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_ScopedDPIAwarenessDisabler.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_win32_ScopedThreadDPIAwarenessSetter.h"/>


+ 3
- 0
extras/AudioPluginHost/Builds/VisualStudio2022/AudioPluginHost_App.vcxproj.filters View File

@@ -5151,6 +5151,9 @@
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h">
<Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h">
<Filter>JUCE Modules\juce_gui_basics\native</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_MultiTouchMapper.h">
<Filter>JUCE Modules\juce_gui_basics\native</Filter>
</ClInclude>


+ 2
- 0
extras/AudioPluginHost/Builds/iOS/AudioPluginHost.xcodeproj/project.pbxproj View File

@@ -496,6 +496,7 @@
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules";
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion";
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion";
OTHER_LDFLAGS = "-weak_framework Metal -weak_framework MetalKit";
PRODUCT_BUNDLE_IDENTIFIER = com.juce.pluginhost;
PRODUCT_NAME = "Plugin Host";
USE_HEADERMAP = NO;
@@ -626,6 +627,7 @@
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules";
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion";
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion";
OTHER_LDFLAGS = "-weak_framework Metal -weak_framework MetalKit";
PRODUCT_BUNDLE_IDENTIFIER = com.juce.pluginhost;
PRODUCT_NAME = "Plugin Host";
USE_HEADERMAP = NO;


+ 2
- 0
extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt View File

@@ -1402,6 +1402,7 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_gui_basics/native/juce_ios_Windowing.mm"
"../../../../../modules/juce_gui_basics/native/juce_linux_FileChooser.cpp"
"../../../../../modules/juce_gui_basics/native/juce_linux_Windowing.cpp"
"../../../../../modules/juce_gui_basics/native/juce_mac_CGMetalLayerRenderer.h"
"../../../../../modules/juce_gui_basics/native/juce_mac_FileChooser.mm"
"../../../../../modules/juce_gui_basics/native/juce_mac_MainMenu.mm"
"../../../../../modules/juce_gui_basics/native/juce_mac_MouseCursor.mm"
@@ -2999,6 +3000,7 @@ set_source_files_properties("../../../../../modules/juce_gui_basics/native/juce_
set_source_files_properties("../../../../../modules/juce_gui_basics/native/juce_ios_Windowing.mm" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_gui_basics/native/juce_linux_FileChooser.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_gui_basics/native/juce_linux_Windowing.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_gui_basics/native/juce_mac_CGMetalLayerRenderer.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_gui_basics/native/juce_mac_FileChooser.mm" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_gui_basics/native/juce_mac_MainMenu.mm" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_gui_basics/native/juce_mac_MouseCursor.mm" PROPERTIES HEADER_FILE_ONLY TRUE)


+ 2
- 0
extras/NetworkGraphicsDemo/Builds/MacOSX/NetworkGraphicsDemo.xcodeproj/project.pbxproj View File

@@ -406,6 +406,7 @@
LLVM_LTO = YES;
MACOSX_DEPLOYMENT_TARGET = 10.9;
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules";
OTHER_LDFLAGS = "-weak_framework Metal -weak_framework MetalKit";
PRODUCT_BUNDLE_IDENTIFIER = com.juce.NetworkGraphicsDemo;
PRODUCT_NAME = "JUCE Network Graphics Demo";
USE_HEADERMAP = NO;
@@ -569,6 +570,7 @@
INSTALL_PATH = "$(HOME)/Applications";
MACOSX_DEPLOYMENT_TARGET = 10.9;
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules";
OTHER_LDFLAGS = "-weak_framework Metal -weak_framework MetalKit";
PRODUCT_BUNDLE_IDENTIFIER = com.juce.NetworkGraphicsDemo;
PRODUCT_NAME = "JUCE Network Graphics Demo";
USE_HEADERMAP = NO;


+ 1
- 0
extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj View File

@@ -2919,6 +2919,7 @@
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_MultiTouchMapper.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_ScopedDPIAwarenessDisabler.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_win32_ScopedThreadDPIAwarenessSetter.h"/>


+ 3
- 0
extras/NetworkGraphicsDemo/Builds/VisualStudio2022/NetworkGraphicsDemo_App.vcxproj.filters View File

@@ -4878,6 +4878,9 @@
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h">
<Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h">
<Filter>JUCE Modules\juce_gui_basics\native</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_MultiTouchMapper.h">
<Filter>JUCE Modules\juce_gui_basics\native</Filter>
</ClInclude>


+ 2
- 0
extras/NetworkGraphicsDemo/Builds/iOS/NetworkGraphicsDemo.xcodeproj/project.pbxproj View File

@@ -418,6 +418,7 @@
INSTALL_PATH = "$(HOME)/Applications";
LLVM_LTO = YES;
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules";
OTHER_LDFLAGS = "-weak_framework Metal -weak_framework MetalKit";
PRODUCT_BUNDLE_IDENTIFIER = com.juce.NetworkGraphicsDemo;
PRODUCT_NAME = "JUCE Network Graphics Demo";
USE_HEADERMAP = NO;
@@ -584,6 +585,7 @@
INFOPLIST_PREPROCESS = NO;
INSTALL_PATH = "$(HOME)/Applications";
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules";
OTHER_LDFLAGS = "-weak_framework Metal -weak_framework MetalKit";
PRODUCT_BUNDLE_IDENTIFIER = com.juce.NetworkGraphicsDemo;
PRODUCT_NAME = "JUCE Network Graphics Demo";
USE_HEADERMAP = NO;


+ 2
- 0
extras/Projucer/Builds/MacOSX/Projucer.xcodeproj/project.pbxproj View File

@@ -1172,6 +1172,7 @@
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../Build $(SRCROOT)/../../../../modules";
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion";
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion";
OTHER_LDFLAGS = "-weak_framework Metal -weak_framework MetalKit";
PRODUCT_BUNDLE_IDENTIFIER = com.juce.theprojucer;
PRODUCT_NAME = "Projucer";
USE_HEADERMAP = NO;
@@ -1241,6 +1242,7 @@
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../Build $(SRCROOT)/../../../../modules";
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion";
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion";
OTHER_LDFLAGS = "-weak_framework Metal -weak_framework MetalKit";
PRODUCT_BUNDLE_IDENTIFIER = com.juce.theprojucer;
PRODUCT_NAME = "Projucer";
USE_HEADERMAP = NO;


+ 1
- 0
extras/Projucer/Builds/VisualStudio2015/Projucer_App.vcxproj View File

@@ -2058,6 +2058,7 @@
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_MultiTouchMapper.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_ScopedDPIAwarenessDisabler.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_win32_ScopedThreadDPIAwarenessSetter.h"/>


+ 3
- 0
extras/Projucer/Builds/VisualStudio2015/Projucer_App.vcxproj.filters View File

@@ -3537,6 +3537,9 @@
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h">
<Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h">
<Filter>JUCE Modules\juce_gui_basics\native</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_MultiTouchMapper.h">
<Filter>JUCE Modules\juce_gui_basics\native</Filter>
</ClInclude>


+ 1
- 0
extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj View File

@@ -2058,6 +2058,7 @@
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_MultiTouchMapper.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_ScopedDPIAwarenessDisabler.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_win32_ScopedThreadDPIAwarenessSetter.h"/>


+ 3
- 0
extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj.filters View File

@@ -3537,6 +3537,9 @@
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h">
<Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h">
<Filter>JUCE Modules\juce_gui_basics\native</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_MultiTouchMapper.h">
<Filter>JUCE Modules\juce_gui_basics\native</Filter>
</ClInclude>


+ 1
- 0
extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj View File

@@ -2058,6 +2058,7 @@
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_MultiTouchMapper.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_ScopedDPIAwarenessDisabler.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_win32_ScopedThreadDPIAwarenessSetter.h"/>


+ 3
- 0
extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters View File

@@ -3537,6 +3537,9 @@
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h">
<Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h">
<Filter>JUCE Modules\juce_gui_basics\native</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_MultiTouchMapper.h">
<Filter>JUCE Modules\juce_gui_basics\native</Filter>
</ClInclude>


+ 1
- 0
extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj View File

@@ -2058,6 +2058,7 @@
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_MultiTouchMapper.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_ScopedDPIAwarenessDisabler.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_win32_ScopedThreadDPIAwarenessSetter.h"/>


+ 3
- 0
extras/Projucer/Builds/VisualStudio2022/Projucer_App.vcxproj.filters View File

@@ -3537,6 +3537,9 @@
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h">
<Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h">
<Filter>JUCE Modules\juce_gui_basics\native</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_MultiTouchMapper.h">
<Filter>JUCE Modules\juce_gui_basics\native</Filter>
</ClInclude>


+ 2
- 0
extras/UnitTestRunner/Builds/MacOSX/UnitTestRunner.xcodeproj/project.pbxproj View File

@@ -453,6 +453,7 @@
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules";
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion";
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion";
OTHER_LDFLAGS = "-weak_framework Metal -weak_framework MetalKit";
PRODUCT_BUNDLE_IDENTIFIER = com.juce.UnitTestRunner;
PRODUCT_NAME = "UnitTestRunner";
USE_HEADERMAP = NO;
@@ -575,6 +576,7 @@
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules";
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion";
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion";
OTHER_LDFLAGS = "-weak_framework Metal -weak_framework MetalKit";
PRODUCT_BUNDLE_IDENTIFIER = com.juce.UnitTestRunner;
PRODUCT_NAME = "UnitTestRunner";
USE_HEADERMAP = NO;


+ 1
- 0
extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj View File

@@ -3124,6 +3124,7 @@
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_MultiTouchMapper.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_ScopedDPIAwarenessDisabler.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_win32_ScopedThreadDPIAwarenessSetter.h"/>


+ 3
- 0
extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj.filters View File

@@ -5247,6 +5247,9 @@
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h">
<Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h">
<Filter>JUCE Modules\juce_gui_basics\native</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_MultiTouchMapper.h">
<Filter>JUCE Modules\juce_gui_basics\native</Filter>
</ClInclude>


+ 1
- 0
extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj View File

@@ -3124,6 +3124,7 @@
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_MultiTouchMapper.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_ScopedDPIAwarenessDisabler.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_win32_ScopedThreadDPIAwarenessSetter.h"/>


+ 3
- 0
extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters View File

@@ -5247,6 +5247,9 @@
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h">
<Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h">
<Filter>JUCE Modules\juce_gui_basics\native</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_MultiTouchMapper.h">
<Filter>JUCE Modules\juce_gui_basics\native</Filter>
</ClInclude>


+ 1
- 0
extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj View File

@@ -3124,6 +3124,7 @@
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_MultiTouchMapper.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_ScopedDPIAwarenessDisabler.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_win32_ScopedThreadDPIAwarenessSetter.h"/>


+ 3
- 0
extras/UnitTestRunner/Builds/VisualStudio2022/UnitTestRunner_ConsoleApp.vcxproj.filters View File

@@ -5247,6 +5247,9 @@
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h">
<Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h">
<Filter>JUCE Modules\juce_gui_basics\native</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_MultiTouchMapper.h">
<Filter>JUCE Modules\juce_gui_basics\native</Filter>
</ClInclude>


+ 1
- 0
extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj View File

@@ -2895,6 +2895,7 @@
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\accessibility\juce_win32_WindowsUIAWrapper.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_X11_Symbols.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_MultiTouchMapper.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_ScopedDPIAwarenessDisabler.h"/>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_win32_ScopedThreadDPIAwarenessSetter.h"/>


+ 3
- 0
extras/WindowsDLL/Builds/VisualStudio2022/WindowsDLL_StaticLibrary.vcxproj.filters View File

@@ -4845,6 +4845,9 @@
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\x11\juce_linux_XWindowSystem.h">
<Filter>JUCE Modules\juce_gui_basics\native\x11</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_mac_CGMetalLayerRenderer.h">
<Filter>JUCE Modules\juce_gui_basics\native</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\modules\juce_gui_basics\native\juce_MultiTouchMapper.h">
<Filter>JUCE Modules\juce_gui_basics\native</Filter>
</ClInclude>


+ 3
- 0
modules/juce_core/native/juce_mac_ObjCHelpers.h View File

@@ -306,6 +306,9 @@ public:
bool operator== (const ObjCObjectHandle& other) const { return item == other.item; }
bool operator!= (const ObjCObjectHandle& other) const { return ! (*this == other); }
bool operator== (std::nullptr_t) const { return item == nullptr; }
bool operator!= (std::nullptr_t) const { return ! (*this == nullptr); }
private:
void swap (ObjCObjectHandle& other) noexcept { std::swap (other.item, item); }


+ 2
- 2
modules/juce_core/system/juce_TargetPlatform.h View File

@@ -144,8 +144,8 @@
#endif
#if JUCE_MAC
#if ! defined (MAC_OS_X_VERSION_10_11)
#error "The 10.11 SDK (Xcode 7.3.1+) is required to build JUCE apps. You can create apps that run on macOS 10.7+ by changing the deployment target."
#if ! defined (MAC_OS_X_VERSION_10_14)
#error "The 10.14 SDK (Xcode 10.1+) is required to build JUCE apps. You can create apps that run on macOS 10.7+ by changing the deployment target."
#elif MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_7
#error "Building for OSX 10.6 is no longer supported!"
#endif


+ 2
- 0
modules/juce_gui_basics/juce_gui_basics.cpp View File

@@ -42,6 +42,7 @@
#if JUCE_MAC
#import <WebKit/WebKit.h>
#import <IOKit/pwr_mgt/IOPMLib.h>
#import <MetalKit/MetalKit.h>
#if JUCE_SUPPORT_CARBON
#import <Carbon/Carbon.h> // still needed for SetSystemUIMode()
@@ -52,6 +53,7 @@
#import <UserNotifications/UserNotifications.h>
#endif
#import <MetalKit/MetalKit.h>
#import <UIKit/UIActivityViewController.h>
//==============================================================================


+ 4
- 2
modules/juce_gui_basics/juce_gui_basics.h View File

@@ -36,8 +36,10 @@
minimumCppStandard: 14
dependencies: juce_graphics juce_data_structures
OSXFrameworks: Cocoa Carbon QuartzCore
iOSFrameworks: UIKit CoreServices
OSXFrameworks: Carbon Cocoa QuartzCore
WeakOSXFrameworks: Metal MetalKit
iOSFrameworks: CoreServices UIKit
WeakiOSFrameworks: Metal MetalKit
END_JUCE_MODULE_DECLARATION


+ 65
- 6
modules/juce_gui_basics/native/juce_ios_UIViewComponentPeer.mm View File

@@ -16,6 +16,13 @@
==============================================================================
*/
#include "juce_mac_CGMetalLayerRenderer.h"
#if TARGET_OS_SIMULATOR && JUCE_COREGRAPHICS_RENDER_WITH_MULTIPLE_PAINT_CALLS
#warning JUCE_COREGRAPHICS_RENDER_WITH_MULTIPLE_PAINT_CALLS uses parts of the Metal API that are currently unsupported in the simulator - falling back to JUCE_COREGRAPHICS_RENDER_WITH_MULTIPLE_PAINT_CALLS=0
#undef JUCE_COREGRAPHICS_RENDER_WITH_MULTIPLE_PAINT_CALLS
#endif
#if defined (__IPHONE_13_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_0
#define JUCE_HAS_IOS_POINTER_SUPPORT 1
#else
@@ -125,6 +132,8 @@ struct CADisplayLinkDeleter
- (JuceUIView*) initWithOwner: (UIViewComponentPeer*) owner withFrame: (CGRect) frame;
- (void) dealloc;
+ (Class) layerClass;
- (void) displayLinkCallback: (CADisplayLink*) dl;
- (void) drawRect: (CGRect) r;
@@ -197,8 +206,8 @@ struct UIViewPeerControllerReceiver
};
class UIViewComponentPeer : public ComponentPeer,
public FocusChangeListener,
public UIViewPeerControllerReceiver
private FocusChangeListener,
private UIViewPeerControllerReceiver
{
public:
UIViewComponentPeer (Component&, int windowStyleFlags, UIView* viewToAttachTo);
@@ -239,6 +248,7 @@ public:
void displayLinkCallback();
void drawRect (CGRect);
void drawRectWithContext (CGContextRef, CGRect);
bool canBecomeKeyWindow();
//==============================================================================
@@ -315,6 +325,7 @@ private:
}
};
std::unique_ptr<CoreGraphicsMetalLayerRenderer> metalRenderer;
RectangleList<float> deferredRepaints;
//==============================================================================
@@ -514,6 +525,16 @@ MultiTouchMapper<UITouch*> UIViewComponentPeer::currentTouches;
}
//==============================================================================
+ (Class) layerClass
{
#if JUCE_COREGRAPHICS_RENDER_WITH_MULTIPLE_PAINT_CALLS
if (@available (iOS 12, *))
return [CAMetalLayer class];
#endif
return [CALayer class];
}
- (void) displayLinkCallback: (CADisplayLink*) dl
{
if (owner != nullptr)
@@ -689,6 +710,11 @@ UIViewComponentPeer::UIViewComponentPeer (Component& comp, int windowStyleFlags,
view.opaque = component.isOpaque();
view.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent: 0];
#if JUCE_COREGRAPHICS_RENDER_WITH_MULTIPLE_PAINT_CALLS
if (@available (iOS 12, *))
metalRenderer = std::make_unique<CoreGraphicsMetalLayerRenderer> ((CAMetalLayer*) view.layer, comp);
#endif
if ((windowStyleFlags & ComponentPeer::windowRequiresSynchronousCoreGraphicsRendering) == 0)
[[view layer] setDrawsAsynchronously: YES];
@@ -1170,10 +1196,40 @@ void UIViewComponentPeer::globalFocusChanged (Component*)
//==============================================================================
void UIViewComponentPeer::displayLinkCallback()
{
for (const auto& r : deferredRepaints)
[view setNeedsDisplayInRect: convertToCGRect (r)];
if (deferredRepaints.isEmpty())
return;
auto dispatchRectangles = [this] ()
{
// We shouldn't need this preprocessor guard, but when running in the simulator
// CAMetalLayer is flagged as requiring iOS 13
#if JUCE_COREGRAPHICS_RENDER_WITH_MULTIPLE_PAINT_CALLS
if (metalRenderer != nullptr)
{
if (@available (iOS 12, *))
{
return metalRenderer->drawRectangleList ((CAMetalLayer*) view.layer,
(float) view.contentScaleFactor,
view.frame,
component,
[this] (CGContextRef ctx, CGRect r) { drawRectWithContext (ctx, r); },
deferredRepaints);
}
// The creation of metalRenderer should already be guarded with @available (iOS 12, *).
jassertfalse;
return false;
}
#endif
deferredRepaints.clear();
for (const auto& r : deferredRepaints)
[view setNeedsDisplayInRect: convertToCGRect (r)];
return true;
};
if (dispatchRectangles())
deferredRepaints.clear();
}
//==============================================================================
@@ -1182,8 +1238,11 @@ void UIViewComponentPeer::drawRect (CGRect r)
if (r.size.width < 1.0f || r.size.height < 1.0f)
return;
CGContextRef cg = UIGraphicsGetCurrentContext();
drawRectWithContext (UIGraphicsGetCurrentContext(), r);
}
void UIViewComponentPeer::drawRectWithContext (CGContextRef cg, CGRect)
{
if (! component.isOpaque())
CGContextClearRect (cg, CGContextGetClipBoundingBox (cg));


+ 338
- 0
modules/juce_gui_basics/native/juce_mac_CGMetalLayerRenderer.h View File

@@ -0,0 +1,338 @@
/*
==============================================================================
This file is part of the JUCE 7 technical preview.
Copyright (c) 2022 - Raw Material Software Limited
You may use this code under the terms of the GPL v3
(see www.gnu.org/licenses).
For the technical preview this file cannot be licensed commercially.
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
DISCLAIMED.
==============================================================================
*/
// The CoreGraphicsMetalLayerRenderer requires macOS 10.14 and iOS 12.
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wunguarded-availability", "-Wunguarded-availability-new")
namespace juce
{
//==============================================================================
class CoreGraphicsMetalLayerRenderer
{
public:
//==============================================================================
CoreGraphicsMetalLayerRenderer (CAMetalLayer* layer, const Component& comp)
{
device.reset (MTLCreateSystemDefaultDevice());
layer.device = device.get();
layer.framebufferOnly = NO;
layer.pixelFormat = MTLPixelFormatBGRA8Unorm_sRGB;
layer.opaque = comp.isOpaque();
layer.allowsNextDrawableTimeout = NO;
commandQueue.reset ([device.get() newCommandQueue]);
memoryBlitEvent.reset ([device.get() newSharedEvent]);
}
~CoreGraphicsMetalLayerRenderer()
{
stopGpuCommandSubmission = true;
[memoryBlitCommandBuffer.get() waitUntilCompleted];
}
template <typename Callback>
bool drawRectangleList (CAMetalLayer* layer,
float scaleFactor,
CGRect viewFrame,
const Component& comp,
Callback&& drawRectWithContext,
const RectangleList<float>& dirtyRegions)
{
if (resources != nullptr)
{
// If we haven't finished blitting the CPU texture to the GPU then
// report that we have been unable to draw anything.
if (memoryBlitEvent.get().signaledValue != memoryBlitCounter + 1)
return false;
++memoryBlitCounter;
}
layer.contentsScale = scaleFactor;
const auto drawableSizeTansform = CGAffineTransformMakeScale (layer.contentsScale,
layer.contentsScale);
const auto transformedFrameSize = CGSizeApplyAffineTransform (viewFrame.size, drawableSizeTansform);
const auto componentHeight = comp.getHeight();
if (! CGSizeEqualToSize (layer.drawableSize, transformedFrameSize))
{
layer.drawableSize = transformedFrameSize;
resources = std::make_unique<Resources> (device.get(), layer, componentHeight);
}
auto gpuTexture = resources->getGpuTexture();
if (gpuTexture == nullptr)
{
jassertfalse;
return false;
}
auto cgContext = resources->getCGContext();
for (auto rect : dirtyRegions)
{
const auto cgRect = convertToCGRect (rect);
CGContextSaveGState (cgContext);
CGContextClipToRect (cgContext, cgRect);
drawRectWithContext (cgContext, cgRect);
CGContextRestoreGState (cgContext);
}
auto cpuTexture = resources->getCpuTexture();
memoryBlitCommandBuffer.reset ([commandQueue.get() commandBuffer]);
// Command buffers are usually considered temporary, and are automatically released by
// the operating system when the rendering pipeline is finsihed. However, we want to keep
// this one alive so that we can wait for pipeline completion in the destructor.
[memoryBlitCommandBuffer.get() retain];
auto blitCommandEncoder = [memoryBlitCommandBuffer.get() blitCommandEncoder];
[blitCommandEncoder copyFromTexture: cpuTexture
sourceSlice: 0
sourceLevel: 0
sourceOrigin: MTLOrigin{}
sourceSize: MTLSize { cpuTexture.width, cpuTexture.height, 1 }
toTexture: gpuTexture
destinationSlice: 0
destinationLevel: 0
destinationOrigin: MTLOrigin{}];
[blitCommandEncoder endEncoding];
// Signal that the GPU has finished using the CPU texture
[memoryBlitCommandBuffer.get() encodeSignalEvent: memoryBlitEvent.get()
value: memoryBlitCounter + 1];
[memoryBlitCommandBuffer.get() addScheduledHandler: ^(id<MTLCommandBuffer>)
{
// We're on a Metal thread, so we can make a blocking nextDrawable call
// without stalling the message thread.
// Check if we can do an early exit.
if (stopGpuCommandSubmission)
return;
@autoreleasepool
{
id<CAMetalDrawable> drawable = [layer nextDrawable];
id<MTLCommandBuffer> presentationCommandBuffer = [commandQueue.get() commandBuffer];
auto presentationBlitCommandEncoder = [presentationCommandBuffer blitCommandEncoder];
[presentationBlitCommandEncoder copyFromTexture: gpuTexture
sourceSlice: 0
sourceLevel: 0
sourceOrigin: MTLOrigin{}
sourceSize: MTLSize { gpuTexture.width, gpuTexture.height, 1 }
toTexture: drawable.texture
destinationSlice: 0
destinationLevel: 0
destinationOrigin: MTLOrigin{}];
[presentationBlitCommandEncoder endEncoding];
[presentationCommandBuffer addScheduledHandler: ^(id<MTLCommandBuffer>)
{
[drawable present];
}];
[presentationCommandBuffer commit];
}
}];
[memoryBlitCommandBuffer.get() commit];
return true;
}
private:
//==============================================================================
static auto alignTo (size_t n, size_t alignment)
{
return ((n + alignment - 1) / alignment) * alignment;
}
//==============================================================================
struct TextureDeleter
{
void operator() (id<MTLTexture> texture) const noexcept
{
[texture setPurgeableState: MTLPurgeableStateEmpty];
[texture release];
}
};
using TextureUniquePtr = std::unique_ptr<std::remove_pointer_t<id<MTLTexture>>, TextureDeleter>;
//==============================================================================
class GpuTexturePool
{
public:
GpuTexturePool (id<MTLDevice> metalDevice, MTLTextureDescriptor* descriptor)
{
for (auto& t : textureCache)
t.reset ([metalDevice newTextureWithDescriptor: descriptor]);
}
id<MTLTexture> take() const
{
auto iter = std::find_if (textureCache.begin(), textureCache.end(),
[] (const TextureUniquePtr& t) { return [t.get() retainCount] == 1; });
return iter == textureCache.end() ? nullptr : (*iter).get();
}
private:
std::array<TextureUniquePtr, 3> textureCache;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (GpuTexturePool)
JUCE_DECLARE_NON_MOVEABLE (GpuTexturePool)
};
//==============================================================================
class Resources
{
public:
Resources (id<MTLDevice> metalDevice, CAMetalLayer* layer, int componentHeight)
{
const auto bytesPerRow = alignTo ((size_t) layer.drawableSize.width * 4, 256);
const auto allocationSize = cpuRenderMemory.ensureSize (bytesPerRow * (size_t) layer.drawableSize.height);
ObjCObjectHandle<id<MTLBuffer>> buffer { [metalDevice newBufferWithBytesNoCopy: cpuRenderMemory.get()
length: allocationSize
options: MTLResourceStorageModeShared
deallocator: nullptr] };
auto* textureDesc = [MTLTextureDescriptor texture2DDescriptorWithPixelFormat: layer.pixelFormat
width: (NSUInteger) layer.drawableSize.width
height: (NSUInteger) layer.drawableSize.height
mipmapped: NO];
textureDesc.storageMode = buffer.get().storageMode;
textureDesc.usage = MTLTextureUsageShaderRead;
cpuTexture.reset ([buffer.get() newTextureWithDescriptor: textureDesc
offset: 0
bytesPerRow: bytesPerRow]);
cgContext.reset (CGBitmapContextCreate (cpuRenderMemory.get(),
(size_t) layer.drawableSize.width,
(size_t) layer.drawableSize.height,
8, // Bits per component
bytesPerRow,
CGColorSpaceCreateWithName (kCGColorSpaceSRGB),
(uint32_t) kCGImageAlphaPremultipliedFirst | (uint32_t) kCGBitmapByteOrder32Host));
CGContextScaleCTM (cgContext.get(), layer.contentsScale, layer.contentsScale);
CGContextConcatCTM (cgContext.get(), CGAffineTransformMake (1, 0, 0, -1, 0, componentHeight));
textureDesc.storageMode = MTLStorageModePrivate;
gpuTexturePool = std::make_unique<GpuTexturePool> (metalDevice, textureDesc);
}
CGContextRef getCGContext() const noexcept { return cgContext.get(); }
id<MTLTexture> getCpuTexture() const noexcept { return cpuTexture.get(); }
id<MTLTexture> getGpuTexture() noexcept { return gpuTexturePool == nullptr ? nullptr : gpuTexturePool->take(); }
private:
class AlignedMemory
{
public:
AlignedMemory() = default;
void* get()
{
return allocation != nullptr ? allocation->data : nullptr;
}
size_t ensureSize (size_t newSize)
{
const auto alignedSize = alignTo (newSize, pagesize);
if (alignedSize > size)
{
size = std::max (alignedSize, alignTo ((size_t) (size * growthFactor), pagesize));
allocation = std::make_unique<AllocationWrapper> (pagesize, size);
}
return size;
}
private:
static constexpr float growthFactor = 1.3f;
const size_t pagesize = (size_t) getpagesize();
struct AllocationWrapper
{
AllocationWrapper (size_t alignment, size_t allocationSize)
{
if (posix_memalign (&data, alignment, allocationSize) != 0)
jassertfalse;
}
~AllocationWrapper()
{
::free (data);
}
void* data = nullptr;
};
std::unique_ptr<AllocationWrapper> allocation;
size_t size = 0;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AlignedMemory)
JUCE_DECLARE_NON_MOVEABLE (AlignedMemory)
};
AlignedMemory cpuRenderMemory;
detail::ContextPtr cgContext;
TextureUniquePtr cpuTexture;
std::unique_ptr<GpuTexturePool> gpuTexturePool;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (Resources)
JUCE_DECLARE_NON_MOVEABLE (Resources)
};
//==============================================================================
std::unique_ptr<Resources> resources;
ObjCObjectHandle<id<MTLDevice>> device;
ObjCObjectHandle<id<MTLCommandQueue>> commandQueue;
ObjCObjectHandle<id<MTLCommandBuffer>> memoryBlitCommandBuffer;
ObjCObjectHandle<id<MTLSharedEvent>> memoryBlitEvent;
uint64_t memoryBlitCounter = 0;
std::atomic<bool> stopGpuCommandSubmission { false };
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (CoreGraphicsMetalLayerRenderer)
JUCE_DECLARE_NON_MOVEABLE (CoreGraphicsMetalLayerRenderer)
};
JUCE_END_IGNORE_WARNINGS_GCC_LIKE
}

+ 78
- 18
modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm View File

@@ -16,6 +16,8 @@
==============================================================================
*/
#include "juce_mac_CGMetalLayerRenderer.h"
@interface NSEvent (DeviceDelta)
- (float)deviceDeltaX;
- (float)deviceDeltaY;
@@ -24,14 +26,11 @@
//==============================================================================
namespace juce
{
typedef void (*AppFocusChangeCallback)();
extern AppFocusChangeCallback appFocusChangeCallback;
typedef bool (*CheckEventBlockedByModalComps) (NSEvent*);
extern CheckEventBlockedByModalComps isEventBlockedByModalComps;
}
namespace juce
{
using AppFocusChangeCallback = void (*)();
extern AppFocusChangeCallback appFocusChangeCallback;
using CheckEventBlockedByModalComps = bool (*) (NSEvent*);
extern CheckEventBlockedByModalComps isEventBlockedByModalComps;
//==============================================================================
static constexpr int translateVirtualToAsciiKeyCode (int keyCode) noexcept
@@ -918,6 +917,11 @@ public:
JUCE_END_IGNORE_WARNINGS_GCC_LIKE
}();
drawRectWithContext (cg, r);
}
void drawRectWithContext (CGContextRef cg, NSRect r)
{
if (! component.isOpaque())
CGContextClearRect (cg, CGContextGetClipBoundingBox (cg));
@@ -936,10 +940,12 @@ public:
};
#if USE_COREGRAPHICS_RENDERING && JUCE_COREGRAPHICS_RENDER_WITH_MULTIPLE_PAINT_CALLS
// This option invokes a separate paint call for each rectangle of the clip region.
// It's a long story, but this is a basically a workaround for a CGContext not having
// a way of finding whether a rectangle falls within its clip region
if (usingCoreGraphics)
// This was a workaround for a CGContext not having a way of finding whether a rectangle
// falls within its clip region. However Apple removed the capability of
// [view getRectsBeingDrawn: ...] sometime around 10.13, so on later versions of macOS
// numRects will always be 1 and you'll need to use a CoreGraphicsMetalLayerRenderer
// to avoid CoreGraphics consolidating disparate rects.
if (usingCoreGraphics && metalRenderer == nullptr)
{
const NSRect* rects = nullptr;
NSInteger numRects = 0;
@@ -952,7 +958,7 @@ public:
NSRect rect = rects[i];
CGContextSaveGState (cg);
CGContextClipToRect (cg, CGRectMake (rect.origin.x, rect.origin.y, rect.size.width, rect.size.height));
drawRectWithContext (cg, rect, displayScale);
renderRect (cg, rect, displayScale);
CGContextRestoreGState (cg);
}
@@ -962,11 +968,11 @@ public:
}
#endif
drawRectWithContext (cg, r, displayScale);
renderRect (cg, r, displayScale);
invalidateTransparentWindowShadow();
}
void drawRectWithContext (CGContextRef cg, NSRect r, float displayScale)
void renderRect (CGContextRef cg, NSRect r, float displayScale)
{
#if USE_COREGRAPHICS_RENDERING
if (usingCoreGraphics)
@@ -1049,11 +1055,61 @@ public:
if (msSinceLastRepaint < minimumRepaintInterval && shouldThrottleRepaint())
return;
for (auto& i : deferredRepaints)
[view setNeedsDisplayInRect: makeNSRect (i)];
#if USE_COREGRAPHICS_RENDERING && JUCE_COREGRAPHICS_RENDER_WITH_MULTIPLE_PAINT_CALLS
// We require macOS 10.14 to use the Metal layer renderer
if (@available (macOS 10.14, *))
{
const auto& comp = getComponent();
// If we are resizing we need to fall back to synchronous drawing to avoid artefacts
if (areAnyWindowsInLiveResize())
{
if (metalRenderer != nullptr)
{
metalRenderer.reset();
view.wantsLayer = NO;
view.layer = nil;
deferredRepaints = comp.getLocalBounds().toFloat();
}
}
else
{
if (metalRenderer == nullptr)
{
view.wantsLayer = YES;
view.layerContentsRedrawPolicy = NSViewLayerContentsRedrawDuringViewResize;
view.layerContentsPlacement = NSViewLayerContentsPlacementTopLeft;
view.layer = [CAMetalLayer layer];
metalRenderer = std::make_unique<CoreGraphicsMetalLayerRenderer> ((CAMetalLayer*) view.layer, getComponent());
deferredRepaints = comp.getLocalBounds().toFloat();
}
}
}
#endif
auto dispatchRectangles = [this] ()
{
if (metalRenderer != nullptr)
{
return metalRenderer->drawRectangleList ((CAMetalLayer*) view.layer,
(float) [[view window] backingScaleFactor],
view.frame,
getComponent(),
[this] (CGContextRef ctx, CGRect r) { drawRectWithContext (ctx, r); },
deferredRepaints);
}
lastRepaintTime = Time::getMillisecondCounter();
deferredRepaints.clear();
for (auto& i : deferredRepaints)
[view setNeedsDisplayInRect: makeNSRect (i)];
return true;
};
if (dispatchRectangles())
{
lastRepaintTime = Time::getMillisecondCounter();
deferredRepaints.clear();
}
}
void performAnyPendingRepaintsNow() override
@@ -1157,6 +1213,7 @@ public:
void redirectMovedOrResized()
{
handleMovedOrResized();
setNeedsDisplayRectangles();
}
void windowDidChangeScreen()
@@ -1794,6 +1851,7 @@ private:
[window setMaxFullScreenContentSize: NSMakeSize (100000, 100000)];
}
//==============================================================================
void onDisplaySourceCallback()
{
setNeedsDisplayRectangles();
@@ -1836,6 +1894,8 @@ private:
CVDisplayLinkRef displayLink = nullptr;
dispatch_source_t displaySource = nullptr;
std::unique_ptr<CoreGraphicsMetalLayerRenderer> metalRenderer;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (NSViewComponentPeer)
};


Loading…
Cancel
Save