tamashii 发表于 2010-4-2 20:27:25

ID3DXSprite的问题……

为啥在ID3DXSprite->Begin()的时候会有问题啊?

Game.exe 中的 0x004011c0 处未处理的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突

这究竟是什么问题啊囧……


void Render() {
    if (g_pD3DDevice->Clear(NULL, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), 1.0, 0) == S_OK){
      if (SUCCEEDED(g_pD3DDevice->BeginScene())) {
            sprite->Begin(D3DXSPRITE_ALPHABLEND);
            // TODO : Add scene rendering code here.
            sprite->End();
            g_pD3DDevice->EndScene();
            g_pD3DDevice->Present(NULL, NULL, NULL, NULL);
      }
    }
}


HRESULT InitializeGraphics(HWND hWnd) {
    HRESULT hr;
    if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
      return E_FAIL;
    D3DPRESENT_PARAMETERS d3dpp;
    ZeroMemory(&d3dpp, sizeof(d3dpp));
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    if (windowed) {
      d3dpp.Windowed = TRUE;
    }
    else {
      D3DDISPLAYMODE d3ddm;
      g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm);
      d3dpp.BackBufferCount = 1;
      d3dpp.BackBufferFormat = d3ddm.Format;
      d3dpp.BackBufferWidth = screenwidth;
      d3dpp.BackBufferHeight = screenheight;
      d3dpp.Windowed = FALSE;
    }
    hr = g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_pD3DDevice);
    if (hr == S_OK) {
      g_pD3DDevice->SetRenderState(D3DRS_LIGHTING, FALSE);
      g_pD3DDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
      g_pD3DDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
      g_pD3DDevice->SetRenderState(D3DRS_BLENDOPALPHA, D3DBLENDOP_ADD);
      g_pD3DDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
      g_pD3DDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
    }
    return hr;
}

菲尔迦娜 发表于 2010-4-5 15:35:42

话说没有看到 sprite 的初始化 = =
hr = D3DXCreateSprite(g_pD3DDevice,  &sprite);
页: [1]
查看完整版本: ID3DXSprite的问题……