Многооконный рендеринг в ManagedDX(C#)
От:
gmGreen
Дата: 07.02.07 10:15
Оценка:
Есть задача отрендерить одну сцену в несколько окон.
В OnPaint окна(UserControl) пишем:
//Сохраняем старые RenderTarget и ZStencil
Surface oldRenderTarget = m_D3DDevice.GetRenderTarget(0);
Surface oldZStencil = m_D3DDevice.DepthStencilSurface;
//Устанавливаем новые поверхности
m_D3DDevice.SetRenderTarget(0, m_RenderTarget);
m_D3DDevice.DepthStencilSurface = m_ZStencil;
//Просто очищаем поверхности
m_D3DDevice.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0);
//Выводим поверхность
m_D3DDevice.Present(this);
//Восстанавливаем старые RenderTarget и ZStencil
m_D3DDevice.SetRenderTarget(0, oldRenderTarget);
m_D3DDevice.DepthStencilSurface = oldZStencil;
Результат: МУСОР В ОКНЕ
При инициализации девайса указывается дефолтное окно. Без него девайс нельзя создать, но больше это окно нигде не используется
Параметры отображения следующие:
PresentParameters presentParameters = new PresentParameters();
presentParameters.Windowed = true;
presentParameters.SwapEffect = SwapEffect.Discard;
presentParameters.AutoDepthStencilFormat = DepthFormat.D16;
presentParameters.EnableAutoDepthStencil = true;
presentParameters.PresentFlag = PresentFlag.DiscardDepthStencil | PresentFlag.LockableBackBuffer;
Код создания поверхностей(В OnResize):
m_RenderTarget = m_D3DDevice.CreateRenderTarget(Width, Height, m_surfaceFormat, MultiSampleType.None, 0, false);
m_ZStencil = m_D3DDevice.CreateDepthStencilSurface(Width, Height, DepthFormat.D16, MultiSampleType.None, 0, true);
Формат RenderTarget поверхности сохранятся в m_surfaceFormat при создании девайса:
Surface target = m_D3DDevice.GetRenderTarget(0);
m_surfaceFormat = target.Description.Format;
Никак не пойму что упустил
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить