关于3.0新的渲染绘制问题!

我写了个绘制图片通过顶点绘制显示。是一些openGL调用

  //顶点,纹理,颜色     glVertexAttribPointer(GLProgram::VERTEX_ATTRIB_POSITION, 2, GL_FLOAT, GL_FALSE, 0, vertexs_);
     glVertexAttribPointer(GLProgram::VERTEX_ATTRIB_TEX_COORDS, 2, GL_FLOAT, GL_FALSE, 0, uvs_);
     glVertexAttribPointer(GLProgram::VERTEX_ATTRIB_POSITION, 4, GL_UNSIGNED_BYTE, GL_TRUE, 0, colors_);
     //根据索引draw三角形
     glDrawElements(GL_TRIANGLES, (verCont_-2)*3 , GL_UNSIGNED_SHORT, indices_);
     

这些是直接写在draw里的。3.0是不是不能这么写啊。怎么写才能生效?

求大神解决下啊。:11:

我还没迁移到3.0,大概看了一下新的渲染机制,我猜可能是这样…

原来 的draw被废弃了

重写virtual void draw(Renderer *renderer, const kmMat4& transform, bool transformUpdated);

通过renderer->addCommand添加一个CustomCommand,在这个CustomCommand里执行你的绘制方法

以上只是猜测,没试过,求大神指点。

贴上一段我在Beta2的代码

void DrawLayer::draw()
{
_customCommand.init(_globalZOrder);
_customCommand.func = CC_CALLBACK_0(DrawLayer::onDraw, this);
Director::getInstance()->getRenderer()->addCommand(&_customCommand);
}
void DrawLayer::onDraw()
{

kmMat4 oldMat;
kmGLGetMatrix(KM_GL_MODELVIEW, &oldMat);
kmGLLoadMatrix(&_modelViewTransform);

//draw
CHECK_GL_ERROR_DEBUG();

glLineWidth( 2.0f );
DrawPrimitives::setDrawColor4B(255,0,0,255);
DrawPrimitives::drawLine(line.begin, line.end);

CHECK_GL_ERROR_DEBUG();

//end draw
kmGLLoadMatrix(&oldMat);

}

还是没有生效啊,这是我的源码、

void SpritePoly::drawPoly(){
CC_NODE_DRAW_SETUP();

GL::blendFunc(getBlendFunc().src, getBlendFunc().dst);

if(getTexture()!=NULL){
    GL::bindTexture2D(getTexture()->getName());
}else{
    GL::bindTexture2D(0);
}
GL::enableVertexAttribs(GL::VERTEX_ATTRIB_FLAG_POS_COLOR_TEX);
//顶点,纹理,颜色
glVertexAttribPointer(GLProgram::VERTEX_ATTRIB_POSITION, 2, GL_FLOAT, GL_FALSE, 0, vertexs_);
glVertexAttribPointer(GLProgram::VERTEX_ATTRIB_TEX_COORDS, 2, GL_FLOAT, GL_FALSE, 0, uvs_);
glVertexAttribPointer(GLProgram::VERTEX_ATTRIB_POSITION, 4, GL_UNSIGNED_BYTE, GL_TRUE, 0, colors_);
//根据索引draw三角形
glDrawElements(GL_TRIANGLES, (verCont_-2)*3 , GL_UNSIGNED_SHORT, indices_);

}

void SpritePoly::draw(Renderer* renderer, const kmMat4 &transform, bool transformUpdated){
Sprite::draw(renderer,transform,transformUpdated);
CustomCommand r;
r.init(_globalZOrder);
r.func = CC_CALLBACK_0(SpritePoly::drawPoly, this);
Director::getInstance()->getRenderer()->addCommand(&r);
}

不能写到draw里面。看来你没有去参加会议。

现在渲染树已经变了。需要把自己的opengl代码写到ondraw中。draw会调用ondraw的。看代码,你懂。

你确定有onDraw这个方法?我找不到这个方法。

testcpp啊,有代码不看

onDraw()是自己定义的。