Revision: 225
Author:
connec...@gmail.com
Date: Sat Jul 13 21:08:24 2013
Log: dispatch_async to main thread for GL callbacks, as Unity 4.2 beta
fix.
http://code.google.com/p/syphon-implementations/source/detail?r=225
Modified:
/trunk/Syphon
Implementations/Unity3D/Unity3D-3_5/SyphonUnityPlugin/ServerWatcherUtility.mm
/trunk/Syphon
Implementations/Unity3D/Unity3D-3_5/SyphonUnityPlugin/SyphonClientUnity.m
/trunk/Syphon
Implementations/Unity3D/Unity3D-3_5/SyphonUnityPlugin/SyphonUnity.mm
=======================================
--- /trunk/Syphon
Implementations/Unity3D/Unity3D-3_5/SyphonUnityPlugin/ServerWatcherUtility.mm
Sat Jul 13 17:26:24 2013
+++ /trunk/Syphon
Implementations/Unity3D/Unity3D-3_5/SyphonUnityPlugin/ServerWatcherUtility.mm
Sat Jul 13 21:08:24 2013
@@ -126,6 +126,8 @@
- (void)handleServerUpdate:(NSNotification *)notification
{
+ dispatch_async(dispatch_get_main_queue(), ^(){
+
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
const char* param2 = [[[notification object]
objectForKey:SyphonServerDescriptionNameKey] UTF8String];
const char* param1 = [[[notification object]
objectForKey:SyphonServerDescriptionAppNameKey] UTF8String];
@@ -151,6 +153,7 @@
OnUpdateServerDelegate(param1, param2, param3, serverPtr);
[pool drain];
+ });
}
=======================================
--- /trunk/Syphon
Implementations/Unity3D/Unity3D-3_5/SyphonUnityPlugin/SyphonClientUnity.m
Sat Jul 13 17:26:24 2013
+++ /trunk/Syphon
Implementations/Unity3D/Unity3D-3_5/SyphonUnityPlugin/SyphonClientUnity.m
Sat Jul 13 21:08:24 2013
@@ -59,11 +59,11 @@
void syphonClientPublishTexture(SyphonCacheData* ptr){
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
-// NSLog(@"PUBLISHIN SOMETHIN AT %i/ %@", (int)ptr, ptr->syphonClient);
if(ptr != NULL && ptr->syphonClient != nil && [ptr->syphonClient
isValid]){
// //should probably check if CGLGetCurrentContext() is ==
cachedContext
-
+// NSLog(@"PUBLISHIN SOMETHIN AT %i/ %@", (int)ptr, ptr->syphonClient);
+
//lock
//CGLLockContext(cachedContext);
@@ -232,14 +232,39 @@
glMatrixMode(GL_TEXTURE);
glPopMatrix();
+// GLint texcount = 0;
+// glGetIntegerv(GL_TEXTURE_STACK_DEPTH, &texcount);
+// GLint modelcount = 0;
+// glGetIntegerv(GL_TEXTURE_STACK_DEPTH, &modelcount);
+// GLint projcount = 0;
+// glGetIntegerv(GL_TEXTURE_STACK_DEPTH, &projcount);
+//
+// NSLog(@"w/h: %i, %i, counts: %i/%i/%i", ptr->textureWidth,
ptr->textureHeight , texcount, modelcount, projcount);
+
+
+ glBindFramebufferEXT(GL_FRAMEBUFFER, previousFBO);
+ glBindFramebufferEXT(GL_READ_FRAMEBUFFER, previousReadFBO);
+ glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER, previousDrawFBO);
+
glPopClientAttrib();
- glPopAttrib();
-
- glBindFramebufferEXT(GL_FRAMEBUFFER, previousFBO);
- glBindFramebufferEXT(GL_READ_FRAMEBUFFER, previousReadFBO);
- glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER, previousDrawFBO);
+ glPopAttrib();
+ if(syphonFBO){
+// NSLog(@"CACHING CONTEXT + DELETING FBO at RESOURCE ID: %i",
syphonFBO);
+ glDeleteFramebuffersEXT(1, &syphonFBO);
+ glGenFramebuffersEXT(1, &syphonFBO);
+ syphonFBO = nil;
+ }
+
+
[image release];
+
+// glGetIntegerv(GL_TEXTURE_STACK_DEPTH, &texcount);
+// glGetIntegerv(GL_TEXTURE_STACK_DEPTH, &modelcount);
+// glGetIntegerv(GL_TEXTURE_STACK_DEPTH, &projcount);
+//
+// NSLog(@"again counts: %i/%i/%i", texcount, modelcount, projcount);
+
// CGLUnlockContext(cachedContext);
}
=======================================
--- /trunk/Syphon
Implementations/Unity3D/Unity3D-3_5/SyphonUnityPlugin/SyphonUnity.mm Sat
Jul 13 17:26:24 2013
+++ /trunk/Syphon
Implementations/Unity3D/Unity3D-3_5/SyphonUnityPlugin/SyphonUnity.mm Sat
Jul 13 21:08:24 2013
@@ -31,7 +31,6 @@
#include <string>
#ifdef __cplusplus
extern "C" {
-#endif
static std::list<SyphonCacheData*> syphonServers;
static std::list<SyphonCacheData*> syphonClients;
@@ -233,8 +232,7 @@
syphonServerCreate((*list_iter));
}
}
- }
-
+ }
}
@@ -286,6 +284,5 @@
}
}
-#ifdef __cplusplus
}
#endif