游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3049|回复: 2

directX新手一问:InitD3D函数报错~~求指导

[复制链接]

1

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2011-12-19 22:07:00 | 显示全部楼层 |阅读模式
bool d3d::InitD3D(
        HINSTANCE hInstance,
        int width,int height,
        bool windowed,
        D3DDEVTYPE deviceType,
        IDirect3DDevice9** device)
{
        WNDCLASS wc;
        wc.style         = CS_HREDRAW | CS_VREDRAW;
        wc.lpfnWndProc   = (WNDPROC)d3d::WndProc;
        wc.cbClsExtra    = 0;
        wc.cbWndExtra    = 0;
        wc.hInstance     = hInstance;
        wc.hIcon         = LoadIcon(0, IDI_APPLICATION);
        wc.hCursor       = LoadCursor(0, IDC_ARROW);
        wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
        wc.lpszMenuName  = 0;
        wc.lpszClassName = L"Direct3D9App";
        if(!RegisterClass(&wc))
        {
                ::MessageBox(0,L"RegisterClass ERROR",0,0);
                return false;                                                                       
        }
        HWND hwnd=0;
        hwnd=::CreateWindow(L"Direct3D9App",L"冒险岛demo",
                WS_EX_TOPMOST,
                0,0,width,height,
                0,0,hInstance,0);
        if(!hwnd)
        {
                ::MessageBox(0,L"CreateWindow ERROR",0,0);
                return false;
        }
        ::ShowWindow(hwnd,SW_SHOW);
        ::UpdateWindow(hwnd);
        HRESULT hr=0;
        IDirect3D9* d3d9=0;
        d3d9        =        Direct3DCreate9(D3D_SDK_VERSION);
        assert(d3d9!=0);
        D3DCAPS9 caps;
        d3d9->GetDeviceCaps(1,deviceType,&caps);
        int vp=0;
        if(caps.DevCaps&D3DDEVCAPS_HWTRANSFORMANDLIGHT)
                vp        =        D3DCREATE_HARDWARE_VERTEXPROCESSING;
        else
                vp        =        D3DCREATE_SOFTWARE_VERTEXPROCESSING;
        D3DPRESENT_PARAMETERS        d3dpp;
        ZeroMemory(&d3dpp,sizeof(d3dpp));
        d3dpp.BackBufferWidth        =width;
        d3dpp.BackBufferHeight        =height;
        d3dpp.BackBufferFormat        =D3DFMT_A8R8G8B8;
        d3dpp.BackBufferCount        =1;
        d3dpp.MultiSampleQuality        =0;
        d3dpp.MultiSampleType        = D3DMULTISAMPLE_NONE ;
        d3dpp.SwapEffect        =D3DSWAPEFFECT_DISCARD;
        d3dpp.hDeviceWindow                =hwnd;
        d3dpp.Windowed                        =windowed;
        d3dpp.EnableAutoDepthStencil        =1;
        d3dpp.AutoDepthStencilFormat                =D3DFMT_D24S8;
        d3dpp.Flags                                        =0;
        d3dpp.FullScreen_RefreshRateInHz        =D3DPRESENT_RATE_DEFAULT;
        d3dpp.PresentationInterval                 =        D3DPRESENT_INTERVAL_IMMEDIATE;
        //step 4

        hr        =d3d9->CreateDevice(
                D3DADAPTER_DEFAULT,
                deviceType,
                hwnd,
                vp,
                &d3dpp,
                device);

        if(FAILED(hr))
        {
                d3d9->Release();
                ::MessageBox(0,L"CreateDevice()-FAILED",0,0);
                return false;
        }

               
                d3d9->Release();
        return true;


}
错误在于CreateDevice那个函数,messageBox执行了,感觉不应该啊,看了好久,编译也通过了,不知道什么原因。。。第一次用directX,求指导

22

主题

49

帖子

49

积分

注册会员

Rank: 2

积分
49
发表于 2011-12-26 00:45:00 | 显示全部楼层

Re: directX新手一问:InitD3D函数报错~~求指导

你看看是不是别的地方出错,你所说的报错,是怎么样个报错法,报错有很多种类的。
你这个例子好像是<<DirectX 9 3D游戏程序设计入门>>这本书的源码?
也可以让我帮你看看源码,我的QQ282891168

0

主题

2

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2011-12-26 09:33:00 | 显示全部楼层

Re:directX新手一问:InitD3D函数报错~~求指导

重点在d3dpp的设置,比如如果Windowed为TRUE的话,BackBufferWidth和BackBufferHeight必须为0,不知道你调用InitD3D的时候参数是怎么传的。总之d3dpp的设置比较容易出错,建议仔细研究一下文档
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-9 09:03

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表