OS X如何使用OpenGL上下文创建窗口

时间:2015-03-15 23:20:00

标签: c macos opengl

不使用GLUT或SDL等多平台库。

在C(没有Objective-C)中,如何使用我可以绘制的有效OpenGL上下文创建一个窗口?

我希望能够从命令行编译它,所以请不要拖放XCode!

1 个答案:

答案 0 :(得分:3)

正确理解您的问题几乎没有假设:

  1. 有一个API正在开发您的应用程序,例如Cocoa API。假设这就是你要求“最好使用Cocoa”的意思。

  2. 基本的OpenGL绘图例程都是plain-C,无论是用GLUT,Cocoa还是其他包装。

  3. 在Cocoa API,AFAIK中没有“使用OpenGL上下文创建窗口”这样的方法。您首先必须创建一个窗口,无论是以编程方式还是使用Interface Builder。

  4. 您可以使用Interface Builder(在Xcode中)设置应该显示OpenGL绘图的窗口。以下不是一个有效的代码,它只是一个最简单的案例演练。然后,您必须声明一个接口,例如:

    @interface myOpenGLView :NSOpenGLView
    {
    @public
    //declare public members
    @private
    //declare private members
    }
    //declare properties and methods
    - (void) drawRect: (NSRect) bounds;
    @end
    
    myOpenGLView *myView;
    

    是NSOpenGLView的子类。习惯上,这被写入一个单独的.m和.h文件类,而不是AppDelegate。

    将OpenGLView从Objects Palette拖到窗口中时,请确保在Xcode右窗格(Utilities区域)中将其声明为Custom Class myOpenGLView 。到目前为止我无法想象没有Objective-C就离开了。但是,在方法体内,您仍然处理传统风格的OpenGL-C。

    -(void) drawRect: (NSRect) bounds
    {   
    glEnable(GL_BLEND);
    glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);    
    glClearColor(0, 0, 0, 0);
    glClear(GL_COLOR_BUFFER_BIT);
    drawSomething();
    glFlush();    
    }
    

    更新绘图的方法不应显式绘制,而是调用以下方法:

    [self.myView setNeedsDisplay: YES];
    

    当然还有更多内容,取决于你所追求的复杂程度。有一些简单的例子可以帮助您在OS X中开始学习OpenGL,例如: https://developer.apple.com/library/mac/documentation/GraphicsImaging/Conceptual/OpenGL-MacProgGuide/opengl_drawing/opengl_drawing.html

    或者: Creating an OpenGL View without Interface Builder

    甚至是这样的: https://www.youtube.com/watch?v=7ModmPsxhug

    但是在Cocoa中创建OpenGL视图并没有什么活泼或快捷。需要一点学习耐心才能获得回报。我希望这可以提供帮助。