| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- #include "Base.h"
- #include "Technique.h"
- #include "Material.h"
- #include "Node.h"
- namespace gameplay
- {
- Technique::Technique(const char* id, Material* material)
- : _id(id ? id : ""), _material(material)
- {
- RenderState::_parent = material;
- }
- Technique::~Technique()
- {
- // Destroy all the passes.
- for (size_t i = 0, count = _passes.size(); i < count; ++i)
- {
- SAFE_RELEASE(_passes[i]);
- }
- }
- const char* Technique::getId() const
- {
- return _id.c_str();
- }
- unsigned int Technique::getPassCount() const
- {
- return (unsigned int)_passes.size();
- }
- Pass* Technique::getPassByIndex(unsigned int index) const
- {
- GP_ASSERT(index < _passes.size());
- return _passes[index];
- }
- Pass* Technique::getPass(const char* id) const
- {
- GP_ASSERT(id);
- for (size_t i = 0, count = _passes.size(); i < count; ++i)
- {
- Pass* pass = _passes[i];
- GP_ASSERT(pass);
- if (strcmp(pass->getId(), id) == 0)
- {
- return pass;
- }
- }
- return NULL;
- }
- Technique* Technique::clone(Material* material, NodeCloneContext &context) const
- {
- Technique* technique = new Technique(getId(), material);
- for (std::vector<Pass*>::const_iterator it = _passes.begin(); it != _passes.end(); ++it)
- {
- Pass* pass = *it;
- GP_ASSERT(pass);
- Pass* passCopy = pass->clone(technique, context);
- GP_ASSERT(passCopy);
- technique->_passes.push_back(passCopy);
- }
- RenderState::cloneInto(technique, context);
- return technique;
- }
- }
|