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