I am using Windows 7 using Visual Studio 2012 and Directx 10.
The problem is compilation, I get a lot of macro override errors
This is my code:
#include <windows.h>
#include <tchar.h>
#include <d3d.h>
#include <d3d10.h>
HINSTANCE hInstance;
HWND wndHandle;
ID3D10Device *mDevice = NULL;
IDXGISwapChain *mSwapChain = NULL;
ID3D10RenderTargetView *mRenderTargetView = NULL;
int width = 1024;
int height = 1024;
bool InitWindow( HINSTANCE hInstance, int width, int height );
LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM );
bool initD3D();
void Render();
int APIENTRY _tWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPTSTR lpCmdLine, int nCmdShow )
{
if ( !InitWindow( hInstance, width, height ) )
{
return false;
}
MSG msg = {0};
while (WM_QUIT != msg.message)
{
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) == TRUE)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return (int) msg.wParam;
}
bool InitWindow(HINSTANCE hInstance, int width, int height)
{
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = 0;
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = NULL;
wcex.lpszClassName = TEXT("DirectXExample");
wcex.hIconSm = 0;
RegisterClassEx(&wcex);
RECT rect = { 0, 0, width, height };
AdjustWindowRect(&rect, WS_OVERLAPPEDWINDOW, FALSE);
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;
}
ShowWindow(wndHandle, SW_SHOW);
UpdateWindow(wndHandle);
return true;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_KEYDOWN:
switch(wParam)
{
case VK_ESCAPE:
PostQuitMessage(0);
break;
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProc(hWnd, message, wParam, lParam);
}
bool initD3D()
{
DXGI_SWAP_CHAIN_DESC sd;
sd.BufferDesc.Width = width;
sd.BufferDesc.Height = height;
sd.BufferDesc.RefreshRate.Numerator = 60;
sd.BufferDesc.RefreshRate.Denominator = 1;
sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
sd.BufferDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED;
sd.BufferDesc.Scaling = DXGI_MODE_SCALING_UNSPECIFIED;
sd.SampleDesc.Count = 1;
sd.SampleDesc.Quality = 0;
sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
sd.BufferCount = 1;
sd.OutputWindow = wndHandle;
sd.Windowed = true;
sd.SwapEffect = DXGI_SWAP_EFFECT_DISCARD;
sd.Flags = 0;
if ( FAILED (D3D10CreateDeviceAndSwapChain ( NULL, D3D10_DRIVER_TYPE_REFERENCE, NULL,
0, D3D10_SDK_VERSION, &sd, mSwapChain, &mDevice ) ) )
{
MessageBox ( wndHandle, L"Failed to create device and swapchain", L"error", MB_OK );
return FALSE;
}
ID3D10Texture2D *Backbuffer = NULL;
HRESULT hr = mSwapChain->GetBuffer (0, __uuidof(ID3D10Texture2D), (LPVOID*)&Backbuffer);
if ( hr != S_OK)
{
return false;
}
hr = mDevice->CreateRenderTargetView ( Backbuffer, NULL, &mRenderTargetView);
Backbuffer -> Release();
if ( hr!= S_OK)
{
return false;
}
mDevice -> OMSetRenderTargets ( 1, &mRenderTargetView, NULL);
D3D10_VIEWPORT viewport;
viewport.Width = width;
viewport.Height = height;
viewport.MinDepth = 0.0f;
viewport.MaxDepth = 1.0f;
viewport.TopLeftX = 0;
viewport.TopLeftY = 0;
mDevice->RSSetViewports (1, &viewport);
return true;
}
void Render()
{
if ( mDevice != NULL )
{
mDevice->ClearRenderTargetView(mRenderTargetView, color);
mSwapChain->Present(0,0);
}
}
When I compiled, I got a lot of macro redefinition errors:
1 > Source.cpp 1 > c:\program files\microsoft directx sdk ( 2010)\include\dxgitype.h(12): C4005: 'DXGI_STATUS_OCCLUDED': 1 > c:\program files\windows kits\8.0\include\shared\winerror.h(49449): 'DXGI_STATUS_OCCLUDED' 1 > c:\program files\microsoft directx sdk ( 2010)\include\dxgitype.h(13): C4005: 'DXGI_STATUS_CLIPPED': 1 > c:\program files\windows kits\8.0\include\shared\winerror.h(49458): 'DXGI_STATUS_CLIPPED' 1 > c:\program files\microsoft directx sdk ( 2010)\include\dxgitype.h(14): C4005: 'DXGI_STATUS_NO_REDIRECTION': 1 > c:\program files\windows kits\8.0\include\shared\winerror.h(49467): 'DXGI_STATUS_NO_REDIRECTION' 1 > c:\program files\microsoft directx sdk ( 2010)\include\dxgitype.h(15): C4005: 'DXGI_STATUS_NO_DESKTOP_ACCESS': 1 > c:\program files\windows kits\8.0\include\shared\winerror.h(49476): 'DXGI_STATUS_NO_DESKTOP_ACCESS' 1 > c:\program files\microsoft directx sdk ( 2010)\include\dxgitype.h(16): C4005: 'DXGI_STATUS_GRAPHICS_VIDPN_SOURCE_IN_USE': 1 > c:\program files\windows kits\8.0\include\shared\winerror.h(49485): 'DXGI_STATUS_GRAPHICS_VIDPN_SOURCE_IN_USE' 1 > c:\program files\microsoft directx sdk ( 2010)\include\dxgitype.h(17): C4005: 'DXGI_STATUS_MODE_CHANGED': 1 > c:\program files\windows kits\8.0\include\shared\winerror.h(49494): 'DXGI_STATUS_MODE_CHANGED' 1 > c:\program files\microsoft directx sdk ( 2010)\include\dxgitype.h(18): C4005: 'DXGI_STATUS_MODE_CHANGE_IN_PROGRESS': 1 > c:\program files\windows kits\8.0\include\shared\winerror.h(49503): 'DXGI_STATUS_MODE_CHANGE_IN_PROGRESS' 1 > c:\program files\microsoft directx sdk ( 2010)\include\dxgitype.h(21): C4005: 'DXGI_ERROR_INVALID_CALL': 1 > c:\program files\windows kits\8.0\include\shared\winerror.h(49518): 'DXGI_ERROR_INVALID_CALL' 1 > c:\program files\microsoft directx sdk ( 2010)\include\dxgitype.h(22): C4005: 'DXGI_ERROR_NOT_FOUND': 1 > c:\program files\microsoft directx sdk ( 2010)\include\dxgitype.h(26): C4005: 'DXGI_ERROR_DEVICE_HUNG': 1 > c:\program files\windows kits\8.0\include\shared\winerror.h(49563): 'DXGI_ERROR_DEVICE_HUNG' 1 > c:\program files\microsoft directx sdk ( 2010)\include\dxgitype.h(27): C4005: 'DXGI_ERROR_DEVICE_RESET': 1 > c:\program files\windows kits\8.0\include\shared\winerror.h(49573): 請 'DXGI_ERROR_DEVICE_RESET' 1 > c:\program files\microsoft directx sdk ( 2010)\include\dxgitype.h(28): C4005: 'DXGI_ERROR_WAS_STILL_DRAWING': 1 > c:\program files\windows kits\8.0\include\shared\winerror.h(49582): 請 'DXGI_ERROR_WAS_STILL_DRAWING' 1 > c:\program files\microsoft directx sdk ( 2010)\include\dxgitype.h(29): C4005: 'DXGI_ERROR_FRAME_STATISTICS_DISJOINT': 1 > c:\program files\windows kits\8.0\include\shared\winerror.h(49592): 請 'DXGI_ERROR_FRAME_STATISTICS_DISJOINT' 1 > c:\program files\microsoft directx sdk ( 2010)\include\dxgitype.h(30): C4005: 'DXGI_ERROR_GRAPHICS_VIDPN_SOURCE_IN_USE': 1 > c:\program files\windows kits\8.0\include\shared\winerror.h(49601): 'DXGI_ERROR_GRAPHICS_VIDPN_SOURCE_IN_USE' 1 > c:\program files\microsoft directx sdk ( 2010)\include\dxgitype.h(33): C4005: 'DXGI_ERROR_NOT_CURRENTLY_AVAILABLE': 1 > c:\program files\windows kits\8.0\include\shared\winerror.h(49629): 'DXGI_ERROR_NOT_CURRENTLY_AVAILABLE' 1 > c:\program files\microsoft directx sdk ( 2010)\include\dxgitype.h(34): C4005: 'DXGI_ERROR_REMOTE_CLIENT_DISCONNECTED': 1 > c:\program files\windows kits\8.0\include\shared\winerror.h(49639): 'DXGI_ERROR_REMOTE_CLIENT_DISCONNECTED' 1 > c:\program files\microsoft directx sdk ( 2010)\include\dxgitype.h(35): C4005: 'DXGI_ERROR_REMOTE_OUTOFMEMORY': 1 > c:\program files\windows kits\8.0\include\shared\winerror.h(49648): 'DXGI_ERROR_REMOTE_OUTOFMEMORY' 1 > c:\program files\microsoft directx sdk ( 2010)\include\d3d10.h(608): C4005: 'D3D10_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS': 1 > c:\program files\windows kits\8.0\include\shared\winerror.h(49793): 'D3D10_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS' 1 > c:\program files\microsoft directx sdk ( 2010)\include\d3d10.h(609): C4005: 'D3D10_ERROR_FILE_NOT_FOUND': 1 > c:\program files\windows kits\8.0\include\shared\winerror.h(49802): 1 > c:\users\peter\documents\visual studio 2012\projects\win32project2\win32project2\source.cpp(16): C4430: 1 > c:\users\peter\documents\visual studio 2012\projects\win32project2\win32project2\source.cpp(16): C2146: 1 > c:\users\peter\documents\visual studio 2012\projects\win32project2\win32project2\source.cpp(16): C4244: 1 > c:\users\peter\documents\visual studio 2012\projects\win32project2\win32project2\source.cpp(190): C2664: 'ID3D10Device:: ClearRenderTargetView':