コード例 #1
0
HRESULT SwapChain::Initialize(HWND hwnd, int nWidth, int nHeigth)
{
	m_hWnd = hwnd;
	m_nWidth = nWidth;
	m_nHeight = nHeigth;
	HRESULT hr;
	std::cout << "宽: " << m_nWidth << "   " << "高: " << m_nHeight << std::endl;

	DXGI_SWAP_CHAIN_DESC scDesc = { 0 };////填充结构,设置交换链相当属性  
	scDesc.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;//缓冲区数据格式  
	scDesc.BufferDesc.Width = m_nWidth;  //缓冲区大小 
	scDesc.BufferDesc.Height = m_nHeight;
	scDesc.BufferDesc.RefreshRate.Numerator = 60; //刷新率,一般这样设定即可 
	scDesc.BufferDesc.RefreshRate.Denominator = 1;
	scDesc.BufferDesc.Scaling = DXGI_MODE_SCALING_UNSPECIFIED; //固定参数 
	scDesc.BufferDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED; //固定参数
	scDesc.BufferCount = 1; //缓冲区个数  
	scDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT ; //Usage为Render Target Output  
	scDesc.Flags = 0;
	scDesc.OutputWindow = m_hWnd; //主窗口句柄  
	scDesc.SampleDesc.Count = 1; //采样点  
	scDesc.SampleDesc.Quality = 0; //采样支持等级
	scDesc.SwapEffect = DXGI_SWAP_EFFECT_SEQUENTIAL; //常用参数 
	scDesc.Windowed = true;//窗口模式 

	hr = m_pDXGIFactory->CreateSwapChain(m_pd3dDevice, &scDesc, &m_pSwapChain);
	if (!CreateWindowSizeDependentResources())
	{
		hr = S_FALSE;
	}
	m_bInit = true;

	return hr;
}
コード例 #2
0
ファイル: Renderer.cpp プロジェクト: VladSerhiienko/Nena.v.1
void Sandbox::Renderer::Initialize()
{
	PrintToDebugWindowOnly8("Sandbox. Initializing renderer.");
	EnterCriticalSection(&m_lock);

	DirectXBaseDesktop::Initialize();

	CreateDeviceIndependentResources();
	CreateDeviceResources();
	CreateWindowSizeDependentResources();

	m_glassRenderer->WICFactory(m_wicFactory.Get());
	m_sceneRenderer->WICFactory(m_wicFactory.Get());
	m_glassRenderer->Context3(m_d3dContext.Get());
	m_sceneRenderer->Context3(m_d3dContext.Get());
	m_glassRenderer->Device3(m_d3dDevice.Get());
	m_sceneRenderer->Device3(m_d3dDevice.Get());
	m_sceneRenderTarget.Context3(m_d3dContext.Get());
	m_sceneRenderTarget.Device3(m_d3dDevice.Get());

	m_sceneRenderTarget.Height(m_d3dRenderTargetSize.height);
	m_sceneRenderTarget.Width(m_d3dRenderTargetSize.width);
	m_sceneRenderTarget.Initialize();

	(*m_sceneRenderTarget.EditViewport()) = m_viewport;
	m_sceneRenderTarget.EditClear()->x = 0.4f;
	m_sceneRenderTarget.EditClear()->y = 0.4f;
	m_sceneRenderTarget.EditClear()->z = 0.4f;
	m_sceneRenderTarget.EditClear()->w = 1.0f;
	m_clear = m_sceneRenderTarget.GetClearCpy();

	m_camera.Aspect(m_d3dRenderTargetSize.width / m_d3dRenderTargetSize.height);
	m_camera.Fov(Reign::XM_PIDIV4);
	m_camera.Near(100.0f);
	m_camera.Far(0.01f);
	(*m_camera.EditFocus()) = Reign::Vector3(0.0f, 0.0f, 10.0f);
	(*m_camera.EditEye()) = Reign::Vector3(0.0f, 0.0f, -15.0f);

	m_camera.UpdateProj();
	m_camera.UpdateView();

	m_glassRenderer->SceneRenderTarget(&m_sceneRenderTarget);
	m_glassRenderer->Initialize();
	m_sceneRenderer->Initialize();

	m_sceneRenderer->EditSceneSpatial()->World = Matrix::CreateTranslation(0.0f, 0.0f, 20.0f);
	m_sceneRenderer->EditSceneSpatial()->View = m_camera.GetViewCpy();
	m_sceneRenderer->EditSceneSpatial()->Proj = m_camera.GetProjCpy();

	m_glassRenderer->EditGlassSpatial()->World = Matrix::CreateTranslation(0.0f, 0.0f, 0.0f);
	//  * Matrix::CreateRotationY(Reign::XM_PIDIV4);
	m_glassRenderer->EditGlassSpatial()->View = m_camera.GetViewCpy();
	m_glassRenderer->EditGlassSpatial()->Proj = m_camera.GetProjCpy();
	m_glassRenderer->EditGlassPerturb()->RefractionPerturb = 0.01;

	LeaveCriticalSection(&m_lock);
}
コード例 #3
0
ファイル: Application.cpp プロジェクト: amxxL/Game
void Application::OnWindowSizeChanged(int width, int height)
{
    if (!m_deviceResources->WindowSizeChanged(width, height))
        return;

    CreateWindowSizeDependentResources();

    // TODO: Game window is being resized.

}
コード例 #4
0
ファイル: SwapChain.cpp プロジェクト: wumiliu/D3D11Demo
HRESULT SwapChain::Initialize(HWND hwnd, int nWidth, int nHeigth)
{
	m_hWnd = hwnd;
	m_nWidth = nWidth;
	m_nHeight = nHeigth;
	HRESULT hr;

	DXGI_SWAP_CHAIN_DESC scDesc = { 0 };////填充结构,设置交换链相当属性  
	scDesc.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;//缓冲区数据格式  
	scDesc.BufferDesc.Width = m_nWidth;  //缓冲区大小 
	scDesc.BufferDesc.Height = m_nHeight;
	scDesc.BufferDesc.RefreshRate.Numerator = 60; //刷新率,一般这样设定即可 
	scDesc.BufferDesc.RefreshRate.Denominator = 1;
	scDesc.BufferDesc.Scaling = DXGI_MODE_SCALING_UNSPECIFIED; //固定参数 
	scDesc.BufferDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED; //固定参数
	scDesc.BufferCount = 1; //缓冲区个数  
	scDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; //Usage为Render Target Output  
	scDesc.Flags = 0;
	scDesc.OutputWindow = m_hWnd; //主窗口句柄  
	scDesc.SampleDesc.Count = 1; //采样点  
	scDesc.SampleDesc.Quality = 0; //采样支持等级
	scDesc.SwapEffect = DXGI_SWAP_EFFECT_SEQUENTIAL; //常用参数 
	scDesc.Windowed = true;//窗口模式 

	hr = m_pDXGIFactory->CreateSwapChain(m_pd3dDevice, &scDesc, &m_pSwapChain);
	if (!CreateWindowSizeDependentResources())
	{
		hr = S_FALSE;
	}
	m_bInit = true;

	D3D11_TEXTURE2D_DESC desc;
	desc.Width = static_cast<UINT>(m_nWidth);
	desc.Height = static_cast<UINT>(m_nHeight);
	desc.MipLevels = static_cast<UINT>(1);
	desc.ArraySize = static_cast<UINT>(1);
	desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
	desc.SampleDesc.Count = 1;
	desc.SampleDesc.Quality = 0;
	desc.Usage = D3D11_USAGE_DEFAULT;
	desc.BindFlags = D3D11_BIND_SHADER_RESOURCE;;
	desc.CPUAccessFlags = 0;
	desc.MiscFlags = 0;

	hr = m_pd3dDevice->CreateTexture2D(&desc, NULL, &texEx);
	D3D11_SHADER_RESOURCE_VIEW_DESC SRVDesc;
	memset(&SRVDesc, 0, sizeof(SRVDesc));
	SRVDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
	SRVDesc.ViewDimension = D3D_SRV_DIMENSION_TEXTURE2D;
	SRVDesc.Texture2D.MostDetailedMip = 0;
	SRVDesc.Texture2D.MipLevels = 1;
	hr = m_pd3dDevice->CreateShaderResourceView(texEx, &SRVDesc, &mSRV);

	return hr;
}
コード例 #5
0
ファイル: contextd3d11.cpp プロジェクト: Noplace/Solar
// This method is called in the event handler for the SizeChanged event.
int ContextD3D11::OnWindowSizeChange(uint32_t width, uint32_t height)
{
  /*if (m_window->Bounds.Width  != m_windowBounds.Width ||
    m_window->Bounds.Height != m_windowBounds.Height ||
    m_orientation != DisplayProperties::CurrentOrientation)*/
  {

    CreateWindowSizeDependentResources(width,height);
  }
  return S_OK;
}
コード例 #6
0
ファイル: Application.cpp プロジェクト: amxxL/Game
// Initialize the Direct3D resources required to run.
void Application::Initialize(int width, int height)
{
    m_window = std::make_unique<Window>(L"Game", width, height);
    m_window->RegisterUserData(reinterpret_cast<LONG_PTR>(this));

    m_deviceResources->SetWindow(m_window->GetHandle(), width, height);

    m_deviceResources->CreateDeviceResources();
    CreateDeviceDependentResources();

    m_deviceResources->CreateWindowSizeDependentResources();
    CreateWindowSizeDependentResources();

    // Scenes manager.
    m_sceneManager = std::make_unique<SceneManager>(m_deviceResources->GetD3DDeviceContext());
    m_sceneManager->PushScene(PlayScene::Instance());

    // TIP: Change the timer settings if you want something other than the default variable timestep mode.
    // e.g. for 60 FPS fixed timestep update logic, call:
    
    /*
    m_timer.SetFixedTimeStep(true);
    m_timer.SetTargetElapsedSeconds(1.0 / 60);
    */

    m_keyboard = std::make_unique<DirectX::Keyboard>();
    m_mouse = std::make_unique<Mouse>();
    //m_mouse->SetWindow(window);

    // Setup ImGui
    IMGUI_CHECKVERSION();
    ImGui::CreateContext();
    //ImGuiIO& io = ImGui::GetIO();
    ImGui_ImplWin32_Init(m_window->GetHandle());
    ImGui_ImplDX11_Init(m_deviceResources->GetD3DDevice(), m_deviceResources->GetD3DDeviceContext());
    ImGui::StyleColorsDark();

}
コード例 #7
0
void Sandbox::FluidSimulator::Initialize( _No_args_ )
{
	CreateDeviceIndependentResources( );
	CreateDeviceResources( );
	CreateWindowSizeDependentResources( );
}
コード例 #8
0
ファイル: SwapChain.cpp プロジェクト: wumiliu/D3D11Demo
void SwapChain::OnResize(int nWidth, int nHeight)
{
	m_nWidth = nWidth;
	m_nHeight = nHeight;
	CreateWindowSizeDependentResources();
}
コード例 #9
0
ファイル: Application.cpp プロジェクト: amxxL/Game
void Application::OnDeviceRestored()
{
    CreateDeviceDependentResources();
    CreateWindowSizeDependentResources();
}