本文整理汇总了C++中VertexBufferBinding::getBindings方法的典型用法代码示例。如果您正苦于以下问题:C++ VertexBufferBinding::getBindings方法的具体用法?C++ VertexBufferBinding::getBindings怎么用?C++ VertexBufferBinding::getBindings使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类VertexBufferBinding
的用法示例。
在下文中一共展示了VertexBufferBinding::getBindings方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: rebuildVertexBuffers
//---------------------------------------------------------------------
void OptimiseTool::rebuildVertexBuffers()
{
// We need to build new vertex buffers of the new, reduced size
VertexBufferBinding* newBind =
HardwareBufferManager::getSingleton().createVertexBufferBinding();
// Lock source buffers
typedef std::vector<char*> BufferLocks;
BufferLocks srcbufferLocks;
BufferLocks destbufferLocks;
const VertexBufferBinding::VertexBufferBindingMap& srcBindings =
mTargetVertexData->vertexBufferBinding->getBindings();
VertexBufferBinding::VertexBufferBindingMap::const_iterator bindi;
srcbufferLocks.resize(mTargetVertexData->vertexBufferBinding->getLastBoundIndex()+1);
destbufferLocks.resize(mTargetVertexData->vertexBufferBinding->getLastBoundIndex()+1);
for (bindi = srcBindings.begin(); bindi != srcBindings.end(); ++bindi)
{
char* lock = static_cast<char*>(bindi->second->lock(HardwareBuffer::HBL_READ_ONLY));
srcbufferLocks[bindi->first] = lock;
// Add a new vertex buffer and binding
HardwareVertexBufferSharedPtr newBuf =
HardwareBufferManager::getSingleton().createVertexBuffer(
bindi->second->getVertexSize(),
mUniqueVertexList.size(),
bindi->second->getUsage(),
bindi->second->hasShadowBuffer());
newBind->setBinding(bindi->first, newBuf);
lock = static_cast<char*>(newBuf->lock(HardwareBuffer::HBL_DISCARD));
destbufferLocks[bindi->first] = lock;
}
const VertexBufferBinding::VertexBufferBindingMap& destBindings =
newBind->getBindings();
// Iterate over the new vertices
for (UniqueVertexList::iterator ui = mUniqueVertexList.begin();
ui != mUniqueVertexList.end(); ++ui)
{
uint32 origVertexIndex = ui->oldIndex;
// copy vertex from each buffer in turn
VertexBufferBinding::VertexBufferBindingMap::const_iterator srci =
srcBindings.begin();
VertexBufferBinding::VertexBufferBindingMap::const_iterator desti =
destBindings.begin();
for (; srci != srcBindings.end(); ++srci, ++desti)
{
// determine source pointer
char* pSrc = srcbufferLocks[srci->first] +
(srci->second->getVertexSize() * origVertexIndex);
char* pDest = destbufferLocks[desti->first];
// Copy vertex from source index
memcpy(pDest, pSrc, desti->second->getVertexSize());
// increment destination lock pointer
destbufferLocks[desti->first] += desti->second->getVertexSize();
}
}
// unlock the buffers now
for (bindi = srcBindings.begin(); bindi != srcBindings.end(); ++bindi)
{
bindi->second->unlock();
}
for (bindi = destBindings.begin(); bindi != destBindings.end(); ++bindi)
{
bindi->second->unlock();
}
// now switch over the bindings, and thus the buffers
VertexBufferBinding* oldBind = mTargetVertexData->vertexBufferBinding;
mTargetVertexData->vertexBufferBinding = newBind;
HardwareBufferManager::getSingleton().destroyVertexBufferBinding(oldBind);
// Update vertex count in data
mTargetVertexData->vertexCount = mUniqueVertexList.size();
}
示例2: WriteSubMesh
//.........这里部分代码省略.........
unsigned int* pInt = 0;
unsigned short* pShort = 0;
HardwareIndexBufferSharedPtr ibuf = s->indexData->indexBuffer;
// index data
if (use32BitIndexes)
{
pInt = static_cast<unsigned int*>(
ibuf->lock(HardwareBuffer::HBL_READ_ONLY));
}
else
{
pShort = static_cast<unsigned short*>(
ibuf->lock(HardwareBuffer::HBL_READ_ONLY));
}
void* indata = subMod->CreateIndexData(s->indexData->indexCount,use32BitIndexes?TRUE:FALSE);
if (use32BitIndexes)
{
memcpy(indata,pInt,sizeof(unsigned int)*s->indexData->indexCount);
}
else
{
memcpy(indata,pShort,sizeof(unsigned short)*s->indexData->indexCount);
}
ibuf->unlock();
// vertex declaration
VertexDeclaration* decl = vertexData->vertexDeclaration;
VertexBufferBinding* bind = vertexData->vertexBufferBinding;
VertexBufferBinding::VertexBufferBindingMap::const_iterator b, bend;
bend = bind->getBindings().end();
// iterate over buffers
int bindCount = 0;
for(b = bind->getBindings().begin(); b != bend; ++b,++bindCount)
{
const HardwareVertexBufferSharedPtr vbuf = b->second;
unsigned short bufferIdx = b->first;
// get all the elements that relate to this buffer
VertexDeclaration::VertexElementList elems = decl->findElementsBySource(bufferIdx);
VertexDeclaration::VertexElementList::iterator i, iend;
iend = elems.end();
unsigned short nuDemiureCoords = 0;
for (i = elems.begin(); i != iend; ++i)
{
VertexElement& elem = *i;
D3DDECLTYPE type = ConverteVertType(elem.getType());
D3DDECLUSAGE usage;
bool texcoord = false;
switch(elem.getSemantic())
{
case VES_POSITION:
usage = D3DDECLUSAGE_POSITION;
break;
case VES_NORMAL:
usage = D3DDECLUSAGE_NORMAL;
break;
case VES_TANGENT:
usage = D3DDECLUSAGE_TANGENT;
break;
case VES_BINORMAL:
usage = D3DDECLUSAGE_BINORMAL;