bool ClientLobbyState::Draw(FlexKit::EngineCore* core, FlexKit::UpdateDispatcher& dispatcher, double dT, FlexKit::FrameGraph& frameGraph) { auto currentRenderTarget = GetCurrentBackBuffer(&core->Window); ClearVertexBuffer (frameGraph, client->base->vertexBuffer); ClearVertexBuffer (frameGraph, client->base->textBuffer); ClearBackBuffer (frameGraph, { 0.0f, 0.0f, 0.0f, 0.0f }); LobbyScreenDrawDesc Desc; Desc.allocator = core->GetTempMemory(); Desc.constantBuffer = client->base->constantBuffer; Desc.vertexBuffer = client->base->vertexBuffer; Desc.textBuffer = client->base->textBuffer; Desc.renderTarget = currentRenderTarget; screen.Draw(Desc, dispatcher, frameGraph); FlexKit::DrawMouseCursor( framework->MouseState.NormalizedScreenCord, { 0.05f, 0.05f }, client->base->vertexBuffer, client->base->constantBuffer, currentRenderTarget, core->GetTempMemory(), &frameGraph); return true; }
// 创建定点缓冲区 void CCustomShape::CreateAreaVertexBuffer() { if(0 == m_planePointArray.size()) { return; } // 先把上次创建的缓冲区删掉 ClearVertexBuffer(); mRenderOp.vertexData = new Ogre::VertexData; mRenderOp.vertexData->vertexCount = m_planePointArray.size(); mRenderOp.vertexData->vertexStart = 0; Ogre::VertexDeclaration *decl = mRenderOp.vertexData->vertexDeclaration; // 声明定点格式 size_t offset = 0; decl->addElement(0, offset, Ogre::VET_FLOAT3, Ogre::VES_POSITION); offset += Ogre::VertexElement::getTypeSize(Ogre::VET_FLOAT3); decl->addElement(0, offset, Ogre::VET_COLOUR, Ogre::VES_DIFFUSE); m_vbuf = Ogre::HardwareBufferManager::getSingleton().createVertexBuffer( decl->getVertexSize(0), mRenderOp.vertexData->vertexCount, Ogre::HardwareBuffer::HBU_STATIC_WRITE_ONLY); mRenderOp.vertexData->vertexBufferBinding->setBinding(0, m_vbuf); }
CCustomShape::~CCustomShape(void) { ClearVertexBuffer(); ClearVertexBuffer1(); m_pUnreachRegion = NULL; }