欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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);

常用工作流

相关标签: OpenGL3.3学习

上一篇: CSS笔记-1:伪类选择器

下一篇: