本文整理汇总了C++中ogre::VertexBufferBinding::getBuffer方法的典型用法代码示例。如果您正苦于以下问题:C++ VertexBufferBinding::getBuffer方法的具体用法?C++ VertexBufferBinding::getBuffer怎么用?C++ VertexBufferBinding::getBuffer使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ogre::VertexBufferBinding
的用法示例。
在下文中一共展示了VertexBufferBinding::getBuffer方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: memcpy
void OgreImGui::ImGUIRenderable::updateVertexData(ImDrawData* draw_data,unsigned int cmdIndex)
{
Ogre::VertexBufferBinding* bind = mRenderOp.vertexData->vertexBufferBinding;
const ImDrawList* cmd_list = draw_data->CmdLists[cmdIndex];
if (bind->getBindings().empty() || mVertexBufferSize != cmd_list->VtxBuffer.size())
{
mVertexBufferSize = cmd_list->VtxBuffer.size();
bind->setBinding(0,Ogre::HardwareBufferManager::getSingleton().createVertexBuffer(sizeof(ImDrawVert),mVertexBufferSize,Ogre::HardwareBuffer::HBU_WRITE_ONLY));
}
if (mRenderOp.indexData->indexBuffer.isNull() || mIndexBufferSize != cmd_list->IdxBuffer.size())
{
mIndexBufferSize = cmd_list->IdxBuffer.size();
mRenderOp.indexData->indexBuffer=
Ogre::HardwareBufferManager::getSingleton().createIndexBuffer(Ogre::HardwareIndexBuffer::IT_16BIT,mIndexBufferSize,Ogre::HardwareBuffer::HBU_WRITE_ONLY);
}
// Copy all vertices
ImDrawVert* vtx_dst = (ImDrawVert*)(bind->getBuffer(0)->lock(Ogre::HardwareBuffer::HBL_DISCARD));
ImDrawIdx* idx_dst = (ImDrawIdx*)(mRenderOp.indexData->indexBuffer->lock(Ogre::HardwareBuffer::HBL_DISCARD));
memcpy(vtx_dst, &cmd_list->VtxBuffer[0], mVertexBufferSize * sizeof(ImDrawVert));
memcpy(idx_dst, &cmd_list->IdxBuffer[0], mIndexBufferSize * sizeof(ImDrawIdx));
mRenderOp.vertexData->vertexStart = 0;
mRenderOp.vertexData->vertexCount = cmd_list->VtxBuffer.size();
mRenderOp.indexData->indexStart = 0;
mRenderOp.indexData->indexCount = cmd_list->IdxBuffer.size();
bind->getBuffer(0)->unlock();
mRenderOp.indexData->indexBuffer->unlock();
}
示例2: memcpy
/// @author https://bitbucket.org/ChaosCreator/imgui-ogre2.1-binding/src/8f1a01db510f543a987c3c16859d0a33400d9097/ImguiRenderable.cpp?at=master&fileviewer=file-view-default
/// Commentary on OGRE forums: http://www.ogre3d.org/forums/viewtopic.php?f=5&t=89081#p531059
void OgreImGui::ImGUIRenderable::updateVertexData(const ImDrawVert* vtxBuf, const ImDrawIdx* idxBuf, unsigned int vtxCount, unsigned int idxCount)
{
Ogre::VertexBufferBinding* bind = mRenderOp.vertexData->vertexBufferBinding;
if (bind->getBindings().empty() || mVertexBufferSize != vtxCount)
{
mVertexBufferSize = vtxCount;
bind->setBinding(0, Ogre::HardwareBufferManager::getSingleton().createVertexBuffer(sizeof(ImDrawVert), mVertexBufferSize, Ogre::HardwareBuffer::HBU_WRITE_ONLY));
}
if (mRenderOp.indexData->indexBuffer.isNull() || mIndexBufferSize != idxCount)
{
mIndexBufferSize = idxCount;
mRenderOp.indexData->indexBuffer =
Ogre::HardwareBufferManager::getSingleton().createIndexBuffer(Ogre::HardwareIndexBuffer::IT_16BIT, mIndexBufferSize, Ogre::HardwareBuffer::HBU_WRITE_ONLY);
}
// Copy all vertices
ImDrawVert* vtxDst = (ImDrawVert*)(bind->getBuffer(0)->lock(Ogre::HardwareBuffer::HBL_DISCARD));
ImDrawIdx* idxDst = (ImDrawIdx*)(mRenderOp.indexData->indexBuffer->lock(Ogre::HardwareBuffer::HBL_DISCARD));
memcpy(vtxDst, vtxBuf, mVertexBufferSize * sizeof(ImDrawVert));
memcpy(idxDst, idxBuf, mIndexBufferSize * sizeof(ImDrawIdx));
mRenderOp.vertexData->vertexStart = 0;
mRenderOp.vertexData->vertexCount = vtxCount;
mRenderOp.indexData->indexStart = 0;
mRenderOp.indexData->indexCount = idxCount;
bind->getBuffer(0)->unlock();
mRenderOp.indexData->indexBuffer->unlock();
}
示例3: GrassParticleField
GrassPatch::GrassPatch(int nb_blades, int nb_blade_segments, float width, float height, Ogre::SceneManager* ScnMgr)
{
int i, nb_particles;
// Create the particle field
nb_particles = nb_blades * (nb_blade_segments + 1);
m_Particles = new GrassParticleField(nb_particles, 1);
// Allocate the blade list
m_Blades = new Blade *[nb_blades];
m_NbBlades = nb_blades;
Ogre::Radian *angle = new Ogre::Radian(Ogre::Math::PI * ((rand()%1000) / 1000.0f));
// Create the blades of grass
for (i = 0; i < nb_blades; i++)
{
m_Blades[i] = new Blade(m_Particles,
i * (nb_blade_segments + 1),
nb_blade_segments,
4 + ((rand()%1000) / 1000.0f)*0.5f,
0.3f + ((rand()%1000) / 1000.0f)*0.1f,
width / 2 - ((rand()%1000) / 500.0f) * width,
height / 2 - ((rand()%1000) / 500.0f) * height,
*angle);
m_Blades[i]->moving = true;
m_Blades[i]->timeout = 0;
}
m_VertexCount = nb_blades * m_Blades[0]->GetStrippedVertexCount();
m_TriangleCount = ((nb_blade_segments - 1) << 1) + 1;
mvertexData = new Ogre::VertexData ();
// Vertex declaration
Ogre::VertexDeclaration* decl = mvertexData->vertexDeclaration;
Ogre::VertexBufferBinding* binding = mvertexData->vertexBufferBinding;
size_t offset = 0;
//position
decl->addElement (POSITION_BINDING, 0, Ogre::VET_FLOAT3, Ogre::VES_POSITION);
offset += Ogre::VertexElement::getTypeSize(Ogre::VET_FLOAT3);
// normal here
decl->addElement(POSITION_BINDING, offset, Ogre::VET_FLOAT3, Ogre::VES_NORMAL);
offset += Ogre::VertexElement::getTypeSize(Ogre::VET_FLOAT3);
// Diffuse Color
decl->addElement(POSITION_BINDING, offset, Ogre::VET_COLOUR, Ogre::VES_DIFFUSE);
offset += Ogre::VertexElement::getTypeSize(Ogre::VET_COLOUR);
// texture here
decl->addElement(POSITION_BINDING, offset, Ogre::VET_FLOAT2, Ogre::VES_TEXTURE_COORDINATES);
offset += Ogre::VertexElement::getTypeSize(Ogre::VET_FLOAT2);
//position updated each frame
Ogre::HardwareVertexBufferSharedPtr vbuf1 =
Ogre::HardwareBufferManager::getSingleton().createVertexBuffer (offset, // size of one whole vertex
m_VertexCount, // number of vertices
Ogre::HardwareBuffer::HBU_DYNAMIC_WRITE_ONLY, // usage
false); // no shadow buffer
binding->setBinding(POSITION_BINDING, vbuf1);
Ogre::HardwareVertexBufferSharedPtr vVertices = binding->getBuffer(POSITION_BINDING);
Ogre::Real *pVertices = static_cast<Ogre::Real*>( vVertices->lock( Ogre::HardwareBuffer::HBL_DISCARD ) );
// Colour up the blades
for (i = 0; i < m_NbBlades; i++)
m_Blades[i]->Paint (i, pVertices);
vVertices->unlock();
// Index buffer to handle triangle strip vertex buffer as triangle list
// Create index buffer
int nIndexes = m_TriangleCount*3*m_NbBlades;
Ogre::HardwareIndexBufferSharedPtr iBuf =
Ogre::HardwareBufferManager::getSingleton().createIndexBuffer (Ogre::HardwareIndexBuffer::IT_32BIT,
nIndexes,
Ogre::HardwareBuffer::HBU_STATIC_WRITE_ONLY,
false);
// Fill index buffer
unsigned int* pIdx = static_cast<unsigned int*> (iBuf->lock (Ogre::HardwareBuffer::HBL_DISCARD));
unsigned int j = 0;
for (i = 0; i < m_NbBlades; i++)
m_Blades[i]->UpdateIndexBuffer(&j, i, pIdx);
iBuf->unlock ();
mRenderOp.vertexData = mvertexData;
// mRenderOp.vertexData->vertexCount = m_VertexCount;
mRenderOp.vertexData->vertexCount= nIndexes;
mRenderOp.vertexData->vertexStart = 0;
mRenderOp.operationType = Ogre::RenderOperation::OT_TRIANGLE_LIST;
//.........这里部分代码省略.........