OpenGl3.3初识00
程序员文章站
2024-03-25 16:50:10
...
初识OpenGl3.3
- OpenGL本身并不是一个API,它仅仅是一个由Khronos组织制定并维护的规范(Specification)。
- 实际的OpenGL库的开发者通常是显卡的生产商。你购买的显卡所支持的OpenGL版本都为这个系列的显卡专门开发的。当你使用Apple系统的时候,OpenGL库是由Apple自身维护的。在Linux下,有显卡生产商提供的OpenGL库,也有一些爱好者改编的版本。这也意味着任何时候OpenGL库表现的行为与规范规定的不一致时,基本都是库的开发者留下的bug.
核心模式(Core-profile)和立即渲染模式(Immediate mode)
- 立即渲染模式(Immediate mode,也就是固定渲染管线):绘制图形很方便。OpenGL的大多数功能都被库隐藏起来,开发者很少有控制OpenGL如何进行计算的*
- 核心模式(Core-profile): 更多的灵活性,更高的效率,更重要的是可以更深入的理解图形编程
扩展
- OpenGL的一大特性就是对扩展(Extension)的支持,当一个显卡公司提出一个新特性或者渲染上的大优化,通常会以扩展的方式在驱动中实现。
if(GL_ARB_extension_name)
{
// 使用硬件支持的全新的现代特性
}
else
{
// 不支持此扩展: 用旧的方式去做
}
状态机
- 只要你记住OpenGL本质上是个大状态机,就能更容易理解它的大部分特性。
对象
- OpenGL库是用C语言写的,同时也支持多种语言的派生,但其内核仍是一个C库 。可以把对象看做一个C风格的结构体(Struct)
struct OpenGL_Context {
...
object* object_Window_Target;
...
};
// OpenGL的状态
// 创建对象
unsigned int objectId = 0;
glGenObject(1, &objectId);
// 绑定对象至上下文
glBindObject(GL_WINDOW_TARGET, objectId);
// 设置当前绑定到 GL_WINDOW_TARGET 的对象的一些选项
glSetObjectOption(GL_WINDOW_TARGET, GL_OPTION_WINDOW_WIDTH, 800);
glSetObjectOption(GL_WINDOW_TARGET, GL_OPTION_WINDOW_HEIGHT, 600);
// 将上下文对象设回默认
glBindObject(GL_WINDOW_TARGET, 0);
常用工作流
上一篇: CSS笔记-1:伪类选择器