void MeshCommand::execute() { // set render state applyRenderState(); // Set material GL::bindTexture2D(_textureID); GL::blendFunc(_blendType.src, _blendType.dst); glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer); _glProgramState->setUniformVec4("u_color", _displayColor); if (_matrixPaletteSize && _matrixPalette) { _glProgramState->setUniformCallback("u_matrixPalette", CC_CALLBACK_2(MeshCommand::MatrixPalleteCallBack, this)); } _glProgramState->apply(_mv); if (Director::getInstance()->getRunningScene()->getLights().size() > 0) setLightUniforms(); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _indexBuffer); // Draw glDrawElements(_primitive, (GLsizei)_indexCount, _indexFormat, 0); CC_INCREMENT_GL_DRAWN_BATCHES_AND_VERTICES(1, _indexCount); //restore render state restoreRenderState(); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); glBindBuffer(GL_ARRAY_BUFFER, 0); }
void MeshCommand::batchDraw() { if (_material) { for(const auto& pass: _material->_currentTechnique->_passes) { pass->bind(_m); glDrawElements(_primitive, (GLsizei)_indexCount, _indexFormat, 0); CC_INCREMENT_GL_DRAWN_BATCHES_AND_VERTICES(1, _indexCount); pass->unbind(); } } else { _glProgramState->applyGLProgram(_m); // set render state applyRenderState(); // Draw glDrawElements(_primitive, (GLsizei)_indexCount, _indexFormat, 0); CC_INCREMENT_GL_DRAWN_BATCHES_AND_VERTICES(1, _indexCount); } }
void MeshCommand::execute() { // Draw without VAO glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _indexBuffer); if (_material) { for(const auto& pass: _material->_currentTechnique->_passes) { pass->bind(_mv, true); glDrawElements(_primitive, (GLsizei)_indexCount, _indexFormat, 0); CC_INCREMENT_GL_DRAWN_BATCHES_AND_VERTICES(1, _indexCount); pass->unbind(); } } else { // set render state _glProgramState->apply(_mv); applyRenderState(); // Draw glDrawElements(_primitive, (GLsizei)_indexCount, _indexFormat, 0); CC_INCREMENT_GL_DRAWN_BATCHES_AND_VERTICES(1, _indexCount); } glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); glBindBuffer(GL_ARRAY_BUFFER, 0); }
void Renderer::setRenderState(RenderState eState, RenderStateValue eValue) { assert(eState < STATE_COUNT); if (m_aeState[eState] == eValue) { LOG_VERBOSE << "Ignoring redundant state change"; return; } m_aeState[eState] = eValue; applyRenderState(eState, eValue); }
void MeshCommand::preBatchDraw() { // set render state applyRenderState(); // Set material GL::bindTexture2D(_textureID); GL::blendFunc(_blendType.src, _blendType.dst); if (Configuration::getInstance()->supportsShareableVAO() && _vao == 0) buildVAO(); if (_vao) { GL::bindVAO(_vao); } else { glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer); _glProgramState->applyAttributes(); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _indexBuffer); } }
void MeshCommand::batchDraw() { // set render state applyRenderState(); _glProgramState->setUniformVec4("u_color", _displayColor); if (_matrixPaletteSize && _matrixPalette) { _glProgramState->setUniformCallback("u_matrixPalette", CC_CALLBACK_2(MeshCommand::MatrixPalleteCallBack, this)); } _glProgramState->applyGLProgram(_mv); _glProgramState->applyUniforms(); if (Director::getInstance()->getRunningScene()->getLights().size() > 0) setLightUniforms(); // Draw glDrawElements(_primitive, (GLsizei)_indexCount, _indexFormat, 0); CC_INCREMENT_GL_DRAWN_BATCHES_AND_VERTICES(1, _indexCount); }