shader.selector can be a Array
RenderContext could be use a empty template , and buff could pre-create
a new util function for shader: evalAttrExpEx()