Original Post
Hi everybody ! I'm back on the DirectX Game Programming after a break of 5 months. 5 months ago, I posted a post like this and now, this is the same code and I don't understand what going wrong. GUM_DXManagement.h GUM_DXManagement.cpp WinMain.cpp Misc.h I compile these source, and the program dump with this message : What's the error ? Thanks for help
#pragma once
#include <iostream>
#include <windows.h>
#include <d3dx9.h>
#pragma comment (lib, "d3d9.lib")
using namespace std;
class GUM_DXManagement
{
private:
//-------------------------------------------------------------------------
//--- Singleton -----------------------------------------------------------
//-------------------------------------------------------------------------
GUM_DXManagement() {}
~GUM_DXManagement() {}
//-------------------------------------------------------------------------
HWND m_HWND;
LPDIRECT3DDEVICE9 m_D3DDevice;
int m_ScreenWidth;
int m_ScreenHeight;
public:
//-------------------------------------------------------------------------
//--- Singleton -----------------------------------------------------------
//-------------------------------------------------------------------------
static GUM_DXManagement *GetInstance()
{
static GUM_DXManagement instance;
return &instance
}
//-------------------------------------------------------------------------
//-------------------------------------------------------------------------
//--- Window --------------------------------------------------------------
//-------------------------------------------------------------------------
void BuildWindow(string caption, int width, int height,
int pos_x, int pos_y);
void RefreshWindow();
void EventLoop();
void PrintMessage(string str, int x, int y);
//-------------------------------------------------------------------------
//-------------------------------------------------------------------------
//--- DirectX -------------------------------------------------------------
//-------------------------------------------------------------------------
void InitD3D();
//-------------------------------------------------------------------------
};
#include "GUM_DXManagement.h"
#include "Misc.h"
void GUM_DXManagement::PrintMessage(string str, int x, int y)
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(m_HWND, &ps);
SetBkMode(hdc, TRANSPARENT);
TextOut(hdc, x, y, str.c_str(), lstrlen(str.c_str()));
}
LRESULT CALLBACK MsgProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg)
{
case WM_CREATE:
return 0;
case WM_KEYDOWN:
if (wParam == VK_ESCAPE)
{
PostQuitMessage(0);
}
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, msg, wParam, lParam);
}
void GUM_DXManagement::BuildWindow(string caption, int width, int height,
int pos_x, int pos_y)
{
m_ScreenWidth = width;
m_ScreenHeight = height;
WNDCLASS wc = {CS_HREDRAW | CS_VREDRAW, MsgProc, 0, 0, GetModuleHandle(NULL),
LoadIcon(NULL, IDI_APPLICATION), LoadCursor(NULL, IDC_ARROW),
(HBRUSH)GetStockObject(WHITE_BRUSH), NULL, "WinClass"};
if(!(RegisterClass(&wc)))
{
ErrorMsg("GUM_DXManagement::BuildWindow: Can't register window class");
}
m_HWND = CreateWindow("WinClass", caption.c_str(), WS_EX_TOPMOST | WS_POPUP,
pos_x, pos_y, width, height, NULL, NULL, wc.hInstance, NULL);
if (m_HWND == NULL)
{
ErrorMsg("GUM_DXManagement::BuildWindow: CreateWindow() failed");
}
}
void GUM_DXManagement::RefreshWindow()
{
ShowWindow(m_HWND, SW_SHOWDEFAULT);
UpdateWindow(m_HWND);
}
void GUM_DXManagement::EventLoop()
{
MSG msg;
while (true)
{
DWORD timer_start = GetTickCount();
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if (msg.message == WM_QUIT)
{
break;
}
TranslateMessage(&msg);
DispatchMessage(&msg);
}
//RenderFrame();
while ((GetTickCount() - timer_start) < 25);
}
}
void GUM_DXManagement::InitD3D()
{
LPDIRECT3D9 d3dobject;
if (NULL == (d3dobject = Direct3DCreate9(D3D_SDK_VERSION)))
ErrorMsg("GUM_DXManagement::InitD3D(): D3D Object initialization error\n");
D3DCAPS9 caps;
d3dobject->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, ∩︀);
if (!(caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT))
{
d3dobject->Release();
ErrorMsg("GUM_DXManagement::InitD3D(): Your video card doesn't support Hardware T&L\n");
}
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp, sizeof(D3DPRESENT_PARAMETERS));
d3dpp.BackBufferWidth = m_ScreenWidth;
d3dpp.BackBufferHeight = m_ScreenHeight;
d3dpp.BackBufferFormat = D3DFMT_A8R8G8B8;
d3dpp.BackBufferCount = 1;
d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;
d3dpp.MultiSampleQuality = 0;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.hDeviceWindow = m_HWND;
d3dpp.Windowed = false;
d3dpp.EnableAutoDepthStencil = true;
d3dpp.AutoDepthStencilFormat = D3DFMT_D24S8;
d3dpp.Flags = 0;
d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
DWORD ret = d3dobject->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,
m_HWND, D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dpp, &m_D3DDevice);
if (FAILED(ret))
{
d3dobject->Release();
ErrorMsg("GUM_DXManagement::InitD3D(): Create D3DDevice failed\n");
}
d3dobject->Release();
}
#include "GUM_DXManagement.h"
#include "Misc.h"
int APIENTRY WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine,
int nShowCmd)
{
GUM_DXInstance->BuildWindow("DirectX Test", 640, 480,
100, 100);
GUM_DXInstance->InitD3D();
GUM_DXInstance->RefreshWindow();
GUM_DXInstance->EventLoop();
return 0;
}
#pragma once
#include <iostream>
#include <fstream>
using namespace std;
#include "GUM_DXManagement.h"
#define GUM_DXInstance GUM_DXManagement::GetInstance()
#define WS_POPUPAPP (WS_SYSMENU | CS_HREDRAW | WS_MINIMIZEBOX | CS_VREDRAW)
const std::string BUILD = " (Compiled the "__DATE__" at "__TIME__")";
const std::string SCREEN_CAPTION = "Test";
#define ErrorMsg(msg) MessageBox(0, msg, SCREEN_CAPTION.c_str(), MB_OK | MB_ICONERROR); OutputDebugString(msg); exit(0);
#define InformationMsg(msg) MessageBox(0, msg, SCREEN_CAPTION.c_str(), MB_OK | MB_ICONEXCLAMATION);
GUM_DXManagement::InitD3D(): D3D Object initialization error