| @@ -357,7 +357,7 @@ public final class JuceDemo extends Activity | |||
| @Override | |||
| public void onSurfaceChanged (GL10 unused, int width, int height) | |||
| { | |||
| contextCreated(); | |||
| contextChangedSize(); | |||
| } | |||
| @Override | |||
| @@ -367,6 +367,7 @@ public final class JuceDemo extends Activity | |||
| } | |||
| private native void contextCreated(); | |||
| private native void contextChangedSize(); | |||
| private native void render(); | |||
| } | |||
| @@ -172,7 +172,6 @@ | |||
| 22132E527A92309318A2D572 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationBase.cpp"; path = "../../../../modules/juce_events/messages/juce_ApplicationBase.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 2275EB468CEA505ADE14C225 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AudioDemoSynthPage.cpp; path = ../../Source/demos/AudioDemoSynthPage.cpp; sourceTree = "SOURCE_ROOT"; }; | |||
| 22A86C5C4967A5844323F7BA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DialogWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_DialogWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 22C2C932398DC1EFE0880A9A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_OpenGLComponent.cpp"; path = "../../../../modules/juce_opengl/native/juce_android_OpenGLComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 22CD1BF5E83A216A0D18260D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MultiTouchMapper.h"; path = "../../../../modules/juce_gui_basics/native/juce_MultiTouchMapper.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 22DA9E57AAA25391C7D1FBC6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MessageManager.mm"; path = "../../../../modules/juce_events/native/juce_mac_MessageManager.mm"; sourceTree = "SOURCE_ROOT"; }; | |||
| 2302DFDF103BE152232EA767 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DynamicObject.h"; path = "../../../../modules/juce_core/containers/juce_DynamicObject.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| @@ -355,7 +354,6 @@ | |||
| 4EC68506861032FFD4B848DB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TemporaryFile.h"; path = "../../../../modules/juce_core/files/juce_TemporaryFile.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 4EC77B02BE7457DE877E332B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentAnimator.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentAnimator.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 4F2F636FB9416BFBB1FF2473 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Fonts.cpp"; path = "../../../../modules/juce_graphics/native/juce_android_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 4F802BD98072EA49F7F4FE4A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OpenGLComponent.cpp"; path = "../../../../modules/juce_opengl/opengl/juce_OpenGLComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 4F854124B48F6358A992D164 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ListBox.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ListBox.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 4FC0DDA3086EE26242655E66 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_cryptography.mm"; path = "../../../../modules/juce_cryptography/juce_cryptography.mm"; sourceTree = "SOURCE_ROOT"; }; | |||
| 5010D82E6ED57F014D8E88E3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileTreeComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| @@ -420,6 +418,7 @@ | |||
| 62AAFFC7E5754AA715DCB1E5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TargetPlatform.h"; path = "../../../../modules/juce_core/system/juce_TargetPlatform.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 62AFEF7525003814092C79FA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DragAndDrop.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_win32_DragAndDrop.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 6314AFE1A17F085C028B4C82 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Desktop.cpp"; path = "../../../../modules/juce_gui_basics/components/juce_Desktop.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 639A6B84458054D4E12081EE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGL_ios.h"; path = "../../../../modules/juce_opengl/native/juce_OpenGL_ios.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 63A3A467F124B67D19587D4F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SliderPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_SliderPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 63CF475000C8419AE8D25BD2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativePoint.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativePoint.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 63DD8F6DD0DDC9A6F45E0C90 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NativeMessageBox.h"; path = "../../../../modules/juce_gui_basics/windows/juce_NativeMessageBox.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| @@ -457,7 +456,6 @@ | |||
| 6DF10AFB26794D47F3AC783B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_CameraDevice.cpp"; path = "../../../../modules/juce_video/native/juce_win32_CameraDevice.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 6E00A6B4B754E3008B969B8A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiKeyboardComponent.h"; path = "../../../../modules/juce_audio_utils/gui/juce_MidiKeyboardComponent.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 6E0DA76710F31FA13F5168B3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseListener.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseListener.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 6E1CFF5227B2F2E200DD9EC7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_OpenGLComponent.cpp"; path = "../../../../modules/juce_opengl/native/juce_linux_OpenGLComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 6E365FC14CFBA3BD28196D3A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChangeListener.h"; path = "../../../../modules/juce_events/broadcasters/juce_ChangeListener.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 6EF8660ACF82A6472884ABB6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StandardHeader.h"; path = "../../../../modules/juce_core/system/juce_StandardHeader.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 70350B2642B3D062D0A8D239 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; | |||
| @@ -568,6 +566,7 @@ | |||
| 8F37F4E9DB8E42EDF29DE166 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CameraDemo.cpp; path = ../../Source/demos/CameraDemo.cpp; sourceTree = "SOURCE_ROOT"; }; | |||
| 904B316152B6C23112E0A0B1 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_audio_processors/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; | |||
| 90F9E3FB8FF07BA924E42DC0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Typeface.h"; path = "../../../../modules/juce_graphics/fonts/juce_Typeface.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 91165DCEB698586E84EC57C6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGL_linux.h"; path = "../../../../modules/juce_opengl/native/juce_OpenGL_linux.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 924667AB0E27AC2CE1EB7828 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TopLevelWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_TopLevelWindow.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 927B5B18A655057D57C37D35 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ShapeButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ShapeButton.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 936C6419223D7B28CE16A72B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BufferedInputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_BufferedInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| @@ -632,6 +631,8 @@ | |||
| A588C458AC395D8AC09A433D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MarkerList.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_MarkerList.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| A5A6819C57A0399C81E03301 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Network.cpp"; path = "../../../../modules/juce_core/native/juce_android_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| A6073115FE5E1E635C78DDFE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SpinLock.h"; path = "../../../../modules/juce_core/threads/juce_SpinLock.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| A618A1B49D562ECB86DC46EF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGL_android.h"; path = "../../../../modules/juce_opengl/native/juce_OpenGL_android.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| A6541F1A868B78F7E4A53C77 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGL_osx.h"; path = "../../../../modules/juce_opengl/native/juce_OpenGL_osx.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| A6C2A4889A4E70DE735EBA4B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LowLevelGraphicsPostScriptRenderer.cpp"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| A6C606F3BE6B630561EDE155 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_IIRFilterAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_IIRFilterAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| A6FCBC9721E7FC9DE30B6DC4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Midi.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_linux_Midi.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| @@ -651,6 +652,7 @@ | |||
| A9958339328213FF76D8A79C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseInputSource.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseInputSource.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| A9B72D6049A3539B63AE79D5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CachedComponentImage.h"; path = "../../../../modules/juce_gui_basics/components/juce_CachedComponentImage.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| AA0DE5CA2B089393B110FD25 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableShape.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableShape.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| AAAA086F74F507C87200AD2E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OpenGLPixelFormat.cpp"; path = "../../../../modules/juce_opengl/opengl/juce_OpenGLPixelFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| AAABC8FBF364D9A596F4AA4E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_android_JNIHelpers.h"; path = "../../../../modules/juce_core/native/juce_android_JNIHelpers.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| AAC98CB517D934F42A25416E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BubbleComponent.h"; path = "../../../../modules/juce_gui_basics/misc/juce_BubbleComponent.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| AB4A28A3667EA4C8393470A7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Result.h"; path = "../../../../modules/juce_core/misc/juce_Result.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| @@ -661,7 +663,6 @@ | |||
| ACB502AF25A235733295406E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChangeBroadcaster.h"; path = "../../../../modules/juce_events/broadcasters/juce_ChangeBroadcaster.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| ACC522FB23E25ADDD38F8F98 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSubsectionReader.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioSubsectionReader.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| AE2C0F932F7E54799FA0897C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginListComponent.h"; path = "../../../../modules/juce_audio_processors/scanning/juce_PluginListComponent.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| AE394742FA0F2C6AA39906DD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_OpenGLComponent.mm"; path = "../../../../modules/juce_opengl/native/juce_mac_OpenGLComponent.mm"; sourceTree = "SOURCE_ROOT"; }; | |||
| AE860FA70A2F37F4A889A9EF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ZipFile.h"; path = "../../../../modules/juce_core/zip/juce_ZipFile.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| AEA287A89324FB9D48370C33 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AsyncUpdater.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_AsyncUpdater.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| AF26F1B432EF78EB76107FDA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Timer.cpp"; path = "../../../../modules/juce_events/timers/juce_Timer.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| @@ -680,6 +681,7 @@ | |||
| B428CC689CD359B29C67272B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CallOutBox.h"; path = "../../../../modules/juce_gui_basics/windows/juce_CallOutBox.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| B523ED8502475B9BB3F392C7 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_graphics/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; | |||
| B53B1A87D9A58B3E056B4D8E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageConvolutionKernel.h"; path = "../../../../modules/juce_graphics/images/juce_ImageConvolutionKernel.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| B5671D0DA84B699962CF0179 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGL_win32.h"; path = "../../../../modules/juce_opengl/native/juce_OpenGL_win32.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| B59728841A18523C5950A51B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Timer.h"; path = "../../../../modules/juce_events/timers/juce_Timer.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| B59DA3ED4F12C1FFEE433EE3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DocumentWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_DocumentWindow.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| B5B987C3029862AC58363F1A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageComponent.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ImageComponent.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| @@ -805,9 +807,7 @@ | |||
| D57651845D6D9438DEA62F98 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LeakedObjectDetector.h"; path = "../../../../modules/juce_core/memory/juce_LeakedObjectDetector.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| D5DE603FFC184C590E2A6678 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioCDBurner.h"; path = "../../../../modules/juce_audio_devices/audio_cd/juce_AudioCDBurner.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| D602AE751C3C12A6458FCCD5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableBorderComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableBorderComponent.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| D66048AF1E05FF836B2A813A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_OpenGLComponent.cpp"; path = "../../../../modules/juce_opengl/native/juce_win32_OpenGLComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| D6C9614D1C6493DBEE370646 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileBasedDocument.cpp"; path = "../../../../modules/juce_gui_extra/documents/juce_FileBasedDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| D6D0F076F54C7D669A9717C9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGLComponent.h"; path = "../../../../modules/juce_opengl/opengl/juce_OpenGLComponent.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| D7239D5B984E07808E2DB28C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OpenGLHelpers.cpp"; path = "../../../../modules/juce_opengl/opengl/juce_OpenGLHelpers.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| D7E6E92AA32B7D51489FD256 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentBoundsConstrainer.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| D8081154AA3072D2F2C4B625 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_posix_SharedCode.h"; path = "../../../../modules/juce_core/native/juce_posix_SharedCode.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| @@ -873,7 +873,6 @@ | |||
| ECEFF5A78873B5B388046E7A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Messaging.cpp"; path = "../../../../modules/juce_events/native/juce_win32_Messaging.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| ED467279290C0AA942FB2B27 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OggVorbisAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_OggVorbisAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| ED9A2289AECFD9B928A9A08A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_IIRFilter.h"; path = "../../../../modules/juce_audio_basics/effects/juce_IIRFilter.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| ED9FAEA9116C568942BAD000 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_OpenGLComponent.mm"; path = "../../../../modules/juce_opengl/native/juce_ios_OpenGLComponent.mm"; sourceTree = "SOURCE_ROOT"; }; | |||
| EDDA4ADA880E3B78143801D0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_WASAPI.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_WASAPI.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| EDDDD60231231B8221711145 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseListener.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseListener.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| EE2DACF73E083928ABDDA63B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryIterator.h"; path = "../../../../modules/juce_core/files/juce_DirectoryIterator.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| @@ -1898,8 +1897,6 @@ | |||
| EB8917291F41B7345B13B53E = { isa = PBXGroup; children = ( | |||
| D866C4735BF1EF0CA24FC1FB, | |||
| 87FB016388B49E97FCCBE69B, | |||
| 4F802BD98072EA49F7F4FE4A, | |||
| D6D0F076F54C7D669A9717C9, | |||
| 5786364EC4C531CDE41BDCEA, | |||
| 8878426C7F58CB22969E7133, | |||
| AC3EFDDC80761A45E8BE0624, | |||
| @@ -1910,6 +1907,7 @@ | |||
| D2C40CDF46D894BFC72BDC56, | |||
| E46977801F19277F4D3B324B, | |||
| 17422D876DAAF091ED089B8D, | |||
| AAAA086F74F507C87200AD2E, | |||
| B81FA2ED22BCC03D124031ED, | |||
| 58864C3D7F369EBE01E42C5C, | |||
| 8EEB4DEB11F3DF01BA6F7528, | |||
| @@ -1918,13 +1916,13 @@ | |||
| EC89003BF30329181BB3EA4B, | |||
| D2F161366612A4CDA6372113 ); name = opengl; sourceTree = "<group>"; }; | |||
| C92FEA88254DAAE793DB3CF7 = { isa = PBXGroup; children = ( | |||
| 22C2C932398DC1EFE0880A9A, | |||
| ED9FAEA9116C568942BAD000, | |||
| 6E1CFF5227B2F2E200DD9EC7, | |||
| AE394742FA0F2C6AA39906DD, | |||
| 7E6041874E267458572B93A1, | |||
| 8565630D87FEE505D50CE2EF, | |||
| D66048AF1E05FF836B2A813A ); name = native; sourceTree = "<group>"; }; | |||
| A618A1B49D562ECB86DC46EF, | |||
| 639A6B84458054D4E12081EE, | |||
| 91165DCEB698586E84EC57C6, | |||
| A6541F1A868B78F7E4A53C77, | |||
| B5671D0DA84B699962CF0179, | |||
| 8565630D87FEE505D50CE2EF ); name = native; sourceTree = "<group>"; }; | |||
| 7CFCB9A92FB574419734C1F5 = { isa = PBXGroup; children = ( | |||
| EB8917291F41B7345B13B53E, | |||
| C92FEA88254DAAE793DB3CF7, | |||
| @@ -4265,17 +4265,6 @@ | |||
| <Filter Name="opengl"> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_Draggable3DOrientation.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_Matrix3D.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLComponent.cpp"> | |||
| <FileConfiguration Name="Debug|Win32" | |||
| ExcludedFromBuild="true"> | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| </FileConfiguration> | |||
| <FileConfiguration Name="Release|Win32" | |||
| ExcludedFromBuild="true"> | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| </FileConfiguration> | |||
| </File> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLComponent.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLContext.cpp"> | |||
| <FileConfiguration Name="Debug|Win32" | |||
| ExcludedFromBuild="true"> | |||
| @@ -4331,8 +4320,7 @@ | |||
| </FileConfiguration> | |||
| </File> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLImage.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLPixelFormat.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLShaderProgram.cpp"> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLPixelFormat.cpp"> | |||
| <FileConfiguration Name="Debug|Win32" | |||
| ExcludedFromBuild="true"> | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| @@ -4342,23 +4330,8 @@ | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| </FileConfiguration> | |||
| </File> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLShaderProgram.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLTexture.cpp"> | |||
| <FileConfiguration Name="Debug|Win32" | |||
| ExcludedFromBuild="true"> | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| </FileConfiguration> | |||
| <FileConfiguration Name="Release|Win32" | |||
| ExcludedFromBuild="true"> | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| </FileConfiguration> | |||
| </File> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLTexture.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_Quaternion.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_Vector3D.h"/> | |||
| </Filter> | |||
| <Filter Name="native"> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_android_OpenGLComponent.cpp"> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLPixelFormat.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLShaderProgram.cpp"> | |||
| <FileConfiguration Name="Debug|Win32" | |||
| ExcludedFromBuild="true"> | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| @@ -4368,8 +4341,8 @@ | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| </FileConfiguration> | |||
| </File> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_ios_OpenGLComponent.mm"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_linux_OpenGLComponent.cpp"> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLShaderProgram.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLTexture.cpp"> | |||
| <FileConfiguration Name="Debug|Win32" | |||
| ExcludedFromBuild="true"> | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| @@ -4379,19 +4352,18 @@ | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| </FileConfiguration> | |||
| </File> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_mac_OpenGLComponent.mm"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLTexture.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_Quaternion.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_Vector3D.h"/> | |||
| </Filter> | |||
| <Filter Name="native"> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_MissingGLDefinitions.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_OpenGL_android.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_OpenGL_ios.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_OpenGL_linux.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_OpenGL_osx.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_OpenGL_win32.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_OpenGLExtensions.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_win32_OpenGLComponent.cpp"> | |||
| <FileConfiguration Name="Debug|Win32" | |||
| ExcludedFromBuild="true"> | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| </FileConfiguration> | |||
| <FileConfiguration Name="Release|Win32" | |||
| ExcludedFromBuild="true"> | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| </FileConfiguration> | |||
| </File> | |||
| </Filter> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\juce_module_info"> | |||
| <FileConfiguration Name="Debug|Win32" | |||
| @@ -4265,17 +4265,6 @@ | |||
| <Filter Name="opengl"> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_Draggable3DOrientation.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_Matrix3D.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLComponent.cpp"> | |||
| <FileConfiguration Name="Debug|Win32" | |||
| ExcludedFromBuild="true"> | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| </FileConfiguration> | |||
| <FileConfiguration Name="Release|Win32" | |||
| ExcludedFromBuild="true"> | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| </FileConfiguration> | |||
| </File> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLComponent.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLContext.cpp"> | |||
| <FileConfiguration Name="Debug|Win32" | |||
| ExcludedFromBuild="true"> | |||
| @@ -4331,8 +4320,7 @@ | |||
| </FileConfiguration> | |||
| </File> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLImage.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLPixelFormat.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLShaderProgram.cpp"> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLPixelFormat.cpp"> | |||
| <FileConfiguration Name="Debug|Win32" | |||
| ExcludedFromBuild="true"> | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| @@ -4342,23 +4330,8 @@ | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| </FileConfiguration> | |||
| </File> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLShaderProgram.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLTexture.cpp"> | |||
| <FileConfiguration Name="Debug|Win32" | |||
| ExcludedFromBuild="true"> | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| </FileConfiguration> | |||
| <FileConfiguration Name="Release|Win32" | |||
| ExcludedFromBuild="true"> | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| </FileConfiguration> | |||
| </File> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLTexture.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_Quaternion.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_Vector3D.h"/> | |||
| </Filter> | |||
| <Filter Name="native"> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_android_OpenGLComponent.cpp"> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLPixelFormat.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLShaderProgram.cpp"> | |||
| <FileConfiguration Name="Debug|Win32" | |||
| ExcludedFromBuild="true"> | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| @@ -4368,8 +4341,8 @@ | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| </FileConfiguration> | |||
| </File> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_ios_OpenGLComponent.mm"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_linux_OpenGLComponent.cpp"> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLShaderProgram.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLTexture.cpp"> | |||
| <FileConfiguration Name="Debug|Win32" | |||
| ExcludedFromBuild="true"> | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| @@ -4379,19 +4352,18 @@ | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| </FileConfiguration> | |||
| </File> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_mac_OpenGLComponent.mm"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLTexture.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_Quaternion.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_Vector3D.h"/> | |||
| </Filter> | |||
| <Filter Name="native"> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_MissingGLDefinitions.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_OpenGL_android.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_OpenGL_ios.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_OpenGL_linux.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_OpenGL_osx.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_OpenGL_win32.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_OpenGLExtensions.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_win32_OpenGLComponent.cpp"> | |||
| <FileConfiguration Name="Debug|Win32" | |||
| ExcludedFromBuild="true"> | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| </FileConfiguration> | |||
| <FileConfiguration Name="Release|Win32" | |||
| ExcludedFromBuild="true"> | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| </FileConfiguration> | |||
| </File> | |||
| </Filter> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\juce_module_info"> | |||
| <FileConfiguration Name="Debug|Win32" | |||
| @@ -1147,9 +1147,6 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_gui_extra\native\juce_win32_WebBrowserComponent.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLComponent.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLContext.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| @@ -1165,19 +1162,13 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLImage.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLShaderProgram.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLTexture.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\native\juce_android_OpenGLComponent.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLPixelFormat.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\native\juce_linux_OpenGLComponent.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLShaderProgram.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\native\juce_win32_OpenGLComponent.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLTexture.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_video\native\juce_android_CameraDevice.cpp"> | |||
| @@ -1611,7 +1602,6 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_gui_extra\juce_gui_extra.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\opengl\juce_Draggable3DOrientation.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\opengl\juce_Matrix3D.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLComponent.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLContext.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLFrameBuffer.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLGraphicsContext.h"/> | |||
| @@ -1623,6 +1613,11 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\opengl\juce_Quaternion.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\opengl\juce_Vector3D.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\native\juce_MissingGLDefinitions.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\native\juce_OpenGL_android.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\native\juce_OpenGL_ios.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\native\juce_OpenGL_linux.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\native\juce_OpenGL_osx.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\native\juce_OpenGL_win32.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\native\juce_OpenGLExtensions.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\juce_opengl.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_video\playback\juce_DirectShowComponent.h"/> | |||
| @@ -1498,9 +1498,6 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_gui_extra\juce_module_info"> | |||
| <Filter>Juce Modules\juce_gui_extra</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLComponent.cpp"> | |||
| <Filter>Juce Modules\juce_opengl\opengl</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLContext.cpp"> | |||
| <Filter>Juce Modules\juce_opengl\opengl</Filter> | |||
| </ClCompile> | |||
| @@ -1516,27 +1513,15 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLImage.cpp"> | |||
| <Filter>Juce Modules\juce_opengl\opengl</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLPixelFormat.cpp"> | |||
| <Filter>Juce Modules\juce_opengl\opengl</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLShaderProgram.cpp"> | |||
| <Filter>Juce Modules\juce_opengl\opengl</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLTexture.cpp"> | |||
| <Filter>Juce Modules\juce_opengl\opengl</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\native\juce_android_OpenGLComponent.cpp"> | |||
| <Filter>Juce Modules\juce_opengl\native</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\native\juce_ios_OpenGLComponent.mm"> | |||
| <Filter>Juce Modules\juce_opengl\native</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\native\juce_linux_OpenGLComponent.cpp"> | |||
| <Filter>Juce Modules\juce_opengl\native</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\native\juce_mac_OpenGLComponent.mm"> | |||
| <Filter>Juce Modules\juce_opengl\native</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\native\juce_win32_OpenGLComponent.cpp"> | |||
| <Filter>Juce Modules\juce_opengl\native</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\juce_module_info"> | |||
| <Filter>Juce Modules\juce_opengl</Filter> | |||
| </ClCompile> | |||
| @@ -2814,9 +2799,6 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\opengl\juce_Matrix3D.h"> | |||
| <Filter>Juce Modules\juce_opengl\opengl</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLComponent.h"> | |||
| <Filter>Juce Modules\juce_opengl\opengl</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLContext.h"> | |||
| <Filter>Juce Modules\juce_opengl\opengl</Filter> | |||
| </ClInclude> | |||
| @@ -2850,6 +2832,21 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\native\juce_MissingGLDefinitions.h"> | |||
| <Filter>Juce Modules\juce_opengl\native</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\native\juce_OpenGL_android.h"> | |||
| <Filter>Juce Modules\juce_opengl\native</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\native\juce_OpenGL_ios.h"> | |||
| <Filter>Juce Modules\juce_opengl\native</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\native\juce_OpenGL_linux.h"> | |||
| <Filter>Juce Modules\juce_opengl\native</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\native\juce_OpenGL_osx.h"> | |||
| <Filter>Juce Modules\juce_opengl\native</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\native\juce_OpenGL_win32.h"> | |||
| <Filter>Juce Modules\juce_opengl\native</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\native\juce_OpenGLExtensions.h"> | |||
| <Filter>Juce Modules\juce_opengl\native</Filter> | |||
| </ClInclude> | |||
| @@ -165,7 +165,6 @@ | |||
| 22132E527A92309318A2D572 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationBase.cpp"; path = "../../../../modules/juce_events/messages/juce_ApplicationBase.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 2275EB468CEA505ADE14C225 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AudioDemoSynthPage.cpp; path = ../../Source/demos/AudioDemoSynthPage.cpp; sourceTree = "SOURCE_ROOT"; }; | |||
| 22A86C5C4967A5844323F7BA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DialogWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_DialogWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 22C2C932398DC1EFE0880A9A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_OpenGLComponent.cpp"; path = "../../../../modules/juce_opengl/native/juce_android_OpenGLComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 22CD1BF5E83A216A0D18260D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MultiTouchMapper.h"; path = "../../../../modules/juce_gui_basics/native/juce_MultiTouchMapper.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 22DA9E57AAA25391C7D1FBC6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MessageManager.mm"; path = "../../../../modules/juce_events/native/juce_mac_MessageManager.mm"; sourceTree = "SOURCE_ROOT"; }; | |||
| 2302DFDF103BE152232EA767 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DynamicObject.h"; path = "../../../../modules/juce_core/containers/juce_DynamicObject.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| @@ -349,7 +348,6 @@ | |||
| 4EC68506861032FFD4B848DB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TemporaryFile.h"; path = "../../../../modules/juce_core/files/juce_TemporaryFile.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 4EC77B02BE7457DE877E332B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentAnimator.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentAnimator.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 4F2F636FB9416BFBB1FF2473 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Fonts.cpp"; path = "../../../../modules/juce_graphics/native/juce_android_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 4F802BD98072EA49F7F4FE4A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OpenGLComponent.cpp"; path = "../../../../modules/juce_opengl/opengl/juce_OpenGLComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 4F854124B48F6358A992D164 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ListBox.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ListBox.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 4FC0DDA3086EE26242655E66 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_cryptography.mm"; path = "../../../../modules/juce_cryptography/juce_cryptography.mm"; sourceTree = "SOURCE_ROOT"; }; | |||
| 5010D82E6ED57F014D8E88E3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileTreeComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| @@ -413,6 +411,7 @@ | |||
| 62AAFFC7E5754AA715DCB1E5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TargetPlatform.h"; path = "../../../../modules/juce_core/system/juce_TargetPlatform.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 62AFEF7525003814092C79FA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DragAndDrop.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_win32_DragAndDrop.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 6314AFE1A17F085C028B4C82 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Desktop.cpp"; path = "../../../../modules/juce_gui_basics/components/juce_Desktop.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 639A6B84458054D4E12081EE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGL_ios.h"; path = "../../../../modules/juce_opengl/native/juce_OpenGL_ios.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 63A3A467F124B67D19587D4F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SliderPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_SliderPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 63CF475000C8419AE8D25BD2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativePoint.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativePoint.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 63DD8F6DD0DDC9A6F45E0C90 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NativeMessageBox.h"; path = "../../../../modules/juce_gui_basics/windows/juce_NativeMessageBox.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| @@ -449,7 +448,6 @@ | |||
| 6DF10AFB26794D47F3AC783B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_CameraDevice.cpp"; path = "../../../../modules/juce_video/native/juce_win32_CameraDevice.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 6E00A6B4B754E3008B969B8A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiKeyboardComponent.h"; path = "../../../../modules/juce_audio_utils/gui/juce_MidiKeyboardComponent.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 6E0DA76710F31FA13F5168B3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseListener.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseListener.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 6E1CFF5227B2F2E200DD9EC7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_OpenGLComponent.cpp"; path = "../../../../modules/juce_opengl/native/juce_linux_OpenGLComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 6E365FC14CFBA3BD28196D3A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChangeListener.h"; path = "../../../../modules/juce_events/broadcasters/juce_ChangeListener.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 6EF8660ACF82A6472884ABB6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StandardHeader.h"; path = "../../../../modules/juce_core/system/juce_StandardHeader.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 6FCC44A5DB0B881454AAD300 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; | |||
| @@ -561,6 +559,7 @@ | |||
| 8F37F4E9DB8E42EDF29DE166 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CameraDemo.cpp; path = ../../Source/demos/CameraDemo.cpp; sourceTree = "SOURCE_ROOT"; }; | |||
| 904B316152B6C23112E0A0B1 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_audio_processors/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; | |||
| 90F9E3FB8FF07BA924E42DC0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Typeface.h"; path = "../../../../modules/juce_graphics/fonts/juce_Typeface.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 91165DCEB698586E84EC57C6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGL_linux.h"; path = "../../../../modules/juce_opengl/native/juce_OpenGL_linux.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 924667AB0E27AC2CE1EB7828 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TopLevelWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_TopLevelWindow.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 927B5B18A655057D57C37D35 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ShapeButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ShapeButton.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 936C6419223D7B28CE16A72B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BufferedInputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_BufferedInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| @@ -625,6 +624,8 @@ | |||
| A588C458AC395D8AC09A433D = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MarkerList.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_MarkerList.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| A5A6819C57A0399C81E03301 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Network.cpp"; path = "../../../../modules/juce_core/native/juce_android_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| A6073115FE5E1E635C78DDFE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SpinLock.h"; path = "../../../../modules/juce_core/threads/juce_SpinLock.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| A618A1B49D562ECB86DC46EF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGL_android.h"; path = "../../../../modules/juce_opengl/native/juce_OpenGL_android.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| A6541F1A868B78F7E4A53C77 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGL_osx.h"; path = "../../../../modules/juce_opengl/native/juce_OpenGL_osx.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| A6C2A4889A4E70DE735EBA4B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LowLevelGraphicsPostScriptRenderer.cpp"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| A6C606F3BE6B630561EDE155 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_IIRFilterAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_IIRFilterAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| A6FCBC9721E7FC9DE30B6DC4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Midi.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_linux_Midi.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| @@ -644,6 +645,7 @@ | |||
| A9958339328213FF76D8A79C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseInputSource.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseInputSource.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| A9B72D6049A3539B63AE79D5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CachedComponentImage.h"; path = "../../../../modules/juce_gui_basics/components/juce_CachedComponentImage.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| AA0DE5CA2B089393B110FD25 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableShape.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableShape.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| AAAA086F74F507C87200AD2E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OpenGLPixelFormat.cpp"; path = "../../../../modules/juce_opengl/opengl/juce_OpenGLPixelFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| AAABC8FBF364D9A596F4AA4E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_android_JNIHelpers.h"; path = "../../../../modules/juce_core/native/juce_android_JNIHelpers.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| AAC98CB517D934F42A25416E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BubbleComponent.h"; path = "../../../../modules/juce_gui_basics/misc/juce_BubbleComponent.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| AB4A28A3667EA4C8393470A7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Result.h"; path = "../../../../modules/juce_core/misc/juce_Result.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| @@ -654,7 +656,6 @@ | |||
| ACB502AF25A235733295406E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChangeBroadcaster.h"; path = "../../../../modules/juce_events/broadcasters/juce_ChangeBroadcaster.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| ACC522FB23E25ADDD38F8F98 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSubsectionReader.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioSubsectionReader.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| AE2C0F932F7E54799FA0897C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginListComponent.h"; path = "../../../../modules/juce_audio_processors/scanning/juce_PluginListComponent.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| AE394742FA0F2C6AA39906DD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_OpenGLComponent.mm"; path = "../../../../modules/juce_opengl/native/juce_mac_OpenGLComponent.mm"; sourceTree = "SOURCE_ROOT"; }; | |||
| AE860FA70A2F37F4A889A9EF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ZipFile.h"; path = "../../../../modules/juce_core/zip/juce_ZipFile.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| AEA287A89324FB9D48370C33 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AsyncUpdater.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_AsyncUpdater.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| AF26F1B432EF78EB76107FDA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Timer.cpp"; path = "../../../../modules/juce_events/timers/juce_Timer.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| @@ -673,6 +674,7 @@ | |||
| B428CC689CD359B29C67272B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CallOutBox.h"; path = "../../../../modules/juce_gui_basics/windows/juce_CallOutBox.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| B523ED8502475B9BB3F392C7 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_graphics/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; | |||
| B53B1A87D9A58B3E056B4D8E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageConvolutionKernel.h"; path = "../../../../modules/juce_graphics/images/juce_ImageConvolutionKernel.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| B5671D0DA84B699962CF0179 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGL_win32.h"; path = "../../../../modules/juce_opengl/native/juce_OpenGL_win32.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| B59728841A18523C5950A51B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Timer.h"; path = "../../../../modules/juce_events/timers/juce_Timer.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| B59DA3ED4F12C1FFEE433EE3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DocumentWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_DocumentWindow.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| B5B987C3029862AC58363F1A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageComponent.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ImageComponent.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| @@ -796,9 +798,7 @@ | |||
| D57651845D6D9438DEA62F98 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LeakedObjectDetector.h"; path = "../../../../modules/juce_core/memory/juce_LeakedObjectDetector.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| D5DE603FFC184C590E2A6678 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioCDBurner.h"; path = "../../../../modules/juce_audio_devices/audio_cd/juce_AudioCDBurner.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| D602AE751C3C12A6458FCCD5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableBorderComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableBorderComponent.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| D66048AF1E05FF836B2A813A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_OpenGLComponent.cpp"; path = "../../../../modules/juce_opengl/native/juce_win32_OpenGLComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| D6C9614D1C6493DBEE370646 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileBasedDocument.cpp"; path = "../../../../modules/juce_gui_extra/documents/juce_FileBasedDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| D6D0F076F54C7D669A9717C9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGLComponent.h"; path = "../../../../modules/juce_opengl/opengl/juce_OpenGLComponent.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| D7239D5B984E07808E2DB28C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OpenGLHelpers.cpp"; path = "../../../../modules/juce_opengl/opengl/juce_OpenGLHelpers.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| D7E6E92AA32B7D51489FD256 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentBoundsConstrainer.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| D8081154AA3072D2F2C4B625 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_posix_SharedCode.h"; path = "../../../../modules/juce_core/native/juce_posix_SharedCode.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| @@ -865,7 +865,6 @@ | |||
| ECEFF5A78873B5B388046E7A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Messaging.cpp"; path = "../../../../modules/juce_events/native/juce_win32_Messaging.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| ED467279290C0AA942FB2B27 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OggVorbisAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_OggVorbisAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| ED9A2289AECFD9B928A9A08A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_IIRFilter.h"; path = "../../../../modules/juce_audio_basics/effects/juce_IIRFilter.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| ED9FAEA9116C568942BAD000 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_OpenGLComponent.mm"; path = "../../../../modules/juce_opengl/native/juce_ios_OpenGLComponent.mm"; sourceTree = "SOURCE_ROOT"; }; | |||
| EDDA4ADA880E3B78143801D0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_WASAPI.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_WASAPI.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| EDDDD60231231B8221711145 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseListener.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseListener.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| EE2DACF73E083928ABDDA63B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryIterator.h"; path = "../../../../modules/juce_core/files/juce_DirectoryIterator.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| @@ -1890,8 +1889,6 @@ | |||
| EB8917291F41B7345B13B53E = { isa = PBXGroup; children = ( | |||
| D866C4735BF1EF0CA24FC1FB, | |||
| 87FB016388B49E97FCCBE69B, | |||
| 4F802BD98072EA49F7F4FE4A, | |||
| D6D0F076F54C7D669A9717C9, | |||
| 5786364EC4C531CDE41BDCEA, | |||
| 8878426C7F58CB22969E7133, | |||
| AC3EFDDC80761A45E8BE0624, | |||
| @@ -1902,6 +1899,7 @@ | |||
| D2C40CDF46D894BFC72BDC56, | |||
| E46977801F19277F4D3B324B, | |||
| 17422D876DAAF091ED089B8D, | |||
| AAAA086F74F507C87200AD2E, | |||
| B81FA2ED22BCC03D124031ED, | |||
| 58864C3D7F369EBE01E42C5C, | |||
| 8EEB4DEB11F3DF01BA6F7528, | |||
| @@ -1910,13 +1908,13 @@ | |||
| EC89003BF30329181BB3EA4B, | |||
| D2F161366612A4CDA6372113 ); name = opengl; sourceTree = "<group>"; }; | |||
| C92FEA88254DAAE793DB3CF7 = { isa = PBXGroup; children = ( | |||
| 22C2C932398DC1EFE0880A9A, | |||
| ED9FAEA9116C568942BAD000, | |||
| 6E1CFF5227B2F2E200DD9EC7, | |||
| AE394742FA0F2C6AA39906DD, | |||
| 7E6041874E267458572B93A1, | |||
| 8565630D87FEE505D50CE2EF, | |||
| D66048AF1E05FF836B2A813A ); name = native; sourceTree = "<group>"; }; | |||
| A618A1B49D562ECB86DC46EF, | |||
| 639A6B84458054D4E12081EE, | |||
| 91165DCEB698586E84EC57C6, | |||
| A6541F1A868B78F7E4A53C77, | |||
| B5671D0DA84B699962CF0179, | |||
| 8565630D87FEE505D50CE2EF ); name = native; sourceTree = "<group>"; }; | |||
| 7CFCB9A92FB574419734C1F5 = { isa = PBXGroup; children = ( | |||
| EB8917291F41B7345B13B53E, | |||
| C92FEA88254DAAE793DB3CF7, | |||
| @@ -38,20 +38,27 @@ public: | |||
| : mainWindow (mainWindow_), | |||
| currentDemoId (0) | |||
| { | |||
| setOpaque (true); | |||
| invokeDirectly (showRendering, true); | |||
| } | |||
| ~ContentComp() | |||
| { | |||
| #if JUCE_OPENGL | |||
| openGLContext.detach(); | |||
| #endif | |||
| } | |||
| void paint (Graphics& g) | |||
| { | |||
| g.fillAll (Colours::white); | |||
| } | |||
| //============================================================================== | |||
| void showDemo (Component* demoComp) | |||
| { | |||
| currentDemo = demoComp; | |||
| #if JUCE_OPENGL | |||
| if (openGLWrapperComp != nullptr) | |||
| openGLWrapperComp->addAndMakeVisible (currentDemo); | |||
| else | |||
| #endif | |||
| addAndMakeVisible (currentDemo); | |||
| addAndMakeVisible (currentDemo); | |||
| currentDemo->setBounds ("0, 0, parent.width, parent.height"); | |||
| } | |||
| @@ -112,8 +119,12 @@ public: | |||
| { | |||
| menu.addSeparator(); | |||
| const int currentEngine = openGLWrapperComp != nullptr ? engines.size() - 1 | |||
| : getPeer()->getCurrentRenderingEngine(); | |||
| int currentEngine = getPeer()->getCurrentRenderingEngine(); | |||
| #if JUCE_OPENGL | |||
| if (openGLContext.isAttached()) | |||
| currentEngine = engines.size() - 1; | |||
| #endif | |||
| for (int i = 0; i < engines.size(); ++i) | |||
| menu.addItem (5001 + i, "Use " + engines[i], true, i == currentEngine); | |||
| @@ -149,19 +160,9 @@ public: | |||
| { | |||
| #if JUCE_OPENGL | |||
| if (shouldUseOpenGL && currentDemoId != showOpenGL) | |||
| { | |||
| if (openGLWrapperComp == nullptr) | |||
| { | |||
| addAndMakeVisible (openGLWrapperComp = new DemoOpenGLComp (currentDemo)); | |||
| openGLWrapperComp->setBounds ("0, 0, parent.width, parent.height"); | |||
| } | |||
| } | |||
| openGLContext.attachTo (*this); | |||
| else | |||
| { | |||
| openGLWrapperComp = nullptr; | |||
| addAndMakeVisible (currentDemo); | |||
| resized(); | |||
| } | |||
| openGLContext.detach(); | |||
| #endif | |||
| } | |||
| @@ -509,41 +510,15 @@ private: | |||
| ScopedPointer<Component> currentDemo; | |||
| int currentDemoId; | |||
| #if JUCE_OPENGL | |||
| OpenGLContext openGLContext; | |||
| #endif | |||
| TooltipWindow tooltipWindow; // to add tooltips to an application, you | |||
| // just need to create one of these and leave it | |||
| // there to do its work.. | |||
| //============================================================================== | |||
| #if JUCE_OPENGL | |||
| class DemoOpenGLComp : public OpenGLComponent | |||
| { | |||
| public: | |||
| DemoOpenGLComp (Component* contentComp) | |||
| : OpenGLComponent (useBackgroundThread | allowSubComponents) | |||
| { | |||
| addAndMakeVisible (contentComp); | |||
| } | |||
| ~DemoOpenGLComp() | |||
| { | |||
| // It's essential to call this method before our class is destroyed, to | |||
| // make sure that the background renderer thread doesn't try to call it | |||
| // while it's being dismantled.. | |||
| stopRenderThread(); | |||
| } | |||
| void newOpenGLContextCreated() {} | |||
| void renderOpenGL() {} | |||
| void paint (Graphics& g) | |||
| { | |||
| g.fillAll (Colours::azure); | |||
| } | |||
| }; | |||
| ScopedPointer<DemoOpenGLComp> openGLWrapperComp; | |||
| #endif | |||
| StringArray getRenderingEngines() | |||
| { | |||
| StringArray renderingEngines (getPeer()->getAvailableRenderingEngines()); | |||
| @@ -28,12 +28,13 @@ | |||
| #if JUCE_OPENGL | |||
| //============================================================================== | |||
| class DemoOpenGLCanvas : public OpenGLComponent, | |||
| class DemoOpenGLCanvas : public Component, | |||
| public OpenGLRenderer, | |||
| public Timer | |||
| { | |||
| public: | |||
| DemoOpenGLCanvas() | |||
| : OpenGLComponent (openGLDefault), rotation (0.0f), | |||
| : rotation (0.0f), | |||
| textScrollPos (200) | |||
| { | |||
| infoLabel.setText ("These sliders demonstrate how components can be added as children " | |||
| @@ -59,12 +60,15 @@ public: | |||
| addAndMakeVisible (&sizeSlider); | |||
| sizeSlider.setBounds ("parent.width * 0.05, parent.height - 35, parent.width * 0.6, top + 24"); | |||
| openGLContext.setRenderer (this, true); | |||
| openGLContext.attachTo (*this); | |||
| startTimer (1000 / 30); | |||
| } | |||
| ~DemoOpenGLCanvas() | |||
| { | |||
| stopRenderThread(); | |||
| openGLContext.detach(); | |||
| } | |||
| // when the component creates a new internal context, this is called, and | |||
| @@ -75,7 +79,7 @@ public: | |||
| dynamicTextureImage = Image (Image::ARGB, 128, 128, true, OpenGLImageType()); | |||
| } | |||
| void releaseOpenGLContext() | |||
| void openGLContextClosing() | |||
| { | |||
| // We have to make sure we release any openGL images before the | |||
| // GL context gets closed.. | |||
| @@ -91,7 +95,7 @@ public: | |||
| void mouseDrag (const MouseEvent& e) | |||
| { | |||
| draggableOrientation.mouseDrag (e.getPosition()); | |||
| triggerRepaint(); | |||
| openGLContext.triggerRepaint(); | |||
| } | |||
| void resized() | |||
| @@ -99,13 +103,20 @@ public: | |||
| draggableOrientation.setViewport (getLocalBounds()); | |||
| } | |||
| void paint (Graphics&) {} | |||
| void renderOpenGL() | |||
| { | |||
| OpenGLHelpers::clear (Colours::darkgrey.withAlpha (1.0f)); | |||
| updateTextureImage(); // this will update our dynamically-changing texture image. | |||
| { | |||
| MessageManagerLock mm (Thread::getCurrentThread()); | |||
| if (! mm.lockWasGained()) | |||
| return; | |||
| drawBackground2DStuff(); // draws some 2D content to demonstrate the OpenGLGraphicsContext class | |||
| updateTextureImage(); // this will update our dynamically-changing texture image. | |||
| drawBackground2DStuff(); // draws some 2D content to demonstrate the OpenGLGraphicsContext class | |||
| } | |||
| // Having used the juce 2D renderer, it will have messed-up a whole load of GL state, so | |||
| // we'll put back any important settings before doing our normal GL 3D drawing.. | |||
| @@ -158,7 +169,7 @@ public: | |||
| void drawBackground2DStuff() | |||
| { | |||
| // Create an OpenGLGraphicsContext that will draw into this GL window.. | |||
| ScopedPointer<LowLevelGraphicsContext> glRenderer (createOpenGLGraphicsContext (*this)); | |||
| ScopedPointer<LowLevelGraphicsContext> glRenderer (createOpenGLGraphicsContext (openGLContext)); | |||
| Graphics g (glRenderer); | |||
| // This stuff just creates a spinning star shape and fills it.. | |||
| @@ -179,10 +190,11 @@ public: | |||
| { | |||
| rotation += (float) speedSlider.getValue(); | |||
| textScrollPos += 1.4f; | |||
| triggerRepaint(); | |||
| openGLContext.triggerRepaint(); | |||
| } | |||
| private: | |||
| OpenGLContext openGLContext; | |||
| Image logoImage, dynamicTextureImage; | |||
| float rotation, textScrollPos; | |||
| Draggable3DOrientation draggableOrientation; | |||
| @@ -90,7 +90,6 @@ | |||
| 0CF846BB5ABA7ACA6ED15DAF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LADSPAPluginFormat.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_LADSPAPluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 0D33C38BAB4F78D0D2E87F12 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StandardHeader.h"; path = "../../../../modules/juce_core/system/juce_StandardHeader.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 0DA5B57EE8F2881C90FB047E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Timer.h"; path = "../../../../modules/juce_events/timers/juce_Timer.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 0DA6343549C1279EEDA7A81A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_OpenGLComponent.cpp"; path = "../../../../modules/juce_opengl/native/juce_android_OpenGLComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 0E4661E777BD7400A13328D8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SplashScreen.cpp"; path = "../../../../modules/juce_gui_extra/misc/juce_SplashScreen.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 0E8A874AB7E4971D90F58004 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Thread.h"; path = "../../../../modules/juce_core/threads/juce_Thread.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 0EECB5C7D6CD9F1CDFEC50A7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Logger.cpp"; path = "../../../../modules/juce_core/logging/juce_Logger.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| @@ -116,7 +115,6 @@ | |||
| 15DD91827E0975E928E3BB83 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PopupMenu.h"; path = "../../../../modules/juce_gui_basics/menus/juce_PopupMenu.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 15FBAE360A9B69D6DB38FF22 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Point.h"; path = "../../../../modules/juce_graphics/geometry/juce_Point.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 1666EE8320B5911BA4A4D529 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandInfo.h"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 1668565234C6F9C31363BBE2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_OpenGLComponent.mm"; path = "../../../../modules/juce_opengl/native/juce_mac_OpenGLComponent.mm"; sourceTree = "SOURCE_ROOT"; }; | |||
| 172EE4301C4E0B4BA7DB4701 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorListener.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessorListener.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 177ACA542C1D1EBEAD87C348 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StretchableObjectResizer.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableObjectResizer.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 179DB0E297F9CA8700AFFD26 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioIODevice.h"; path = "../../../../modules/juce_audio_devices/audio_io/juce_AudioIODevice.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| @@ -128,6 +126,7 @@ | |||
| 1956DE1CE89301FE4FC9BC15 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioSubsectionReader.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioSubsectionReader.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 1959937B4B2FC11B9AC53566 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBasedDocument.h"; path = "../../../../modules/juce_gui_extra/documents/juce_FileBasedDocument.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 19B542AA1D44A48137994C9B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Threads.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Threads.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 19CF1995D026FB0177649557 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGL_osx.h"; path = "../../../../modules/juce_opengl/native/juce_OpenGL_osx.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 19F1E0E8D9A395105CA14D9D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_ResizableWindow.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 1A4E5F9889282918D91F7262 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileOutputStream.cpp"; path = "../../../../modules/juce_core/files/juce_FileOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 1A59F393DEB3E9E1132EAF51 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectShowComponent.cpp"; path = "../../../../modules/juce_video/native/juce_win32_DirectShowComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| @@ -318,6 +317,7 @@ | |||
| 4E7392E543488D38DDA567DD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableRectangle.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableRectangle.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 4EE534BAE6FE5AE6B9863AEB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeCoordinatePositioner.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 4EEFC8BD450341D633B64E77 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DragAndDropContainer.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_DragAndDropContainer.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 4F4884B5DE59137D823301FB = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGL_ios.h"; path = "../../../../modules/juce_opengl/native/juce_OpenGL_ios.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 4F5AE334AD243259E370E8CE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UndoManager.h"; path = "../../../../modules/juce_data_structures/undomanager/juce_UndoManager.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 4FA1E94FC0C6D34B11B0EBB7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AbstractFifo.h"; path = "../../../../modules/juce_core/containers/juce_AbstractFifo.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 5085F1038F87BFFE07A491C4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UIViewComponent.h"; path = "../../../../modules/juce_gui_extra/embedding/juce_UIViewComponent.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| @@ -404,13 +404,13 @@ | |||
| 6BEC3BA14A6EC4E966B76E7D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentBoundsConstrainer.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 6C3EBC31792DB69EA9DEBCF0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableLayoutManager.h"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutManager.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 6C51E4C2A776F82E02F37B15 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SliderPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_SliderPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 6C8EDB409CBC411544143565 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGL_win32.h"; path = "../../../../modules/juce_opengl/native/juce_OpenGL_win32.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 6CC390D80BA517A67F855CA3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Midi.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_linux_Midi.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 6D778046825503FDEB5460E1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MouseInputSource.cpp"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseInputSource.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 6D8D5FF611A28415AC63C463 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatReaderSource.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatReaderSource.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 6D9F04D6B71B3E81490D0A92 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BlowFish.cpp"; path = "../../../../modules/juce_cryptography/encryption/juce_BlowFish.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 6DA2BE5D5F9F5C74549065BE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryContentsList.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 6E1860CF53C6E59F1F77C373 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_graphics.mm"; path = "../../../../modules/juce_graphics/juce_graphics.mm"; sourceTree = "SOURCE_ROOT"; }; | |||
| 6E673B706EA21387275F30FD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_OpenGLComponent.mm"; path = "../../../../modules/juce_opengl/native/juce_ios_OpenGLComponent.mm"; sourceTree = "SOURCE_ROOT"; }; | |||
| 6E9256495CB4571234020AD4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemPalette.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemPalette.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 6EC1F679C81910E4E42FDB0B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_IIRFilterAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_IIRFilterAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 6EEACEE1071D58DA155DC87E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SpinLock.h"; path = "../../../../modules/juce_core/threads/juce_SpinLock.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| @@ -440,7 +440,6 @@ | |||
| 77632C482751C38F66E5B759 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileInputStream.cpp"; path = "../../../../modules/juce_core/files/juce_FileInputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 77E006FC1ECCE39324BD4E89 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ListBox.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ListBox.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 789C7D30DC4EA35A98FEE613 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Identifier.h"; path = "../../../../modules/juce_core/text/juce_Identifier.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 7916CA65827E16B3775C4952 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_OpenGLComponent.cpp"; path = "../../../../modules/juce_opengl/native/juce_win32_OpenGLComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 792D8573B81EF31A2D99422E = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ListenerList.h"; path = "../../../../modules/juce_events/broadcasters/juce_ListenerList.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 799654188207FD986B13281A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_String.h"; path = "../../../../modules/juce_core/text/juce_String.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 7A12DA68789CFB38D0722D02 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiKeyboardState.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiKeyboardState.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| @@ -516,10 +515,12 @@ | |||
| 902D2D75157CA779F1F2324A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_EdgeTable.h"; path = "../../../../modules/juce_graphics/geometry/juce_EdgeTable.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 90ADB27801C40001A8074FD4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Image.h"; path = "../../../../modules/juce_graphics/images/juce_Image.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 9187BBE1C406F3DAFDA09CF4 = { isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QTKit.framework; path = System/Library/Frameworks/QTKit.framework; sourceTree = SDKROOT; }; | |||
| 918A6AE024A876783EC063DD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OpenGLPixelFormat.cpp"; path = "../../../../modules/juce_opengl/opengl/juce_OpenGLPixelFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 91A1AAFFF5016EB8BB0487C8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_events.h"; path = "../../../../modules/juce_events/juce_events.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 91E5C5E061E45FCC192C074B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_UnitTest.cpp"; path = "../../../../modules/juce_core/unit_tests/juce_UnitTest.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 920F595F97031574B427C153 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringPairArray.h"; path = "../../../../modules/juce_core/text/juce_StringPairArray.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 923E4322525FD5CCAA5F911B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_gui_extra.h"; path = "../../../../modules/juce_gui_extra/juce_gui_extra.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 9279BC369938CE651A7F8348 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGL_android.h"; path = "../../../../modules/juce_opengl/native/juce_OpenGL_android.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 92A12C0D4D42B80CF8044305 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ModalComponentManager.cpp"; path = "../../../../modules/juce_gui_basics/components/juce_ModalComponentManager.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 93387B269F26CF7363E17A32 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginListComponent.h"; path = "../../../../modules/juce_audio_processors/scanning/juce_PluginListComponent.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 936216306215D5F851ECFD3A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyboardFocusTraverser.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyboardFocusTraverser.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| @@ -713,7 +714,6 @@ | |||
| CD0D3900EADBCE8A618D8621 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentBuilder.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBuilder.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| CD4D6D0FF97BB38751DAC4CD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReadWriteLock.h"; path = "../../../../modules/juce_core/threads/juce_ReadWriteLock.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| CD51916F6B9C4406FCF48C51 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableCornerComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableCornerComponent.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| CD96180DDD8610A155629CE1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OpenGLComponent.cpp"; path = "../../../../modules/juce_opengl/opengl/juce_OpenGLComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| CEF36257C57BD3B2095A283C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_AudioSource.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| CF0F1D933CE2A89A9D05FF38 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ColourGradient.h"; path = "../../../../modules/juce_graphics/colour/juce_ColourGradient.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| CF27DFD59466D38E34428405 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Typeface.h"; path = "../../../../modules/juce_graphics/fonts/juce_Typeface.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| @@ -748,7 +748,6 @@ | |||
| D3D7C89A43B6A3591B776B1E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_WebBrowserComponent.mm"; path = "../../../../modules/juce_gui_extra/native/juce_mac_WebBrowserComponent.mm"; sourceTree = "SOURCE_ROOT"; }; | |||
| D41728E9EB1522CCAC9AC7D4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CameraDevice.h"; path = "../../../../modules/juce_video/capture/juce_CameraDevice.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| D41EA1E6002DE5DEB9A07CAA = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentPeer.h"; path = "../../../../modules/juce_gui_basics/windows/juce_ComponentPeer.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| D4CC4DE44C44AEE40085ACD7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_OpenGLComponent.cpp"; path = "../../../../modules/juce_opengl/native/juce_linux_OpenGLComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| D4DA13E7A12FB69C072D0FA7 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ShapeButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ShapeButton.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| D52F4E0C637B4685217CBEB4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Decibels.h"; path = "../../../../modules/juce_audio_basics/effects/juce_Decibels.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| D579AF76963B677C425CBF00 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OldSchoolLookAndFeel.h"; path = "../../../../modules/juce_gui_extra/lookandfeel/juce_OldSchoolLookAndFeel.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| @@ -812,7 +811,6 @@ | |||
| E7F19B91131A93E2B49094D1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TooltipWindow.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_TooltipWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| E8052B55E5F36932E1BE3A09 = { isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_audio_basics/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; | |||
| E884C93E7363F24B5CE6DE1C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioSampleBuffer.cpp"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| E89669EB797637247F52D30F = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGLComponent.h"; path = "../../../../modules/juce_opengl/opengl/juce_OpenGLComponent.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| E97917473ACF5E2BF4B424EF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableComposite.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableComposite.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| E9B6CD16E5484D71733A15D8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiKeyboardState.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiKeyboardState.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| EA70FDB4DC6548345E1B0915 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SHA256.h"; path = "../../../../modules/juce_cryptography/hashing/juce_SHA256.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| @@ -873,6 +871,7 @@ | |||
| FC99246683913F59070B7966 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CPlusPlusCodeTokeniser.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| FCC1B59EB0F8C430693F5832 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Result.cpp"; path = "../../../../modules/juce_core/misc/juce_Result.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| FD0A360D16FC0851ED8F12E9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToggleButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ToggleButton.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| FDC5CCA1B1D3A41BADE24142 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGL_linux.h"; path = "../../../../modules/juce_opengl/native/juce_OpenGL_linux.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| FE79AFFDB5029AC6AE7F4CFC = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RecentlyOpenedFilesList.h"; path = "../../../../modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| FE7C03DACFC725D712D9F508 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_utils.mm"; path = "../../../../modules/juce_audio_utils/juce_audio_utils.mm"; sourceTree = "SOURCE_ROOT"; }; | |||
| FEB2517E7420B23086B6580B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MenuBarModel.cpp"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarModel.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| @@ -1820,8 +1819,6 @@ | |||
| E23F6FDE88C4164420DC07F6 = { isa = PBXGroup; children = ( | |||
| 74CAA9C9A8F37A9FF99103F5, | |||
| 483527FCBD7F07A7AF4743CC, | |||
| CD96180DDD8610A155629CE1, | |||
| E89669EB797637247F52D30F, | |||
| 9512FB5C9D667ED59CFC0FF4, | |||
| BE0231D93CBB02BBC2704D1D, | |||
| 43D23C18695F24F9A3DFA7B4, | |||
| @@ -1832,6 +1829,7 @@ | |||
| 9B4278735225CBEED635FF03, | |||
| C0EECABDA5446EAD76E2578F, | |||
| 4CE76ABC51CC5E019AED3C2B, | |||
| 918A6AE024A876783EC063DD, | |||
| 8BA1AF085755958342C9213A, | |||
| DFE18134F58A9C546AD16FF7, | |||
| 442E6311FB54378E88B6811C, | |||
| @@ -1840,13 +1838,13 @@ | |||
| A1DC3C215187E6DD24DD7330, | |||
| AED08170765217A058A8C3BA ); name = opengl; sourceTree = "<group>"; }; | |||
| E8C88E6E3FEC2E7A4373205B = { isa = PBXGroup; children = ( | |||
| 0DA6343549C1279EEDA7A81A, | |||
| 6E673B706EA21387275F30FD, | |||
| D4CC4DE44C44AEE40085ACD7, | |||
| 1668565234C6F9C31363BBE2, | |||
| B3E0F684EFAAB3722FC50D6F, | |||
| 8BD67EC10CC86AB4DB096E5D, | |||
| 7916CA65827E16B3775C4952 ); name = native; sourceTree = "<group>"; }; | |||
| 9279BC369938CE651A7F8348, | |||
| 4F4884B5DE59137D823301FB, | |||
| FDC5CCA1B1D3A41BADE24142, | |||
| 19CF1995D026FB0177649557, | |||
| 6C8EDB409CBC411544143565, | |||
| 8BD67EC10CC86AB4DB096E5D ); name = native; sourceTree = "<group>"; }; | |||
| 2C43A64E61A92F2912632BD6 = { isa = PBXGroup; children = ( | |||
| E23F6FDE88C4164420DC07F6, | |||
| E8C88E6E3FEC2E7A4373205B, | |||
| @@ -4188,17 +4188,6 @@ | |||
| <Filter Name="opengl"> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_Draggable3DOrientation.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_Matrix3D.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLComponent.cpp"> | |||
| <FileConfiguration Name="Debug|Win32" | |||
| ExcludedFromBuild="true"> | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| </FileConfiguration> | |||
| <FileConfiguration Name="Release|Win32" | |||
| ExcludedFromBuild="true"> | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| </FileConfiguration> | |||
| </File> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLComponent.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLContext.cpp"> | |||
| <FileConfiguration Name="Debug|Win32" | |||
| ExcludedFromBuild="true"> | |||
| @@ -4254,8 +4243,7 @@ | |||
| </FileConfiguration> | |||
| </File> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLImage.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLPixelFormat.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLShaderProgram.cpp"> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLPixelFormat.cpp"> | |||
| <FileConfiguration Name="Debug|Win32" | |||
| ExcludedFromBuild="true"> | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| @@ -4265,23 +4253,8 @@ | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| </FileConfiguration> | |||
| </File> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLShaderProgram.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLTexture.cpp"> | |||
| <FileConfiguration Name="Debug|Win32" | |||
| ExcludedFromBuild="true"> | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| </FileConfiguration> | |||
| <FileConfiguration Name="Release|Win32" | |||
| ExcludedFromBuild="true"> | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| </FileConfiguration> | |||
| </File> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLTexture.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_Quaternion.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_Vector3D.h"/> | |||
| </Filter> | |||
| <Filter Name="native"> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_android_OpenGLComponent.cpp"> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLPixelFormat.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLShaderProgram.cpp"> | |||
| <FileConfiguration Name="Debug|Win32" | |||
| ExcludedFromBuild="true"> | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| @@ -4291,8 +4264,8 @@ | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| </FileConfiguration> | |||
| </File> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_ios_OpenGLComponent.mm"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_linux_OpenGLComponent.cpp"> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLShaderProgram.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLTexture.cpp"> | |||
| <FileConfiguration Name="Debug|Win32" | |||
| ExcludedFromBuild="true"> | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| @@ -4302,19 +4275,18 @@ | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| </FileConfiguration> | |||
| </File> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_mac_OpenGLComponent.mm"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLTexture.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_Quaternion.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_Vector3D.h"/> | |||
| </Filter> | |||
| <Filter Name="native"> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_MissingGLDefinitions.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_OpenGL_android.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_OpenGL_ios.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_OpenGL_linux.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_OpenGL_osx.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_OpenGL_win32.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_OpenGLExtensions.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_win32_OpenGLComponent.cpp"> | |||
| <FileConfiguration Name="Debug|Win32" | |||
| ExcludedFromBuild="true"> | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| </FileConfiguration> | |||
| <FileConfiguration Name="Release|Win32" | |||
| ExcludedFromBuild="true"> | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| </FileConfiguration> | |||
| </File> | |||
| </Filter> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\juce_module_info"> | |||
| <FileConfiguration Name="Debug|Win32" | |||
| @@ -4188,17 +4188,6 @@ | |||
| <Filter Name="opengl"> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_Draggable3DOrientation.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_Matrix3D.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLComponent.cpp"> | |||
| <FileConfiguration Name="Debug|Win32" | |||
| ExcludedFromBuild="true"> | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| </FileConfiguration> | |||
| <FileConfiguration Name="Release|Win32" | |||
| ExcludedFromBuild="true"> | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| </FileConfiguration> | |||
| </File> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLComponent.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLContext.cpp"> | |||
| <FileConfiguration Name="Debug|Win32" | |||
| ExcludedFromBuild="true"> | |||
| @@ -4254,8 +4243,7 @@ | |||
| </FileConfiguration> | |||
| </File> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLImage.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLPixelFormat.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLShaderProgram.cpp"> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLPixelFormat.cpp"> | |||
| <FileConfiguration Name="Debug|Win32" | |||
| ExcludedFromBuild="true"> | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| @@ -4265,23 +4253,8 @@ | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| </FileConfiguration> | |||
| </File> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLShaderProgram.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLTexture.cpp"> | |||
| <FileConfiguration Name="Debug|Win32" | |||
| ExcludedFromBuild="true"> | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| </FileConfiguration> | |||
| <FileConfiguration Name="Release|Win32" | |||
| ExcludedFromBuild="true"> | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| </FileConfiguration> | |||
| </File> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLTexture.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_Quaternion.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_Vector3D.h"/> | |||
| </Filter> | |||
| <Filter Name="native"> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_android_OpenGLComponent.cpp"> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLPixelFormat.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLShaderProgram.cpp"> | |||
| <FileConfiguration Name="Debug|Win32" | |||
| ExcludedFromBuild="true"> | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| @@ -4291,8 +4264,8 @@ | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| </FileConfiguration> | |||
| </File> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_ios_OpenGLComponent.mm"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_linux_OpenGLComponent.cpp"> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLShaderProgram.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLTexture.cpp"> | |||
| <FileConfiguration Name="Debug|Win32" | |||
| ExcludedFromBuild="true"> | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| @@ -4302,19 +4275,18 @@ | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| </FileConfiguration> | |||
| </File> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_mac_OpenGLComponent.mm"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLTexture.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_Quaternion.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_Vector3D.h"/> | |||
| </Filter> | |||
| <Filter Name="native"> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_MissingGLDefinitions.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_OpenGL_android.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_OpenGL_ios.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_OpenGL_linux.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_OpenGL_osx.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_OpenGL_win32.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_OpenGLExtensions.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_win32_OpenGLComponent.cpp"> | |||
| <FileConfiguration Name="Debug|Win32" | |||
| ExcludedFromBuild="true"> | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| </FileConfiguration> | |||
| <FileConfiguration Name="Release|Win32" | |||
| ExcludedFromBuild="true"> | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| </FileConfiguration> | |||
| </File> | |||
| </Filter> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\juce_module_info"> | |||
| <FileConfiguration Name="Debug|Win32" | |||
| @@ -61,6 +61,7 @@ | |||
| 0B85A2AF6033752E00F83AFF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Synthesiser.cpp"; path = "../../../../modules/juce_audio_basics/synthesisers/juce_Synthesiser.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 0B9605D6761053F7125515C5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_WebBrowserComponent.mm"; path = "../../../../modules/juce_gui_extra/native/juce_mac_WebBrowserComponent.mm"; sourceTree = "SOURCE_ROOT"; }; | |||
| 0BC458FE29429B837EEB24C3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_ALSA.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_linux_ALSA.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 0BD6BC200ABC94991048D141 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGL_osx.h"; path = "../../../../modules/juce_opengl/native/juce_OpenGL_osx.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 0C1C873F9DC4FE28049F59A6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GlyphArrangement.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 0D4F3E75890C6947AB90B20A = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CallOutBox.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_CallOutBox.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 0D591ABAB234B0426CE01D05 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ActionBroadcaster.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_ActionBroadcaster.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| @@ -79,7 +80,6 @@ | |||
| 1165196D8B7D6AFFA902D9ED = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryContentsList.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 11AF7CE3994491AF2D5A9F07 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UnitTest.h"; path = "../../../../modules/juce_core/unit_tests/juce_UnitTest.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 121B34A19423A36C86B7D358 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ThreadWithProgressWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 1227115BD17EB8F0667DB117 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OpenGLComponent.cpp"; path = "../../../../modules/juce_opengl/opengl/juce_OpenGLComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 124AED9F49C0DB9D4F0AD127 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MathsFunctions.h"; path = "../../../../modules/juce_core/maths/juce_MathsFunctions.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 124BDF35CA497A669F44F8A0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Direct2DGraphicsContext.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_Direct2DGraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 12D7D5F45AF5472B8562ACFD = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OutputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_OutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| @@ -164,6 +164,7 @@ | |||
| 2F196FD69A04E1DE0487879D = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LassoComponent.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_LassoComponent.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 2F40F35B381DB1DC837B5785 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InterprocessConnectionServer.cpp"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnectionServer.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 301FBEEA0017A1DC114C4296 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LookAndFeel.cpp"; path = "../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 30BBFB8A57AF6B0A7933A7CF = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGL_linux.h"; path = "../../../../modules/juce_opengl/native/juce_OpenGL_linux.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 30DD615038F9EC4BE88D8CBE = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TableHeaderComponent.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableHeaderComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 313F7506F18E1AA50DFA727C = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WildcardFileFilter.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_WildcardFileFilter.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 31C84FEFD03777D3C0B30AE3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComboBox.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ComboBox.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| @@ -188,7 +189,6 @@ | |||
| 36118B506E1C0C5E554A3AB8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WindowsRegistry.h"; path = "../../../../modules/juce_core/misc/juce_WindowsRegistry.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 361B7CF8C22A945E2F9439AA = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LowLevelGraphicsSoftwareRenderer.cpp"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 36203646F7650EEBC8E561E1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DropShadowEffect.h"; path = "../../../../modules/juce_graphics/effects/juce_DropShadowEffect.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 3682BBAEC6842DE49899AEF0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_OpenGLComponent.mm"; path = "../../../../modules/juce_opengl/native/juce_mac_OpenGLComponent.mm"; sourceTree = "SOURCE_ROOT"; }; | |||
| 3693E6A29D3276AE2FD99E7C = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TreeView.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TreeView.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 36C52951440860FFBD722ADC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_basics.mm"; path = "../../../../modules/juce_audio_basics/juce_audio_basics.mm"; sourceTree = "SOURCE_ROOT"; }; | |||
| 3726D2A716AFFCAFC689F699 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileChooserDialogBox.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileChooserDialogBox.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| @@ -200,7 +200,6 @@ | |||
| 383685240BE0C5D552CEE893 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RectangleList.h"; path = "../../../../modules/juce_graphics/geometry/juce_RectangleList.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 3889EC8401B85658FF2A4C79 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_QuickTimeMovieComponent.h"; path = "../../../../modules/juce_video/playback/juce_QuickTimeMovieComponent.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 391092117AFF1ED52D525830 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PerformanceCounter.h"; path = "../../../../modules/juce_core/time/juce_PerformanceCounter.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 39373A988D28974E62BE9DC5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_OpenGLComponent.cpp"; path = "../../../../modules/juce_opengl/native/juce_win32_OpenGLComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 3A10CF9249AB0253491916FF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Identifier.cpp"; path = "../../../../modules/juce_core/text/juce_Identifier.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 3A16148F99B69CC3E7244CCE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AiffAudioFormat.h"; path = "../../../../modules/juce_audio_formats/codecs/juce_AiffAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 3A8607BF3CB071A2BAEC2EF4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GroupComponent.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_GroupComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| @@ -223,6 +222,7 @@ | |||
| 3F07F48519ADEF7412141854 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyboardFocusTraverser.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyboardFocusTraverser.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 3F46748F4C1BA154F02782CD = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentMovementWatcher.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentMovementWatcher.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 3FD5D0E80E59DD30653DECA9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableComposite.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableComposite.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 40E15724CF5BF54E87123B53 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGL_ios.h"; path = "../../../../modules/juce_opengl/native/juce_OpenGL_ios.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 410374284F06C7E677CE3304 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Timer.h"; path = "../../../../modules/juce_events/timers/juce_Timer.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 410A065CFC521631E097226B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GZIPDecompressorInputStream.h"; path = "../../../../modules/juce_core/zip/juce_GZIPDecompressorInputStream.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 41518874E6FBC857953759A4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioThumbnailCache.h"; path = "../../../../modules/juce_audio_utils/gui/juce_AudioThumbnailCache.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| @@ -312,8 +312,8 @@ | |||
| 5CE8C9417DAADB74E43E45F2 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_FileChooser.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_android_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 5CEBA18D60D8B6ED8289C59B = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Logger.h"; path = "../../../../modules/juce_core/logging/juce_Logger.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 5D481F5B2179D992DEE0B768 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MD5.h"; path = "../../../../modules/juce_cryptography/hashing/juce_MD5.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 5D7DD1DD4639D04EF34BA0F9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGL_win32.h"; path = "../../../../modules/juce_opengl/native/juce_OpenGL_win32.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 5DADEFD1B5BD748F0E398FA5 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemStats.h"; path = "../../../../modules/juce_core/system/juce_SystemStats.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 5DB822375EE0E803E8E448D4 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_OpenGLComponent.cpp"; path = "../../../../modules/juce_opengl/native/juce_linux_OpenGLComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 5E30952BCEDE4F9E9BCB8206 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Slider.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_Slider.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 5EDC0271FFCE0FBE21E31146 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Windowing.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_Windowing.mm"; sourceTree = "SOURCE_ROOT"; }; | |||
| 5EF2F4588F397746FFB64D36 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_XmlDocument.h"; path = "../../../../modules/juce_core/xml/juce_XmlDocument.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| @@ -398,6 +398,7 @@ | |||
| 76AB694AEEC8FF5D6DF84ED6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DragAndDrop.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_win32_DragAndDrop.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 76DAC22E32A5D3125FA4AA38 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_IIRFilter.cpp"; path = "../../../../modules/juce_audio_basics/effects/juce_IIRFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 788ECBAB308119F741949B0A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF16.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_UTF16.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 789DD960143BCB1B9A2559EC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OpenGLPixelFormat.cpp"; path = "../../../../modules/juce_opengl/opengl/juce_OpenGLPixelFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 78B57C946E0A65FC6D22F31B = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FillType.cpp"; path = "../../../../modules/juce_graphics/colour/juce_FillType.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 78D612A79CBC36D8C65979A8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PopupMenu.cpp"; path = "../../../../modules/juce_gui_basics/menus/juce_PopupMenu.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 78E7A059FCFA552612AA9BB9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MessageListener.h"; path = "../../../../modules/juce_events/messages/juce_MessageListener.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| @@ -496,6 +497,7 @@ | |||
| 950A39A56232ED43E3AC72D3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Image.h"; path = "../../../../modules/juce_graphics/images/juce_Image.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 95345D1A744D9DD4B0FDCC79 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableRectangle.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableRectangle.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 95945740AE9C31DA5347FCEE = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JuceHeader.h; path = ../../JuceLibraryCode/JuceHeader.h; sourceTree = "SOURCE_ROOT"; }; | |||
| 95FD910B9D83BA03415EBCC1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGL_android.h"; path = "../../../../modules/juce_opengl/native/juce_OpenGL_android.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 9639E00C68CB8C0B7E7B5427 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TableListBox.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableListBox.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| 964B8F8E07FC8A58A0EA70EF = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Midi.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_Midi.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| 966CF33B8DD2ABBE0C28B0F3 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Threads.mm"; path = "../../../../modules/juce_core/native/juce_mac_Threads.mm"; sourceTree = "SOURCE_ROOT"; }; | |||
| @@ -617,9 +619,7 @@ | |||
| BDB49588F85B6CF8C1F25C56 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileSearchPath.cpp"; path = "../../../../modules/juce_core/files/juce_FileSearchPath.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| BE49682A83E13297A03A20B1 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTMidiEventList.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VSTMidiEventList.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| BEAA508BC8541174216C785F = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Files.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| BF25BBF1072EE73925E688D0 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_OpenGLComponent.cpp"; path = "../../../../modules/juce_opengl/native/juce_android_OpenGLComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| BF8413D015AE44CA39BC1BD9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PreferencesPanel.h"; path = "../../../../modules/juce_gui_extra/misc/juce_PreferencesPanel.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| BFBA3FCA1C3F9FD3BB8146B8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_OpenGLComponent.mm"; path = "../../../../modules/juce_opengl/native/juce_ios_OpenGLComponent.mm"; sourceTree = "SOURCE_ROOT"; }; | |||
| C0375E5656DB78324EA070D8 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_InputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| C0AFCC9608CDF29113F7EC1E = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CodeDocument.cpp"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| C0CC8628B556B8FD0C44BEAC = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_SystemTrayIcon.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_win32_SystemTrayIcon.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| @@ -721,7 +721,6 @@ | |||
| DBBD0ED26A362051E18710E9 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HashMap.h"; path = "../../../../modules/juce_core/containers/juce_HashMap.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| DC31C8A4B63277C7D858A546 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Midi.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_linux_Midi.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| DC526387B6EB8A65C79A11B6 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Process.h"; path = "../../../../modules/juce_core/threads/juce_Process.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| DC76043392FDF3B5BD7D2554 = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGLComponent.h"; path = "../../../../modules/juce_opengl/opengl/juce_OpenGLComponent.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| DCCB4243EC468A5F8D307605 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioDeviceSelectorComponent.cpp"; path = "../../../../modules/juce_audio_utils/gui/juce_AudioDeviceSelectorComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| DCCD453F3584ABA36E30A71A = { isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ModifierKeys.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_ModifierKeys.h"; sourceTree = "SOURCE_ROOT"; }; | |||
| DD8A07A1E68DB9FEC6C9FF59 = { isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiKeyboardState.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiKeyboardState.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||
| @@ -1770,8 +1769,6 @@ | |||
| 543980D718ACBB76513A4AF0 = { isa = PBXGroup; children = ( | |||
| 96A82204F17CFBC13483F6BF, | |||
| 0B41301E2279379BE7955E65, | |||
| 1227115BD17EB8F0667DB117, | |||
| DC76043392FDF3B5BD7D2554, | |||
| EB41509899310297C8F7AC64, | |||
| 6096E343983724F254B268C3, | |||
| 73C6ABF23C4B143DB2BC7226, | |||
| @@ -1782,6 +1779,7 @@ | |||
| AEB9A6FBC99A1C710C51D799, | |||
| 6DCD8800E380DB691DC9D467, | |||
| 7251827C30AC1C4F55C3DB69, | |||
| 789DD960143BCB1B9A2559EC, | |||
| 6D95302F8D68BA3F0538214F, | |||
| 1DC59B4A97D5DF77801ACAE8, | |||
| F7010D646D19C704DE9D42A1, | |||
| @@ -1790,13 +1788,13 @@ | |||
| 154C4985C134E2B4A7B87025, | |||
| 2AC1E88F92FCBD06A1A60D42 ); name = opengl; sourceTree = "<group>"; }; | |||
| 637D3A9082C214CA0E067538 = { isa = PBXGroup; children = ( | |||
| BF25BBF1072EE73925E688D0, | |||
| BFBA3FCA1C3F9FD3BB8146B8, | |||
| 5DB822375EE0E803E8E448D4, | |||
| 3682BBAEC6842DE49899AEF0, | |||
| 524892AFEAC2AA524C015710, | |||
| F28767C5606E63E66146E375, | |||
| 39373A988D28974E62BE9DC5 ); name = native; sourceTree = "<group>"; }; | |||
| 95FD910B9D83BA03415EBCC1, | |||
| 40E15724CF5BF54E87123B53, | |||
| 30BBFB8A57AF6B0A7933A7CF, | |||
| 0BD6BC200ABC94991048D141, | |||
| 5D7DD1DD4639D04EF34BA0F9, | |||
| F28767C5606E63E66146E375 ); name = native; sourceTree = "<group>"; }; | |||
| 9CAD7248065B9A6C050F9527 = { isa = PBXGroup; children = ( | |||
| 543980D718ACBB76513A4AF0, | |||
| 637D3A9082C214CA0E067538, | |||
| @@ -4150,17 +4150,6 @@ | |||
| <Filter Name="opengl"> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_Draggable3DOrientation.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_Matrix3D.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLComponent.cpp"> | |||
| <FileConfiguration Name="Debug|Win32" | |||
| ExcludedFromBuild="true"> | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| </FileConfiguration> | |||
| <FileConfiguration Name="Release|Win32" | |||
| ExcludedFromBuild="true"> | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| </FileConfiguration> | |||
| </File> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLComponent.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLContext.cpp"> | |||
| <FileConfiguration Name="Debug|Win32" | |||
| ExcludedFromBuild="true"> | |||
| @@ -4216,8 +4205,7 @@ | |||
| </FileConfiguration> | |||
| </File> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLImage.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLPixelFormat.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLShaderProgram.cpp"> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLPixelFormat.cpp"> | |||
| <FileConfiguration Name="Debug|Win32" | |||
| ExcludedFromBuild="true"> | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| @@ -4227,23 +4215,8 @@ | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| </FileConfiguration> | |||
| </File> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLShaderProgram.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLTexture.cpp"> | |||
| <FileConfiguration Name="Debug|Win32" | |||
| ExcludedFromBuild="true"> | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| </FileConfiguration> | |||
| <FileConfiguration Name="Release|Win32" | |||
| ExcludedFromBuild="true"> | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| </FileConfiguration> | |||
| </File> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLTexture.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_Quaternion.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_Vector3D.h"/> | |||
| </Filter> | |||
| <Filter Name="native"> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_android_OpenGLComponent.cpp"> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLPixelFormat.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLShaderProgram.cpp"> | |||
| <FileConfiguration Name="Debug|Win32" | |||
| ExcludedFromBuild="true"> | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| @@ -4253,8 +4226,8 @@ | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| </FileConfiguration> | |||
| </File> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_ios_OpenGLComponent.mm"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_linux_OpenGLComponent.cpp"> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLShaderProgram.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLTexture.cpp"> | |||
| <FileConfiguration Name="Debug|Win32" | |||
| ExcludedFromBuild="true"> | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| @@ -4264,19 +4237,18 @@ | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| </FileConfiguration> | |||
| </File> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_mac_OpenGLComponent.mm"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLTexture.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_Quaternion.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\opengl\juce_Vector3D.h"/> | |||
| </Filter> | |||
| <Filter Name="native"> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_MissingGLDefinitions.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_OpenGL_android.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_OpenGL_ios.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_OpenGL_linux.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_OpenGL_osx.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_OpenGL_win32.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_OpenGLExtensions.h"/> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\native\juce_win32_OpenGLComponent.cpp"> | |||
| <FileConfiguration Name="Debug|Win32" | |||
| ExcludedFromBuild="true"> | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| </FileConfiguration> | |||
| <FileConfiguration Name="Release|Win32" | |||
| ExcludedFromBuild="true"> | |||
| <Tool Name="VCCLCompilerTool"/> | |||
| </FileConfiguration> | |||
| </File> | |||
| </Filter> | |||
| <File RelativePath="..\..\..\..\modules\juce_opengl\juce_module_info"> | |||
| <FileConfiguration Name="Debug|Win32" | |||
| @@ -1125,9 +1125,6 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_gui_extra\native\juce_win32_WebBrowserComponent.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLComponent.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLContext.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| @@ -1143,19 +1140,13 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLImage.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLShaderProgram.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLTexture.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\native\juce_android_OpenGLComponent.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLPixelFormat.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\native\juce_linux_OpenGLComponent.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLShaderProgram.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\native\juce_win32_OpenGLComponent.cpp"> | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLTexture.cpp"> | |||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_video\native\juce_android_CameraDevice.cpp"> | |||
| @@ -1579,7 +1570,6 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_gui_extra\juce_gui_extra.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\opengl\juce_Draggable3DOrientation.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\opengl\juce_Matrix3D.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLComponent.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLContext.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLFrameBuffer.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLGraphicsContext.h"/> | |||
| @@ -1591,6 +1581,11 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\opengl\juce_Quaternion.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\opengl\juce_Vector3D.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\native\juce_MissingGLDefinitions.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\native\juce_OpenGL_android.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\native\juce_OpenGL_ios.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\native\juce_OpenGL_linux.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\native\juce_OpenGL_osx.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\native\juce_OpenGL_win32.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\native\juce_OpenGLExtensions.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\juce_opengl.h"/> | |||
| <ClInclude Include="..\..\..\..\modules\juce_video\playback\juce_DirectShowComponent.h"/> | |||
| @@ -1411,9 +1411,6 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_gui_extra\juce_module_info"> | |||
| <Filter>Juce Modules\juce_gui_extra</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLComponent.cpp"> | |||
| <Filter>Juce Modules\juce_opengl\opengl</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLContext.cpp"> | |||
| <Filter>Juce Modules\juce_opengl\opengl</Filter> | |||
| </ClCompile> | |||
| @@ -1429,27 +1426,15 @@ | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLImage.cpp"> | |||
| <Filter>Juce Modules\juce_opengl\opengl</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLPixelFormat.cpp"> | |||
| <Filter>Juce Modules\juce_opengl\opengl</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLShaderProgram.cpp"> | |||
| <Filter>Juce Modules\juce_opengl\opengl</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLTexture.cpp"> | |||
| <Filter>Juce Modules\juce_opengl\opengl</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\native\juce_android_OpenGLComponent.cpp"> | |||
| <Filter>Juce Modules\juce_opengl\native</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\native\juce_ios_OpenGLComponent.mm"> | |||
| <Filter>Juce Modules\juce_opengl\native</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\native\juce_linux_OpenGLComponent.cpp"> | |||
| <Filter>Juce Modules\juce_opengl\native</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\native\juce_mac_OpenGLComponent.mm"> | |||
| <Filter>Juce Modules\juce_opengl\native</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\native\juce_win32_OpenGLComponent.cpp"> | |||
| <Filter>Juce Modules\juce_opengl\native</Filter> | |||
| </ClCompile> | |||
| <ClCompile Include="..\..\..\..\modules\juce_opengl\juce_module_info"> | |||
| <Filter>Juce Modules\juce_opengl</Filter> | |||
| </ClCompile> | |||
| @@ -2697,9 +2682,6 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\opengl\juce_Matrix3D.h"> | |||
| <Filter>Juce Modules\juce_opengl\opengl</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLComponent.h"> | |||
| <Filter>Juce Modules\juce_opengl\opengl</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\opengl\juce_OpenGLContext.h"> | |||
| <Filter>Juce Modules\juce_opengl\opengl</Filter> | |||
| </ClInclude> | |||
| @@ -2733,6 +2715,21 @@ | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\native\juce_MissingGLDefinitions.h"> | |||
| <Filter>Juce Modules\juce_opengl\native</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\native\juce_OpenGL_android.h"> | |||
| <Filter>Juce Modules\juce_opengl\native</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\native\juce_OpenGL_ios.h"> | |||
| <Filter>Juce Modules\juce_opengl\native</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\native\juce_OpenGL_linux.h"> | |||
| <Filter>Juce Modules\juce_opengl\native</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\native\juce_OpenGL_osx.h"> | |||
| <Filter>Juce Modules\juce_opengl\native</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\native\juce_OpenGL_win32.h"> | |||
| <Filter>Juce Modules\juce_opengl\native</Filter> | |||
| </ClInclude> | |||
| <ClInclude Include="..\..\..\..\modules\juce_opengl\native\juce_OpenGLExtensions.h"> | |||
| <Filter>Juce Modules\juce_opengl\native</Filter> | |||
| </ClInclude> | |||
| @@ -357,7 +357,7 @@ public final class JuceAppActivity extends Activity | |||
| @Override | |||
| public void onSurfaceChanged (GL10 unused, int width, int height) | |||
| { | |||
| contextCreated(); | |||
| contextChangedSize(); | |||
| } | |||
| @Override | |||
| @@ -367,6 +367,7 @@ public final class JuceAppActivity extends Activity | |||
| } | |||
| private native void contextCreated(); | |||
| private native void contextChangedSize(); | |||
| private native void render(); | |||
| } | |||
| @@ -196,24 +196,19 @@ static void checkGLError (const char* file, const int line) | |||
| #define JUCE_CHECK_OPENGL_ERROR ; | |||
| #endif | |||
| static void clearGLError() | |||
| { | |||
| while (glGetError() != GL_NO_ERROR) {} | |||
| } | |||
| //============================================================================== | |||
| // START_AUTOINCLUDE opengl/*.cpp | |||
| #include "opengl/juce_OpenGLComponent.cpp" | |||
| #include "opengl/juce_OpenGLContext.cpp" | |||
| #include "opengl/juce_OpenGLFrameBuffer.cpp" | |||
| #include "opengl/juce_OpenGLGraphicsContext.cpp" | |||
| #include "opengl/juce_OpenGLHelpers.cpp" | |||
| #include "opengl/juce_OpenGLImage.cpp" | |||
| #include "opengl/juce_OpenGLPixelFormat.cpp" | |||
| #include "opengl/juce_OpenGLShaderProgram.cpp" | |||
| #include "opengl/juce_OpenGLTexture.cpp" | |||
| // END_AUTOINCLUDE | |||
| } | |||
| using namespace juce; | |||
| namespace juce | |||
| { | |||
| //============================================================================== | |||
| #if JUCE_MAC || JUCE_IOS | |||
| @@ -222,21 +217,23 @@ namespace juce | |||
| #include "../juce_graphics/native/juce_mac_CoreGraphicsHelpers.h" | |||
| #if JUCE_MAC | |||
| #include "native/juce_mac_OpenGLComponent.mm" | |||
| #include "native/juce_OpenGL_osx.h" | |||
| #else | |||
| #include "native/juce_ios_OpenGLComponent.mm" | |||
| #include "native/juce_OpenGL_ios.h" | |||
| #endif | |||
| #elif JUCE_WINDOWS | |||
| #include "native/juce_win32_OpenGLComponent.cpp" | |||
| #include "native/juce_OpenGL_win32.h" | |||
| #elif JUCE_LINUX | |||
| #include "native/juce_linux_OpenGLComponent.cpp" | |||
| #include "native/juce_OpenGL_linux.h" | |||
| #elif JUCE_ANDROID | |||
| #include "../juce_core/native/juce_android_JNIHelpers.h" | |||
| #include "native/juce_android_OpenGLComponent.cpp" | |||
| #include "native/juce_OpenGL_android.h" | |||
| #endif | |||
| #include "opengl/juce_OpenGLContext.cpp" | |||
| } | |||
| @@ -58,8 +58,7 @@ | |||
| #include <GL/gl.h> | |||
| #undef KeyPress | |||
| #elif JUCE_IOS | |||
| #include <OpenGLES/ES1/gl.h> | |||
| #include <OpenGLES/ES1/glext.h> | |||
| #include <OpenGLES/ES2/gl.h> | |||
| #elif JUCE_MAC | |||
| #include <OpenGL/gl.h> | |||
| #include "OpenGL/glext.h" | |||
| @@ -67,7 +66,7 @@ | |||
| #include <GLES2/gl2.h> | |||
| #endif | |||
| #if (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX || JUCE_ANDROID) && ! defined (JUCE_USE_OPENGL_SHADERS) | |||
| #if ! defined (JUCE_USE_OPENGL_SHADERS) | |||
| #define JUCE_USE_OPENGL_SHADERS 1 | |||
| #endif | |||
| @@ -88,9 +87,6 @@ namespace juce | |||
| #ifndef __JUCE_MATRIX3D_JUCEHEADER__ | |||
| #include "opengl/juce_Matrix3D.h" | |||
| #endif | |||
| #ifndef __JUCE_OPENGLCOMPONENT_JUCEHEADER__ | |||
| #include "opengl/juce_OpenGLComponent.h" | |||
| #endif | |||
| #ifndef __JUCE_OPENGLCONTEXT_JUCEHEADER__ | |||
| #include "opengl/juce_OpenGLContext.h" | |||
| #endif | |||
| @@ -0,0 +1,204 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||
| Copyright 2004-11 by Raw Material Software Ltd. | |||
| ------------------------------------------------------------------------------ | |||
| JUCE can be redistributed and/or modified under the terms of the GNU General | |||
| Public License (Version 2), as published by the Free Software Foundation. | |||
| A copy of the license is included in the JUCE distribution, or can be found | |||
| online at www.gnu.org/licenses. | |||
| JUCE is distributed in the hope that it will be useful, but WITHOUT ANY | |||
| WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR | |||
| A PARTICULAR PURPOSE. See the GNU General Public License for more details. | |||
| ------------------------------------------------------------------------------ | |||
| To release a closed-source product which uses JUCE, commercial licenses are | |||
| available: visit www.rawmaterialsoftware.com/juce for more information. | |||
| ============================================================================== | |||
| */ | |||
| #define JNI_CLASS_MEMBERS(METHOD, STATICMETHOD, FIELD, STATICFIELD) \ | |||
| METHOD (layout, "layout", "(IIII)V") \ | |||
| METHOD (requestRender, "requestRender", "()V") \ | |||
| DECLARE_JNI_CLASS (OpenGLView, JUCE_ANDROID_ACTIVITY_CLASSPATH "$OpenGLView"); | |||
| #undef JNI_CLASS_MEMBERS | |||
| extern jobject createOpenGLView (ComponentPeer*); | |||
| //============================================================================== | |||
| class OpenGLContext::NativeContext | |||
| { | |||
| public: | |||
| NativeContext (Component& component_, | |||
| const OpenGLPixelFormat& pixelFormat, | |||
| const NativeContext* contextToShareWith) | |||
| : component (component_), | |||
| isInsideGLCallback (false) | |||
| { | |||
| glView = GlobalRef (createOpenGLView (component.getPeer())); | |||
| { | |||
| const ScopedLock sl (getContextListLock()); | |||
| getContextList().add (this); | |||
| } | |||
| updateWindowPosition (component.getTopLevelComponent() | |||
| ->getLocalArea (&component, component.getLocalBounds())); | |||
| } | |||
| ~NativeContext() | |||
| { | |||
| { | |||
| const ScopedLock sl (getContextListLock()); | |||
| getContextList().removeValue (this); | |||
| } | |||
| android.activity.callVoidMethod (JuceAppActivity.deleteView, glView.get()); | |||
| glView.clear(); | |||
| } | |||
| void initialiseOnRenderThread() | |||
| { | |||
| } | |||
| void shutdownOnRenderThread() | |||
| { | |||
| } | |||
| bool makeActive() const noexcept { return isInsideGLCallback; } | |||
| bool makeInactive() const noexcept { return true; } | |||
| bool isActive() const noexcept { return isInsideGLCallback; } | |||
| void swapBuffers() const noexcept {} | |||
| bool setSwapInterval (const int) { return false; } | |||
| int getSwapInterval() const { return 0; } | |||
| bool createdOk() const noexcept { return getRawContext() != nullptr; } | |||
| void* getRawContext() const noexcept { return glView.get(); } | |||
| GLuint getFrameBufferID() const noexcept { return 0; } | |||
| void updateWindowPosition (const Rectangle<int>& bounds) | |||
| { | |||
| if (lastBounds != bounds) | |||
| { | |||
| lastBounds = bounds; | |||
| glView.callVoidMethod (OpenGLView.layout, | |||
| bounds.getX(), bounds.getY(), | |||
| bounds.getRight(), bounds.getBottom()); | |||
| } | |||
| } | |||
| void triggerRepaint() | |||
| { | |||
| glView.callVoidMethod (OpenGLView.requestRender); | |||
| } | |||
| //============================================================================== | |||
| void contextCreatedCallback(); | |||
| void renderCallback(); | |||
| //============================================================================== | |||
| static NativeContext* findContextFor (JNIEnv* env, jobject glView) | |||
| { | |||
| const ScopedLock sl (getContextListLock()); | |||
| const ContextArray& contexts = getContextList(); | |||
| for (int i = contexts.size(); --i >= 0;) | |||
| { | |||
| NativeContext* const c = contexts.getUnchecked(i); | |||
| if (env->IsSameObject (c->glView.get(), glView)) | |||
| return c; | |||
| } | |||
| return nullptr; | |||
| } | |||
| static NativeContext* getActiveContext() noexcept | |||
| { | |||
| const ScopedLock sl (getContextListLock()); | |||
| const ContextArray& contexts = getContextList(); | |||
| for (int i = contexts.size(); --i >= 0;) | |||
| { | |||
| NativeContext* const c = contexts.getUnchecked(i); | |||
| if (c->isInsideGLCallback) | |||
| return c; | |||
| } | |||
| return nullptr; | |||
| } | |||
| Component& component; | |||
| private: | |||
| GlobalRef glView; | |||
| Rectangle<int> lastBounds; | |||
| bool isInsideGLCallback; | |||
| static CriticalSection& getContextListLock() | |||
| { | |||
| static CriticalSection lock; | |||
| return lock; | |||
| } | |||
| typedef Array<NativeContext*> ContextArray; | |||
| static ContextArray& getContextList() | |||
| { | |||
| static ContextArray contexts; | |||
| return contexts; | |||
| } | |||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (NativeContext); | |||
| }; | |||
| //============================================================================== | |||
| bool OpenGLHelpers::isContextActive() | |||
| { | |||
| return OpenGLContext::NativeContext::getActiveContext() != nullptr; | |||
| } | |||
| //============================================================================== | |||
| JUCE_JNI_CALLBACK (JUCE_JOIN_MACRO (JUCE_ANDROID_ACTIVITY_CLASSNAME, _00024OpenGLView), contextCreated, void, (JNIEnv* env, jobject view)) | |||
| { | |||
| threadLocalJNIEnvHolder.getOrAttach(); | |||
| JUCE_CHECK_OPENGL_ERROR | |||
| for (int i = 100; --i >= 0;) | |||
| { | |||
| OpenGLContext::NativeContext* const context = OpenGLContext::NativeContext::findContextFor (env, view); | |||
| if (context != nullptr) | |||
| { | |||
| context->contextCreatedCallback(); | |||
| JUCE_CHECK_OPENGL_ERROR | |||
| return; | |||
| } | |||
| Thread::sleep (20); | |||
| } | |||
| jassertfalse; | |||
| } | |||
| JUCE_JNI_CALLBACK (JUCE_JOIN_MACRO (JUCE_ANDROID_ACTIVITY_CLASSNAME, _00024OpenGLView), contextChangedSize, void, (JNIEnv* env, jobject view)) | |||
| { | |||
| } | |||
| JUCE_JNI_CALLBACK (JUCE_JOIN_MACRO (JUCE_ANDROID_ACTIVITY_CLASSNAME, _00024OpenGLView), render, void, (JNIEnv* env, jobject view)) | |||
| { | |||
| OpenGLContext::NativeContext* const context = OpenGLContext::NativeContext::findContextFor (env, view); | |||
| if (context != nullptr) | |||
| context->renderCallback(); | |||
| } | |||
| @@ -41,129 +41,161 @@ | |||
| namespace juce | |||
| { | |||
| //============================================================================== | |||
| class GLESContext : public OpenGLContext | |||
| class OpenGLContext::NativeContext | |||
| { | |||
| public: | |||
| GLESContext (UIView* parentView, | |||
| Component* const component_, | |||
| const OpenGLPixelFormat& pixelFormat, | |||
| const GLESContext* const sharedContext, | |||
| const bool isGLES2_) | |||
| : component (component_), glLayer (nil), context (nil), | |||
| useDepthBuffer (pixelFormat.depthBufferBits > 0), isGLES2 (isGLES2_), | |||
| frameBufferHandle (0), colorBufferHandle (0), | |||
| depthBufferHandle (0), lastWidth (0), lastHeight (0) | |||
| NativeContext (Component& component, | |||
| const OpenGLPixelFormat& pixelFormat, | |||
| const NativeContext* const contextToShareWith) | |||
| : frameBufferHandle (0), colorBufferHandle (0), depthBufferHandle (0), | |||
| lastWidth (0), lastHeight (0), needToRebuildBuffers (false), | |||
| swapFrames (0), useDepthBuffer (pixelFormat.depthBufferBits > 0) | |||
| { | |||
| view = [[JuceGLView alloc] initWithFrame: CGRectMake (0, 0, 64, 64)]; | |||
| JUCE_AUTORELEASEPOOL | |||
| ComponentPeer* const peer = component.getPeer(); | |||
| jassert (peer != nullptr); | |||
| const Rectangle<int> bounds (peer->getComponent()->getLocalArea (&component, component.getLocalBounds())); | |||
| lastWidth = bounds.getWidth(); | |||
| lastHeight = bounds.getHeight(); | |||
| view = [[JuceGLView alloc] initWithFrame: getCGRectFor (bounds)]; | |||
| view.opaque = YES; | |||
| view.hidden = NO; | |||
| view.backgroundColor = [UIColor blackColor]; | |||
| view.userInteractionEnabled = NO; | |||
| glLayer = (CAEAGLLayer*) [view layer]; | |||
| [parentView addSubview: view]; | |||
| [((UIView*) peer->getNativeHandle()) addSubview: view]; | |||
| context = [EAGLContext alloc]; | |||
| NSUInteger apiType = isGLES2_ ? kEAGLRenderingAPIOpenGLES2 | |||
| : kEAGLRenderingAPIOpenGLES1; | |||
| const NSUInteger type = kEAGLRenderingAPIOpenGLES2; | |||
| if (sharedContext != nullptr) | |||
| context = [[EAGLContext alloc] initWithAPI: apiType | |||
| sharegroup: [sharedContext->context sharegroup]]; | |||
| if (contextToShareWith != nullptr) | |||
| [context initWithAPI: type sharegroup: [contextToShareWith->context sharegroup]]; | |||
| else | |||
| context = [[EAGLContext alloc] initWithAPI: apiType]; | |||
| [context initWithAPI: type]; | |||
| // I'd prefer to put this stuff in the initialiseOnRenderThread() call, but doing | |||
| // so causes myserious timing-related failures. | |||
| [EAGLContext setCurrentContext: context]; | |||
| createGLBuffers(); | |||
| [EAGLContext setCurrentContext: nil]; | |||
| } | |||
| ~GLESContext() | |||
| ~NativeContext() | |||
| { | |||
| properties.clear(); // to release any stored programs, etc that may be held in properties. | |||
| makeInactive(); | |||
| [context release]; | |||
| context = nil; | |||
| [view removeFromSuperview]; | |||
| [view release]; | |||
| } | |||
| void initialiseOnRenderThread() | |||
| { | |||
| } | |||
| void shutdownOnRenderThread() | |||
| { | |||
| JUCE_CHECK_OPENGL_ERROR | |||
| freeGLBuffers(); | |||
| } | |||
| bool createdOk() const noexcept { return getRawContext() != nullptr; } | |||
| void* getRawContext() const noexcept { return glLayer; } | |||
| GLuint getFrameBufferID() const noexcept { return frameBufferHandle; } | |||
| bool makeActive() const noexcept | |||
| { | |||
| jassert (context != nil); | |||
| if (! [EAGLContext setCurrentContext: context]) | |||
| return false; | |||
| [EAGLContext setCurrentContext: context]; | |||
| glBindFramebuffer (GL_FRAMEBUFFER, frameBufferHandle); | |||
| return true; | |||
| } | |||
| void swapBuffers() | |||
| bool makeInactive() const noexcept | |||
| { | |||
| glBindRenderbuffer (GL_RENDERBUFFER, colorBufferHandle); | |||
| [context presentRenderbuffer: GL_RENDERBUFFER]; | |||
| return (! isActive()) || [EAGLContext setCurrentContext: nil]; | |||
| } | |||
| bool makeInactive() const noexcept | |||
| bool isActive() const noexcept | |||
| { | |||
| return [EAGLContext setCurrentContext: nil]; | |||
| return [EAGLContext currentContext] == context; | |||
| } | |||
| bool isActive() const noexcept { return [EAGLContext currentContext] == context; } | |||
| void* getRawContext() const noexcept { return glLayer; } | |||
| unsigned int getFrameBufferID() const { return (unsigned int) frameBufferHandle; } | |||
| void swapBuffers() | |||
| { | |||
| glBindRenderbuffer (GL_RENDERBUFFER, colorBufferHandle); | |||
| [context presentRenderbuffer: GL_RENDERBUFFER]; | |||
| int getWidth() const { return lastWidth; } | |||
| int getHeight() const { return lastHeight; } | |||
| if (needToRebuildBuffers) | |||
| { | |||
| needToRebuildBuffers = false; | |||
| bool areShadersAvailable() const { return isGLES2; } | |||
| freeGLBuffers(); | |||
| createGLBuffers(); | |||
| makeActive(); | |||
| } | |||
| } | |||
| void updateWindowPosition (const Rectangle<int>& bounds) | |||
| { | |||
| // For some strange reason, the view seems to fail unless its width is a multiple of 8... | |||
| view.frame = CGRectMake ((CGFloat) bounds.getX(), (CGFloat) bounds.getY(), | |||
| (CGFloat) (bounds.getWidth() & ~7), | |||
| (CGFloat) bounds.getHeight()); | |||
| view.frame = getCGRectFor (bounds); | |||
| if (lastWidth != bounds.getWidth() || lastHeight != bounds.getHeight()) | |||
| { | |||
| lastWidth = bounds.getWidth(); | |||
| lastWidth = bounds.getWidth(); | |||
| lastHeight = bounds.getHeight(); | |||
| freeGLBuffers(); | |||
| createGLBuffers(); | |||
| needToRebuildBuffers = true; | |||
| } | |||
| } | |||
| bool setSwapInterval (const int numFramesPerSwap) | |||
| bool setSwapInterval (const int numFramesPerSwap) noexcept | |||
| { | |||
| numFrames = numFramesPerSwap; | |||
| return true; | |||
| swapFrames = numFramesPerSwap; | |||
| return false; | |||
| } | |||
| int getSwapInterval() const | |||
| int getSwapInterval() const noexcept { return swapFrames; } | |||
| private: | |||
| JuceGLView* view; | |||
| CAEAGLLayer* glLayer; | |||
| EAGLContext* context; | |||
| GLuint frameBufferHandle, colorBufferHandle, depthBufferHandle; | |||
| int volatile lastWidth, lastHeight; | |||
| bool volatile needToRebuildBuffers; | |||
| int swapFrames; | |||
| bool useDepthBuffer; | |||
| //============================================================================== | |||
| static CGRect getCGRectFor (const Rectangle<int>& bounds) | |||
| { | |||
| return numFrames; | |||
| return CGRectMake ((CGFloat) bounds.getX(), | |||
| (CGFloat) bounds.getY(), | |||
| (CGFloat) bounds.getWidth(), | |||
| (CGFloat) bounds.getHeight()); | |||
| } | |||
| //============================================================================== | |||
| void createGLBuffers() | |||
| { | |||
| makeActive(); | |||
| glGenFramebuffers (1, &frameBufferHandle); | |||
| glGenRenderbuffers (1, &colorBufferHandle); | |||
| glGenRenderbuffers (1, &depthBufferHandle); | |||
| glBindRenderbuffer (GL_RENDERBUFFER, colorBufferHandle); | |||
| bool ok = [context renderbufferStorage: GL_RENDERBUFFER fromDrawable: glLayer]; | |||
| jassert (ok); (void) ok; | |||
| GLint width, height; | |||
| glGetRenderbufferParameteriv (GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &width); | |||
| glGetRenderbufferParameteriv (GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &height); | |||
| if (useDepthBuffer) | |||
| { | |||
| GLint width, height; | |||
| glGetRenderbufferParameteriv (GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &width); | |||
| glGetRenderbufferParameteriv (GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &height); | |||
| glGenRenderbuffers (1, &depthBufferHandle); | |||
| glBindRenderbuffer (GL_RENDERBUFFER, depthBufferHandle); | |||
| glRenderbufferStorage (GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, width, height); | |||
| } | |||
| @@ -177,10 +209,12 @@ public: | |||
| glFramebufferRenderbuffer (GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthBufferHandle); | |||
| jassert (glCheckFramebufferStatus (GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE); | |||
| JUCE_CHECK_OPENGL_ERROR | |||
| } | |||
| void freeGLBuffers() | |||
| { | |||
| JUCE_CHECK_OPENGL_ERROR | |||
| [context renderbufferStorage: GL_RENDERBUFFER fromDrawable: nil]; | |||
| if (frameBufferHandle != 0) | |||
| @@ -200,35 +234,13 @@ public: | |||
| glDeleteRenderbuffers (1, &depthBufferHandle); | |||
| depthBufferHandle = 0; | |||
| } | |||
| } | |||
| private: | |||
| WeakReference<Component> component; | |||
| JuceGLView* view; | |||
| CAEAGLLayer* glLayer; | |||
| EAGLContext* context; | |||
| bool useDepthBuffer, isGLES2; | |||
| GLuint frameBufferHandle, colorBufferHandle, depthBufferHandle; | |||
| int numFrames; | |||
| int lastWidth, lastHeight; | |||
| JUCE_CHECK_OPENGL_ERROR | |||
| } | |||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (GLESContext); | |||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (NativeContext); | |||
| }; | |||
| OpenGLContext* OpenGLComponent::createContext() | |||
| { | |||
| JUCE_AUTORELEASEPOOL | |||
| ComponentPeer* peer = getPeer(); | |||
| if (peer != nullptr) | |||
| return new GLESContext ((UIView*) peer->getNativeHandle(), this, preferredPixelFormat, | |||
| dynamic_cast <const GLESContext*> (contextToShareListsWith), | |||
| (flags & openGLES2) != 0); | |||
| return nullptr; | |||
| } | |||
| //============================================================================== | |||
| bool OpenGLHelpers::isContextActive() | |||
| { | |||
| @@ -27,23 +27,15 @@ extern Display* display; | |||
| extern XContext windowHandleXContext; | |||
| //============================================================================== | |||
| class WindowedGLContext : public OpenGLContext | |||
| class OpenGLContext::NativeContext | |||
| { | |||
| public: | |||
| WindowedGLContext (Component* const component, | |||
| const OpenGLPixelFormat& pixelFormat, | |||
| GLXContext sharedContext) | |||
| : renderContext (0), | |||
| embeddedWindow (0), | |||
| swapInterval (0) | |||
| NativeContext (Component& component, | |||
| const OpenGLPixelFormat& pixelFormat, | |||
| const NativeContext* contextToShareWith_) | |||
| : renderContext (0), embeddedWindow (0), swapFrames (0), bestVisual (0), | |||
| contextToShareWith (contextToShareWith_) | |||
| { | |||
| extensions.initialise(); | |||
| jassert (component != nullptr); | |||
| ComponentPeer* const peer = component->getTopLevelComponent()->getPeer(); | |||
| if (peer == nullptr) | |||
| return; | |||
| ScopedXLock xlock; | |||
| XSync (display, False); | |||
| @@ -64,13 +56,11 @@ public: | |||
| None | |||
| }; | |||
| XVisualInfo* const bestVisual = glXChooseVisual (display, DefaultScreen (display), attribs); | |||
| if (bestVisual == 0) | |||
| bestVisual = glXChooseVisual (display, DefaultScreen (display), attribs); | |||
| if (bestVisual == nullptr) | |||
| return; | |||
| renderContext = glXCreateContext (display, bestVisual, sharedContext, GL_TRUE); | |||
| ComponentPeer* const peer = component.getPeer(); | |||
| Window windowH = (Window) peer->getNativeHandle(); | |||
| Colormap colourMap = XCreateColormap (display, windowH, bestVisual->visual, AllocNone); | |||
| @@ -79,9 +69,14 @@ public: | |||
| swa.border_pixel = 0; | |||
| swa.event_mask = ExposureMask | StructureNotifyMask; | |||
| const Rectangle<int> bounds (component.getTopLevelComponent() | |||
| ->getLocalArea (&component, component.getLocalBounds())); | |||
| embeddedWindow = XCreateWindow (display, windowH, | |||
| 0, 0, 1, 1, 0, | |||
| bestVisual->depth, | |||
| bounds.getX(), bounds.getY(), | |||
| jmax (1, bounds.getWidth()), | |||
| jmax (1, bounds.getHeight()), | |||
| 0, bestVisual->depth, | |||
| InputOutput, | |||
| bestVisual->visual, | |||
| CWBorderPixel | CWColormap | CWEventMask, | |||
| @@ -92,58 +87,58 @@ public: | |||
| XMapWindow (display, embeddedWindow); | |||
| XFreeColormap (display, colourMap); | |||
| XFree (bestVisual); | |||
| XSync (display, False); | |||
| makeActive(); | |||
| extensions.initialise(); | |||
| makeInactive(); | |||
| } | |||
| ~WindowedGLContext() | |||
| ~NativeContext() | |||
| { | |||
| ScopedXLock xlock; | |||
| properties.clear(); // to release any stored programs, etc that may be held in properties. | |||
| makeInactive(); | |||
| if (renderContext != 0) | |||
| if (embeddedWindow != 0) | |||
| { | |||
| ScopedXLock xlock; | |||
| glXDestroyContext (display, renderContext); | |||
| renderContext = nullptr; | |||
| XUnmapWindow (display, embeddedWindow); | |||
| XDestroyWindow (display, embeddedWindow); | |||
| } | |||
| XUnmapWindow (display, embeddedWindow); | |||
| XDestroyWindow (display, embeddedWindow); | |||
| if (bestVisual != nullptr) | |||
| XFree (bestVisual); | |||
| } | |||
| bool makeActive() const noexcept | |||
| void initialiseOnRenderThread() | |||
| { | |||
| jassert (renderContext != 0); | |||
| ScopedXLock xlock; | |||
| return glXMakeCurrent (display, embeddedWindow, renderContext) | |||
| && XSync (display, False); | |||
| renderContext = glXCreateContext (display, bestVisual, | |||
| contextToShareWith != nullptr ? contextToShareWith->renderContext : 0, | |||
| GL_TRUE); | |||
| makeActive(); | |||
| } | |||
| void shutdownOnRenderThread() | |||
| { | |||
| makeInactive(); | |||
| glXDestroyContext (display, renderContext); | |||
| renderContext = nullptr; | |||
| } | |||
| bool makeActive() const noexcept | |||
| { | |||
| return renderContext != 0 | |||
| && glXMakeCurrent (display, embeddedWindow, renderContext); | |||
| } | |||
| bool makeInactive() const noexcept | |||
| { | |||
| ScopedXLock xlock; | |||
| return (! isActive()) || glXMakeCurrent (display, None, 0); | |||
| } | |||
| bool isActive() const noexcept | |||
| { | |||
| ScopedXLock xlock; | |||
| return glXGetCurrentContext() == renderContext; | |||
| return glXGetCurrentContext() == renderContext && renderContext != 0; | |||
| } | |||
| unsigned int getFrameBufferID() const { return 0; } | |||
| void* getRawContext() const noexcept { return renderContext; } | |||
| int getWidth() const { return bounds.getWidth(); } | |||
| int getHeight() const { return bounds.getHeight(); } | |||
| void swapBuffers() | |||
| { | |||
| glXSwapBuffers (display, embeddedWindow); | |||
| } | |||
| void updateWindowPosition (const Rectangle<int>& newBounds) | |||
| { | |||
| @@ -151,18 +146,13 @@ public: | |||
| ScopedXLock xlock; | |||
| XMoveResizeWindow (display, embeddedWindow, | |||
| bounds.getX(), bounds.getY(), jmax (1, bounds.getWidth()), jmax (1, bounds.getHeight())); | |||
| } | |||
| void swapBuffers() | |||
| { | |||
| ScopedXLock xlock; | |||
| glXSwapBuffers (display, embeddedWindow); | |||
| bounds.getX(), bounds.getY(), | |||
| jmax (1, bounds.getWidth()), jmax (1, bounds.getHeight())); | |||
| } | |||
| bool setSwapInterval (const int newSwapInterval) | |||
| bool setSwapInterval (int numFramesPerSwap) | |||
| { | |||
| if (newSwapInterval == swapInterval) | |||
| if (numFramesPerSwap == swapFrames) | |||
| return true; | |||
| PFNGLXSWAPINTERVALSGIPROC GLXSwapIntervalSGI | |||
| @@ -170,35 +160,31 @@ public: | |||
| if (GLXSwapIntervalSGI != nullptr) | |||
| { | |||
| swapInterval = newSwapInterval; | |||
| GLXSwapIntervalSGI (newSwapInterval); | |||
| swapFrames = numFramesPerSwap; | |||
| GLXSwapIntervalSGI (numFramesPerSwap); | |||
| return true; | |||
| } | |||
| return false; | |||
| } | |||
| int getSwapInterval() const { return swapInterval; } | |||
| int getSwapInterval() const { return swapFrames; } | |||
| bool createdOk() const noexcept { return true; } | |||
| void* getRawContext() const noexcept { return renderContext; } | |||
| GLuint getFrameBufferID() const noexcept { return 0; } | |||
| private: | |||
| GLXContext renderContext; | |||
| Window embeddedWindow; | |||
| private: | |||
| int swapInterval; | |||
| int swapFrames; | |||
| Rectangle<int> bounds; | |||
| XVisualInfo* bestVisual; | |||
| const NativeContext* contextToShareWith; | |||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (WindowedGLContext); | |||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (NativeContext); | |||
| }; | |||
| //============================================================================== | |||
| OpenGLContext* OpenGLComponent::createContext() | |||
| { | |||
| ScopedPointer<WindowedGLContext> c (new WindowedGLContext (this, preferredPixelFormat, | |||
| contextToShareListsWith != 0 ? (GLXContext) contextToShareListsWith->getRawContext() : 0)); | |||
| return (c->renderContext != 0) ? c.release() : nullptr; | |||
| } | |||
| //============================================================================== | |||
| bool OpenGLHelpers::isContextActive() | |||
| { | |||
| @@ -30,7 +30,7 @@ | |||
| //============================================================================== | |||
| @interface ThreadSafeNSOpenGLView : NSOpenGLView | |||
| { | |||
| CriticalSection* contextLock; | |||
| juce::CriticalSection* contextLock; | |||
| bool needsUpdate; | |||
| } | |||
| @@ -47,8 +47,9 @@ | |||
| - (id) initWithFrame: (NSRect) frameRect | |||
| pixelFormat: (NSOpenGLPixelFormat*) format | |||
| { | |||
| contextLock = new CriticalSection(); | |||
| contextLock = new juce::CriticalSection(); | |||
| self = [super initWithFrame: frameRect pixelFormat: format]; | |||
| needsUpdate = true; | |||
| if (self != nil) | |||
| [[NSNotificationCenter defaultCenter] addObserver: self | |||
| @@ -67,7 +68,7 @@ | |||
| - (bool) makeActive | |||
| { | |||
| const ScopedLock sl (*contextLock); | |||
| const juce::ScopedLock sl (*contextLock); | |||
| if ([self openGLContext] == nil) | |||
| return false; | |||
| @@ -85,26 +86,26 @@ | |||
| - (void) makeInactive | |||
| { | |||
| const ScopedLock sl (*contextLock); | |||
| const juce::ScopedLock sl (*contextLock); | |||
| [NSOpenGLContext clearCurrentContext]; | |||
| } | |||
| - (void) _surfaceNeedsUpdate: (NSNotification*) notification | |||
| { | |||
| (void) notification; | |||
| const ScopedLock sl (*contextLock); | |||
| const juce::ScopedLock sl (*contextLock); | |||
| needsUpdate = true; | |||
| } | |||
| - (void) update | |||
| { | |||
| const ScopedLock sl (*contextLock); | |||
| const juce::ScopedLock sl (*contextLock); | |||
| needsUpdate = true; | |||
| } | |||
| - (void) reshape | |||
| { | |||
| const ScopedLock sl (*contextLock); | |||
| const juce::ScopedLock sl (*contextLock); | |||
| needsUpdate = true; | |||
| } | |||
| @@ -117,16 +118,13 @@ namespace juce | |||
| { | |||
| //============================================================================== | |||
| class WindowedGLContext : public OpenGLContext | |||
| class OpenGLContext::NativeContext | |||
| { | |||
| public: | |||
| WindowedGLContext (OpenGLComponent& component, | |||
| const OpenGLPixelFormat& pixelFormat, | |||
| NSOpenGLContext* sharedContext) | |||
| : renderContext (nil) | |||
| NativeContext (Component& component, | |||
| const OpenGLPixelFormat& pixelFormat, | |||
| const NativeContext* contextToShareWith) | |||
| { | |||
| extensions.initialise(); | |||
| NSOpenGLPixelFormatAttribute attribs[] = | |||
| { | |||
| NSOpenGLPFADoubleBuffer, | |||
| @@ -139,7 +137,8 @@ public: | |||
| NSOpenGLPFAStencilSize, (NSOpenGLPixelFormatAttribute) pixelFormat.stencilBufferBits, | |||
| NSOpenGLPFAAccumSize, (NSOpenGLPixelFormatAttribute) (pixelFormat.accumulationBufferRedBits + pixelFormat.accumulationBufferGreenBits | |||
| + pixelFormat.accumulationBufferBlueBits + pixelFormat.accumulationBufferAlphaBits), | |||
| pixelFormat.multisamplingLevel > 0 ? NSOpenGLPFASamples : (NSOpenGLPixelFormatAttribute) 0, (NSOpenGLPixelFormatAttribute) pixelFormat.multisamplingLevel, | |||
| pixelFormat.multisamplingLevel > 0 ? NSOpenGLPFASamples : (NSOpenGLPixelFormatAttribute) 0, | |||
| (NSOpenGLPixelFormatAttribute) pixelFormat.multisamplingLevel, | |||
| 0 | |||
| }; | |||
| @@ -148,29 +147,35 @@ public: | |||
| view = [[ThreadSafeNSOpenGLView alloc] initWithFrame: NSMakeRect (0, 0, 100.0f, 100.0f) | |||
| pixelFormat: format]; | |||
| NSOpenGLContext* const sharedContext | |||
| = contextToShareWith != nullptr ? contextToShareWith->renderContext : nil; | |||
| renderContext = [[[NSOpenGLContext alloc] initWithFormat: format | |||
| shareContext: sharedContext] autorelease]; | |||
| const GLint swapInterval = 1; | |||
| [renderContext setValues: &swapInterval forParameter: NSOpenGLCPSwapInterval]; | |||
| setSwapInterval (1); | |||
| [view setOpenGLContext: renderContext]; | |||
| [format release]; | |||
| component.setView (view); | |||
| viewAttachment = NSViewComponent::attachViewToComponent (component, view); | |||
| } | |||
| ~WindowedGLContext() | |||
| ~NativeContext() | |||
| { | |||
| properties.clear(); // to release any stored programs, etc that may be held in properties. | |||
| makeInactive(); | |||
| [renderContext clearDrawable]; | |||
| [renderContext setView: nil]; | |||
| [view setOpenGLContext: nil]; | |||
| renderContext = nil; | |||
| } | |||
| void initialiseOnRenderThread() {} | |||
| void shutdownOnRenderThread() {} | |||
| bool createdOk() const noexcept { return getRawContext() != nullptr; } | |||
| void* getRawContext() const noexcept { return static_cast <void*> (renderContext); } | |||
| GLuint getFrameBufferID() const noexcept { return 0; } | |||
| bool makeActive() const noexcept | |||
| { | |||
| jassert (renderContext != nil); | |||
| @@ -179,7 +184,7 @@ public: | |||
| [renderContext setView: view]; | |||
| [view makeActive]; | |||
| return isActive(); | |||
| return true; | |||
| } | |||
| bool makeInactive() const noexcept | |||
| @@ -193,20 +198,14 @@ public: | |||
| return [NSOpenGLContext currentContext] == renderContext; | |||
| } | |||
| void* getRawContext() const noexcept { return renderContext; } | |||
| unsigned int getFrameBufferID() const { return 0; } | |||
| int getWidth() const { return [view frame].size.width; } | |||
| int getHeight() const { return [view frame].size.height; } | |||
| void updateWindowPosition (const Rectangle<int>&) {} | |||
| void swapBuffers() | |||
| { | |||
| [renderContext flushBuffer]; | |||
| } | |||
| bool setSwapInterval (const int numFramesPerSwap) | |||
| void updateWindowPosition (const Rectangle<int>&) {} | |||
| bool setSwapInterval (int numFramesPerSwap) | |||
| { | |||
| [renderContext setValues: (const GLint*) &numFramesPerSwap | |||
| forParameter: NSOpenGLCPSwapInterval]; | |||
| @@ -218,34 +217,18 @@ public: | |||
| GLint numFrames = 0; | |||
| [renderContext getValues: &numFrames | |||
| forParameter: NSOpenGLCPSwapInterval]; | |||
| return numFrames; | |||
| } | |||
| void* getNativeWindowHandle() const { return view; } | |||
| //============================================================================== | |||
| private: | |||
| NSOpenGLContext* renderContext; | |||
| ThreadSafeNSOpenGLView* view; | |||
| ReferenceCountedObjectPtr<ReferenceCountedObject> viewAttachment; | |||
| private: | |||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (WindowedGLContext); | |||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (NativeContext); | |||
| }; | |||
| //============================================================================== | |||
| OpenGLContext* OpenGLComponent::createContext() | |||
| { | |||
| ScopedPointer<WindowedGLContext> c (new WindowedGLContext (*this, preferredPixelFormat, | |||
| contextToShareListsWith != nullptr ? (NSOpenGLContext*) contextToShareListsWith->getRawContext() : nil)); | |||
| return (c->renderContext != nil) ? c.release() : nullptr; | |||
| } | |||
| void* OpenGLComponent::getNativeWindowHandle() const | |||
| { | |||
| return context != nullptr ? static_cast<WindowedGLContext*> (context.get())->getNativeWindowHandle() | |||
| : nullptr; | |||
| } | |||
| //============================================================================== | |||
| bool OpenGLHelpers::isContextActive() | |||
| { | |||
| @@ -23,30 +23,24 @@ | |||
| ============================================================================== | |||
| */ | |||
| extern ComponentPeer* createNonRepaintingEmbeddedWindowsPeer (Component* component, void* parent); | |||
| extern ComponentPeer* createNonRepaintingEmbeddedWindowsPeer (Component*, void* parent); | |||
| //============================================================================== | |||
| class WindowedGLContext : public OpenGLContext | |||
| class OpenGLContext::NativeContext | |||
| { | |||
| public: | |||
| WindowedGLContext (Component* const component_, | |||
| HGLRC contextToShareWith, | |||
| const OpenGLPixelFormat& pixelFormat) | |||
| : renderContext (0), | |||
| component (component_), | |||
| dc (0) | |||
| NativeContext (Component& component, | |||
| const OpenGLPixelFormat& pixelFormat, | |||
| const NativeContext* contextToShareWith) | |||
| { | |||
| initialiseGLExtensions(); | |||
| jassert (component != nullptr); | |||
| createNativeWindow(); | |||
| createNativeWindow (component); | |||
| PIXELFORMATDESCRIPTOR pfd; | |||
| initialisePixelFormatDescriptor (pfd, pixelFormat); | |||
| const int format = ChoosePixelFormat (dc, &pfd); | |||
| if (format != 0) | |||
| SetPixelFormat (dc, format, &pfd); | |||
| const int pixFormat = ChoosePixelFormat (dc, &pfd); | |||
| if (pixFormat != 0) | |||
| SetPixelFormat (dc, pixFormat, &pfd); | |||
| renderContext = wglCreateContext (dc); | |||
| @@ -54,163 +48,94 @@ public: | |||
| { | |||
| makeActive(); | |||
| initialiseGLExtensions(); | |||
| extensions.initialise(); | |||
| setPixelFormat (pixelFormat); | |||
| if (contextToShareWith != 0) | |||
| wglShareLists (contextToShareWith, renderContext); | |||
| } | |||
| } | |||
| const int wglFormat = wglChoosePixelFormatExtension (pixelFormat); | |||
| makeInactive(); | |||
| ~WindowedGLContext() | |||
| { | |||
| properties.clear(); // to release any stored programs, etc that may be held in properties. | |||
| makeInactive(); | |||
| if (wglFormat != pixFormat && wglFormat != 0) | |||
| { | |||
| // can't change the pixel format of a window, so need to delete the | |||
| // old one and create a new one.. | |||
| releaseDC(); | |||
| nativeWindow = nullptr; | |||
| createNativeWindow (component); | |||
| if (SetPixelFormat (dc, wglFormat, &pfd)) | |||
| { | |||
| deleteRenderContext(); | |||
| renderContext = wglCreateContext (dc); | |||
| } | |||
| } | |||
| if (renderContext != 0) | |||
| { | |||
| wglDeleteContext (renderContext); | |||
| renderContext = 0; | |||
| } | |||
| if (contextToShareWith != nullptr) | |||
| wglShareLists (contextToShareWith->renderContext, renderContext); | |||
| ReleaseDC ((HWND) nativeWindow->getNativeHandle(), dc); | |||
| nativeWindow = nullptr; | |||
| component.getTopLevelComponent()->repaint(); | |||
| component.repaint(); | |||
| } | |||
| } | |||
| bool makeActive() const noexcept | |||
| ~NativeContext() | |||
| { | |||
| jassert (renderContext != 0); | |||
| return wglMakeCurrent (dc, renderContext) != 0; | |||
| deleteRenderContext(); | |||
| releaseDC(); | |||
| } | |||
| bool makeInactive() const noexcept | |||
| void initialiseOnRenderThread() | |||
| { | |||
| return (! isActive()) || (wglMakeCurrent (0, 0) != 0); | |||
| } | |||
| bool isActive() const noexcept | |||
| void shutdownOnRenderThread() | |||
| { | |||
| return wglGetCurrentContext() == renderContext; | |||
| } | |||
| void* getRawContext() const noexcept { return renderContext; } | |||
| unsigned int getFrameBufferID() const { return 0; } | |||
| int getWidth() const { return component->getWidth(); } | |||
| int getHeight() const { return component->getHeight(); } | |||
| void updateWindowPosition (const Rectangle<int>& bounds) | |||
| bool makeActive() const noexcept | |||
| { | |||
| if (nativeWindow != nullptr) | |||
| SetWindowPos ((HWND) nativeWindow->getNativeHandle(), 0, | |||
| bounds.getX(), bounds.getY(), bounds.getWidth(), bounds.getHeight(), | |||
| SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOOWNERZORDER); | |||
| return wglMakeCurrent (dc, renderContext) != FALSE; | |||
| } | |||
| bool setPixelFormat (const OpenGLPixelFormat& pixelFormat) | |||
| bool makeInactive() const noexcept | |||
| { | |||
| makeActive(); | |||
| PIXELFORMATDESCRIPTOR pfd; | |||
| initialisePixelFormatDescriptor (pfd, pixelFormat); | |||
| int format = 0; | |||
| if (wglChoosePixelFormatARB != nullptr) | |||
| { | |||
| int atts[64]; | |||
| int n = 0; | |||
| atts[n++] = WGL_DRAW_TO_WINDOW_ARB; atts[n++] = GL_TRUE; | |||
| atts[n++] = WGL_SUPPORT_OPENGL_ARB; atts[n++] = GL_TRUE; | |||
| atts[n++] = WGL_DOUBLE_BUFFER_ARB; atts[n++] = GL_TRUE; | |||
| atts[n++] = WGL_PIXEL_TYPE_ARB; atts[n++] = WGL_TYPE_RGBA_ARB; | |||
| atts[n++] = WGL_COLOR_BITS_ARB; atts[n++] = pfd.cColorBits; | |||
| atts[n++] = WGL_RED_BITS_ARB; atts[n++] = pixelFormat.redBits; | |||
| atts[n++] = WGL_GREEN_BITS_ARB; atts[n++] = pixelFormat.greenBits; | |||
| atts[n++] = WGL_BLUE_BITS_ARB; atts[n++] = pixelFormat.blueBits; | |||
| atts[n++] = WGL_ALPHA_BITS_ARB; atts[n++] = pixelFormat.alphaBits; | |||
| atts[n++] = WGL_DEPTH_BITS_ARB; atts[n++] = pixelFormat.depthBufferBits; | |||
| atts[n++] = WGL_STENCIL_BITS_ARB; atts[n++] = pixelFormat.stencilBufferBits; | |||
| atts[n++] = WGL_ACCUM_RED_BITS_ARB; atts[n++] = pixelFormat.accumulationBufferRedBits; | |||
| atts[n++] = WGL_ACCUM_GREEN_BITS_ARB; atts[n++] = pixelFormat.accumulationBufferGreenBits; | |||
| atts[n++] = WGL_ACCUM_BLUE_BITS_ARB; atts[n++] = pixelFormat.accumulationBufferBlueBits; | |||
| atts[n++] = WGL_ACCUM_ALPHA_BITS_ARB; atts[n++] = pixelFormat.accumulationBufferAlphaBits; | |||
| if (pixelFormat.multisamplingLevel > 0 | |||
| && OpenGLHelpers::isExtensionSupported ("GL_ARB_multisample")) | |||
| { | |||
| atts[n++] = WGL_SAMPLE_BUFFERS_ARB; | |||
| atts[n++] = 1; | |||
| atts[n++] = WGL_SAMPLES_ARB; | |||
| atts[n++] = pixelFormat.multisamplingLevel; | |||
| } | |||
| atts[n++] = 0; | |||
| jassert (n <= numElementsInArray (atts)); | |||
| UINT formatsCount = 0; | |||
| wglChoosePixelFormatARB (dc, atts, nullptr, 1, &format, &formatsCount); | |||
| } | |||
| if (format == 0) | |||
| format = ChoosePixelFormat (dc, &pfd); | |||
| if (format != 0) | |||
| { | |||
| makeInactive(); | |||
| // win32 can't change the pixel format of a window, so need to delete the | |||
| // old one and create a new one.. | |||
| jassert (nativeWindow != 0); | |||
| ReleaseDC ((HWND) nativeWindow->getNativeHandle(), dc); | |||
| nativeWindow = nullptr; | |||
| createNativeWindow(); | |||
| if (SetPixelFormat (dc, format, &pfd)) | |||
| { | |||
| wglDeleteContext (renderContext); | |||
| renderContext = wglCreateContext (dc); | |||
| jassert (renderContext != 0); | |||
| return renderContext != 0; | |||
| } | |||
| } | |||
| return (! isActive()) || (wglMakeCurrent (0, 0) != FALSE); | |||
| } | |||
| return false; | |||
| bool isActive() const noexcept | |||
| { | |||
| return wglGetCurrentContext() == renderContext; | |||
| } | |||
| void swapBuffers() | |||
| void swapBuffers() const noexcept | |||
| { | |||
| SwapBuffers (dc); | |||
| } | |||
| bool setSwapInterval (int numFramesPerSwap) | |||
| { | |||
| makeActive(); | |||
| jassert (isActive()); // this can only be called when the context is active.. | |||
| return wglSwapIntervalEXT != nullptr && wglSwapIntervalEXT (numFramesPerSwap) != FALSE; | |||
| } | |||
| int getSwapInterval() const | |||
| { | |||
| makeActive(); | |||
| jassert (isActive()); // this can only be called when the context is active.. | |||
| return wglGetSwapIntervalEXT != nullptr ? wglGetSwapIntervalEXT() : 0; | |||
| } | |||
| void* getNativeWindowHandle() const | |||
| void updateWindowPosition (const Rectangle<int>& bounds) | |||
| { | |||
| return nativeWindow != nullptr ? nativeWindow->getNativeHandle() : nullptr; | |||
| if (nativeWindow != nullptr) | |||
| SetWindowPos ((HWND) nativeWindow->getNativeHandle(), 0, | |||
| bounds.getX(), bounds.getY(), bounds.getWidth(), bounds.getHeight(), | |||
| SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOOWNERZORDER); | |||
| } | |||
| //============================================================================== | |||
| HGLRC renderContext; | |||
| ScopedPointer<ComponentPeer> nativeWindow; | |||
| bool createdOk() const noexcept { return getRawContext() != nullptr; } | |||
| void* getRawContext() const noexcept { return renderContext; } | |||
| unsigned int getFrameBufferID() const noexcept { return 0; } | |||
| private: | |||
| Component* const component; | |||
| ScopedPointer<ComponentPeer> nativeWindow; | |||
| HGLRC renderContext; | |||
| HDC dc; | |||
| #define JUCE_DECLARE_WGL_EXTENSION_FUNCTION(name, returnType, params) \ | |||
| @@ -230,15 +155,27 @@ private: | |||
| #undef JUCE_INIT_WGL_FUNCTION | |||
| } | |||
| //============================================================================== | |||
| void createNativeWindow() | |||
| void createNativeWindow (Component& component) | |||
| { | |||
| nativeWindow = createNonRepaintingEmbeddedWindowsPeer (component, component->getTopLevelComponent()->getWindowHandle()); | |||
| Component* topComp = component.getTopLevelComponent(); | |||
| nativeWindow = createNonRepaintingEmbeddedWindowsPeer (&component, topComp->getWindowHandle()); | |||
| updateWindowPosition (topComp->getLocalArea (&component, component.getLocalBounds())); | |||
| nativeWindow->setVisible (true); | |||
| dc = GetDC ((HWND) nativeWindow->getNativeHandle()); | |||
| } | |||
| component->getTopLevelComponent()->repaint(); | |||
| void deleteRenderContext() | |||
| { | |||
| if (renderContext != 0) | |||
| { | |||
| wglDeleteContext (renderContext); | |||
| renderContext = 0; | |||
| } | |||
| } | |||
| void releaseDC() | |||
| { | |||
| ReleaseDC ((HWND) nativeWindow->getNativeHandle(), dc); | |||
| } | |||
| static void initialisePixelFormatDescriptor (PIXELFORMATDESCRIPTOR& pfd, const OpenGLPixelFormat& pixelFormat) | |||
| @@ -264,23 +201,55 @@ private: | |||
| pfd.cAccumAlphaBits = (BYTE) pixelFormat.accumulationBufferAlphaBits; | |||
| } | |||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (WindowedGLContext); | |||
| }; | |||
| int wglChoosePixelFormatExtension (const OpenGLPixelFormat& pixelFormat) const | |||
| { | |||
| int format = 0; | |||
| //============================================================================== | |||
| OpenGLContext* OpenGLComponent::createContext() | |||
| { | |||
| ScopedPointer<WindowedGLContext> c (new WindowedGLContext (this, | |||
| contextToShareListsWith != nullptr ? (HGLRC) contextToShareListsWith->getRawContext() : 0, | |||
| preferredPixelFormat)); | |||
| if (wglChoosePixelFormatARB != nullptr) | |||
| { | |||
| int atts[64]; | |||
| int n = 0; | |||
| return (c->renderContext != 0) ? c.release() : nullptr; | |||
| } | |||
| atts[n++] = WGL_DRAW_TO_WINDOW_ARB; atts[n++] = GL_TRUE; | |||
| atts[n++] = WGL_SUPPORT_OPENGL_ARB; atts[n++] = GL_TRUE; | |||
| atts[n++] = WGL_DOUBLE_BUFFER_ARB; atts[n++] = GL_TRUE; | |||
| atts[n++] = WGL_PIXEL_TYPE_ARB; atts[n++] = WGL_TYPE_RGBA_ARB; | |||
| atts[n++] = WGL_COLOR_BITS_ARB; atts[n++] = pixelFormat.redBits + pixelFormat.greenBits + pixelFormat.blueBits; | |||
| atts[n++] = WGL_RED_BITS_ARB; atts[n++] = pixelFormat.redBits; | |||
| atts[n++] = WGL_GREEN_BITS_ARB; atts[n++] = pixelFormat.greenBits; | |||
| atts[n++] = WGL_BLUE_BITS_ARB; atts[n++] = pixelFormat.blueBits; | |||
| atts[n++] = WGL_ALPHA_BITS_ARB; atts[n++] = pixelFormat.alphaBits; | |||
| atts[n++] = WGL_DEPTH_BITS_ARB; atts[n++] = pixelFormat.depthBufferBits; | |||
| atts[n++] = WGL_STENCIL_BITS_ARB; atts[n++] = pixelFormat.stencilBufferBits; | |||
| atts[n++] = WGL_ACCUM_RED_BITS_ARB; atts[n++] = pixelFormat.accumulationBufferRedBits; | |||
| atts[n++] = WGL_ACCUM_GREEN_BITS_ARB; atts[n++] = pixelFormat.accumulationBufferGreenBits; | |||
| atts[n++] = WGL_ACCUM_BLUE_BITS_ARB; atts[n++] = pixelFormat.accumulationBufferBlueBits; | |||
| atts[n++] = WGL_ACCUM_ALPHA_BITS_ARB; atts[n++] = pixelFormat.accumulationBufferAlphaBits; | |||
| if (pixelFormat.multisamplingLevel > 0 | |||
| && OpenGLHelpers::isExtensionSupported ("GL_ARB_multisample")) | |||
| { | |||
| atts[n++] = WGL_SAMPLE_BUFFERS_ARB; | |||
| atts[n++] = 1; | |||
| atts[n++] = WGL_SAMPLES_ARB; | |||
| atts[n++] = pixelFormat.multisamplingLevel; | |||
| } | |||
| atts[n++] = 0; | |||
| jassert (n <= numElementsInArray (atts)); | |||
| UINT formatsCount = 0; | |||
| wglChoosePixelFormatARB (dc, atts, nullptr, 1, &format, &formatsCount); | |||
| } | |||
| return format; | |||
| } | |||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (NativeContext); | |||
| }; | |||
| void* OpenGLComponent::getNativeWindowHandle() const | |||
| { | |||
| return context != nullptr ? static_cast<WindowedGLContext*> (context.get())->getNativeWindowHandle() : nullptr; | |||
| } | |||
| //============================================================================== | |||
| bool OpenGLHelpers::isContextActive() | |||
| @@ -1,234 +0,0 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||
| Copyright 2004-11 by Raw Material Software Ltd. | |||
| ------------------------------------------------------------------------------ | |||
| JUCE can be redistributed and/or modified under the terms of the GNU General | |||
| Public License (Version 2), as published by the Free Software Foundation. | |||
| A copy of the license is included in the JUCE distribution, or can be found | |||
| online at www.gnu.org/licenses. | |||
| JUCE is distributed in the hope that it will be useful, but WITHOUT ANY | |||
| WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR | |||
| A PARTICULAR PURPOSE. See the GNU General Public License for more details. | |||
| ------------------------------------------------------------------------------ | |||
| To release a closed-source product which uses JUCE, commercial licenses are | |||
| available: visit www.rawmaterialsoftware.com/juce for more information. | |||
| ============================================================================== | |||
| */ | |||
| #define JNI_CLASS_MEMBERS(METHOD, STATICMETHOD, FIELD, STATICFIELD) \ | |||
| METHOD (layout, "layout", "(IIII)V") \ | |||
| METHOD (requestRender, "requestRender", "()V") \ | |||
| DECLARE_JNI_CLASS (OpenGLView, JUCE_ANDROID_ACTIVITY_CLASSPATH "$OpenGLView"); | |||
| #undef JNI_CLASS_MEMBERS | |||
| jobject createOpenGLView (ComponentPeer*); | |||
| //============================================================================== | |||
| class AndroidGLContext : public OpenGLContext | |||
| { | |||
| public: | |||
| AndroidGLContext (OpenGLComponent* const component_, | |||
| ComponentPeer* peer, | |||
| const OpenGLPixelFormat& pixelFormat, | |||
| const AndroidGLContext* const sharedContext, | |||
| const bool isGLES2_) | |||
| : component (component_), | |||
| lastWidth (0), lastHeight (0), | |||
| isGLES2 (isGLES2_), | |||
| isInsideGLCallback (false) | |||
| { | |||
| jassert (peer != nullptr); | |||
| glView = GlobalRef (createOpenGLView (peer)); | |||
| const ScopedLock sl (getContextListLock()); | |||
| getContextList().add (this); | |||
| } | |||
| ~AndroidGLContext() | |||
| { | |||
| properties.clear(); // to release any stored programs, etc that may be held in properties. | |||
| android.activity.callVoidMethod (JuceAppActivity.deleteView, glView.get()); | |||
| glView.clear(); | |||
| const ScopedLock sl (getContextListLock()); | |||
| getContextList().removeValue (this); | |||
| } | |||
| //============================================================================== | |||
| bool makeActive() const noexcept { return isInsideGLCallback; } | |||
| bool makeInactive() const noexcept { return true; } | |||
| bool isActive() const noexcept { return isInsideGLCallback; } | |||
| void swapBuffers() {} | |||
| void* getRawContext() const noexcept { return glView.get(); } | |||
| unsigned int getFrameBufferID() const { return 0; } | |||
| int getWidth() const { return lastWidth; } | |||
| int getHeight() const { return lastHeight; } | |||
| bool areShadersAvailable() const { return isGLES2; } | |||
| void updateWindowPosition (const Rectangle<int>& bounds) | |||
| { | |||
| if (lastWidth != bounds.getWidth() || lastHeight != bounds.getHeight()) | |||
| { | |||
| lastWidth = bounds.getWidth(); | |||
| lastHeight = bounds.getHeight(); | |||
| glView.callVoidMethod (OpenGLView.layout, | |||
| bounds.getX(), bounds.getY(), | |||
| bounds.getRight(), bounds.getBottom()); | |||
| } | |||
| } | |||
| bool setSwapInterval (const int /*numFramesPerSwap*/) { return false; } | |||
| int getSwapInterval() const { return 0; } | |||
| //============================================================================== | |||
| void contextCreatedCallback() | |||
| { | |||
| properties.clear(); | |||
| isInsideGLCallback = true; | |||
| if (component != nullptr) | |||
| dynamic_cast <OpenGLComponent*> (component.get())->newOpenGLContextCreated(); | |||
| isInsideGLCallback = false; | |||
| } | |||
| void renderCallback() | |||
| { | |||
| isInsideGLCallback = true; | |||
| if (component != nullptr) | |||
| dynamic_cast <OpenGLComponent*> (component.get())->performRender(); | |||
| isInsideGLCallback = false; | |||
| } | |||
| //============================================================================== | |||
| static CriticalSection& getContextListLock() | |||
| { | |||
| static CriticalSection lock; | |||
| return lock; | |||
| } | |||
| static Array<AndroidGLContext*>& getContextList() | |||
| { | |||
| static Array <AndroidGLContext*> contexts; | |||
| return contexts; | |||
| } | |||
| static AndroidGLContext* findContextFor (JNIEnv* env, jobject glView) | |||
| { | |||
| const ScopedLock sl (getContextListLock()); | |||
| const Array<AndroidGLContext*>& contexts = getContextList(); | |||
| for (int i = contexts.size(); --i >= 0;) | |||
| { | |||
| AndroidGLContext* const c = contexts.getUnchecked(i); | |||
| if (env->IsSameObject (c->glView.get(), glView)) | |||
| return c; | |||
| } | |||
| return nullptr; | |||
| } | |||
| static bool isAnyContextActive() | |||
| { | |||
| const ScopedLock sl (getContextListLock()); | |||
| const Array<AndroidGLContext*>& contexts = getContextList(); | |||
| for (int i = contexts.size(); --i >= 0;) | |||
| { | |||
| const AndroidGLContext* const c = contexts.getUnchecked(i); | |||
| if (c->isInsideGLCallback) | |||
| return true; | |||
| } | |||
| return false; | |||
| } | |||
| //============================================================================== | |||
| GlobalRef glView; | |||
| private: | |||
| WeakReference<Component> component; | |||
| int lastWidth, lastHeight; | |||
| bool isGLES2; | |||
| bool isInsideGLCallback; | |||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AndroidGLContext); | |||
| }; | |||
| //============================================================================== | |||
| OpenGLContext* OpenGLComponent::createContext() | |||
| { | |||
| ComponentPeer* peer = getTopLevelComponent()->getPeer(); | |||
| if (peer != nullptr) | |||
| return new AndroidGLContext (this, peer, preferredPixelFormat, | |||
| dynamic_cast <const AndroidGLContext*> (contextToShareListsWith), | |||
| (flags & openGLES1) == 0); | |||
| return nullptr; | |||
| } | |||
| bool OpenGLHelpers::isContextActive() | |||
| { | |||
| return AndroidGLContext::isAnyContextActive(); | |||
| } | |||
| void triggerAndroidOpenGLRepaint (OpenGLContext* context) | |||
| { | |||
| AndroidGLContext* c = dynamic_cast <AndroidGLContext*> (context); | |||
| if (c != nullptr) | |||
| c->glView.callVoidMethod (OpenGLView.requestRender); | |||
| } | |||
| //============================================================================== | |||
| JUCE_JNI_CALLBACK (JUCE_JOIN_MACRO (JUCE_ANDROID_ACTIVITY_CLASSNAME, _00024OpenGLView), contextCreated, void, (JNIEnv* env, jobject view)) | |||
| { | |||
| JUCE_CHECK_OPENGL_ERROR | |||
| for (int i = 100; --i >= 0;) | |||
| { | |||
| AndroidGLContext* const context = AndroidGLContext::findContextFor (env, view); | |||
| if (context != nullptr) | |||
| { | |||
| context->contextCreatedCallback(); | |||
| JUCE_CHECK_OPENGL_ERROR | |||
| return; | |||
| } | |||
| Thread::sleep (20); | |||
| } | |||
| jassertfalse; | |||
| } | |||
| JUCE_JNI_CALLBACK (JUCE_JOIN_MACRO (JUCE_ANDROID_ACTIVITY_CLASSNAME, _00024OpenGLView), render, void, (JNIEnv* env, jobject view)) | |||
| { | |||
| AndroidGLContext* const context = AndroidGLContext::findContextFor (env, view); | |||
| if (context != nullptr) | |||
| context->renderCallback(); | |||
| } | |||
| @@ -1,535 +0,0 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||
| Copyright 2004-11 by Raw Material Software Ltd. | |||
| ------------------------------------------------------------------------------ | |||
| JUCE can be redistributed and/or modified under the terms of the GNU General | |||
| Public License (Version 2), as published by the Free Software Foundation. | |||
| A copy of the license is included in the JUCE distribution, or can be found | |||
| online at www.gnu.org/licenses. | |||
| JUCE is distributed in the hope that it will be useful, but WITHOUT ANY | |||
| WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR | |||
| A PARTICULAR PURPOSE. See the GNU General Public License for more details. | |||
| ------------------------------------------------------------------------------ | |||
| To release a closed-source product which uses JUCE, commercial licenses are | |||
| available: visit www.rawmaterialsoftware.com/juce for more information. | |||
| ============================================================================== | |||
| */ | |||
| #if JUCE_ANDROID | |||
| void triggerAndroidOpenGLRepaint (OpenGLContext*); | |||
| #endif | |||
| class OpenGLComponent::OpenGLCachedComponentImage : public CachedComponentImage, | |||
| public Thread, | |||
| public Timer // N.B. using a Timer rather than an AsyncUpdater | |||
| // to avoid scheduling problems on Windows | |||
| { | |||
| public: | |||
| OpenGLCachedComponentImage (OpenGLComponent& owner_, bool renderComponents_) | |||
| : Thread ("OpenGL Rendering"), | |||
| owner (owner_), needToRepaint (true), | |||
| renderComponents (renderComponents_) | |||
| {} | |||
| void paint (Graphics&) | |||
| { | |||
| ComponentPeer* const peer = owner.getPeer(); | |||
| if (peer != nullptr) | |||
| peer->addMaskedRegion (owner.getScreenBounds() - peer->getScreenPosition()); | |||
| if (owner.isUsingDedicatedThread()) | |||
| { | |||
| if (peer != nullptr && owner.isShowing()) | |||
| { | |||
| #if ! JUCE_LINUX | |||
| owner.updateContext(); | |||
| #endif | |||
| owner.startRenderThread(); | |||
| } | |||
| } | |||
| else | |||
| { | |||
| owner.updateContext(); | |||
| #if JUCE_ANDROID | |||
| triggerAndroidOpenGLRepaint (owner.getCurrentContext()); | |||
| #else | |||
| if (isTimerRunning()) | |||
| timerCallback(); | |||
| #endif | |||
| } | |||
| } | |||
| void invalidateAll() | |||
| { | |||
| validArea.clear(); | |||
| triggerRepaint(); | |||
| } | |||
| void invalidate (const Rectangle<int>& area) | |||
| { | |||
| validArea.subtract (area); | |||
| triggerRepaint(); | |||
| } | |||
| void releaseResources() | |||
| { | |||
| owner.makeCurrentRenderingTarget(); | |||
| cachedImageFrameBuffer.release(); | |||
| owner.releaseAsRenderingTarget(); | |||
| } | |||
| //============================================================================== | |||
| void timerCallback() | |||
| { | |||
| stopTimer(); | |||
| renderFrame(); | |||
| owner.releaseAsRenderingTarget(); | |||
| } | |||
| void triggerRepaint() | |||
| { | |||
| needToRepaint = true; | |||
| #if JUCE_ANDROID | |||
| triggerAndroidOpenGLRepaint (owner.getCurrentContext()); | |||
| #else | |||
| if (! owner.isUsingDedicatedThread()) | |||
| startTimer (1000 / 70); | |||
| #endif | |||
| } | |||
| void updateContextPosition() | |||
| { | |||
| if (owner.getWidth() > 0 && owner.getHeight() > 0) | |||
| { | |||
| Component* const topComp = owner.getTopLevelComponent(); | |||
| if (topComp->getPeer() != nullptr) | |||
| { | |||
| const Rectangle<int> bounds (topComp->getLocalArea (&owner, owner.getLocalBounds())); | |||
| const ScopedLock sl (owner.contextLock); | |||
| if (owner.context != nullptr) | |||
| owner.context->updateWindowPosition (bounds); | |||
| } | |||
| } | |||
| } | |||
| //============================================================================== | |||
| void ensureFrameBufferSize (int width, int height) | |||
| { | |||
| const int fbW = cachedImageFrameBuffer.getWidth(); | |||
| const int fbH = cachedImageFrameBuffer.getHeight(); | |||
| if (fbW != width || fbH != height || ! cachedImageFrameBuffer.isValid()) | |||
| { | |||
| jassert (owner.getCurrentContext() != nullptr); | |||
| cachedImageFrameBuffer.initialise (*owner.getCurrentContext(), width, height); | |||
| validArea.clear(); | |||
| JUCE_CHECK_OPENGL_ERROR | |||
| } | |||
| } | |||
| void clearRegionInFrameBuffer (const RectangleList& list) | |||
| { | |||
| glClearColor (0, 0, 0, 0); | |||
| glEnable (GL_SCISSOR_TEST); | |||
| const GLuint previousFrameBufferTarget = OpenGLFrameBuffer::getCurrentFrameBufferTarget(); | |||
| cachedImageFrameBuffer.makeCurrentRenderingTarget(); | |||
| for (RectangleList::Iterator i (list); i.next();) | |||
| { | |||
| const Rectangle<int>& r = *i.getRectangle(); | |||
| glScissor (r.getX(), owner.getHeight() - r.getBottom(), r.getWidth(), r.getHeight()); | |||
| glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); | |||
| } | |||
| glDisable (GL_SCISSOR_TEST); | |||
| owner.getCurrentContext()->extensions.glBindFramebuffer (GL_FRAMEBUFFER, previousFrameBufferTarget); | |||
| JUCE_CHECK_OPENGL_ERROR | |||
| } | |||
| bool renderFrame() | |||
| { | |||
| const ScopedLock sl (owner.contextLock); | |||
| #if JUCE_LINUX | |||
| owner.updateContext(); | |||
| #endif | |||
| OpenGLContext* const context = owner.getCurrentContext(); | |||
| if (context != nullptr) | |||
| { | |||
| if (! context->makeActive()) | |||
| return false; | |||
| JUCE_CHECK_OPENGL_ERROR | |||
| glViewport (0, 0, owner.getWidth(), owner.getHeight()); | |||
| owner.renderOpenGL(); | |||
| JUCE_CHECK_OPENGL_ERROR | |||
| if (renderComponents) | |||
| paintComponent (context); | |||
| context->swapBuffers(); | |||
| } | |||
| return true; | |||
| } | |||
| void paintComponent (OpenGLContext* const context) | |||
| { | |||
| jassert (context != nullptr); | |||
| owner.contextLock.exit(); // (MM must be locked before the context lock) | |||
| MessageManagerLock mmLock (this); | |||
| owner.contextLock.enter(); | |||
| if (! mmLock.lockWasGained()) | |||
| return; | |||
| // you mustn't set your own cached image object for an OpenGLComponent! | |||
| jassert (dynamic_cast<OpenGLCachedComponentImage*> (owner.getCachedComponentImage()) == this); | |||
| const Rectangle<int> bounds (owner.getLocalBounds()); | |||
| ensureFrameBufferSize (bounds.getWidth(), bounds.getHeight()); | |||
| if (needToRepaint) | |||
| { | |||
| needToRepaint = false; | |||
| RectangleList invalid (bounds); | |||
| invalid.subtract (validArea); | |||
| validArea = bounds; | |||
| if (! invalid.isEmpty()) | |||
| { | |||
| clearRegionInFrameBuffer (invalid); | |||
| { | |||
| ScopedPointer<LowLevelGraphicsContext> g (createOpenGLGraphicsContext (*context, cachedImageFrameBuffer)); | |||
| g->clipToRectangleList (invalid); | |||
| paintOwner (*g); | |||
| JUCE_CHECK_OPENGL_ERROR | |||
| } | |||
| context->makeActive(); | |||
| } | |||
| } | |||
| JUCE_CHECK_OPENGL_ERROR | |||
| #if ! JUCE_ANDROID | |||
| glEnable (GL_TEXTURE_2D); | |||
| #endif | |||
| context->extensions.glActiveTexture (GL_TEXTURE0); | |||
| glBindTexture (GL_TEXTURE_2D, cachedImageFrameBuffer.getTextureID()); | |||
| jassert (bounds.getPosition() == Point<int>()); | |||
| context->copyTexture (bounds, bounds, context->getWidth(), context->getHeight()); | |||
| glBindTexture (GL_TEXTURE_2D, 0); | |||
| JUCE_CHECK_OPENGL_ERROR | |||
| } | |||
| void paintOwner (LowLevelGraphicsContext& context) | |||
| { | |||
| Graphics g (&context); | |||
| #if JUCE_ENABLE_REPAINT_DEBUGGING | |||
| g.saveState(); | |||
| #endif | |||
| JUCE_TRY | |||
| { | |||
| owner.paintEntireComponent (g, false); | |||
| } | |||
| JUCE_CATCH_EXCEPTION | |||
| #if JUCE_ENABLE_REPAINT_DEBUGGING | |||
| // enabling this code will fill all areas that get repainted with a colour overlay, to show | |||
| // clearly when things are being repainted. | |||
| g.restoreState(); | |||
| static Random rng; | |||
| g.fillAll (Colour ((uint8) rng.nextInt (255), | |||
| (uint8) rng.nextInt (255), | |||
| (uint8) rng.nextInt (255), | |||
| (uint8) 0x50)); | |||
| #endif | |||
| } | |||
| //============================================================================== | |||
| void run() | |||
| { | |||
| initialise(); | |||
| while (! threadShouldExit()) | |||
| { | |||
| const uint32 frameRenderStartTime = Time::getMillisecondCounter(); | |||
| if (renderFrame()) | |||
| waitForNextFrame (frameRenderStartTime); | |||
| } | |||
| shutdown(); | |||
| } | |||
| void initialise() | |||
| { | |||
| #if JUCE_LINUX | |||
| MessageManagerLock mml (this); | |||
| if (mml.lockWasGained()) | |||
| { | |||
| owner.updateContext(); | |||
| updateContextPosition(); | |||
| } | |||
| #endif | |||
| } | |||
| void shutdown() | |||
| { | |||
| #if JUCE_LINUX | |||
| owner.deleteContext(); | |||
| #endif | |||
| } | |||
| void waitForNextFrame (const uint32 frameRenderStartTime) | |||
| { | |||
| const int defaultFPS = 60; | |||
| const int elapsed = (int) (Time::getMillisecondCounter() - frameRenderStartTime); | |||
| Thread::sleep (jmax (1, (1000 / defaultFPS) - elapsed)); | |||
| } | |||
| //============================================================================== | |||
| RectangleList validArea; | |||
| OpenGLComponent& owner; | |||
| OpenGLFrameBuffer cachedImageFrameBuffer; | |||
| bool needToRepaint; | |||
| const bool renderComponents; | |||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (OpenGLCachedComponentImage); | |||
| }; | |||
| //============================================================================== | |||
| class OpenGLComponent::OpenGLComponentWatcher : public ComponentMovementWatcher | |||
| { | |||
| public: | |||
| OpenGLComponentWatcher (OpenGLComponent& owner_) | |||
| : ComponentMovementWatcher (&owner_), owner (owner_) | |||
| { | |||
| } | |||
| void componentMovedOrResized (bool /*wasMoved*/, bool /*wasResized*/) | |||
| { | |||
| if (owner.cachedImage != nullptr) | |||
| owner.cachedImage->updateContextPosition(); | |||
| } | |||
| void componentPeerChanged() | |||
| { | |||
| owner.recreateContextAsync(); | |||
| } | |||
| void componentVisibilityChanged() | |||
| { | |||
| if (owner.isShowing()) | |||
| owner.triggerRepaint(); | |||
| else | |||
| owner.stopRenderThread(); | |||
| } | |||
| private: | |||
| OpenGLComponent& owner; | |||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (OpenGLComponentWatcher); | |||
| }; | |||
| //============================================================================== | |||
| OpenGLComponent::OpenGLComponent (const int flags_) | |||
| #if JUCE_ANDROID | |||
| : flags (flags_ & ~useBackgroundThread), | |||
| #else | |||
| : flags (flags_), | |||
| #endif | |||
| contextToShareListsWith (nullptr), | |||
| needToDeleteContext (false), | |||
| cachedImage (nullptr) | |||
| { | |||
| setOpaque (true); | |||
| triggerRepaint(); | |||
| componentWatcher = new OpenGLComponentWatcher (*this); | |||
| } | |||
| OpenGLComponent::~OpenGLComponent() | |||
| { | |||
| if (isUsingDedicatedThread()) | |||
| { | |||
| /* If you're using a background thread, then your sub-class MUST call | |||
| stopRenderThread() in its destructor! Otherwise, the thread could still | |||
| be running while your sub-class isbeing destroyed, and so may make a call | |||
| to your subclass's renderOpenGL() method when it no longer exists! | |||
| */ | |||
| jassert (! getGLCachedImage()->isThreadRunning()); | |||
| stopRenderThread(); | |||
| } | |||
| else | |||
| { | |||
| deleteContext(); | |||
| } | |||
| componentWatcher = nullptr; | |||
| } | |||
| void OpenGLComponent::setPixelFormat (const OpenGLPixelFormat& formatToUse) | |||
| { | |||
| if (! (preferredPixelFormat == formatToUse)) | |||
| { | |||
| const ScopedLock sl (contextLock); | |||
| preferredPixelFormat = formatToUse; | |||
| recreateContextAsync(); | |||
| } | |||
| } | |||
| void OpenGLComponent::shareWith (OpenGLContext* c) | |||
| { | |||
| if (contextToShareListsWith != c) | |||
| { | |||
| const ScopedLock sl (contextLock); | |||
| contextToShareListsWith = c; | |||
| recreateContextAsync(); | |||
| } | |||
| } | |||
| void OpenGLComponent::startRenderThread() | |||
| { | |||
| getGLCachedImage()->startThread (6); | |||
| } | |||
| void OpenGLComponent::stopRenderThread() | |||
| { | |||
| getGLCachedImage()->stopThread (5000); | |||
| #if ! JUCE_LINUX | |||
| deleteContext(); | |||
| #endif | |||
| } | |||
| void OpenGLComponent::recreateContextAsync() | |||
| { | |||
| const ScopedLock sl (contextLock); | |||
| needToDeleteContext = true; | |||
| repaint(); | |||
| } | |||
| bool OpenGLComponent::makeCurrentRenderingTarget() | |||
| { | |||
| return context != nullptr && context->makeActive(); | |||
| } | |||
| void OpenGLComponent::releaseAsRenderingTarget() | |||
| { | |||
| if (context != nullptr) | |||
| context->makeInactive(); | |||
| } | |||
| void OpenGLComponent::swapBuffers() | |||
| { | |||
| if (context != nullptr) | |||
| context->swapBuffers(); | |||
| } | |||
| void OpenGLComponent::updateContext() | |||
| { | |||
| if (needToDeleteContext) | |||
| deleteContext(); | |||
| if (context == nullptr) | |||
| { | |||
| const ScopedLock sl (contextLock); | |||
| if (context == nullptr) | |||
| { | |||
| context = createContext(); | |||
| if (context != nullptr) | |||
| { | |||
| #if JUCE_LINUX | |||
| if (! isUsingDedicatedThread()) | |||
| #endif | |||
| getGLCachedImage()->updateContextPosition(); | |||
| if (context->makeActive()) | |||
| { | |||
| newOpenGLContextCreated(); | |||
| context->makeInactive(); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| void OpenGLComponent::deleteContext() | |||
| { | |||
| const ScopedLock sl (contextLock); | |||
| if (context != nullptr) | |||
| { | |||
| if (context->makeActive()) | |||
| { | |||
| cachedImage = nullptr; | |||
| setCachedComponentImage (nullptr); | |||
| releaseOpenGLContext(); | |||
| context->makeInactive(); | |||
| } | |||
| context = nullptr; | |||
| } | |||
| needToDeleteContext = false; | |||
| } | |||
| bool OpenGLComponent::rebuildContext() | |||
| { | |||
| needToDeleteContext = true; | |||
| updateContext(); | |||
| return context != nullptr && context->makeActive(); | |||
| } | |||
| OpenGLComponent::OpenGLCachedComponentImage* OpenGLComponent::getGLCachedImage() | |||
| { | |||
| // you mustn't set your own cached image object for an OpenGLComponent! | |||
| jassert (cachedImage == nullptr | |||
| || dynamic_cast<OpenGLCachedComponentImage*> (getCachedComponentImage()) == cachedImage); | |||
| if (cachedImage == nullptr) | |||
| setCachedComponentImage (cachedImage = new OpenGLCachedComponentImage (*this, (flags & allowSubComponents) != 0)); | |||
| return cachedImage; | |||
| } | |||
| void OpenGLComponent::triggerRepaint() | |||
| { | |||
| getGLCachedImage()->triggerRepaint(); | |||
| } | |||
| void OpenGLComponent::newOpenGLContextCreated() {} | |||
| void OpenGLComponent::releaseOpenGLContext() {} | |||
| void OpenGLComponent::paint (Graphics&) {} | |||
| @@ -1,281 +0,0 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||
| Copyright 2004-11 by Raw Material Software Ltd. | |||
| ------------------------------------------------------------------------------ | |||
| JUCE can be redistributed and/or modified under the terms of the GNU General | |||
| Public License (Version 2), as published by the Free Software Foundation. | |||
| A copy of the license is included in the JUCE distribution, or can be found | |||
| online at www.gnu.org/licenses. | |||
| JUCE is distributed in the hope that it will be useful, but WITHOUT ANY | |||
| WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR | |||
| A PARTICULAR PURPOSE. See the GNU General Public License for more details. | |||
| ------------------------------------------------------------------------------ | |||
| To release a closed-source product which uses JUCE, commercial licenses are | |||
| available: visit www.rawmaterialsoftware.com/juce for more information. | |||
| ============================================================================== | |||
| */ | |||
| #ifndef __JUCE_OPENGLCOMPONENT_JUCEHEADER__ | |||
| #define __JUCE_OPENGLCOMPONENT_JUCEHEADER__ | |||
| #include "juce_OpenGLContext.h" | |||
| #if JUCE_MAC && ! defined (DOXYGEN) | |||
| typedef NSViewComponent OpenGLBaseType; | |||
| #else | |||
| typedef Component OpenGLBaseType; | |||
| #endif | |||
| class OpenGLGraphicsContext; | |||
| #if JUCE_ANDROID | |||
| class AndroidGLContext; | |||
| #endif | |||
| //============================================================================== | |||
| /** | |||
| A component that contains an OpenGL canvas. | |||
| Override this, add it to whatever component you want to, and use the renderOpenGL() | |||
| method to draw its contents. | |||
| Important note! When using a GL component with a background thread, your sub-class | |||
| must call stopRenderThread() in its destructor. See stopRenderThread() for | |||
| more details. | |||
| */ | |||
| class JUCE_API OpenGLComponent : public OpenGLBaseType | |||
| { | |||
| public: | |||
| //============================================================================== | |||
| /** These flags can be combined and passed to the OpenGLComponent constructor to | |||
| specify various options. | |||
| */ | |||
| enum OpenGLFlags | |||
| { | |||
| /** This value can be used if you want your OpenGLComponent to use the | |||
| default settings. | |||
| */ | |||
| openGLDefault = 8, | |||
| #if JUCE_IOS || JUCE_ANDROID | |||
| openGLES1 = 1, /**< This selects openGL ES 1.0 */ | |||
| openGLES2 = 2, /**< This selects openGL ES 2.0 */ | |||
| #endif | |||
| /** If this flag is enabled, the component will launch a background thread to | |||
| perform the rendering. If this flag is not enabled, then renderOpenGL() | |||
| will be invoked on the main event thread when the component has been told to | |||
| repaint, or after triggerRepaint() has been called. | |||
| Important note! When using a background thread, your sub-class MUST call | |||
| stopRenderThread() in its destructor. See stopRenderThread() for | |||
| more details. | |||
| */ | |||
| useBackgroundThread = 4, | |||
| /** If this flag is enabled, then any sub-components of the OpenGLComponent | |||
| will be correctly overlaid on top of the GL content, and its paint() method will | |||
| be able to render over it. If you're not using sub-components, you can disable | |||
| this flag, which will eliminate some overhead. | |||
| */ | |||
| allowSubComponents = 8 | |||
| }; | |||
| //============================================================================== | |||
| /** Creates an OpenGLComponent. | |||
| The flags parameter should be a combination of the values in the | |||
| OpenGLFlags enum. | |||
| */ | |||
| OpenGLComponent (int flags = openGLDefault); | |||
| /** Destructor. */ | |||
| ~OpenGLComponent(); | |||
| //============================================================================== | |||
| /** Changes the pixel format used by this component. */ | |||
| void setPixelFormat (const OpenGLPixelFormat& formatToUse); | |||
| /** Specifies an OpenGL context which should be shared with the one that this | |||
| component is using. | |||
| This is an OpenGL feature that lets two contexts share their texture data. | |||
| Note that this pointer is stored by the component, and when the component | |||
| needs to recreate its internal context for some reason, the same context | |||
| will be used again to share lists. So if you pass a context in here, | |||
| don't delete the context while this component is still using it! You can | |||
| call shareWith (nullptr) to stop this component from sharing with it. | |||
| */ | |||
| void shareWith (OpenGLContext* contextToShareListsWith); | |||
| /** Returns the context that this component is sharing with. | |||
| @see shareWith | |||
| */ | |||
| OpenGLContext* getShareContext() const noexcept { return contextToShareListsWith; } | |||
| //============================================================================== | |||
| /** Flips the openGL buffers over. */ | |||
| void swapBuffers(); | |||
| /** Returns true if the component is performing the rendering on a background thread. | |||
| This property is specified in the constructor. | |||
| */ | |||
| inline bool isUsingDedicatedThread() const noexcept { return (flags & useBackgroundThread) != 0; } | |||
| /** Shuts down the rendering thread. | |||
| This must be called by your sub-class's destructor, to make sure that all rendering | |||
| callbacks have stopped before your class starts to be destroyed. | |||
| */ | |||
| void stopRenderThread(); | |||
| //============================================================================== | |||
| /** This callback is where your subclass should draw its openGL content. | |||
| When this is called, makeCurrentContextActive() will already have been called | |||
| for you, so you just need to draw. | |||
| */ | |||
| virtual void renderOpenGL() = 0; | |||
| /** This method is called when the component creates a new OpenGL context. | |||
| A new context may be created when the component is first used, or when it | |||
| is moved to a different window, or when the window is hidden and re-shown, | |||
| etc. | |||
| You can use this callback as an opportunity to set up things like textures | |||
| that your context needs. | |||
| New contexts are created on-demand by the makeCurrentContextActive() method - so | |||
| if the context is deleted, e.g. by changing the pixel format or window, no context | |||
| will be created until the next call to makeCurrentContextActive(), which will | |||
| synchronously create one and call this method. This means that if you're using | |||
| a non-GUI thread for rendering, you can make sure this method is be called by | |||
| your renderer thread. | |||
| When this callback happens, the context will already have been made current | |||
| using the makeCurrentContextActive() method, so there's no need to call it | |||
| again in your code. | |||
| */ | |||
| virtual void newOpenGLContextCreated(); | |||
| /** This method is called when the component shuts down its OpenGL context. | |||
| You can use this callback to delete textures and any other OpenGL objects you | |||
| created in the component's context. Be aware: if you are using a render | |||
| thread, this may be called on the thread. | |||
| When this callback happens, the context will have been made current | |||
| using the makeCurrentContextActive() method, so there's no need to call it | |||
| again in your code. | |||
| */ | |||
| virtual void releaseOpenGLContext(); | |||
| //============================================================================== | |||
| /** Returns the context that will draw into this component. | |||
| This may return 0 if the component is currently invisible or hasn't currently | |||
| got a context. The context object can be deleted and a new one created during | |||
| the lifetime of this component, and there may be times when it doesn't have one. | |||
| @see newOpenGLContextCreated() | |||
| */ | |||
| OpenGLContext* getCurrentContext() const noexcept { return context; } | |||
| /** Makes this component the currently active openGL context. | |||
| If this returns false, then the context isn't active, so you should avoid | |||
| making any calls. | |||
| This call may actually create a context if one isn't currently initialised. If | |||
| it does this, it will also synchronously call the newOpenGLContextCreated() | |||
| method to let you initialise it as necessary. | |||
| @see releaseAsRenderingTarget | |||
| */ | |||
| bool makeCurrentRenderingTarget(); | |||
| /** Stops the current component being the active OpenGL context. | |||
| This is the opposite of makeCurrentRenderingTarget() | |||
| @see makeCurrentRenderingTarget | |||
| */ | |||
| void releaseAsRenderingTarget(); | |||
| /** Causes a repaint to be invoked asynchronously. | |||
| This has a similar effect to calling repaint(), and triggers a callback to | |||
| renderOpenGL(), but unlike repaint(), it does not mark any of the component's | |||
| children as needing a redraw, which means that their cached state can be re-used | |||
| if possible. | |||
| */ | |||
| void triggerRepaint(); | |||
| //============================================================================== | |||
| /** Delete the context. | |||
| You should only need to call this if you've written a custom thread - if so, make | |||
| sure that your thread calls this before it terminates. | |||
| */ | |||
| void deleteContext(); | |||
| /** Tries to synchronously delete and re-create the context. | |||
| If the context doesn't exist already, this will try to create one. | |||
| If it exists, it'll first delete the existing one, and create a new one. | |||
| You may need to call this if you require a temporary context for some reason | |||
| before the normal call to newOpenGLContextCreated() is made. | |||
| @returns true if a new context has been successfully created - this may not be | |||
| possible on all platforms. | |||
| */ | |||
| bool rebuildContext(); | |||
| //============================================================================== | |||
| /** Returns the native handle of an embedded heavyweight window, if there is one. | |||
| E.g. On windows, this will return the HWND of the sub-window containing | |||
| the opengl context, on the mac it'll be the NSOpenGLView. | |||
| */ | |||
| void* getNativeWindowHandle() const; | |||
| /** @internal */ | |||
| void paint (Graphics&); | |||
| private: | |||
| const int flags; | |||
| class OpenGLComponentWatcher; | |||
| friend class OpenGLComponentWatcher; | |||
| friend class ScopedPointer <OpenGLComponentWatcher>; | |||
| ScopedPointer <OpenGLComponentWatcher> componentWatcher; | |||
| ScopedPointer <OpenGLContext> context; | |||
| OpenGLContext* contextToShareListsWith; | |||
| CriticalSection contextLock; | |||
| OpenGLPixelFormat preferredPixelFormat; | |||
| bool needToDeleteContext; | |||
| class OpenGLCachedComponentImage; | |||
| friend class OpenGLCachedComponentImage; | |||
| OpenGLCachedComponentImage* cachedImage; | |||
| OpenGLCachedComponentImage* getGLCachedImage(); | |||
| OpenGLContext* createContext(); | |||
| void updateContext(); | |||
| void recreateContextAsync(); | |||
| void startRenderThread(); | |||
| int renderAndSwapBuffers(); // (This method has been deprecated) | |||
| #if JUCE_ANDROID | |||
| friend class AndroidGLContext; | |||
| #endif | |||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (OpenGLComponent); | |||
| }; | |||
| #endif // __JUCE_OPENGLCOMPONENT_JUCEHEADER__ | |||
| @@ -23,113 +23,603 @@ | |||
| ============================================================================== | |||
| */ | |||
| OpenGLPixelFormat::OpenGLPixelFormat (const int bitsPerRGBComponent, | |||
| const int alphaBits_, | |||
| const int depthBufferBits_, | |||
| const int stencilBufferBits_) noexcept | |||
| : redBits (bitsPerRGBComponent), | |||
| greenBits (bitsPerRGBComponent), | |||
| blueBits (bitsPerRGBComponent), | |||
| alphaBits (alphaBits_), | |||
| depthBufferBits (depthBufferBits_), | |||
| stencilBufferBits (stencilBufferBits_), | |||
| accumulationBufferRedBits (0), | |||
| accumulationBufferGreenBits (0), | |||
| accumulationBufferBlueBits (0), | |||
| accumulationBufferAlphaBits (0), | |||
| multisamplingLevel (0) | |||
| class OpenGLContext::CachedImage : public CachedComponentImage, | |||
| public Thread | |||
| { | |||
| } | |||
| public: | |||
| CachedImage (OpenGLContext& context_, | |||
| Component& component_, | |||
| const OpenGLPixelFormat& pixelFormat, | |||
| const OpenGLContext* contextToShareWith) | |||
| : Thread ("OpenGL Rendering"), | |||
| context (context_), component (component_), | |||
| #if JUCE_OPENGL_ES | |||
| shadersAvailable (true), | |||
| #else | |||
| shadersAvailable (false), | |||
| #endif | |||
| needsUpdate (true) | |||
| { | |||
| nativeContext = new NativeContext (component, pixelFormat, | |||
| contextToShareWith != nullptr ? contextToShareWith->nativeContext | |||
| : nullptr); | |||
| OpenGLPixelFormat::OpenGLPixelFormat (const OpenGLPixelFormat& other) noexcept | |||
| : redBits (other.redBits), | |||
| greenBits (other.greenBits), | |||
| blueBits (other.blueBits), | |||
| alphaBits (other.alphaBits), | |||
| depthBufferBits (other.depthBufferBits), | |||
| stencilBufferBits (other.stencilBufferBits), | |||
| accumulationBufferRedBits (other.accumulationBufferRedBits), | |||
| accumulationBufferGreenBits (other.accumulationBufferGreenBits), | |||
| accumulationBufferBlueBits (other.accumulationBufferBlueBits), | |||
| accumulationBufferAlphaBits (other.accumulationBufferAlphaBits), | |||
| multisamplingLevel (other.multisamplingLevel) | |||
| { | |||
| } | |||
| if (nativeContext->createdOk()) | |||
| { | |||
| context.nativeContext = nativeContext; | |||
| #if ! JUCE_ANDROID | |||
| startThread (6); | |||
| #endif | |||
| } | |||
| else | |||
| { | |||
| nativeContext = nullptr; | |||
| } | |||
| } | |||
| ~CachedImage() | |||
| { | |||
| #if ! JUCE_ANDROID | |||
| stopThread (10000); | |||
| #endif | |||
| } | |||
| //============================================================================== | |||
| void paint (Graphics&) | |||
| { | |||
| ComponentPeer* const peer = component.getPeer(); | |||
| if (peer != nullptr) | |||
| peer->addMaskedRegion (peer->getComponent()->getLocalArea (&component, component.getLocalBounds())); | |||
| } | |||
| OpenGLPixelFormat& OpenGLPixelFormat::operator= (const OpenGLPixelFormat& other) noexcept | |||
| void invalidateAll() | |||
| { | |||
| validArea.clear(); | |||
| triggerRepaint(); | |||
| } | |||
| void invalidate (const Rectangle<int>& area) | |||
| { | |||
| validArea.subtract (area); | |||
| triggerRepaint(); | |||
| } | |||
| void releaseResources() {} | |||
| void triggerRepaint() | |||
| { | |||
| needsUpdate = true; | |||
| #if JUCE_ANDROID | |||
| if (nativeContext != nullptr) | |||
| nativeContext->triggerRepaint(); | |||
| #else | |||
| notify(); | |||
| #endif | |||
| } | |||
| //============================================================================== | |||
| void ensureFrameBufferSize (int width, int height) | |||
| { | |||
| const int fbW = cachedImageFrameBuffer.getWidth(); | |||
| const int fbH = cachedImageFrameBuffer.getHeight(); | |||
| if (fbW != width || fbH != height || ! cachedImageFrameBuffer.isValid()) | |||
| { | |||
| cachedImageFrameBuffer.initialise (context, width, height); | |||
| validArea.clear(); | |||
| JUCE_CHECK_OPENGL_ERROR | |||
| } | |||
| } | |||
| void clearRegionInFrameBuffer (const RectangleList& list) | |||
| { | |||
| glClearColor (0, 0, 0, 0); | |||
| glEnable (GL_SCISSOR_TEST); | |||
| const GLuint previousFrameBufferTarget = OpenGLFrameBuffer::getCurrentFrameBufferTarget(); | |||
| cachedImageFrameBuffer.makeCurrentRenderingTarget(); | |||
| for (RectangleList::Iterator i (list); i.next();) | |||
| { | |||
| const Rectangle<int>& r = *i.getRectangle(); | |||
| glScissor (r.getX(), component.getHeight() - r.getBottom(), r.getWidth(), r.getHeight()); | |||
| glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); | |||
| } | |||
| glDisable (GL_SCISSOR_TEST); | |||
| context.extensions.glBindFramebuffer (GL_FRAMEBUFFER, previousFrameBufferTarget); | |||
| JUCE_CHECK_OPENGL_ERROR | |||
| } | |||
| bool renderFrame() | |||
| { | |||
| if (! context.makeActive()) | |||
| return false; | |||
| JUCE_CHECK_OPENGL_ERROR | |||
| glViewport (0, 0, component.getWidth(), component.getHeight()); | |||
| if (context.renderer != nullptr) | |||
| { | |||
| context.renderer->renderOpenGL(); | |||
| clearGLError(); | |||
| } | |||
| if (context.renderComponents) | |||
| paintComponent(); | |||
| context.swapBuffers(); | |||
| return true; | |||
| } | |||
| void paintComponent() | |||
| { | |||
| if (needsUpdate) | |||
| { | |||
| MessageManagerLock mm (this); | |||
| if (! mm.lockWasGained()) | |||
| return; | |||
| needsUpdate = false; | |||
| // you mustn't set your own cached image object for an OpenGLComponent! | |||
| jassert (get (component) == this); | |||
| const Rectangle<int> bounds (component.getLocalBounds()); | |||
| ensureFrameBufferSize (bounds.getWidth(), bounds.getHeight()); | |||
| RectangleList invalid (bounds); | |||
| invalid.subtract (validArea); | |||
| validArea = bounds; | |||
| if (! invalid.isEmpty()) | |||
| { | |||
| clearRegionInFrameBuffer (invalid); | |||
| { | |||
| ScopedPointer<LowLevelGraphicsContext> g (createOpenGLGraphicsContext (context, cachedImageFrameBuffer)); | |||
| g->clipToRectangleList (invalid); | |||
| paintOwner (*g); | |||
| JUCE_CHECK_OPENGL_ERROR | |||
| } | |||
| context.makeActive(); | |||
| } | |||
| JUCE_CHECK_OPENGL_ERROR | |||
| } | |||
| #if ! JUCE_ANDROID | |||
| glEnable (GL_TEXTURE_2D); | |||
| clearGLError(); | |||
| #endif | |||
| context.extensions.glActiveTexture (GL_TEXTURE0); | |||
| glBindTexture (GL_TEXTURE_2D, cachedImageFrameBuffer.getTextureID()); | |||
| const Rectangle<int> cacheBounds (cachedImageFrameBuffer.getWidth(), cachedImageFrameBuffer.getHeight()); | |||
| context.copyTexture (cacheBounds, cacheBounds, context.getWidth(), context.getHeight()); | |||
| glBindTexture (GL_TEXTURE_2D, 0); | |||
| JUCE_CHECK_OPENGL_ERROR | |||
| } | |||
| void paintOwner (LowLevelGraphicsContext& context) | |||
| { | |||
| Graphics g (&context); | |||
| #if JUCE_ENABLE_REPAINT_DEBUGGING | |||
| g.saveState(); | |||
| #endif | |||
| JUCE_TRY | |||
| { | |||
| component.paintEntireComponent (g, false); | |||
| } | |||
| JUCE_CATCH_EXCEPTION | |||
| #if JUCE_ENABLE_REPAINT_DEBUGGING | |||
| // enabling this code will fill all areas that get repainted with a colour overlay, to show | |||
| // clearly when things are being repainted. | |||
| g.restoreState(); | |||
| static Random rng; | |||
| g.fillAll (Colour ((uint8) rng.nextInt (255), | |||
| (uint8) rng.nextInt (255), | |||
| (uint8) rng.nextInt (255), | |||
| (uint8) 0x50)); | |||
| #endif | |||
| } | |||
| //============================================================================== | |||
| void run() | |||
| { | |||
| { | |||
| // Allow the message thread to finish setting-up the context before using it.. | |||
| MessageManagerLock mml (this); | |||
| if (! mml.lockWasGained()) | |||
| return; | |||
| } | |||
| nativeContext->makeActive(); | |||
| initialiseOnThread(); | |||
| #if JUCE_USE_OPENGL_SHADERS && ! JUCE_OPENGL_ES | |||
| shadersAvailable = OpenGLShaderProgram::getLanguageVersion() > 0; | |||
| #endif | |||
| while (! threadShouldExit()) | |||
| { | |||
| const uint32 frameRenderStartTime = Time::getMillisecondCounter(); | |||
| if (renderFrame()) | |||
| waitForNextFrame (frameRenderStartTime); | |||
| } | |||
| shutdownOnThread(); | |||
| } | |||
| void initialiseOnThread() | |||
| { | |||
| associatedObjectNames.clear(); | |||
| associatedObjects.clear(); | |||
| nativeContext->initialiseOnRenderThread(); | |||
| glViewport (0, 0, component.getWidth(), component.getHeight()); | |||
| context.extensions.initialise(); | |||
| if (context.renderer != nullptr) | |||
| context.renderer->newOpenGLContextCreated(); | |||
| } | |||
| void shutdownOnThread() | |||
| { | |||
| if (context.renderer != nullptr) | |||
| context.renderer->openGLContextClosing(); | |||
| nativeContext->shutdownOnRenderThread(); | |||
| associatedObjectNames.clear(); | |||
| associatedObjects.clear(); | |||
| } | |||
| void waitForNextFrame (const uint32 frameRenderStartTime) | |||
| { | |||
| const int defaultFPS = 60; | |||
| const int elapsed = (int) (Time::getMillisecondCounter() - frameRenderStartTime); | |||
| wait (jmax (1, (1000 / defaultFPS) - elapsed)); | |||
| } | |||
| //============================================================================== | |||
| static CachedImage* get (Component& c) noexcept | |||
| { | |||
| return dynamic_cast<CachedImage*> (c.getCachedComponentImage()); | |||
| } | |||
| //============================================================================== | |||
| ScopedPointer<NativeContext> nativeContext; | |||
| OpenGLContext& context; | |||
| Component& component; | |||
| OpenGLFrameBuffer cachedImageFrameBuffer; | |||
| RectangleList validArea; | |||
| StringArray associatedObjectNames; | |||
| ReferenceCountedArray<ReferenceCountedObject> associatedObjects; | |||
| WaitableEvent canPaintNowFlag, finishedPaintingFlag; | |||
| bool volatile shadersAvailable; | |||
| bool volatile needsUpdate; | |||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (CachedImage); | |||
| }; | |||
| //============================================================================== | |||
| #if JUCE_ANDROID | |||
| void OpenGLContext::NativeContext::contextCreatedCallback() | |||
| { | |||
| redBits = other.redBits; | |||
| greenBits = other.greenBits; | |||
| blueBits = other.blueBits; | |||
| alphaBits = other.alphaBits; | |||
| depthBufferBits = other.depthBufferBits; | |||
| stencilBufferBits = other.stencilBufferBits; | |||
| accumulationBufferRedBits = other.accumulationBufferRedBits; | |||
| accumulationBufferGreenBits = other.accumulationBufferGreenBits; | |||
| accumulationBufferBlueBits = other.accumulationBufferBlueBits; | |||
| accumulationBufferAlphaBits = other.accumulationBufferAlphaBits; | |||
| multisamplingLevel = other.multisamplingLevel; | |||
| return *this; | |||
| isInsideGLCallback = true; | |||
| CachedImage* const c = CachedImage::get (component); | |||
| jassert (c != nullptr); | |||
| if (c != nullptr) | |||
| c->initialiseOnThread(); | |||
| isInsideGLCallback = false; | |||
| } | |||
| bool OpenGLPixelFormat::operator== (const OpenGLPixelFormat& other) const noexcept | |||
| void OpenGLContext::NativeContext::renderCallback() | |||
| { | |||
| return redBits == other.redBits | |||
| && greenBits == other.greenBits | |||
| && blueBits == other.blueBits | |||
| && alphaBits == other.alphaBits | |||
| && depthBufferBits == other.depthBufferBits | |||
| && stencilBufferBits == other.stencilBufferBits | |||
| && accumulationBufferRedBits == other.accumulationBufferRedBits | |||
| && accumulationBufferGreenBits == other.accumulationBufferGreenBits | |||
| && accumulationBufferBlueBits == other.accumulationBufferBlueBits | |||
| && accumulationBufferAlphaBits == other.accumulationBufferAlphaBits | |||
| && multisamplingLevel == other.multisamplingLevel; | |||
| isInsideGLCallback = true; | |||
| CachedImage* const c = CachedImage::get (component); | |||
| if (c != nullptr) | |||
| c->renderFrame(); | |||
| isInsideGLCallback = false; | |||
| } | |||
| #endif | |||
| //============================================================================== | |||
| static Array<OpenGLContext*> knownContexts; | |||
| class OpenGLContext::Attachment : public ComponentMovementWatcher | |||
| { | |||
| public: | |||
| Attachment (OpenGLContext& context_, Component& comp, | |||
| const OpenGLPixelFormat& pixelFormat_, | |||
| const OpenGLContext* contextToShareWith_) | |||
| : ComponentMovementWatcher (&comp), context (context_), | |||
| pixelFormat (pixelFormat_), contextToShareWith (contextToShareWith_) | |||
| { | |||
| if (canBeAttached (comp)) | |||
| attach(); | |||
| } | |||
| ~Attachment() | |||
| { | |||
| detach(); | |||
| } | |||
| void componentMovedOrResized (bool /*wasMoved*/, bool /*wasResized*/) | |||
| { | |||
| Component* const comp = getComponent(); | |||
| if (isAttached (*comp) != canBeAttached (*comp)) | |||
| componentVisibilityChanged(); | |||
| context.width = comp->getWidth(); | |||
| context.height = comp->getHeight(); | |||
| if (comp->getWidth() > 0 && comp->getHeight() > 0 | |||
| && context.nativeContext != nullptr) | |||
| { | |||
| context.nativeContext->updateWindowPosition (comp->getTopLevelComponent() | |||
| ->getLocalArea (comp, comp->getLocalBounds())); | |||
| } | |||
| } | |||
| void componentPeerChanged() | |||
| { | |||
| detach(); | |||
| componentVisibilityChanged(); | |||
| } | |||
| void componentVisibilityChanged() | |||
| { | |||
| Component* const comp = getComponent(); | |||
| if (canBeAttached (*comp)) | |||
| { | |||
| if (! isAttached (*comp)) | |||
| attach(); | |||
| } | |||
| else | |||
| { | |||
| detach(); | |||
| } | |||
| } | |||
| #if JUCE_DEBUG || JUCE_LOG_ASSERTIONS | |||
| void componentBeingDeleted (Component& component) | |||
| { | |||
| /* You must call detach() or delete your OpenGLContext to remove it | |||
| from a component BEFORE deleting the component that it is using! | |||
| */ | |||
| jassertfalse; | |||
| ComponentMovementWatcher::componentBeingDeleted (component); | |||
| } | |||
| #endif | |||
| private: | |||
| OpenGLContext& context; | |||
| OpenGLPixelFormat pixelFormat; | |||
| const OpenGLContext* contextToShareWith; | |||
| static bool canBeAttached (const Component& comp) noexcept | |||
| { | |||
| return comp.getWidth() > 0 && comp.getHeight() > 0 && comp.isShowing(); | |||
| } | |||
| static bool isAttached (const Component& comp) noexcept | |||
| { | |||
| return comp.getCachedComponentImage() != nullptr; | |||
| } | |||
| void attach() | |||
| { | |||
| Component* const comp = getComponent(); | |||
| comp->setCachedComponentImage (new CachedImage (context, *comp, | |||
| pixelFormat, contextToShareWith)); | |||
| } | |||
| void detach() | |||
| { | |||
| getComponent()->setCachedComponentImage (nullptr); | |||
| } | |||
| }; | |||
| OpenGLContext::OpenGLContext() noexcept | |||
| : shaderLanguageAvailable (0) | |||
| //============================================================================== | |||
| OpenGLContext::OpenGLContext() | |||
| : nativeContext (nullptr), renderer (nullptr), | |||
| width (0), height (0), renderComponents (true) | |||
| { | |||
| knownContexts.add (this); | |||
| } | |||
| OpenGLContext::~OpenGLContext() | |||
| { | |||
| knownContexts.removeValue (this); | |||
| detach(); | |||
| } | |||
| OpenGLContext* OpenGLContext::getCurrentContext() | |||
| void OpenGLContext::setRenderer (OpenGLRenderer* rendererToUse, | |||
| bool shouldAlsoPaintComponent) noexcept | |||
| { | |||
| // This method must not be called when the context has already been attached! | |||
| // Call it before attaching your context, or use detach() first, before calling this! | |||
| jassert (nativeContext == nullptr); | |||
| renderer = rendererToUse; | |||
| renderComponents = shouldAlsoPaintComponent; | |||
| } | |||
| void OpenGLContext::attachTo (Component& component, | |||
| const OpenGLPixelFormat& pixelFormat, | |||
| const OpenGLContext* contextToShareWith) | |||
| { | |||
| for (int i = knownContexts.size(); --i >= 0;) | |||
| if (getTargetComponent() != &component) | |||
| { | |||
| OpenGLContext* const oglc = knownContexts.getUnchecked(i); | |||
| detach(); | |||
| width = component.getWidth(); | |||
| height = component.getHeight(); | |||
| if (oglc->isActive()) | |||
| return oglc; | |||
| attachment = new Attachment (*this, component, | |||
| pixelFormat, contextToShareWith); | |||
| } | |||
| } | |||
| return nullptr; | |||
| void OpenGLContext::attachTo (Component& component) | |||
| { | |||
| component.repaint(); | |||
| attachTo (component, OpenGLPixelFormat(), nullptr); | |||
| } | |||
| bool OpenGLContext::areShadersAvailable() const | |||
| void OpenGLContext::detach() | |||
| { | |||
| #if JUCE_USE_OPENGL_SHADERS | |||
| if (shaderLanguageAvailable == 0) | |||
| shaderLanguageAvailable = (OpenGLShaderProgram::getLanguageVersion() > 0) ? 1 : -1; | |||
| attachment = nullptr; | |||
| nativeContext = nullptr; | |||
| width = height = 0; | |||
| } | |||
| bool OpenGLContext::isAttached() const noexcept | |||
| { | |||
| return nativeContext != nullptr; | |||
| } | |||
| Component* OpenGLContext::getTargetComponent() const noexcept | |||
| { | |||
| return attachment != nullptr ? attachment->getComponent() : nullptr; | |||
| } | |||
| OpenGLContext* OpenGLContext::getCurrentContext() | |||
| { | |||
| #if JUCE_ANDROID | |||
| NativeContext* const nc = NativeContext::getActiveContext(); | |||
| if (nc == nullptr) | |||
| return nullptr; | |||
| return shaderLanguageAvailable > 0; | |||
| CachedImage* currentContext = CachedImage::get (nc->component); | |||
| #else | |||
| return false; | |||
| CachedImage* currentContext = dynamic_cast <CachedImage*> (Thread::getCurrentThread()); | |||
| #endif | |||
| return currentContext != nullptr ? ¤tContext->context : nullptr; | |||
| } | |||
| bool OpenGLContext::makeActive() const noexcept { return nativeContext != nullptr && nativeContext->makeActive(); } | |||
| bool OpenGLContext::makeInactive() const noexcept { return nativeContext != nullptr && nativeContext->makeInactive(); } | |||
| bool OpenGLContext::isActive() const noexcept { return nativeContext != nullptr && nativeContext->isActive(); } | |||
| void OpenGLContext::triggerRepaint() | |||
| { | |||
| CachedImage* const currentContext | |||
| = dynamic_cast <CachedImage*> (Thread::getCurrentThread()); | |||
| if (currentContext != nullptr) | |||
| { | |||
| currentContext->triggerRepaint(); | |||
| currentContext->component.repaint(); | |||
| } | |||
| } | |||
| void OpenGLContext::swapBuffers() | |||
| { | |||
| if (nativeContext != nullptr) | |||
| nativeContext->swapBuffers(); | |||
| } | |||
| unsigned int OpenGLContext::getFrameBufferID() const noexcept | |||
| { | |||
| return nativeContext != nullptr ? nativeContext->getFrameBufferID() : 0; | |||
| } | |||
| bool OpenGLContext::setSwapInterval (int numFramesPerSwap) | |||
| { | |||
| return nativeContext != nullptr && nativeContext->setSwapInterval (numFramesPerSwap); | |||
| } | |||
| int OpenGLContext::getSwapInterval() const | |||
| { | |||
| return nativeContext != nullptr ? nativeContext->getSwapInterval() : 0; | |||
| } | |||
| void* OpenGLContext::getRawContext() const noexcept | |||
| { | |||
| return nativeContext != nullptr ? nativeContext->getRawContext() : nullptr; | |||
| } | |||
| OpenGLContext::CachedImage* OpenGLContext::getCachedImage() const noexcept | |||
| { | |||
| Component* const comp = getTargetComponent(); | |||
| return comp != nullptr ? CachedImage::get (*comp) : nullptr; | |||
| } | |||
| bool OpenGLContext::areShadersAvailable() const | |||
| { | |||
| CachedImage* const c = getCachedImage(); | |||
| return c != nullptr && c->shadersAvailable; | |||
| } | |||
| ReferenceCountedObjectPtr<ReferenceCountedObject> OpenGLContext::getAssociatedObject (const char* name) const | |||
| { | |||
| jassert (name != nullptr); | |||
| CachedImage* const c = getCachedImage(); | |||
| // This method must only be called from an openGL rendering callback. | |||
| jassert (c != nullptr && nativeContext != nullptr); | |||
| jassert (getCurrentContext() != nullptr); | |||
| const int index = c->associatedObjectNames.indexOf (name); | |||
| return index >= 0 ? c->associatedObjects.getUnchecked (index) : nullptr; | |||
| } | |||
| void OpenGLContext::setAssociatedObject (const char* name, ReferenceCountedObject* newObject) | |||
| { | |||
| jassert (name != nullptr); | |||
| CachedImage* const c = getCachedImage(); | |||
| // This method must only be called from an openGL rendering callback. | |||
| jassert (c != nullptr && nativeContext != nullptr); | |||
| jassert (getCurrentContext() != nullptr); | |||
| const int index = c->associatedObjectNames.indexOf (name); | |||
| if (index >= 0) | |||
| { | |||
| c->associatedObjects.set (index, newObject); | |||
| } | |||
| else | |||
| { | |||
| c->associatedObjectNames.add (name); | |||
| c->associatedObjects.add (newObject); | |||
| } | |||
| } | |||
| void OpenGLContext::copyTexture (const Rectangle<int>& targetClipArea, | |||
| const Rectangle<int>& anchorPosAndTextureSize, | |||
| int contextWidth, int contextHeight) | |||
| const int contextWidth, const int contextHeight) | |||
| { | |||
| if (contextWidth <= 0 || contextHeight <= 0) | |||
| return; | |||
| JUCE_CHECK_OPENGL_ERROR | |||
| glBlendFunc (GL_ONE, GL_ONE_MINUS_SRC_ALPHA); | |||
| glEnable (GL_BLEND); | |||
| @@ -144,13 +634,13 @@ void OpenGLContext::copyTexture (const Rectangle<int>& targetClipArea, | |||
| static const OverlayShaderProgram& select (OpenGLContext& context) | |||
| { | |||
| static const Identifier programValueID ("juceGLComponentOverlayShader"); | |||
| OverlayShaderProgram* program = dynamic_cast <OverlayShaderProgram*> (context.properties [programValueID].getObject()); | |||
| static const char programValueID[] = "juceGLComponentOverlayShader"; | |||
| OverlayShaderProgram* program = static_cast <OverlayShaderProgram*> (context.getAssociatedObject (programValueID).getObject()); | |||
| if (program == nullptr) | |||
| { | |||
| program = new OverlayShaderProgram (context); | |||
| context.properties.set (programValueID, var (program)); | |||
| context.setAssociatedObject (programValueID, program); | |||
| } | |||
| program->program.use(); | |||
| @@ -173,12 +663,12 @@ void OpenGLContext::copyTexture (const Rectangle<int>& targetClipArea, | |||
| GL_VERTEX_SHADER); | |||
| program.addShader ("uniform sampler2D imageTexture;" | |||
| "uniform " JUCE_HIGHP " float matrix[6];" | |||
| "uniform " JUCE_HIGHP " float textureBounds[4];" | |||
| "varying " JUCE_HIGHP " vec2 pixelPos;" | |||
| "void main()" | |||
| "{" | |||
| JUCE_HIGHP " vec2 texturePos = mat2 (matrix[0], matrix[3], matrix[1], matrix[4]) * pixelPos" | |||
| " + vec2 (matrix[2], matrix[5]);" | |||
| JUCE_HIGHP " vec2 texturePos = (pixelPos - vec2 (textureBounds[0], textureBounds[1]))" | |||
| "/ vec2 (textureBounds[2], textureBounds[3]);" | |||
| "gl_FragColor = texture2D (imageTexture, vec2 (texturePos.x, 1.0 - texturePos.y));" | |||
| "}", | |||
| GL_FRAGMENT_SHADER); | |||
| @@ -192,24 +682,19 @@ void OpenGLContext::copyTexture (const Rectangle<int>& targetClipArea, | |||
| : positionAttribute (program, "position"), | |||
| screenSize (program, "screenSize"), | |||
| imageTexture (program, "imageTexture"), | |||
| matrix (program, "matrix") | |||
| textureBounds (program, "textureBounds") | |||
| {} | |||
| void set (const float targetWidth, const float targetHeight, const Rectangle<float>& anchorPosAndTextureSize) const | |||
| void set (const float targetWidth, const float targetHeight, const Rectangle<float>& bounds) const | |||
| { | |||
| const AffineTransform t (AffineTransform::translation (anchorPosAndTextureSize.getX(), | |||
| anchorPosAndTextureSize.getY()) | |||
| .inverted().scaled (1.0f / anchorPosAndTextureSize.getWidth(), | |||
| 1.0f / anchorPosAndTextureSize.getHeight())); | |||
| const GLfloat m[] = { t.mat00, t.mat01, t.mat02, t.mat10, t.mat11, t.mat12 }; | |||
| matrix.set (m, 6); | |||
| const GLfloat m[] = { bounds.getX(), bounds.getY(), bounds.getWidth(), bounds.getHeight() }; | |||
| textureBounds.set (m, 4); | |||
| imageTexture.set (0); | |||
| screenSize.set (targetWidth, targetHeight); | |||
| } | |||
| OpenGLShaderProgram::Attribute positionAttribute; | |||
| OpenGLShaderProgram::Uniform screenSize, imageTexture, matrix; | |||
| OpenGLShaderProgram::Uniform screenSize, imageTexture, textureBounds; | |||
| }; | |||
| OpenGLShaderProgram program; | |||
| @@ -228,9 +713,9 @@ void OpenGLContext::copyTexture (const Rectangle<int>& targetClipArea, | |||
| extensions.glVertexAttribPointer (program.params.positionAttribute.attributeID, 2, GL_SHORT, GL_FALSE, 4, vertices); | |||
| extensions.glEnableVertexAttribArray (program.params.positionAttribute.attributeID); | |||
| JUCE_CHECK_OPENGL_ERROR | |||
| glDrawArrays (GL_TRIANGLE_STRIP, 0, 4); | |||
| extensions.glUseProgram (0); | |||
| } | |||
| #if JUCE_USE_OPENGL_FIXED_FUNCTION | |||
| @@ -244,12 +729,14 @@ void OpenGLContext::copyTexture (const Rectangle<int>& targetClipArea, | |||
| glScissor (targetClipArea.getX(), contextHeight - targetClipArea.getBottom(), | |||
| targetClipArea.getWidth(), targetClipArea.getHeight()); | |||
| JUCE_CHECK_OPENGL_ERROR | |||
| glColor4f (1.0f, 1.0f, 1.0f, 1.0f); | |||
| glDisableClientState (GL_COLOR_ARRAY); | |||
| glDisableClientState (GL_NORMAL_ARRAY); | |||
| glEnableClientState (GL_VERTEX_ARRAY); | |||
| glEnableClientState (GL_TEXTURE_COORD_ARRAY); | |||
| OpenGLHelpers::prepareFor2D (contextWidth, contextHeight); | |||
| JUCE_CHECK_OPENGL_ERROR | |||
| const GLfloat textureCoords[] = { 0, 0, 1.0f, 0, 0, 1.0f, 1.0f, 1.0f }; | |||
| glTexCoordPointer (2, GL_FLOAT, 0, textureCoords); | |||
| @@ -265,4 +752,6 @@ void OpenGLContext::copyTexture (const Rectangle<int>& targetClipArea, | |||
| glDisable (GL_SCISSOR_TEST); | |||
| } | |||
| #endif | |||
| JUCE_CHECK_OPENGL_ERROR | |||
| } | |||
| @@ -29,6 +29,27 @@ | |||
| #include "juce_OpenGLPixelFormat.h" | |||
| #include "../native/juce_OpenGLExtensions.h" | |||
| //============================================================================== | |||
| /** | |||
| */ | |||
| class JUCE_API OpenGLRenderer | |||
| { | |||
| public: | |||
| OpenGLRenderer() {} | |||
| virtual ~OpenGLRenderer() {} | |||
| /** | |||
| */ | |||
| virtual void newOpenGLContextCreated() = 0; | |||
| /** | |||
| */ | |||
| virtual void renderOpenGL() = 0; | |||
| /** | |||
| */ | |||
| virtual void openGLContextClosing() = 0; | |||
| }; | |||
| //============================================================================== | |||
| /** | |||
| @@ -39,20 +60,51 @@ | |||
| class JUCE_API OpenGLContext | |||
| { | |||
| public: | |||
| //============================================================================== | |||
| OpenGLContext(); | |||
| /** Destructor. */ | |||
| virtual ~OpenGLContext(); | |||
| ~OpenGLContext(); | |||
| //============================================================================== | |||
| /** */ | |||
| void setRenderer (OpenGLRenderer* rendererToUse, | |||
| bool shouldAlsoPaintComponent) noexcept; | |||
| /** */ | |||
| void attachTo (Component& component); | |||
| /** */ | |||
| void attachTo (Component& component, | |||
| const OpenGLPixelFormat& preferredPixelFormat, | |||
| const OpenGLContext* contextToShareWith); | |||
| /** */ | |||
| void detach(); | |||
| /** */ | |||
| bool isAttached() const noexcept; | |||
| //============================================================================== | |||
| /** Makes this context the currently active one. */ | |||
| virtual bool makeActive() const noexcept = 0; | |||
| bool makeActive() const noexcept; | |||
| /** If this context is currently active, it is disactivated. */ | |||
| virtual bool makeInactive() const noexcept = 0; | |||
| bool makeInactive() const noexcept; | |||
| /** Returns true if this context is currently active. */ | |||
| virtual bool isActive() const noexcept = 0; | |||
| bool isActive() const noexcept; | |||
| /** Swaps the buffers (if the context can do this). */ | |||
| virtual void swapBuffers() = 0; | |||
| /** Returns the component to which this context is currently attached, or nullptr. */ | |||
| Component* getTargetComponent() const noexcept; | |||
| /** Returns the context that's currently in active use by the calling thread, or | |||
| nullptr if no context is active. | |||
| */ | |||
| static OpenGLContext* getCurrentContext(); | |||
| //============================================================================== | |||
| /** Swaps the buffers (if the context can do this). | |||
| There's normally no need to call this directly - the buffers will be swapped | |||
| automatically after your OpenGLRenderer::renderOpenGL() method has been called. | |||
| */ | |||
| void swapBuffers(); | |||
| /** Sets whether the context checks the vertical sync before swapping. | |||
| @@ -60,57 +112,68 @@ public: | |||
| fairly system-dependent, but 0 turns off syncing, 1 makes it swap on frame-boundaries, | |||
| and greater numbers indicate that it should swap less often. | |||
| Returns true if it sets the value successfully. | |||
| Returns true if it sets the value successfully - some platforms won't support | |||
| this setting. | |||
| */ | |||
| virtual bool setSwapInterval (int numFramesPerSwap) = 0; | |||
| bool setSwapInterval (int numFramesPerSwap); | |||
| /** Returns the current swap-sync interval. | |||
| See setSwapInterval() for info about the value returned. | |||
| */ | |||
| virtual int getSwapInterval() const = 0; | |||
| int getSwapInterval() const; | |||
| /** */ | |||
| void triggerRepaint(); | |||
| //============================================================================== | |||
| /** Returns an OS-dependent handle to the raw GL context. | |||
| /** Returns the width of this context */ | |||
| inline int getWidth() const noexcept { return width; } | |||
| /** Returns the height of this context */ | |||
| inline int getHeight() const noexcept { return height; } | |||
| On win32, this will be a HGLRC; on the Mac, an NSOpenGLContext; on Linux, | |||
| a GLXContext. | |||
| /** If this context is backed by a frame buffer, this returns its ID number, | |||
| or 0 if the context has no accessible framebuffer. | |||
| */ | |||
| virtual void* getRawContext() const noexcept = 0; | |||
| unsigned int getFrameBufferID() const noexcept; | |||
| /** Returns the width of this context */ | |||
| virtual int getWidth() const = 0; | |||
| /** Returns the height of this context */ | |||
| virtual int getHeight() const = 0; | |||
| /** Returns true if shaders can be used in this context. */ | |||
| bool areShadersAvailable() const; | |||
| /** Updates the native context's area within its parent. */ | |||
| virtual void updateWindowPosition (const Rectangle<int>&) = 0; | |||
| /** This structure holds a set of dynamically loaded GL functions for use on this context. */ | |||
| OpenGLExtensionFunctions extensions; | |||
| /** If this context is backed by a frame buffer, this returns its ID number, or | |||
| 0 if the context has no accessible framebuffer. | |||
| /** This retrieves an object that was previously stored with setAssociatedObject(). | |||
| If no object is found with the given name, this will return nullptr. | |||
| This method must only be called from within the GL rendering methods. | |||
| @see setAssociatedObject | |||
| */ | |||
| virtual unsigned int getFrameBufferID() const = 0; | |||
| ReferenceCountedObjectPtr<ReferenceCountedObject> getAssociatedObject (const char* name) const; | |||
| /** Checks whether the current context supports the specified extension. */ | |||
| bool isExtensionSupported (const char* const extensionName); | |||
| /** Attaches a named object to the context, which will be deleted when the context is | |||
| destroyed. | |||
| /** Returns true if shaders can be used in this context. */ | |||
| virtual bool areShadersAvailable() const; | |||
| This allows you to store an object which will be released before the context is | |||
| deleted. The main purpose is for caching GL objects such as shader programs, which | |||
| will become invalid when the context is deleted. | |||
| This method must only be called from within the GL rendering methods. | |||
| */ | |||
| void setAssociatedObject (const char* name, ReferenceCountedObject* newObject); | |||
| //============================================================================== | |||
| /** Returns the context that's currently in active use by the calling thread. | |||
| /** Returns an OS-dependent handle to some kind of underlting OS-provided GL context. | |||
| Returns 0 if there isn't an active context. | |||
| The exact type of the value returned will depend on the OS and may change | |||
| if the implementation changes. If you want to use this, digging around in the | |||
| native code is probably the best way to find out what it is. | |||
| */ | |||
| static OpenGLContext* getCurrentContext(); | |||
| void* getRawContext() const noexcept; | |||
| /** This property set allows you to attach persisent values to the context. */ | |||
| NamedValueSet properties; | |||
| /** This structure holds a set of dynamically loaded GL functions for use on this context. */ | |||
| OpenGLExtensionFunctions extensions; | |||
| //============================================================================== | |||
| /** Draws the currently selected texture into this context at its original size. | |||
| @param targetClipArea the target area to draw into (in top-left origin coords) | |||
| @param anchorPosAndTextureSize the position of this rectangle is the texture's top-left | |||
| anchor position in the target space, and the size must be | |||
| @@ -124,15 +187,24 @@ public: | |||
| const Rectangle<int>& anchorPosAndTextureSize, | |||
| int contextWidth, int contextHeight); | |||
| protected: | |||
| //============================================================================== | |||
| OpenGLContext() noexcept; | |||
| #ifndef DOXYGEN | |||
| class NativeContext; | |||
| #endif | |||
| private: | |||
| mutable int shaderLanguageAvailable; | |||
| class CachedImage; | |||
| class Attachment; | |||
| NativeContext* nativeContext; | |||
| OpenGLRenderer* renderer; | |||
| ScopedPointer<Attachment> attachment; | |||
| int width, height; | |||
| bool renderComponents; | |||
| CachedImage* getCachedImage() const noexcept; | |||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (OpenGLContext); | |||
| }; | |||
| #endif // __JUCE_OPENGLCONTEXT_JUCEHEADER__ | |||
| @@ -96,16 +96,19 @@ public: | |||
| ~Pimpl() | |||
| { | |||
| if (textureID != 0) | |||
| glDeleteTextures (1, &textureID); | |||
| if (OpenGLHelpers::isContextActive()) | |||
| { | |||
| if (textureID != 0) | |||
| glDeleteTextures (1, &textureID); | |||
| if (depthOrStencilBuffer != 0) | |||
| context.extensions.glDeleteRenderbuffers (1, &depthOrStencilBuffer); | |||
| if (depthOrStencilBuffer != 0) | |||
| context.extensions.glDeleteRenderbuffers (1, &depthOrStencilBuffer); | |||
| if (frameBufferID != 0) | |||
| context.extensions.glDeleteFramebuffers (1, &frameBufferID); | |||
| if (frameBufferID != 0) | |||
| context.extensions.glDeleteFramebuffers (1, &frameBufferID); | |||
| JUCE_CHECK_OPENGL_ERROR | |||
| JUCE_CHECK_OPENGL_ERROR | |||
| } | |||
| } | |||
| void bind() | |||
| @@ -212,6 +215,7 @@ bool OpenGLFrameBuffer::initialise (OpenGLFrameBuffer& other) | |||
| #if ! JUCE_ANDROID | |||
| glEnable (GL_TEXTURE_2D); | |||
| clearGLError(); | |||
| #endif | |||
| glBindTexture (GL_TEXTURE_2D, p->textureID); | |||
| pimpl->context.copyTexture (area, area, area.getWidth(), area.getHeight()); | |||
| @@ -340,6 +344,7 @@ bool OpenGLFrameBuffer::writePixels (const PixelARGB* data, const Rectangle<int> | |||
| const GLint cropRect[4] = { 0, texH - area.getHeight(), area.getWidth(), area.getHeight() }; | |||
| glTexParameteriv (GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, cropRect); | |||
| glEnable (GL_TEXTURE_2D); | |||
| clearGLError(); | |||
| glColor4f (1.0f, 1.0f, 1.0f, 1.0f); | |||
| glDrawTexiOES (area.getX(), area.getY(), 1, area.getWidth(), area.getHeight()); | |||
| glBindTexture (GL_TEXTURE_2D, 0); | |||
| @@ -348,6 +353,7 @@ bool OpenGLFrameBuffer::writePixels (const PixelARGB* data, const Rectangle<int> | |||
| #endif | |||
| pimpl->context.extensions.glBindFramebuffer (GL_FRAMEBUFFER, 0); | |||
| JUCE_CHECK_OPENGL_ERROR | |||
| return true; | |||
| } | |||
| @@ -386,6 +392,7 @@ void OpenGLFrameBuffer::drawAt (float x1, float y1) const | |||
| { | |||
| #if ! JUCE_ANDROID | |||
| glEnable (GL_TEXTURE_2D); | |||
| clearGLError(); | |||
| #endif | |||
| glBindTexture (GL_TEXTURE_2D, pimpl->textureID); | |||
| @@ -599,9 +599,6 @@ public: | |||
| //============================================================================== | |||
| struct StateHelpers | |||
| { | |||
| struct ActiveTextures; | |||
| //============================================================================== | |||
| struct BlendingMode | |||
| { | |||
| BlendingMode() noexcept | |||
| @@ -742,8 +739,7 @@ struct StateHelpers | |||
| void clear() noexcept | |||
| { | |||
| for (int i = 0; i < numElementsInArray (currentTextureID); ++i) | |||
| currentTextureID[i] = 0; | |||
| zeromem (currentTextureID, sizeof (currentTextureID)); | |||
| } | |||
| void clearCurrent() noexcept | |||
| @@ -774,7 +770,7 @@ struct StateHelpers | |||
| currentTextureID[i] = 0; | |||
| } | |||
| JUCE_CHECK_OPENGL_ERROR | |||
| clearGLError(); | |||
| #endif | |||
| } | |||
| } | |||
| @@ -1054,13 +1050,13 @@ struct StateHelpers | |||
| : context (context_), | |||
| activeShader (nullptr) | |||
| { | |||
| const Identifier programValueID ("GraphicsContextPrograms"); | |||
| programs = dynamic_cast <ShaderPrograms*> (context.properties [programValueID].getObject()); | |||
| const char programValueID[] = "GraphicsContextPrograms"; | |||
| programs = static_cast <ShaderPrograms*> (context.getAssociatedObject (programValueID).getObject()); | |||
| if (programs == nullptr) | |||
| { | |||
| programs = new ShaderPrograms (context); | |||
| context.properties.set (programValueID, var (programs)); | |||
| context.setAssociatedObject (programValueID, programs); | |||
| } | |||
| } | |||
| @@ -2188,6 +2184,7 @@ public: | |||
| #if ! JUCE_ANDROID | |||
| target.context.extensions.glActiveTexture (GL_TEXTURE0); | |||
| glEnable (GL_TEXTURE_2D); | |||
| clearGLError(); | |||
| #endif | |||
| OpenGLTexture texture; | |||
| @@ -2217,20 +2214,17 @@ LowLevelGraphicsContext* createOpenGLContext (const Target& target) | |||
| return new ShaderContext (target); | |||
| #endif | |||
| Image tempImage (Image::ARGB, target.bounds.getWidth(), target.bounds.getHeight(), true); | |||
| Image tempImage (Image::ARGB, target.bounds.getWidth(), target.bounds.getHeight(), true, SoftwareImageType()); | |||
| return new NonShaderContext (target, tempImage); | |||
| } | |||
| } | |||
| //============================================================================== | |||
| LowLevelGraphicsContext* createOpenGLGraphicsContext (OpenGLComponent& target) | |||
| LowLevelGraphicsContext* createOpenGLGraphicsContext (OpenGLContext& context) | |||
| { | |||
| OpenGLContext* const context = target.getCurrentContext(); | |||
| jassert (context != nullptr); // must have a valid context when this is called! | |||
| return createOpenGLGraphicsContext (*context, context->getFrameBufferID(), | |||
| context->getWidth(), context->getHeight()); | |||
| return createOpenGLGraphicsContext (context, context.getFrameBufferID(), | |||
| context.getWidth(), context.getHeight()); | |||
| } | |||
| LowLevelGraphicsContext* createOpenGLGraphicsContext (OpenGLContext& context, OpenGLFrameBuffer& target) | |||
| @@ -27,11 +27,10 @@ | |||
| #define __JUCE_OPENGLGRAPHICSCONTEXT_JUCEHEADER__ | |||
| //============================================================================== | |||
| /** Creates a graphics context object that will render into the given OpenGL target. | |||
| The caller is responsible for deleting this object when no longer needed. | |||
| */ | |||
| LowLevelGraphicsContext* createOpenGLGraphicsContext (OpenGLComponent& target); | |||
| LowLevelGraphicsContext* createOpenGLGraphicsContext (OpenGLContext& target); | |||
| /** Creates a graphics context object that will render into the given OpenGL target. | |||
| The caller is responsible for deleting this object when no longer needed. | |||
| @@ -0,0 +1,88 @@ | |||
| /* | |||
| ============================================================================== | |||
| This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||
| Copyright 2004-11 by Raw Material Software Ltd. | |||
| ------------------------------------------------------------------------------ | |||
| JUCE can be redistributed and/or modified under the terms of the GNU General | |||
| Public License (Version 2), as published by the Free Software Foundation. | |||
| A copy of the license is included in the JUCE distribution, or can be found | |||
| online at www.gnu.org/licenses. | |||
| JUCE is distributed in the hope that it will be useful, but WITHOUT ANY | |||
| WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR | |||
| A PARTICULAR PURPOSE. See the GNU General Public License for more details. | |||
| ------------------------------------------------------------------------------ | |||
| To release a closed-source product which uses JUCE, commercial licenses are | |||
| available: visit www.rawmaterialsoftware.com/juce for more information. | |||
| ============================================================================== | |||
| */ | |||
| OpenGLPixelFormat::OpenGLPixelFormat (const int bitsPerRGBComponent, | |||
| const int alphaBits_, | |||
| const int depthBufferBits_, | |||
| const int stencilBufferBits_) noexcept | |||
| : redBits (bitsPerRGBComponent), | |||
| greenBits (bitsPerRGBComponent), | |||
| blueBits (bitsPerRGBComponent), | |||
| alphaBits (alphaBits_), | |||
| depthBufferBits (depthBufferBits_), | |||
| stencilBufferBits (stencilBufferBits_), | |||
| accumulationBufferRedBits (0), | |||
| accumulationBufferGreenBits (0), | |||
| accumulationBufferBlueBits (0), | |||
| accumulationBufferAlphaBits (0), | |||
| multisamplingLevel (0) | |||
| { | |||
| } | |||
| OpenGLPixelFormat::OpenGLPixelFormat (const OpenGLPixelFormat& other) noexcept | |||
| : redBits (other.redBits), | |||
| greenBits (other.greenBits), | |||
| blueBits (other.blueBits), | |||
| alphaBits (other.alphaBits), | |||
| depthBufferBits (other.depthBufferBits), | |||
| stencilBufferBits (other.stencilBufferBits), | |||
| accumulationBufferRedBits (other.accumulationBufferRedBits), | |||
| accumulationBufferGreenBits (other.accumulationBufferGreenBits), | |||
| accumulationBufferBlueBits (other.accumulationBufferBlueBits), | |||
| accumulationBufferAlphaBits (other.accumulationBufferAlphaBits), | |||
| multisamplingLevel (other.multisamplingLevel) | |||
| { | |||
| } | |||
| OpenGLPixelFormat& OpenGLPixelFormat::operator= (const OpenGLPixelFormat& other) noexcept | |||
| { | |||
| redBits = other.redBits; | |||
| greenBits = other.greenBits; | |||
| blueBits = other.blueBits; | |||
| alphaBits = other.alphaBits; | |||
| depthBufferBits = other.depthBufferBits; | |||
| stencilBufferBits = other.stencilBufferBits; | |||
| accumulationBufferRedBits = other.accumulationBufferRedBits; | |||
| accumulationBufferGreenBits = other.accumulationBufferGreenBits; | |||
| accumulationBufferBlueBits = other.accumulationBufferBlueBits; | |||
| accumulationBufferAlphaBits = other.accumulationBufferAlphaBits; | |||
| multisamplingLevel = other.multisamplingLevel; | |||
| return *this; | |||
| } | |||
| bool OpenGLPixelFormat::operator== (const OpenGLPixelFormat& other) const noexcept | |||
| { | |||
| return redBits == other.redBits | |||
| && greenBits == other.greenBits | |||
| && blueBits == other.blueBits | |||
| && alphaBits == other.alphaBits | |||
| && depthBufferBits == other.depthBufferBits | |||
| && stencilBufferBits == other.stencilBufferBits | |||
| && accumulationBufferRedBits == other.accumulationBufferRedBits | |||
| && accumulationBufferGreenBits == other.accumulationBufferGreenBits | |||
| && accumulationBufferBlueBits == other.accumulationBufferBlueBits | |||
| && accumulationBufferAlphaBits == other.accumulationBufferAlphaBits | |||
| && multisamplingLevel == other.multisamplingLevel; | |||
| } | |||