是否可以在directx dc/buffer上使用opengl进行绘制?
Is it possible to draw using opengl on a directx dc/buffer?
这可能是一个愚蠢的问题,但我找不到很好的例子来说明如何处理这个问题,或者它是否可能。我刚刚完成了一个项目,我使用gdi将东西放入dib缓冲区,然后将其交换到屏幕上hdc,基本上是用opengl制作我自己的交换链和绘图。
所以我想,我可以用directx11做同样的事情吗?但我似乎找不到我需要改变的DIB/缓冲区在哪里。
我想的对吗?有什么好主意吗?
可以。Nvidia公开了特定于供应商的扩展,称为NV_DX_Interop2和NV_DX_Interop2。有了这些扩展,你可以直接访问DirectX表面(当它驻留在GPU上时)并从OpenGL上下文中渲染它。这个操作应该有最小的(仅驱动程序)开销,并且CPU几乎不会被涉及。
请注意,虽然这是一个特定于供应商的扩展,英特尔gpu也支持它。
但是,不要仅仅为了好玩或者如果您控制了应用程序的所有源代码就这样做。这种互操作场景适用于有两个遗留/复杂代码库的情况,而互操作是比将所有逻辑移植到其他API更便宜/更好的选择。
是的,你可以这样做,OpenGL和D3D都支持可写纹理并锁定它们以获得像素数据。
简单地将你的场景在OpenGL中渲染为纹理,锁定它,读取像素数据并将其直接传递给D3D锁定的纹理像素数据,解锁它,然后对纹理做任何你想做的事情。
性能当然会很糟糕,你在一个单一的"操作"中多次拖延GPU,并迫使它与CPU(传递数据)和总线(用于内存访问)同步。而且这绝对没有任何好处。但如果你真的想试试,你可以试试
相关文章:
- 如何在Visual Basic中使用矩形函数OpenGL绘制矩形
- OpenGL绘制三角形而不是正方形
- 使用 OpenGL 绘制 8 x 15 矩形网格C++ - 崩溃
- C++:OpenGL:绘制多个几何图形
- 使用OpenGL绘制更多对象时,性能会降低
- C openGL绘制像素
- 用OpenGL绘制三角形
- 如何使用Legacy OpenGL绘制不同的彩色线条
- Opengl 3+ 绘制不同颜色的线条
- OpenGL绘制三角形只有白色
- 使用 OpenGL 绘制基本三角形
- OpenGL-绘制相机空间后,将模型放置在世界空间中
- 用OpenGL绘制Sierpinski的麻烦
- 用OpenGL绘制任意线(即,轴范围没有限制)
- OpenGL绘制的是椭圆形而不是圆形
- OpenGL绘制圆圈 /椭圆(填充)无GLBEGIN
- OpenGL绘制程序在每次击键时都会更改
- 使用OpenGL绘制三角形:如何使用两个类进行管理
- Opengl绘制半圆
- OpenGL绘制多个对象