Hi

I am trying to find a way to display a set of images serially on
window. As far as i understood reading Apple programming guides (Core
image, OpenGL) and samples,  NSOpenGLView is the optimal choice for
the task, since it offers asynchrony and delegates anything possible
to the GPU.

According to the samples, to render some picture onto NSOpenGLView, i
need to subclass it, and do all the painting job into -drawRect
method. All the job - is calling CIContext's -drawImage method.
Previously i have to have a CIImage object, that contains an image.
The problem is that almost nothing i rendered. Almost - because
sometimes i get some "artifacts" for certain JPEG image files, but
most often i get a blank black view. It seems, like only special kind
of CIImage objects can be rendered.

An ordinary NSView's subclass does the same job perfectly. But i also
need to play a movie and display it in a view, and according to
samples NSOpenGLView is the preferred way.

Could you give me an advice what am i doing wrong?
Thanks!

Here's the implementation of my NSOpenGLView's subclass:

@implementation RenderingView
CIContext *ciContext;

-(void)awakeFromNib {
        NSLog(@"init");
        [super awakeFromNib];
        CGColorSpaceRef displayColorSpace = CGColorSpaceCreateDeviceRGB();
        ciContext = [[CIContext contextWithCGLContext:[[self openGLContext]
CGLContextObj]
                                                                          
pixelFormat:[[self pixelFormat] CGLPixelFormatObj]
                                                                                
  options:[NSDictionary dictionaryWithObjectsAndKeys:
                                                                                
                   displayColorSpace, kCIContextOutputColorSpace,
                                                                                
                   displayColorSpace, kCIContextWorkingColorSpace, nil] ] 
retain];
        CGColorSpaceRelease(displayColorSpace);
}

-(void)drawRect:(NSRect)dirtyRect {
        NSLog(@"-drawRect");
        [[self openGLContext] makeCurrentContext];
        glClearColor(0,0,0,0);
        glClear(GL_COLOR_BUFFER_BIT);
        
        CIImage *ciImage = [CIImage imageWithContentsOfURL:[NSURL
fileURLWithPath:@"/Users/testuser/Downloads/x_80722192.jpg"]];
        if(!ciImage)
                NSLog(@"ciImage loading error");
        NSRect viewFrame = [self frame];
        CGRect imageFrame = [ciImage extent];
        
        [ciContext drawImage:ciImage
                                 inRect:CGRectMake(10, 10, 100, 100)            
        
        // inRect:CGRectMake(0, 0, viewFrame.size.width, viewFrame.size.height)
                                // 
atPoint:CGPointMake((int)((viewFrame.size.width -
imageFrame.size.width)*0.5), (int)((viewFrame.size.height -
imageFrame.size.height)*0.5))
                                fromRect:/*imageFrame*/CGRectMake(10, 10, 100, 
100)];
        glBegin(GL_LINES);
        glVertex2f(-0.5,-0.5);
        glVertex2f(0.5,0.5);
        glEnd();
        glFlush();
}

-(void)dealloc {
        [ciContext release];
}
@end
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to