在没有XCode的情况下,使用CGL/NSOpenGL在OSX上编写带有OpenGL的C++代码

C++ code with OpenGL on OSX using CGL/NSOpenGL without XCode?

本文关键字:OpenGL 代码 C++ OSX XCode 情况下 CGL 使用 NSOpenGL      更新时间:2023-10-16

我想在不使用XCode的情况下使用CGL或NSOpenGL创建OpenGL窗口(使用命令行gcc编译)。我正在开发一些跨平台的东西,如果可以的话,我想把代码分歧降到最低!我的代码库目前完全是C++。这有可能吗?我是OSX的新手,还没有接触过目标C。我查阅了开发人员的文档,并获得了一些示例文件。他们都在使用xcode。我成功地编译了源代码并与正确的框架链接,但整个应用程序包、xib和info.plist似乎有点过头了。

这是最基本的:

// g++ glInfo.cpp -o glInfo.x -framework OpenGL 
#include <OpenGL/OpenGL.h>
#include <OpenGL/gl3.h>
#include <stdio.h>
int main(int argc, char **argv) 
{ 
    CGLContextObj     ctx; 
    CGLPixelFormatObj pix; 
    GLint             npix; 
    CGLPixelFormatAttribute attribs[] = { 
        (CGLPixelFormatAttribute) 0
    }; 
    CGLChoosePixelFormat( attribs, &pix, &npix ); 
    CGLCreateContext( pix, NULL, &ctx ); 
    CGLSetCurrentContext( ctx ); 
    printf("Vendor:   %sn", glGetString(GL_VENDOR)                  ); 
    printf("Renderer: %sn", glGetString(GL_RENDERER)                ); 
    printf("Version:  %sn", glGetString(GL_VERSION)                 ); 
    printf("GLSL:     %sn", glGetString(GL_SHADING_LANGUAGE_VERSION)); 
   return 0; 
}

fltk和SDL都应该有足够的AGL/CGL代码。我已经用fltk-1.3.0在OS X上构建并运行了cmdline GL应用程序。然而,它使用了AGL子系统,该子系统已被弃用。SDL使用CGL和NSOpenGL制作Quartz视频层:./src/video/quartz

如果您需要构建src.m,请使用编译器的obj-c标志,并让本机g++、llvm-g++、clang++或其他任何工具来处理链接。您可能需要添加-framework CGL -framework OpenGL以及ApplicationServicesCocoa。答案很大程度上取决于你所说的"代码分歧"是什么意思。

您可以在不使用Xcode的情况下构建应用程序,但如果您希望非系统管理员的用户使用它们,则需要一个应用程序捆绑包(因此需要.plist)和(除非是游戏)OpenGL提供的用户界面。您不需要为UI创建.xib。您可以通过编程来完成这一切,尽管使用.xibs对大多数事情来说要容易得多。你为什么不想使用专门为你设计的工具呢?我并不是说它们是最好的,但它们只使用命令行界面就胜过了。(不过,一旦你的应用程序有了Xcode项目,你就可以从命令行构建它,甚至可以自动构建它。)

好吧,你可以"手工"做(我以前在NeXTStep上做过),但在第一次工作之前是很痛苦的。XCode在后台使用makefile。你可以在中找到并采用makefile

  /Developer/Makefiles

(XCode 4.3之前)或中的XCode 4.3

 /Applications/Xcode.app/Contents/Developer/Makefiles

祝你好运!

对于构建系统,我推荐CMake/CPack,它将帮助您保持跨平台并构建应用程序包。对于NSGL,可以使用Obj-C++,但我手头没有任何代码。