这里的目的不是渲染,而是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更快吗?
换句话说:是否在gpu本身上优化了mipmap创建?它总是会超越(速度方面)用户创建的glsl代码吗?或者它取决于显卡?
修改 感谢回复(Kahler,Jean-Simon Brochu)。但是,我还没有看到任何资源明确说明gpu生成的mipmaps是否比任何用户创建的mipmaps更快,因为特定的mipmap-generation-gpu-hardware ......
答案 0 :(得分:2)
OpenGL并不关心如何实现这些功能。
OpenGL是一组规范,其中包括glGenerateMipmap
。
任何人都可以编写软件渲染器或开发符合规范的视频卡。如果它通过了测试,那就是~OpenGL认证〜
这意味着没有必要在CPU或GPU上执行任何功能,或者在任何地方,他们只需要产生OpenGL预期结果。
现在是实际的一面:
如今,您可以假设mipmap生成是由视频卡完成的,因为主要供应商采用了这种方法。 如果确实想要知道,则必须专门检查您正在编程的视频卡。
至于表现,假设您无法击败视频卡。
即使您在某些高科技产品CPU中执行了一些高度优化的代码,您也必须将生成的mipmap上传到GPU,仅此操作可能需要更多时间然后让GPU在您上传完整分辨率纹理后完成工作。
并且,如果您将mipmaping编程为着色器,仍然不太可能击败硬编码(甚至是硬连线)内置函数。 (而且仅限代码,不包括可能更好地安排,分开处理等事实)