opengles3的shader
在GlslGpuProgramGLES30中是针对gles3的shader的识别和提交到opengl渲染的类。
GlslGpuProgramGLES30::Create (const std::string &shaderString, ChannelAssigns& channels)是把shader代码字符串拆解下来放到channels这个shader的缓存内。
m_Programs[0] = glCreateProgram())是创建shader的program。
这里就是对顶点着色和片元着色的拆分,识别vertex和fragment的标识来放到顶点和片元shader里面去。
CompileProgram:
CompileProgram(0, vertexShaderSource, fragmentShaderSource, channels)
然后通过BindVProgAttrbutes(vprog, channels, m_Programs[0])这个来让顶点的属性绑定,通过glBindAttribLocation来绑定属性,
CompileGLSLVertexShader这里是绑定属性信息并且通过
编译出顶点着色。
然后CompileGLSLFragmentShader是创建片元着色并且编译片元着色。GlslGpuProgramGLES30::CompileGlslShader
写入文件:
最后写入文件内。
有错误的提醒:
如果是有编译错误则执行ParseGlslErrors。
GlslGpuProgramGLES30::GetGLProgram
这个是获取shader信息然后拆解,在GLSLUtilities的GetGLSLFogData来设置fog的属性,ParseGLSLVersion是版本相关信息的写入,SkipGLSLDirectives是去掉没用的字符串,
srcVS.insert和srcPS.insert是写入顶点和片元shader的字符串,InsertFogVertexCodeGLES和InsertFogFragmentCodeGLES是插入fog的字符串到shader中,
shader绑定glCreateProgram
PatchShaderFogGLES做完后就设置到gl的shader中,
同样的在dx11中就是在GpuProgramsD3D11中。