如何提高 Direct3D 流纹理性能?

2023-12-22

我正在尝试加速全屏纹理的绘制,该纹理会改变每一帧。在我的系统上,使用 GDI 和 BitBlt() 可以获得大约 1000 FPS,但我认为可以通过使用 Direct3D 和动态纹理来提高性能。相反,我只能获得 250 FPS 左右。

我在配备 ATI HD 4870 和最新驱动程序的 Mac Pro 上运行。

我尝试过使用动态纹理,这给了我一个小的增益(~15FPS),我尝试过使用纹理链来避免管道停顿,但这没有效果。

我环顾四周,关于以这种方式使用动态纹理的信息很少。

我错过了一些基本的东西吗?

设备设置:



pparams.BackBufferCount = 1;
pparams.SwapEffect = D3DSWAPEFFECT_DISCARD;
pparams.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
  

纹理创建:



device->CreateTexture(width, height, 1, D3DUSAGE_DYNAMIC,
                      D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &texture;, NULL);
  

纹理更新:



texture->LockRect(0, &locked;, NULL, D3DLOCK_DISCARD);
... write texture data
texture->UnlockRect(0);
device->DrawPrimitiveUP(D3DPT_TRIANGLEFAN, 2, vertices, sizeof(*vertices));
...
  

您可以从以下位置获取正在进行的代码http://www.libsdl.org/tmp/SDL-1.3.zip http://www.libsdl.org/tmp/SDL-1.3.zip

Thanks!


如果不需要读回纹理,则可以使用 (D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY) 标志创建纹理。

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

如何提高 Direct3D 流纹理性能? 的相关文章

  • 寻找比 GDI 更快的解决方案来渲染动态数据图

    我使用 C CLI 编写了一个简单的基于 GDI 的数据绘图仪 但它不是特别快 一些基本分析表明问题在于屏幕渲染 有没有办法为 UserControl 启用硬件加速 或者是否有用于 direct3D 的 net 接口 或者我可以考虑其他一些
  • 如何找出真实屏幕刷新率(不是四舍五入的数字)

    根据微软的这篇文章 http support microsoft com kb 2006076 en us用户设置的屏幕刷新率可以 并且大部分是 小数 用户设置为 59Hz 但屏幕按照屏幕显示 60Hz 运行 但实际上是 59 94Hz 我
  • CUDA Direct3D 互操作性已弃用?

    我一直在查看 CUDA 文档 并且直接 3D 11 互操作性 http docs nvidia com cuda cuda driver api group CUDA D3D11 DEPRECATED html group CUDA D3D
  • imageStore() 的问题 (OpenGL 4.3)

    我试图将一些数据从计算着色器输出到纹理 但 imageStore 似乎什么也没做 这是着色器 version 430 layout RGBA32F uniform image2D image layout local size x 1 lo
  • 如何使用ggplot2创建黑白透明重叠直方图?

    我使用 ggplot2 创建两个透明重叠直方图 test data frame condition rep c a b each 500 value rep 1 1000 test 1 500 value rnorm 500 test 50
  • 有没有一种方法可以在不使用暂存缓冲区的情况下更新纹理?

    我正在与https vulkan tutorial com https vulkan tutorial com 深度缓冲代码作为基础 进行了一些更改以每帧更新命令缓冲区 我正在使用一种粗略的方法来检查 fps 不确定它到底有多准确 但我正在
  • QML 将纹理应用于网格

    我正在尝试将图像纹理应用到 QML Qt 5 6 2 中的网格 我从示例 Shadow Map QML 开始 我想对 GroundPlane 进行纹理处理 材质和效果 qml 类应用于该 GroundPlane 网格 但我看不到如何应用图像
  • 在 iOS 中创建 RGB CVOpenGLESTexture

    我正在尝试创建一个3通道 CVOpenGLESTexture in iOS 我可以成功创建一个单通道通过指定纹理kCVPixelFormatType OneComponent8 in CVPixelBufferCreate and GL L
  • 当我每帧向单个顶点缓冲区写入数千次时,如何提高 Direct3D 的性能?

    我正在尝试编写一个 OpenGL 包装器 它允许我使用所有现有的图形代码 为 OpenGL 编写 并将 OpenGL 调用路由到 Direct3D 等效项 到目前为止 这种方法的效果出人意料地好 只是性能被证明是一个很大的问题 现在 我承认
  • 如何在 OpenGL 中对 glutSolidTorus 进行纹理处理? [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我正在尝试纹理glutSolidTorus 这是我的代码 glColor3f 1 0f 1 0f 1 0f glEnab
  • DirectX/OpenGL 中的三角形绘制顺序

    3D API 中绘制三角形的顺序是否保证与其在索引缓冲区中的顺序相同 例如 如果我在一次绘制调用中有两个重叠的三角形 并且禁用深度测试 那么第一个或第二个三角形最终是否可见 或者我是否需要发出单独的绘制调用以确保第二个三角形出现在第一个三角
  • 我是否应该垂直翻转使用 stb_image 加载的图像的线条以在 OpenGL 中使用?

    我正在开发一个基于 OpenGL 的 2d 引擎 我使用 stb image 加载图像数据 以便创建 OpenGL 纹理 我知道 OpenGL 的 UV 原点是左下角 我也打算在该空间中处理我的屏幕空间 2d 顶点 即我正在使用 glm o
  • 如何写入 OpenGL 深度缓冲区

    我正在尝试实现一种老式技术 其中使用渲染的背景图像和预设深度信息来遮挡场景中的其他对象 因此 例如 如果您有一张房间的图片 前景中的天花板上悬挂着一些电线 则这些电线会在深度图中给出浅深度值 并且在正确渲染时 允许角色在电线 后面 行走 但
  • 来自 Drawable 的 AndEngine 纹理

    我是 AndEngine 的新手 由于某种原因 我必须从 Drawable 变量创建一个 TextureRegion 不知道可不可以 但我的代码不起作用 public class DrawableTextureSource implemen
  • OpenGL 2 纹理内部格式 GL_RGB8I、GL_RGB32UI 等

    我正在重写大部分纹理代码 我希望能够指定某些内部格式 GL RGB8I GL RGB8UI GL RGB16I GL RGB16UI GL RGB32I 和 GL RGB32UI 这些标记在 OpenGL 2 中不存在 当将这些内部格式指定
  • 在 DirectX 中创建和使用纹理

    我正在尝试使用代码创建纹理 将其转换为着色器资源视图 然后将其应用到平面 但是我得到的只是一个黑色方块 我尝试使用 msdn 上的示例代码无济于事 还尝试使用 unsigned char 和 float float 如下所示 因为这就是我需
  • 全屏背景纹理与 OpenGL 性能问题 (iPad)

    我对在 OpenGL 中使用带纹理的三角形网格绘制全屏背景时所看到的糟糕性能感到非常困惑 仅绘制背景而没有其他内容 使用最基本的着色器时最高可达 40 fps 使用默认值时最高可达 50 fps管道 虽然 40 fps 看起来并不算太糟糕
  • 对 VBO 中的特定三角形使用不同的纹理

    我有 9 个由三角形组成的四边形 如下所示 我在用着VBO存储有关它们的数据 它们的位置和纹理坐标 我的问题是 是否可以仅使用一个来使四边形 5 具有与其余四边形不同的纹理VBO and shader 绿色代表纹理 1 黄色代表纹理 2 到
  • 使用图像而不是平铺填充纹理画笔

    我有一个纹理画笔 它使用特定的图像来使纹理显示如下 Image image new Bitmap Untitled png for int i 0 i lt points Count i using TextureBrush tbr new
  • 在 Three.js 中从 Web Worker 加载纹理

    当将大纹理图像应用到网格上一段明显的时间时 Three js 会锁定浏览器的主线程 让我们考虑以下示例 var texLoader new THREE TextureLoader texLoader load someLargeTextur

随机推荐