ErrorMessage DirectXEngine::Initialize(Jamgine::Data_Send p_data) { ErrorMessage l_errorMessage = J_OK; m_hInstance = p_data.hInstance; m_clientWidth = p_data.clientWidth; m_clientHeight = p_data.clientHeight; // Register window l_errorMessage = RegisterWindow(p_data); if(l_errorMessage != J_OK) return J_FAIL; // Init swapchain and device l_errorMessage = InitializeSwapChain(); if(l_errorMessage != J_OK) return J_FAIL; // Create texturemanger l_errorMessage = Texture2DManager::CreateTexture2DManager(&m_texture2DManager); m_texture2DManager->Initialize(m_device); if(l_errorMessage != J_OK) return J_FAIL; CreateDepthBuffer(); InitializeRenderTarget(); LoadShaders(); CreateBuffer(); SetViewport(); CreateRasterizers(); SetBlendState(); return l_errorMessage; }
void ds::Render::SetSize( ds::Size Size ) { g_SwapChain.BufferDesc.Width = Size.X; g_SwapChain.BufferDesc.Height = Size.Y; if( ds::Render::Device && Swap ) { ID3D10Texture2D* l_BackBuffer = nullptr; Swap->GetBuffer( 0, __uuidof( ID3D10Texture2D ), ( LPVOID* )&l_BackBuffer ); l_BackBuffer->Release( ); RenderTargetView->Release( ); Swap->ResizeBuffers( 0, ( unsigned )Size.X, ( unsigned )Size.Y, DXGI_FORMAT_UNKNOWN, g_SwapChain.Flags ); Swap->GetBuffer( 0, __uuidof( ID3D10Texture2D ), ( LPVOID* )&l_BackBuffer ); Device->CreateRenderTargetView( l_BackBuffer, nullptr, &RenderTargetView ); l_BackBuffer->Release( ); CreateDepthBuffer( Size ); Device->OMSetRenderTargets( 1, &RenderTargetView, DepthBufferEnable ? DepthStencilView : nullptr ); } //if( m_Effect ) // m_Effect->CreateOrthoProjection( Size ); SetView( Size, v2<unsigned>( g_ViewPort.TopLeftX, g_ViewPort.TopLeftY ), g_ViewPort.MinDepth, g_ViewPort.MaxDepth ); SetRenderRect( v4<unsigned>( 0, 0, ( unsigned )Size.X, ( unsigned )Size.Y ) ); }
bool ds::Render::Create( HWND Handle, const ds::String& BasicEffect ) { g_SwapChain.OutputWindow = Handle; RECT Rect; GetClientRect( Handle, &Rect ); g_SwapChain.BufferDesc.Width = ( unsigned ) Rect.right - ( unsigned ) Rect.left; g_SwapChain.BufferDesc.Height = ( unsigned ) Rect.bottom - ( unsigned ) Rect.top; for( unsigned i = 0; i < 2; i++ ) { if( SUCCEEDED( D3D10CreateDeviceAndSwapChain( nullptr, ( D3D10_DRIVER_TYPE )i, nullptr, 0, D3D10_SDK_VERSION, &g_SwapChain, &Swap, &Device ) ) ) { if( ( D3D10_DRIVER_TYPE )i == D3D10_DRIVER_TYPE_REFERENCE ) dsPushMessage( ErrRenderCreateDevice ); break; } } if( !Device ) { dsPushErrorStatic( ErrRenderCreateDevice ); return false; } IDXGIOutput* l_Info; unsigned l_ModesCount = 0; Swap->GetContainingOutput( &l_Info ); l_Info->GetDisplayModeList( g_SwapChain.BufferDesc.Format, 0, &l_ModesCount, nullptr ); DXGI_MODE_DESC* l_Modes = new DXGI_MODE_DESC[l_ModesCount]; l_Info->GetDisplayModeList( g_SwapChain.BufferDesc.Format, 0, &l_ModesCount, l_Modes ); for( unsigned i = 0; i < l_ModesCount; i++ ) VideoModes.push_back( VideoMode( ds::Size( l_Modes[i].Width, l_Modes[i].Height ), l_Modes[i].RefreshRate.Numerator / l_Modes[i].RefreshRate.Denominator ) ); delete[] l_Modes; l_Info->Release( ); ID3D10Texture2D* l_BackBuffer = nullptr; if( FAILED( Swap->GetBuffer( 0, __uuidof( ID3D10Texture2D ), ( LPVOID* )&l_BackBuffer ) ) ) return false; if( FAILED( Device->CreateRenderTargetView( l_BackBuffer, nullptr, &RenderTargetView ) ) ) return false; l_BackBuffer->Release( ); CreateDepthBuffer( ds::Size( g_SwapChain.BufferDesc.Width, g_SwapChain.BufferDesc.Height ) ); Device->OMSetRenderTargets( 1, &RenderTargetView, DepthBufferEnable ? DepthStencilView : nullptr ); Device->RSSetViewports( 1, &g_ViewPort ); SetRenderRect( v4<unsigned>( 0, 0, g_SwapChain.BufferDesc.Width, g_SwapChain.BufferDesc.Height ) ); if( !BasicEffect.empty( ) ) Effect = new ds::BasicEffect( BasicEffect, "Render" ); else Effect = nullptr; SetRenderMode( 1 ); SetView( v2<unsigned>( g_SwapChain.BufferDesc.Width, g_SwapChain.BufferDesc.Height ), v2<unsigned>( g_ViewPort.TopLeftX, g_ViewPort.TopLeftY ), g_ViewPort.MinDepth, g_ViewPort.MaxDepth ); ds::Clock::Reset( ); return true; }
//-------------------------------------------------------------------------------------- // //-------------------------------------------------------------------------------------- void ResizeScreenSizedBuffers(ID3D11Device* pd3dDevice) { CreateRenderTargets(pd3dDevice); CreateDepthBuffer(pd3dDevice); }