本文整理汇总了C++中CommandBufferPtr::uploadBuffer方法的典型用法代码示例。如果您正苦于以下问题:C++ CommandBufferPtr::uploadBuffer方法的具体用法?C++ CommandBufferPtr::uploadBuffer怎么用?C++ CommandBufferPtr::uploadBuffer使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CommandBufferPtr
的用法示例。
在下文中一共展示了CommandBufferPtr::uploadBuffer方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: operator
//==============================================================================
Error MeshLoadTask::operator()(AsyncLoaderTaskContext& ctx)
{
GrManager& gr = m_manager->getGrManager();
CommandBufferPtr cmdb;
// Write vert buff
if(m_vertBuff)
{
TransientMemoryToken token;
Error err = ErrorCode::NONE;
void* data = gr.allocateFrameTransientMemory(
m_loader.getVertexDataSize(), BufferUsage::TRANSFER, token, &err);
if(!err)
{
memcpy(
data, m_loader.getVertexData(), m_loader.getVertexDataSize());
cmdb = gr.newInstance<CommandBuffer>(CommandBufferInitInfo());
cmdb->uploadBuffer(m_vertBuff, 0, token);
m_vertBuff.reset(nullptr);
}
else
{
ctx.m_pause = true;
ctx.m_resubmitTask = true;
return ErrorCode::NONE;
}
}
// Create index buffer
{
TransientMemoryToken token;
Error err = ErrorCode::NONE;
void* data = gr.allocateFrameTransientMemory(
m_loader.getIndexDataSize(), BufferUsage::TRANSFER, token, &err);
if(!err)
{
memcpy(data, m_loader.getIndexData(), m_loader.getIndexDataSize());
if(!cmdb)
{
cmdb = gr.newInstance<CommandBuffer>(CommandBufferInitInfo());
}
cmdb->uploadBuffer(m_indicesBuff, 0, token);
cmdb->flush();
}
else
{
// Submit prev work
if(cmdb)
{
cmdb->flush();
}
ctx.m_pause = true;
ctx.m_resubmitTask = true;
return ErrorCode::NONE;
}
}
return ErrorCode::NONE;
}