GLSL 编程思想

Posted thefist11

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GLSL 编程思想相关的知识,希望对你有一定的参考价值。

1. 状态机

OpenGL自身是一个巨大的状态机(State Machine),OpenGL的状态通常被称为OpenGL上下文(Context)。

一系列的变量描述OpenGL此刻应当如何运行。我们通常使用如下途径去更改OpenGL状态:设置选项,操作缓冲。最后,我们使用当前OpenGL上下文来渲染。

假设当我们想告诉OpenGL去画线段而不是三角形的时候,我们通过改变一些上下文变量来改变OpenGL状态,从而告诉OpenGL如何去绘图。一旦我们改变了OpenGL的状态为绘制线段,下一个绘制命令就会画出线段而不是三角形。

  • 状态设置函数(State-changing Function)

这类函数将会改变上下文。

  • 状态使用函数(State-using Function)

这类函数会根据当前OpenGL的状态执行一些操作。

  • 对象

OpenGL库内核仍是一个C库。

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

struct object_name 
    float  option1;
    int    option2;
    char[] name;
;

// OpenGL的状态
struct OpenGL_Context 
    ...
    object* object_Window_Target;
    ...     
;

2.

eg.

// 创建对象
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);

以上是关于GLSL 编程思想的主要内容,如果未能解决你的问题,请参考以下文章

初识OpenGL (-)编程思想

多线程编程

使用 GLSL 进行频率调制?

NO.15 - OpenGL ES 使用GLSL加载图片

OpenGL 3.+ glsl 兼容性一团糟?

错误 GLSL 版本不正确 450