Add packaging on Windows, add Spout support

pre-release-3
James H Ball 2024-12-22 19:00:39 +00:00
rodzic 77a3271cde
commit 4b9a3f542b
36 zmienionych plików z 1527 dodań i 2 usunięć

2
.gitignore vendored
Wyświetl plik

@ -9,6 +9,8 @@
**/Builds
**/JuceLibraryCode
packaging/Output
# User-specific files
*.rsuser
*.suo

3
.gitmodules vendored
Wyświetl plik

@ -1,3 +1,6 @@
[submodule "modules/chowdsp_utils"]
path = modules/chowdsp_utils
url = https://github.com/Chowdhury-DSP/chowdsp_utils.git
[submodule "modules/juce_sharedtexture"]
path = modules/juce_sharedtexture
url = git@github.com:jameshball/juce_sharedtexture.git

BIN
External/spout/SpoutLibrary.dll vendored 100644

Plik binarny nie jest wyświetlany.

Wyświetl plik

@ -0,0 +1 @@
Versions/Current/Headers

Wyświetl plik

@ -0,0 +1 @@
Versions/Current/Modules

Wyświetl plik

@ -0,0 +1 @@
Versions/Current/Resources

Wyświetl plik

@ -0,0 +1 @@
Versions/Current/Syphon

Wyświetl plik

@ -0,0 +1,42 @@
/*
Syphon.h
Syphon
Copyright 2010-2011 bangnoise (Tom Butterworth) & vade (Anton Marini).
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#import <Syphon/SyphonServerDirectory.h>
#import <Syphon/SyphonMetalServer.h>
#import <Syphon/SyphonMetalClient.h>
#import <Syphon/SyphonOpenGLServer.h>
#import <Syphon/SyphonOpenGLClient.h>
#import <Syphon/SyphonOpenGLImage.h>
/*
Deprecated headers
*/
#import <Syphon/SyphonServer.h>
#import <Syphon/SyphonClient.h>
#import <Syphon/SyphonImage.h>

Wyświetl plik

@ -0,0 +1,39 @@
/*
SyphonClient.h
Syphon
Copyright 2010-2020 bangnoise (Tom Butterworth) & vade (Anton Marini).
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#import <Syphon/SyphonOpenGLClient.h>
NS_ASSUME_NONNULL_BEGIN
DEPRECATED_MSG_ATTRIBUTE("Use SyphonOpenGLClient")
@interface SyphonClient : SyphonOpenGLClient
- (id)initWithServerDescription:(NSDictionary *)description context:(CGLContextObj)context options:(nullable NSDictionary *)options newFrameHandler:(nullable void (^)(SyphonClient *client))handler;
@end
NS_ASSUME_NONNULL_END

Wyświetl plik

@ -0,0 +1,67 @@
/*
SyphonClientBase.h
Syphon
Copyright 2010-2020 bangnoise (Tom Butterworth) & vade (Anton Marini).
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface SyphonClientBase : NSObject
/*!
Returns a new client instance for the described server. You should check the isValid property after initialization to ensure a connection was made to the server.
@param description Typically acquired from the shared SyphonServerDirectory, or one of Syphon's notifications.
@param options Currently ignored. May be nil.
@param handler A block which is invoked when a new frame becomes available. handler may be nil. This block may be invoked on a thread other than that on which the client was created.
@returns A newly initialized SyphonClientBase object, or nil if a client could not be created.
*/
- (instancetype)initWithServerDescription:(NSDictionary<NSString *, id> *)description options:(nullable NSDictionary<NSString *, id> *)options newFrameHandler:(nullable void (^)(id client))handler NS_DESIGNATED_INITIALIZER;
/*!
Returns a dictionary with a description of the server the client is attached to. See SyphonServerDirectory for the keys this dictionary contains
*/
@property (readonly) NSDictionary *serverDescription;
/*!
A client is valid if it has a working connection to a server. Once this returns NO, the SyphonClient will not yield any further frames.
*/
@property (readonly) BOOL isValid;
/*!
Stops the client from receiving any further frames from the server. Use of this method is optional and releasing all references to the client has the same effect.
This method may perform work in the OpenGL context. As with any other OpenGL calls, you must ensure no other threads use those contexts during calls to this method.
*/
- (void)stop;
/*!
Returns YES if the server has output a new frame since the last time newFrameImage was called for this client, NO otherwise.
*/
@property (readonly) BOOL hasNewFrame;
@end
NS_ASSUME_NONNULL_END

Wyświetl plik

@ -0,0 +1,39 @@
/*
SyphonImage.h
Syphon
Copyright 2010-2020 bangnoise (Tom Butterworth) & vade (Anton Marini).
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#import <Syphon/SyphonOpenGLImage.h>
NS_ASSUME_NONNULL_BEGIN
DEPRECATED_MSG_ATTRIBUTE("Use SyphonOpenGLImage")
@interface SyphonImage : SyphonOpenGLImage
@end
NS_ASSUME_NONNULL_END

Wyświetl plik

@ -0,0 +1,43 @@
/*
SyphonImageBase.h
Syphon
Copyright 2010-2011 bangnoise (Tom Butterworth) & vade (Anton Marini).
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#import <Foundation/Foundation.h>
#import <IOSurface/IOSurface.h>
@interface SyphonImageBase : NSObject
/*!
If you implement your own subclass of SyphonImageBase, you must call this designated initializer from your own initializer.
Creates a new image with the provided IOSurface.
@param surfaceRef A valid IOSurface with image data.
@returns A newly intialized Syphon image. Nil on failure.
*/
- (id)initWithSurface:(IOSurfaceRef)surfaceRef NS_DESIGNATED_INITIALIZER;
@end

Wyświetl plik

@ -0,0 +1,65 @@
/*
SyphonMetalClient.h
Syphon
Copyright 2020-2023 Maxime Touroute & Philippe Chaurand (www.millumin.com),
bangnoise (Tom Butterworth) & vade (Anton Marini). All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#import <Foundation/Foundation.h>
#import <Metal/Metal.h>
#import <Syphon/SyphonClientBase.h>
NS_ASSUME_NONNULL_BEGIN
@interface SyphonMetalClient : SyphonClientBase
/*!
Returns a new client instance for the described server. You should check the isValid property after initialization to ensure a connection was made to the server.
@param description Typically acquired from the shared SyphonServerDirectory, or one of Syphon's notifications.
@param device Metal device to create textures on.
@param options Currently ignored. May be nil.
@param handler A block which is invoked when a new frame becomes available. handler may be nil. This block may be invoked on a thread other than that on which the client was created.
@returns A newly initialized SyphonMetalClient object, or nil if a client could not be created.
*/
- (id)initWithServerDescription:(NSDictionary *)description
device:(id<MTLDevice>)device
options:(nullable NSDictionary *)options
newFrameHandler:(nullable void (^)(SyphonMetalClient *client))handler;
/*!
Returns a MTLTexture representing the current output from the server. The texture associated with the image may continue to update when you draw with it, but you should not depend on that behaviour: call this method every time you wish to access the current server frame.
@returns A MTLTexture representing the live output from the server. YOU ARE RESPONSIBLE FOR RELEASING THIS OBJECT when you are finished with it.
*/
- (nullable id<MTLTexture>)newFrameImage;
/*!
Stops the client from receiving any further frames from the server. Use of this method is optional and releasing all references to the client has the same effect.
*/
- (void)stop;
@end
NS_ASSUME_NONNULL_END

Wyświetl plik

@ -0,0 +1,106 @@
/*
SyphonMetalServer.h
Syphon
Copyright 2020-2023 Maxime Touroute & Philippe Chaurand (www.millumin.com),
bangnoise (Tom Butterworth) & vade (Anton Marini). All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#import <Syphon/SyphonServerBase.h>
#import <Metal/Metal.h>
NS_ASSUME_NONNULL_BEGIN
/*!
@relates SyphonServerBase
If this key is matched with a NSNumber with a BOOL value YES, then the server will be invisible to other Syphon users. You are then responsible for passing the NSDictionary returned by serverDescription to processes which require it to create a SyphonClient. Default is NO.
*/
extern NSString * const SyphonServerOptionIsPrivate;
/*!
A server handles the publishing of frames from one video source to any number of clients.
Frames are published by passing in an existing Metal texture.
Each server represents one video output for your application. If your application produces several video outputs, then they should each have their own server. If your application might have multiple servers running, you should name each server to aid identification by users.
It is safe to access instances of this class across threads.
*/
@interface SyphonMetalServer : SyphonServerBase
/*!
Creates a new server with the specified human-readable name (which need not be unique) for a `MTLDevice` and given options. The server will be started immediately. Init may fail and return nil if the server could not be started.
@param name Non-unique human readable server name. This is not required and may be `nil`, but is usually used by clients in their UI to aid identification.
@param device The `MTLDevice` that textures will be valid and available on for publishing.
@param options A dictionary containing key-value pairs to specify options for the server. The only currently supported option is SyphonServerOptionIsPrivate. See its description for details.
@returns A newly intialized SyphonMetalServer. Nil on failure.
*/
- (id)initWithName:(nullable NSString*)name device:(id<MTLDevice>)device options:(nullable NSDictionary *)options;
/*!
The MTLDevice the server uses for drawing.
*/
@property (readonly) id<MTLDevice> device;
/*!
A string representing the name of the server.
*/
@property (nullable, strong) NSString* name;
/*!
A dictionary describing the server. Normally you won't need to access this, however if you created the server as private (using ``SyphonServerOptionIsPrivate``) then you must pass this dictionary to any process in which you wish to create a SyphonClient. You should not rely on the presence of any particular keys in this dictionary. The content will always conform to the `<NSCoding>` protocol.
*/
@property (readonly) NSDictionary* serverDescription;
/*!
`YES` if clients are currently attached, `NO` otherwise. If you generate frames frequently (for instance on a display-link timer), you may choose to test this and only call ``publishFrameTexture:onCommandBuffer:imageRegion:flipped:`` when clients are attached.
*/
@property (readonly) BOOL hasClients;
/*!
Publishes the part of the texture described in region of the texture to clients. The texture is copied and can be safely modified once this method has returned.
@param textureToPublish The `MTLTexture` you wish to publish on the server.
@param commandBuffer Your command buffer on which Syphon will write its internal metal commands. You are responsible for comitting this command buffer.
@param region The sub-region of the texture to publish.
@param isFlipped `YES` if the texture is vertically flipped in Metal coordinates
*/
- (void)publishFrameTexture:(id<MTLTexture>)textureToPublish onCommandBuffer:(id<MTLCommandBuffer>)commandBuffer imageRegion:(NSRect)region flipped:(BOOL)isFlipped;
/*!
Returns a `MTLTexture` representing the current output from the server, valid on the server's `MTLDevice`. Call this method every time you wish to access the current server frame. This texture has a limited useful lifetime: you should release it as soon as you are finished drawing with it.
@returns A `MTLTexture` representing the current output from the server. YOU ARE RESPONSIBLE FOR RELEASING THIS OBJECT when you are finished with it.
*/
- (nullable id<MTLTexture>)newFrameImage;
/*!
Stops the server instance. Use of this method is optional and releasing all references to the server has the same effect.
*/
- (void)stop;
@end
NS_ASSUME_NONNULL_END

Wyświetl plik

@ -0,0 +1,98 @@
/*
SyphonOpenGLClient.h
Syphon
Copyright 2010-2011 bangnoise (Tom Butterworth) & vade (Anton Marini).
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#import <Foundation/Foundation.h>
#import <OpenGL/OpenGL.h>
#import <Syphon/SyphonClientBase.h>
@class SyphonOpenGLImage;
NS_ASSUME_NONNULL_BEGIN
/*!
SyphonOpenGLClient makes available frames from a remote SyphonServer. A client is created from a NSDictionary which describes the server. Typically this is obtained from the shared SyphonServerDirectory, or one of Syphon's notifications.
SyphonOpenGLClient allows for lazy drawing by the use of a new-frame-handler. Using a handler you can perform drawing without using a timer or polling, achieving frame-accuracy with the minimum of overhead. Alternatively, if your application uses a traditional display link or timer, you can use the hasNewFrame property to make decisions about work you may need to do. Irrespective of the presence of new frames, you can draw with a SyphonOpenGLClient at any time.
It is safe to access instances of this class across threads, with the usual limitatiions related to OpenGL. The calls to SyphonOpenGLClient which may cause work to be done in a GL context are: -newFrameImage, -stop and -release.
*/
@interface SyphonOpenGLClient : SyphonClientBase
/*!
Returns a new client instance for the described server. You should check the isValid property after initialization to ensure a connection was made to the server.
@param description Typically acquired from the shared SyphonServerDirectory, or one of Syphon's notifications.
@param context The CGLContextObj context to create textures for.
@param options Currently ignored. May be nil.
@param handler A block which is invoked when a new frame becomes available. handler may be nil. This block may be invoked on a thread other than that on which the client was created.
@returns A newly initialized SyphonOpenGLClient object, or nil if a client could not be created.
*/
- (id)initWithServerDescription:(NSDictionary *)description context:(CGLContextObj)context options:(nullable NSDictionary *)options newFrameHandler:(nullable void (^)(SyphonOpenGLClient *client))handler;
/*!
Returns the CGLContextObj associated with the client.
*/
@property (readonly) CGLContextObj context;
/*!
A client is valid if it has a working connection to a server. Once this returns NO, the SyphonOpenGLClient will not yield any further frames.
*/
@property (readonly) BOOL isValid;
/*!
Returns a dictionary with a description of the server the client is attached to. See SyphonServerDirectory for the keys this dictionary contains
*/
@property (readonly) NSDictionary *serverDescription;
/*!
Returns YES if the server has output a new frame since the last time newFrameImage was called for this client, NO otherwise.
*/
@property (readonly) BOOL hasNewFrame;
/*!
Returns a SyphonImage representing the current output from the server. The texture associated with the image may continue to update when you draw with it, but you should not depend on that behaviour: call this method every time you wish to access the current server frame. This object may have GPU resources associated with it and you should release it as soon as you are finished drawing with it.
This method may perform work in the OpenGL context. As with any other OpenGL calls, you must ensure no other threads use the context during calls to this method.
In legacy OpenGL contexts any modified state will be restored. In Core Profile OpenGL contexts work is done in a private shared context, leaving the caller's context untouched.
@returns A SyphonImage representing the live output from the server. YOU ARE RESPONSIBLE FOR RELEASING THIS OBJECT when you are finished with it.
*/
- (nullable SyphonOpenGLImage *)newFrameImage;
/*!
Stops the client from receiving any further frames from the server. Use of this method is optional and releasing all references to the client has the same effect.
This method may perform work in the OpenGL context. As with any other OpenGL calls, you must ensure no other threads use those contexts during calls to this method.
*/
- (void)stop;
@end
NS_ASSUME_NONNULL_END

Wyświetl plik

@ -0,0 +1,53 @@
/*
SyphonOpenGLImage.h
Syphon
Copyright 2010-2011 bangnoise (Tom Butterworth) & vade (Anton Marini).
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#import <Foundation/Foundation.h>
#import <OpenGL/OpenGL.h>
#import <Syphon/SyphonImageBase.h>
NS_ASSUME_NONNULL_BEGIN
/**
SyphonImage represents an image stored as an OpenGL texture of type GL_TEXTURE_RECTANGLE.
*/
@interface SyphonOpenGLImage : SyphonImageBase
/**
A GLuint representing the texture name. The associated texture is of type GL_TEXTURE_RECTANGLE.
*/
@property (readonly) GLuint textureName;
/**
A NSSize representing the dimensions of the texture. The image will fill the texture entirely.
*/
@property (readonly) NSSize textureSize;
@end
NS_ASSUME_NONNULL_END

Wyświetl plik

@ -0,0 +1,155 @@
/*
SyphonOpenGLServer.h
Syphon
Copyright 2010-2011 bangnoise (Tom Butterworth) & vade (Anton Marini).
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#import <Foundation/Foundation.h>
#import <OpenGL/OpenGL.h>
#import <Syphon/SyphonServerBase.h>
NS_ASSUME_NONNULL_BEGIN
/*!
@relates SyphonServerBase
If this key is matched with a `NSNumber` with a BOOL value `YES`, then the server will be invisible to other Syphon users. You are then responsible for passing the `NSDictionary` returned by ``serverDescription`` to processes which require it to create a Syphon client. Default is `NO`.
*/
extern NSString * const SyphonServerOptionIsPrivate;
/*!
@relates SyphonServerBase
If this key is matched with a `NSNumber` with a `NSUInteger` value greater than zero, the server will, when using the ``SyphonOpenGLServer/bindToDrawFrameOfSize:`` / ``SyphonOpenGLServer/unbindAndPublish`` API, render to an antialiased render buffer with the requested multisample count (via the FBO MSAA and BLIT extensions). Default sample count is 0 should this key be ommited, indicating no antialiased buffers will be used. If the requested sample count is not supported by the GL context, the nearest supported sample count will be used instead. If MSAA is not supported at all, this key will be ignored and the server will render without the antialiasing stage.
*/
extern NSString * const SyphonServerOptionAntialiasSampleCount;
/*!
@relates SyphonServerBase
If this key is matched with a `NSNumber` with an integer value greater than zero, the server will render to an FBO with a depth buffer attached. The value provided should indicate the desired resolution of the buffer: 16, 24 or 32. The server will always attempt to attach a depth buffer when one is requested, however it may create one of a resolution other than that requested. This has useful effect only when using the ``SyphonOpenGLServer/bindToDrawFrameOfSize:`` / ``SyphonOpenGLServer/unbindAndPublish`` API.
*/
extern NSString * const SyphonServerOptionDepthBufferResolution;
/*!
@relates SyphonServerBase
If this key is matched with a `NSNumber` with an integer value greater than zero, the server will render to an FBO with a stencil buffer attached. The value provided should indicate the desired resolution of the buffer: 1, 4, 8 or 16. The server will always attempt to attach a stencil buffer when one is requested, however it may create one of a resolution other than that requested.
*/
extern NSString * const SyphonServerOptionStencilBufferResolution;
@class SyphonOpenGLImage;
/*!
A server handles the publishing of frames from one video source to any number of clients.
Frames can be published either by passing in an existing OpenGL texture, or by binding the server's FBO, drawing using OpenGL calls, then calling the ``unbindAndPublish`` method.
Each server represents one video output for your application. If your application produces several video outputs, then they should each have their own server. If your application might have multiple servers running, you should name each server to aid identification by users.
It is safe to access instances of this class across threads, except for those calls related to OpenGL: a call to ``bindToDrawFrameOfSize:`` must have returned before a call is made to ``unbindAndPublish``, and these methods must be paired and called in order. You should not call the ``stop`` method while the FBO is bound.
*/
@interface SyphonOpenGLServer : SyphonServerBase
/*!
Creates a new server with the specified human-readable name (which need not be unique), CGLContext and options. The server will be started immediately. Init may fail and return `nil` if the server could not be started.
This method does not lock the CGL context. If there is a chance other threads may use the context during calls to this method, bracket it with calls to `CGLLockContext()` and `CGLUnlockContext()`.
@param serverName Non-unique human readable server name. This is not required and may be `nil`, but is usually used by clients in their UI to aid identification.
@param context The `CGLContextObj` context that textures will be valid and available on for publishing.
@param options A dictionary containing key-value pairs to specify options for the server.
@returns A newly intialized ``SyphonOpenGLServer``. `nil` on failure.
*/
- (instancetype)initWithName:(nullable NSString*)serverName context:(CGLContextObj)context options:(nullable NSDictionary *)options;
/*!
The `CGLContext` the server uses for drawing. This may or may not be the context passed in at init.
*/
@property (readonly) CGLContextObj context;
/*!
A string representing the name of the server.
*/
@property (nullable, strong) NSString* name;
/*!
A dictionary describing the server. Normally you won't need to access this, however if you created the server as private (using ``SyphonServerOptionIsPrivate``) then you must pass this dictionary to any process in which you wish to create a SyphonClient. You should not rely on the presence of any particular keys in this dictionary. The content will always conform to the `<NSCoding>` protocol.
*/
@property (readonly) NSDictionary* serverDescription;
/*!
`YES` if clients are currently attached, `NO` otherwise. If you generate frames frequently (for instance on a display-link timer), you may choose to test this and only call ``publishFrameTexture:textureTarget:imageRegion:textureDimensions:flipped:`` when clients are attached.
*/
@property (readonly) BOOL hasClients;
/*!
Publishes the part of the texture described in region of the named texture to clients. The texture is copied and can be safely disposed of or modified once this method has returned. You should not bracket calls to this method with calls to ``bindToDrawFrameOfSize:`` and ``unbindAndPublish`` - they are provided as an alternative to using this method.
This method does not lock the server's CGL context. If there is a chance of other threads using the context during calls to this method, bracket it with calls to `CGLLockContext()` and `CGLUnlockContext()`, passing in the value of the server's context property as the argument.
This method makes no changes to state in the caller's OpenGL context. In legacy OpenGL contexts other state changed is restored. In Core Profile OpenGL contexts work is conducted in a private shared context.
@param texID The name of the texture to publish, which must be a texture valid in the CGL context provided when the server was created.
@param target `GL_TEXTURE_RECTANGLE_EXT` or `GL_TEXTURE_2D`.
@param region The sub-region of the texture to publish.
@param size The full size of the texture
@param isFlipped Is the texture flipped?
*/
- (void)publishFrameTexture:(GLuint)texID textureTarget:(GLenum)target imageRegion:(NSRect)region textureDimensions:(NSSize)size flipped:(BOOL)isFlipped;
/*!
Binds an FBO for you to publish a frame of the given dimensions by drawing into the server's context (check it using the context property). If YES is returned, you must pair this with a call to ``unbindAndPublish`` once you have finished drawing. If NO is returned you should abandon drawing and not call ``unbindAndPublish``.
This method does not lock the server's CGL context. If there is a chance other threads may use the context during calls to this method, bracket it with calls to `CGLLockContext()` and `CGLUnlockContext()`, passing in the value of the server's context property as the argument.
This method changes only the FBO binding in the caller's OpenGL context. In legacy OpenGL contexts any other state changed is restored. In Core Profile OpenGL contexts secondary work is conducted in a private shared context.
@param size The size the frame you wish to publish.
@returns `YES` if binding succeeded, `NO` otherwise.
*/
- (BOOL)bindToDrawFrameOfSize:(NSSize)size;
/*!
Restores any previously bound FBO and publishes the just-drawn frame. This method will flush the GL context (so you don't have to).
This method does not lock the server's CGL context. If there is a chance of other threads using the context during calls to this method, bracket it with calls to `CGLLockContext()` and `CGLUnlockContext()`, passing in the value of the server's context property as the argument.
In legacy OpenGL contexts the previous FBO binding is restored. In Core Profile OpenGL contexts the default (0) FBO is restored. No other state is modified.
*/
- (void)unbindAndPublish;
/*!
Returns a ``SyphonOpenGLImage`` representing the current output from the server, valid in the server's CGL context. Call this method every time you wish to access the current server frame. This object has a limited useful lifetime, and may have GPU resources associated with it: you should release it as soon as you are finished drawing with it.
@returns A ``SyphonOpenGLImage`` representing the current output from the server. YOU ARE RESPONSIBLE FOR RELEASING THIS OBJECT when you are finished with it.
*/
- (nullable SyphonOpenGLImage *)newFrameImage;
/*!
Stops the server instance. Use of this method is optional and releasing all references to the server has the same effect.
*/
- (void)stop;
@end
NS_ASSUME_NONNULL_END

Wyświetl plik

@ -0,0 +1,39 @@
/*
SyphonServer.h
Syphon
Copyright 2010-2020 bangnoise (Tom Butterworth) & vade (Anton Marini).
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#import <Syphon/SyphonOpenGLServer.h>
NS_ASSUME_NONNULL_BEGIN
DEPRECATED_MSG_ATTRIBUTE("Use SyphonOpenGLServer")
@interface SyphonServer : SyphonOpenGLServer
@end
NS_ASSUME_NONNULL_END

Wyświetl plik

@ -0,0 +1,74 @@
/*
SyphonServerBase.h
Syphon
Copyright 2010-2020 bangnoise (Tom Butterworth) & vade (Anton Marini).
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
/*!
@relates SyphonServerBase
If this key is matched with a NSNumber with a BOOL value YES, then the server will be invisible to other Syphon users. You are then responsible for passing the NSDictionary returned by serverDescription to processes which require it to create a SyphonClient. Default is NO.
*/
extern NSString * const SyphonServerOptionIsPrivate;
@interface SyphonServerBase : NSObject
/*!
If you implement your own subclass of SyphonServerBase, you must call this designated initializer from your own initializer.
Creates a new server with the specified human-readable name (which need not be unique) and options. The server will be started immediately. Init may fail and return nil if the server could not be started.
@param serverName Non-unique human readable server name. This is not required and may be nil, but is usually used by clients in their UI to aid identification.
@param options A dictionary containing key-value pairs to specify options for the server. Currently supported options are SyphonServerOptionIsPrivate, plus any added by the subclass. See their descriptions for details.
@returns A newly intialized Syphon server. Nil on failure.
*/
- (instancetype)initWithName:(nullable NSString*)serverName options:(nullable NSDictionary<NSString *, id> *)options NS_DESIGNATED_INITIALIZER;
/*!
A string representing the name of the server.
*/
@property (strong) NSString* name;
/*!
A dictionary describing the server. Normally you won't need to access this, however if you created the server as private (using SyphonServerOptionIsPrivate) then you must pass this dictionary to any process in which you wish to create a SyphonClient. You should not rely on the presence of any particular keys in this dictionary. The content will always conform to the \<NSCoding\> protocol.
*/
@property (readonly) NSDictionary* serverDescription;
/*!
YES if clients are currently attached, NO otherwise. If you generate frames frequently (for instance on a display-link timer), you may choose to test this and only call publishFrameTexture:textureTarget:imageRegion:textureDimensions:flipped: when clients are attached.
*/
@property (readonly) BOOL hasClients;
/*!
Stops the server instance. Use of this method is optional and releasing all references to the server has the same effect.
*/
- (void)stop;
@end
NS_ASSUME_NONNULL_END

Wyświetl plik

@ -0,0 +1,103 @@
/*
SyphonServerDirectory.h
Syphon
Copyright 2010-2011 bangnoise (Tom Butterworth) & vade (Anton Marini).
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
/*!
@relates SyphonServerDirectory
The object for this key is a NSString which uniquely identifies a SyphonServer instance. If two dictionaries contain the same string for this key, they represent the same server. This is provided solely to allow you to programmatically determine the identity of a server, and should never be displayed to users in interface elements. This key is not guaranteed to exist in the dictionary.
*/
extern NSString * const SyphonServerDescriptionUUIDKey;
/*!
@relates SyphonServerDirectory
The object for this key is a NSString which is the human-readable non-unique name for the SyphonServer. If this string exists and is non-empty, you should use it in interface elements to identify the server, usually in combination with the name of the server's application (see SyphonServerDescriptionAppNameKey). This key is not guaranteed to exist in the dictionary.
*/
extern NSString * const SyphonServerDescriptionNameKey;
/*!
@relates SyphonServerDirectory
The object for this key is a NSString with the localized name of the application in which the SyphonServer is running. Use this in combination with the server's name (if present) to identify the server in interface elements. This key is not guaranteed to exist in the dictionary.
*/
extern NSString * const SyphonServerDescriptionAppNameKey;
/*!
@relates SyphonServerDirectory
The object for this key is a NSImage representation of the icon of the application in which the SyphonServer is running. This key is not guaranteed to exist in the dictionary.
*/
extern NSString * const SyphonServerDescriptionIconKey;
/*!
@relates SyphonServerDirectory
A new SyphonServer is available on the system. The notification object is the shared SyphonServerDirectory instance. The user info dictionary describes the server and may contain SyphonServerDescription keys.
*/
extern NSString * const SyphonServerAnnounceNotification;
/*!
@relates SyphonServerDirectory
An existing SyphonServer instance has changed its description. The notification object is the shared SyphonServerDirectory instance. The user info dictionary describes the server and may contain SyphonServerDescription keys.
*/
extern NSString * const SyphonServerUpdateNotification;
/*!
@relates SyphonServerDirectory
A SyphonServer instance will no longer be available. The notification object is the shared SyphonServerDirectory instance. The user info dictionary describes the retiring server and may contain SyphonServerDescription keys.
*/
extern NSString * const SyphonServerRetireNotification;
/*!
A server directory provides information on available Syphon servers. Servers are represented by dictionaries. Generally you can expect to find some or all of the keys listed in Constants.
*/
@interface SyphonServerDirectory : NSObject
/*!
Returns the shared server directory instance. This object is KVO complaint, and can be used to observe changes in server availability, server names and statuses.
@returns the shared server instance
*/
+ (SyphonServerDirectory *)sharedDirectory;
/*!
`NSArray` of `NSDictionaries` that describe (using the keys above) currently available SyphonServer instances on the system.
*/
@property (readonly) NSArray *servers;
/*!
Use this method to discover servers based soley on their name, or application host name. Both parameters are optional. If you do not specify either, all available Syphon servers will be returned.
@param name Optional (pass `nil` to not specify) Name of the published Syphon server, matches the key value for ``SyphonServerDescriptionNameKey``
@param appname Optional (pass `nil` to not specify) Application name of the published Syphon server, matches the key value for ``SyphonServerDescriptionAppNameKey``
@returns An array of dictionaries matching the query you specified.
*/
- (NSArray *)serversMatchingName:(nullable NSString *)name appName:(nullable NSString *)appname;
@end
NS_ASSUME_NONNULL_END

Wyświetl plik

@ -0,0 +1,79 @@
/*
SyphonSubclassing.h
Syphon
Copyright 2010-2020 bangnoise (Tom Butterworth) & vade (Anton Marini).
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#import <Foundation/Foundation.h>
#import <Syphon/SyphonServerBase.h>
#import <Syphon/SyphonClientBase.h>
NS_ASSUME_NONNULL_BEGIN
@interface SyphonServerBase (SyphonSubclassing)
/*!
Subclasses call this to obtain a new IOSurface to draw to. The surface will always be in a BGRA8 format, other formats are not currently supported.
@param width the width of the IOSurface in pixels
@param height the height of the IOSurface in pixels
@param options currently ignored, pass nil
@returns an existing or new IOSurface sized for the given dimensions - to be released by the caller using CFRelease
*/
- (nullable IOSurfaceRef)newSurfaceForWidth:(size_t)width height:(size_t)height options:(nullable NSDictionary<NSString *, id> *)options;
/*!
Subclasses may call this to release any current IOSurface
*/
- (void)destroySurface;
/*!
Subclasses call this to have the server publish a new frame once the subclass has updated the IOSurface.
*/
- (void)publish;
@end
@interface SyphonClientBase (SyphonSubclassing)
/*!
Subclasses use this method to acquire an IOSurface representing the current output from the server. Subclasses may consider the returned value valid until the next call to -invalidateFrame.
@returns An IOSurface representing the live output from the server. YOU ARE RESPONSIBLE FOR RELEASING THIS OBJECT using CFRelease() when you
are finished with it.
*/
- (IOSurfaceRef)newSurface;
/*!
Subclasses must call this method when dispensing a new frame to allow SyphonClientBase to return a correct value for -hasNewFrame
*/
- (void)updateFrameID;
/*!
Subclasses override this method to invalidate their output when the server's surface backing changes. Do not call this method directly -
it will be called for you when necessary.
*/
- (void)invalidateFrame;
@end
NS_ASSUME_NONNULL_END

Wyświetl plik

@ -0,0 +1,20 @@
//
// Syphon.modulemap
// Syphon
//
// Created by Tom Butterworth on 03/10/2023.
//
framework module Syphon {
umbrella header "Syphon.h"
export *
module * {
export *
}
explicit module SyphonSubclassing {
header "SyphonSubclassing.h"
export *
}
}

Wyświetl plik

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>BuildMachineOSBuild</key>
<string>23F79</string>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>Syphon</string>
<key>CFBundleIdentifier</key>
<string>info.v002.Syphon</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>Syphon</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>5</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleSupportedPlatforms</key>
<array>
<string>MacOSX</string>
</array>
<key>CFBundleVersion</key>
<string>5</string>
<key>DTCompiler</key>
<string>com.apple.compilers.llvm.clang.1_0</string>
<key>DTPlatformBuild</key>
<string></string>
<key>DTPlatformName</key>
<string>macosx</string>
<key>DTPlatformVersion</key>
<string>14.5</string>
<key>DTSDKBuild</key>
<string>23F73</string>
<key>DTSDKName</key>
<string>macosx14.5</string>
<key>DTXcode</key>
<string>1540</string>
<key>DTXcodeBuild</key>
<string>15F31d</string>
<key>LSMinimumSystemVersion</key>
<string>10.14.6</string>
</dict>
</plist>

Plik binarny nie jest wyświetlany.

Plik binarny nie jest wyświetlany.

Wyświetl plik

@ -0,0 +1,262 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>files</key>
<dict>
<key>Resources/Info.plist</key>
<data>
yxUj4GSIaau8e+8oANXa2rkqRKM=
</data>
<key>Resources/default.metallib</key>
<data>
y9yCbGjZlc3Q2mA9X4ne5dh2lfo=
</data>
<key>Resources/en.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
MiLKDDnrUKr4EmuvhS5VQwxHGK8=
</data>
<key>optional</key>
<true/>
</dict>
</dict>
<key>files2</key>
<dict>
<key>Headers/Syphon.h</key>
<dict>
<key>hash2</key>
<data>
ut8Rm2z0zGWcHvB/h8TGi+7b6edAGB9SVkBVnG8JddY=
</data>
</dict>
<key>Headers/SyphonClient.h</key>
<dict>
<key>hash2</key>
<data>
CXLWpC7I4+uJRJfpY2bqLIBeLla+V1m8RP0VMqRq5xo=
</data>
</dict>
<key>Headers/SyphonClientBase.h</key>
<dict>
<key>hash2</key>
<data>
3gL3bBGg9UgPiqeGGi69LcxA74EFvnOyRDhVOjAqfU8=
</data>
</dict>
<key>Headers/SyphonImage.h</key>
<dict>
<key>hash2</key>
<data>
VfvxpbjDwhm+xVN9SrvQWa9UNBwyTNIfKqjVJ0ILUmM=
</data>
</dict>
<key>Headers/SyphonImageBase.h</key>
<dict>
<key>hash2</key>
<data>
GY/Jn62iuRHpkO6e8A/rsWCJfSm6aMWd00K4myeMZBM=
</data>
</dict>
<key>Headers/SyphonMetalClient.h</key>
<dict>
<key>hash2</key>
<data>
xM+qPGYKvRgZHB9je7qep+GiD577lOGNGw3qmxtGPj8=
</data>
</dict>
<key>Headers/SyphonMetalServer.h</key>
<dict>
<key>hash2</key>
<data>
izsmNjGV3axQRMWbsAaGcB/n/5HWBzOY2BvYY8QGyAU=
</data>
</dict>
<key>Headers/SyphonOpenGLClient.h</key>
<dict>
<key>hash2</key>
<data>
35RXj7wesL4MU1FfBdN9/uujWmDKqnVfTmv1aEORvcY=
</data>
</dict>
<key>Headers/SyphonOpenGLImage.h</key>
<dict>
<key>hash2</key>
<data>
rFyLg5sFJ1FSPOWsrA1ogtJsrBCJxsW9xYMA/swUSno=
</data>
</dict>
<key>Headers/SyphonOpenGLServer.h</key>
<dict>
<key>hash2</key>
<data>
ZbEfiEHzk5SzCxBeEHNCUkfeKYL+HxhzKtZYExTkfGQ=
</data>
</dict>
<key>Headers/SyphonServer.h</key>
<dict>
<key>hash2</key>
<data>
bnTZB1gxZzROc9I62/6orFopKpzZLWuTDPXPhMJDBD8=
</data>
</dict>
<key>Headers/SyphonServerBase.h</key>
<dict>
<key>hash2</key>
<data>
+aLvZiQEGiO0ltZUpi3age7wcGfX7A7sGmo2Yz0BCG0=
</data>
</dict>
<key>Headers/SyphonServerDirectory.h</key>
<dict>
<key>hash2</key>
<data>
bODRqLi0K9qDLxr8QjK7DMkr8WKXJItwRuF1QBQV5+0=
</data>
</dict>
<key>Headers/SyphonSubclassing.h</key>
<dict>
<key>hash2</key>
<data>
C5xu+I8eCZH8RCchUXmKOhxixHn20Sa1CXmtFRmCqwc=
</data>
</dict>
<key>Modules/module.modulemap</key>
<dict>
<key>hash2</key>
<data>
zmy147RAJPAPxydGlzn6TQ4ZXK60434t9pOn2uwW8TQ=
</data>
</dict>
<key>Resources/Info.plist</key>
<dict>
<key>hash2</key>
<data>
Yiet3hYzxZ694WKjPGC+bjn+45g5jNspR+/S/nCq/zA=
</data>
</dict>
<key>Resources/default.metallib</key>
<dict>
<key>hash2</key>
<data>
48b4CmXv0Da50Av/YKtU2CeOhkcescLZ18sflYJt6Ds=
</data>
</dict>
<key>Resources/en.lproj/InfoPlist.strings</key>
<dict>
<key>hash2</key>
<data>
Oc8u4Ht7Mz58F50L9NeYpbcq9qTlhPUeZCcDu/pPyCg=
</data>
<key>optional</key>
<true/>
</dict>
</dict>
<key>rules</key>
<dict>
<key>^Resources/</key>
<true/>
<key>^Resources/.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^Resources/.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Resources/Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^version.plist$</key>
<true/>
</dict>
<key>rules2</key>
<dict>
<key>.*\.dSYM($|/)</key>
<dict>
<key>weight</key>
<real>11</real>
</dict>
<key>^(.*/)?\.DS_Store$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>2000</real>
</dict>
<key>^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/</key>
<dict>
<key>nested</key>
<true/>
<key>weight</key>
<real>10</real>
</dict>
<key>^.*</key>
<true/>
<key>^Info\.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^PkgInfo$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^Resources/</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
<key>^Resources/.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^Resources/.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Resources/Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^[^/]+$</key>
<dict>
<key>nested</key>
<true/>
<key>weight</key>
<real>10</real>
</dict>
<key>^embedded\.provisionprofile$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
<key>^version\.plist$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
</dict>
</dict>
</plist>

Wyświetl plik

@ -0,0 +1 @@
A

Wyświetl plik

@ -75,6 +75,8 @@ CommonPluginEditor::CommonPluginEditor(CommonAudioProcessor& p, juce::String app
setResizeLimits(250, 250, 999999, 999999);
tooltipDropShadow.setOwner(&tooltipWindow);
SharedTextureManager::getInstance()->initGL();
}
void CommonPluginEditor::initialiseMenuBar(juce::MenuBarModel& menuBarModel) {

Wyświetl plik

@ -327,6 +327,20 @@ void VisualiserComponent::childUpdated() {
}
}
void VisualiserComponent::initialiseSharedTexture() {
sharedTextureSender = SharedTextureManager::getInstance()->addSender("TEST OSCI-RENDER", viewportArea.getWidth(), viewportArea.getHeight());
sharedTextureSender->setExternalFBO(renderTexture.id);
sharedTextureSender->setSize(renderTexture.width, renderTexture.height);
}
void VisualiserComponent::closeSharedTexture() {
if (SharedTextureManager::getInstanceWithoutCreating() != nullptr) {
SharedTextureManager::getInstance()->removeSender(sharedTextureSender);
}
sharedTextureSender = nullptr;
}
void VisualiserComponent::newOpenGLContextCreated() {
using namespace juce::gl;
@ -376,11 +390,19 @@ void VisualiserComponent::newOpenGLContextCreated() {
glGenBuffers(1, &vertexIndexBuffer);
setupTextures();
if (parent == nullptr) {
initialiseSharedTexture();
}
}
void VisualiserComponent::openGLContextClosing() {
using namespace juce::gl;
if (parent == nullptr) {
closeSharedTexture();
}
glDeleteBuffers(1, &quadIndexBuffer);
glDeleteBuffers(1, &vertexIndexBuffer);
glDeleteBuffers(1, &vertexBuffer);
@ -420,6 +442,12 @@ void VisualiserComponent::renderOpenGL() {
} else {
renderScope(xSamples, ySamples, zSamples);
}
if (parent == nullptr) {
if (SharedTextureManager::getInstanceWithoutCreating() != nullptr) {
SharedTextureManager::getInstance()->renderGL();
}
}
if (record.getToggleState()) {
if (recordingVideo) {

Wyświetl plik

@ -78,6 +78,8 @@ private:
std::function<void(FullScreenMode)> fullScreenCallback;
SharedTextureSender* sharedTextureSender = nullptr;
VisualiserSettings& settings;
RecordingParameters& recordingParameters;
bool recordingAudio = false;
@ -191,6 +193,8 @@ private:
chowdsp::ResamplingTypes::LanczosResampler<2048, 8> yResampler;
chowdsp::ResamplingTypes::LanczosResampler<2048, 8> zResampler;
void initialiseSharedTexture();
void closeSharedTexture();
Texture makeTexture(int width, int height);
void setupArrays(int num_points);
void setupTextures();

@ -0,0 +1 @@
Subproject commit 7c652f141a57e1d46214adb38ad54b64da925ac2

Wyświetl plik

@ -722,6 +722,7 @@
<MODULEPATH id="chowdsp_math" path="modules/chowdsp_utils/modules/dsp"/>
<MODULEPATH id="chowdsp_core" path="modules/chowdsp_utils/modules/common"/>
<MODULEPATH id="chowdsp_data_structures" path="modules/chowdsp_utils/modules/common"/>
<MODULEPATH id="juce_sharedtexture" path="modules"/>
</MODULEPATHS>
</LINUX_MAKE>
<VS2022 targetFolder="Builds/VisualStudio2022" smallIcon="pSc1mq" bigIcon="pSc1mq">
@ -754,12 +755,15 @@
<MODULEPATH id="chowdsp_math" path="modules/chowdsp_utils/modules/dsp"/>
<MODULEPATH id="chowdsp_core" path="modules/chowdsp_utils/modules/common"/>
<MODULEPATH id="chowdsp_data_structures" path="modules/chowdsp_utils/modules/common"/>
<MODULEPATH id="juce_sharedtexture" path="modules"/>
</MODULEPATHS>
</VS2022>
<XCODE_MAC targetFolder="Builds/MacOSX" extraLinkerFlags="-Wl,-weak_reference_mismatches,weak"
extraDefs="JUCE_SILENCE_XCODE_15_LINKER_WARNING=1" smallIcon="pSc1mq"
bigIcon="pSc1mq" applicationCategory="public.app-category.music"
microphonePermissionNeeded="1">
microphonePermissionNeeded="1" frameworkSearchPaths="../../External/syphon"
extraCustomFrameworks="../../External/syphon/Syphon.framework"
embeddedFrameworks="../../External/syphon/Syphon.framework">
<CONFIGURATIONS>
<CONFIGURATION isDebug="1" name="Debug" targetName="osci-render"/>
<CONFIGURATION name="Release" targetName="osci-render"/>
@ -788,6 +792,7 @@
<MODULEPATH id="chowdsp_math" path="modules/chowdsp_utils/modules/dsp"/>
<MODULEPATH id="chowdsp_core" path="modules/chowdsp_utils/modules/common"/>
<MODULEPATH id="chowdsp_data_structures" path="modules/chowdsp_utils/modules/common"/>
<MODULEPATH id="juce_sharedtexture" path="modules"/>
</MODULEPATHS>
</XCODE_MAC>
</EXPORTFORMATS>
@ -818,5 +823,6 @@
<MODULE id="juce_gui_basics" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>
<MODULE id="juce_gui_extra" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>
<MODULE id="juce_opengl" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>
<MODULE id="juce_sharedtexture" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
</MODULES>
</JUCERPROJECT>

Wyświetl plik

@ -0,0 +1,69 @@
#define MyAppName "osci-render"
#define MyAppVersion "2.4.0"
#define MyAppPublisher "James H Ball"
#define MyAppURL "https://osci-render.com/"
#define MyAppExeName "osci-render.exe"
#define MyAppVstName "osci-render.vst3"
#define MyAppAssocName MyAppName + " Project"
#define MyAppAssocExt ".osci"
#define MyAppAssocKey StringChange(MyAppAssocName, " ", "") + MyAppAssocExt
[Setup]
; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{3BF80B88-4241-4CAF-B7BA-267D9B34BF09}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={autopf}\{#MyAppName}
; "ArchitecturesAllowed=x64compatible" specifies that Setup cannot run
; on anything but x64 and Windows 11 on Arm.
ArchitecturesAllowed=x64compatible
; "ArchitecturesInstallIn64BitMode=x64compatible" requests that the
; install be done in "64-bit mode" on x64 or Windows 11 on Arm,
; meaning it should use the native 64-bit Program Files directory and
; the 64-bit view of the registry.
ArchitecturesInstallIn64BitMode=x64compatible
ChangesAssociations=yes
DisableProgramGroupPage=yes
; Uncomment the following line to run in non administrative install mode (install for current user only.)
;PrivilegesRequired=lowest
OutputBaseFilename=osci-render
Compression=lzma
SolidCompression=yes
WizardStyle=modern
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "deletefiles"; Description: "Remove any existing settings (Clean installation)"; Flags: unchecked
[Files]
Source: "..\Builds\VisualStudio2022\x64\Release\Standalone Plugin\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\Builds\VisualStudio2022\x64\Release\VST3\osci-render.vst3\Contents\x86_64-win\{#MyAppVstName}"; DestDir: "{cf}\VST3"
Source: "..\External\spout\SpoutLibrary.dll"; DestDir: "{app}"
Source: "..\External\spout\SpoutLibrary.dll"; DestDir: "{sys}"
[InstallDelete]
Type: files; Name: {userappdata}\osci-render\osci-render.settings; Tasks: deletefiles
[Registry]
Root: HKA; Subkey: "Software\Classes\{#MyAppAssocExt}\OpenWithProgids"; ValueType: string; ValueName: "{#MyAppAssocKey}"; ValueData: ""; Flags: uninsdeletevalue
Root: HKA; Subkey: "Software\Classes\{#MyAppAssocKey}"; ValueType: string; ValueName: ""; ValueData: "{#MyAppAssocName}"; Flags: uninsdeletekey
Root: HKA; Subkey: "Software\Classes\{#MyAppAssocKey}\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#MyAppExeName},0"
Root: HKA; Subkey: "Software\Classes\{#MyAppAssocKey}\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#MyAppExeName}"" ""%1"""
Root: HKA; Subkey: "Software\Classes\Applications\{#MyAppExeName}\SupportedTypes"; ValueType: string; ValueName: ".myp"; ValueData: ""
[Icons]
Name: "{autoprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent

Wyświetl plik

@ -0,0 +1,69 @@
#define MyAppName "sosci"
#define MyAppVersion "1.0.0"
#define MyAppPublisher "James H Ball"
#define MyAppURL "https://osci-render.com/sosci"
#define MyAppExeName "sosci.exe"
#define MyAppVstName "sosci.vst3"
#define MyAppAssocName MyAppName + " Project"
#define MyAppAssocExt ".sosci"
#define MyAppAssocKey StringChange(MyAppAssocName, " ", "") + MyAppAssocExt
[Setup]
; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{40D20CB6-2DD1-454C-BDBB-1FB79BE5B2A2}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={autopf}\{#MyAppName}
; "ArchitecturesAllowed=x64compatible" specifies that Setup cannot run
; on anything but x64 and Windows 11 on Arm.
ArchitecturesAllowed=x64compatible
; "ArchitecturesInstallIn64BitMode=x64compatible" requests that the
; install be done in "64-bit mode" on x64 or Windows 11 on Arm,
; meaning it should use the native 64-bit Program Files directory and
; the 64-bit view of the registry.
ArchitecturesInstallIn64BitMode=x64compatible
ChangesAssociations=yes
DisableProgramGroupPage=yes
; Uncomment the following line to run in non administrative install mode (install for current user only.)
;PrivilegesRequired=lowest
OutputBaseFilename=osci-render
Compression=lzma
SolidCompression=yes
WizardStyle=modern
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "deletefiles"; Description: "Remove any existing settings (Clean installation)"; Flags: unchecked
[Files]
Source: "..\Builds\VisualStudio2022\x64\Release\Standalone Plugin\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\Builds\VisualStudio2022\x64\Release\VST3\{#MyAppVstName}\Contents\x86_64-win\{#MyAppVstName}"; DestDir: "{cf}\VST3"
Source: "..\External\spout\SpoutLibrary.dll"; DestDir: "{app}"
Source: "..\External\spout\SpoutLibrary.dll"; DestDir: "{sys}"
[InstallDelete]
Type: files; Name: {userappdata}\{#MyAppName}\{#MyAppName}.settings; Tasks: deletefiles
[Registry]
Root: HKA; Subkey: "Software\Classes\{#MyAppAssocExt}\OpenWithProgids"; ValueType: string; ValueName: "{#MyAppAssocKey}"; ValueData: ""; Flags: uninsdeletevalue
Root: HKA; Subkey: "Software\Classes\{#MyAppAssocKey}"; ValueType: string; ValueName: ""; ValueData: "{#MyAppAssocName}"; Flags: uninsdeletekey
Root: HKA; Subkey: "Software\Classes\{#MyAppAssocKey}\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#MyAppExeName},0"
Root: HKA; Subkey: "Software\Classes\{#MyAppAssocKey}\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#MyAppExeName}"" ""%1"""
Root: HKA; Subkey: "Software\Classes\Applications\{#MyAppExeName}\SupportedTypes"; ValueType: string; ValueName: ".myp"; ValueData: ""
[Icons]
Name: "{autoprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent

Wyświetl plik

@ -202,6 +202,7 @@
<MODULEPATH id="chowdsp_math" path="modules/chowdsp_utils/modules/dsp"/>
<MODULEPATH id="chowdsp_core" path="modules/chowdsp_utils/modules/common"/>
<MODULEPATH id="chowdsp_data_structures" path="modules/chowdsp_utils/modules/common"/>
<MODULEPATH id="juce_sharedtexture" path="modules"/>
</MODULEPATHS>
</LINUX_MAKE>
<VS2022 targetFolder="Builds/sosci/VisualStudio2022" smallIcon="pSc1mq"
@ -235,6 +236,7 @@
<MODULEPATH id="chowdsp_math" path="modules/chowdsp_utils/modules/dsp"/>
<MODULEPATH id="chowdsp_core" path="modules/chowdsp_utils/modules/common"/>
<MODULEPATH id="chowdsp_data_structures" path="modules/chowdsp_utils/modules/common"/>
<MODULEPATH id="juce_sharedtexture" path="modules"/>
</MODULEPATHS>
</VS2022>
<XCODE_MAC targetFolder="Builds/sosci/MacOSX" extraLinkerFlags="-Wl,-weak_reference_mismatches,weak"
@ -269,6 +271,7 @@
<MODULEPATH id="chowdsp_math" path="modules/chowdsp_utils/modules/dsp"/>
<MODULEPATH id="chowdsp_core" path="modules/chowdsp_utils/modules/common"/>
<MODULEPATH id="chowdsp_data_structures" path="modules/chowdsp_utils/modules/common"/>
<MODULEPATH id="juce_sharedtexture" path="modules"/>
</MODULEPATHS>
</XCODE_MAC>
</EXPORTFORMATS>
@ -299,5 +302,6 @@
<MODULE id="juce_gui_basics" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>
<MODULE id="juce_gui_extra" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>
<MODULE id="juce_opengl" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>
<MODULE id="juce_sharedtexture" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
</MODULES>
</JUCERPROJECT>