c++ directX. Refusing to compile

  • Bozebo
  • Expert
  • Expert
  • User avatar
  • Posts: 709
  • Loc: 404

Post 3+ Months Ago

Hi, I have been following a nice directX tutorial for a while. I have been able to get everything to work up until the point it uses the windowsx.h and d3dx9.h header files.
(I am using dev c++)

Weirdly, it seems to think there are errors in the header files:
Quote:
"5 C:\Dev-Cpp\include\dx\d3dx9.h:46, from main.cpp In file included from C:/Dev-Cpp/include/dx/d3dx9.h:46, from main.cpp "

"46 C:\Dev-Cpp\include\dx\d3d9.h:290, from C:\Dev-Cpp\include\dx\d3dx9.h In file included from C:/Dev-Cpp/include/dx/d3d9.h:290, from C:/Dev-Cpp/include/dx/d3dx9.h "

"51 C:\Dev-Cpp\include\dx\d3d9types.h redefinition of `struct _D3DVECTOR' "

(there are hundreds of similar errors)


Here is my code (though I am certain it is fine):
Code: [ Select ]
// include the basic windows header files and the Direct3D header file
#include <windows.h>
#include <windowsx.h>
#include <d3d9.h>
#include <d3dx9.h>

// define the screen resolution
#define SCREEN_WIDTH 800
#define SCREEN_HEIGHT 600

// include the Direct3D Library files
#pragma comment (lib, "d3d9.lib")
#pragma comment (lib, "d3dx9.lib")

// global declarations
LPDIRECT3D9 d3d;  // the pointer to our Direct3D interface
LPDIRECT3DDEVICE9 d3ddev;  // the pointer to the device class
LPDIRECT3DVERTEXBUFFER9 v_buffer = NULL;  // the pointer to the vertex buffer

// function prototypes
void initD3D(HWND hWnd);  // sets up and initializes Direct3D
void render_frame(void);  // renders a single frame
void cleanD3D(void);  // closes Direct3D and releases memory
void init_graphics(void);  // 3D declarations

struct CUSTOMVERTEX {FLOAT X, Y, Z; DWORD COLOR;};
#define CUSTOMFVF (D3DFVF_XYZ | D3DFVF_DIFFUSE)

// the WindowProc function prototype
LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);


// the entry point for any Windows program
int WINAPI WinMain(HINSTANCE hInstance,
          HINSTANCE hPrevInstance,
          LPSTR lpCmdLine,
          int nCmdShow)
{
  HWND hWnd;
  WNDCLASSEX wc;

  ZeroMemory(&wc, sizeof(WNDCLASSEX));

  wc.cbSize = sizeof(WNDCLASSEX);
  wc.style = CS_HREDRAW | CS_VREDRAW;
  wc.lpfnWndProc = WindowProc;
  wc.hInstance = hInstance;
  wc.hCursor = LoadCursor(NULL, IDC_ARROW);
  wc.lpszClassName = L"WindowClass";

  RegisterClassEx(&wc);

  hWnd = CreateWindowEx(NULL, L"WindowClass", L"Our Direct3D Program",
             WS_OVERLAPPEDWINDOW, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT,
             NULL, NULL, hInstance, NULL);

  ShowWindow(hWnd, nCmdShow);

  // set up and initialize Direct3D
  initD3D(hWnd);

  // enter the main loop:

  MSG msg;

  while(TRUE)
  {
    while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
    {
      TranslateMessage(&msg);
      DispatchMessage(&msg);
    }

    if(msg.message == WM_QUIT)
      break;

    render_frame();
  }

  // clean up DirectX and COM
  cleanD3D();

  return msg.wParam;
}


// this is the main message handler for the program
LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
  switch(message)
  {
    case WM_DESTROY:
      {
        PostQuitMessage(0);
        return 0;
      } break;
  }

  return DefWindowProc (hWnd, message, wParam, lParam);
}


// this function initializes and prepares Direct3D for use
void initD3D(HWND hWnd)
{
  d3d = Direct3DCreate9(D3D_SDK_VERSION);

  D3DPRESENT_PARAMETERS d3dpp;

  ZeroMemory(&d3dpp, sizeof(d3dpp));
  d3dpp.Windowed = TRUE;
  d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
  d3dpp.hDeviceWindow = hWnd;
  d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8;
  d3dpp.BackBufferWidth = SCREEN_WIDTH;
  d3dpp.BackBufferHeight = SCREEN_HEIGHT;

  // create a device class using this information and the info from the d3dpp stuct
  d3d->CreateDevice(D3DADAPTER_DEFAULT,
           D3DDEVTYPE_HAL,
           hWnd,
           D3DCREATE_SOFTWARE_VERTEXPROCESSING,
           &d3dpp,
           &d3ddev);

  init_graphics();  // call the function to initialize the triangle

  d3ddev->SetRenderState(D3DRS_LIGHTING, FALSE);  // turn off the 3D lighting
}


// this is the function used to render a single frame
void render_frame(void)
{
  d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0);

  d3ddev->BeginScene();

  // select which vertex format we are using
  d3ddev->SetFVF(CUSTOMFVF);

  // SET UP THE PIPELINE

  D3DXMATRIX matRotateY;  // a matrix to store the rotation information

  static float index = 0.0f; index+=0.05f;  // an ever-increasing float value

  // build a matrix to rotate the model based on the increasing float value
  D3DXMatrixRotationY(&matRotateY, index);

  // tell Direct3D about our matrix
  d3ddev->SetTransform(D3DTS_WORLD, &matRotateY);

  D3DXMATRIX matView;  // the view transform matrix

  D3DXMatrixLookAtLH(&matView,
            &D3DXVECTOR3 (0.0f, 0.0f, 10.0f),  // the camera position
            &D3DXVECTOR3 (0.0f, 0.0f, 0.0f),  // the look-at position
            &D3DXVECTOR3 (0.0f, 1.0f, 0.0f));  // the up direction

  d3ddev->SetTransform(D3DTS_VIEW, &matView);  // set the view transform to matView

  D3DXMATRIX matProjection;   // the projection transform matrix

  D3DXMatrixPerspectiveFovLH(&matProjection,
                D3DXToRadian(45),  // the horizontal field of view
                (FLOAT)SCREEN_WIDTH / (FLOAT)SCREEN_HEIGHT, // aspect ratio
                1.0f,  // the near view-plane
                100.0f);  // the far view-plane

  d3ddev->SetTransform(D3DTS_PROJECTION, &matProjection);  // set the projection

  // select the vertex buffer to display
  d3ddev->SetStreamSource(0, v_buffer, 0, sizeof(CUSTOMVERTEX));

  // copy the vertex buffer to the back buffer
  d3ddev->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1);

  d3ddev->EndScene();

  d3ddev->Present(NULL, NULL, NULL, NULL);
}


// this is the function that cleans up Direct3D and COM
void cleanD3D(void)
{
  v_buffer->Release();  // close and release the vertex buffer
  d3ddev->Release();  // close and release the 3D device
  d3d->Release();  // close and release Direct3D
}


// this is the function that puts the 3D models into video RAM
void init_graphics(void)
{
  // create the vertices using the CUSTOMVERTEX struct
  CUSTOMVERTEX vertices[] =
  {
    { 3.0f, -3.0f, 0.0f, D3DCOLOR_XRGB(0, 0, 255), },
    { 0.0f, 3.0f, 0.0f, D3DCOLOR_XRGB(0, 255, 0), },
    { -3.0f, -3.0f, 0.0f, D3DCOLOR_XRGB(255, 0, 0), },
  };

  // create a vertex buffer interface called v_buffer
  d3ddev->CreateVertexBuffer(3*sizeof(CUSTOMVERTEX),
                0,
                CUSTOMFVF,
                D3DPOOL_MANAGED,
                &v_buffer,
                NULL);

  VOID* pVoid;  // a void pointer

  // lock v_buffer and load the vertices into it
  v_buffer->Lock(0, 0, (void**)&pVoid, 0);
  memcpy(pVoid, vertices, sizeof(vertices));
  v_buffer->Unlock();
}
  1. // include the basic windows header files and the Direct3D header file
  2. #include <windows.h>
  3. #include <windowsx.h>
  4. #include <d3d9.h>
  5. #include <d3dx9.h>
  6. // define the screen resolution
  7. #define SCREEN_WIDTH 800
  8. #define SCREEN_HEIGHT 600
  9. // include the Direct3D Library files
  10. #pragma comment (lib, "d3d9.lib")
  11. #pragma comment (lib, "d3dx9.lib")
  12. // global declarations
  13. LPDIRECT3D9 d3d;  // the pointer to our Direct3D interface
  14. LPDIRECT3DDEVICE9 d3ddev;  // the pointer to the device class
  15. LPDIRECT3DVERTEXBUFFER9 v_buffer = NULL;  // the pointer to the vertex buffer
  16. // function prototypes
  17. void initD3D(HWND hWnd);  // sets up and initializes Direct3D
  18. void render_frame(void);  // renders a single frame
  19. void cleanD3D(void);  // closes Direct3D and releases memory
  20. void init_graphics(void);  // 3D declarations
  21. struct CUSTOMVERTEX {FLOAT X, Y, Z; DWORD COLOR;};
  22. #define CUSTOMFVF (D3DFVF_XYZ | D3DFVF_DIFFUSE)
  23. // the WindowProc function prototype
  24. LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
  25. // the entry point for any Windows program
  26. int WINAPI WinMain(HINSTANCE hInstance,
  27.           HINSTANCE hPrevInstance,
  28.           LPSTR lpCmdLine,
  29.           int nCmdShow)
  30. {
  31.   HWND hWnd;
  32.   WNDCLASSEX wc;
  33.   ZeroMemory(&wc, sizeof(WNDCLASSEX));
  34.   wc.cbSize = sizeof(WNDCLASSEX);
  35.   wc.style = CS_HREDRAW | CS_VREDRAW;
  36.   wc.lpfnWndProc = WindowProc;
  37.   wc.hInstance = hInstance;
  38.   wc.hCursor = LoadCursor(NULL, IDC_ARROW);
  39.   wc.lpszClassName = L"WindowClass";
  40.   RegisterClassEx(&wc);
  41.   hWnd = CreateWindowEx(NULL, L"WindowClass", L"Our Direct3D Program",
  42.              WS_OVERLAPPEDWINDOW, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT,
  43.              NULL, NULL, hInstance, NULL);
  44.   ShowWindow(hWnd, nCmdShow);
  45.   // set up and initialize Direct3D
  46.   initD3D(hWnd);
  47.   // enter the main loop:
  48.   MSG msg;
  49.   while(TRUE)
  50.   {
  51.     while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
  52.     {
  53.       TranslateMessage(&msg);
  54.       DispatchMessage(&msg);
  55.     }
  56.     if(msg.message == WM_QUIT)
  57.       break;
  58.     render_frame();
  59.   }
  60.   // clean up DirectX and COM
  61.   cleanD3D();
  62.   return msg.wParam;
  63. }
  64. // this is the main message handler for the program
  65. LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  66. {
  67.   switch(message)
  68.   {
  69.     case WM_DESTROY:
  70.       {
  71.         PostQuitMessage(0);
  72.         return 0;
  73.       } break;
  74.   }
  75.   return DefWindowProc (hWnd, message, wParam, lParam);
  76. }
  77. // this function initializes and prepares Direct3D for use
  78. void initD3D(HWND hWnd)
  79. {
  80.   d3d = Direct3DCreate9(D3D_SDK_VERSION);
  81.   D3DPRESENT_PARAMETERS d3dpp;
  82.   ZeroMemory(&d3dpp, sizeof(d3dpp));
  83.   d3dpp.Windowed = TRUE;
  84.   d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
  85.   d3dpp.hDeviceWindow = hWnd;
  86.   d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8;
  87.   d3dpp.BackBufferWidth = SCREEN_WIDTH;
  88.   d3dpp.BackBufferHeight = SCREEN_HEIGHT;
  89.   // create a device class using this information and the info from the d3dpp stuct
  90.   d3d->CreateDevice(D3DADAPTER_DEFAULT,
  91.            D3DDEVTYPE_HAL,
  92.            hWnd,
  93.            D3DCREATE_SOFTWARE_VERTEXPROCESSING,
  94.            &d3dpp,
  95.            &d3ddev);
  96.   init_graphics();  // call the function to initialize the triangle
  97.   d3ddev->SetRenderState(D3DRS_LIGHTING, FALSE);  // turn off the 3D lighting
  98. }
  99. // this is the function used to render a single frame
  100. void render_frame(void)
  101. {
  102.   d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0);
  103.   d3ddev->BeginScene();
  104.   // select which vertex format we are using
  105.   d3ddev->SetFVF(CUSTOMFVF);
  106.   // SET UP THE PIPELINE
  107.   D3DXMATRIX matRotateY;  // a matrix to store the rotation information
  108.   static float index = 0.0f; index+=0.05f;  // an ever-increasing float value
  109.   // build a matrix to rotate the model based on the increasing float value
  110.   D3DXMatrixRotationY(&matRotateY, index);
  111.   // tell Direct3D about our matrix
  112.   d3ddev->SetTransform(D3DTS_WORLD, &matRotateY);
  113.   D3DXMATRIX matView;  // the view transform matrix
  114.   D3DXMatrixLookAtLH(&matView,
  115.             &D3DXVECTOR3 (0.0f, 0.0f, 10.0f),  // the camera position
  116.             &D3DXVECTOR3 (0.0f, 0.0f, 0.0f),  // the look-at position
  117.             &D3DXVECTOR3 (0.0f, 1.0f, 0.0f));  // the up direction
  118.   d3ddev->SetTransform(D3DTS_VIEW, &matView);  // set the view transform to matView
  119.   D3DXMATRIX matProjection;   // the projection transform matrix
  120.   D3DXMatrixPerspectiveFovLH(&matProjection,
  121.                 D3DXToRadian(45),  // the horizontal field of view
  122.                 (FLOAT)SCREEN_WIDTH / (FLOAT)SCREEN_HEIGHT, // aspect ratio
  123.                 1.0f,  // the near view-plane
  124.                 100.0f);  // the far view-plane
  125.   d3ddev->SetTransform(D3DTS_PROJECTION, &matProjection);  // set the projection
  126.   // select the vertex buffer to display
  127.   d3ddev->SetStreamSource(0, v_buffer, 0, sizeof(CUSTOMVERTEX));
  128.   // copy the vertex buffer to the back buffer
  129.   d3ddev->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1);
  130.   d3ddev->EndScene();
  131.   d3ddev->Present(NULL, NULL, NULL, NULL);
  132. }
  133. // this is the function that cleans up Direct3D and COM
  134. void cleanD3D(void)
  135. {
  136.   v_buffer->Release();  // close and release the vertex buffer
  137.   d3ddev->Release();  // close and release the 3D device
  138.   d3d->Release();  // close and release Direct3D
  139. }
  140. // this is the function that puts the 3D models into video RAM
  141. void init_graphics(void)
  142. {
  143.   // create the vertices using the CUSTOMVERTEX struct
  144.   CUSTOMVERTEX vertices[] =
  145.   {
  146.     { 3.0f, -3.0f, 0.0f, D3DCOLOR_XRGB(0, 0, 255), },
  147.     { 0.0f, 3.0f, 0.0f, D3DCOLOR_XRGB(0, 255, 0), },
  148.     { -3.0f, -3.0f, 0.0f, D3DCOLOR_XRGB(255, 0, 0), },
  149.   };
  150.   // create a vertex buffer interface called v_buffer
  151.   d3ddev->CreateVertexBuffer(3*sizeof(CUSTOMVERTEX),
  152.                 0,
  153.                 CUSTOMFVF,
  154.                 D3DPOOL_MANAGED,
  155.                 &v_buffer,
  156.                 NULL);
  157.   VOID* pVoid;  // a void pointer
  158.   // lock v_buffer and load the vertices into it
  159.   v_buffer->Lock(0, 0, (void**)&pVoid, 0);
  160.   memcpy(pVoid, vertices, sizeof(vertices));
  161.   v_buffer->Unlock();
  162. }



Is this a known issue when programming DX with dev c++? I managed to set it up alright originally.
  • Anonymous
  • Bot
  • No Avatar
  • Posts: ?
  • Loc: Ozzuland
  • Status: Online

Post 3+ Months Ago

Post Information

  • Total Posts in this topic: 1 post
  • Users browsing this forum: No registered users and 156 guests
  • You cannot post new topics in this forum
  • You cannot reply to topics in this forum
  • You cannot edit your posts in this forum
  • You cannot delete your posts in this forum
  • You cannot post attachments in this forum
 
 

© 1998-2014. Ozzu® is a registered trademark of Unmelted, LLC.