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

理解OpenGL对象

程序员文章站 2023-12-29 16:55:04
...

对象

OpenGL库是用C语言写的,同时也支持多种语言的派生,但其内核仍是一个C库。由于C的一些语言结构不易被翻译到其它的高级语言,因此OpenGL开发的时候引入了一些抽象层。“对象(Object)”就是其中一个。

在OpenGL中一个对象是指一些选项的集合,它代表OpenGL状态的一个子集。比如,我们可以用一个对象来代表绘图窗口的设置,之后我们就可以设置它的大小、支持的颜色位数等等。可以把对象看做一个C风格的结构体(Struct):

struct object_name {
    GLfloat  option1;
    GLuint   option2;
    GLchar[] name;
};

当我们使用一个对象时,通常看起来像如下一样(把OpenGL上下文看作一个大的结构体):

// OpenGL的状态
struct OpenGL_Context 
{
    ...
    object* object_Window_Target;
    ...     
};
// 创建对象
GLuint objectId = 0;
//这句只产生一个对象ID,不分配显存
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);

这一小段代码展现了你以后使用OpenGL时常见的工作流。我们首先创建一个对象,然后用一个id保存它的引用(实际数据被储存在后台 这个后台具体是哪里呢?)。然后我们将对象绑定至上下文的目标位置(例子中窗口对象目标的位置被定义成GL_WINDOW_TARGET)。接下来我们设置窗口的选项。最后我们将目标位置的对象id设回0,解绑这个对象。设置的选项将被保存在objectId所引用的对象中,一旦我们重新绑定这个对象到GL_WINDOW_TARGET位置,这些选项就会重新生效。

上面全是我拷过来的 没看懂,有几个疑问:

1.创建一个OpenGL对象 用一个id保存它的引用,实际数据被储存在后台这个后台指的是显存的后台缓冲区吗,类似VBO数据一样?

2.我们将对象绑定至上下文的目标位置,这个目标位置指的是:GL_WINDOW_TARGET

理解OpenGL对象

上图中Context是我们的Opengl状态机,然后下面的Object都是一些Opengl的对象,箭头表示绑定到状态机上,也就是执行:glBindObject(GL_WINDOW_TARGET, objectId);  Context中存了很多目标位置

 

 

 

 

上一篇:

下一篇: