Categories
OpenGL

OpenGL notes(1)

有关Framework。

今天遇到一个问题。某个例程里面用了#include 调用了Mac OS X自带的OpenGL库,编译正常。在尝试用贴图渲染3D物体时,NeHe教程里用了AUX_RGBImageRec来储存读入的图片,而这个类型是包含在glaux库里的,这个库又是windows only的。Apple给的官方说明给了一些选项来完成mac中的相同任务,一是用Cocoa的NSView类,二是用Quartz的image source,三是直接从解压的文件里读入Raw数据。当然,我选了第二个。系统的ApplicationServices/CoreGraphics.framework/CGImage.h里面定义了Quartz的图像数据类型CGImageRef,所以,我得把这个头文件include进去。可是导入了ApplicationServices Framework到工程里,在头文件里用#include 却总是报错,no such file or directory。而在工程浏览器里CGImage.h明明在ApplicationServices下面……后来翻Xcode的文档才发现,涉及深层次的问题。

Mac下面的Framework都是用bundle的形式提供的,一个bundle里面可以共存多种版本,保证了对旧版本程序的支持。为了为特定的应用环境提供必需的编程接口,Apple在标准的Framework之外还提供了Umbrella Framework。照我的理解,UF顾名思义应该是期望用伞架的结构,讲分散在各个Standard Framework里的subframework虚拟的链接起来,形成针对某种特定应用的新的framework。与Standard Framework不同,UF并不把它的subframeworks里的头文件都包括进来,而仅仅包含那个framework的master header file,也就是与framework同名的那个。因此,在调用UF的时候,只需要include这个头文件即可。这样也带来一个好处,就是如果Apple对某个framework里的东西进行了修改,开发者并不需要对他们的代码做改动,因为那个master header file总是不会改变的。

好了,废话这么多,最终结论就是,只需要#include 就可以。