void DXCenter::DXRender() { m_pContext->IASetInputLayout(m_pInputLayout->GetIL(L"IL1")); m_pContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); m_pContext->VSSetShader(m_pVertexShader->GetVS(L"VS1")); m_pContext->PSSetShader(m_pPixelShader->GetPS(L"PS1")); m_pContext->PSSetSamplers(m_pSamplerState->GetSampler(L"SS1")); Scene* currentScene = LGCenter::Instance()->GetCurrentScene(); CHECK_TO_RETURN(currentScene); //m_pContext->ClearRenderTargetView(m_pRenderTargetView->GetRTV(L"RTV1")); //将当前场景的游戏对象绘制 vector<Object*> currentObjVec = currentScene->GetAllDirtyObject(); for (vector<Object*>::const_iterator itrObj = currentObjVec.begin(); itrObj != currentObjVec.end(); ++itrObj) { std::vector<LGRect> RectVec = (*itrObj)->GetRectDirty(); for (std::vector<LGRect>::const_iterator itrRect = RectVec.begin(); itrRect != RectVec.end(); ++itrRect) { Sprite const& currentSprite = (*itrObj)->GetCurrentSprite(); wstring currentPath = currentSprite.GetPicPath(); //更新图片(本质是设置着色器资源视图) m_pContext->PSSetShaderResources(m_pShaderResourceView->GetSRV(currentPath)); //更新精灵位置和动画(本质是更新顶点位置和UV坐标) m_pContext->FreshPic<VertexPos>(m_pVertexBuffer->GetVB(L"VB1"), currentSprite.GetPicSizeWidth(), currentSprite.GetPicSizeHeight(), currentSprite.GetCurrentRow(), currentSprite.GetCurrentCol(), (*itrObj)->GetSpriteRect(),(*itrRect)); //设置顶点 m_pContext->IASetVertexBuffers<VertexPos>(m_pVertexBuffer->GetVB(L"VB1")); //更新模型-世界-视图矩阵 XMMATRIX mvp = m_pVPMatrix->CreateMVP(L"VP1", XMFLOAT2((*itrRect).GetX(),(*itrRect).GetY())); m_pContext->UpdateSubresource(m_pConstBuffer->GetCB(L"CB1") ,&mvp); m_pContext->VSSetConstantBuffers(m_pConstBuffer->GetCB(L"CB1")); //绘制当前对象 m_pContext->Draw(); } } g_pLGCenter->GetCurrentScene()->ClearDirty(); m_pSwapChain->GetSRV(L"SC1")->Present(1,0); }