Renderer uses a float as a key

Instead of using a 64-bit int key with viewport, opaque and depth,
it only uses a 32-bit float with only the depth.
Saves time in:
 - No need to convert the 32-bit float into 24-bit int
 - keys are shorter
This commit is contained in:
Ricardo Quesada 2014-01-17 16:08:29 -08:00
parent 24130b2fed
commit 8931d968c0
44 changed files with 100 additions and 238 deletions

View File

@ -19,6 +19,7 @@ cocos2d-x-3.0final ?.? ?
[FIX] Renderer: QuadCommand::init() does not copy the Quads, it only store a reference making the code faster [FIX] Renderer: QuadCommand::init() does not copy the Quads, it only store a reference making the code faster
[FIX] Renderer: Performance improved in Sprite and SpriteBatchNode (and subclasses) sprites in about 20% [FIX] Renderer: Performance improved in Sprite and SpriteBatchNode (and subclasses) sprites in about 20%
[FIX] Renderer: When note using VAO, call glBufferData() instead of glBufferSubData(). [FIX] Renderer: When note using VAO, call glBufferData() instead of glBufferSubData().
[FIX] Renderer: Uses a float as key with only the depth. Viewport, opaque are not needed now
[FIX] Sprite: removed _hasChildren optimization. It uses !_children.empty() now which is super fast as well [FIX] Sprite: removed _hasChildren optimization. It uses !_children.empty() now which is super fast as well
[FIX] Tests: TestCpp works with CMake on Windows. [FIX] Tests: TestCpp works with CMake on Windows.
[FIX] Tests: Sprites Performance Test has 4 new tests [FIX] Tests: Sprites Performance Test has 4 new tests

View File

@ -152,7 +152,7 @@ void AtlasNode::draw(void)
auto shader = ShaderCache::getInstance()->getProgram(GLProgram::SHADER_NAME_POSITION_TEXTURE_COLOR_NO_MVP); auto shader = ShaderCache::getInstance()->getProgram(GLProgram::SHADER_NAME_POSITION_TEXTURE_COLOR_NO_MVP);
_quadCommand.init(0, _quadCommand.init(
_vertexZ, _vertexZ,
_textureAtlas->getTexture()->getName(), _textureAtlas->getTexture()->getName(),
shader, shader,

View File

@ -210,12 +210,12 @@ void ClippingNode::visit()
Renderer* renderer = Director::getInstance()->getRenderer(); Renderer* renderer = Director::getInstance()->getRenderer();
_groupCommand.init(0,_vertexZ); _groupCommand.init(_vertexZ);
renderer->addCommand(&_groupCommand); renderer->addCommand(&_groupCommand);
renderer->pushGroup(_groupCommand.getRenderQueueID()); renderer->pushGroup(_groupCommand.getRenderQueueID());
_beforeVisitCmd.init(0,_vertexZ); _beforeVisitCmd.init(_vertexZ);
_beforeVisitCmd.func = CC_CALLBACK_0(ClippingNode::onBeforeVisit, this); _beforeVisitCmd.func = CC_CALLBACK_0(ClippingNode::onBeforeVisit, this);
renderer->addCommand(&_beforeVisitCmd); renderer->addCommand(&_beforeVisitCmd);
if (_alphaThreshold < 1) if (_alphaThreshold < 1)
@ -238,7 +238,7 @@ void ClippingNode::visit()
} }
_stencil->visit(); _stencil->visit();
_afterDrawStencilCmd.init(0,_vertexZ); _afterDrawStencilCmd.init(_vertexZ);
_afterDrawStencilCmd.func = CC_CALLBACK_0(ClippingNode::onAfterDrawStencil, this); _afterDrawStencilCmd.func = CC_CALLBACK_0(ClippingNode::onAfterDrawStencil, this);
renderer->addCommand(&_afterDrawStencilCmd); renderer->addCommand(&_afterDrawStencilCmd);
@ -268,7 +268,7 @@ void ClippingNode::visit()
this->draw(); this->draw();
} }
_afterVisitCmd.init(0,_vertexZ); _afterVisitCmd.init(_vertexZ);
_afterVisitCmd.func = CC_CALLBACK_0(ClippingNode::onAfterVisit, this); _afterVisitCmd.func = CC_CALLBACK_0(ClippingNode::onAfterVisit, this);
renderer->addCommand(&_afterVisitCmd); renderer->addCommand(&_afterVisitCmd);

View File

@ -241,7 +241,7 @@ void DrawNode::render()
void DrawNode::draw() void DrawNode::draw()
{ {
_customCommand.init(0, _vertexZ); _customCommand.init(_vertexZ);
_customCommand.func = CC_CALLBACK_0(DrawNode::onDraw, this); _customCommand.func = CC_CALLBACK_0(DrawNode::onDraw, this);
Director::getInstance()->getRenderer()->addCommand(&_customCommand); Director::getInstance()->getRenderer()->addCommand(&_customCommand);
} }

View File

@ -666,7 +666,7 @@ void Label::onDraw()
void Label::draw() void Label::draw()
{ {
_customCommand.init(0, _vertexZ); _customCommand.init(_vertexZ);
_customCommand.func = CC_CALLBACK_0(Label::onDraw, this); _customCommand.func = CC_CALLBACK_0(Label::onDraw, this);
Director::getInstance()->getRenderer()->addCommand(&_customCommand); Director::getInstance()->getRenderer()->addCommand(&_customCommand);
} }

View File

@ -565,7 +565,7 @@ void LayerColor::updateColor()
void LayerColor::draw() void LayerColor::draw()
{ {
_customCommand.init(0, _vertexZ); _customCommand.init(_vertexZ);
_customCommand.func = CC_CALLBACK_0(LayerColor::onDraw, this); _customCommand.func = CC_CALLBACK_0(LayerColor::onDraw, this);
Director::getInstance()->getRenderer()->addCommand(&_customCommand); Director::getInstance()->getRenderer()->addCommand(&_customCommand);

View File

@ -359,7 +359,7 @@ void MotionStreak::draw()
if(_nuPoints <= 1) if(_nuPoints <= 1)
return; return;
kmGLGetMatrix(KM_GL_MODELVIEW,&_cachedMV); kmGLGetMatrix(KM_GL_MODELVIEW,&_cachedMV);
_customCommand.init(0,_vertexZ); _customCommand.init(_vertexZ);
_customCommand.func = CC_CALLBACK_0(MotionStreak::onDraw, this); _customCommand.func = CC_CALLBACK_0(MotionStreak::onDraw, this);
Director::getInstance()->getRenderer()->addCommand(&_customCommand); Director::getInstance()->getRenderer()->addCommand(&_customCommand);

View File

@ -92,7 +92,7 @@ void NodeGrid::visit()
Renderer* renderer = Director::getInstance()->getRenderer(); Renderer* renderer = Director::getInstance()->getRenderer();
_groupCommand.init(0,_vertexZ); _groupCommand.init(_vertexZ);
renderer->addCommand(&_groupCommand); renderer->addCommand(&_groupCommand);
renderer->pushGroup(_groupCommand.getRenderQueueID()); renderer->pushGroup(_groupCommand.getRenderQueueID());
@ -104,7 +104,7 @@ void NodeGrid::visit()
_nodeGrid->set2DProjection(); _nodeGrid->set2DProjection();
} }
_gridBeginCommand.init(0,_vertexZ); _gridBeginCommand.init(_vertexZ);
_gridBeginCommand.func = CC_CALLBACK_0(NodeGrid::onGridBeginDraw, this); _gridBeginCommand.func = CC_CALLBACK_0(NodeGrid::onGridBeginDraw, this);
renderer->addCommand(&_gridBeginCommand); renderer->addCommand(&_gridBeginCommand);
@ -152,7 +152,7 @@ void NodeGrid::visit()
director->setProjection(beforeProjectionType); director->setProjection(beforeProjectionType);
} }
_gridEndCommand.init(0,_vertexZ); _gridEndCommand.init(_vertexZ);
_gridEndCommand.func = CC_CALLBACK_0(NodeGrid::onGridEndDraw, this); _gridEndCommand.func = CC_CALLBACK_0(NodeGrid::onGridEndDraw, this);
renderer->addCommand(&_gridEndCommand); renderer->addCommand(&_gridEndCommand);

View File

@ -382,7 +382,7 @@ void ParticleBatchNode::draw(void)
return; return;
} }
_batchCommand.init(0, _batchCommand.init(
_vertexZ, _vertexZ,
_textureAtlas->getTexture()->getName(), _textureAtlas->getTexture()->getName(),
_shaderProgram, _shaderProgram,

View File

@ -439,7 +439,7 @@ void ParticleSystemQuad::draw()
auto shader = ShaderCache::getInstance()->getProgram(GLProgram::SHADER_NAME_POSITION_TEXTURE_COLOR_NO_MVP); auto shader = ShaderCache::getInstance()->getProgram(GLProgram::SHADER_NAME_POSITION_TEXTURE_COLOR_NO_MVP);
_quadCommand.init(0, _vertexZ, _texture->getName(), shader, _blendFunc, _quads, _particleIdx, _modelViewTransform); _quadCommand.init(_vertexZ, _texture->getName(), shader, _blendFunc, _quads, _particleIdx, _modelViewTransform);
Director::getInstance()->getRenderer()->addCommand(&_quadCommand); Director::getInstance()->getRenderer()->addCommand(&_quadCommand);
} }

View File

@ -555,7 +555,7 @@ void ProgressTimer::draw()
if( ! _vertexData || ! _sprite) if( ! _vertexData || ! _sprite)
return; return;
_customCommand.init(0, _vertexZ); _customCommand.init(_vertexZ);
_customCommand.func = CC_CALLBACK_0(ProgressTimer::onDraw, this); _customCommand.func = CC_CALLBACK_0(ProgressTimer::onDraw, this);
Director::getInstance()->getRenderer()->addCommand(&_customCommand); Director::getInstance()->getRenderer()->addCommand(&_customCommand);
} }

View File

@ -322,7 +322,7 @@ void RenderTexture::beginWithClear(float r, float g, float b, float a, float dep
this->begin(); this->begin();
//clear screen //clear screen
_beginWithClearCommand.init(0, _vertexZ); _beginWithClearCommand.init(_vertexZ);
_beginWithClearCommand.func = CC_CALLBACK_0(RenderTexture::onClear, this); _beginWithClearCommand.func = CC_CALLBACK_0(RenderTexture::onClear, this);
Director::getInstance()->getRenderer()->addCommand(&_beginWithClearCommand); Director::getInstance()->getRenderer()->addCommand(&_beginWithClearCommand);
} }
@ -340,7 +340,7 @@ void RenderTexture::clearDepth(float depthValue)
this->begin(); this->begin();
_clearDepthCommand.init(0, _vertexZ); _clearDepthCommand.init(_vertexZ);
_clearDepthCommand.func = CC_CALLBACK_0(RenderTexture::onClearDepth, this); _clearDepthCommand.func = CC_CALLBACK_0(RenderTexture::onClearDepth, this);
Director::getInstance()->getRenderer()->addCommand(&_clearDepthCommand); Director::getInstance()->getRenderer()->addCommand(&_clearDepthCommand);
@ -605,7 +605,7 @@ void RenderTexture::draw()
begin(); begin();
//clear screen //clear screen
_clearCommand.init(0, _vertexZ); _clearCommand.init(_vertexZ);
_clearCommand.func = CC_CALLBACK_0(RenderTexture::onClear, this); _clearCommand.func = CC_CALLBACK_0(RenderTexture::onClear, this);
Director::getInstance()->getRenderer()->addCommand(&_clearCommand); Director::getInstance()->getRenderer()->addCommand(&_clearCommand);
@ -648,13 +648,13 @@ void RenderTexture::begin()
(float)-1.0 / heightRatio, (float)1.0 / heightRatio, -1,1 ); (float)-1.0 / heightRatio, (float)1.0 / heightRatio, -1,1 );
kmGLMultMatrix(&orthoMatrix); kmGLMultMatrix(&orthoMatrix);
_groupCommand.init(0, _vertexZ); _groupCommand.init(_vertexZ);
Renderer *renderer = Director::getInstance()->getRenderer(); Renderer *renderer = Director::getInstance()->getRenderer();
renderer->addCommand(&_groupCommand); renderer->addCommand(&_groupCommand);
renderer->pushGroup(_groupCommand.getRenderQueueID()); renderer->pushGroup(_groupCommand.getRenderQueueID());
_beginCommand.init(0, _vertexZ); _beginCommand.init(_vertexZ);
_beginCommand.func = CC_CALLBACK_0(RenderTexture::onBegin, this); _beginCommand.func = CC_CALLBACK_0(RenderTexture::onBegin, this);
Director::getInstance()->getRenderer()->addCommand(&_beginCommand); Director::getInstance()->getRenderer()->addCommand(&_beginCommand);
@ -662,7 +662,7 @@ void RenderTexture::begin()
void RenderTexture::end() void RenderTexture::end()
{ {
_endCommand.init(0, _vertexZ); _endCommand.init(_vertexZ);
_endCommand.func = CC_CALLBACK_0(RenderTexture::onEnd, this); _endCommand.func = CC_CALLBACK_0(RenderTexture::onEnd, this);
Renderer *renderer = Director::getInstance()->getRenderer(); Renderer *renderer = Director::getInstance()->getRenderer();

View File

@ -670,7 +670,7 @@ void Sprite::updateTransform(void)
void Sprite::draw(void) void Sprite::draw(void)
{ {
//TODO implement z order //TODO implement z order
_quadCommand.init(0, _vertexZ, _texture->getName(), _shaderProgram, _blendFunc, &_quad, 1, _modelViewTransform); _quadCommand.init(_vertexZ, _texture->getName(), _shaderProgram, _blendFunc, &_quad, 1, _modelViewTransform);
// if(culling()) // if(culling())
{ {

View File

@ -356,7 +356,7 @@ void SpriteBatchNode::draw()
for(const auto &child: _children) for(const auto &child: _children)
child->updateTransform(); child->updateTransform();
_batchCommand.init(0, _batchCommand.init(
_vertexZ, _vertexZ,
_textureAtlas->getTexture()->getName(), _textureAtlas->getTexture()->getName(),
_shaderProgram, _shaderProgram,

View File

@ -98,23 +98,23 @@ void TransitionPageTurn::draw()
if( _isInSceneOnTop ) { if( _isInSceneOnTop ) {
_outSceneProxy->visit(); _outSceneProxy->visit();
_enableOffsetCmd.init(0, _vertexZ); _enableOffsetCmd.init(_vertexZ);
_enableOffsetCmd.func = CC_CALLBACK_0(TransitionPageTurn::onEnablePolygonOffset, this); _enableOffsetCmd.func = CC_CALLBACK_0(TransitionPageTurn::onEnablePolygonOffset, this);
Director::getInstance()->getRenderer()->addCommand(&_enableOffsetCmd); Director::getInstance()->getRenderer()->addCommand(&_enableOffsetCmd);
_inSceneProxy->visit(); _inSceneProxy->visit();
_disableOffsetCmd.init(0, _vertexZ); _disableOffsetCmd.init(_vertexZ);
_disableOffsetCmd.func = CC_CALLBACK_0(TransitionPageTurn::onDisablePolygonOffset, this); _disableOffsetCmd.func = CC_CALLBACK_0(TransitionPageTurn::onDisablePolygonOffset, this);
Director::getInstance()->getRenderer()->addCommand(&_disableOffsetCmd); Director::getInstance()->getRenderer()->addCommand(&_disableOffsetCmd);
} else { } else {
_inSceneProxy->visit(); _inSceneProxy->visit();
_enableOffsetCmd.init(0, _vertexZ); _enableOffsetCmd.init(_vertexZ);
_enableOffsetCmd.func = CC_CALLBACK_0(TransitionPageTurn::onEnablePolygonOffset, this); _enableOffsetCmd.func = CC_CALLBACK_0(TransitionPageTurn::onEnablePolygonOffset, this);
Director::getInstance()->getRenderer()->addCommand(&_enableOffsetCmd); Director::getInstance()->getRenderer()->addCommand(&_enableOffsetCmd);
_outSceneProxy->visit(); _outSceneProxy->visit();
_disableOffsetCmd.init(0, _vertexZ); _disableOffsetCmd.init(_vertexZ);
_disableOffsetCmd.func = CC_CALLBACK_0(TransitionPageTurn::onDisablePolygonOffset, this); _disableOffsetCmd.func = CC_CALLBACK_0(TransitionPageTurn::onDisablePolygonOffset, this);
Director::getInstance()->getRenderer()->addCommand(&_disableOffsetCmd); Director::getInstance()->getRenderer()->addCommand(&_disableOffsetCmd);
} }

View File

@ -30,9 +30,7 @@
NS_CC_BEGIN NS_CC_BEGIN
BatchCommand::BatchCommand() BatchCommand::BatchCommand()
: _viewport(0) : _textureID(0)
, _depth(0)
, _textureID(0)
, _blendType(BlendFunc::DISABLE) , _blendType(BlendFunc::DISABLE)
, _textureAtlas(nullptr) , _textureAtlas(nullptr)
{ {
@ -40,9 +38,8 @@ BatchCommand::BatchCommand()
_shader = nullptr; _shader = nullptr;
} }
void BatchCommand::init(int viewport, int32_t depth, GLuint textureID, GLProgram* shader, BlendFunc blendType, TextureAtlas *textureAtlas, const kmMat4& modelViewTransform) void BatchCommand::init(float depth, GLuint textureID, GLProgram* shader, BlendFunc blendType, TextureAtlas *textureAtlas, const kmMat4& modelViewTransform)
{ {
_viewport = viewport;
_depth = depth; _depth = depth;
_textureID = textureID; _textureID = textureID;
_blendType = blendType; _blendType = blendType;
@ -57,59 +54,6 @@ BatchCommand::~BatchCommand()
{ {
} }
int64_t BatchCommand::generateID()
{
_id = 0;
//Generate Material ID
//TODO fix shader ID generation
CCASSERT(_shader->getProgram() < pow(2,10), "ShaderID is greater than 2^10");
//TODO fix texture ID generation
CCASSERT(_textureID < pow(2,18), "TextureID is greater than 2^18");
//TODO fix blend id generation
int blendID = 0;
if(_blendType == BlendFunc::DISABLE)
{
blendID = 0;
}
else if(_blendType == BlendFunc::ALPHA_PREMULTIPLIED)
{
blendID = 1;
}
else if(_blendType == BlendFunc::ALPHA_NON_PREMULTIPLIED)
{
blendID = 2;
}
else if(_blendType == BlendFunc::ADDITIVE)
{
blendID = 3;
}
else
{
blendID = 4;
}
//TODO Material ID should be part of the ID
//
// Temporal hack (later, these 32-bits should be packed in 24-bits
//
// +---------------------+-------------------+----------------------+
// | Shader ID (10 bits) | Blend ID (4 bits) | Texture ID (18 bits) |
// +---------------------+-------------------+----------------------+
_materialID = (int32_t)_shader->getProgram() << 22
| (int32_t)blendID << 18
| (int32_t)_textureID << 0;
//Generate RenderCommandID
_id = (int64_t)_viewport << 61
| (int64_t)1 << 60 //translucent
| (int64_t)_depth << 36;
return _id;
}
void BatchCommand::execute() void BatchCommand::execute()
{ {
// Set material // Set material

View File

@ -43,26 +43,13 @@ public:
BatchCommand(); BatchCommand();
~BatchCommand(); ~BatchCommand();
void init(int viewport, int32_t depth, GLuint texutreID, GLProgram* shader, BlendFunc blendType, TextureAtlas *textureAtlas, const kmMat4& modelViewTransform); void init(float depth, GLuint texutreID, GLProgram* shader, BlendFunc blendType, TextureAtlas *textureAtlas, const kmMat4& modelViewTransform);
// +----------+----------+-----+-----------------------------------+
// | | | | | |
// | ViewPort | Transluc | | Depth | Material ID |
// | 3 bits | 1 bit | | 24 bits | 24 bit2 |
// +----------+----------+-----+----------------+------------------+
virtual int64_t generateID();
void execute(); void execute();
protected: protected:
int32_t _materialID; int32_t _materialID;
//Key Data
int _viewport; /// Which view port it belongs to
//TODO use material to determine if it's translucent
int32_t _depth;
//Maternal //Maternal
GLuint _textureID; GLuint _textureID;

View File

@ -28,15 +28,12 @@ NS_CC_BEGIN
CustomCommand::CustomCommand() CustomCommand::CustomCommand()
: func(nullptr) : func(nullptr)
, _viewport(0)
, _depth(0)
{ {
_type = RenderCommand::Type::CUSTOM_COMMAND; _type = RenderCommand::Type::CUSTOM_COMMAND;
} }
void CustomCommand::init(int viewport, int32_t depth) void CustomCommand::init(float depth)
{ {
_viewport = viewport;
_depth = depth; _depth = depth;
} }
@ -45,17 +42,6 @@ CustomCommand::~CustomCommand()
} }
int64_t CustomCommand::generateID()
{
_id = 0;
_id = (int64_t)_viewport << 61
| (int64_t)1 << 60 // translucent
| (int64_t)_depth << 36;
return _id;
}
void CustomCommand::execute() void CustomCommand::execute()
{ {
if(func) if(func)

View File

@ -39,14 +39,7 @@ public:
public: public:
void init(int viewport, int32_t depth); void init(float depth);
// +----------+----------+-----+-----------------------------------+
// | | | | | |
// | ViewPort | Transluc | | Depth | |
// | 3 bits | 1 bit | | 24 bits | |
// +----------+----------+-----+----------------+------------------+
virtual int64_t generateID();
void execute(); void execute();
@ -54,8 +47,6 @@ public:
std::function<void()> func; std::function<void()> func;
protected: protected:
int _viewport;
int32_t _depth;
}; };
NS_CC_END NS_CC_END

View File

@ -86,16 +86,13 @@ void GroupCommandManager::releaseGroupID(int groupID)
} }
GroupCommand::GroupCommand() GroupCommand::GroupCommand()
: _viewport(0)
, _depth(0)
{ {
_type = RenderCommand::Type::GROUP_COMMAND; _type = RenderCommand::Type::GROUP_COMMAND;
_renderQueueID = GroupCommandManager::getInstance()->getGroupID(); _renderQueueID = GroupCommandManager::getInstance()->getGroupID();
} }
void GroupCommand::init(int viewport, int32_t depth) void GroupCommand::init(float depth)
{ {
_viewport = viewport;
_depth = depth; _depth = depth;
GroupCommandManager::getInstance()->releaseGroupID(_renderQueueID); GroupCommandManager::getInstance()->releaseGroupID(_renderQueueID);
_renderQueueID = GroupCommandManager::getInstance()->getGroupID(); _renderQueueID = GroupCommandManager::getInstance()->getGroupID();
@ -106,15 +103,4 @@ GroupCommand::~GroupCommand()
GroupCommandManager::getInstance()->releaseGroupID(_renderQueueID); GroupCommandManager::getInstance()->releaseGroupID(_renderQueueID);
} }
int64_t GroupCommand::generateID()
{
_id = 0;
_id = (int64_t)_viewport << 61
| (int64_t)1 << 60 // translucent
| (int64_t)_depth << 36;
return _id;
}
NS_CC_END NS_CC_END

View File

@ -58,21 +58,12 @@ public:
public: public:
void init(int viewport, int32_t depth); void init(float depth);
// +----------+----------+-----+-----------------------------------+
// | | | | | |
// | ViewPort | Transluc | | Depth | |
// | 3 bits | 1 bit | | 24 bits | |
// +----------+----------+-----+----------------+------------------+
virtual int64_t generateID() override;
inline bool isTranslucent() {return true;} inline bool isTranslucent() {return true;}
inline int getRenderQueueID() {return _renderQueueID;} inline int getRenderQueueID() {return _renderQueueID;}
protected: protected:
int _viewport;
int32_t _depth;
int _renderQueueID; int _renderQueueID;
}; };

View File

@ -29,9 +29,7 @@
NS_CC_BEGIN NS_CC_BEGIN
QuadCommand::QuadCommand() QuadCommand::QuadCommand()
:_viewport(0) :_textureID(0)
,_depth(0)
,_textureID(0)
,_blendType(BlendFunc::DISABLE) ,_blendType(BlendFunc::DISABLE)
,_quadsCount(0) ,_quadsCount(0)
{ {
@ -40,9 +38,8 @@ QuadCommand::QuadCommand()
_quads = nullptr; _quads = nullptr;
} }
void QuadCommand::init(int viewport, int32_t depth, GLuint textureID, GLProgram* shader, BlendFunc blendType, V3F_C4B_T2F_Quad* quad, ssize_t quadCount, const kmMat4 &mv) void QuadCommand::init(float depth, GLuint textureID, GLProgram* shader, BlendFunc blendType, V3F_C4B_T2F_Quad* quad, ssize_t quadCount, const kmMat4 &mv)
{ {
_viewport = viewport;
_depth = depth; _depth = depth;
_textureID = textureID; _textureID = textureID;
_blendType = blendType; _blendType = blendType;
@ -52,16 +49,16 @@ void QuadCommand::init(int viewport, int32_t depth, GLuint textureID, GLProgram*
_quads = quad; _quads = quad;
_mv = mv; _mv = mv;
generateMaterialID();
} }
QuadCommand::~QuadCommand() QuadCommand::~QuadCommand()
{ {
} }
int64_t QuadCommand::generateID() void QuadCommand::generateMaterialID()
{ {
_id = 0;
//Generate Material ID //Generate Material ID
//TODO fix shader ID generation //TODO fix shader ID generation
CCASSERT(_shader->getProgram() < pow(2,10), "ShaderID is greater than 2^10"); CCASSERT(_shader->getProgram() < pow(2,10), "ShaderID is greater than 2^10");
@ -99,16 +96,9 @@ int64_t QuadCommand::generateID()
// | Shader ID (10 bits) | Blend ID (4 bits) | Texture ID (18 bits) | // | Shader ID (10 bits) | Blend ID (4 bits) | Texture ID (18 bits) |
// +---------------------+-------------------+----------------------+ // +---------------------+-------------------+----------------------+
_materialID = (int32_t)_shader->getProgram() << 22 _materialID = (uint32_t)_shader->getProgram() << 22
| (int32_t)blendID << 18 | (uint32_t)blendID << 18
| (int32_t)_textureID << 0; | (uint32_t)_textureID << 0;
//Generate RenderCommandID
_id = (int64_t)_viewport << 61
| (int64_t)1 << 60 //translucent
| (int64_t)_depth << 36;
return _id;
} }
void QuadCommand::useMaterial() void QuadCommand::useMaterial()

View File

@ -41,21 +41,15 @@ public:
QuadCommand(); QuadCommand();
~QuadCommand(); ~QuadCommand();
void init(int viewport, int32_t depth, GLuint texutreID, GLProgram* shader, BlendFunc blendType, V3F_C4B_T2F_Quad* quads, ssize_t quadCount, void init(float depth, GLuint texutreID, GLProgram* shader, BlendFunc blendType, V3F_C4B_T2F_Quad* quads, ssize_t quadCount,
const kmMat4& mv); const kmMat4& mv);
// +----------+----------+-----+-----------------------------------+
// | | | | | |
// | ViewPort | Transluc | | Depth | Material ID |
// | 3 bits | 1 bit | | 24 bits | 24 bit2 |
// +----------+----------+-----+----------------+------------------+
virtual int64_t generateID();
void useMaterial(); void useMaterial();
//TODO use material to decide if it is translucent //TODO use material to decide if it is translucent
inline bool isTranslucent() const { return true; } inline bool isTranslucent() const { return true; }
void generateMaterialID();
inline uint32_t getMaterialID() const { return _materialID; } inline uint32_t getMaterialID() const { return _materialID; }
inline GLuint getTextureID() const { return _textureID; } inline GLuint getTextureID() const { return _textureID; }
@ -73,12 +67,6 @@ public:
protected: protected:
uint32_t _materialID; uint32_t _materialID;
//Key Data
int _viewport; /// Which view port it belongs to
//TODO use material to determine if it's translucent
int32_t _depth;
//Maternal //Maternal
GLuint _textureID; GLuint _textureID;

View File

@ -28,9 +28,9 @@
NS_CC_BEGIN NS_CC_BEGIN
RenderCommand::RenderCommand() RenderCommand::RenderCommand()
: _type(RenderCommand::Type::UNKNOWN_COMMAND)
, _depth(0)
{ {
_id = 0;
_type = RenderCommand::Type::UNKNOWN_COMMAND;
} }
RenderCommand::~RenderCommand() RenderCommand::~RenderCommand()
@ -57,9 +57,7 @@ void printBits(ssize_t const size, void const * const ptr)
void RenderCommand::printID() void RenderCommand::printID()
{ {
printf("CommandID: "); printf("Command Depth: %f\n", _depth);
printBits(sizeof(_id), &_id);
printf("\n");
} }
NS_CC_END NS_CC_END

View File

@ -33,7 +33,9 @@
NS_CC_BEGIN NS_CC_BEGIN
//TODO make RenderCommand inherent from Object /** Base class of the RenderCommand hierarchy.
The Renderer knows how to render RenderCommands.
*/
class RenderCommand class RenderCommand
{ {
public: public:
@ -47,10 +49,8 @@ public:
GROUP_COMMAND, GROUP_COMMAND,
}; };
virtual int64_t generateID() = 0;
/** Get Render Command Id */ /** Get Render Command Id */
inline int64_t getID() { return _id; } inline float getDepth() { return _depth; }
/** Returns the Command type */ /** Returns the Command type */
inline Type getType() { return _type; } inline Type getType() { return _type; }
@ -61,9 +61,11 @@ protected:
void printID(); void printID();
//Generated IDs // Type used in order to avoid dynamic cast, faster
int64_t _id; /// used for sorting render commands
Type _type; Type _type;
// commands are sort by depth
float _depth;
}; };
NS_CC_END NS_CC_END

View File

@ -185,8 +185,6 @@ void Renderer::addCommand(RenderCommand* command, int renderQueue)
{ {
CCASSERT(renderQueue >=0, "Invalid render queue"); CCASSERT(renderQueue >=0, "Invalid render queue");
CCASSERT(command->getType() != RenderCommand::Type::UNKNOWN_COMMAND, "Invalid Command Type"); CCASSERT(command->getType() != RenderCommand::Type::UNKNOWN_COMMAND, "Invalid Command Type");
command->generateID();
_renderGroups[renderQueue].push_back(command); _renderGroups[renderQueue].push_back(command);
} }
@ -209,7 +207,7 @@ int Renderer::createRenderQueue()
bool compareRenderCommand(RenderCommand* a, RenderCommand* b) bool compareRenderCommand(RenderCommand* a, RenderCommand* b)
{ {
return a->getID() < b->getID(); return a->getDepth() < b->getDepth();
} }
void Renderer::render() void Renderer::render()

View File

@ -156,7 +156,7 @@ void BatchNode::draw()
void BatchNode::generateGroupCommand() void BatchNode::generateGroupCommand()
{ {
Renderer* renderer = Director::getInstance()->getRenderer(); Renderer* renderer = Director::getInstance()->getRenderer();
_groupCommand->init(0,_vertexZ); _groupCommand->init(_vertexZ);
renderer->addCommand(_groupCommand); renderer->addCommand(_groupCommand);
renderer->pushGroup(_groupCommand->getRenderQueueID()); renderer->pushGroup(_groupCommand->getRenderQueueID());

View File

@ -225,7 +225,7 @@ void Skin::draw()
kmGLGetMatrix(KM_GL_MODELVIEW, &mv); kmGLGetMatrix(KM_GL_MODELVIEW, &mv);
//TODO implement z order //TODO implement z order
_quadCommand.init(0, _vertexZ, _texture->getName(), _shaderProgram, _blendFunc, &_quad, 1, mv); _quadCommand.init(_vertexZ, _texture->getName(), _shaderProgram, _blendFunc, &_quad, 1, mv);
Director::getInstance()->getRenderer()->addCommand(&_quadCommand); Director::getInstance()->getRenderer()->addCommand(&_quadCommand);
} }

View File

@ -131,7 +131,7 @@ void Skeleton::draw()
kmGLMatrixMode(KM_GL_MODELVIEW); kmGLMatrixMode(KM_GL_MODELVIEW);
kmGLGetMatrix(KM_GL_MODELVIEW, &_oldTransMatrix); kmGLGetMatrix(KM_GL_MODELVIEW, &_oldTransMatrix);
_customCommand.init(0, _vertexZ); _customCommand.init(_vertexZ);
_customCommand.func = CC_CALLBACK_0(Skeleton::onDraw, this); _customCommand.func = CC_CALLBACK_0(Skeleton::onDraw, this);
Director::getInstance()->getRenderer()->addCommand(&_customCommand); Director::getInstance()->getRenderer()->addCommand(&_customCommand);
} }

View File

@ -210,18 +210,18 @@ void Layout::stencilClippingVisit()
Renderer* renderer = Director::getInstance()->getRenderer(); Renderer* renderer = Director::getInstance()->getRenderer();
_groupCommand.init(0,_vertexZ); _groupCommand.init(_vertexZ);
renderer->addCommand(&_groupCommand); renderer->addCommand(&_groupCommand);
renderer->pushGroup(_groupCommand.getRenderQueueID()); renderer->pushGroup(_groupCommand.getRenderQueueID());
_beforeVisitCmdStencil.init(0,_vertexZ); _beforeVisitCmdStencil.init(_vertexZ);
_beforeVisitCmdStencil.func = CC_CALLBACK_0(Layout::onBeforeVisitStencil, this); _beforeVisitCmdStencil.func = CC_CALLBACK_0(Layout::onBeforeVisitStencil, this);
renderer->addCommand(&_beforeVisitCmdStencil); renderer->addCommand(&_beforeVisitCmdStencil);
_clippingStencil->visit(); _clippingStencil->visit();
_afterDrawStencilCmd.init(0,_vertexZ); _afterDrawStencilCmd.init(_vertexZ);
_afterDrawStencilCmd.func = CC_CALLBACK_0(Layout::onAfterDrawStencil, this); _afterDrawStencilCmd.func = CC_CALLBACK_0(Layout::onAfterDrawStencil, this);
renderer->addCommand(&_afterDrawStencilCmd); renderer->addCommand(&_afterDrawStencilCmd);
@ -251,7 +251,7 @@ void Layout::stencilClippingVisit()
this->draw(); this->draw();
} }
_afterVisitCmdStencil.init(0,_vertexZ); _afterVisitCmdStencil.init(_vertexZ);
_afterVisitCmdStencil.func = CC_CALLBACK_0(Layout::onAfterVisitStencil, this); _afterVisitCmdStencil.func = CC_CALLBACK_0(Layout::onAfterVisitStencil, this);
renderer->addCommand(&_afterVisitCmdStencil); renderer->addCommand(&_afterVisitCmdStencil);
@ -336,13 +336,13 @@ void Layout::scissorClippingVisit()
{ {
Renderer* renderer = Director::getInstance()->getRenderer(); Renderer* renderer = Director::getInstance()->getRenderer();
_beforeVisitCmdScissor.init(0, _vertexZ); _beforeVisitCmdScissor.init(_vertexZ);
_beforeVisitCmdScissor.func = CC_CALLBACK_0(Layout::onBeforeVisitScissor, this); _beforeVisitCmdScissor.func = CC_CALLBACK_0(Layout::onBeforeVisitScissor, this);
renderer->addCommand(&_beforeVisitCmdScissor); renderer->addCommand(&_beforeVisitCmdScissor);
Node::visit(); Node::visit();
_afterVisitCmdScissor.init(0, _vertexZ); _afterVisitCmdScissor.init(_vertexZ);
_afterVisitCmdScissor.func = CC_CALLBACK_0(Layout::onAfterVisitScissor, this); _afterVisitCmdScissor.func = CC_CALLBACK_0(Layout::onAfterVisitScissor, this);
renderer->addCommand(&_afterVisitCmdScissor); renderer->addCommand(&_afterVisitCmdScissor);
} }

View File

@ -494,7 +494,7 @@ void ScrollView::addChild(Node * child, int zOrder, int tag)
void ScrollView::beforeDraw() void ScrollView::beforeDraw()
{ {
_beforeDrawCommand.init(0, _vertexZ); _beforeDrawCommand.init(_vertexZ);
_beforeDrawCommand.func = CC_CALLBACK_0(ScrollView::onBeforeDraw, this); _beforeDrawCommand.func = CC_CALLBACK_0(ScrollView::onBeforeDraw, this);
Director::getInstance()->getRenderer()->addCommand(&_beforeDrawCommand); Director::getInstance()->getRenderer()->addCommand(&_beforeDrawCommand);
} }
@ -529,7 +529,7 @@ void ScrollView::onBeforeDraw()
void ScrollView::afterDraw() void ScrollView::afterDraw()
{ {
_afterDrawCommand.init(0, _vertexZ); _afterDrawCommand.init(_vertexZ);
_afterDrawCommand.func = CC_CALLBACK_0(ScrollView::onAfterDraw, this); _afterDrawCommand.func = CC_CALLBACK_0(ScrollView::onAfterDraw, this);
Director::getInstance()->getRenderer()->addCommand(&_afterDrawCommand); Director::getInstance()->getRenderer()->addCommand(&_afterDrawCommand);
} }

View File

@ -1314,7 +1314,7 @@ void ActionFollow::onEnter()
void ActionFollow::draw() void ActionFollow::draw()
{ {
_customCommand.init(0, _vertexZ); _customCommand.init(_vertexZ);
_customCommand.func = CC_CALLBACK_0(ActionFollow::onDraw, this); _customCommand.func = CC_CALLBACK_0(ActionFollow::onDraw, this);
Director::getInstance()->getRenderer()->addCommand(&_customCommand); Director::getInstance()->getRenderer()->addCommand(&_customCommand);
@ -1630,7 +1630,7 @@ void ActionCatmullRomStacked::draw()
kmGLPopMatrix(); kmGLPopMatrix();
kmGLGetMatrix(KM_GL_MODELVIEW, &_modelViewMV2); kmGLGetMatrix(KM_GL_MODELVIEW, &_modelViewMV2);
_customCommand.init(0, _vertexZ); _customCommand.init(_vertexZ);
_customCommand.func = CC_CALLBACK_0(ActionCatmullRomStacked::onDraw, this); _customCommand.func = CC_CALLBACK_0(ActionCatmullRomStacked::onDraw, this);
Director::getInstance()->getRenderer()->addCommand(&_customCommand); Director::getInstance()->getRenderer()->addCommand(&_customCommand);
} }
@ -1745,7 +1745,7 @@ void ActionCardinalSplineStacked::draw()
kmGLGetMatrix(KM_GL_MODELVIEW, &_modelViewMV2); kmGLGetMatrix(KM_GL_MODELVIEW, &_modelViewMV2);
kmGLPopMatrix(); kmGLPopMatrix();
_customCommand.init(0, _vertexZ); _customCommand.init(_vertexZ);
_customCommand.func = CC_CALLBACK_0(ActionCardinalSplineStacked::onDraw, this); _customCommand.func = CC_CALLBACK_0(ActionCardinalSplineStacked::onDraw, this);
Director::getInstance()->getRenderer()->addCommand(&_customCommand); Director::getInstance()->getRenderer()->addCommand(&_customCommand);
} }
@ -2107,7 +2107,7 @@ void ActionCatmullRom::draw()
kmGLPopMatrix(); kmGLPopMatrix();
kmGLGetMatrix(KM_GL_MODELVIEW, &_modelViewMV2); kmGLGetMatrix(KM_GL_MODELVIEW, &_modelViewMV2);
_customCommand.init(0, _vertexZ); _customCommand.init(_vertexZ);
_customCommand.func = CC_CALLBACK_0(ActionCatmullRom::onDraw, this); _customCommand.func = CC_CALLBACK_0(ActionCatmullRom::onDraw, this);
Director::getInstance()->getRenderer()->addCommand(&_customCommand); Director::getInstance()->getRenderer()->addCommand(&_customCommand);
} }
@ -2207,7 +2207,7 @@ void ActionCardinalSpline::draw()
kmGLGetMatrix(KM_GL_MODELVIEW, &_modelViewMV2); kmGLGetMatrix(KM_GL_MODELVIEW, &_modelViewMV2);
kmGLPopMatrix(); kmGLPopMatrix();
_customCommand.init(0, _vertexZ); _customCommand.init(_vertexZ);
_customCommand.func = CC_CALLBACK_0(ActionCardinalSpline::onDraw, this); _customCommand.func = CC_CALLBACK_0(ActionCardinalSpline::onDraw, this);
Director::getInstance()->getRenderer()->addCommand(&_customCommand); Director::getInstance()->getRenderer()->addCommand(&_customCommand);
} }

View File

@ -211,7 +211,7 @@ void Box2DView::draw()
{ {
Layer::draw(); Layer::draw();
_customCmd.init(0, _vertexZ); _customCmd.init(_vertexZ);
_customCmd.func = CC_CALLBACK_0(Box2DView::onDraw, this); _customCmd.func = CC_CALLBACK_0(Box2DView::onDraw, this);
Director::getInstance()->getRenderer()->addCommand(&_customCmd); Director::getInstance()->getRenderer()->addCommand(&_customCmd);
} }

View File

@ -611,7 +611,7 @@ void RawStencilBufferTest::draw()
auto iter = _renderCmds.begin(); auto iter = _renderCmds.begin();
iter->init(0, _vertexZ); iter->init(_vertexZ);
iter->func = CC_CALLBACK_0(RawStencilBufferTest::onEnableStencil, this); iter->func = CC_CALLBACK_0(RawStencilBufferTest::onEnableStencil, this);
renderer->addCommand(&(*iter)); renderer->addCommand(&(*iter));
++iter; ++iter;
@ -628,7 +628,7 @@ void RawStencilBufferTest::draw()
spritePoint.y = 0; spritePoint.y = 0;
_sprites.at(i)->setPosition( spritePoint ); _sprites.at(i)->setPosition( spritePoint );
iter->init(0, _vertexZ); iter->init(_vertexZ);
iter->func = CC_CALLBACK_0(RawStencilBufferTest::onBeforeDrawClip, this, i, stencilPoint); iter->func = CC_CALLBACK_0(RawStencilBufferTest::onBeforeDrawClip, this, i, stencilPoint);
renderer->addCommand(&(*iter)); renderer->addCommand(&(*iter));
++iter; ++iter;
@ -638,7 +638,7 @@ void RawStencilBufferTest::draw()
_sprites.at(i)->visit(); _sprites.at(i)->visit();
kmGLPopMatrix(); kmGLPopMatrix();
iter->init(0, _vertexZ); iter->init(_vertexZ);
iter->func = CC_CALLBACK_0(RawStencilBufferTest::onBeforeDrawSprite, this, i, winPoint); iter->func = CC_CALLBACK_0(RawStencilBufferTest::onBeforeDrawSprite, this, i, winPoint);
renderer->addCommand(&(*iter)); renderer->addCommand(&(*iter));
++iter; ++iter;
@ -649,7 +649,7 @@ void RawStencilBufferTest::draw()
kmGLPopMatrix(); kmGLPopMatrix();
} }
iter->init(0, _vertexZ); iter->init(_vertexZ);
iter->func = CC_CALLBACK_0(RawStencilBufferTest::onDisableStencil, this); iter->func = CC_CALLBACK_0(RawStencilBufferTest::onDisableStencil, this);
renderer->addCommand(&(*iter)); renderer->addCommand(&(*iter));

View File

@ -116,7 +116,7 @@ DrawPrimitivesTest::DrawPrimitivesTest()
void DrawPrimitivesTest::draw() void DrawPrimitivesTest::draw()
{ {
_customCommand.init(0, _vertexZ); _customCommand.init(_vertexZ);
_customCommand.func = CC_CALLBACK_0(DrawPrimitivesTest::onDraw, this); _customCommand.func = CC_CALLBACK_0(DrawPrimitivesTest::onDraw, this);
Director::getInstance()->getRenderer()->addCommand(&_customCommand); Director::getInstance()->getRenderer()->addCommand(&_customCommand);
} }

View File

@ -1067,7 +1067,7 @@ void TestColliderDetector::update(float delta)
} }
void TestColliderDetector::draw() void TestColliderDetector::draw()
{ {
_customCommand.init(0, _vertexZ); _customCommand.init(_vertexZ);
_customCommand.func = CC_CALLBACK_0(TestColliderDetector::onDraw, this); _customCommand.func = CC_CALLBACK_0(TestColliderDetector::onDraw, this);
Director::getInstance()->getRenderer()->addCommand(&_customCommand); Director::getInstance()->getRenderer()->addCommand(&_customCommand);
} }
@ -1108,7 +1108,7 @@ std::string TestBoundingBox::title() const
} }
void TestBoundingBox::draw() void TestBoundingBox::draw()
{ {
_customCommand.init(0, _vertexZ); _customCommand.init(_vertexZ);
_customCommand.func = CC_CALLBACK_0(TestBoundingBox::onDraw, this); _customCommand.func = CC_CALLBACK_0(TestBoundingBox::onDraw, this);
Director::getInstance()->getRenderer()->addCommand(&_customCommand); Director::getInstance()->getRenderer()->addCommand(&_customCommand);

View File

@ -210,7 +210,7 @@ void Atlas1::draw()
// GL_VERTEX_ARRAY, GL_COLOR_ARRAY, GL_TEXTURE_COORD_ARRAY // GL_VERTEX_ARRAY, GL_COLOR_ARRAY, GL_TEXTURE_COORD_ARRAY
// GL_TEXTURE_2D // GL_TEXTURE_2D
_customCommand.init(0, _vertexZ); _customCommand.init(_vertexZ);
_customCommand.func = CC_CALLBACK_0(Atlas1::onDraw, this); _customCommand.func = CC_CALLBACK_0(Atlas1::onDraw, this);
Director::getInstance()->getRenderer()->addCommand(&_customCommand); Director::getInstance()->getRenderer()->addCommand(&_customCommand);
@ -526,7 +526,7 @@ Atlas4::Atlas4()
void Atlas4::draw() void Atlas4::draw()
{ {
_customCommand.init(0, _vertexZ); _customCommand.init(_vertexZ);
_customCommand.func = CC_CALLBACK_0(Atlas4::onDraw, this); _customCommand.func = CC_CALLBACK_0(Atlas4::onDraw, this);
Director::getInstance()->getRenderer()->addCommand(&_customCommand); Director::getInstance()->getRenderer()->addCommand(&_customCommand);
} }
@ -1612,7 +1612,7 @@ std::string LabelBMFontBounds::subtitle() const
void LabelBMFontBounds::draw() void LabelBMFontBounds::draw()
{ {
_customCommand.init(0, _vertexZ); _customCommand.init(_vertexZ);
_customCommand.func = CC_CALLBACK_0(LabelBMFontBounds::onDraw, this); _customCommand.func = CC_CALLBACK_0(LabelBMFontBounds::onDraw, this);
Director::getInstance()->getRenderer()->addCommand(&_customCommand); Director::getInstance()->getRenderer()->addCommand(&_customCommand);
} }

View File

@ -302,7 +302,7 @@ LabelFNTSpriteActions::LabelFNTSpriteActions()
void LabelFNTSpriteActions::draw() void LabelFNTSpriteActions::draw()
{ {
_renderCmd.init(0, _vertexZ); _renderCmd.init(_vertexZ);
_renderCmd.func = CC_CALLBACK_0(LabelFNTSpriteActions::onDraw, this); _renderCmd.func = CC_CALLBACK_0(LabelFNTSpriteActions::onDraw, this);
Director::getInstance()->getRenderer()->addCommand(&_renderCmd); Director::getInstance()->getRenderer()->addCommand(&_renderCmd);
@ -912,7 +912,7 @@ std::string LabelFNTBounds::subtitle() const
void LabelFNTBounds::draw() void LabelFNTBounds::draw()
{ {
_renderCmd.init(0, _vertexZ); _renderCmd.init(_vertexZ);
_renderCmd.func = CC_CALLBACK_0(LabelFNTBounds::onDraw, this); _renderCmd.func = CC_CALLBACK_0(LabelFNTBounds::onDraw, this);
Director::getInstance()->getRenderer()->addCommand(&_renderCmd); Director::getInstance()->getRenderer()->addCommand(&_renderCmd);
} }

View File

@ -932,7 +932,7 @@ protected:
void MySprite::draw() void MySprite::draw()
{ {
_customCommand.init(0, _vertexZ); _customCommand.init(_vertexZ);
_customCommand.func = CC_CALLBACK_0(MySprite::onDraw, this); _customCommand.func = CC_CALLBACK_0(MySprite::onDraw, this);
Director::getInstance()->getRenderer()->addCommand(&_customCommand); Director::getInstance()->getRenderer()->addCommand(&_customCommand);
} }

View File

@ -470,19 +470,19 @@ RenderTextureTestDepthStencil::~RenderTextureTestDepthStencil()
void RenderTextureTestDepthStencil::draw() void RenderTextureTestDepthStencil::draw()
{ {
_renderCmds[0].init(0, _vertexZ); _renderCmds[0].init(_vertexZ);
_renderCmds[0].func = CC_CALLBACK_0(RenderTextureTestDepthStencil::onBeforeClear, this); _renderCmds[0].func = CC_CALLBACK_0(RenderTextureTestDepthStencil::onBeforeClear, this);
Director::getInstance()->getRenderer()->addCommand(&_renderCmds[0]); Director::getInstance()->getRenderer()->addCommand(&_renderCmds[0]);
_rend->beginWithClear(0, 0, 0, 0, 0, 0); _rend->beginWithClear(0, 0, 0, 0, 0, 0);
_renderCmds[1].init(0, _vertexZ); _renderCmds[1].init(_vertexZ);
_renderCmds[1].func = CC_CALLBACK_0(RenderTextureTestDepthStencil::onBeforeStencil, this); _renderCmds[1].func = CC_CALLBACK_0(RenderTextureTestDepthStencil::onBeforeStencil, this);
Director::getInstance()->getRenderer()->addCommand(&_renderCmds[1]); Director::getInstance()->getRenderer()->addCommand(&_renderCmds[1]);
_spriteDS->visit(); _spriteDS->visit();
_renderCmds[2].init(0, _vertexZ); _renderCmds[2].init(_vertexZ);
_renderCmds[2].func = CC_CALLBACK_0(RenderTextureTestDepthStencil::onBeforDraw, this); _renderCmds[2].func = CC_CALLBACK_0(RenderTextureTestDepthStencil::onBeforDraw, this);
Director::getInstance()->getRenderer()->addCommand(&_renderCmds[2]); Director::getInstance()->getRenderer()->addCommand(&_renderCmds[2]);
@ -490,7 +490,7 @@ void RenderTextureTestDepthStencil::draw()
_rend->end(); _rend->end();
_renderCmds[3].init(0, _vertexZ); _renderCmds[3].init(_vertexZ);
_renderCmds[3].func = CC_CALLBACK_0(RenderTextureTestDepthStencil::onAfterDraw, this); _renderCmds[3].func = CC_CALLBACK_0(RenderTextureTestDepthStencil::onAfterDraw, this);
Director::getInstance()->getRenderer()->addCommand(&_renderCmds[3]); Director::getInstance()->getRenderer()->addCommand(&_renderCmds[3]);
@ -638,7 +638,7 @@ SpriteRenderTextureBug::SimpleSprite* SpriteRenderTextureBug::SimpleSprite::crea
void SpriteRenderTextureBug::SimpleSprite::draw() void SpriteRenderTextureBug::SimpleSprite::draw()
{ {
_customCommand.init(0, _vertexZ); _customCommand.init(_vertexZ);
_customCommand.func = CC_CALLBACK_0(SpriteRenderTextureBug::SimpleSprite::onBeforeDraw, this); _customCommand.func = CC_CALLBACK_0(SpriteRenderTextureBug::SimpleSprite::onBeforeDraw, this);
Director::getInstance()->getRenderer()->addCommand(&_customCommand); Director::getInstance()->getRenderer()->addCommand(&_customCommand);

View File

@ -193,7 +193,7 @@ void ShaderNode::setPosition(const Point &newPosition)
void ShaderNode::draw() void ShaderNode::draw()
{ {
_customCommand.init(0, _vertexZ); _customCommand.init(_vertexZ);
_customCommand.func = CC_CALLBACK_0(ShaderNode::onDraw, this); _customCommand.func = CC_CALLBACK_0(ShaderNode::onDraw, this);
Director::getInstance()->getRenderer()->addCommand(&_customCommand); Director::getInstance()->getRenderer()->addCommand(&_customCommand);
} }
@ -526,7 +526,7 @@ void SpriteBlur::initProgram()
void SpriteBlur::draw() void SpriteBlur::draw()
{ {
_customCommand.init(0, _vertexZ); _customCommand.init(_vertexZ);
_customCommand.func = CC_CALLBACK_0(SpriteBlur::onDraw, this); _customCommand.func = CC_CALLBACK_0(SpriteBlur::onDraw, this);
Director::getInstance()->getRenderer()->addCommand(&_customCommand); Director::getInstance()->getRenderer()->addCommand(&_customCommand);
} }

View File

@ -178,7 +178,7 @@ void ShaderSprite::initShader()
void ShaderSprite::draw() void ShaderSprite::draw()
{ {
_renderCommand.init(0, _vertexZ); _renderCommand.init(_vertexZ);
_renderCommand.func = CC_CALLBACK_0(ShaderSprite::onDraw, this); _renderCommand.func = CC_CALLBACK_0(ShaderSprite::onDraw, this);
Director::getInstance()->getRenderer()->addCommand(&_renderCommand); Director::getInstance()->getRenderer()->addCommand(&_renderCommand);

View File

@ -1794,7 +1794,7 @@ void TextureDrawAtPoint::draw()
{ {
TextureDemo::draw(); TextureDemo::draw();
_renderCmd.init(0, _vertexZ); _renderCmd.init(_vertexZ);
_renderCmd.func = CC_CALLBACK_0(TextureDrawAtPoint::onDraw, this); _renderCmd.func = CC_CALLBACK_0(TextureDrawAtPoint::onDraw, this);
Director::getInstance()->getRenderer()->addCommand(&_renderCmd); Director::getInstance()->getRenderer()->addCommand(&_renderCmd);
@ -1835,7 +1835,7 @@ void TextureDrawInRect::draw()
{ {
TextureDemo::draw(); TextureDemo::draw();
_renderCmd.init(0, _vertexZ); _renderCmd.init(_vertexZ);
_renderCmd.func = CC_CALLBACK_0(TextureDrawInRect::onDraw, this); _renderCmd.func = CC_CALLBACK_0(TextureDrawInRect::onDraw, this);
Director::getInstance()->getRenderer()->addCommand(&_renderCmd); Director::getInstance()->getRenderer()->addCommand(&_renderCmd);

View File

@ -599,7 +599,7 @@ TMXOrthoObjectsTest::TMXOrthoObjectsTest()
void TMXOrthoObjectsTest::draw() void TMXOrthoObjectsTest::draw()
{ {
_renderCmd.init(0, _vertexZ); _renderCmd.init(_vertexZ);
_renderCmd.func = CC_CALLBACK_0(TMXOrthoObjectsTest::onDraw, this); _renderCmd.func = CC_CALLBACK_0(TMXOrthoObjectsTest::onDraw, this);
Director::getInstance()->getRenderer()->addCommand(&_renderCmd); Director::getInstance()->getRenderer()->addCommand(&_renderCmd);
} }
@ -672,7 +672,7 @@ TMXIsoObjectsTest::TMXIsoObjectsTest()
void TMXIsoObjectsTest::draw() void TMXIsoObjectsTest::draw()
{ {
_renderCmd.init(0, _vertexZ); _renderCmd.init(_vertexZ);
_renderCmd.func = CC_CALLBACK_0(TMXIsoObjectsTest::onDraw, this); _renderCmd.func = CC_CALLBACK_0(TMXIsoObjectsTest::onDraw, this);
Director::getInstance()->getRenderer()->addCommand(&_renderCmd); Director::getInstance()->getRenderer()->addCommand(&_renderCmd);
} }
@ -1504,7 +1504,7 @@ TMXGIDObjectsTest::TMXGIDObjectsTest()
void TMXGIDObjectsTest::draw() void TMXGIDObjectsTest::draw()
{ {
_renderCmd.init(0, _vertexZ); _renderCmd.init(_vertexZ);
_renderCmd.func = CC_CALLBACK_0(TMXGIDObjectsTest::onDraw, this); _renderCmd.func = CC_CALLBACK_0(TMXGIDObjectsTest::onDraw, this);
Director::getInstance()->getRenderer()->addCommand(&_renderCmd); Director::getInstance()->getRenderer()->addCommand(&_renderCmd);
} }