小弟刚学D3D,想问下这个初始化程序哪里有问题啊,谢谢!!

RabbitLBJ 2009-07-13 11:08:44
#include <stdio.h>
#include <windows.h>
#include <d3d8.h>
#define WHITE 0
#define FULLSCREEN 0

int Game_Init(void *parms=NULL);
HWND hwnd_app;

LRESULT CALLBACK WindowProc(HWND hwnd,
UINT msg,
WPARAM wParam,
LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;

switch(msg)
{
case WM_CREATE:
{
return 0;
}break;
case WM_PAINT:
{
hdc=BeginPaint(hwnd,&ps);
EndPaint(hwnd,&ps);
return 0;
}break;
case WM_DESTROY:
{
PostQuitMessage(0);
return 0;
}break;
default:break;
}
return(DefWindowProc(hwnd,msg,wParam,lParam));
}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
WNDCLASS winclass;
HWND hwnd;
MSG msg;

winclass.style=CS_DBLCLKS|CS_OWNDC|CS_HREDRAW|CS_VREDRAW;
winclass.lpfnWndProc=WindowProc;
winclass.cbClsExtra=NULL;
winclass.cbWndExtra=NULL;
winclass.hInstance=hInstance;
winclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
winclass.hCursor=LoadCursor(NULL,IDC_ARROW);
winclass.hbrBackground=(HBRUSH)GetStockObject(WHITE);
winclass.lpszClassName="simple";
winclass.lpszMenuName=NULL;

if(!RegisterClass(&winclass))
return 0;

if(!(hwnd=CreateWindow("simple","the simple window",FULLSCREEN?(WS_POPUP|WS_VISIBLE):
(WS_OVERLAPPED | WS_VISIBLE | WS_SYSMENU | WS_CAPTION),
0,0,400,400,
NULL,NULL,
hInstance,
NULL)))
return 0;

hwnd_app=hwnd;

int Game_Init();

while(1)
{
if(PeekMessage(&msg,hwnd,NULL,NULL,PM_REMOVE))
{
if(msg.message==WM_QUIT)
{
break;
}
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return(msg.wParam);
}

int Game_Init(void *parms)
{
IDirect3D8* lpd3d;
D3DCAPS8 ddcaps;
D3DPRESENT_PARAMETERS d3dpp;
IDirect3DDevice8* lpdevice;
lpd3d=Direct3DCreate8(D3D_SDK_VERSION);
if(FAILED(lpd3d->GetDeviceCaps(D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
&ddcaps)))
return 0;
d3dpp.BackBufferWidth=800;
d3dpp.BackBufferHeight=600;
d3dpp.BackBufferFormat=D3DFMT_A8R8G8B8;
d3dpp.BackBufferCount=1;
d3dpp.MultiSampleType=D3DMULTISAMPLE_NONE;
d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD;
d3dpp.hDeviceWindow=hwnd_app;
d3dpp.Windowed=true;
d3dpp.EnableAutoDepthStencil=true;
d3dpp.AutoDepthStencilFormat=D3DFMT_D24S8;
d3dpp.Flags=0;
d3dpp.FullScreen_RefreshRateInHz=D3DPRESENT_RATE_DEFAULT;


if(FAILED(lpd3d->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hwnd_app,D3DCREATE_HARDWARE_VERTEXPROCESSING,
&d3dpp,&lpdevice)))
return 0;
return 0;
}
...全文
72 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xingzhe2001 2009-07-20
  • 打赏
  • 举报
回复
看起来没什么错误,为什么这么问?
tkminigame 2009-07-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 RabbitLBJ 的回复:]
谢谢,可是我还是想把基础的东西学了,如果连初始化都不会,以后学东西会没信心的!!
[/Quote]
那你知道c runtime是怎么初始化的,你明白吗?你不明白不一样的还是在写C++程序吗?初始化是基础,但基础并不一定就是最容易的。
AliasKavin 2009-07-15
  • 打赏
  • 举报
回复
那你还是看这个吧~
http://www.csinx.org/IBlog/DirectX9/
xqhrs232 2009-07-14
  • 打赏
  • 举报
回复
应该学新版本
xingzhe2001 2009-07-14
  • 打赏
  • 举报
回复
为啥要用d3d8啊
张赐 2009-07-14
  • 打赏
  • 举报
回复
有什么问题?
RabbitLBJ 2009-07-14
  • 打赏
  • 举报
回复
谢谢,可是我还是想把基础的东西学了,如果连初始化都不会,以后学东西会没信心的!!
tkminigame 2009-07-14
  • 打赏
  • 举报
回复
一个简单的方法可以略过麻烦的d3d设置。打开directx sample browser,选择SimpleSample,Install project,这样就可以直接开始d3d编程了。非常适合新手。

8,303

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧