线性过滤能否用于 MSAA 纹理到非 MSAA 纹理的 FBO blit?

2024-03-19

我有两个 2D 纹理。第一个是 MSAA 纹理,使用的目标为GL_TEXTURE_2D_MULTISAMPLE。第二个非 MSAA 纹理使用的目标为GL_TEXTURE_2D.

根据 OpenGL 的ARB_texture_multisample 规范 https://www.opengl.org/registry/specs/ARB/texture_multisample.txt, only GL_NEAREST当绘制 MSAA 纹理时,这是一个有效的过滤选项。

在这种情况下,这两个纹理都附加到GL_COLOR_ATTACHMENT0通过它们各自的 Framebuffer 对象。它们的分辨率也相同(据我所知,当将 MSAA 传输到非 MSAA 时,这是必要的)。

因此,考虑到当前的限制,如果我将持有 FBO 的 MSAA blit 到持有 FBO 的非 MSAA,我是否还需要使用GL_NEAREST作为过滤选项,或者是GL_LINEAR有效,因为两个纹理都已渲染到?


过滤选项仅在您样本来自纹理。当你的时候他们不扮演任何角色渲染到纹理。

当从多样本纹理中采样时,GL_NEAREST确实是唯一受支持的过滤器选项。您还需要使用特殊的采样器类型(sampler2DMS)在GLSL代码中,带有相应的采样指令。

实际上我在规范中找不到任何内容说明将过滤器设置为GL_LINEAR对于多重采样纹理是一个错误。但根本没有使用过滤器。来自 OpenGL 4.5 规范(添加了重点):

当在着色器中访问多样本纹理时,访问采用一个整数向量来描述要获取的纹理元素,以及与第 14.3.1 节中描述的样本编号相对应的整数,以确定要获取纹理元素内的哪个样本。多重采样纹理目标不允许使用标准采样指令,并且不执行过滤通过获取。

用于在多重采样和非多重采样纹理之间进行位块传送glBlitFramebuffer(), the filter参数可以是GL_LINEAR or GL_NEAREST,但在本例中它被忽略。从 4.5 规范开始:

如果读取帧缓冲区是多重采样的(其 SAMPLE_BUFFERS 的有效值为 1),而绘制帧缓冲区不是(其 SAMPLE_BUFFERS 的值为零),则与源中每个像素位置对应的样本在写入之前将转换为单个样本目的地。过滤器被忽略.

这是有道理的,因为在这种情况下有一个限制,即源矩形和目标矩形需要具有相同的大小:

如果读取或绘制帧缓冲区是多重采样的,并且提供给 BlitFramebuffer 的源矩形和目标矩形的尺寸不相同,则会生成 INVALID_OPERATION 错误。

由于滤镜仅在图像拉伸时应用,因此在这种情况下并不重要。

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

线性过滤能否用于 MSAA 纹理到非 MSAA 纹理的 FBO blit? 的相关文章

  • 将 3D 模型转换为 SceneJS JSON,包括纹理

    Motive我正在尝试使用 WebGL 创建一个小型演示应用程序 我选择使用 SceneJS 因为它看起来是一个简单的框架 并且足以满足此目的 我已经下载了几个 blend 模型 等 并使用 Blender 将它们导出为 Collada d
  • 在没有窗口的windows桌面上绘制OpenGL

    我见过这样的事情 我想知道这是否可能 假设我运行我的应用程序 它会显示其下方的渲染结果 所以基本上 在没有窗口的情况下在屏幕上渲染 可能还是谎言 注意 想要在 Windows 和 C 中执行此操作 可以使用您的应用程序在其他应用程序的窗口上
  • 如何在 OpenGL ES 1.1 上用不同的纹理填充立方体的每一面?

    请 我需要教程 代码示例 了解如何在 OpenGL ES 1 1 上用不同的纹理填充立方体的每一面 我找到了很多教程 但没有一个教程清楚地解释了如何在每个面上放置不同的纹理 也没有一个提供简单的代码示例来说明如何做到这一点 我的实际代码 来
  • 什么时候应该调用 glGetError?

    glLoadIdentity http www opengl org sdk docs man xhtml glLoadIdentity xml says GL INVALID OPERATION如果生成glLoadIdentity之间执行
  • 全屏背景纹理与 OpenGL 性能问题 (iPad)

    我对在 OpenGL 中使用带纹理的三角形网格绘制全屏背景时所看到的糟糕性能感到非常困惑 仅绘制背景而没有其他内容 使用最基本的着色器时最高可达 40 fps 使用默认值时最高可达 50 fps管道 虽然 40 fps 看起来并不算太糟糕
  • 无法将简单的无符号字节 RGB 纹理映射到四边形:

    我有一个非常简单的程序 将虚拟红色纹理映射到四边形 下面是 C 中的纹理定义 struct DummyRGB8Texture2d uint8 t data 3 4 int width int height DummyRGB8Texture2
  • LWJGL 窗口具有透明背景?

    我想创建一个没有 黑色背景 区域的窗口 但您可以看到任何其他打开的窗口等 也就是说 渲染场景并且仅渲染场景 不留框架 不留背景区域 我读过一种方法 该方法涉及渲染到隐藏的 OpenGL 窗口并将其缓冲在内存中 创建透明分层窗口以及从内存复制
  • glDrawElements 在 PyOpenGL 中绘制立方体

    我最近开始通过 Python 学习 OpenGL 这要归功于几个教程 尤其是 Nicolas P Rougier 的教程 http www labri fr perso nrougier teaching opengl http www l
  • 计算边界球体半径时遇到一些问题

    我已经设法用两种方法计算边界球体半径 但没有一种方法能够准确地满足我的要求 我不需要 像素 完美边界球 但我想要比我目前拥有的更好的东西 我正在使用 Wavefront obj 模型并计算这些模型的边界球半径 我提取当前模型尺寸 我使用 N
  • libgdx 中帧缓冲区的结果不明确

    我得到以下奇怪的结果帧缓冲区 http libgdx badlogicgames com nightlies docs api com badlogic gdx graphics glutils FrameBuffer htmllibgdx
  • 如何以编程方式在 qml 中渲染 vtk 项目?

    到目前为止 我了解到我们在 QML 中有两个线程 我们的主应用程序线程和我们的 场景图 线程 http doc qt io qt 5 qtquick visualcanvas scenegraph html http doc qt io q
  • 静态链接库时出现 glew 链接器错误

    我正在尝试在 Visual Studio 2012 中构建一个 opengl 项目 我想静态包含 glew 库 因此我从源代码构建它并将生成的 glew32sd lib 复制到我的 lib 目录 我将此 lib 路径提供给 Visual S
  • 从文件中读取 GLSL 着色器

    我正在尝试从如下所示的文件中读取顶点和片段着色器 version 330 core in vec3 ourColor out vec4 color void main color vec4 ourColor 1 0f but when i
  • 没有着色器的 OpenGL

    我已经阅读了一些教程来编写以下代码 唯一的区别是原始教程使用 SDL 而不是 GLEW 我不明白这段代码有什么问题 它可以编译 但我没有看到三角形 教程也没有使用着色器 include
  • 使用 Opengl 绘制立方体 3D

    我想使用 OpenGL 绘制 3D 立方体这是我的代码如何纠正错误 float ver 8 3 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
  • 三角形未在 OSX 上的 OpenGL 2.1 中绘制

    我正在学习有关使用 OpenGL 在 Java 中创建游戏引擎的教程 我正在尝试在屏幕上渲染一个三角形 一切运行良好 我可以更改背景颜色 但三角形不会显示 我还尝试运行作为教程系列的一部分提供的代码 但它仍然不起作用 教程链接 http b
  • OpenGL:调试“单通道线框渲染”

    我正在尝试实现论文 单通道线框渲染 它看起来很简单 但它给了我所期望的厚暗值 论文没有给出计算海拔高度的确切代码 所以我按照自己认为合适的方式进行了操作 代码应该将三个顶点投影到视口空间中 获取它们的 高度 并将它们发送到片段着色器 片段着
  • OpenGL z轴指向哪里?

    我正在尝试了解 OpenGL 坐标系 我到处都看到它被描述为右撇子 但这与我的经验不符 我尝试绘制一些形状和 3 d 对象 我发现 z 轴显然指向 屏幕 而 x 指向右侧 y 指向上方 这是左手坐标系的描述 我缺少什么 编辑 例如 http
  • 在 OpenGL ES 1.1 中将多个纹理绑定到一个网格

    如果我有一个网格 例如有 6 个面的立方体 每个面分别由 4 个顶点组成 总共 24 个顶点 并且我想对每个面应用不同的纹理 我该怎么做 目前 我使用 glDrawElements 一次绘制整个网格 立方体的所有 6 个面 将所有索引提供到
  • 我的绘图存在坐标/glortho 问题

    I have made a bit of a change to my code in the last couple of hours as everything was messy with my grid so I made it i

随机推荐