mirror of https://github.com/axmolengine/axmol.git
Use stack to manage current RenderGroup
This commit is contained in:
parent
8ce16e1e12
commit
0e51504ee6
|
@ -82,28 +82,31 @@ NewClippingNode::NewClippingNode()
|
|||
void NewClippingNode::visit()
|
||||
{
|
||||
//Add group command
|
||||
GroupCommand* groupCommand = new GroupCommand(0,_vertexZ);
|
||||
Renderer::getInstance()->addCommand(groupCommand);
|
||||
|
||||
Renderer::getInstance()->setCurrentRenderQueue(groupCommand->getRenderQueueID());
|
||||
Renderer* renderer = Renderer::getInstance();
|
||||
|
||||
GroupCommand* groupCommand = new GroupCommand(0,_vertexZ);
|
||||
renderer->addCommand(groupCommand);
|
||||
|
||||
renderer->pushGroup(groupCommand->getRenderQueueID());
|
||||
|
||||
CustomCommand* beforeVisitCmd = new CustomCommand(0,_vertexZ);
|
||||
beforeVisitCmd->func = CC_CALLBACK_0(NewClippingNode::beforeVisit, this);
|
||||
Renderer::getInstance()->addCommand(beforeVisitCmd, groupCommand->getRenderQueueID());
|
||||
renderer->addCommand(beforeVisitCmd, groupCommand->getRenderQueueID());
|
||||
|
||||
_stencil->visit();
|
||||
|
||||
CustomCommand* afterDrawStencilCmd = new CustomCommand(0,_vertexZ);
|
||||
afterDrawStencilCmd->func = CC_CALLBACK_0(NewClippingNode::afterDrawStencil, this);
|
||||
Renderer::getInstance()->addCommand(afterDrawStencilCmd, groupCommand->getRenderQueueID());
|
||||
renderer->addCommand(afterDrawStencilCmd, groupCommand->getRenderQueueID());
|
||||
|
||||
Node::visit();
|
||||
|
||||
CustomCommand* afterVisitCmd = new CustomCommand(0,_vertexZ);
|
||||
afterVisitCmd->func = CC_CALLBACK_0(NewClippingNode::afterVisit, this);
|
||||
Renderer::getInstance()->addCommand(afterVisitCmd, groupCommand->getRenderQueueID());
|
||||
renderer->addCommand(afterVisitCmd, groupCommand->getRenderQueueID());
|
||||
|
||||
Renderer::getInstance()->setCurrentRenderQueue(DEFAULT_RENDER_QUEUE);
|
||||
renderer->popGroup();
|
||||
}
|
||||
|
||||
void NewClippingNode::beforeVisit()
|
||||
|
|
|
@ -3,13 +3,11 @@
|
|||
//
|
||||
|
||||
|
||||
#include <OpenGL/OpenGL.h>
|
||||
#include "Renderer.h"
|
||||
#include "CCShaderCache.h"
|
||||
#include "ccGLStateCache.h"
|
||||
#include "CustomCommand.h"
|
||||
#include "QuadCommand.h"
|
||||
#include "CCGL.h"
|
||||
#include "GroupCommand.h"
|
||||
|
||||
|
||||
|
@ -42,7 +40,7 @@ Renderer::Renderer()
|
|||
,_firstCommand(0)
|
||||
,_lastCommand(0)
|
||||
{
|
||||
_currRenderQueueID = DEFAULT_RENDER_QUEUE;
|
||||
_commandGroupStack.push(DEFAULT_RENDER_QUEUE);
|
||||
|
||||
RenderQueue defaultRenderQueue;
|
||||
_renderGroups.push_back(defaultRenderQueue);
|
||||
|
@ -112,7 +110,7 @@ void Renderer::setupVBOAndVAO()
|
|||
void Renderer::addCommand(RenderCommand* command)
|
||||
{
|
||||
command->generateID();
|
||||
_renderGroups[_currRenderQueueID].push_back(command);
|
||||
_renderGroups[_commandGroupStack.top()].push_back(command);
|
||||
}
|
||||
|
||||
void Renderer::addCommand(RenderCommand* command, int renderQueue)
|
||||
|
@ -121,11 +119,21 @@ void Renderer::addCommand(RenderCommand* command, int renderQueue)
|
|||
_renderGroups[renderQueue].push_back(command);
|
||||
}
|
||||
|
||||
void Renderer::pushGroup(int renderQueueID)
|
||||
{
|
||||
_commandGroupStack.push(renderQueueID);
|
||||
}
|
||||
|
||||
void Renderer::popGroup()
|
||||
{
|
||||
_commandGroupStack.pop();
|
||||
}
|
||||
|
||||
int Renderer::createRenderQueue()
|
||||
{
|
||||
RenderQueue newRenderQueue;
|
||||
_renderGroups.push_back(newRenderQueue);
|
||||
return _renderGroups.size() - 1;
|
||||
return (int)_renderGroups.size() - 1;
|
||||
}
|
||||
|
||||
bool compareRenderCommand(RenderCommand* a, RenderCommand* b)
|
||||
|
|
|
@ -37,11 +37,12 @@ public:
|
|||
//TODO support multiple viewport
|
||||
void addCommand(RenderCommand* command);
|
||||
void addCommand(RenderCommand* command, int renderQueue);
|
||||
void pushGroup(int renderQueueID);
|
||||
void popGroup();
|
||||
|
||||
int createRenderQueue();
|
||||
void render();
|
||||
|
||||
inline void setCurrentRenderQueue(int renderQueueID) { _currRenderQueueID = renderQueueID; }
|
||||
|
||||
protected:
|
||||
Renderer();
|
||||
~Renderer();
|
||||
|
@ -54,11 +55,11 @@ protected:
|
|||
void flush();
|
||||
|
||||
protected:
|
||||
stack<int> _commandGroupStack;
|
||||
|
||||
stack<RenderStackElement> _renderStack;
|
||||
vector<RenderQueue> _renderGroups;
|
||||
|
||||
int _currRenderQueueID;
|
||||
|
||||
int _lastMaterialID;
|
||||
|
||||
size_t _firstCommand;
|
||||
|
|
Loading…
Reference in New Issue