opengl - opengl 中的 mipmap 生成 - 是硬件加速吗?

标签 opengl textures gpgpu blur gpuimage

这里的目的不是渲染,而是 gpgpu;它用于图像模糊:

给定图像,我需要使用固定的给定可分离内核对其进行模糊处理(参见例如 Separable 2D Blur Kernel )。

对于 GPU 处理,一个很好的流行方法是 first filter the lines, then filter the columns; and using the vertex shader and the fragment shader to do so (*)

但是,如果我有一个固定大小的内核,我想我可以使用一个快速计算的接近我想要的级别的mipmap,然后对其进行上采样(as was suggested here) .

因此,问题是:opengl 创建的 mipmap 会比我使用 (*) 的方法创建的 mipmap 更快吗?

换句话说:mipmap 创建是在 GPU 本身上优化的吗?它会永远胜过(速度方面)用户创建的 glsl 代码吗?还是取决于显卡?

编辑:
感谢您的回复(Kahler、Jean-Simon Brochu)。但是,我仍然没有看到任何资源明确说明 gpu 生成的 mipmap 是否比任何用户创建的 mipmap 更快,因为特定的 mipmap-generation-gpu-hardware ...

最佳答案

OpenGL 并不关心函数是如何实现的。

OpenGL是一套规范,其中有glGenerateMipmap .

任何人都可以编写软件渲染器或开发符合规范的视频卡。如果它通过测试,它就是~OpenGL认证~

这意味着没有强制要求在 CPU 或 GPU 或任何地方执行任何功能,它们只需要产生 OpenGL 预期的结果。

现在是实际方面:

现在,您可以假设 mipmap 生成是由视频卡完成的,因为主要供应商采用了这种方法。
如果您真的想知道,则必须专门检查您正在编程的视频卡。

至于性能,假设您无法击败视频卡。

即使你想出一些在一些高科技 CPU 中执行的高度优化的代码,你也必须将你生成的 mipmap 上传到 GPU,并且单独的这个操作可能需要更多的时间,然后让在您上传全分辨率纹理后,GPU 会完成这项工作。

而且,如果您将 mipmaping 编程为着色器,仍然不太可能击败硬编码(甚至可能是硬连线)内置函数。 (以及单独的代码,不包括它可以更好地安排、分开处理等​​的事实)

This site explains the glGenerateMipmap history better =))

关于opengl - opengl 中的 mipmap 生成 - 是硬件加速吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23017317/

相关文章:

cuda - 是否可以同时运行属于不同应用程序的两个内核?

c++ - VS2012 寻找 64 位 dll 而不是 32 位

opengl - 哪个版本的 OpenGL 着色语言相当于 OpenGL ES 3.2 SL?

c++ - CUDA 设备代码支持哪些真正的 C++ 语言结构?

textures - HLSL tex2D() - 梯度从何而来?

c# - 在Unity中,如何在场景卸载时从内存中删除RenderTexture

machine-learning - 选择 GeForce 或 Quadro GPU 通过 TensorFlow 进行机器学习

c++ - 使用 OpenGL 渲染位数组

c++ - 具有 alpha 和 glColor4f 的 OpenGL 纹理,glColor4f 影响纹理

c++ - 在 opengl c++ 中加载 32 位 .bmp 纹理时出现问题