sjz::IShader
   IShader 是片元着色器的基类,应当被继承并重写了 main 方法再被使用。TrianglePainter 必须设置了 IShader 对象才能绘图。
   注意,TrianglePainter 对象需要通过自己的 setShader 方法来设置着色器,而不应该直接修改它的 shader 属性。
   sjDefine.h 中的 SJ_SHADER_FBUF_SIZE 宏不能小于 IShader 构造时传入的参数。您可以修改这个宏。(作者不确定这个设计是否会带来不便)

宏:
SJ_SHADER_CONSTRUCT(className)
   用来继承 IShader 的构造器。示例:
class MyShader :public IShader {
    SJ_SHADER_CONSTRUCT(MyShader)
};

// 将被替换为:
class MyShader :public IShader {
public:
    MyShader(unsigned structSize) :IShader(structSize) {}
};

构造器:
IShader(unsigned structSize);
   传入您自定义的顶点数据结构体含有的浮点数的数量。结构体中应当紧密排列若干个 4 字节的浮点数。前四个浮点数是位置信息的 x、y、z、w(x、y 是在绘图区域的像素位置)。

属性:
pImage textureArr[SJ_SHADER_TEXARR_SIZE];
   这个成员没有固定的用途。您可以用它管理着色器用到的纹理。pImage 是 Image 指针,被定义在 sjCanvas.h。SJ_SHADER_TEXARR_SIZE 宏在 sjDefine.h,您可以修改它。

方法:
void setInterpoStartIdx(int idx);
   对顶点数据结构体开始插值的起始位置。着色器需要顶点位置信息时,应设置为0;不需要时,可设置为 4。IShader 对象默认为 4。

virtual sjm::vec4 main();
   自定义着色器时应当重写 main 方法。

相关:TrianglePainter
   SJ_SHADER_FBUF_SIZE
   SJ_SHADER_TEXARR_SIZE