使用CGL / NSOpenGL而不使用XCode在OSX上使用OpenGL的C ++代码?

时间:2012-03-16 06:14:47

标签: c++ objective-c macos opengl gcc

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

5 个答案:

答案 0 :(得分:5)

这是可以得到的:

// 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:   %s\n", glGetString(GL_VENDOR)                  ); 
    printf("Renderer: %s\n", glGetString(GL_RENDERER)                ); 
    printf("Version:  %s\n", glGetString(GL_VERSION)                 ); 
    printf("GLSL:     %s\n", glGetString(GL_SHADING_LANGUAGE_VERSION)); 

   return 0; 
}

答案 1 :(得分:2)

fltkSDL都应该有足够的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。很多答案取决于你的'代码差异'是什么意思。

答案 2 :(得分:0)

您可以在不使用Xcode的情况下构建应用程序,但如果您希望不是系统管理员的用户使用它们,您将需要一个应用程序包(因此.plist)和(除非它是游戏)超出用户界面OpenGL提供什么。您无需为UI创建.xib。您可以通过编程方式完成所有操作,但使用.xibs对于大多数事情来说要容易得多。您为什么不想使用旨在帮助您的工具?我不是说他们是最好的,但他们只使用命令行界面。 (一旦你的应用程序有一个Xcode项目,你可以从命令行构建它,甚至自动构建它。)

答案 3 :(得分:0)

嗯,你可以“手工”(我曾经在NeXTStep时间做过),但是它在第一次运作之前是一种痛苦。 XCode在引擎盖下使用makefile。您可以在

中找到并采用makefile
  /Developer/Makefiles

(前XCode 4.3) 或者用于

中的XCode 4.3
 /Applications/Xcode.app/Contents/Developer/Makefiles
祝你好运!

答案 4 :(得分:0)

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