Servers could send arbitrary metadata with each frame
Information could be shared between applications thru the stablished Syphon connection. Using a NSDictionary would leave the server and client open to share anything. As an example, render time, document name, color correction, name of a complementary Syphon texture.
We have thought about this.
The main obstacle is that (by design) there is no concept of frames as individual entities, just a single surface with changing content. There is no way to tie metadata to a single frame because the content can change at any time. This might still be useful for less transient information.
to continue the discussion from #82:
This is what spout says about its own implementation: frameBufferSharing
But I understand now it might be tricky to implement it in a water thight manner.
@maybites we specifically don't want to block server and client processes in the way Spout does.
To chime in, I think this can be revisited if we decide to tackle internally pooling IOSurfaces, which would allow us to vend unique surfaces per frame (though they would have re-used addresses), and potentially associate user low cost user data dictionary along with it. I dont want to promise anything we can't deliver, but its worth mentioning.
for reference :
/* These calls let you attach property list types to a IOSurface buffer. These calls are
expensive (they essentially must serialize the data into the kernel) and thus should be avoided whenever
possible. Note: These functions can not be used to change the underlying surface properties. */
- (void)setAttachment:(id)anObject forKey:(NSString *)key;
- (nullable id)attachmentForKey:(NSString *)key;
- (void)removeAttachmentForKey:(NSString *)key;
- (void)setAllAttachments:(NSDictionary<NSString *, id> *)dict;
- (nullable NSDictionary<NSString *, id> *)allAttachments;
- (void)removeAllAttachments;
@bangnoise
we specifically don't want to block server and client processes in the way Spout does.
Oh, I get that. I wouldn't advocate it, I just added that link for reference.
But I am glad to hear you considering this feature seriously and see the potential benefit of it. A low cost user data dictionary would be the way to go. Thats what I am doing with spout, serialized to and from a byte buffer.