首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DirectX 11如何在图形处理器上处理来自sharedHandle的图像

DirectX 11如何在图形处理器上处理来自sharedHandle的图像
EN

Stack Overflow用户
提问于 2020-06-07 04:47:30
回答 1查看 67关注 0票数 0

我有一个存在于图形处理器上的纹理,我有一个到那个纹理的sharedHandle,我想在那个图片上做一些图像处理。我想得到一个特定颜色的像素的纹理坐标。

例如,我希望颜色为r135,g80,b175的所有像素的色调变化为40 (因此,70和90的绿色是可以接受的,但不能低于40或高于120,依此类推)

问题是我想通过着色器在GPU上做这件事,但我不知道怎么做。

我有一个工作版本,通过复制纹理到ram,然后从基本地址读取。问题是它太慢了。仅将纹理从gpu复制到ram就需要超过20ms。我希望这是最大的5ms总数,这就是为什么我只想发送整个图片的像素的坐标到ram。

这是我用来将纹理复制到ram中的代码:

代码语言:javascript
复制
gs_texture_2d *_tex = (gs_texture_2d *)updateTex;

updateTex->device->device.Get()->CreateTexture2D(&(desc), NULL,
                                 &currTexture);

updateTex->device->context.Get()->CopyResource(currTexture,
                                   _tex->texture);

UINT subresource = D3D11CalcSubresource(0, 0, 0);
D3D11_MAPPED_SUBRESOURCE *pRes = new D3D11_MAPPED_SUBRESOURCE;

updateTex->device->context->Map(currTexture, subresource,
                        D3D11_MAP_READ_WRITE, 0, pRes);

void *baseadress = pRes->pData;

如何编写着色器来读取给定tex_handle/sharedHandle的像素,然后将该数据发送到cpu?

我对c++和directX都是新手,所以如果有任何帮助,我将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-03 22:38:30

通过首先调用OpenSharedResource、CreateShaderResourceView、CopyResource、Map,然后使用D3D11_MAPPED_SUBRESOURCE.pData作为起始指针,解决了这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62237854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档