OpenGL给着色器传递数据的方式

在使用OpenGL框架时,开发者可以通过penGL API向着色器传递数据,主要通过以下三种方式:

Attributes(属性变量)

Attributes(属性变量):用来表示与顶点相关的数据的变量也叫做顶点属性,比如顶点坐标、法线、纹理坐标、投影矩阵、模型矩阵等;Attributes只能在顶点着色器中使用,不能在片元着色器中声明和使用。

Uniforms(统一变量)

Uniforms(统一变量):表示一个不经常修改的变量,通常用于在着色器程序之间存储不经常改变的数据。OpenGL的着色器程序在运行过程中不能改变Uniforms的值,比如转换矩阵、光照参数或者颜色等;Uniforms可以在顶点着色器和片元着色器中使用。

Uniforms的存储占用硬件的存储空间,然而硬件的储存空间是固定的,所以在程序中Uniforms的数量是受限的。开发者可以通过读取gl_MaxVertexUniformVectors和gl_MaxFragmentUniformVectors这两个内置变量,它们分别表示顶点着色器和片段着色器中可用的Uniforms向量的最大数量。

同样,开发者也可以通过使用GL_MAX_VERTEX_UNIFORM_VECTORS和GL_MAX_FRAGMENT_UNIFORM_VECTORS这两个参数调用glGetIntegerv函数来获取这两个值。这两种方式都可以得到同样的结果。

根据OpenGL规范,OpenGL实现必须至少提供256个顶点着色器Uniforms和224个片段着色器Uniforms。这些是最小要求,具体的OpenGL实现可能会提供更多的Uniforms。但是,在编写着色器程序时,通常需要确保不超过这些最小限制,以保证程序在所有OpenGL实现上都能正确运行。

Texture Data(纹理数据)

Texture Data(纹理数据):用来贴在图形表面用来改变图形视觉外观的图像数据---即图片数据。Texture Data可以在顶点着色器和片元着色器中使用。

openGLDataTranser

分类: 音视频开发 标签: OpenGL着色器Shader

评论

暂无评论数据

暂无评论数据

目录