void RenderState::bind(Pass* pass) { CC_ASSERT(pass); if (_texture) GL::bindTexture2D(_texture->getName()); // Get the combined modified state bits for our RenderState hierarchy. long stateOverrideBits = _state ? _state->_bits : 0; RenderState* rs = _parent; while (rs) { if (rs->_state) { stateOverrideBits |= rs->_state->_bits; } rs = rs->_parent; } // Restore renderer state to its default, except for explicitly specified states StateBlock::restore(stateOverrideBits); // Apply renderer state for the entire hierarchy, top-down. rs = NULL; while ((rs = getTopmost(rs))) { if (rs->_state) { rs->_state->bindNoRestore(); } } }
void RenderState::bind(Pass* pass) { GP_ASSERT(pass); // Get the combined modified state bits for our RenderState hierarchy. long stateOverrideBits = _state ? _state->_bits : 0; RenderState* rs = _parent; while (rs) { if (rs->_state) { stateOverrideBits |= rs->_state->_bits; } rs = rs->_parent; } // Restore renderer state to its default, except for explicitly specified states StateBlock::restore(stateOverrideBits); // Apply parameter bindings and renderer state for the entire hierarchy, top-down. rs = NULL; Effect* effect = pass->getEffect(); while ((rs = getTopmost(rs))) { for (size_t i = 0, count = rs->_parameters.size(); i < count; ++i) { GP_ASSERT(rs->_parameters[i]); rs->_parameters[i]->bind(effect); } if (rs->_state) { rs->_state->bindNoRestore(); } } }