请问一个在Cocos2d-x中的OpenGL ES绘图问题

就我目前所知,如果要直接调用OpenGL ES API来绘图,至少有以下两种方法:

一、创建一个RenderTexture,在RenderTexture的范畴里边绘图,如:

bool TestNode::init() {
    RenderTexture* rtx = RenderTexture::create(300, 300);
    rtx->beginWithClear(1, 1, 1, 1);
    _blendFunc = BlendFunc::ALPHA_PREMULTIPLIED;
    setGLProgramState(GLProgramState::getOrCreateWithGLProgramName(GLProgram::SHADER_NAME_POSITION_LENGTH_TEXTURE_COLOR));
    _customCommand.init(rtx->getGlobalZOrder());
    _customCommand.func = CC_CALLBACK_0(TestNode::onDraw, this);
    Director::getInstance()->getRenderer()->addCommand(&_customCommand);
    rtx->end();
    this->addChild(rtx);
}

void TestNode::onDraw() {
    getGLProgram()->use();
    getGLProgram()->setUniformsForBuiltins();
    GL::blendFunc(_blendFunc.src, _blendFunc.dst);
    GL::enableVertexAttribs(GL::VERTEX_ATTRIB_FLAG_POSITION | GL::VERTEX_ATTRIB_FLAG_COLOR);
    ......
    glVertexAttribPointer(......);
    glVertexAttribPointer(......);
    glDrawArrays(......);
}

二、另一种是不使用RenderTexture,如:

bool TestNode::init() {
    _blendFunc = BlendFunc::ALPHA_PREMULTIPLIED;
    setGLProgramState(GLProgramState::getOrCreateWithGLProgramName(GLProgram::SHADER_NAME_POSITION_LENGTH_TEXTURE_COLOR));
}

void TestNode::draw(Renderer *renderer, const Mat4 &transform, bool transformUpdated) {
    _customCommand.init(_globalZOrder);
    _customCommand.func = CC_CALLBACK_0(TestNode::onDraw, this, transform, transformUpdated);
    renderer->addCommand(&_customCommand);
}

void TestNode::onDraw(const Mat4 &transform, bool transformUpdated) {
    auto glProgram = getGLProgram();
    glProgram->use();
    glProgram->setUniformsForBuiltins(transform);
    GL::blendFunc(_blendFunc.src, _blendFunc.dst);
    GL::enableVertexAttribs(GL::VERTEX_ATTRIB_FLAG_POSITION | GL::VERTEX_ATTRIB_FLAG_COLOR);
    ......
    glVertexAttribPointer(......);
    glVertexAttribPointer(......);
    glDrawArrays(......);
}

请问就绘图而言,这两种方式的异同之处?

Thanks