diff --git a/cocos/renderer/CCRenderer.cpp b/cocos/renderer/CCRenderer.cpp index 179013d11e..efecfd8b1c 100644 --- a/cocos/renderer/CCRenderer.cpp +++ b/cocos/renderer/CCRenderer.cpp @@ -124,7 +124,7 @@ Renderer::Renderer() RenderQueue defaultRenderQueue; _renderGroups.push_back(defaultRenderQueue); - _batchedQuadCommands.reserve(BATCH_QUADCOMMAND_RESEVER_SIZE); + _batchedCommands.reserve(BATCH_QUADCOMMAND_RESEVER_SIZE); } Renderer::~Renderer() @@ -269,10 +269,10 @@ void Renderer::visitRenderQueue(const RenderQueue& queue) { auto command = queue[index]; auto commandType = command->getType(); - if(RenderCommand::Type::QUAD_COMMAND == commandType) + if(RenderCommand::Type::QUAD_COMMAND == commandType || RenderCommand::Type::TRIANGLES_COMMAND == commandType) { flush3D(); - auto cmd = static_cast(command); + auto cmd = static_cast(command); //Batch quads if( _filledVertex + cmd->getVertexCount() > VBO_SIZE || _filledIndex + cmd->getIndexCount() > INDEX_VBO_SIZE) { @@ -282,9 +282,9 @@ void Renderer::visitRenderQueue(const RenderQueue& queue) drawBatchedQuads(); } - _batchedQuadCommands.push_back(cmd); + _batchedCommands.push_back(cmd); - fillQuadVertices(cmd); + fillVerticesAndIndices(cmd); } else if(RenderCommand::Type::GROUP_COMMAND == commandType) @@ -374,16 +374,16 @@ void Renderer::clean() } // Clear batch quad commands - _batchedQuadCommands.clear(); + _batchedCommands.clear(); _filledVertex = 0; _filledIndex = 0; _lastMaterialID = 0; _lastBatchedMeshCommand = nullptr; } -void Renderer::fillQuadVertices(const QuadCommand* cmd) +void Renderer::fillVerticesAndIndices(const TrianglesCommand* cmd) { - memcpy(_verts + _filledVertex, cmd->getQuads(), sizeof(V3F_C4B_T2F) * cmd->getVertexCount()); + memcpy(_verts + _filledVertex, cmd->getVertices(), sizeof(V3F_C4B_T2F) * cmd->getVertexCount()); const Mat4& modelView = cmd->getModelView(); for(ssize_t i=0; i< cmd->getVertexCount(); ++i) @@ -414,7 +414,7 @@ void Renderer::drawBatchedQuads() int startIndex = 0; //Upload buffer to VBO - if(_filledVertex <= 0 || _filledIndex <= 0 || _batchedQuadCommands.empty()) + if(_filledVertex <= 0 || _filledIndex <= 0 || _batchedCommands.empty()) { return; } @@ -466,10 +466,10 @@ void Renderer::drawBatchedQuads() } //Start drawing verties in batch - for(const auto& cmd : _batchedQuadCommands) + for(const auto& cmd : _batchedCommands) { auto newMaterialID = cmd->getMaterialID(); - if(_lastMaterialID != newMaterialID || newMaterialID == QuadCommand::MATERIAL_ID_DO_NOT_BATCH) + if(_lastMaterialID != newMaterialID || newMaterialID == TrianglesCommand::MATERIAL_ID_DO_NOT_BATCH) { //Draw quads if(indexToDraw > 0) @@ -509,7 +509,7 @@ void Renderer::drawBatchedQuads() glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); } - _batchedQuadCommands.clear(); + _batchedCommands.clear(); _filledVertex = 0; _filledIndex = 0; } diff --git a/cocos/renderer/CCRenderer.h b/cocos/renderer/CCRenderer.h index 85db7cc108..082f24c82d 100644 --- a/cocos/renderer/CCRenderer.h +++ b/cocos/renderer/CCRenderer.h @@ -38,6 +38,7 @@ NS_CC_BEGIN class EventListenerCustom; class QuadCommand; +class TrianglesCommand; class MeshCommand; /** Class that knows how to sort `RenderCommand` objects. @@ -75,8 +76,8 @@ Whenever possible prefer to use `QuadCommand` objects since the renderer will au class CC_DLL Renderer { public: - static const int VBO_SIZE = 65536; - static const int INDEX_VBO_SIZE = 65536 * 6 / 4; + static const int VBO_SIZE = 8192; + static const int INDEX_VBO_SIZE = 8192 * 6 / 4; static const int BATCH_QUADCOMMAND_RESEVER_SIZE = 64; @@ -140,7 +141,7 @@ protected: void visitRenderQueue(const RenderQueue& queue); - void fillQuadVertices(const QuadCommand* cmd); + void fillVerticesAndIndices(const TrianglesCommand* cmd); std::stack _commandGroupStack; @@ -149,7 +150,7 @@ protected: uint32_t _lastMaterialID; MeshCommand* _lastBatchedMeshCommand; - std::vector _batchedQuadCommands; + std::vector _batchedCommands; V3F_C4B_T2F _verts[VBO_SIZE]; GLushort _indices[INDEX_VBO_SIZE];