public ScreenContext(Control owner, RenderContext context, MatrixManager manager) : base(context) { Device device = context.DeviceManager.Device; SampleDescription sampleDesc = new SampleDescription(1, 0); SwapChain = new SwapChain(context.DeviceManager.Factory, device, getSwapChainDescription(owner, sampleDesc)); //ラスタライザの設定 //深度ステンシルバッファの初期化 using (Texture2D depthBuffer = new Texture2D(device, getDepthBufferTexture2DDescription(owner, sampleDesc))) { DepthTargetView = new DepthStencilView(device, depthBuffer); } //レンダーターゲットの初期化 using (Texture2D renderTexture = Resource.FromSwapChain <Texture2D>(SwapChain, 0)) { RenderTargetView = new RenderTargetView(device, renderTexture); } WorldSpace = new WorldSpace(context); BindedControl = owner; MatrixManager = manager; PanelObserver = new PanelObserver(owner); SetViewport(); HitChekcer = new TexturedBufferHitChecker(Context, this); HitChekcer.Resize(owner.ClientSize); owner.MouseMove += owner_MouseMove; owner.MouseDown += owner_MouseDown; owner.MouseUp += owner_MouseUp; }
public void Resize() { if (BindedControl.ClientSize.Width == 0 || BindedControl.ClientSize.Height == 0) { return; //フォームがフロート状態になった時一瞬だけ来て、デバイスが作れなくなるのでこの時はなしにする。 } DisposeTargetViews(); SwapChainDescription desc = SwapChain.Description; SwapChain.ResizeBuffers(desc.BufferCount, BindedControl.ClientSize.Width, BindedControl.ClientSize.Height, desc.ModeDescription.Format, desc.Flags); //深度ステンシルバッファの初期化 using (Texture2D depthBuffer = new Texture2D(Context.DeviceManager.Device, getDepthBufferTexture2DDescription(BindedControl, desc.SampleDescription))) { DepthTargetView = new DepthStencilView(Context.DeviceManager.Device, depthBuffer); } //レンダーターゲットの初期化 using (Texture2D renderTexture = Resource.FromSwapChain <Texture2D>(SwapChain, 0)) { RenderTargetView = new RenderTargetView(Context.DeviceManager.Device, renderTexture); } HitChekcer.Resize(BindedControl.ClientSize); }