Старый движок я удалил и начал писать новый.
С написанием нового движка у меня возникла проблема. В оконном режиме движок работает нормально, а в полноэкранном режиме появляется сообщение об ошибке. MagicWolf вы можете мне помочь разобраться в чём причина.
Вот код нового движка:
Game.cpp-главный файл движка
Код:
#include "xmain.h"
#include "xdirect3d.h"
////////////////////////////////////////////////////////////////////////
int Init_Game()
{
Init_Direct3D();
return 0;
}
////////////////////////////////////////////////////////////////////////
int Game_Main()
{
Draw_Direct3D();
return 0;
}
////////////////////////////////////////////////////////////////////////
int Shutdown_Game()
{
Shutdown_Direct3D();
return 0;
}
////////////////////////////////////////////////////////////////////////
xmain.cpp-Win32 API
Код:
#include "xfiles.h"
#include "xdirect3d.h"
#include "xmain.h"
HWND main_window_handle;
HINSTANCE main_instance;
HWND hwnd;
int Init_Game();
int Game_Main();
int Shutdown_Game();
////////////////////////////////////////////////////////////////////////
LRESULT CALLBACK WindowProc(HWND hwnd,
UINT msg,
WPARAM wparam,
LPARAM lparam)
{
switch(msg)
{
case WM_CREATE:
{
return(0);
}
case WM_DESTROY:
{
PostQuitMessage(0);
return(0);
}
}
return (DefWindowProc(hwnd, msg, wparam, lparam));
}
////////////////////////////////////////////////////////////////////////
int WINAPI WinMain( HINSTANCE hinstance,
HINSTANCE hprevinstance,
LPSTR lpcmdline,
int ncmdshow)
{
Read_File("setup.log");
MSG msg;
WNDCLASSEX winclass;
winclass.cbSize =sizeof(WNDCLASSEX);
winclass.style =CS_HREDRAW | CS_VREDRAW;
winclass.lpfnWndProc =WindowProc;
winclass.cbClsExtra =0;
winclass.cbWndExtra =0;
winclass.hInstance =hinstance;
winclass.hIcon =LoadIcon(0,IDI_APPLICATION);
winclass.hCursor =LoadCursor(0,IDC_ARROW);
winclass.hbrBackground=NULL;
winclass.lpszMenuName =NULL;
winclass.lpszClassName="Windows Class";
winclass.hIconSm =NULL;
main_instance=hinstance;
RegisterClassEx(&winclass);
if(app==0)
{
hwnd=CreateWindowEx(NULL,"Windows Class","3D Packman",
WS_POPUP | WS_VISIBLE,0,0,
screen_width,screen_height,
NULL,NULL,hinstance,NULL);
}
if(app==1)
{
hwnd=CreateWindowEx(NULL,"Windows Class","3D Packman",
WS_SYSMENU | WS_CAPTION | WS_VISIBLE,0,0,
screen_width,screen_height,
NULL,NULL,hinstance,NULL);
}
main_window_handle=hwnd;
Init_Game();
ShowWindow(hwnd,SW_SHOWDEFAULT);
UpdateWindow(hwnd);
ZeroMemory(&msg,sizeof(msg));
while(msg.message!=WM_QUIT)
{
if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
if (msg.message == WM_QUIT)
break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
Game_Main();
}
Shutdown_Game();
UnregisterClass("Windows Class",winclass.hInstance);
return 0;
}
////////////////////////////////////////////////////////////////////////
xmain.h-заголовочный файл Win32 API
Код:
#include <windows.h>
#include <windowsx.h>
extern HWND main_window_handle;
extern HINSTANCE main_instance;
extern HWND hwnd;
LRESULT CALLBACK WindowProc(HWND hwnd,
UINT msg,
WPARAM wparam,
LPARAM lparam);
int WINAPI WinMain( HINSTANCE hinstance,
HINSTANCE hprevinstance,
LPSTR lpcmdline,
int ncmdshow);
xdirect3d.cpp-функции direct3d
Код:
#include "xfiles.h"
#include "xmain.h"
#include "xdirect3d.h"
LPDIRECT3D9 direct3d=NULL;
LPDIRECT3DDEVICE9 device =NULL;
D3DCAPS9 caps;
////////////////////////////////////////////////////////////////////////
int Init_Direct3D()
{
direct3d=Direct3DCreate9(D3D_SDK_VERSION);
//direct3d->GetDeviceCaps(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,&caps);
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp,sizeof(d3dpp));
d3dpp.BackBufferWidth =640;
d3dpp.BackBufferHeight =480;
d3dpp.BackBufferFormat =D3DFMT_A8R8G8B8;
d3dpp.BackBufferCount =1;
d3dpp.MultiSampleType =D3DMULTISAMPLE_NONE;
d3dpp.MultiSampleQuality =0;
d3dpp.SwapEffect =D3DSWAPEFFECT_DISCARD;
d3dpp.hDeviceWindow =hwnd;
d3dpp.Windowed =app;
d3dpp.SwapEffect =D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat =D3DFMT_UNKNOWN;
d3dpp.EnableAutoDepthStencil =true;
d3dpp.AutoDepthStencilFormat =D3DFMT_D24S8;
d3dpp.Flags = 0;
d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
direct3d->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hwnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp,&device);
return 0;
}
////////////////////////////////////////////////////////////////////////
int Draw_Direct3D()
{
device->Clear(0,0,D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(0,0,255),1.0f,0);
device->BeginScene();
device->EndScene();
device->Present(0,0,0,0);
return 0;
}
////////////////////////////////////////////////////////////////////////
int Shutdown_Direct3D()
{
if(direct3d)
direct3d->Release();
if(direct3d)
device->Release();
return 0;
}
////////////////////////////////////////////////////////////////////////
direct3d.h-заголовочный файл direct3d
Код:
#pragma comment(lib,"d3d9.lib")
#include <d3d9.h>
extern LPDIRECT3D9 direct3d;
extern LPDIRECT3DDEVICE9 device;
extern D3DCAPS9 caps;
int Init_Direct3D();
int Draw_Direct3D();
int Shutdown_Direct3D();
xfiles.cpp-функции для работы с файлами
Код:
#include "xfiles.h"
int screen_width;
int screen_height;
int app;
char width[30];
char height[30];
char app1[30];
FILE*cfPtr;
////////////////////////////////////////////////////////////////////////
int Read_File(char*filename)
{
cfPtr=fopen(filename,"r");
fscanf(cfPtr,"%13s%d\n",width,&screen_width);
fscanf(cfPtr,"%14s%d\n",height,&screen_height);
fscanf(cfPtr,"%9s%d\n",app1,&app);
fclose(cfPtr);
return 0;
}
////////////////////////////////////////////////////////////////////////
xfiles.h-заголовочный файл
Код:
#include <stdio.h>
extern int screen_width;
extern int screen_height;
extern int app;
extern FILE*cfPtr;
int Read_File(char*filename);
Буду рад любой помощи!!!
