Direct3D DrawIndexedPrimitive失败

姚小白 2016-08-20 10:06:38
想在一个Dll中调用Direct3D,代码如下:

初始化:

if(m_D3D == NULL)
{
m_D3D.Attach(Direct3DCreate9(D3D9b_SDK_VERSION));
}

WNDCLASSEX wc={sizeof(WNDCLASSEX),CS_CLASSDC,MsgProc,0,0,GetModuleHandle(NULL),NULL,NULL,NULL,NULL,L"D3D",NULL};
RegisterClassEx(&wc);
m_window = CreateWindowA("D3D","sphere turtorial",WS_OVERLAPPEDWINDOW,100,100,400,400,GetDesktopWindow(),NULL,wc.hInstance,NULL);

if( m_D3DDev == NULL )
{
CreateDevice();
}

InitD3D(m_D3DDev);


CreateDevice()

HRESULT hr;
m_D3DDev = NULL;
D3DDISPLAYMODE dm;

hr = m_D3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &dm);

ZeroMemory(&pp, sizeof(pp));
pp.Windowed = TRUE;
pp.hDeviceWindow = m_window;
pp.SwapEffect = D3DSWAPEFFECT_COPY;
pp.BackBufferFormat = dm.Format;

FAIL_RET( m_D3D->CreateDevice( D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
m_window,
D3DCREATE_SOFTWARE_VERTEXPROCESSING |
D3DCREATE_MULTITHREADED,
&pp,
&m_D3DDev) );

m_renderTarget = NULL;
return m_D3DDev->GetRenderTarget( 0, & m_renderTarget );


Init3D()由于篇幅太长,不复制了,就是建立了一个顶点缓存和索引缓存,用来画球体。 这在另外一个MFC程序中都是正确的。但是在这个DLL中,我获取到纹理资源后(纹理是正确的):


FAIL_RET( m_D3DDev->SetTexture( 0, pRenderTexture));
FAIL_RET(hr = m_D3DDev->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE));
FAIL_RET(hr = m_D3DDev->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE));
FAIL_RET(hr = m_D3DDev->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE));
FAIL_RET(hr = m_D3DDev->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE));

FAIL_RET( m_D3DDev->SetStreamSource(0, g_pVB, 0, sizeof(CUSTOMVERTEXSPHERE) ) ); //set next source ( NEW )
FAIL_RET( m_D3DDev->SetFVF( D3DFVF_CUSTOM ) );
FAIL_RET( m_D3DDev->SetIndices(g_pIB));

FAIL_RET(hr = m_D3DDev->DrawIndexedPrimitive(D3DPT_TRIANGLESTRIP,0,0,(g_segments+1)*(1+g_rings),0,2*(g_segments)*g_rings+g_segments-2+g_rings));
FAIL_RET( m_D3DDev->SetTexture( 0, NULL));

FAIL_RET( m_D3DDev->EndScene());


在DrawIndexedPrimitive时程序崩溃,显示:
0x07FDB3D5 (igdumdim32.dll) (graphstudionext.exe 中)处有未经处理的异常: 0xC0000005: 读取位置 0x00000028 时发生访问冲突。

是否和初始化IDirect3DDevice9时的窗口有关? 因为和MFC对比也就窗口不一样了,MFC中使用的是PictureControl的句柄。其他流程都一样
...全文
194 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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