コード例 #1
0
ファイル: WinRenderer.cpp プロジェクト: HitcherUK/xbmc
void CWinRenderer::Update()
{
  if (!m_bConfigured)
    return;
  ManageRenderArea();
  ManageTextures();
}
コード例 #2
0
ファイル: WinRenderer.cpp プロジェクト: Castlecard/plex
void CWinRenderer::Update(bool bPauseDrawing)
{
  if (!m_bConfigured) return;
  
  CSingleLock lock(g_graphicsContext);
  ManageDisplay();
  ManageTextures();
}
コード例 #3
0
ファイル: WinRenderer.cpp プロジェクト: HitcherUK/xbmc
void CWinRenderer::RenderUpdate(int index, int index2, bool clear, unsigned int flags, unsigned int alpha)
{
  m_iYV12RenderBuffer = index;

  if (clear)
    CServiceBroker::GetWinSystem()->GetGfxContext().Clear(DX::Windowing()->UseLimitedColor() ? 0x101010 : 0);

  if (!m_bConfigured)
    return;

  DX::Windowing()->SetAlphaBlendEnable(alpha < 255);
  ManageTextures();
  ManageRenderArea();
  Render(flags, DX::Windowing()->GetBackBuffer());
}
コード例 #4
0
ファイル: WinRenderer.cpp プロジェクト: FLyrfors/xbmc
void CWinRenderer::RenderUpdate(int index, int index2, bool clear, unsigned int flags, unsigned int alpha)
{
  m_iYV12RenderBuffer = index;

  if (clear)
    g_graphicsContext.Clear(DX::Windowing().UseLimitedColor() ? 0x101010 : 0);

  if (!m_bConfigured)
    return;

  DX::Windowing().SetAlphaBlendEnable(alpha < 255);
  ManageTextures();
  ManageRenderArea();
  Render(flags, DX::Windowing().GetBackBuffer());
}
コード例 #5
0
ファイル: WinRenderer.cpp プロジェクト: Castlecard/plex
void CWinRenderer::RenderUpdate(bool clear, DWORD flags, DWORD alpha)
{
  if (!m_YUVTexture[m_iYV12RenderBuffer][0]) return ;
  
  CSingleLock lock(g_graphicsContext);

  ManageDisplay();
  ManageTextures();
  if (clear)
    m_pD3DDevice->Clear( 0L, NULL, D3DCLEAR_TARGET, m_clearColour, 1.0f, 0L );

  if(alpha < 255)
    m_pD3DDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );
  else
    m_pD3DDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, FALSE );

  Render(flags);
}
コード例 #6
0
void CWinRenderer::RenderUpdate(bool clear, DWORD flags, DWORD alpha)
{
  LPDIRECT3DDEVICE9 pD3DDevice = g_Windowing.Get3DDevice();

  if (clear)
    pD3DDevice->Clear( 0L, NULL, D3DCLEAR_TARGET, m_clearColour, 1.0f, 0L );

  if(alpha < 255)
    pD3DDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );
  else
    pD3DDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, FALSE );

  if (!m_bConfigured) return;
  ManageTextures();

  CSingleLock lock(g_graphicsContext);

  ManageDisplay();

  Render(flags);
}
コード例 #7
0
ファイル: WinRenderer.cpp プロジェクト: HitcherUK/xbmc
void CWinRenderer::UpdatePSVideoFilter()
{
  m_scalerShader.reset();

  if (m_bUseHQScaler)
  {
    // First try the more efficient two pass convolution scaler
    m_scalerShader = std::make_unique<CConvolutionShaderSeparable>();

    if (!m_scalerShader->Create(m_scalingMethod, m_outputShader.get()))
    {
      m_scalerShader.reset();
      CLog::Log(LOGNOTICE, "%s: two pass convolution shader init problem, falling back to one pass.", __FUNCTION__);
    }

    // Fallback on the one pass version
    if (!m_scalerShader)
    {
      m_scalerShader = std::make_unique<CConvolutionShader1Pass>();

      if (!m_scalerShader->Create(m_scalingMethod, m_outputShader.get()))
      {
        m_scalerShader.reset();
        CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Error, g_localizeStrings.Get(34400), g_localizeStrings.Get(34401));
        m_bUseHQScaler = false;
      }
    }
  }

  if (m_bUseHQScaler && !CreateIntermediateRenderTarget(m_sourceWidth, m_sourceHeight, false))
  {
    m_scalerShader.reset();
    m_bUseHQScaler = false;
  }

  m_colorShader.reset();

  if (m_renderMethod == RENDER_DXVA)
  {
    // we'd use m_IntermediateTarget as rendering target for possible anaglyph stereo with dxva processor.
    if (!m_bUseHQScaler)
      CreateIntermediateRenderTarget(m_destWidth, m_destHeight, false);
    // When using DXVA, we are already setup at this point, color shader is not needed
    return;
  }

  m_colorShader = std::make_unique<CYUV2RGBShader>();
  if (!m_colorShader->Create(m_bufferFormat, AVColorPrimaries::AVCOL_PRI_BT709, m_srcPrimaries, m_bUseHQScaler ? nullptr : m_outputShader.get()))
  {
    if (m_bUseHQScaler)
    {
      m_IntermediateTarget.Release();
      m_scalerShader.reset();
    }
    m_colorShader.reset();
    m_bUseHQScaler = false;

    // we're in big trouble - fallback to sw method
    m_renderMethod = RENDER_SW;
    EBufferFormat oldFormat = m_bufferFormat;
    m_bufferFormat = SelectBufferFormat(m_format, m_renderMethod);
    if (oldFormat != m_bufferFormat && m_NumYV12Buffers > 0)
    {
      m_NumYV12Buffers = 0;
      ManageTextures();
    }
    SelectSWVideoFilter();
  }
}