Esempio n. 1
0
		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;
		}
Esempio n. 2
0
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 ) );
}
Esempio n. 3
0
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);
}