最常用的两种 shader :
vertex shader OR fragment(pixel) shader
data(CPU) -> GPU -> draw call -> shader
Draw Call就是CPU调用图形编程接口,比如DirectX或OpenGL,来命令GPU进行渲染的操作。
vertex shader: 告诉 OpenGL 你想要 vertex 出现在屏幕空间的何处
fragment(pixel) shader : 栅格化,每个小三角形什么颜色
(记得 enable shader)
// 为shader创建vertexShader和fragmentShader源代码,并且link them into a single shader program
// get a buffer return an ID 以供后续使用
static unsigned int CreateShader(const std::string& vertexShader, const std::string& fragmentShader)
{
unsigned int program = glCreateProgram();
unsigned int vs = CompiledShader(GL_VERTEX_SHADER, vertexShader);
unsigned int fs = CompiledShader(GL_FRAGMENT_SHADER, fragmentShader);
glAttachShader(program, vs);
glAttachShader(program, fs);
glLinkProgram(program);
glValidateProgram(program);
glDeleteShader(vs);
glDeleteShader(fs);
return program;
}
除此之外,还要创建一个CompiledShader函数
static unsigned int CompiledShader(unsigned int type, const std::string& source)
输入参数是GL_VERTEX_SHADER或者GL_FRAGMENT_SHADER,以生成OpenGL的两个shader,如果要整合为一个函数,接受的类型:unsigned int
之所以是unsigned int:
如果我们安装了VAX(Visual Assist X),有这样几个快捷键