在没有XCode的情况下,使用CGL/NSOpenGL在OSX上编写带有OpenGL的C++代码
C++ code with OpenGL on OSX using CGL/NSOpenGL without XCode?
我想在不使用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
以及ApplicationServices
和Cocoa
。答案很大程度上取决于你所说的"代码分歧"是什么意思。
您可以在不使用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++,但我手头没有任何代码。
- 如何在使用 SDL 编写的游戏中仅实现一部分 OpenGL 代码?
- 在Emscripten和Qt之间共享OpenGL代码
- 如何使用 Atom 编译 c++ opengl 代码
- 使用 NDK for Android 编写 OpenGL 代码
- OpenGL代码在GLFW上工作,但在QT OpenGL上不起作用
- 将OpenGL 1.x代码移植到WebGL
- 将 OpenGL 代码从 C++ 移植到 Python
- XCode 4.5简单的OpenGL C 代码问题
- 从带有OpenGL代码的C 转换为使用GUI的QT应用程序
- OpenGL代码在一台计算机上运行缓慢(但在其他计算机上则不然)
- 在Netbeans上编译和运行OpenGL代码
- OpenGL代码显示人体图形,从二进制文件中读取顶点
- 为什么我的 OpenGL 代码不起作用
- (Q) OpenGL 代码无法正确打开窗口
- 旧的OPENGL代码,希望使用glPushMatrix()
- OpenGL代码工作,不管我使用什么输入/窗口处理程序
- 是运行在GPU上的opengl代码
- 新的OpenGL代码编译,但没有发生
- 为什么这个openGL代码没有输出任何东西
- 如何正确地将OpenGL代码添加到外部函数