cocos2dx源码分析:渲染指令TrianglesCommand

TrianglesCommand是用来渲染三角形的渲染指令,用于cocos2dx中渲染2d图像,比如最常用的Sprite就是使用TrianglesCommand进行渲染的。
从它的构造函数来看,它由下列参数构造:

float globalOrder, 全局zorder,决定渲染先后顺序
GLuint textureID, 纹理id,只有一个,没有纹理混合的功能
GLProgramState* glProgramState, 着色程序及其参数
BlendFunc blendType, 颜色混合函数
const Triangles& triangles,三角形顶点数据,包括顶点坐标、颜色、纹理坐标
const Mat4& mv, 变换矩阵
uint32_t flags,标志位

初始化函数

void TrianglesCommand::init(float globalOrder, GLuint textureID, GLProgramState* glProgramState, BlendFunc blendType, const Triangles& triangles,const Mat4& mv, uint32_t flags)
{
    CCASSERT(glProgramState, "Invalid GLProgramState");
    CCASSERT(glProgramState->getVertexAttribsFlags() == 0, "No custom attributes are supported in QuadCommand");

    RenderCommand::init(globalOrder, mv, flags);
    /*顶点数必须能被三整除,一个三角形3个顶点*/
    _triangles = triangles;
    if(_triangles.indexCount % 3 != 0)
    {
        int count = _triangles.indexCount;
        _triangles.indexCount = count / 3 * 3;
        CCLOGERROR("Resize indexCount from %zd to %zd, size must be multiple times of 3", count, _triangles.indexCount);
    }
    _mv = mv;
    /*保存数据*/
    if( _textureID != textureID || _blendType.src != blendType.src || _blendType.dst != blendType.dst ||
       _glProgramState != glProgramState ||
       _glProgram != glProgramState->getGLProgram())
    {
        _textureID = textureID;
        _blendType = blendType;
        _glProgramState = glProgramState;
        _glProgram = glProgramState->getGLProgram();
        /*生成材质id,可以通过材质id判断材质是否相同,材质id是一个哈希值*/
        generateMaterialID();
    }
}

你可能感兴趣的:(cocos2d-x)