void COverlayQuadsDX::Render(SRenderState &state) { if (m_count == 0) return; ID3D11Buffer* vertexBuffer = m_vertex.Get(); if (vertexBuffer == nullptr) return; ID3D11DeviceContext* pContext = DX::DeviceResources::Get()->GetD3DContext(); CGUIShaderDX* pGUIShader = DX::Windowing()->GetGUIShader(); XMMATRIX world, view, proj; pGUIShader->GetWVP(world, view, proj); if (CServiceBroker::GetWinSystem()->GetGfxContext().GetStereoMode() == RENDER_STEREO_MODE_SPLIT_HORIZONTAL || CServiceBroker::GetWinSystem()->GetGfxContext().GetStereoMode() == RENDER_STEREO_MODE_SPLIT_VERTICAL) { CRect rect; DX::Windowing()->GetViewPort(rect); DX::Windowing()->SetCameraPosition(CPoint(rect.Width() * 0.5f, rect.Height() * 0.5f), static_cast<int>(rect.Width()), static_cast<int>(rect.Height())); } XMMATRIX trans = XMMatrixTranslation(state.x, state.y, 0.0f); XMMATRIX scale = XMMatrixScaling(state.width, state.height, 1.0f); pGUIShader->SetWorld(XMMatrixMultiply(XMMatrixMultiply(world, scale), trans)); const unsigned stride = sizeof(Vertex); const unsigned offset = 0; // Set the vertex buffer to active in the input assembler so it can be rendered. pContext->IASetVertexBuffers(0, 1, &vertexBuffer, &stride, &offset); // Set the type of primitive that should be rendered from this vertex buffer, in this case triangles. pContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); DX::Windowing()->SetAlphaBlendEnable(true); pGUIShader->Begin(SHADER_METHOD_RENDER_FONT); pGUIShader->SetShaderViews(1, m_texture.GetAddressOfSRV()); pGUIShader->Draw(m_count * 6, 0); // restoring transformation pGUIShader->SetWVP(world, view, proj); pGUIShader->RestoreBuffers(); }
void COverlayImageDX::Render(SRenderState &state) { ID3D11Buffer* vertexBuffer = m_vertex.Get(); if (vertexBuffer == nullptr) return; ID3D11DeviceContext* pContext = DX::DeviceResources::Get()->GetD3DContext(); CGUIShaderDX* pGUIShader = DX::Windowing()->GetGUIShader(); XMMATRIX world, view, proj; pGUIShader->GetWVP(world, view, proj); if (CServiceBroker::GetWinSystem()->GetGfxContext().GetStereoMode() == RENDER_STEREO_MODE_SPLIT_HORIZONTAL || CServiceBroker::GetWinSystem()->GetGfxContext().GetStereoMode() == RENDER_STEREO_MODE_SPLIT_VERTICAL) { CRect rect; DX::Windowing()->GetViewPort(rect); DX::Windowing()->SetCameraPosition(CPoint(rect.Width() * 0.5f, rect.Height() * 0.5f), static_cast<int>(rect.Width()), static_cast<int>(rect.Height())); } XMMATRIX trans = m_pos == POSITION_RELATIVE ? XMMatrixTranslation(state.x - state.width * 0.5f, state.y - state.height * 0.5f, 0.0f) : XMMatrixTranslation(state.x, state.y, 0.0f), scale = XMMatrixScaling(state.width, state.height, 1.0f); pGUIShader->SetWorld(XMMatrixMultiply(XMMatrixMultiply(world, scale), trans)); const unsigned stride = m_vertex.GetStride(); const unsigned offset = 0; pContext->IASetVertexBuffers(0, 1, &vertexBuffer, &stride, &offset); pContext->IASetPrimitiveTopology(D3D10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP); pGUIShader->Begin(SHADER_METHOD_RENDER_TEXTURE_NOBLEND); DX::Windowing()->SetAlphaBlendEnable(true); pGUIShader->SetShaderViews(1, m_texture.GetAddressOfSRV()); pGUIShader->Draw(4, 0); // restoring transformation pGUIShader->SetWVP(world, view, proj); pGUIShader->RestoreBuffers(); }