root/OpenSceneGraph/trunk/src/osgViewer/PixelBufferCocoa.mm @ 10887

Revision 10887, 4.0 kB (checked in by robert, 4 years ago)

From Stephan Huber, "attached you'll find the missing GraphicsHandleCocoa?-implementation."

  • Property svn:executable set to *
RevLine 
[9879]1/*
2 *  PixelBufferCocoa.cpp
3 *  OpenSceneGraph
4 *
5 *  Created by Stephan Huber on 27.06.08.
6 *  Copyright 2008 Stephan Maximilian Huber, digital mind. All rights reserved.
7 *
8 */
9
10#include <iostream>
11#include <osgViewer/api/Cocoa/PixelBufferCocoa>
12#include <osgViewer/api/Cocoa/GraphicsWindowCocoa>
13#include <Cocoa/Cocoa.h>
14
15namespace osgViewer {
16
17
18void PixelBufferCocoa::init()
19{
[10887]20    //std::cout << "PixelBufferCocoa :: init not implemented yet " << std::endl;
21   
22    _valid = _initialized = true;   
23   
[9879]24
25}
26
27bool PixelBufferCocoa::realizeImplementation()
28{
[10887]29    std::cout << "PixelBufferCocoa :: realizeImplementation not implemented yet " << std::endl;
30   
[9879]31    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
[10887]32         
33    NSOpenGLPixelFormatAttribute attr[32];
[9879]34    int i = 0;
35   
36    attr[i++] = NSOpenGLPFADepthSize;
37    attr[i++] = static_cast<NSOpenGLPixelFormatAttribute>(_traits->depth);
38
39    if (_traits->doubleBuffer) {
40        attr[i++] = NSOpenGLPFADoubleBuffer;
41    }
42   
43    if (_traits->alpha) {
44        attr[i++] = NSOpenGLPFAAlphaSize;
45        attr[i++] = static_cast<NSOpenGLPixelFormatAttribute>(_traits->alpha);
46    }
47
48    if (_traits->stencil) {
49        attr[i++] = NSOpenGLPFAStencilSize;
50        attr[i++] = static_cast<NSOpenGLPixelFormatAttribute>(_traits->stencil);
51    }
52 
53
54    if (_traits->sampleBuffers) {
55        attr[i++] = NSOpenGLPFASampleBuffers;
56        attr[i++] = static_cast<NSOpenGLPixelFormatAttribute>(_traits->sampleBuffers);
57        attr[i++] = NSOpenGLPFASamples;
58        attr[i++] = static_cast<NSOpenGLPixelFormatAttribute>(_traits->samples);
59    }
60
61    attr[i++] = NSOpenGLPFAPixelBuffer; // for pbuffer usage
62    attr[i++] = NSOpenGLPFAAccelerated;
63    attr[i] = static_cast<NSOpenGLPixelFormatAttribute>(0);
64   
65    // create the context
66    NSOpenGLContext* sharedContext = NULL;
67   
[10887]68    GraphicsHandleCocoa* graphicsHandleCocoa = dynamic_cast<GraphicsHandleCocoa*>(_traits->sharedContext);
69    if (graphicsHandleCocoa)
[9879]70    {
[10887]71        sharedContext = graphicsHandleCocoa->getNSOpenGLContext();
[9879]72    }
[10887]73   
74   
75    NSOpenGLPixelFormat* pixelformat = [[NSOpenGLPixelFormat alloc] initWithAttributes:attr ];
[9879]76    _context = [[NSOpenGLContext alloc] initWithFormat: pixelformat shareContext: sharedContext];
77    NSOpenGLPixelBuffer* pbuffer = [[NSOpenGLPixelBuffer alloc] initWithTextureTarget: _traits->target textureInternalFormat: _traits->format textureMaxMipMapLevel: _traits->level pixelsWide: _traits->width pixelsHigh: _traits->height];
78   
79    [_context setPixelBuffer: pbuffer cubeMapFace: _traits->face mipMapLevel:_traits->level currentVirtualScreen: nil];
80   
81    [pool release];
82   
83    _realized = (_context != nil);
84    return _realized;
85}
86
87
88void PixelBufferCocoa::closeImplementation()
89{
[10887]90    _realized = false;
[9879]91   
92   
93}
94
95
96
97/** Make this graphics context current.*/
98bool PixelBufferCocoa::makeCurrentImplementation()
99{
[10887]100    // osg::notify(osg::INFO) << "PixelBufferCocoa::makeCurrentImplementation" << std::endl;
[9879]101   
102    [_context makeCurrentContext];
[10887]103    return true;
[9879]104}
105
106
107/** Make this graphics context current with specified read context implementation. */
108bool PixelBufferCocoa::makeContextCurrentImplementation(osg::GraphicsContext* readContext)
109{
[10887]110    return makeCurrentImplementation();
[9879]111}
112
113/** Release the graphics context.*/
114bool PixelBufferCocoa::releaseContextImplementation()
115{
[10887]116    // osg::notify(osg::INFO) << "PixelBufferCocoa::releaseContextImplementation" << std::endl;
[9879]117   
118    [NSOpenGLContext clearCurrentContext];
119    return true;
120}
121
122/** Bind the graphics context to associated texture implementation.*/
123void PixelBufferCocoa::bindPBufferToTextureImplementation( GLenum buffer )
124{
[10887]125    std::cout << "PixelBufferCocoa :: bindPBufferToTextureImplementation not implemented yet " << std::endl;
[9879]126}
127
128/** Swap the front and back buffers.*/
129void PixelBufferCocoa::swapBuffersImplementation()
130{
[10887]131    osg::notify(osg::INFO) << "PixelBufferCocoa::swapBuffersImplementation" << std::endl;
[9879]132    [_context flushBuffer];
133}
134
135 PixelBufferCocoa::~PixelBufferCocoa()
[10887]136 {   
[9879]137    [_context release];
138 }
139
140
141
142
143}
Note: See TracBrowser for help on using the browser.