我想从我创建的自定义窗口发回图像数据。 我尝试了委托,但它似乎没有工作,如果因为他们在不同的线程,为什么工具不起作用的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的裸线版本,只需一个简单的创建窗口,有按钮,单击按钮,主线程中会出现一个三角形。
答案 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]);
然后申请你想要的小队。