Skip to main content
gamedev.net
🔒 Locked

Initialization error: strange problem

Started by robleetin Jul 1, 2007 at 3:32 PM 1 replies 1k views
Original Post
robleetin
robleetin
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
#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();
//-------------------------------------------------------------------------
};
GUM_DXManagement.cpp
#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();
}

WinMain.cpp
#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;
}

Misc.h
#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); 
I compile these source, and the program dump with this message :
GUM_DXManagement::InitD3D(): D3D Object initialization error
What's the error ? Thanks for help
hpjchobbes
hpjchobbes
Based on the Direct3D9 Documentation:

Quote:

If this function fails, it indicates that the header file version does not match the runtime DLL version. See GetDXVer Sample for help checking the version of the runtime that is installed on your machine.
robleetin
robleetin
Thanks for reply but I've installed June 2007' DirectX SDK and DirectX Runtime... The error is staying.

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.