Patch #853 2006-02-22 11:22

mortenmacfly

Template for a Direct/X application
Download
853-Template_for_a.patch (18.9 KB)
Category
Application::FeatureAdd
Status
Accepted
Close date
2006-03-13 10:14
Assigned to
 
Index: templates/win32/directx_main.cpp
===================================================================
--- templates/win32/directx_main.cpp    (revision 0)
+++ templates/win32/directx_main.cpp    (revision 0)
@@ -0,0 +1,162 @@
+#include <d3d8.h>
+
+LPDIRECT3D8       g_pD3D       = NULL;
+LPDIRECT3DDEVICE8 g_pD3DDevice = NULL;
+
+HRESULT InitialiseD3D(HWND hWnd)
+{
+  // First of all, create the main D3D object. If it is created successfully
+  // we should get a pointer to an IDirect3D8 interface.
+  g_pD3D = Direct3DCreate8(D3D_SDK_VERSION);
+
+  if(g_pD3D == NULL)
+  {
+    return E_FAIL;
+  }
+
+  //Get the current display mode
+  D3DDISPLAYMODE d3ddm;
+  if(FAILED(g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm)))
+  {
+    return E_FAIL;
+  }
+
+  // Create a structure to hold the settings for our device
+  D3DPRESENT_PARAMETERS d3dpp;
+  ZeroMemory(&d3dpp, sizeof(d3dpp));
+
+  // Fill the structure: Program shall be windowed,
+  // back buffer format matches current display mode
+  d3dpp.Windowed         = TRUE;
+  d3dpp.SwapEffect       = D3DSWAPEFFECT_COPY_VSYNC;
+  d3dpp.BackBufferFormat = d3ddm.Format;
+
+  //Create a Direct3D device.
+  if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
+            D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_pD3DDevice)))
+  {
+    return E_FAIL;
+  }
+
+  return S_OK;
+}
+
+void Render()
+{
+  if(g_pD3DDevice == NULL)
+  {
+    return;
+  }
+
+  // Clear the backbuffer to blue
+  g_pD3DDevice->Clear(0, NULL, D3DCLEAR_TARGET,
+                      D3DCOLOR_XRGB(0, 0, 255), 1.0f, 0);
+
+  // Begin the scene
+  g_pD3DDevice->BeginScene();
+
+  // Fill in here the rendering of other objects
+
+  // End the scene
+  g_pD3DDevice->EndScene();
+
+  // Fill back and front buffers so that back buffer will be visible on screen
+  g_pD3DDevice->Present(NULL, NULL, NULL, NULL);
+}
+
+void CleanUp()
+{
+  if(g_pD3DDevice != NULL)
+  {
+    g_pD3DDevice->Release();
+    g_pD3DDevice = NULL;
+  }
+
+  if(g_pD3D != NULL)
+  {
+    g_pD3D->Release();
+    g_pD3D = NULL;
+  }
+}
+
+void MainLoop()
+{
+  // Enter the main loop
+  MSG  msg;
+  BOOL bMessage;
+
+  PeekMessage(&msg, NULL, 0U, 0U, PM_NOREMOVE);
+
+  while(msg.message != WM_QUIT)
+  {
+    bMessage = PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE);
+
+    if(bMessage)
+    {
+      // Process message
+      TranslateMessage(&msg);
+      DispatchMessage(&msg);
+    }
+    else
+    {
+      Render(); // No message to process -> render the scene
+    }
+  }// while
+}
+
+// The windows message handler
+LRESULT WINAPI WinProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+  switch(msg)
+  {
+    case WM_DESTROY:
+      PostQuitMessage(0);
+      return 0;
+      break;
+
+    case WM_KEYUP:
+      switch (wParam)
+      {
+        case VK_ESCAPE:
+          // Escape key pressed -> exit
+          DestroyWindow(hWnd);
+          return 0;
+          break;
+      }
+      break;
+  }// switch
+
+  return DefWindowProc(hWnd, msg, wParam, lParam);
+}
+
+// Application main entry point
+INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, INT)
+{
+  //Register the window class
+  WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, WinProc, 0L, 0L,
+                    GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
+                    "DirectX Project", NULL };
+  RegisterClassEx(&wc);
+
+  // Create the application's main window
+  HWND hWnd = CreateWindow("DirectX Project", "Code::Blocks Template",
+                           WS_OVERLAPPEDWINDOW, 50, 50, 500, 500,
+                           GetDesktopWindow(), NULL, wc.hInstance, NULL);
+
+  // Initialize Direct3D
+  if(SUCCEEDED(InitialiseD3D(hWnd)))
+  {
+    // Show window
+    ShowWindow(hWnd, SW_SHOWDEFAULT);
+    UpdateWindow(hWnd);
+
+    //Start game running: Enter the game loop
+    MainLoop();
+  }
+
+  CleanUp();
+
+  UnregisterClass("DirectX Project", wc.hInstance);
+
+  return 0;
+}

Property changes on: templates\win32\directx_main.cpp
___________________________________________________________________
Name: svn:eol-style
   + native

Index: templates/win32/directx_vctk.cbp
===================================================================
--- templates/win32/directx_vctk.cbp    (revision 0)
+++ templates/win32/directx_vctk.cbp    (revision 0)
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<CodeBlocks_project_file>
+    <FileVersion major="1" minor="3" />
+    <Project>
+        <Option title="DirectX Project" />
+        <Option compiler="msvctk" />
+        <Build>
+            <Target title="default">
+                <Option output="DirectX.exe" />
+                <Option object_output="." />
+                <Option type="0" />
+                <Option compiler="msvctk" />
+                <Option includeInTargetAll="1" />
+            </Target>
+        </Build>
+        <Compiler>
+            <Add option="-DWIN32" />
+            <Add option="-DNDEBUG" />
+            <Add op
download for full patch...
mortenmacfly 2006-02-22 11:40

Updated the file...

mortenmacfly 2006-02-22 11:44

Patch is posted to:

http://forums.codeblocks.org/index.php?topic=2436.0

I cannot upload a ZIP file here. I tried but failed. Could some of the admins remove this patch? It's invalid.

mortenmacfly 2006-02-22 11:46

My initial comment is gone, too. Therefore here it is again:

This is a C::B template file for a Direct/X project. The user can choose what compiler to use: Visual C++ Toolkit 2003 or GCC. Depending on that the global variables "psdk" and/or "dx" have to be setup. A dialog informs the user about that.

mandrav 2006-03-07 09:32

I can't seem to be able to download the patch...

mortenmacfly 2006-03-07 12:08

Made a real patch against SVN (previous one was a ZIP file which got broken).