繁体   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