Quantcast
Channel: Programming Forums
Viewing all articles
Browse latest Browse all 51036

Beginning Dx10 game dev error

$
0
0
Hello all!

I'am reading this book called beginning dx10 game dev by Wendy Jones.

I get error when I'am trying to Initialize Direct3D in winmain (line 40).
'winmain.cpp(40): error C2065: 'hWnd' : undeclared identifier'

Im not sure what Iam doing wrong and this is day2 Iam trying to figure this out =)

Thank you in advance!!

#include <Windows.h>
#include <tchar.h>
#include <D3D10.h>
#include <D3DX10.h>

#define Error(X) MessageBox(NULL, X, "Error", MB_OK)

// Direct3D global variables
ID3D10Device*			pD3DDevice		  = NULL;
IDXGISwapChain*			pSwapChain		  = NULL;
ID3D10RenderTargetView* pRenderTargetView = NULL;

HINSTANCE hInst;						// Global handle to hold the app instance
HWND	  wndHandle;					// Global variable to hold the window handle

int width  = 640;
int height = 480;

// Forward declarations
bool InitWindow			 ( HINSTANCE hInstance, int width, int height );
LRESULT CALLBACK WndProc ( HWND, UINT, WPARAM, LPARAM );
bool InitWindow			 ( void );
bool InitDirect3D		 ( void );
void Render				 ( void );
void ShutdownDirect3D	 ( void );



// This is winmain, the main entry point for windows applications
int APIENTRY _tWinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance,
						 LPTSTR lpCmdLine, int nCmdShow )
{
	// Initialize the window
	if ( !InitWindow ( hInstance, width, height ))
	{
		return false;
	}

	// Called after creating the window
	if ( !InitDirect3D ( hWnd, width, height ) )
	{
		return 0;
	} 

	// Main message loop:
	MSG msg = {0};
	while (WM_QUIT != msg.message)
	{
		while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) == TRUE)
		{
			TranslateMessage(&msg);
			DispatchMessage(&msg);
	
		}
			// Call the render function
			Render();
		}
			return (int)msg.wParam;
	}




/*************************************************
InitWindow
Inits and creates main app window
Inputs - application instance -HINSTANCE
	Window width  - int
	Window height - int
Ouput - true if succesful, false if failed - bool
***************************************************/
bool InitWindow ( HINSTANCE hInstance, int width, int height )
{
	WNDCLASSEX wcex;

	// Fill in the WNDCLASSEX structure. This describes how the window
	// may look to the system
	wcex.cbSize			= sizeof(WNDCLASSEX);			// The size of the structure
	wcex.style			= CS_HREDRAW | CS_VREDRAW;		// the class style
	wcex.lpfnWndProc	= (WNDPROC)WndProc;				// the window procedure callback
	wcex.cbClsExtra		= 0;							// extra bytes to allocate for this class
	wcex.cbWndExtra		= 0;							// extra bytes to allocate for this instance
	wcex.hInstance		= hInstance;					// handle to the application instance
	wcex.hIcon			= 0;							// icon to associate with the application
	wcex.hCursor		= LoadCursor(NULL, IDC_ARROW);	// the default cursor to use
	wcex.hbrBackground	= (HBRUSH)(COLOR_WINDOW+1);		// the background color
	wcex.lpszMenuName	= NULL;							// the resource name for the menu
	wcex.lpszClassName  = TEXT("DirectXExample");		// theclassnamebeingcreated
	wcex.hIconSm		= 0;							// the handle to the small icon
	
	RegisterClassEx(&wcex);

	// Resize the window
	RECT rect = { 0, 0, width, height };
	AdjustWindowRect ( &rect, WS_OVERLAPPEDWINDOW, FALSE );

	// Create the window from the class above
	wndHandle = CreateWindow (	TEXT("DirectXExample"),
								TEXT("DirectXExample"),
								WS_OVERLAPPEDWINDOW,
								CW_USEDEFAULT,
								CW_USEDEFAULT,
								rect.right - rect.left,
								rect.bottom - rect.top,
								NULL,
								NULL,
								hInstance,
								NULL );
	if ( !wndHandle )
	{
		return false;
	}

	// Display the window on the screen
	ShowWindow   ( wndHandle, SW_SHOW );
	UpdateWindow ( wndHandle );

	return true;

}




/*********************************************************
WndProc
The main window procedure for the application
Inputs - application window handle - HWND
			message sent to the window -		UINT
			wParam of the message being sent -	WPARAM
			lParam of the message being sent -	LPARAM
Ouputs - LRESULT
**********************************************************/
LRESULT CALLBACK WndProc ( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
	// Check any available messages from the queue
	switch ( message )
	{
		// Allow the user to press the Esc key to end the application
		case WM_KEYDOWN:
			switch ( wParam )
			{
				// Check if the user hit the Esc key
				case VK_ESCAPE:
					Error("Exiting..");
					PostQuitMessage(0);
					break;
			}
		
		break;

		// The user hit the close button, close the app
		case WM_DESTROY:
			PostQuitMessage(0);
			break;
	}

	// Allways return the message to the default window procedure for further processing
	return DefWindowProc ( hWnd, message, wParam, lParam );
}





/******************************************************
InitDirect3D
Initializes Direct3D
Inputs - Parent window handle - HWND,
		 Window width		  - int,
		 Window height		  - int
Outputs - true if successful, false if failed - bool
******************************************************/
bool InitDirect3D ( HWND hWnd, int width, int height )
{

	// Create the clear DXGI_SWAP_CHAIN_DESC structure
	DXGI_SWAP_CHAIN_DESC swapChainDesc;

	ZeroMemory ( &swapChainDesc, sizeof ( swapChainDesc ) );

	// Fill in the needed values
	swapChainDesc.BufferCount			= 1;
	swapChainDesc.BufferDesc.Width		= width;
	swapChainDesc.BufferDesc.Height		= height;
	swapChainDesc.BufferDesc.Format		= DXGI_FORMAT_R8G8B8A8_UNORM;
	swapChainDesc.BufferDesc.RefreshRate.Numerator   = 60;
	swapChainDesc.BufferDesc.RefreshRate.Denominator = 1;
	swapChainDesc.BufferUsage			= DXGI_USAGE_RENDER_TARGET_OUTPUT;
	swapChainDesc.OutputWindow			= hWnd;
	swapChainDesc.SampleDesc.Count		= 1;
	swapChainDesc.SampleDesc.Quality	= 0;
	swapChainDesc.Windowed				= TRUE;

	// Create the D3D device and the swap chain
	HRESULT hr = D3D10CreateDeviceAndSwapChain
				 ( NULL,
				   D3D10_DRIVER_TYPE_REFERENCE,
				   NULL,
				   0,
				   D3D10_SDK_VERSION,
				   &swapChainDesc,
				   &pSwapChain,
				   &pD3DDevice );

	// Error checking. Make sure the device was created
	if ( hr != S_OK )
	{
		return false;
	}

	// Get the back buffer from the swapchain
	ID3D10Texture2D *pBackBuffer;
	hr = pSwapChain->GetBuffer ( 0, __uuidof ( ID3D10Texture2D ) , ( LPVOID* ) &pBackBuffer );
	if ( hr != S_OK )
	{
		return false;
	}

	// Create the render target view
	hr = pD3DDevice->CreateRenderTargetView ( pBackBuffer, NULL, &pRenderTargetView );

	// Release the back buffer
	pBackBuffer->Release();

	// Make sure the render target view was created successfully
	if ( hr != S_OK)
	{
		return false;
	}


	// Set the render target
	pD3DDevice->OMSetRenderTargets ( 1, &pRenderTargetView, NULL );


	// Create and set the viewport
	D3D10_VIEWPORT viewPort;

	viewPort.Width		= width;
	viewPort.Height		= height;
	viewPort.MinDepth	= 0.0f;
	viewPort.MaxDepth	= 1.0f;
	viewPort.TopLeftX	= 0;
	viewPort.TopLeftY	= 0;
	
	pD3DDevice->RSSetViewports ( 1, &viewPort );

	return true;
}



/*******************************************
Render
All drawing happens in the Render function
Inputs  - void
Outputs - void
*******************************************/
void Render()
{
	if ( pD3DDevice != NULL )
	{
		// Clear the target buffer
		pD3DDevice->ClearRenderTargetView ( pRenderTargetView, 
											D3DXCOLOR ( 0.0f, 0.0f, 0.0f, 0.0f ));

		// All drawing will go here

		// Display the next item in the swap chain
		pSwapChain->Present ( 0, 0 );
	}
}



/******************************************************
ShutdownDirect3D
Closes down and releases the resources for Direct3D
Inputs  - void
Outpus  - void
*******************************************************/
void ShutdownDirect3D()
{
	// Release the rendertarget
	if ( pRenderTargetView )
	{
		pRenderTargetView->Release();
	}

	// Release the swapchain
	if ( pSwapChain )
	{
		pSwapChain->Release();
	}

	// Release the D3D Device
	if ( pD3DDevice )
	{
		pD3DDevice->Release();
	}
}

Viewing all articles
Browse latest Browse all 51036

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>