OpenGL本身不是一个API,而是一个规范。
OpenGL是一个巨大的状态机(state machine),它是定义OpenGL现在该如何工作的变量的集合。
Immediate mode也称作fixed function pipeline。
因此,在OpenGL3.2+的版本中,立即模式被弃用了。
非常有用和受欢迎的扩展未来可能会集成到OpenGL的更高版本中,在使用扩展的功能前,一般要确认扩展是否存在。
if(GL_ARB_extension_name){
//使用扩展完成功能
}
else{
//扩展不支持,使用传统方法完成功能
}
OpenGL中的对象是一些选项的集合,它代表OpenGL状态的一个子集。
struct object_name{
float option1;
int option2;
char[] name;
};
实际使用的例子(OpenGL_Context是OpenGL上下文):
struct OpenGL_Context{
...
object_name* object_Window_Target;
...
}
//create object
unsigned int objectId=0;
glGenObject(1,&objectId);
// bind/assign object to context
glBindObject(GL_WINDOW_TARGET, objectId);
// set options of the object bound to GL_WINDOW_TARGET
glSetObjectOption(GL_WINDOW_TARGET, GL_OPTION_WINDOW_WIDTH, 800);
glSetObjectOption(GL_WINDOW_TARGET, GL_OPTION_WINDOW_WIDTH, 600);
//set context target back to default
glBindObject(GL_WINDOW_TARGET,0);
上述代码展示了OpenGL的工作流程:
glGenObject。glBindObject(GL_WINDOW_TARGET, objectId)。使用对象的好处:一个程序中,我们不止可以定义一个对象,并设置它们的选项,每个对象都可以是不同的设置。在我们执行一个使用OpenGL状态的操作的时候,只需要绑定含有需要的设置的对象即可。