簡體   English   中英

DX11 OpenGL互操作:無法復制緩沖區

[英]DX11 OpenGL interop: can't copy buffer

我正在嘗試使DirectX-OpenGL互操作正常運行,但到目前為止沒有成功。 在我的情況下,渲染是在OpenGL中完成的(通過OSG庫),我希望渲染的圖像為DirectX Texture2D。 到目前為止,我正在嘗試:

初始化:

ID3D11Device *dev3D;
// init dev3D with D3D11CreateDevice
ID3D11Texture2D *dxTexture2D;
// init dxTexture2D with CreateTexture2D, with D3D11_USAGE_DEFAULT, D3D11_BIND_SHADER_RESOURCE
HANDLE hGlDev = wglDXOpenDeviceNV(dev3D);
GLuint glTex;
glGenTextures(1, &glTex);
HANDLE hGLTx = wglDXRegisterObjectNV(hGlDev, (void*) dxTexture2D, glTex, GL_TEXTURE_2D, WGL_ACCESS_READ_WRITE_NV);

在OSG攝像機渲染的每一幀上,我都會收到回調。 首先,我從glReadBuffer(GL_FRONT)開始,直到那一點似乎還可以,因為我可以使用glReadPixels將渲染的緩沖區讀入內存。 問題是我無法將像素復制到先前創建的GL_TEXTURE_2D

BOOL lockOK = wglDXLockObjectsNV(hGlDev, 1, &hGLTx);
glBindTexture(GL_TEXTURE_2D, glTex);
glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, width, height, 0);
auto err = glGetError();

最后一次調用glCopyTexImage2D會產生錯誤0x502( GL_INVALID_OPERATION ),但我不知道為什么。 到此為止,其他一切看起來都還不錯。

任何幫助表示贊賞。

找到了問題。 無需調用glCopyTexImage2D (它會創建一個新的紋理), glCopyTexSubImage2D需要使用glCopyTexSubImage2D

glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, width, height);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM