void COverlayQuadsDX::Render(SRenderState &state) { if (m_count == 0) return; ID3D11DeviceContext* pContext = g_Windowing.Get3D11Context(); CGUIShaderDX* pGUIShader = g_Windowing.GetGUIShader(); XMMATRIX world = pGUIShader->GetWorld(); XMMATRIX view = pGUIShader->GetView(); XMMATRIX proj = pGUIShader->GetProjection(); if (g_graphicsContext.GetStereoMode() == RENDER_STEREO_MODE_SPLIT_HORIZONTAL || g_graphicsContext.GetStereoMode() == RENDER_STEREO_MODE_SPLIT_VERTICAL) { CRect rect; g_Windowing.GetViewPort(rect); g_Windowing.SetCameraPosition(CPoint(rect.Width()*0.5f, rect.Height()*0.5f), rect.Width(), 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; ID3D11Buffer* vertexBuffer = m_vertex.Get(); // 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); g_Windowing.SetAlphaBlendEnable(true); pGUIShader->Begin(SHADER_METHOD_RENDER_FONT); ID3D11ShaderResourceView* views[] = { m_texture.GetShaderResource() }; pGUIShader->SetShaderViews(1, views); pGUIShader->Draw(m_count * 6, 0); // restoring transformation pGUIShader->SetWorld(world); pGUIShader->SetView(view); pGUIShader->SetProjection(proj); pGUIShader->RestoreBuffers(); }
void COverlayImageDX::Render(SRenderState &state) { ID3D11DeviceContext* pContext = g_Windowing.Get3D11Context(); CGUIShaderDX* pGUIShader = g_Windowing.GetGUIShader(); XMMATRIX world = pGUIShader->GetWorld(); XMMATRIX view = pGUIShader->GetView(); XMMATRIX proj = pGUIShader->GetProjection(); if (g_graphicsContext.GetStereoMode() == RENDER_STEREO_MODE_SPLIT_HORIZONTAL || g_graphicsContext.GetStereoMode() == RENDER_STEREO_MODE_SPLIT_VERTICAL) { CRect rect; g_Windowing.GetViewPort(rect); g_Windowing.SetCameraPosition(CPoint(rect.Width()*0.5f, rect.Height()*0.5f), rect.Width(), 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; ID3D11Buffer* vertexBuffer = m_vertex.Get(); pContext->IASetVertexBuffers(0, 1, &vertexBuffer, &stride, &offset); pContext->IASetPrimitiveTopology(D3D10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP); pGUIShader->Begin(SHADER_METHOD_RENDER_TEXTURE_NOBLEND); g_Windowing.SetAlphaBlendEnable(true); ID3D11ShaderResourceView* views[] = { m_texture.GetShaderResource() }; pGUIShader->SetShaderViews(1, views); pGUIShader->Draw(4, 0); // restoring transformation pGUIShader->SetWorld(world); pGUIShader->SetView(view); pGUIShader->SetProjection(proj); pGUIShader->RestoreBuffers(); }