Exemplo n.º 1
0
	void D3DWrapper::WindowResized(unsigned int clientWidth, unsigned int clientHeight, unsigned int windowWidth, unsigned int windowHeight)
	{
		// Output debug information
		Utility::Logger::Instance().D("Resize: %u x %u\n", clientWidth, clientHeight);

		m_deviceContext->OMSetRenderTargets(0, NULL, NULL);

		// Release references to resources
		m_backBufferView = NULL;
		m_depthStencilView = NULL;
		m_depthStencilBuffer = NULL;

		// Resize the internal buffers
		HRESULT result = m_swapChain->ResizeBuffers(0, 0, 0, DXGI_FORMAT_UNKNOWN, DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH);
		if (FAILED(result))
			throw DirectXErrorM(result, "Failed to resize buffers");
		
		// Recreate view to internal back buffer.
		result = CreateBackBufferView();
		if (FAILED(result))
			throw DirectXErrorM(result, "Failed to recreate back buffer view");

		// Recreate depth/stencil buffer
		result = CreateDepthStencilBuffer(m_backBufferDescription.Width, m_backBufferDescription.Height);
		if (FAILED(result))
			throw DirectXErrorM(result, "Failed to recreate depth/stencil buffer");

		m_deviceContext->OMSetRenderTargets(1, &m_backBufferView.Resource(), m_depthStencilView.Resource()); 

		// Recreate the viewports
		UpdateViewports(m_viewports);
	}
Exemplo n.º 2
0
D3DContext::D3DContext(ApplicationWindow* targetWindow, const Description& description)
    : mTargetWindow(targetWindow)
{
    if (!CreateDeviceAndSwapChain(description))
        throw std::runtime_error("Failed to create device and swap chain");
    if (!CreateBackBufferView())
        throw std::runtime_error("Failed to create a back buffer view");
    if (!CreateDepthStencilBuffer(description.DepthBuffer))
        throw std::runtime_error("Failed to create a depth/stencil buffer");

    mDevice->OMSetRenderTargets(1, &mBackBufferView, mDepthStencilView);

    SetViewports(description.Viewports);
    SetActiveViewport(0);
}
Exemplo n.º 3
0
void D3D::D3DResize(int screenWidth, int screenHeight)
{
	
	//ReleaseCOM(m_renderTargetView);
	//ReleaseCOM(m_depthStencilBuffer);
	//ReleaseCOM(m_depthStencilView);	
	

	CreateRenderTargetView(screenWidth, screenHeight);
	CreateDepthStencilBuffer(screenWidth, screenHeight);
	CreateDepthStencilView();
	m_renderTargetView->AddRef();
	int ref = m_renderTargetView->Release();
	m_deviceContext->OMSetRenderTargets(1, &m_renderTargetView, m_depthStencilView);

	SetViewport(screenWidth, screenHeight);
}
//---------------------------------------------------------------
void CGraphicsLayer::InitD3D(int Width,int Height,int bpp)
{
	//HRESULT r=0;

	m_rcScreenRect.top= m_rcScreenRect.left=0;
	m_rcScreenRect.right=Width;
	m_rcScreenRect.bottom=Height;
	

	if(CreateDeviceAndSwapChain()){return;}
	
	CreateShader();
	if(CreateRasterizer()){return;}
	CreateViewport();
	CreateDepthStencilBuffer();
	m_pDeviceContext->OMSetRenderTargets(1,&m_pRenderTargetView,m_pDepthStencilView);

}
Exemplo n.º 5
0
Error::E RenderSystem::Initialize(const Window &window) {
    Error::E err = Error::OK;
    err = CreateDeviceAndContext();

    if (err != Error::OK) {
        FreeResources();
        return err;
    }

    err = CreateSwapChain(window);

    if (err != Error::OK) {
        FreeResources();
        return err;        
    }

    ID3D11Texture2D *backBuffer;
    DEBUG_HR(_swapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), reinterpret_cast<void**>(&backBuffer)));
    DEBUG_HR(_device->CreateRenderTargetView(backBuffer, NULL, &_renderTargetView));
    ReleaseCom(backBuffer);

    err = CreateDepthStencilBuffer();

    if (err != Error::OK) {
        FreeResources();
        return err;
    }

    _context->OMSetRenderTargets(1, &_renderTargetView, _depthStencilView);

    D3D11_VIEWPORT vp;
    vp.TopLeftX = 0;
    vp.TopLeftY = 0;
    vp.Width = (float)window.GetWidth();
    vp.Height = (float)window.GetHeight();
    vp.MinDepth = 0.0f;
    vp.MaxDepth = 1.0f;

    _context->RSSetViewports(1, &vp);

    _initOk = true;
    return Error::OK;
}
Exemplo n.º 6
0
	D3DWrapper::D3DWrapper(Window* targetWindow, const Description& description)
		: m_targetWindow(targetWindow)
	{
		HRESULT result = S_OK;

		m_targetWindow->AddEventListener(this);

		result = CreateDeviceAndSwapChain(description.m_displayMode, description.m_fullscreen);
		if (FAILED(result))
			throw DirectXErrorM(result, "Failed to create device and swap chain");

		result = CreateBackBufferView();
		if (FAILED(result))
			throw DirectXErrorM(result, "Failed to create back buffer view");

		result = CreateDepthStencilBuffer(description.m_displayMode.m_width, description.m_displayMode.m_height);
		if (FAILED(result))
			throw DirectXErrorM(result, "Failed to create depth stencil buffer/view");

		m_deviceContext->OMSetRenderTargets(1, &m_backBufferView.Resource(), m_depthStencilView.Resource());

		SetViewports(description.m_viewports);
	}
Exemplo n.º 7
0
bool D3DContext::ResizeBuffers(Description::Buffer backBufferDescription, const Description::Buffer& depthBufferDescription)
{
    backBufferDescription.Width = (backBufferDescription.Width == 0) ? mTargetWindow->GetClientWidth() : backBufferDescription.Width;
    backBufferDescription.Height = (backBufferDescription.Height == 0) ? mTargetWindow->GetClientHeight() : backBufferDescription.Height;

    SafeRelease(mBackBufferView);
    SafeRelease(mDepthStencilBuffer);
    SafeRelease(mDepthStencilView);

    if (FAILED(mSwapChain->ResizeBuffers(0, backBufferDescription.Width, backBufferDescription.Height, DXGI_FORMAT_UNKNOWN, 0)))
        return false;

    if (!CreateBackBufferView())
        return false;

    if (!CreateDepthStencilBuffer(depthBufferDescription))
        return false;

    mBackBufferSize = backBufferDescription;
    mDepthBufferSize = depthBufferDescription;

    return true;
}