2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync/* $Id$ */
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync/** @file
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync * Presenter API: display base class implementation.
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync */
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync/*
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync * Copyright (C) 2014 Oracle Corporation
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync *
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync * available from http://www.virtualbox.org. This file is free software;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync * you can redistribute it and/or modify it under the terms of the GNU
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync * General Public License (GPL) as published by the Free Software
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync */
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync#include "server_presenter.h"
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncCrFbDisplayBase::CrFbDisplayBase() :
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync mpContainer(NULL),
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync mpFb(NULL),
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync mcUpdates(0),
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync mhSlot(CRHTABLE_HANDLE_INVALID)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync mFlags.u32Value = 0;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncCrFbDisplayBase::~CrFbDisplayBase()
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync Assert(!mcUpdates);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (mpContainer)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync mpContainer->remove(this);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncbool CrFbDisplayBase::isComposite()
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return false;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncclass CrFbDisplayComposite* CrFbDisplayBase::getContainer()
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return mpContainer;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncbool CrFbDisplayBase::isInList()
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return !!mpContainer;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncbool CrFbDisplayBase::isUpdating()
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return !!mcUpdates;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncint CrFbDisplayBase::setRegionsChanged()
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (!mcUpdates)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync WARN(("err"));
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return VERR_INVALID_STATE;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync mFlags.fRegionsShanged = 1;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return VINF_SUCCESS;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncint CrFbDisplayBase::setFramebuffer(struct CR_FRAMEBUFFER *pFb)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (mcUpdates)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync WARN(("trying to set framebuffer while update is in progress"));
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return VERR_INVALID_STATE;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (mpFb == pFb)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return VINF_SUCCESS;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync int rc = setFramebufferBegin(pFb);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (!RT_SUCCESS(rc))
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync WARN(("err"));
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return rc;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (mpFb)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync rc = fbCleanup();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (!RT_SUCCESS(rc))
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync WARN(("err"));
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync setFramebufferEnd(pFb);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return rc;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync mpFb = pFb;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (mpFb)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync rc = fbSync();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (!RT_SUCCESS(rc))
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync WARN(("err"));
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync setFramebufferEnd(pFb);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return rc;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync setFramebufferEnd(pFb);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return VINF_SUCCESS;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncstruct CR_FRAMEBUFFER* CrFbDisplayBase::getFramebuffer()
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return mpFb;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncint CrFbDisplayBase::UpdateBegin(struct CR_FRAMEBUFFER *pFb)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync ++mcUpdates;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync Assert(!mFlags.fRegionsShanged || mcUpdates > 1);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return VINF_SUCCESS;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncvoid CrFbDisplayBase::UpdateEnd(struct CR_FRAMEBUFFER *pFb)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync --mcUpdates;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync Assert(mcUpdates < UINT32_MAX/2);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (!mcUpdates)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync onUpdateEnd();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncint CrFbDisplayBase::EntryCreated(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hEntry)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (!mcUpdates)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync WARN(("err"));
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return VERR_INVALID_STATE;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return VINF_SUCCESS;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncint CrFbDisplayBase::EntryAdded(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hEntry)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (!mcUpdates)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync WARN(("err"));
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return VERR_INVALID_STATE;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync mFlags.fRegionsShanged = 1;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return VINF_SUCCESS;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncint CrFbDisplayBase::EntryReplaced(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hNewEntry,
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync HCR_FRAMEBUFFER_ENTRY hReplacedEntry)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (!mcUpdates)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync WARN(("err"));
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return VERR_INVALID_STATE;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return VINF_SUCCESS;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncint CrFbDisplayBase::EntryTexChanged(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hEntry)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (!mcUpdates)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync WARN(("err"));
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return VERR_INVALID_STATE;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return VINF_SUCCESS;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncint CrFbDisplayBase::EntryRemoved(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hEntry)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (!mcUpdates)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync WARN(("err"));
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return VERR_INVALID_STATE;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync mFlags.fRegionsShanged = 1;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return VINF_SUCCESS;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncint CrFbDisplayBase::EntryDestroyed(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hEntry)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return VINF_SUCCESS;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncint CrFbDisplayBase::EntryPosChanged(struct CR_FRAMEBUFFER *pFb, HCR_FRAMEBUFFER_ENTRY hEntry)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (!mcUpdates)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync WARN(("err"));
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return VERR_INVALID_STATE;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync mFlags.fRegionsShanged = 1;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return VINF_SUCCESS;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncint CrFbDisplayBase::RegionsChanged(struct CR_FRAMEBUFFER *pFb)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (!mcUpdates)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync WARN(("err"));
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return VERR_INVALID_STATE;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync mFlags.fRegionsShanged = 1;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return VINF_SUCCESS;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncint CrFbDisplayBase::FramebufferChanged(struct CR_FRAMEBUFFER *pFb)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (!mcUpdates)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync WARN(("err"));
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return VERR_INVALID_STATE;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return VINF_SUCCESS;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncvoid CrFbDisplayBase::onUpdateEnd()
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (mFlags.fRegionsShanged)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync mFlags.fRegionsShanged = 0;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (getFramebuffer()) /*<-dont't do anything on cleanup*/
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync ueRegions();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncvoid CrFbDisplayBase::ueRegions()
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncDECLCALLBACK(bool) CrFbDisplayBase::entriesCreateCb(HCR_FRAMEBUFFER hFb, HCR_FRAMEBUFFER_ENTRY hEntry, void *pvContext)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync int rc = ((ICrFbDisplay*)(pvContext))->EntryCreated(hFb, hEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (!RT_SUCCESS(rc))
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync WARN(("err"));
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return true;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncDECLCALLBACK(bool) CrFbDisplayBase::entriesDestroyCb(HCR_FRAMEBUFFER hFb, HCR_FRAMEBUFFER_ENTRY hEntry, void *pvContext)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync int rc = ((ICrFbDisplay*)(pvContext))->EntryDestroyed(hFb, hEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (!RT_SUCCESS(rc))
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync WARN(("err"));
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return true;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncint CrFbDisplayBase::fbSynchAddAllEntries()
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync VBOXVR_SCR_COMPOSITOR_CONST_ITERATOR Iter;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync const VBOXVR_SCR_COMPOSITOR_ENTRY *pEntry;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CrVrScrCompositorConstIterInit(CrFbGetCompositor(mpFb), &Iter);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync int rc = VINF_SUCCESS;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CrFbVisitCreatedEntries(mpFb, entriesCreateCb, this);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync while ((pEntry = CrVrScrCompositorConstIterNext(&Iter)) != NULL)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync HCR_FRAMEBUFFER_ENTRY hEntry = CrFbEntryFromCompositorEntry(pEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync rc = EntryAdded(mpFb, hEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (!RT_SUCCESS(rc))
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync WARN(("err"));
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync EntryDestroyed(mpFb, hEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync break;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return rc;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncint CrFbDisplayBase::fbCleanupRemoveAllEntries()
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync VBOXVR_SCR_COMPOSITOR_CONST_ITERATOR Iter;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync const VBOXVR_SCR_COMPOSITOR_ENTRY *pEntry;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CrVrScrCompositorConstIterInit(CrFbGetCompositor(mpFb), &Iter);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync int rc = VINF_SUCCESS;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync while ((pEntry = CrVrScrCompositorConstIterNext(&Iter)) != NULL)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync HCR_FRAMEBUFFER_ENTRY hEntry = CrFbEntryFromCompositorEntry(pEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync rc = EntryRemoved(mpFb, hEntry);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (!RT_SUCCESS(rc))
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync WARN(("err"));
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync break;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CrFbVisitCreatedEntries(mpFb, entriesDestroyCb, this);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return rc;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncint CrFbDisplayBase::setFramebufferBegin(struct CR_FRAMEBUFFER *pFb)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return UpdateBegin(pFb);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncvoid CrFbDisplayBase::setFramebufferEnd(struct CR_FRAMEBUFFER *pFb)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync UpdateEnd(pFb);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncDECLCALLBACK(void) CrFbDisplayBase::slotEntryReleaseCB(HCR_FRAMEBUFFER hFb, HCR_FRAMEBUFFER_ENTRY hEntry, void *pvContext)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncvoid CrFbDisplayBase::slotRelease()
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync Assert(mhSlot);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync CrFbDDataReleaseSlot(mpFb, mhSlot, slotEntryReleaseCB, this);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncint CrFbDisplayBase::fbCleanup()
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (mhSlot)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync slotRelease();
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync mhSlot = 0;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync mpFb = NULL;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return VINF_SUCCESS;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncint CrFbDisplayBase::fbSync()
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return VINF_SUCCESS;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsyncCRHTABLE_HANDLE CrFbDisplayBase::slotGet()
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync{
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (!mhSlot)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync {
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync if (mpFb)
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync mhSlot = CrFbDDataAllocSlot(mpFb);
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync }
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync return mhSlot;
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync}
2c58a3c1c159c2fe32fdc0c82f1d30604fda0755vboxsync