unity code-shader的拆解为顶点着色以及片元着色(opengles3)

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中。

猜你喜欢

转载自blog.csdn.net/llsansun/article/details/123038292