Direct3D11:翻转 ID3D11Texture2D

2023-12-01

我执行 Direct3D 后台缓冲区的捕获。当我下载像素时,图像帧沿其垂直轴翻转。复制资源或创建目标时是否可以“告诉”D3D 翻转帧ID3D11Texture2D ?

我是这样做的:

我将帧缓冲区复制到其中的纹理是这样创建的:

    D3D11_TEXTURE2D_DESC description =
    {
        desc.BufferDesc.Width, desc.BufferDesc.Height, 1, 1,
        DXGI_FORMAT_R8G8B8A8_UNORM,
        { 1, 0 }, // DXGI_SAMPLE_DESC
        D3D11_USAGE_STAGING,//transder from GPU to CPU
        0, D3D11_CPU_ACCESS_READ, 0
    };
    D3D11_SUBRESOURCE_DATA data = { buffer, desc.BufferDesc.Width * PIXEL_SIZE, 0 };
     device->CreateTexture2D(&description, &data, &pNewTexture);

然后在每一帧上我做:

     pSwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), reinterpret_cast< void** >(&pSurface));
     pContext->CopyResource(pNewTexture, pSurface);
     D3D11_MAPPED_SUBRESOURCE resource; 
     pContext->Map(pNewTexture, 0, D3D11_MAP_READ , 0, &resource);
     //reading from resource.pData
     //...

PS:我无法控制渲染管道。我用这段代码挂接一个外部应用程序。 另外,我不想弄乱CPU上的像素缓冲区,比如循环中的反向复制等。复制的低延迟是高优先级的。

UPDATE:

我也尝试过这个:

    D3D11_BOX box;
    box.left = 0;
    box.right = desc.BufferDesc.Width;
    box.top = desc.BufferDesc.Height;
    box.bottom = 0;
    box.front = 0;
    box.back = 1;
    pContext->CopySubresourceRegion(pNewTexture, 0, 0, 0, 0, pSurface, 0, &box);

这会导致框架的内容为空。


使用 D3D11_USAGE_DEAFULT、CPUAccessFlags=0 和 BindFlags=D3D11_BIND_SHADER_RESOURCE 创建纹理。将交换链的后台缓冲区复制资源到它。使用 D3D11_BIND_RENDER_TARGET 创建另一个纹理。将其设置为渲染目标,设置像素着色器并使用第一个纹理绘制翻转的四边形。现在您应该能够将第二个纹理复制资源到您现在使用的暂存纹理。这应该比使用 CPU 复制翻转的图像数据更快。但是,此解决方案将占用 GPU 上的更多资源,并且可能很难在挂钩中进行设置。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Direct3D11:翻转 ID3D11Texture2D 的相关文章

  • C++ Directx 11 多显卡

    我正在使用 directx 11 为我的图形编写 C 程序 我的笔记本电脑有一个轻量级英特尔显卡 用于延长电池寿命 并且应该仅用于 轻量级 显卡 我还安装了另一个更强大的显卡 我想知道如何指定在 directx 中使用哪个显卡 当我创建设备
  • D3D11坐标系

    我的一些旧代码最终出现了一堆令人讨厌的黑客行为 以使事情 正确 工作 在移动物体和相机方面 例如必须采用 std sin yaw 而不是 std sin yaw 在实现在线其他地方找到的方程时 通常会让一切变得混乱 在许多情况下都达到了追踪
  • 从也是渲染目标的纹理中采样

    我知道这在技术上不受支持 据我所知 这是未定义的行为 但是从也被写入的纹理中采样真的是一件非常可怕的事情吗 我问这个问题是因为我需要从深度纹理中读取数据 我也需要写入该深度纹理 如果我不能这样做 这意味着我将不得不复制深度纹理 如果这没什么
  • 在 Optimus 笔记本电脑中以编程方式强制使用 NVIDIA GPU

    我正在编写 DirectX 游戏 当我在 Optimus 笔记本电脑上运行它时 会使用 Intel GPU 导致性能非常糟糕 如果我使用上下文菜单或将可执行文件重命名为 bf3 exe 或其他一些著名的游戏可执行文件名称来强制使用 NVID
  • DirectX 11 叠加

    我正在为游戏编写 DirectX 11 覆盖 创建纹理非常简单 而且我对 C C 有很好的了解 我遇到的问题是在我的测试窗口中我可以打印纹理 但是一旦我改变相机角度 纹理就会随之移动 这就是大多数人想要的 我想知道的是如何以 2D 打印某些
  • Java 中 DirectX 程序的全屏捕获(Javacv?)

    对于Windows 我知道可以捕获在 C 语言下运行的 DirectX 程序的屏幕 但是您知道 Java 的一些示例代码吗 我实际上面临着同样的问题使用java在全屏应用程序中截取屏幕截图 https stackoverflow com q
  • 使用 DirectX 或 OpenGL 显示 100 个浮动立方体

    我想使用显示 100 个浮动立方体DirectX or OpenGL 我正在寻找一些示例源代码或该技术的描述 我无法正确显示多个立方体 我在网上搜索了一系列很好的教程 尽管他们谈论了如何做3D基元 我找不到有关如何进行大量操作的信息3D原语
  • 如何使用 ComPtr 中包装的 Direct3D 11 指针来获取 11.1 接口?

    我正在遵循教程 并将通常的初始化转换为使用 ComPtrs 直到这一行 ID3D11Device g pd3dDevice nullptr ID3D11Device1 g pd3dDevice1 nullptr Obtain the Dir
  • 双倍的 Pow 实现

    我正在开发一个用于运动控制的代码 但我遇到了 pow 函数的问题 我使用VS2010作为IDE 这是我的问题 我有 double p 100 0000 double d 1000 0000 t1 pow p 8 0000 d 1 00 4
  • DirectX 11 ClearRenderTargetView 恢复透明缓冲区?

    我正在尝试创建一个使用 directx 进行绘制的窗口opaque上面的内容透明的视图 即桌面显示出来 使用 DirectX11 我尝试执行以下操作 但它并没有使背景透明 事实上 我输入的任何不透明度值都会给出完全相同的结果 我在做什么 f
  • 在 C# WPF 或 Windows 窗体应用程序中使用 DirectX c++ DLL

    我用c 编写了一个DX11渲染器 我现在正在寻找一种方法来实现它的编辑器 GUI 由于我非常习惯 Windows 窗体和 WPF C 应用程序 因此我正在考虑将渲染器放入 dll 中 从 C 应用程序加载 dll 并使用它绘制到表单的定义部
  • 将按钮控件嵌入到现有 Direct3D 应用程序中

    我想将自己的内容覆盖在 Direct3D v9 游戏 由第三方制作 之上 叠加互动按钮 具体来说 我想覆盖一个可点击的按钮控件 就像 Steam 所做的那样 尽管我正在尝试一个更简单的界面 理想情况下 我能够覆盖 WPF 按钮或 Windo
  • Windows 8 SDK 中的 DirectX

    Summary 是否应该从针对 Windows 8 的应用程序中删除 directX 包含文件 Details 我是 Windows 开发新手 我正在尝试使用 Visual Studio 2012 如果可能 在 Windows 8 上编译
  • 超出 CreateConstantBufferView 处虚拟地址的末尾

    我正在遵循 使用 DirectX12 进行游戏编程 ch 6 代码 但在 ID3DDevice CreateConstantBufferView 中 我发现 D3D12 错误 D3D12 错误 ID3D12Device CreateCons
  • Python3 在 DirectX 游戏中移动鼠标

    我正在尝试构建一个在 DirectX 游戏中执行一些操作的脚本 除了移动鼠标之外 我一切都正常 是否有任何可用的模块可以移动鼠标 适用于 Windows python 3 Thanks I used pynput https pypi or
  • 矩阵乘法 - 视图/投影、世界/投影等

    在 HLSL 中有很多矩阵乘法 虽然我了解如何以及在何处使用它们 但我不确定它们是如何导出的或它们的实际目标是什么 所以我想知道是否有在线资源可以解释这一点 我特别好奇将世界矩阵乘以视图矩阵以及世界 视图矩阵乘以投影矩阵背后的目的是什么 您
  • 在 MediaFoundation 硬件 MFT 中设置更大的 GOP 大小

    我正在尝试直播通过桌面复制 API 捕获的桌面 H264 编码工作正常 除了桌面复制 API 仅在屏幕发生变化时才传送帧 但视频编码器希望以恒定的帧速率传送帧 因此 当没有触发屏幕更改时 我被迫保存之前的样本 以恒定的速率向编码器提供数据
  • 如何将 asm 着色器编译为 fxo 文件?

    我有一个已编译的 fxo 着色器 我正在尝试对其进行稍微编辑 仅调整一些常量 使用 fxdis https code google com archive p fxdis d3d1x https code google com archiv
  • 点精灵的缩放 (Direc3D 9)

    请告诉我应该为 D3DRS POINTSCALE A D3DRS POINTSCALE B D3DRS POINTSCALE 设置什么值 以像场景中的其他对象一样缩放点精灵 参数 A 0 B 0 和 C 1 由 F D Luna 提出 不合
  • Shader的功能参数表现

    我试图了解如何在着色器语言中实现传递参数 我读过几篇文章和文档 但仍然有一些疑问 特别是我试图理解与C 函数调用 特别强调性能 之间略有差异HLSL Cg and GLSL但我猜下划线的实现非常相似 到目前为止我所理解的 除非另有说明 函数

随机推荐

  • PhantomJSDriver 适用于 HTTP,但不适用于 HTTPS

    public class FooTest WebDriver driver Before public void beforeTest DesiredCapabilities capabilities new DesiredCapabili
  • SQL Server - 数据库“数据库”不存在。确保名称输入正确

    我正在尝试从实体框架模型生成数据库表 但在执行生成查询时收到此错误 Database Database does not exist Make sure that the name is entered correctly 我能够很好地连接
  • R:从数据中获取符合条件的行?

    我有一个包含大量数据的 CSV 文件 如下所示 gt test csv lt read csv Desktop stats csv gt test csv m lvl a b c a pct b pct c pct d pct 1 5435
  • 播放内存流中的视频

    到目前为止找不到任何令人满意的答案 我正在开发一个 C WinForms NET3 5 应用程序 该应用程序需要从数据库 BLOB 加载视频文件并在应用程序窗口内播放 数据库是本地文件 不涉及服务器 我不认为将文件保存到硬盘驱动器是一个好的
  • CodeigniterWhere 子句

    不知怎的 对我来说构建这样的查询有点困难 给我所有链接名称不为空的导航条目 query this gt db gt get where navigation array linkname NULL 给我错误 where 子句 中的未知列 0
  • 在ArrayBlockingQueue中,为什么将final成员字段复制到局部final变量中?

    In ArrayBlockingQueue 所有需要锁的方法将其复制到本地final调用前的变量lock public boolean offer E e if e null throw new NullPointerException f
  • 在 shell 脚本中使用expect

    我需要传递两个参数给expect 第一个是要执行的命令 第二个是密码 这是我的期望 sh usr bin expect spawn lrange argv 0 0 expect password send lindex argv 1 int
  • OpenSSL 内存泄漏?

    我使用以下代码来检查签名 为了简单起见 公钥 消息和签名在中初始化main include
  • 在启动屏幕期间加载 MainActivity

    我目前有一个splashScreenActivity这需要用户按button去MainActivity 是否可以加载全部内容MainActivity WITHOUT MainActivity的 UI 出现在顶部splashScreenAct
  • 防止“点击”事件多次触发+淡入淡出问题

    早安各位 对我正在制作的简单 jQuery 画廊有疑问 它允许用户通过一些按钮循环浏览图像集合 同时在计时器上轮换这些图像 我的问题是 用户可以多次单击该按钮 这会将动画的淡入淡出排队并一遍又一遍地重复 例如用户点击按钮 5 次 gt 同一
  • 在 mac 上使用 gdb 在 eclipse 中调试 - 无法执行 MI 命令:-exec-run

    我有 Eclipse Kepler 和简单的 HelloWorld C 程序 我想在其中学习如何调试 C 程序 单击调试按钮时 我收到以下错误消息 最终启动顺序错误 执行MI命令失败 exec 运行 来自调试器后端的错误消息 无法找到进程
  • 需要 C# 构造函数语法解释

    有人可以向我解释以下构造函数语法吗 我以前没有遇到过它 并在同事代码中注意到它 public Service this Service DoStuff DoMoreStuff 它链接到同一个类中的另一个构造函数 基本上任何构造函数都可以ei
  • WP7 中的 HttpWebRequest 超时不适用于计时器

    由于 WP7 HttpWebRequest 不支持超时 因此我使用计时器来实现该功能 下面是一个例子 我从 UI 表单调 用 GetConnection 但在计时器时间结束之前 ReadCallback 永远不会执行 一旦计时器停止 就会触
  • PHP中的动态静态方法调用?

    请有 PHP 经验的人帮忙解决以下问题 在我的代码中的某个地方 我调用了非实例化类中的公共静态方法 result myClassName myFunctionName 但是 我希望有许多这样的类 并根据用户的语言动态确定正确的类名 换句话说
  • UISearchDisplayController 搜索多个数组

    目前 我正在使用表示名称 ID 等的多个数组的内容填充我的 tableviewcells 当我开始使用搜索显示控制器时 我的问题就出现了 我有一个数组 其中包含名称列表 ID 列表 条形码列表和别名列表 当用户在搜索栏中输入内容时 我需要能
  • Qt:像 Eclipse 一样拖放小部件以实现任意布局(拆分)

    我知道停靠小部件 拆分器等 我仍然想知道是否可以像 Eclipse 中那样创建灵活的拆分系统 当任何小部件根据拖动过程中光标的位置保持垂直或水平拆分时 例如 第一个小部件A占据了整个QMainWindow 第二个B首先在选项卡中打开 所以它
  • 这些数组有什么区别?

    var foo var bar new Array var another 另外 是否可以添加到foo像这样 foo obj new Date var foo foo是一个对象字面量 var bar new Array bar是一个通过初始
  • Yii2 中按字段排序

    我遇到了这个问题 但没有找到 yii Instrument 的任何解决方案 有人知道如何解决这个问题吗 最终 我使用了这个糟糕的代码 params foreach recipeIds as i gt recipeId params id i
  • 打印出 linq 查询的结果

    我正在使用 asp net core 实体框架 我使用 linq 组合三个表 User Products 和 User Had Products 我的查询似乎工作正常 我遇到的问题是打印出查询结果 我可以打印出整个对象 但无法使用点表示法打
  • Direct3D11:翻转 ID3D11Texture2D

    我执行 Direct3D 后台缓冲区的捕获 当我下载像素时 图像帧沿其垂直轴翻转 复制资源或创建目标时是否可以 告诉 D3D 翻转帧ID3D11Texture2D 我是这样做的 我将帧缓冲区复制到其中的纹理是这样创建的 D3D11 TEXT