FxPlug在mainThread和CustomWindow之间进行通信

时间:2018-04-11 16:51:58

标签: objective-c macos

我想从我创建的自定义窗口发回图像数据。 我尝试了委托,但它似乎没有工作,如果因为他们在不同的线程,为什么工具不起作用的idk。

这是委托文件

@protocol ViewShotDelegate<NSObject>
- (void) SentHelp:(NSString *) data;
@end

插件类MainPlugin

@implementation MainPlugin
- (void) SentHelp:(NSString *) data{
      NSLog(data);

}

其他类CustomWindow访问者

@interface CustomWindow: NSWindowController <ViewShotDelegate>
   @property(nonatomic,weak)  id<ViewShotDelegate> delegate;
@end

@implementation CustomWindow
- (IBAction)SentHelp:(id)sender{
      NSLog(@"Help!!!");
}

我建议另一个建议是使用像CGLContextObj这样的sharecontext,但我真的不知道如何使用共享上下文来绘制。并且示例和文档太模糊了,有人可以给我一个如何使用sharecontext的裸线版本,只需一个简单的创建窗口,有按钮,单击按钮,主线程中会出现一个三角形。

1 个答案:

答案 0 :(得分:0)

所以最后。我使用NSImage来存储视图的屏幕截图。

// this in interface
   NSImage* image;
   @property (assign) IBOutlet NSView *someView; 
//This in body some where, called when you want to take screen shot.
   image = [[NSImage alloc] initWithData:[someView 
dataWithPDFInsideRect:[someView bounds]]];

在renderOutput之后,您可以继续检查窗口是否捕获了屏幕截图。然后调用函数来取回图像。

// this in the renderOutput
 if (wc.isUpdate){
 NSImage* newimage = [wc GetImage];
 } 

获得图像后,继续创建纹理(转换为NSBitmapImageRep并调用glTexImage2D

glTexImage2D(GL_TEXTURE_2D, 
             0,
             samplesPerPixel == 4 ? GL_RGBA : GL_RGB, 
             (int)[bMaps pixelsWide], 
             (int)[bMaps pixelsHigh], 
             0, 
             samplesPerPixel == 4 ? GL_RGBA : GL_RGB, 
             GL_UNSIGNED_BYTE, [bMaps bitmapData]);

然后申请你想要的小队。