@@ -36,6 +36,7 @@ LOCAL_SRC_FILES := \ | |||||
../../../Source/Demos/MultiTouch.cpp\ | ../../../Source/Demos/MultiTouch.cpp\ | ||||
../../../Source/Demos/NetworkingDemo.cpp\ | ../../../Source/Demos/NetworkingDemo.cpp\ | ||||
../../../Source/Demos/OpenGLDemo.cpp\ | ../../../Source/Demos/OpenGLDemo.cpp\ | ||||
../../../Source/Demos/OpenGLDemo2D.cpp\ | |||||
../../../Source/Demos/PropertiesDemo.cpp\ | ../../../Source/Demos/PropertiesDemo.cpp\ | ||||
../../../Source/Demos/SystemInfoDemo.cpp\ | ../../../Source/Demos/SystemInfoDemo.cpp\ | ||||
../../../Source/Demos/TimersAndEventsDemo.cpp\ | ../../../Source/Demos/TimersAndEventsDemo.cpp\ | ||||
@@ -79,6 +79,7 @@ OBJECTS := \ | |||||
$(OBJDIR)/MultiTouch_595f3a2e.o \ | $(OBJDIR)/MultiTouch_595f3a2e.o \ | ||||
$(OBJDIR)/NetworkingDemo_fbd1b19f.o \ | $(OBJDIR)/NetworkingDemo_fbd1b19f.o \ | ||||
$(OBJDIR)/OpenGLDemo_fdac55da.o \ | $(OBJDIR)/OpenGLDemo_fdac55da.o \ | ||||
$(OBJDIR)/OpenGLDemo2D_48eeadec.o \ | |||||
$(OBJDIR)/PropertiesDemo_8ff1a8de.o \ | $(OBJDIR)/PropertiesDemo_8ff1a8de.o \ | ||||
$(OBJDIR)/SystemInfoDemo_984acd28.o \ | $(OBJDIR)/SystemInfoDemo_984acd28.o \ | ||||
$(OBJDIR)/TimersAndEventsDemo_f2656547.o \ | $(OBJDIR)/TimersAndEventsDemo_f2656547.o \ | ||||
@@ -263,6 +264,11 @@ $(OBJDIR)/OpenGLDemo_fdac55da.o: ../../Source/Demos/OpenGLDemo.cpp | |||||
@echo "Compiling OpenGLDemo.cpp" | @echo "Compiling OpenGLDemo.cpp" | ||||
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | ||||
$(OBJDIR)/OpenGLDemo2D_48eeadec.o: ../../Source/Demos/OpenGLDemo2D.cpp | |||||
-@mkdir -p $(OBJDIR) | |||||
@echo "Compiling OpenGLDemo2D.cpp" | |||||
@$(CXX) $(CXXFLAGS) -o "$@" -c "$<" | |||||
$(OBJDIR)/PropertiesDemo_8ff1a8de.o: ../../Source/Demos/PropertiesDemo.cpp | $(OBJDIR)/PropertiesDemo_8ff1a8de.o: ../../Source/Demos/PropertiesDemo.cpp | ||||
-@mkdir -p $(OBJDIR) | -@mkdir -p $(OBJDIR) | ||||
@echo "Compiling PropertiesDemo.cpp" | @echo "Compiling PropertiesDemo.cpp" | ||||
@@ -49,6 +49,7 @@ | |||||
2346D126B3690390A0925F06 = {isa = PBXBuildFile; fileRef = 24B00BED20980D12119C228F; }; | 2346D126B3690390A0925F06 = {isa = PBXBuildFile; fileRef = 24B00BED20980D12119C228F; }; | ||||
C54286354BE46CB39B4C5225 = {isa = PBXBuildFile; fileRef = FD46383E356A5DDC1AD53380; }; | C54286354BE46CB39B4C5225 = {isa = PBXBuildFile; fileRef = FD46383E356A5DDC1AD53380; }; | ||||
FE559832F5E168F0FF04CB6E = {isa = PBXBuildFile; fileRef = 2DA02BCCDBFD5BF2DA2D2FA9; }; | FE559832F5E168F0FF04CB6E = {isa = PBXBuildFile; fileRef = 2DA02BCCDBFD5BF2DA2D2FA9; }; | ||||
E635FA4F49200CDAE3E4E6F0 = {isa = PBXBuildFile; fileRef = 39A06D3252DDA6F97FB09495; }; | |||||
CDC1A7E9F07FBFDD5DA92031 = {isa = PBXBuildFile; fileRef = 5AB15A508A07934A89398A6B; }; | CDC1A7E9F07FBFDD5DA92031 = {isa = PBXBuildFile; fileRef = 5AB15A508A07934A89398A6B; }; | ||||
5B96583E8DAA4EA4EA1ACF18 = {isa = PBXBuildFile; fileRef = 84BAF97675BE522B63DC9A4B; }; | 5B96583E8DAA4EA4EA1ACF18 = {isa = PBXBuildFile; fileRef = 84BAF97675BE522B63DC9A4B; }; | ||||
372B92C7E54D51285649FDD1 = {isa = PBXBuildFile; fileRef = B731664FB9EEEBC618BAB5A0; }; | 372B92C7E54D51285649FDD1 = {isa = PBXBuildFile; fileRef = B731664FB9EEEBC618BAB5A0; }; | ||||
@@ -311,6 +312,7 @@ | |||||
38FB6ABB883ECAD52027CE19 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChildProcess.cpp"; path = "../../../../modules/juce_core/threads/juce_ChildProcess.cpp"; sourceTree = "SOURCE_ROOT"; }; | 38FB6ABB883ECAD52027CE19 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChildProcess.cpp"; path = "../../../../modules/juce_core/threads/juce_ChildProcess.cpp"; sourceTree = "SOURCE_ROOT"; }; | ||||
3924287A67ED97279455625B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChannelRemappingAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_ChannelRemappingAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; | 3924287A67ED97279455625B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChannelRemappingAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_ChannelRemappingAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; | ||||
393A46D91FB481557E4DF792 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_mac_CoreMidi.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_mac_CoreMidi.cpp"; sourceTree = "SOURCE_ROOT"; }; | 393A46D91FB481557E4DF792 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_mac_CoreMidi.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_mac_CoreMidi.cpp"; sourceTree = "SOURCE_ROOT"; }; | ||||
39A06D3252DDA6F97FB09495 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = OpenGLDemo2D.cpp; path = ../../Source/Demos/OpenGLDemo2D.cpp; sourceTree = "SOURCE_ROOT"; }; | |||||
39E4404D57A8B66DF520B66F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MACAddress.h"; path = "../../../../modules/juce_core/network/juce_MACAddress.h"; sourceTree = "SOURCE_ROOT"; }; | 39E4404D57A8B66DF520B66F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MACAddress.h"; path = "../../../../modules/juce_core/network/juce_MACAddress.h"; sourceTree = "SOURCE_ROOT"; }; | ||||
3A42694A047942A44E8216F5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_JPEGLoader.cpp"; path = "../../../../modules/juce_graphics/image_formats/juce_JPEGLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; | 3A42694A047942A44E8216F5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_JPEGLoader.cpp"; path = "../../../../modules/juce_graphics/image_formats/juce_JPEGLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; | ||||
3AB9E51994CD35A10F87EFF1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringArray.h"; path = "../../../../modules/juce_core/text/juce_StringArray.h"; sourceTree = "SOURCE_ROOT"; }; | 3AB9E51994CD35A10F87EFF1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringArray.h"; path = "../../../../modules/juce_core/text/juce_StringArray.h"; sourceTree = "SOURCE_ROOT"; }; | ||||
@@ -931,6 +933,7 @@ | |||||
E7A5AF3EBCFEEF8787F2D14F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiKeyboardComponent.cpp"; path = "../../../../modules/juce_audio_utils/gui/juce_MidiKeyboardComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; | E7A5AF3EBCFEEF8787F2D14F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiKeyboardComponent.cpp"; path = "../../../../modules/juce_audio_utils/gui/juce_MidiKeyboardComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; | ||||
E7EA99CD84E1EC598F4984DD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Array.h"; path = "../../../../modules/juce_core/containers/juce_Array.h"; sourceTree = "SOURCE_ROOT"; }; | E7EA99CD84E1EC598F4984DD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Array.h"; path = "../../../../modules/juce_core/containers/juce_Array.h"; sourceTree = "SOURCE_ROOT"; }; | ||||
E80CA3836329ED0EEC74BAE6 = {isa = PBXFileReference; lastKnownFileType = file.nib; name = RecentFilesMenuTemplate.nib; path = RecentFilesMenuTemplate.nib; sourceTree = "SOURCE_ROOT"; }; | E80CA3836329ED0EEC74BAE6 = {isa = PBXFileReference; lastKnownFileType = file.nib; name = RecentFilesMenuTemplate.nib; path = RecentFilesMenuTemplate.nib; sourceTree = "SOURCE_ROOT"; }; | ||||
E8B785D8DD9C49BC7FF5EA75 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGL_linux.h"; path = "../../../../modules/juce_opengl/native/juce_OpenGL_linux.h"; sourceTree = "SOURCE_ROOT"; }; | |||||
EA7D346CAE6A07C0B395816B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Decibels.h"; path = "../../../../modules/juce_audio_basics/effects/juce_Decibels.h"; sourceTree = "SOURCE_ROOT"; }; | EA7D346CAE6A07C0B395816B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Decibels.h"; path = "../../../../modules/juce_audio_basics/effects/juce_Decibels.h"; sourceTree = "SOURCE_ROOT"; }; | ||||
EACCBFA17F4D07ECE058EEBB = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = System/Library/Frameworks/CoreMIDI.framework; sourceTree = SDKROOT; }; | EACCBFA17F4D07ECE058EEBB = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = System/Library/Frameworks/CoreMIDI.framework; sourceTree = SDKROOT; }; | ||||
229D2DAADACF15540C3BBD15 = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = JuceDemo.app; sourceTree = "BUILT_PRODUCTS_DIR"; }; | 229D2DAADACF15540C3BBD15 = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = JuceDemo.app; sourceTree = "BUILT_PRODUCTS_DIR"; }; | ||||
@@ -939,7 +942,6 @@ | |||||
E7B21011F93915ADD2CC5DD9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GlyphArrangement.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.cpp"; sourceTree = "SOURCE_ROOT"; }; | E7B21011F93915ADD2CC5DD9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GlyphArrangement.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.cpp"; sourceTree = "SOURCE_ROOT"; }; | ||||
E7EE6BDC0E3A0739529AED91 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioSubsectionReader.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioSubsectionReader.cpp"; sourceTree = "SOURCE_ROOT"; }; | E7EE6BDC0E3A0739529AED91 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioSubsectionReader.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioSubsectionReader.cpp"; sourceTree = "SOURCE_ROOT"; }; | ||||
E8128A35828C860977FEC54C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatWriter.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatWriter.cpp"; sourceTree = "SOURCE_ROOT"; }; | E8128A35828C860977FEC54C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatWriter.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatWriter.cpp"; sourceTree = "SOURCE_ROOT"; }; | ||||
E8B785D8DD9C49BC7FF5EA75 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGL_linux.h"; path = "../../../../modules/juce_opengl/native/juce_OpenGL_linux.h"; sourceTree = "SOURCE_ROOT"; }; | |||||
E98EA1189613978EA4E78D85 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentListener.h"; path = "../../../../modules/juce_gui_basics/components/juce_ComponentListener.h"; sourceTree = "SOURCE_ROOT"; }; | E98EA1189613978EA4E78D85 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentListener.h"; path = "../../../../modules/juce_gui_basics/components/juce_ComponentListener.h"; sourceTree = "SOURCE_ROOT"; }; | ||||
E9A3E96E32C301EE817059C1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SliderPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_SliderPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; | E9A3E96E32C301EE817059C1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SliderPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_SliderPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; | ||||
E9B8B3FAECC80B66257B14F9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BlowFish.h"; path = "../../../../modules/juce_cryptography/encryption/juce_BlowFish.h"; sourceTree = "SOURCE_ROOT"; }; | E9B8B3FAECC80B66257B14F9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BlowFish.h"; path = "../../../../modules/juce_cryptography/encryption/juce_BlowFish.h"; sourceTree = "SOURCE_ROOT"; }; | ||||
@@ -1042,6 +1044,7 @@ | |||||
24B00BED20980D12119C228F, | 24B00BED20980D12119C228F, | ||||
FD46383E356A5DDC1AD53380, | FD46383E356A5DDC1AD53380, | ||||
2DA02BCCDBFD5BF2DA2D2FA9, | 2DA02BCCDBFD5BF2DA2D2FA9, | ||||
39A06D3252DDA6F97FB09495, | |||||
5AB15A508A07934A89398A6B, | 5AB15A508A07934A89398A6B, | ||||
84BAF97675BE522B63DC9A4B, | 84BAF97675BE522B63DC9A4B, | ||||
B731664FB9EEEBC618BAB5A0, | B731664FB9EEEBC618BAB5A0, | ||||
@@ -2288,6 +2291,7 @@ | |||||
2346D126B3690390A0925F06, | 2346D126B3690390A0925F06, | ||||
C54286354BE46CB39B4C5225, | C54286354BE46CB39B4C5225, | ||||
FE559832F5E168F0FF04CB6E, | FE559832F5E168F0FF04CB6E, | ||||
E635FA4F49200CDAE3E4E6F0, | |||||
CDC1A7E9F07FBFDD5DA92031, | CDC1A7E9F07FBFDD5DA92031, | ||||
5B96583E8DAA4EA4EA1ACF18, | 5B96583E8DAA4EA4EA1ACF18, | ||||
372B92C7E54D51285649FDD1, | 372B92C7E54D51285649FDD1, | ||||
@@ -153,6 +153,7 @@ | |||||
<ClCompile Include="..\..\Source\Demos\MultiTouch.cpp"/> | <ClCompile Include="..\..\Source\Demos\MultiTouch.cpp"/> | ||||
<ClCompile Include="..\..\Source\Demos\NetworkingDemo.cpp"/> | <ClCompile Include="..\..\Source\Demos\NetworkingDemo.cpp"/> | ||||
<ClCompile Include="..\..\Source\Demos\OpenGLDemo.cpp"/> | <ClCompile Include="..\..\Source\Demos\OpenGLDemo.cpp"/> | ||||
<ClCompile Include="..\..\Source\Demos\OpenGLDemo2D.cpp"/> | |||||
<ClCompile Include="..\..\Source\Demos\PropertiesDemo.cpp"/> | <ClCompile Include="..\..\Source\Demos\PropertiesDemo.cpp"/> | ||||
<ClCompile Include="..\..\Source\Demos\SystemInfoDemo.cpp"/> | <ClCompile Include="..\..\Source\Demos\SystemInfoDemo.cpp"/> | ||||
<ClCompile Include="..\..\Source\Demos\TimersAndEventsDemo.cpp"/> | <ClCompile Include="..\..\Source\Demos\TimersAndEventsDemo.cpp"/> | ||||
@@ -403,6 +403,9 @@ | |||||
<ClCompile Include="..\..\Source\Demos\OpenGLDemo.cpp"> | <ClCompile Include="..\..\Source\Demos\OpenGLDemo.cpp"> | ||||
<Filter>JuceDemo\Source\Demos</Filter> | <Filter>JuceDemo\Source\Demos</Filter> | ||||
</ClCompile> | </ClCompile> | ||||
<ClCompile Include="..\..\Source\Demos\OpenGLDemo2D.cpp"> | |||||
<Filter>JuceDemo\Source\Demos</Filter> | |||||
</ClCompile> | |||||
<ClCompile Include="..\..\Source\Demos\PropertiesDemo.cpp"> | <ClCompile Include="..\..\Source\Demos\PropertiesDemo.cpp"> | ||||
<Filter>JuceDemo\Source\Demos</Filter> | <Filter>JuceDemo\Source\Demos</Filter> | ||||
</ClCompile> | </ClCompile> | ||||
@@ -159,6 +159,7 @@ | |||||
<ClCompile Include="..\..\Source\Demos\MultiTouch.cpp"/> | <ClCompile Include="..\..\Source\Demos\MultiTouch.cpp"/> | ||||
<ClCompile Include="..\..\Source\Demos\NetworkingDemo.cpp"/> | <ClCompile Include="..\..\Source\Demos\NetworkingDemo.cpp"/> | ||||
<ClCompile Include="..\..\Source\Demos\OpenGLDemo.cpp"/> | <ClCompile Include="..\..\Source\Demos\OpenGLDemo.cpp"/> | ||||
<ClCompile Include="..\..\Source\Demos\OpenGLDemo2D.cpp"/> | |||||
<ClCompile Include="..\..\Source\Demos\PropertiesDemo.cpp"/> | <ClCompile Include="..\..\Source\Demos\PropertiesDemo.cpp"/> | ||||
<ClCompile Include="..\..\Source\Demos\SystemInfoDemo.cpp"/> | <ClCompile Include="..\..\Source\Demos\SystemInfoDemo.cpp"/> | ||||
<ClCompile Include="..\..\Source\Demos\TimersAndEventsDemo.cpp"/> | <ClCompile Include="..\..\Source\Demos\TimersAndEventsDemo.cpp"/> | ||||
@@ -403,6 +403,9 @@ | |||||
<ClCompile Include="..\..\Source\Demos\OpenGLDemo.cpp"> | <ClCompile Include="..\..\Source\Demos\OpenGLDemo.cpp"> | ||||
<Filter>JuceDemo\Source\Demos</Filter> | <Filter>JuceDemo\Source\Demos</Filter> | ||||
</ClCompile> | </ClCompile> | ||||
<ClCompile Include="..\..\Source\Demos\OpenGLDemo2D.cpp"> | |||||
<Filter>JuceDemo\Source\Demos</Filter> | |||||
</ClCompile> | |||||
<ClCompile Include="..\..\Source\Demos\PropertiesDemo.cpp"> | <ClCompile Include="..\..\Source\Demos\PropertiesDemo.cpp"> | ||||
<Filter>JuceDemo\Source\Demos</Filter> | <Filter>JuceDemo\Source\Demos</Filter> | ||||
</ClCompile> | </ClCompile> | ||||
@@ -159,6 +159,7 @@ | |||||
<ClCompile Include="..\..\Source\Demos\MultiTouch.cpp"/> | <ClCompile Include="..\..\Source\Demos\MultiTouch.cpp"/> | ||||
<ClCompile Include="..\..\Source\Demos\NetworkingDemo.cpp"/> | <ClCompile Include="..\..\Source\Demos\NetworkingDemo.cpp"/> | ||||
<ClCompile Include="..\..\Source\Demos\OpenGLDemo.cpp"/> | <ClCompile Include="..\..\Source\Demos\OpenGLDemo.cpp"/> | ||||
<ClCompile Include="..\..\Source\Demos\OpenGLDemo2D.cpp"/> | |||||
<ClCompile Include="..\..\Source\Demos\PropertiesDemo.cpp"/> | <ClCompile Include="..\..\Source\Demos\PropertiesDemo.cpp"/> | ||||
<ClCompile Include="..\..\Source\Demos\SystemInfoDemo.cpp"/> | <ClCompile Include="..\..\Source\Demos\SystemInfoDemo.cpp"/> | ||||
<ClCompile Include="..\..\Source\Demos\TimersAndEventsDemo.cpp"/> | <ClCompile Include="..\..\Source\Demos\TimersAndEventsDemo.cpp"/> | ||||
@@ -403,6 +403,9 @@ | |||||
<ClCompile Include="..\..\Source\Demos\OpenGLDemo.cpp"> | <ClCompile Include="..\..\Source\Demos\OpenGLDemo.cpp"> | ||||
<Filter>JuceDemo\Source\Demos</Filter> | <Filter>JuceDemo\Source\Demos</Filter> | ||||
</ClCompile> | </ClCompile> | ||||
<ClCompile Include="..\..\Source\Demos\OpenGLDemo2D.cpp"> | |||||
<Filter>JuceDemo\Source\Demos</Filter> | |||||
</ClCompile> | |||||
<ClCompile Include="..\..\Source\Demos\PropertiesDemo.cpp"> | <ClCompile Include="..\..\Source\Demos\PropertiesDemo.cpp"> | ||||
<Filter>JuceDemo\Source\Demos</Filter> | <Filter>JuceDemo\Source\Demos</Filter> | ||||
</ClCompile> | </ClCompile> | ||||
@@ -44,6 +44,7 @@ | |||||
2346D126B3690390A0925F06 = {isa = PBXBuildFile; fileRef = 24B00BED20980D12119C228F; }; | 2346D126B3690390A0925F06 = {isa = PBXBuildFile; fileRef = 24B00BED20980D12119C228F; }; | ||||
C54286354BE46CB39B4C5225 = {isa = PBXBuildFile; fileRef = FD46383E356A5DDC1AD53380; }; | C54286354BE46CB39B4C5225 = {isa = PBXBuildFile; fileRef = FD46383E356A5DDC1AD53380; }; | ||||
FE559832F5E168F0FF04CB6E = {isa = PBXBuildFile; fileRef = 2DA02BCCDBFD5BF2DA2D2FA9; }; | FE559832F5E168F0FF04CB6E = {isa = PBXBuildFile; fileRef = 2DA02BCCDBFD5BF2DA2D2FA9; }; | ||||
E635FA4F49200CDAE3E4E6F0 = {isa = PBXBuildFile; fileRef = 39A06D3252DDA6F97FB09495; }; | |||||
CDC1A7E9F07FBFDD5DA92031 = {isa = PBXBuildFile; fileRef = 5AB15A508A07934A89398A6B; }; | CDC1A7E9F07FBFDD5DA92031 = {isa = PBXBuildFile; fileRef = 5AB15A508A07934A89398A6B; }; | ||||
5B96583E8DAA4EA4EA1ACF18 = {isa = PBXBuildFile; fileRef = 84BAF97675BE522B63DC9A4B; }; | 5B96583E8DAA4EA4EA1ACF18 = {isa = PBXBuildFile; fileRef = 84BAF97675BE522B63DC9A4B; }; | ||||
372B92C7E54D51285649FDD1 = {isa = PBXBuildFile; fileRef = B731664FB9EEEBC618BAB5A0; }; | 372B92C7E54D51285649FDD1 = {isa = PBXBuildFile; fileRef = B731664FB9EEEBC618BAB5A0; }; | ||||
@@ -305,6 +306,7 @@ | |||||
38FB6ABB883ECAD52027CE19 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChildProcess.cpp"; path = "../../../../modules/juce_core/threads/juce_ChildProcess.cpp"; sourceTree = "SOURCE_ROOT"; }; | 38FB6ABB883ECAD52027CE19 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChildProcess.cpp"; path = "../../../../modules/juce_core/threads/juce_ChildProcess.cpp"; sourceTree = "SOURCE_ROOT"; }; | ||||
3924287A67ED97279455625B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChannelRemappingAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_ChannelRemappingAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; | 3924287A67ED97279455625B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChannelRemappingAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_ChannelRemappingAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; | ||||
393A46D91FB481557E4DF792 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_mac_CoreMidi.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_mac_CoreMidi.cpp"; sourceTree = "SOURCE_ROOT"; }; | 393A46D91FB481557E4DF792 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_mac_CoreMidi.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_mac_CoreMidi.cpp"; sourceTree = "SOURCE_ROOT"; }; | ||||
39A06D3252DDA6F97FB09495 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = OpenGLDemo2D.cpp; path = ../../Source/Demos/OpenGLDemo2D.cpp; sourceTree = "SOURCE_ROOT"; }; | |||||
39E4404D57A8B66DF520B66F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MACAddress.h"; path = "../../../../modules/juce_core/network/juce_MACAddress.h"; sourceTree = "SOURCE_ROOT"; }; | 39E4404D57A8B66DF520B66F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MACAddress.h"; path = "../../../../modules/juce_core/network/juce_MACAddress.h"; sourceTree = "SOURCE_ROOT"; }; | ||||
3A42694A047942A44E8216F5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_JPEGLoader.cpp"; path = "../../../../modules/juce_graphics/image_formats/juce_JPEGLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; | 3A42694A047942A44E8216F5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_JPEGLoader.cpp"; path = "../../../../modules/juce_graphics/image_formats/juce_JPEGLoader.cpp"; sourceTree = "SOURCE_ROOT"; }; | ||||
3AB9E51994CD35A10F87EFF1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringArray.h"; path = "../../../../modules/juce_core/text/juce_StringArray.h"; sourceTree = "SOURCE_ROOT"; }; | 3AB9E51994CD35A10F87EFF1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StringArray.h"; path = "../../../../modules/juce_core/text/juce_StringArray.h"; sourceTree = "SOURCE_ROOT"; }; | ||||
@@ -912,53 +914,52 @@ | |||||
E4BD5632ADD38CF8BAD38A76 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CallOutBox.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_CallOutBox.cpp"; sourceTree = "SOURCE_ROOT"; }; | E4BD5632ADD38CF8BAD38A76 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CallOutBox.cpp"; path = "../../../../modules/juce_gui_basics/windows/juce_CallOutBox.cpp"; sourceTree = "SOURCE_ROOT"; }; | ||||
E5058DD199CEC42ECE922239 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Justification.h"; path = "../../../../modules/juce_graphics/placement/juce_Justification.h"; sourceTree = "SOURCE_ROOT"; }; | E5058DD199CEC42ECE922239 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Justification.h"; path = "../../../../modules/juce_graphics/placement/juce_Justification.h"; sourceTree = "SOURCE_ROOT"; }; | ||||
E52756E1DB553ED02D829F61 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_cryptography/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; | E52756E1DB553ED02D829F61 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_module_info"; path = "../../../../modules/juce_cryptography/juce_module_info"; sourceTree = "SOURCE_ROOT"; }; | ||||
E5E02A3C4E942105FEDCA885 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChannelRemappingAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_ChannelRemappingAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; | |||||
E6333272C33612B6A7D6073E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_AudioCDBurner.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_AudioCDBurner.cpp"; sourceTree = "SOURCE_ROOT"; }; | E6333272C33612B6A7D6073E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_AudioCDBurner.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_AudioCDBurner.cpp"; sourceTree = "SOURCE_ROOT"; }; | ||||
E682A3A52BD15D5CA4933C12 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeParallelogram.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeParallelogram.h"; sourceTree = "SOURCE_ROOT"; }; | E682A3A52BD15D5CA4933C12 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeParallelogram.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeParallelogram.h"; sourceTree = "SOURCE_ROOT"; }; | ||||
E6E0ADA4E3632540A8ADC7D8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ConnectedChildProcess.cpp"; path = "../../../../modules/juce_events/interprocess/juce_ConnectedChildProcess.cpp"; sourceTree = "SOURCE_ROOT"; }; | E6E0ADA4E3632540A8ADC7D8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ConnectedChildProcess.cpp"; path = "../../../../modules/juce_events/interprocess/juce_ConnectedChildProcess.cpp"; sourceTree = "SOURCE_ROOT"; }; | ||||
E6E0FE3CBDBE2554B527CF60 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioSourcePlayer.cpp"; path = "../../../../modules/juce_audio_devices/sources/juce_AudioSourcePlayer.cpp"; sourceTree = "SOURCE_ROOT"; }; | E6E0FE3CBDBE2554B527CF60 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioSourcePlayer.cpp"; path = "../../../../modules/juce_audio_devices/sources/juce_AudioSourcePlayer.cpp"; sourceTree = "SOURCE_ROOT"; }; | ||||
E70A283A87989F5A1CEDE6A4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResamplingAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_ResamplingAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; | E70A283A87989F5A1CEDE6A4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResamplingAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_ResamplingAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; | ||||
E7113B21A18CD89165BAFD4B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Messaging.cpp"; path = "../../../../modules/juce_events/native/juce_android_Messaging.cpp"; sourceTree = "SOURCE_ROOT"; }; | E7113B21A18CD89165BAFD4B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Messaging.cpp"; path = "../../../../modules/juce_events/native/juce_android_Messaging.cpp"; sourceTree = "SOURCE_ROOT"; }; | ||||
E7A5AF3EBCFEEF8787F2D14F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiKeyboardComponent.cpp"; path = "../../../../modules/juce_audio_utils/gui/juce_MidiKeyboardComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||||
E7B21011F93915ADD2CC5DD9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GlyphArrangement.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.cpp"; sourceTree = "SOURCE_ROOT"; }; | E7B21011F93915ADD2CC5DD9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GlyphArrangement.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.cpp"; sourceTree = "SOURCE_ROOT"; }; | ||||
E7EA99CD84E1EC598F4984DD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Array.h"; path = "../../../../modules/juce_core/containers/juce_Array.h"; sourceTree = "SOURCE_ROOT"; }; | E7EA99CD84E1EC598F4984DD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Array.h"; path = "../../../../modules/juce_core/containers/juce_Array.h"; sourceTree = "SOURCE_ROOT"; }; | ||||
E7EE6BDC0E3A0739529AED91 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioSubsectionReader.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioSubsectionReader.cpp"; sourceTree = "SOURCE_ROOT"; }; | E7EE6BDC0E3A0739529AED91 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioSubsectionReader.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioSubsectionReader.cpp"; sourceTree = "SOURCE_ROOT"; }; | ||||
E8128A35828C860977FEC54C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatWriter.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatWriter.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||||
E8B785D8DD9C49BC7FF5EA75 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGL_linux.h"; path = "../../../../modules/juce_opengl/native/juce_OpenGL_linux.h"; sourceTree = "SOURCE_ROOT"; }; | E8B785D8DD9C49BC7FF5EA75 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGL_linux.h"; path = "../../../../modules/juce_opengl/native/juce_OpenGL_linux.h"; sourceTree = "SOURCE_ROOT"; }; | ||||
E98EA1189613978EA4E78D85 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentListener.h"; path = "../../../../modules/juce_gui_basics/components/juce_ComponentListener.h"; sourceTree = "SOURCE_ROOT"; }; | E98EA1189613978EA4E78D85 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentListener.h"; path = "../../../../modules/juce_gui_basics/components/juce_ComponentListener.h"; sourceTree = "SOURCE_ROOT"; }; | ||||
E9A3E96E32C301EE817059C1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SliderPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_SliderPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; | E9A3E96E32C301EE817059C1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SliderPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_SliderPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; | ||||
E9B8B3FAECC80B66257B14F9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BlowFish.h"; path = "../../../../modules/juce_cryptography/encryption/juce_BlowFish.h"; sourceTree = "SOURCE_ROOT"; }; | |||||
E9BBEE1B3986E0829AA44133 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImagePreviewComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.h"; sourceTree = "SOURCE_ROOT"; }; | E9BBEE1B3986E0829AA44133 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImagePreviewComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.h"; sourceTree = "SOURCE_ROOT"; }; | ||||
EA082125C757D1FD63BA38C5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentAnimator.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentAnimator.h"; sourceTree = "SOURCE_ROOT"; }; | EA082125C757D1FD63BA38C5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentAnimator.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentAnimator.h"; sourceTree = "SOURCE_ROOT"; }; | ||||
EACCBFA17F4D07ECE058EEBB = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = System/Library/Frameworks/CoreMIDI.framework; sourceTree = SDKROOT; }; | |||||
EB6F5F8F57F0117C10735583 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioIODevice.h"; path = "../../../../modules/juce_audio_devices/audio_io/juce_AudioIODevice.h"; sourceTree = "SOURCE_ROOT"; }; | |||||
ED3DE86815324354C48631D0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_XMLCodeTokeniser.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_XMLCodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; }; | |||||
ED6224ABC715AAB68661F4D4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_box2d.cpp"; path = "../../../../modules/juce_box2d/juce_box2d.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||||
F1E995A1E00C6545A4C3297B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = KeyMappingsDemo.cpp; path = ../../Source/Demos/KeyMappingsDemo.cpp; sourceTree = "SOURCE_ROOT"; }; | |||||
FBCD860CD7113A3136B127C8 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; }; | |||||
229D2DAADACF15540C3BBD15 = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = JuceDemo.app; sourceTree = "BUILT_PRODUCTS_DIR"; }; | |||||
E34DFFF51D0F7C34FB826C4C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FloatVectorOperations.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_FloatVectorOperations.h"; sourceTree = "SOURCE_ROOT"; }; | |||||
E7A5AF3EBCFEEF8787F2D14F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiKeyboardComponent.cpp"; path = "../../../../modules/juce_audio_utils/gui/juce_MidiKeyboardComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||||
E8128A35828C860977FEC54C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatWriter.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatWriter.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||||
E9B8B3FAECC80B66257B14F9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BlowFish.h"; path = "../../../../modules/juce_cryptography/encryption/juce_BlowFish.h"; sourceTree = "SOURCE_ROOT"; }; | |||||
EA3436079F0D78BB76CD15F7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseInactivityDetector.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseInactivityDetector.h"; sourceTree = "SOURCE_ROOT"; }; | EA3436079F0D78BB76CD15F7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseInactivityDetector.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseInactivityDetector.h"; sourceTree = "SOURCE_ROOT"; }; | ||||
EA7D346CAE6A07C0B395816B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Decibels.h"; path = "../../../../modules/juce_audio_basics/effects/juce_Decibels.h"; sourceTree = "SOURCE_ROOT"; }; | EA7D346CAE6A07C0B395816B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Decibels.h"; path = "../../../../modules/juce_audio_basics/effects/juce_Decibels.h"; sourceTree = "SOURCE_ROOT"; }; | ||||
EA9FE6D1E0A072E73312916C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentDragger.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_ComponentDragger.h"; sourceTree = "SOURCE_ROOT"; }; | EA9FE6D1E0A072E73312916C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentDragger.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_ComponentDragger.h"; sourceTree = "SOURCE_ROOT"; }; | ||||
EACCBFA17F4D07ECE058EEBB = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = System/Library/Frameworks/CoreMIDI.framework; sourceTree = SDKROOT; }; | |||||
EB369EA30D31CD710A09B7FD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_MessageManager.mm"; path = "../../../../modules/juce_events/native/juce_ios_MessageManager.mm"; sourceTree = "SOURCE_ROOT"; }; | EB369EA30D31CD710A09B7FD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_MessageManager.mm"; path = "../../../../modules/juce_events/native/juce_ios_MessageManager.mm"; sourceTree = "SOURCE_ROOT"; }; | ||||
EB6F5F8F57F0117C10735583 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioIODevice.h"; path = "../../../../modules/juce_audio_devices/audio_io/juce_AudioIODevice.h"; sourceTree = "SOURCE_ROOT"; }; | |||||
EC8A992EA9CFA558DB9F950E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharacterFunctions.h"; path = "../../../../modules/juce_core/text/juce_CharacterFunctions.h"; sourceTree = "SOURCE_ROOT"; }; | EC8A992EA9CFA558DB9F950E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharacterFunctions.h"; path = "../../../../modules/juce_core/text/juce_CharacterFunctions.h"; sourceTree = "SOURCE_ROOT"; }; | ||||
ECAB8BD2816B0BEFCD9F6961 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AsyncUpdater.h"; path = "../../../../modules/juce_events/broadcasters/juce_AsyncUpdater.h"; sourceTree = "SOURCE_ROOT"; }; | ECAB8BD2816B0BEFCD9F6961 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AsyncUpdater.h"; path = "../../../../modules/juce_events/broadcasters/juce_AsyncUpdater.h"; sourceTree = "SOURCE_ROOT"; }; | ||||
ED3DE86815324354C48631D0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_XMLCodeTokeniser.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_XMLCodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; }; | |||||
ED6224ABC715AAB68661F4D4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_box2d.cpp"; path = "../../../../modules/juce_box2d/juce_box2d.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||||
ED80E9909586DD64BDE03A70 = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = portmeirion.jpg; path = ../../Resources/portmeirion.jpg; sourceTree = "SOURCE_ROOT"; }; | |||||
EE7001BD5206A8D8EA2D125B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RectangleList.h"; path = "../../../../modules/juce_graphics/geometry/juce_RectangleList.h"; sourceTree = "SOURCE_ROOT"; }; | EE7001BD5206A8D8EA2D125B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RectangleList.h"; path = "../../../../modules/juce_graphics/geometry/juce_RectangleList.h"; sourceTree = "SOURCE_ROOT"; }; | ||||
EEA020419EF58E90C10AAE26 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_ResizableWindow.h"; sourceTree = "SOURCE_ROOT"; }; | EEA020419EF58E90C10AAE26 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_ResizableWindow.h"; sourceTree = "SOURCE_ROOT"; }; | ||||
EEAA1BB6254EDE07A7ABAD65 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_IIRFilterAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_IIRFilterAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; | |||||
EF8055850F3DEA173761E3B5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MessageManager.cpp"; path = "../../../../modules/juce_events/messages/juce_MessageManager.cpp"; sourceTree = "SOURCE_ROOT"; }; | EF8055850F3DEA173761E3B5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MessageManager.cpp"; path = "../../../../modules/juce_events/messages/juce_MessageManager.cpp"; sourceTree = "SOURCE_ROOT"; }; | ||||
EFD1BD42000EE640A17EE1ED = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatReaderSource.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatReaderSource.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||||
EFD480AA79620EC53C2686EA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Draggable3DOrientation.h"; path = "../../../../modules/juce_opengl/opengl/juce_Draggable3DOrientation.h"; sourceTree = "SOURCE_ROOT"; }; | EFD480AA79620EC53C2686EA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Draggable3DOrientation.h"; path = "../../../../modules/juce_opengl/opengl/juce_Draggable3DOrientation.h"; sourceTree = "SOURCE_ROOT"; }; | ||||
F037091D4A3012EBBA1E808F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyboardFocusTraverser.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyboardFocusTraverser.cpp"; sourceTree = "SOURCE_ROOT"; }; | F037091D4A3012EBBA1E808F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_KeyboardFocusTraverser.cpp"; path = "../../../../modules/juce_gui_basics/keyboard/juce_KeyboardFocusTraverser.cpp"; sourceTree = "SOURCE_ROOT"; }; | ||||
F0ACCF70936A0BBA2A2AB289 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Value.cpp"; path = "../../../../modules/juce_data_structures/values/juce_Value.cpp"; sourceTree = "SOURCE_ROOT"; }; | F0ACCF70936A0BBA2A2AB289 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Value.cpp"; path = "../../../../modules/juce_data_structures/values/juce_Value.cpp"; sourceTree = "SOURCE_ROOT"; }; | ||||
F1A30E40F7388D16BA35B0DB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SHA256.cpp"; path = "../../../../modules/juce_cryptography/hashing/juce_SHA256.cpp"; sourceTree = "SOURCE_ROOT"; }; | F1A30E40F7388D16BA35B0DB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SHA256.cpp"; path = "../../../../modules/juce_cryptography/hashing/juce_SHA256.cpp"; sourceTree = "SOURCE_ROOT"; }; | ||||
F1E995A1E00C6545A4C3297B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = KeyMappingsDemo.cpp; path = ../../Source/Demos/KeyMappingsDemo.cpp; sourceTree = "SOURCE_ROOT"; }; | |||||
F29F6395C4935C1A663A1D15 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GZIPDecompressorInputStream.h"; path = "../../../../modules/juce_core/zip/juce_GZIPDecompressorInputStream.h"; sourceTree = "SOURCE_ROOT"; }; | |||||
F380FE12E78619086BA33CDB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InterprocessConnection.cpp"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnection.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||||
F91A3C07D81BE2D4A191C9A2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Timer.h"; path = "../../../../modules/juce_events/timers/juce_Timer.h"; sourceTree = "SOURCE_ROOT"; }; | |||||
FBCD860CD7113A3136B127C8 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; }; | |||||
229D2DAADACF15540C3BBD15 = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = JuceDemo.app; sourceTree = "BUILT_PRODUCTS_DIR"; }; | |||||
E34DFFF51D0F7C34FB826C4C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FloatVectorOperations.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_FloatVectorOperations.h"; sourceTree = "SOURCE_ROOT"; }; | |||||
E5E02A3C4E942105FEDCA885 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChannelRemappingAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_ChannelRemappingAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; | |||||
ED80E9909586DD64BDE03A70 = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = portmeirion.jpg; path = ../../Resources/portmeirion.jpg; sourceTree = "SOURCE_ROOT"; }; | |||||
EEAA1BB6254EDE07A7ABAD65 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_IIRFilterAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_IIRFilterAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; | |||||
EFD1BD42000EE640A17EE1ED = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatReaderSource.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatReaderSource.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||||
F1A9F544E889DDA995415F6D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSourcePlayer.h"; path = "../../../../modules/juce_audio_devices/sources/juce_AudioSourcePlayer.h"; sourceTree = "SOURCE_ROOT"; }; | F1A9F544E889DDA995415F6D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSourcePlayer.h"; path = "../../../../modules/juce_audio_devices/sources/juce_AudioSourcePlayer.h"; sourceTree = "SOURCE_ROOT"; }; | ||||
F26339EFC03BD8D22016EEB6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HeapBlock.h"; path = "../../../../modules/juce_core/memory/juce_HeapBlock.h"; sourceTree = "SOURCE_ROOT"; }; | F26339EFC03BD8D22016EEB6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_HeapBlock.h"; path = "../../../../modules/juce_core/memory/juce_HeapBlock.h"; sourceTree = "SOURCE_ROOT"; }; | ||||
F29F6395C4935C1A663A1D15 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GZIPDecompressorInputStream.h"; path = "../../../../modules/juce_core/zip/juce_GZIPDecompressorInputStream.h"; sourceTree = "SOURCE_ROOT"; }; | |||||
F380FE12E78619086BA33CDB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InterprocessConnection.cpp"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnection.cpp"; sourceTree = "SOURCE_ROOT"; }; | |||||
F3A9E0AE5ED05CA1AD6F56E5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemAudioVolume.h"; path = "../../../../modules/juce_audio_devices/audio_io/juce_SystemAudioVolume.h"; sourceTree = "SOURCE_ROOT"; }; | F3A9E0AE5ED05CA1AD6F56E5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SystemAudioVolume.h"; path = "../../../../modules/juce_audio_devices/audio_io/juce_SystemAudioVolume.h"; sourceTree = "SOURCE_ROOT"; }; | ||||
F3AF542BB3A9E6CC1D6E37DD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PluginListComponent.cpp"; path = "../../../../modules/juce_audio_processors/scanning/juce_PluginListComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; | F3AF542BB3A9E6CC1D6E37DD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PluginListComponent.cpp"; path = "../../../../modules/juce_audio_processors/scanning/juce_PluginListComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; | ||||
F3B746DC92EFE7A9B8EA9E43 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UndoableAction.h"; path = "../../../../modules/juce_data_structures/undomanager/juce_UndoableAction.h"; sourceTree = "SOURCE_ROOT"; }; | F3B746DC92EFE7A9B8EA9E43 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_UndoableAction.h"; path = "../../../../modules/juce_data_structures/undomanager/juce_UndoableAction.h"; sourceTree = "SOURCE_ROOT"; }; | ||||
@@ -981,6 +982,7 @@ | |||||
F843FC09B4C2A10C76D8D35C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PluginDirectoryScanner.cpp"; path = "../../../../modules/juce_audio_processors/scanning/juce_PluginDirectoryScanner.cpp"; sourceTree = "SOURCE_ROOT"; }; | F843FC09B4C2A10C76D8D35C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PluginDirectoryScanner.cpp"; path = "../../../../modules/juce_audio_processors/scanning/juce_PluginDirectoryScanner.cpp"; sourceTree = "SOURCE_ROOT"; }; | ||||
F881704607DB79F9A3CF7491 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Audio.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_android_Audio.cpp"; sourceTree = "SOURCE_ROOT"; }; | F881704607DB79F9A3CF7491 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Audio.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_android_Audio.cpp"; sourceTree = "SOURCE_ROOT"; }; | ||||
F89584972F16A8EC49E5E74D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeCoordinatePositioner.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.h"; sourceTree = "SOURCE_ROOT"; }; | F89584972F16A8EC49E5E74D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeCoordinatePositioner.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.h"; sourceTree = "SOURCE_ROOT"; }; | ||||
F91A3C07D81BE2D4A191C9A2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Timer.h"; path = "../../../../modules/juce_events/timers/juce_Timer.h"; sourceTree = "SOURCE_ROOT"; }; | |||||
F965E478C21D19EF32760A9C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FilePreviewComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FilePreviewComponent.h"; sourceTree = "SOURCE_ROOT"; }; | F965E478C21D19EF32760A9C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FilePreviewComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FilePreviewComponent.h"; sourceTree = "SOURCE_ROOT"; }; | ||||
F97F775EDCD2D1C497625D4F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Fonts.mm"; path = "../../../../modules/juce_graphics/native/juce_mac_Fonts.mm"; sourceTree = "SOURCE_ROOT"; }; | F97F775EDCD2D1C497625D4F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Fonts.mm"; path = "../../../../modules/juce_graphics/native/juce_mac_Fonts.mm"; sourceTree = "SOURCE_ROOT"; }; | ||||
F98BEA2FEE66A3DEAD9D43B1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_mac_SystemTrayIcon.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_mac_SystemTrayIcon.cpp"; sourceTree = "SOURCE_ROOT"; }; | F98BEA2FEE66A3DEAD9D43B1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_mac_SystemTrayIcon.cpp"; path = "../../../../modules/juce_gui_extra/native/juce_mac_SystemTrayIcon.cpp"; sourceTree = "SOURCE_ROOT"; }; | ||||
@@ -1032,6 +1034,7 @@ | |||||
24B00BED20980D12119C228F, | 24B00BED20980D12119C228F, | ||||
FD46383E356A5DDC1AD53380, | FD46383E356A5DDC1AD53380, | ||||
2DA02BCCDBFD5BF2DA2D2FA9, | 2DA02BCCDBFD5BF2DA2D2FA9, | ||||
39A06D3252DDA6F97FB09495, | |||||
5AB15A508A07934A89398A6B, | 5AB15A508A07934A89398A6B, | ||||
84BAF97675BE522B63DC9A4B, | 84BAF97675BE522B63DC9A4B, | ||||
B731664FB9EEEBC618BAB5A0, | B731664FB9EEEBC618BAB5A0, | ||||
@@ -2270,6 +2273,7 @@ | |||||
2346D126B3690390A0925F06, | 2346D126B3690390A0925F06, | ||||
C54286354BE46CB39B4C5225, | C54286354BE46CB39B4C5225, | ||||
FE559832F5E168F0FF04CB6E, | FE559832F5E168F0FF04CB6E, | ||||
E635FA4F49200CDAE3E4E6F0, | |||||
CDC1A7E9F07FBFDD5DA92031, | CDC1A7E9F07FBFDD5DA92031, | ||||
5B96583E8DAA4EA4EA1ACF18, | 5B96583E8DAA4EA4EA1ACF18, | ||||
372B92C7E54D51285649FDD1, | 372B92C7E54D51285649FDD1, | ||||
@@ -250,6 +250,8 @@ | |||||
<FILE id="iii6RP" name="NetworkingDemo.cpp" compile="1" resource="0" | <FILE id="iii6RP" name="NetworkingDemo.cpp" compile="1" resource="0" | ||||
file="Source/Demos/NetworkingDemo.cpp"/> | file="Source/Demos/NetworkingDemo.cpp"/> | ||||
<FILE id="r2PxPF" name="OpenGLDemo.cpp" compile="1" resource="0" file="Source/Demos/OpenGLDemo.cpp"/> | <FILE id="r2PxPF" name="OpenGLDemo.cpp" compile="1" resource="0" file="Source/Demos/OpenGLDemo.cpp"/> | ||||
<FILE id="SXYKYN" name="OpenGLDemo2D.cpp" compile="1" resource="0" | |||||
file="Source/Demos/OpenGLDemo2D.cpp"/> | |||||
<FILE id="b2eKRP" name="PropertiesDemo.cpp" compile="1" resource="0" | <FILE id="b2eKRP" name="PropertiesDemo.cpp" compile="1" resource="0" | ||||
file="Source/Demos/PropertiesDemo.cpp"/> | file="Source/Demos/PropertiesDemo.cpp"/> | ||||
<FILE id="cmVbyh" name="SystemInfoDemo.cpp" compile="1" resource="0" | <FILE id="cmVbyh" name="SystemInfoDemo.cpp" compile="1" resource="0" | ||||
@@ -24,6 +24,9 @@ | |||||
*/ | */ | ||||
#include "../JuceDemoHeader.h" | #include "../JuceDemoHeader.h" | ||||
#if JUCE_OPENGL | |||||
#include "WavefrontObjParser.h" | #include "WavefrontObjParser.h" | ||||
@@ -97,7 +100,7 @@ struct OpenGLDemoClasses | |||||
OpenGLShaderProgram& shader, | OpenGLShaderProgram& shader, | ||||
const char* attributeName) | const char* attributeName) | ||||
{ | { | ||||
if (openGLContext.extensions.glGetAttribLocation (shader.programID, attributeName) < 0) | |||||
if (openGLContext.extensions.glGetAttribLocation (shader.getProgramID(), attributeName) < 0) | |||||
return nullptr; | return nullptr; | ||||
return new OpenGLShaderProgram::Attribute (shader, attributeName); | return new OpenGLShaderProgram::Attribute (shader, attributeName); | ||||
@@ -124,7 +127,7 @@ struct OpenGLDemoClasses | |||||
OpenGLShaderProgram& shader, | OpenGLShaderProgram& shader, | ||||
const char* uniformName) | const char* uniformName) | ||||
{ | { | ||||
if (openGLContext.extensions.glGetUniformLocation (shader.programID, uniformName) < 0) | |||||
if (openGLContext.extensions.glGetUniformLocation (shader.getProgramID(), uniformName) < 0) | |||||
return nullptr; | return nullptr; | ||||
return new OpenGLShaderProgram::Uniform (shader, uniformName); | return new OpenGLShaderProgram::Uniform (shader, uniformName); | ||||
@@ -864,7 +867,7 @@ struct OpenGLDemoClasses | |||||
"varying vec2 textureCoordOut;\n" | "varying vec2 textureCoordOut;\n" | ||||
"varying float lightIntensity;\n" | "varying float lightIntensity;\n" | ||||
"\n" | "\n" | ||||
"void main (void)\n" | |||||
"void main()\n" | |||||
"{\n" | "{\n" | ||||
" destinationColour = sourceColour;\n" | " destinationColour = sourceColour;\n" | ||||
" textureCoordOut = texureCoordIn;\n" | " textureCoordOut = texureCoordIn;\n" | ||||
@@ -888,7 +891,7 @@ struct OpenGLDemoClasses | |||||
"\n" | "\n" | ||||
"uniform sampler2D texture;\n" | "uniform sampler2D texture;\n" | ||||
"\n" | "\n" | ||||
"void main (void)\n" | |||||
"void main()\n" | |||||
"{\n" | "{\n" | ||||
#if JUCE_OPENGL_ES | #if JUCE_OPENGL_ES | ||||
" highp float l = max (0.3, lightIntensity * 0.3);\n" | " highp float l = max (0.3, lightIntensity * 0.3);\n" | ||||
@@ -915,7 +918,7 @@ struct OpenGLDemoClasses | |||||
"varying vec4 destinationColour;\n" | "varying vec4 destinationColour;\n" | ||||
"varying vec2 textureCoordOut;\n" | "varying vec2 textureCoordOut;\n" | ||||
"\n" | "\n" | ||||
"void main (void)\n" | |||||
"void main()\n" | |||||
"{\n" | "{\n" | ||||
" destinationColour = sourceColour;\n" | " destinationColour = sourceColour;\n" | ||||
" textureCoordOut = texureCoordIn;\n" | " textureCoordOut = texureCoordIn;\n" | ||||
@@ -933,7 +936,7 @@ struct OpenGLDemoClasses | |||||
"\n" | "\n" | ||||
"uniform sampler2D texture;\n" | "uniform sampler2D texture;\n" | ||||
"\n" | "\n" | ||||
"void main (void)\n" | |||||
"void main()\n" | |||||
"{\n" | "{\n" | ||||
" gl_FragColor = texture2D (texture, textureCoordOut);\n" | " gl_FragColor = texture2D (texture, textureCoordOut);\n" | ||||
"}\n" | "}\n" | ||||
@@ -953,7 +956,7 @@ struct OpenGLDemoClasses | |||||
"varying vec4 destinationColour;\n" | "varying vec4 destinationColour;\n" | ||||
"varying vec2 textureCoordOut;\n" | "varying vec2 textureCoordOut;\n" | ||||
"\n" | "\n" | ||||
"void main (void)\n" | |||||
"void main()\n" | |||||
"{\n" | "{\n" | ||||
" destinationColour = sourceColour;\n" | " destinationColour = sourceColour;\n" | ||||
" textureCoordOut = texureCoordIn;\n" | " textureCoordOut = texureCoordIn;\n" | ||||
@@ -971,7 +974,7 @@ struct OpenGLDemoClasses | |||||
"\n" | "\n" | ||||
"uniform sampler2D texture;\n" | "uniform sampler2D texture;\n" | ||||
"\n" | "\n" | ||||
"void main (void)\n" | |||||
"void main()\n" | |||||
"{\n" | "{\n" | ||||
" gl_FragColor = destinationColour;\n" | " gl_FragColor = destinationColour;\n" | ||||
"}\n" | "}\n" | ||||
@@ -995,7 +998,7 @@ struct OpenGLDemoClasses | |||||
"varying float yPos;\n" | "varying float yPos;\n" | ||||
"varying float zPos;\n" | "varying float zPos;\n" | ||||
"\n" | "\n" | ||||
"void main (void)\n" | |||||
"void main()\n" | |||||
"{\n" | "{\n" | ||||
" vec4 v = vec4 (position);\n" | " vec4 v = vec4 (position);\n" | ||||
" xPos = clamp (v.x, 0.0, 1.0);\n" | " xPos = clamp (v.x, 0.0, 1.0);\n" | ||||
@@ -1019,7 +1022,7 @@ struct OpenGLDemoClasses | |||||
"varying float zPos;\n" | "varying float zPos;\n" | ||||
#endif | #endif | ||||
"\n" | "\n" | ||||
"void main (void)\n" | |||||
"void main()\n" | |||||
"{\n" | "{\n" | ||||
" gl_FragColor = vec4 (xPos, yPos, zPos, 1.0);\n" | " gl_FragColor = vec4 (xPos, yPos, zPos, 1.0);\n" | ||||
"}" | "}" | ||||
@@ -1037,7 +1040,7 @@ struct OpenGLDemoClasses | |||||
"\n" | "\n" | ||||
"varying vec2 textureCoordOut;\n" | "varying vec2 textureCoordOut;\n" | ||||
"\n" | "\n" | ||||
"void main (void)\n" | |||||
"void main()\n" | |||||
"{\n" | "{\n" | ||||
" textureCoordOut = texureCoordIn;\n" | " textureCoordOut = texureCoordIn;\n" | ||||
" gl_Position = projectionMatrix * viewMatrix * position;\n" | " gl_Position = projectionMatrix * viewMatrix * position;\n" | ||||
@@ -1054,7 +1057,7 @@ struct OpenGLDemoClasses | |||||
#endif | #endif | ||||
"uniform float bouncingNumber;\n" | "uniform float bouncingNumber;\n" | ||||
"\n" | "\n" | ||||
"void main (void)\n" | |||||
"void main()\n" | |||||
"{\n" | "{\n" | ||||
" float b = bouncingNumber;\n" | " float b = bouncingNumber;\n" | ||||
" float n = b * PI * 2.0;\n" | " float n = b * PI * 2.0;\n" | ||||
@@ -1079,7 +1082,7 @@ struct OpenGLDemoClasses | |||||
"\n" | "\n" | ||||
"varying float lightIntensity;\n" | "varying float lightIntensity;\n" | ||||
"\n" | "\n" | ||||
"void main (void)\n" | |||||
"void main()\n" | |||||
"{\n" | "{\n" | ||||
" vec4 light = viewMatrix * lightPosition;\n" | " vec4 light = viewMatrix * lightPosition;\n" | ||||
" lightIntensity = dot (light, normal);\n" | " lightIntensity = dot (light, normal);\n" | ||||
@@ -1094,7 +1097,7 @@ struct OpenGLDemoClasses | |||||
"varying float lightIntensity;\n" | "varying float lightIntensity;\n" | ||||
#endif | #endif | ||||
"\n" | "\n" | ||||
"void main (void)\n" | |||||
"void main()\n" | |||||
"{\n" | "{\n" | ||||
#if JUCE_OPENGL_ES | #if JUCE_OPENGL_ES | ||||
" highp float l = lightIntensity * 0.25;\n" | " highp float l = lightIntensity * 0.25;\n" | ||||
@@ -1121,7 +1124,7 @@ struct OpenGLDemoClasses | |||||
"\n" | "\n" | ||||
"varying float lightIntensity;\n" | "varying float lightIntensity;\n" | ||||
"\n" | "\n" | ||||
"void main (void)\n" | |||||
"void main()\n" | |||||
"{\n" | "{\n" | ||||
" vec4 light = viewMatrix * lightPosition;\n" | " vec4 light = viewMatrix * lightPosition;\n" | ||||
" lightIntensity = dot (light, normal);\n" | " lightIntensity = dot (light, normal);\n" | ||||
@@ -1139,7 +1142,7 @@ struct OpenGLDemoClasses | |||||
"varying float lightIntensity;\n" | "varying float lightIntensity;\n" | ||||
#endif | #endif | ||||
"\n" | "\n" | ||||
"void main (void)\n" | |||||
"void main()\n" | |||||
"{\n" | "{\n" | ||||
#if JUCE_OPENGL_ES | #if JUCE_OPENGL_ES | ||||
" highp float l = lightIntensity * 0.25;\n" | " highp float l = lightIntensity * 0.25;\n" | ||||
@@ -1166,7 +1169,7 @@ struct OpenGLDemoClasses | |||||
"\n" | "\n" | ||||
"varying float lightIntensity;\n" | "varying float lightIntensity;\n" | ||||
"\n" | "\n" | ||||
"void main (void)\n" | |||||
"void main()\n" | |||||
"{\n" | "{\n" | ||||
" vec4 light = viewMatrix * lightPosition;\n" | " vec4 light = viewMatrix * lightPosition;\n" | ||||
" lightIntensity = dot (light, normal);\n" | " lightIntensity = dot (light, normal);\n" | ||||
@@ -1181,7 +1184,7 @@ struct OpenGLDemoClasses | |||||
"varying float lightIntensity;\n" | "varying float lightIntensity;\n" | ||||
#endif | #endif | ||||
"\n" | "\n" | ||||
"void main (void)\n" | |||||
"void main()\n" | |||||
"{\n" | "{\n" | ||||
#if JUCE_OPENGL_ES | #if JUCE_OPENGL_ES | ||||
" highp float intensity = lightIntensity * 0.5;\n" | " highp float intensity = lightIntensity * 0.5;\n" | ||||
@@ -1211,3 +1214,5 @@ struct OpenGLDemoClasses | |||||
// This static object will register this demo type in a global list of demos.. | // This static object will register this demo type in a global list of demos.. | ||||
static JuceDemoType<OpenGLDemoClasses::OpenGLDemo> demo ("20 Graphics: OpenGL"); | static JuceDemoType<OpenGLDemoClasses::OpenGLDemo> demo ("20 Graphics: OpenGL"); | ||||
#endif |
@@ -0,0 +1,250 @@ | |||||
/* | |||||
============================================================================== | |||||
This file is part of the JUCE library - "Jules' Utility Class Extensions" | |||||
Copyright 2004-12 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. | |||||
============================================================================== | |||||
*/ | |||||
#include "../JuceDemoHeader.h" | |||||
#if JUCE_OPENGL | |||||
//============================================================================== | |||||
class OpenGL2DShaderDemo : public Component, | |||||
private CodeDocument::Listener, | |||||
private ComboBox::Listener, | |||||
private Timer | |||||
{ | |||||
public: | |||||
OpenGL2DShaderDemo() | |||||
: fragmentEditorComp (fragmentDocument, nullptr) | |||||
{ | |||||
setOpaque (true); | |||||
MainAppWindow::getMainAppWindow()->setOpenGLRenderingEngine(); | |||||
addAndMakeVisible (statusLabel); | |||||
statusLabel.setJustificationType (Justification::topLeft); | |||||
statusLabel.setColour (Label::textColourId, Colours::black); | |||||
statusLabel.setFont (Font (14.0f)); | |||||
Array<ShaderPreset> presets (getPresets()); | |||||
StringArray presetNames; | |||||
for (int i = 0; i < presets.size(); ++i) | |||||
presetBox.addItem (presets[i].name, i + 1); | |||||
addAndMakeVisible (presetLabel); | |||||
presetLabel.setText ("Shader Preset:", dontSendNotification); | |||||
presetLabel.attachToComponent (&presetBox, true); | |||||
addAndMakeVisible (presetBox); | |||||
presetBox.addListener (this); | |||||
Colour editorBackground (Colours::white.withAlpha (0.6f)); | |||||
fragmentEditorComp.setColour (CodeEditorComponent::backgroundColourId, editorBackground); | |||||
fragmentEditorComp.setOpaque (false); | |||||
fragmentDocument.addListener (this); | |||||
addAndMakeVisible (fragmentEditorComp); | |||||
presetBox.setSelectedItemIndex (0); | |||||
} | |||||
~OpenGL2DShaderDemo() | |||||
{ | |||||
shader = nullptr; | |||||
} | |||||
void paint (Graphics& g) | |||||
{ | |||||
g.fillCheckerBoard (getLocalBounds(), 48, 48, Colours::lightgrey, Colours::white); | |||||
if (shader == nullptr || shader->getFragmentShaderCode() != fragmentCode) | |||||
{ | |||||
shader = nullptr; | |||||
if (fragmentCode.isNotEmpty()) | |||||
{ | |||||
shader = new OpenGLGraphicsContextCustomShader (fragmentCode); | |||||
Result result (shader->checkCompilation (g.getInternalContext())); | |||||
if (result.failed()) | |||||
{ | |||||
statusLabel.setText (result.getErrorMessage(), dontSendNotification); | |||||
shader = nullptr; | |||||
} | |||||
} | |||||
} | |||||
if (shader != nullptr) | |||||
{ | |||||
statusLabel.setText (String::empty, dontSendNotification); | |||||
shader->fillRect (g.getInternalContext(), getLocalBounds()); | |||||
} | |||||
} | |||||
void resized() override | |||||
{ | |||||
Rectangle<int> area (getLocalBounds().reduced (4)); | |||||
statusLabel.setBounds (area.removeFromTop (75)); | |||||
area.removeFromTop (area.getHeight() / 2); | |||||
Rectangle<int> presets (area.removeFromTop (25)); | |||||
presets.removeFromLeft (100); | |||||
presetBox.setBounds (presets.removeFromLeft (150)); | |||||
area.removeFromTop (4); | |||||
fragmentEditorComp.setBounds (area); | |||||
} | |||||
void selectPreset (int preset) | |||||
{ | |||||
const ShaderPreset& p = getPresets()[preset]; | |||||
fragmentDocument.replaceAllContent (p.fragmentShader); | |||||
startTimer (1); | |||||
} | |||||
ScopedPointer<OpenGLGraphicsContextCustomShader> shader; | |||||
Label statusLabel, presetLabel; | |||||
ComboBox presetBox; | |||||
CodeDocument fragmentDocument; | |||||
CodeEditorComponent fragmentEditorComp; | |||||
String fragmentCode; | |||||
private: | |||||
enum { shaderLinkDelay = 500 }; | |||||
void codeDocumentTextInserted (const String& /*newText*/, int /*insertIndex*/) override | |||||
{ | |||||
startTimer (shaderLinkDelay); | |||||
} | |||||
void codeDocumentTextDeleted (int /*startIndex*/, int /*endIndex*/) override | |||||
{ | |||||
startTimer (shaderLinkDelay); | |||||
} | |||||
void timerCallback() override | |||||
{ | |||||
stopTimer(); | |||||
fragmentCode = fragmentDocument.getAllContent(); | |||||
repaint(); | |||||
} | |||||
void comboBoxChanged (ComboBox*) override | |||||
{ | |||||
selectPreset (presetBox.getSelectedItemIndex()); | |||||
} | |||||
struct ShaderPreset | |||||
{ | |||||
const char* name; | |||||
const char* fragmentShader; | |||||
}; | |||||
static Array<ShaderPreset> getPresets() | |||||
{ | |||||
#define SHADER_DEMO_HEADER \ | |||||
"/* This demo shows the use of the OpenGLGraphicsContextCustomShader,\n" \ | |||||
" which allows a 2D area to be filled using a GL shader program.\n" \ | |||||
"\n" \ | |||||
" Edit the shader program below and it will be \n" \ | |||||
" recompiled in real-time!\n" \ | |||||
"*/\n\n" | |||||
ShaderPreset presets[] = | |||||
{ | |||||
{ | |||||
"Simple Gradient", | |||||
SHADER_DEMO_HEADER | |||||
"void main()\n" | |||||
"{\n" | |||||
" " JUCE_MEDIUMP " vec4 colour1 = vec4 (1.0, 0.4, 0.6, 1.0);\n" | |||||
" " JUCE_MEDIUMP " vec4 colour2 = vec4 (0.0, 0.8, 0.6, 1.0);\n" | |||||
" " JUCE_MEDIUMP " float alpha = pixelPos.x / 1000.0;\n" | |||||
" gl_FragColor = pixelAlpha * mix (colour1, colour2, alpha);\n" | |||||
"}\n" | |||||
}, | |||||
{ | |||||
"Circular Gradient", | |||||
SHADER_DEMO_HEADER | |||||
"void main()\n" | |||||
"{\n" | |||||
" " JUCE_MEDIUMP " vec4 colour1 = vec4 (1.0, 0.4, 0.6, 1.0);\n" | |||||
" " JUCE_MEDIUMP " vec4 colour2 = vec4 (0.3, 0.4, 0.4, 1.0);\n" | |||||
" " JUCE_MEDIUMP " float alpha = distance (pixelPos, vec2 (600.0, 500.0)) / 400.0;\n" | |||||
" gl_FragColor = pixelAlpha * mix (colour1, colour2, alpha);\n" | |||||
"}\n" | |||||
}, | |||||
{ | |||||
"Cicle", | |||||
SHADER_DEMO_HEADER | |||||
"void main()\n" | |||||
"{\n" | |||||
" " JUCE_MEDIUMP " vec4 colour1 = vec4 (0.1, 0.1, 0.9, 1.0);\n" | |||||
" " JUCE_MEDIUMP " vec4 colour2 = vec4 (0.0, 0.8, 0.6, 1.0);\n" | |||||
" " JUCE_MEDIUMP " float distance = distance (pixelPos, vec2 (600.0, 500.0));\n" | |||||
"\n" | |||||
" " JUCE_MEDIUMP " const float innerRadius = 200.0;\n" | |||||
" " JUCE_MEDIUMP " const float outerRadius = 210.0;\n" | |||||
"\n" | |||||
" if (distance < innerRadius)\n" | |||||
" gl_FragColor = colour1;\n" | |||||
" else if (distance > outerRadius)\n" | |||||
" gl_FragColor = colour2;\n" | |||||
" else\n" | |||||
" gl_FragColor = mix (colour1, colour2, (distance - innerRadius) / (outerRadius - innerRadius));\n" | |||||
"\n" | |||||
" gl_FragColor *= pixelAlpha;\n" | |||||
"}\n" | |||||
}, | |||||
{ | |||||
"Solid Colour", | |||||
SHADER_DEMO_HEADER | |||||
"void main()\n" | |||||
"{\n" | |||||
" gl_FragColor = vec4 (1.0, 0.6, 0.1, pixelAlpha);\n" | |||||
"}\n" | |||||
} | |||||
}; | |||||
return Array<ShaderPreset> (presets, numElementsInArray (presets)); | |||||
} | |||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (OpenGL2DShaderDemo) | |||||
}; | |||||
//============================================================================== | |||||
// This static object will register this demo type in a global list of demos.. | |||||
static JuceDemoType<OpenGL2DShaderDemo> demo ("20 Graphics: OpenGL 2D"); | |||||
#endif |
@@ -215,7 +215,14 @@ public: | |||||
bool isShowingOpenGLDemo() const | bool isShowingOpenGLDemo() const | ||||
{ | { | ||||
return currentDemo != nullptr && currentDemo->getName().contains ("OpenGL"); | |||||
return currentDemo != nullptr | |||||
&& currentDemo->getName().contains ("OpenGL") | |||||
&& ! isShowingOpenGL2DDemo(); | |||||
} | |||||
bool isShowingOpenGL2DDemo() const | |||||
{ | |||||
return currentDemo != nullptr && currentDemo->getName().contains ("OpenGL 2D"); | |||||
} | } | ||||
private: | private: | ||||
@@ -605,6 +612,11 @@ void MainAppWindow::setRenderingEngine (int index) | |||||
peer->setCurrentRenderingEngine (index); | peer->setCurrentRenderingEngine (index); | ||||
} | } | ||||
void MainAppWindow::setOpenGLRenderingEngine() | |||||
{ | |||||
setRenderingEngine (getRenderingEngines().indexOf (openGLRendererName)); | |||||
} | |||||
int MainAppWindow::getActiveRenderingEngine() const | int MainAppWindow::getActiveRenderingEngine() const | ||||
{ | { | ||||
#if JUCE_OPENGL | #if JUCE_OPENGL | ||||
@@ -51,6 +51,7 @@ public: | |||||
StringArray getRenderingEngines() const; | StringArray getRenderingEngines() const; | ||||
int getActiveRenderingEngine() const; | int getActiveRenderingEngine() const; | ||||
void setRenderingEngine (int index); | void setRenderingEngine (int index); | ||||
void setOpenGLRenderingEngine(); | |||||
// (returns the exploding JUCE logo path) | // (returns the exploding JUCE logo path) | ||||
static Path getJUCELogoPath(); | static Path getJUCELogoPath(); | ||||
@@ -95,6 +95,7 @@ namespace juce | |||||
class OpenGLTexture; | class OpenGLTexture; | ||||
class OpenGLFrameBuffer; | class OpenGLFrameBuffer; | ||||
class OpenGLShaderProgram; | |||||
#include "native/juce_MissingGLDefinitions.h" | #include "native/juce_MissingGLDefinitions.h" | ||||
#include "opengl/juce_OpenGLHelpers.h" | #include "opengl/juce_OpenGLHelpers.h" | ||||
@@ -739,9 +739,17 @@ void OpenGLContext::setAssociatedObject (const char* name, ReferenceCountedObjec | |||||
if (index >= 0) | if (index >= 0) | ||||
{ | { | ||||
c->associatedObjects.set (index, newObject); | |||||
if (newObject != nullptr) | |||||
{ | |||||
c->associatedObjects.set (index, newObject); | |||||
} | |||||
else | |||||
{ | |||||
c->associatedObjectNames.remove (index); | |||||
c->associatedObjects.remove (index); | |||||
} | |||||
} | } | ||||
else | |||||
else if (newObject != nullptr) | |||||
{ | { | ||||
c->associatedObjectNames.add (name); | c->associatedObjectNames.add (name); | ||||
c->associatedObjects.add (newObject); | c->associatedObjects.add (newObject); | ||||
@@ -354,12 +354,13 @@ public: | |||||
" gl_Position = vec4 (scaledPos.x - 1.0, 1.0 - scaledPos.y, 0, 1.0);" | " gl_Position = vec4 (scaledPos.x - 1.0, 1.0 - scaledPos.y, 0, 1.0);" | ||||
"}"); | "}"); | ||||
program.addFragmentShader (fragmentShader); | |||||
compiledOk = program.addFragmentShader (fragmentShader); | |||||
program.link(); | program.link(); | ||||
JUCE_CHECK_OPENGL_ERROR | JUCE_CHECK_OPENGL_ERROR | ||||
} | } | ||||
OpenGLShaderProgram program; | OpenGLShaderProgram program; | ||||
bool compiledOk; | |||||
}; | }; | ||||
struct ShaderBase : public ShaderProgramHolder | struct ShaderBase : public ShaderProgramHolder | ||||
@@ -1492,12 +1493,13 @@ class SavedState : public RenderingHelpers::SavedStateBase<SavedState> | |||||
public: | public: | ||||
SavedState (GLState* const s) | SavedState (GLState* const s) | ||||
: BaseClass (s->target.bounds), state (s) | |||||
: BaseClass (s->target.bounds), state (s), isUsingCustomShader (false) | |||||
{} | {} | ||||
SavedState (const SavedState& other) | SavedState (const SavedState& other) | ||||
: BaseClass (other), font (other.font), | : BaseClass (other), font (other.font), | ||||
state (other.state), transparencyLayer (other.transparencyLayer), | |||||
state (other.state), isUsingCustomShader (false), | |||||
transparencyLayer (other.transparencyLayer), | |||||
previousTarget (other.previousTarget.createCopy()) | previousTarget (other.previousTarget.createCopy()) | ||||
{} | {} | ||||
@@ -1618,9 +1620,13 @@ public: | |||||
template <typename IteratorType> | template <typename IteratorType> | ||||
void fillWithSolidColour (IteratorType& iter, const PixelARGB colour, bool replaceContents) const | void fillWithSolidColour (IteratorType& iter, const PixelARGB colour, bool replaceContents) const | ||||
{ | { | ||||
state->activeTextures.disableTextures (state->shaderQuadQueue); | |||||
state->blendMode.setBlendMode (state->shaderQuadQueue, replaceContents); | |||||
state->setShader (state->currentShader.programs->solidColourProgram); | |||||
if (! isUsingCustomShader) | |||||
{ | |||||
state->activeTextures.disableTextures (state->shaderQuadQueue); | |||||
state->blendMode.setBlendMode (state->shaderQuadQueue, replaceContents); | |||||
state->setShader (state->currentShader.programs->solidColourProgram); | |||||
} | |||||
state->shaderQuadQueue.add (iter, colour); | state->shaderQuadQueue.add (iter, colour); | ||||
} | } | ||||
@@ -1631,16 +1637,21 @@ public: | |||||
state->shaderQuadQueue.add (iter, fillType.colour.getPixelARGB()); | state->shaderQuadQueue.add (iter, fillType.colour.getPixelARGB()); | ||||
} | } | ||||
void fillRectWithCustomShader (OpenGLRendering::ShaderPrograms::ShaderBase& shader, const Rectangle<int>& area, Colour colour) | |||||
void fillRectWithCustomShader (OpenGLRendering::ShaderPrograms::ShaderBase& shader, const Rectangle<int>& area) | |||||
{ | { | ||||
state->setShader (shader); | state->setShader (shader); | ||||
state->shaderQuadQueue.add (area, colour.getPixelARGB()); | |||||
isUsingCustomShader = true; | |||||
fillRect (area, true); | |||||
isUsingCustomShader = false; | |||||
state->currentShader.clearShader (state->shaderQuadQueue); | state->currentShader.clearShader (state->shaderQuadQueue); | ||||
} | } | ||||
//============================================================================== | //============================================================================== | ||||
Font font; | Font font; | ||||
GLState* state; | GLState* state; | ||||
bool isUsingCustomShader; | |||||
private: | private: | ||||
Image transparencyLayer; | Image transparencyLayer; | ||||
@@ -1659,9 +1670,9 @@ public: | |||||
stack.initialise (new SavedState (&glState)); | stack.initialise (new SavedState (&glState)); | ||||
} | } | ||||
void fillRectWithCustomShader (ShaderPrograms::ShaderBase& shader, const Rectangle<int>& area, Colour colour) | |||||
void fillRectWithCustomShader (ShaderPrograms::ShaderBase& shader, const Rectangle<int>& area) | |||||
{ | { | ||||
static_cast<SavedState&> (*stack).fillRectWithCustomShader (shader, area, colour); | |||||
static_cast<SavedState&> (*stack).fillRectWithCustomShader (shader, area); | |||||
} | } | ||||
GLState glState; | GLState glState; | ||||
@@ -1750,39 +1761,88 @@ void clearOpenGLGlyphCache() | |||||
//============================================================================== | //============================================================================== | ||||
struct OpenGLGraphicsContextCustomShader::Pimpl : public OpenGLRendering::ShaderPrograms::ShaderBase | |||||
struct CustomProgram : public ReferenceCountedObject, | |||||
public OpenGLRendering::ShaderPrograms::ShaderBase | |||||
{ | { | ||||
Pimpl (OpenGLRendering::ShaderContext& c, const String& fragmentShader) | |||||
CustomProgram (OpenGLRendering::ShaderContext& c, const String& fragmentShader) | |||||
: ShaderBase (c.glState.target.context, fragmentShader.toRawUTF8()) | : ShaderBase (c.glState.target.context, fragmentShader.toRawUTF8()) | ||||
{ | { | ||||
} | } | ||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (Pimpl) | |||||
}; | |||||
static CustomProgram* get (const String& hashName) | |||||
{ | |||||
if (OpenGLContext* c = OpenGLContext::getCurrentContext()) | |||||
return static_cast<CustomProgram*> (c->getAssociatedObject (hashName.toRawUTF8())); | |||||
OpenGLGraphicsContextCustomShader::OpenGLGraphicsContextCustomShader (Pimpl* p) : pimpl (p) {} | |||||
OpenGLGraphicsContextCustomShader::~OpenGLGraphicsContextCustomShader() {} | |||||
return nullptr; | |||||
} | |||||
OpenGLGraphicsContextCustomShader* OpenGLGraphicsContextCustomShader::create (LowLevelGraphicsContext& gc, StringRef fragmentShaderCode) | |||||
{ | |||||
if (OpenGLRendering::ShaderContext* sc = dynamic_cast<OpenGLRendering::ShaderContext*> (&gc)) | |||||
static CustomProgram* getOrCreate (LowLevelGraphicsContext& gc, const String& hashName, const String& code, String& errorMessage) | |||||
{ | { | ||||
ScopedPointer<Pimpl> p (new Pimpl (*sc, String (JUCE_DECLARE_VARYING_COLOUR JUCE_DECLARE_VARYING_PIXELPOS "\n") + fragmentShaderCode)); | |||||
if (CustomProgram* c = get (hashName)) | |||||
return c; | |||||
if (OpenGLRendering::ShaderContext* sc = dynamic_cast<OpenGLRendering::ShaderContext*> (&gc)) | |||||
{ | |||||
ReferenceCountedObjectPtr<CustomProgram> c (new CustomProgram (*sc, code)); | |||||
if (c->compiledOk) | |||||
{ | |||||
if (OpenGLContext* context = OpenGLContext::getCurrentContext()) | |||||
{ | |||||
context->setAssociatedObject (hashName.toRawUTF8(), c); | |||||
return c; | |||||
} | |||||
} | |||||
if (! p->program.isLinked()) | |||||
return nullptr; | |||||
errorMessage = c->program.getLastError(); | |||||
} | |||||
return new OpenGLGraphicsContextCustomShader (p.release()); | |||||
return nullptr; | |||||
} | } | ||||
jassertfalse; // You've passed-in a non-GL context! | |||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (CustomProgram) | |||||
}; | |||||
OpenGLGraphicsContextCustomShader::OpenGLGraphicsContextCustomShader (const String& fragmentShaderCode) | |||||
: code (String (JUCE_DECLARE_VARYING_COLOUR | |||||
JUCE_DECLARE_VARYING_PIXELPOS | |||||
"\nfloat pixelAlpha = frontColour.a;\n") + fragmentShaderCode), | |||||
hashName (String::toHexString (fragmentShaderCode.hashCode64()) + "_shader") | |||||
{ | |||||
} | |||||
OpenGLGraphicsContextCustomShader::~OpenGLGraphicsContextCustomShader() | |||||
{ | |||||
if (OpenGLContext* context = OpenGLContext::getCurrentContext()) | |||||
context->setAssociatedObject (hashName.toRawUTF8(), nullptr); | |||||
} | |||||
OpenGLShaderProgram* OpenGLGraphicsContextCustomShader::getProgram (LowLevelGraphicsContext& gc) const | |||||
{ | |||||
String errorMessage; | |||||
if (CustomProgram* c = CustomProgram::getOrCreate (gc, hashName, code, errorMessage)) | |||||
return &(c->program); | |||||
return nullptr; | return nullptr; | ||||
} | } | ||||
void OpenGLGraphicsContextCustomShader::fillRect (LowLevelGraphicsContext& gc, const Rectangle<int>& area, Colour colour) const | |||||
void OpenGLGraphicsContextCustomShader::fillRect (LowLevelGraphicsContext& gc, const Rectangle<int>& area) const | |||||
{ | { | ||||
jassert (pimpl != nullptr); | |||||
String errorMessage; | |||||
if (OpenGLRendering::ShaderContext* sc = dynamic_cast<OpenGLRendering::ShaderContext*> (&gc)) | if (OpenGLRendering::ShaderContext* sc = dynamic_cast<OpenGLRendering::ShaderContext*> (&gc)) | ||||
sc->fillRectWithCustomShader (*pimpl, area, colour); | |||||
if (CustomProgram* c = CustomProgram::getOrCreate (gc, hashName, code, errorMessage)) | |||||
sc->fillRectWithCustomShader (*c, area); | |||||
} | |||||
Result OpenGLGraphicsContextCustomShader::checkCompilation (LowLevelGraphicsContext& gc) | |||||
{ | |||||
String errorMessage; | |||||
if (CustomProgram::getOrCreate (gc, hashName, code, errorMessage) != nullptr) | |||||
return Result::ok(); | |||||
return Result::fail (errorMessage); | |||||
} | } |
@@ -47,41 +47,47 @@ LowLevelGraphicsContext* createOpenGLGraphicsContext (OpenGLContext& context, | |||||
//============================================================================== | //============================================================================== | ||||
/** | |||||
/** | |||||
Used to create custom shaders for use with an openGL 2D rendering context. | Used to create custom shaders for use with an openGL 2D rendering context. | ||||
Given a GL-based rendering context, you can write a fragment shader that applies some | Given a GL-based rendering context, you can write a fragment shader that applies some | ||||
kind of per-pixel effect. | kind of per-pixel effect. | ||||
*/ | */ | ||||
struct JUCE_API OpenGLGraphicsContextCustomShader | struct JUCE_API OpenGLGraphicsContextCustomShader | ||||
{ | { | ||||
/** Creates a custom shader. | |||||
The shader code will not be compiled until actually needed, so it's OK to call this | |||||
constructor when no GL context is active. | |||||
The code should be a normal fragment shader. As well as the usual GLSL variables, there is | |||||
also an automatically declared varying vec2 called "pixelPos", which indicates the pixel | |||||
position within the graphics context of the pixel being drawn. There is also a varying value | |||||
"pixelAlpha", which indicates the alpha by which the pixel should be multiplied, so that the | |||||
edges of any clip-region masks are anti-aliased correctly. | |||||
*/ | |||||
OpenGLGraphicsContextCustomShader (const String& fragmentShaderCode); | |||||
/** Destructor. */ | /** Destructor. */ | ||||
~OpenGLGraphicsContextCustomShader(); | ~OpenGLGraphicsContextCustomShader(); | ||||
/** Attempts to compile and return a new shader object. | |||||
This must be called only when an openGL context is active. It'll return nullptr | |||||
if the code fails to compile or some other error occurs. | |||||
The shader code should be a normal fragment shader. As well as the usual variables, there | |||||
will be some extra ones: "frontColour", which is the colour that gets passed into the fillRect | |||||
method, and "pixelPos", which is a vec2 indicating the pixel position within the graphics context | |||||
of the pixel being drawn. | |||||
/** Returns the program, if it has been linked and is active. | |||||
This can be called when you're about to use fillRect, to set up any uniforms/textures that | |||||
the program may require. | |||||
*/ | */ | ||||
static OpenGLGraphicsContextCustomShader* create (LowLevelGraphicsContext&, | |||||
StringRef fragmentShaderCode); | |||||
OpenGLShaderProgram* getProgram (LowLevelGraphicsContext&) const; | |||||
/** Applies the shader to a rectangle within the graphics context. | |||||
NB: This will ignore any clip region that is active. | |||||
*/ | |||||
void fillRect (LowLevelGraphicsContext&, const Rectangle<int>& area, Colour colour) const; | |||||
/** Applies the shader to a rectangle within the graphics context. */ | |||||
void fillRect (LowLevelGraphicsContext&, const Rectangle<int>& area) const; | |||||
private: | |||||
struct Pimpl; | |||||
friend struct Pimpl; | |||||
friend struct ContainerDeletePolicy<Pimpl>; | |||||
ScopedPointer<Pimpl> pimpl; | |||||
/** Attempts to compile the program if necessary, and returns an error message if it fails. */ | |||||
Result checkCompilation (LowLevelGraphicsContext&); | |||||
OpenGLGraphicsContextCustomShader (Pimpl*); | |||||
/** Returns the code that was used to create this object. */ | |||||
const String& getFragmentShaderCode() const noexcept { return code; } | |||||
private: | |||||
String code, hashName; | |||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (OpenGLGraphicsContextCustomShader) | JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (OpenGLGraphicsContextCustomShader) | ||||
}; | }; | ||||
@@ -23,17 +23,33 @@ | |||||
*/ | */ | ||||
OpenGLShaderProgram::OpenGLShaderProgram (const OpenGLContext& c) noexcept | OpenGLShaderProgram::OpenGLShaderProgram (const OpenGLContext& c) noexcept | ||||
: context (c) | |||||
: context (c), programID (0) | |||||
{ | { | ||||
// This object can only be created and used when the current thread has an active OpenGL context. | |||||
} | |||||
OpenGLShaderProgram::~OpenGLShaderProgram() noexcept | |||||
{ | |||||
release(); | |||||
} | |||||
GLuint OpenGLShaderProgram::getProgramID() const noexcept | |||||
{ | |||||
// This method can only be used when the current thread has an active OpenGL context. | |||||
jassert (OpenGLHelpers::isContextActive()); | jassert (OpenGLHelpers::isContextActive()); | ||||
programID = context.extensions.glCreateProgram(); | |||||
if (programID == 0) | |||||
programID = context.extensions.glCreateProgram(); | |||||
return programID; | |||||
} | } | ||||
OpenGLShaderProgram::~OpenGLShaderProgram() noexcept | |||||
void OpenGLShaderProgram::release() noexcept | |||||
{ | { | ||||
context.extensions.glDeleteProgram (programID); | |||||
if (programID != 0) | |||||
{ | |||||
context.extensions.glDeleteProgram (programID); | |||||
programID = 0; | |||||
} | |||||
} | } | ||||
double OpenGLShaderProgram::getLanguageVersion() | double OpenGLShaderProgram::getLanguageVersion() | ||||
@@ -83,7 +99,7 @@ bool OpenGLShaderProgram::addShader (StringRef code, GLenum type) | |||||
return false; | return false; | ||||
} | } | ||||
context.extensions.glAttachShader (programID, shaderID); | |||||
context.extensions.glAttachShader (getProgramID(), shaderID); | |||||
context.extensions.glDeleteShader (shaderID); | context.extensions.glDeleteShader (shaderID); | ||||
JUCE_CHECK_OPENGL_ERROR | JUCE_CHECK_OPENGL_ERROR | ||||
return true; | return true; | ||||
@@ -94,16 +110,21 @@ bool OpenGLShaderProgram::addFragmentShader (StringRef code) { return addShader | |||||
bool OpenGLShaderProgram::link() noexcept | bool OpenGLShaderProgram::link() noexcept | ||||
{ | { | ||||
context.extensions.glLinkProgram (programID); | |||||
// This method can only be used when the current thread has an active OpenGL context. | |||||
jassert (OpenGLHelpers::isContextActive()); | |||||
GLuint progID = getProgramID(); | |||||
context.extensions.glLinkProgram (progID); | |||||
GLint status = GL_FALSE; | GLint status = GL_FALSE; | ||||
context.extensions.glGetProgramiv (programID, GL_LINK_STATUS, &status); | |||||
context.extensions.glGetProgramiv (progID, GL_LINK_STATUS, &status); | |||||
if (status == GL_FALSE) | if (status == GL_FALSE) | ||||
{ | { | ||||
GLchar infoLog [16384]; | GLchar infoLog [16384]; | ||||
GLsizei infoLogLength = 0; | GLsizei infoLogLength = 0; | ||||
context.extensions.glGetProgramInfoLog (programID, sizeof (infoLog), &infoLogLength, infoLog); | |||||
context.extensions.glGetProgramInfoLog (progID, sizeof (infoLog), &infoLogLength, infoLog); | |||||
errorLog = String (infoLog, (size_t) infoLogLength); | errorLog = String (infoLog, (size_t) infoLogLength); | ||||
#if JUCE_DEBUG && ! JUCE_DONT_ASSERT_ON_GLSL_COMPILE_ERROR | #if JUCE_DEBUG && ! JUCE_DONT_ASSERT_ON_GLSL_COMPILE_ERROR | ||||
@@ -124,13 +145,13 @@ void OpenGLShaderProgram::use() const noexcept | |||||
} | } | ||||
OpenGLShaderProgram::Uniform::Uniform (const OpenGLShaderProgram& program, const char* const name) | OpenGLShaderProgram::Uniform::Uniform (const OpenGLShaderProgram& program, const char* const name) | ||||
: uniformID (program.context.extensions.glGetUniformLocation (program.programID, name)), context (program.context) | |||||
: uniformID (program.context.extensions.glGetUniformLocation (program.getProgramID(), name)), context (program.context) | |||||
{ | { | ||||
jassert (uniformID >= 0); | jassert (uniformID >= 0); | ||||
} | } | ||||
OpenGLShaderProgram::Attribute::Attribute (const OpenGLShaderProgram& program, const char* name) | OpenGLShaderProgram::Attribute::Attribute (const OpenGLShaderProgram& program, const char* name) | ||||
: attributeID (program.context.extensions.glGetAttribLocation (program.programID, name)) | |||||
: attributeID (program.context.extensions.glGetAttribLocation (program.getProgramID(), name)) | |||||
{ | { | ||||
jassert (attributeID >= 0); | jassert (attributeID >= 0); | ||||
} | } | ||||
@@ -82,12 +82,12 @@ public: | |||||
/** Get the output for the last shader compilation or link that failed. */ | /** Get the output for the last shader compilation or link that failed. */ | ||||
const String& getLastError() const noexcept { return errorLog; } | const String& getLastError() const noexcept { return errorLog; } | ||||
/** Returns true if the program is linked and ready for use. */ | |||||
bool isLinked() const noexcept { return programID != 0; } | |||||
/** Selects this program into the current context. */ | /** Selects this program into the current context. */ | ||||
void use() const noexcept; | void use() const noexcept; | ||||
/** Deletes the program. */ | |||||
void release() noexcept; | |||||
/** Represents an openGL uniform value. | /** Represents an openGL uniform value. | ||||
After a program has been linked, you can create Uniform objects to let you | After a program has been linked, you can create Uniform objects to let you | ||||
set the uniforms that your shaders use. | set the uniforms that your shaders use. | ||||
@@ -154,10 +154,11 @@ public: | |||||
}; | }; | ||||
/** The ID number of the compiled program. */ | /** The ID number of the compiled program. */ | ||||
GLuint programID; | |||||
GLuint getProgramID() const noexcept; | |||||
private: | private: | ||||
const OpenGLContext& context; | const OpenGLContext& context; | ||||
mutable GLuint programID; | |||||
String errorLog; | String errorLog; | ||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (OpenGLShaderProgram) | JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (OpenGLShaderProgram) | ||||