如何解决DirectX 9 和 cef
我正在尝试在 directx 9
中集成 cef。没有错误发生,OnPaint
被调用,但是精灵没有被绘制。在此之前,我将缓冲区保存到 BMP 文件,但现在我决定渲染纹理。可能是什么问题?
void bCef::OnPaint(CefRefPtr<CefBrowser> browser,PaintElementType type,const RectList& dirtyRects,const void* buffer,int width,int height)
{
m_RenderData.buffer = buffer;
m_RenderData.width = width;
m_RenderData.height = height;
m_RenderData.dirtyRects = dirtyRects;
m_RenderData.changed = true;
}
void bCef::setpDevice(IDirect3DDevice9* pDevice)
{
if (m_RenderData.xzInit == false)
{
pDevice->CreateTexture(640,480,1,D3DUSAGE_DYNAMIC,D3DFMT_A8R8G8B8,D3DPOOL_DEFAULT,&m_RenderData.ttexture,NULL);
D3DXCreateSprite(pDevice,&m_RenderData.tsprite);
m_RenderData.xzInit = true;
}
}
void bCef::draw()
{
std::lock_guard<std::mutex> lock(m_RenderData.dataMutex);
IDirect3DSurface9* pSurface;
m_RenderData.ttexture->GetSurfaceLevel(0,&pSurface);
if (m_RenderData.changed)
{
D3DLOCKED_RECT LockedRect;
if (FAILED(pSurface->LockRect(&LockedRect,nullptr,0))) {
m_RenderData.cv.notify_all();
return;
}
m_RenderData.changed = false;
D3DSURFACE_DESC SurfaceDesc;
pSurface->GetDesc(&SurfaceDesc);
pSurface->LockRect(&LockedRect,0);
auto dest = (unsigned char*)LockedRect.pBits;
auto src = (const char*)m_RenderData.buffer;
for (int i = 0; i < 480; ++i)
{
memcpy(dest,src,640 * 4);
dest += LockedRect.Pitch;
src += 640 * 4;
}
pSurface->UnlockRect();
}
D3DXVECTOR3* vector = new D3DXVECTOR3(0,0);
m_RenderData.tsprite->Begin(D3DXSPRITE_ALPHABLEND);
m_RenderData.tsprite->Draw(m_RenderData.ttexture,NULL,vector,0xFFFFFFFF);
m_RenderData.tsprite->End();
m_RenderData.cv.notify_all();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。