本文整理汇总了C++中PODVector::Begin方法的典型用法代码示例。如果您正苦于以下问题:C++ PODVector::Begin方法的具体用法?C++ PODVector::Begin怎么用?C++ PODVector::Begin使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类PODVector
的用法示例。
在下文中一共展示了PODVector::Begin方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: HandleNodeAdded
// ----------------------------------------------------------------------------
void IKSolver::HandleNodeAdded(StringHash eventType, VariantMap& eventData)
{
using namespace NodeAdded;
if (solver_->tree == nullptr)
return;
auto* node = static_cast<Node*>(eventData[P_NODE].GetPtr());
PODVector<IKEffector*> effectors;
node->GetComponents<IKEffector>(effectors, true);
for (PODVector<IKEffector*>::ConstIterator it = effectors.Begin(); it != effectors.End(); ++it)
{
if (ComponentIsInOurSubtree(*it) == false)
continue;
BuildTreeToEffector(*it);
effectorList_.Push(*it);
}
PODVector<IKConstraint*> constraints;
node->GetComponents<IKConstraint>(constraints, true);
for (PODVector<IKConstraint*>::ConstIterator it = constraints.Begin(); it != constraints.End(); ++it)
{
if (ComponentIsInOurSubtree(*it) == false)
continue;
constraintList_.Push(*it);
}
}
示例2: Sort
void BatchQueue::SortFrontToBack2Pass(PODVector<Batch*>& batches)
{
// Mobile devices likely use a tiled deferred approach, with which front-to-back sorting is irrelevant. The 2-pass
// method is also time consuming, so just sort with state having priority
#ifdef GL_ES_VERSION_2_0
Sort(batches.Begin(), batches.End(), CompareBatchesState);
#else
// For desktop, first sort by distance and remap shader/material/geometry IDs in the sort key
Sort(batches.Begin(), batches.End(), CompareBatchesFrontToBack);
unsigned freeShaderID = 0;
unsigned short freeMaterialID = 0;
unsigned short freeGeometryID = 0;
for (PODVector<Batch*>::Iterator i = batches.Begin(); i != batches.End(); ++i)
{
Batch* batch = *i;
unsigned shaderID = (batch->sortKey_ >> 32);
HashMap<unsigned, unsigned>::ConstIterator j = shaderRemapping_.Find(shaderID);
if (j != shaderRemapping_.End())
shaderID = j->second_;
else
{
shaderID = shaderRemapping_[shaderID] = freeShaderID | (shaderID & 0xc0000000);
++freeShaderID;
}
unsigned short materialID = (unsigned short)(batch->sortKey_ & 0xffff0000);
HashMap<unsigned short, unsigned short>::ConstIterator k = materialRemapping_.Find(materialID);
if (k != materialRemapping_.End())
materialID = k->second_;
else
{
materialID = materialRemapping_[materialID] = freeMaterialID;
++freeMaterialID;
}
unsigned short geometryID = (unsigned short)(batch->sortKey_ & 0xffff);
HashMap<unsigned short, unsigned short>::ConstIterator l = geometryRemapping_.Find(geometryID);
if (l != geometryRemapping_.End())
geometryID = l->second_;
else
{
geometryID = geometryRemapping_[geometryID] = freeGeometryID;
++freeGeometryID;
}
batch->sortKey_ = (((unsigned long long)shaderID) << 32) || (((unsigned long long)materialID) << 16) | geometryID;
}
shaderRemapping_.Clear();
materialRemapping_.Clear();
geometryRemapping_.Clear();
// Finally sort again with the rewritten ID's
Sort(batches.Begin(), batches.End(), CompareBatchesState);
#endif
}
示例3: ClearDrawablesZone
void Zone::ClearDrawablesZone()
{
if (octant_ && lastWorldBoundingBox_.defined_)
{
PODVector<Drawable*> result;
BoxOctreeQuery query(result, lastWorldBoundingBox_, DRAWABLE_GEOMETRY | DRAWABLE_ZONE);
octant_->GetRoot()->GetDrawables(query);
for (PODVector<Drawable*>::Iterator i = result.Begin(); i != result.End(); ++i)
{
Drawable* drawable = *i;
unsigned drawableFlags = drawable->GetDrawableFlags();
if (drawableFlags & DRAWABLE_GEOMETRY)
drawable->SetZone(0);
else if (drawableFlags & DRAWABLE_ZONE)
{
Zone* zone = static_cast<Zone*>(drawable);
zone->lastAmbientStartZone_.Reset();
zone->lastAmbientEndZone_.Reset();
}
}
}
lastWorldBoundingBox_ = GetWorldBoundingBox();
lastAmbientStartZone_.Reset();
lastAmbientEndZone_.Reset();
}
示例4: Create
void VertexDeclaration::Create(Graphics* graphics, const PODVector<VertexDeclarationElement>& elements)
{
SharedArrayPtr<D3DVERTEXELEMENT9> elementArray(new D3DVERTEXELEMENT9[elements.Size() + 1]);
D3DVERTEXELEMENT9* dest = elementArray;
for (Vector<VertexDeclarationElement>::ConstIterator i = elements.Begin(); i != elements.End(); ++i)
{
dest->Stream = (WORD)i->streamIndex_;
dest->Offset = (WORD)i->offset_;
dest->Type = d3dElementType[i->type_];
dest->Method = D3DDECLMETHOD_DEFAULT;
dest->Usage = d3dElementUsage[i->semantic_];
dest->UsageIndex = i->index_;
dest++;
}
dest->Stream = 0xff;
dest->Offset = 0;
dest->Type = D3DDECLTYPE_UNUSED;
dest->Method = 0;
dest->Usage = 0;
dest->UsageIndex = 0;
IDirect3DDevice9* device = graphics->GetImpl()->GetDevice();
HRESULT hr = device->CreateVertexDeclaration(elementArray, &declaration_);
if (FAILED(hr))
{
URHO3D_SAFE_RELEASE(declaration_);
URHO3D_LOGD3DERROR("Failed to create vertex declaration", hr);
}
}
示例5: Raycast
void PhysicsWorld::Raycast(PODVector<PhysicsRaycastResult>& result, const Ray& ray, float maxDistance, unsigned collisionMask)
{
ATOMIC_PROFILE(PhysicsRaycast);
if (maxDistance >= M_INFINITY)
ATOMIC_LOGWARNING("Infinite maxDistance in physics raycast is not supported");
btCollisionWorld::AllHitsRayResultCallback
rayCallback(ToBtVector3(ray.origin_), ToBtVector3(ray.origin_ + maxDistance * ray.direction_));
rayCallback.m_collisionFilterGroup = (short)0xffff;
rayCallback.m_collisionFilterMask = (short)collisionMask;
world_->rayTest(rayCallback.m_rayFromWorld, rayCallback.m_rayToWorld, rayCallback);
for (int i = 0; i < rayCallback.m_collisionObjects.size(); ++i)
{
PhysicsRaycastResult newResult;
newResult.body_ = static_cast<RigidBody*>(rayCallback.m_collisionObjects[i]->getUserPointer());
newResult.position_ = ToVector3(rayCallback.m_hitPointWorld[i]);
newResult.normal_ = ToVector3(rayCallback.m_hitNormalWorld[i]);
newResult.distance_ = (newResult.position_ - ray.origin_).Length();
newResult.hitFraction_ = rayCallback.m_closestHitFraction;
result.Push(newResult);
}
Sort(result.Begin(), result.End(), CompareRaycastResults);
}
示例6: HandleNodeRemoved
// ----------------------------------------------------------------------------
void IKSolver::HandleNodeRemoved(StringHash eventType, VariantMap& eventData)
{
using namespace NodeRemoved;
if (solver_->tree == NULL)
return;
Node* node = static_cast<Node*>(eventData[P_NODE].GetPtr());
// Remove cached IKEffectors from our list
PODVector<Node*> nodes;
node->GetChildrenWithComponent<IKEffector>(nodes, true);
for (PODVector<Node*>::ConstIterator it = nodes.Begin(); it != nodes.End(); ++it)
{
IKEffector* effector = (*it)->GetComponent<IKEffector>();
effector->SetIKEffector(NULL);
effectorList_.RemoveSwap(effector);
}
// Special case, if the node being destroyed is the root node, destroy the
// solver's tree instead of destroying the single node. Calling
// ik_node_destroy() on the solver's root node will cause segfaults.
ik_node_t* ikNode = ik_node_find_child(solver_->tree, node->GetID());
if (ikNode != NULL)
{
if (ikNode == solver_->tree)
ik_solver_destroy_tree(solver_);
else
ik_node_destroy(ikNode);
MarkSolverTreeDirty();
}
}
示例7: Create
void VertexDeclaration::Create(Graphics* graphics, const PODVector<VertexDeclarationElement>& elements)
{
SharedArrayPtr<D3DVERTEXELEMENT9> elementArray(new D3DVERTEXELEMENT9[elements.Size() + 1]);
D3DVERTEXELEMENT9* dest = elementArray;
for (Vector<VertexDeclarationElement>::ConstIterator i = elements.Begin(); i != elements.End(); ++i)
{
dest->Stream = i->stream_;
dest->Offset = i->offset_;
dest->Type = d3dElementType[i->element_];
dest->Method = D3DDECLMETHOD_DEFAULT;
dest->Usage = d3dElementUsage[i->element_];
dest->UsageIndex = d3dElementUsageIndex[i->element_];
dest++;
}
dest->Stream = 0xff;
dest->Offset = 0;
dest->Type = D3DDECLTYPE_UNUSED;
dest->Method = 0;
dest->Usage = 0;
dest->UsageIndex = 0;
IDirect3DDevice9* device = graphics->GetImpl()->GetDevice();
if (!device)
return;
device->CreateVertexDeclaration(elementArray, &declaration_);
}
示例8: UpdateOffsets
void VertexBuffer::UpdateOffsets(PODVector<VertexElement>& elements)
{
unsigned elementOffset = 0;
for (PODVector<VertexElement>::Iterator i = elements.Begin(); i != elements.End(); ++i)
{
i->offset_ = elementOffset;
elementOffset += ELEMENT_TYPESIZES[i->type_];
}
}
示例9: Sort
void Renderer2D::ProcessRayQuery(const RayOctreeQuery& query, PODVector<RayQueryResult>& results)
{
unsigned resultSize = results.Size();
for (unsigned i = 0; i < drawables_.Size(); ++i)
{
if (drawables_[i]->GetViewMask() & query.viewMask_)
drawables_[i]->ProcessRayQuery(query, results);
}
if (results.Size() != resultSize)
Sort(results.Begin() + resultSize, results.End(), CompareRayQueryResults);
}
示例10: HandleNodeRemoved
// ----------------------------------------------------------------------------
void IKSolver::HandleNodeRemoved(StringHash eventType, VariantMap& eventData)
{
using namespace NodeRemoved;
if (solver_->tree == nullptr)
return;
auto* node = static_cast<Node*>(eventData[P_NODE].GetPtr());
// Remove cached IKEffectors from our list
PODVector<IKEffector*> effectors;
node->GetComponents<IKEffector>(effectors, true);
for (PODVector<IKEffector*>::ConstIterator it = effectors.Begin(); it != effectors.End(); ++it)
{
(*it)->SetIKEffectorNode(nullptr);
effectorList_.RemoveSwap(*it);
}
PODVector<IKConstraint*> constraints;
node->GetComponents<IKConstraint>(constraints, true);
for (PODVector<IKConstraint*>::ConstIterator it = constraints.Begin(); it != constraints.End(); ++it)
{
constraintList_.RemoveSwap(*it);
}
// Special case, if the node being destroyed is the root node, destroy the
// solver's tree instead of destroying the single node. Calling
// ik_node_destroy() on the solver's root node will cause segfaults.
ik_node_t* ikNode = ik_node_find_child(solver_->tree, node->GetID());
if (ikNode != nullptr)
{
if (ikNode == solver_->tree)
ik_solver_destroy_tree(solver_);
else
ik_node_destroy(ikNode);
MarkChainsNeedUpdating();
}
}
示例11: RebuildTree
// ----------------------------------------------------------------------------
void IKSolver::RebuildTree()
{
assert(node_ != NULL);
ik_node_t* ikRoot = CreateIKNode(node_);
ik_solver_set_tree(solver_, ikRoot);
PODVector<Node*> effectorNodes;
node_->GetChildrenWithComponent<IKEffector>(effectorNodes, true);
for (PODVector<Node*>::ConstIterator it = effectorNodes.Begin(); it != effectorNodes.End(); ++it)
{
BuildTreeToEffector(*it);
}
}
示例12: ReleaseBody
void RigidBody::ReleaseBody()
{
if (body_)
{
// Release all constraints which refer to this body
// Make a copy for iteration
PODVector<Constraint*> constraints = constraints_;
for (PODVector<Constraint*>::Iterator i = constraints.Begin(); i != constraints.End(); ++i)
(*i)->ReleaseConstraint();
RemoveBodyFromWorld();
body_.Reset();
}
}
示例13: AddGravityVectorsRecursively
// ----------------------------------------------------------------------------
void GravityManager::AddGravityVectorsRecursively(Node* node)
{
// Recursively retrieve all nodes that have a gravity probe component and
// add them to our internal list of gravity probe nodes. Note that it
// should not be possible for there to be duplicates; scene graphs can't
// have loops.
PODVector<Node*> gravityVectorNodesToAdd;
node->GetChildrenWithComponent<GravityVector>(gravityVectorNodesToAdd, true);
// Don't forget to check this node's components as well
if(node->GetComponent<GravityVector>())
gravityVectorNodesToAdd.Push(node);
PODVector<Node*>::Iterator it = gravityVectorNodesToAdd.Begin();
for(; it != gravityVectorNodesToAdd.End(); ++it)
gravityVectors_.Push((*it)->GetComponent<GravityVector>());
}
示例14:
void RigidBody2D::OnNodeSet(Node* node)
{
if (node)
{
node->AddListener(this);
PODVector<CollisionShape2D*> shapes;
node_->GetDerivedComponents<CollisionShape2D>(shapes);
for (PODVector<CollisionShape2D*>::Iterator i = shapes.Begin(); i != shapes.End(); ++i)
{
(*i)->CreateFixture();
AddCollisionShape2D(*i);
}
}
}
示例15: HandleNodeAdded
// ----------------------------------------------------------------------------
void IKSolver::HandleNodeAdded(StringHash eventType, VariantMap& eventData)
{
using namespace NodeAdded;
if (solver_->tree == NULL)
return;
Node* node = static_cast<Node*>(eventData[P_NODE].GetPtr());
PODVector<Node*> nodes;
node->GetChildrenWithComponent<IKEffector>(nodes, true);
for (PODVector<Node*>::ConstIterator it = nodes.Begin(); it != nodes.End(); ++it)
{
BuildTreeToEffector(*it);
effectorList_.Push((*it)->GetComponent<IKEffector>());
}
}