下面是一个我从网上找到的一个D3D显示图片数组的例子,现在的问题是如果m_nWidth;m_nHeight都大于600的话,显卡工作不正常,win7出现显卡崩溃,出现问题是在如下函数:
m_pd3dDevice->GetBackBuffer(0,0,D3DBACKBUFFER_TYPE_MONO,&pBackBuffer); 请教一下这段代码哪里有问题?我的目的是动态显示内存图片数据,数据是实时刷新的,之前用gdi显示没问题,但是gdi在win8上很慢,所以想用d3d显示。我的本质目的其实是memcpy一段内存,紧接着显示,要求是实时,请教除了GDI最实时的方法是什么?只要求60fps就行了。void d3d_show(LPBYTE pBuffer,long lLen)
{   
 if(m_pd3dSurface == NULL)
  return;    
 D3DLOCKED_RECT d3d_rect;   
 if( FAILED(m_pd3dSurface->LockRect(&d3d_rect,NULL,D3DLOCK_DONOTWAIT)))      
  return ;  
 const int w = m_nWidth;
 const int h = m_nHeight; 
 BYTE * const p = (BYTE *)d3d_rect.pBits;
 const int stride = d3d_rect.Pitch;   
 int i = 0;  
 for(i = 0;i < h;i ++)   
 {        
  memcpy(p + i * stride,pBuffer + i * w, w); 
 }   
  for(i = 0;i < h/2;i ++)   
 {       
  memcpy(p + stride * h + i * stride / 2,pBuffer + w * h + w * h / 4 + i * w / 2, w / 2); 
 }    
 for(i = 0;i < h/2;i ++)   
 {       
  memcpy(p + stride * h + stride * h / 4 + i * stride / 2,pBuffer + w * h + i * w / 2, w / 2);  
 }   
 if( FAILED(m_pd3dSurface->UnlockRect()))    
 {       
  return ;  
 }    
 if (m_pd3dDevice != NULL)   
 {        
  m_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,0), 1.0f, 0 );    
  
  m_pd3dDevice->BeginScene();  
  
  IDirect3DSurface9 * pBackBuffer = NULL;  
  m_pd3dDevice->GetBackBuffer(0,0,D3DBACKBUFFER_TYPE_MONO,&pBackBuffer); 
 m_pd3dDevice->StretchRect(m_pd3dSurface,NULL,pBackBuffer,&m_rtViewport,D3DTEXF_LINEAR);   
  m_pd3dDevice->EndScene();       
  m_pd3dDevice->Present( NULL, NULL, NULL, NULL );   
 }
}