shade
学习笔记(
3
)-
cg openGL runtime
library
-
当
uniform
参数设置到
openGL
以后是保存在
CG
openGL runtime
里边或者
cg core runtime
里边,而
d
3d
是直接保存到
GPU
的
constant memory
里边。
-
openGL
在使用
CG
的时候必须首先使用wglCreateContext()
or glXCreateContext()来创建
openGL Context
。
-
设置
Uniform参数:
-
cgGLSetParameter,两种类型
float
(f),double(d).
-
cgGLSetMatrixParameterfr
,
cgGLSetMatrixParameter
dc,
四种,
c
表示列向量为主,
r
表示
row
向量为主。
-
cgGLSetStateMatrixParameter()可以用来设置状态矩阵,包括
ModelView
矩阵,
Projection
矩阵,纹理矩阵。
-
cgGLSetParameterArray()用来设置
Uniform
的数组参数;cgGLSetMatrixParameterArrayfr用来设置矩阵数组
设置变量参数:
- 因为FP的变量参数是按照光栅化插值后的结果来设置的,所以只有VS程序有变量参数。
- 设置变量参数两步:
- cgGLSetParameterPointer():设置变量数组,我理解就是顶点数组
- void
cgGLEnableClientState(CGparameter parameter);和void
cgGLDisableClientState(CGparameter parameter);使得该参数有效。
- 注意:cgGLSetParameter也可以用来设置变量参数,这时采用的是openGL立即模式,也就相当于glVertex,glNormal,glColor这样的做法吧,但是我想这显然是一种效率不高的做法。且cgGLGetParameter不能用来取变量参数。
设置Sampler参数:Sampler和纹理是一一对应的,所以实际就是对一段顶点绘制指定一个纹理。- cgGLSetTextureParameter(CGparameter
parameter,GLuint textureName);来指定一个纹理给CGParameter。
- void
cgGLEnableTextureParameter(CGparameter parameter);来使纹理生效。void
cgGLDisableTextureParameter(CGparameter parameter);使其失效,相当于glBindTexture命令。
void
cgGLSetOptimalOptions(CGprofile profile);来使用最优的Profile。而CGbool
cgGLIsProfileSupported(CGprofile profile);可以用来判断硬件是否支持该Profile。
经过这几天的学习,终于大概明白了shader是怎么work的了,但是对于用programmable pipeline替换掉fixed function还是一头雾水。