glUniformBlockBinding 的用途是什么?

2023-11-22

假设我有一个索引处带有 UniformBlock 的着色器程序0.

绑定 UniformBuffer 以下显然足以将 UniformBuffer 绑定到块:

glUseProgram(program);
glBindBuffer(GL_UNIFORM_BUFFER, buffer);
glBindBufferBase(GL_UNIFORM_BUFFER, 0, buffer);

我只需要使用glUniformBlockBinding当我将缓冲区绑定到与着色器程序中使用的索引不同的索引时。

//...
glBindBufferBase(GL_UNIFORM_BUFFER, 1, buffer)
glUniformBlockBinding(program, 0, 1); // bind uniform block 1 to index 0

我理解对了吗?我只需要使用glUniformBlockBinding如果我在不同的程序中使用缓冲区,其中适当的块具有不同的索引?


每个程序的活动统一块索引与全局绑定位置不同。

这里的总体想法是,假设您使用正确的布局,您可以将统一缓冲区绑定到 GL 中的一个位置,并在多个 GLSL 程序中使用它。但每个程序各自的缓冲块索引和GL的全局绑定点之间的映射需要通过该命令建立。

为了正确地看待这一点,请考虑采样员制服。

采样器具有与任何其他统一相同的统一位置,但该位置实际上没有说明采样器使用的纹理图像单元。您仍然将纹理绑定到GL_TEXTURE7例如代替采样器制服的位置。

在这方面,采样器和统一缓冲区之间的唯一概念区别是您不使用分配绑定位置glUniform1i (...)设置索引。有一个特殊的命令可以为统一缓冲区执行此操作。


从 GLSL 4.20 开始(并由GL_ARB_shading_language_420pack),您还可以从着色器内显式建立统一块的绑定位置。

GLSL 4.20(或适当的扩展名)允许您编写以下内容:

layout (std140, binding = 0) uniform MyUniformBlock
{
  vec4 foo;
  vec4 bar;
};

通过这种方式,您永远不必确定统一的块索引MyUniformBlock;该块将绑定到0在链接时。

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

glUniformBlockBinding 的用途是什么? 的相关文章

  • 帧缓冲区和在 opengl 中使用着色器

    我对帧缓冲区有点困惑 我想要做的是使用附加了多个纹理的帧缓冲区 填充每个纹理 然后使用着色器组合 混合 所有纹理以创建新的输出 听起来很容易 是的 我也是这么想的 但我不明白 如何将当前绑定的纹理传递给着色器 您需要的是将纹理放入特定的槽中
  • 为什么 OpenGL 有远裁剪平面,以及使用什么惯用法来处理这个问题?

    我一直在学习 OpenGL 持续困扰我的一个话题是远裁剪平面 虽然我可以理解近剪裁平面和侧剪裁平面 它们永远不会产生任何实际效果 因为它们之外的对象无论如何都不会被渲染 背后的推理 但远剪裁平面似乎只是一个烦恼 由于 OpenGL 背后的人
  • Opengl 视频纹理

    我正在使用 Visual Studio 10 在 Windows 上用 C 开发 opengl 应用程序 目前我在立方体上使用静态纹理 但我想集成视频纹理 你知道我可以使用哪个库来打开和解密视频吗 查看 ffmpeg libavformat
  • 延迟阴影映射 GLSL

    我目前正在实施延迟渲染管道 但我仍坚持使用阴影贴图 我已经成功地将其实施到前向管道中 我所做的步骤是 获取灯光视图中的位置 转换为光视图剪辑空间 使用 0 5 0 5 获取阴影纹理坐标 检查深度 编辑 使用新结果图像更新代码 float c
  • 如何在opengl中使用四元数绕屏幕中心旋转?

    我正在尝试实现轨迹球 轨迹球旋转 但我的中心有问题 回转 无论如何 我希望中心成为屏幕的中心 让我解释一下到目前为止我所做的事情 我创建了一个四元数 旋转轴 向量起点x向量结束 角度 向量起点 向量结束 从该四元数中 我创建了一个旋转矩阵
  • 在 OpenGL 中实例化数百万个对象:提高每秒帧数

    我的最终目标是以 60 fps 渲染 100 万个不同尺寸和颜色的球体 我也希望能够在屏幕上移动相机 我已经修改了代码我正在学习的教程的这一页 http learnopengl com Advanced OpenGL Instancing尝
  • 创建并使用我自己的纹理图集的 mipmap

    我目前正在使用自动 mipmap 生成 C OpenTK GL GenerateMipmap GenerateMipmapTarget Texture2D 我使用的纹理平铺为 16px 的块 所以我的问题是 是否可以使用不会缩小至 1x1
  • matplotlib:渲染到缓冲区/访问像素数据

    我想使用 matplotlib 生成的图作为 OpenGL 中的纹理 到目前为止 我遇到的 matplotlib 的 OpenGL 后端要么不成熟 要么已经停止使用 所以我想避免使用它们 我当前的方法是将图形保存到临时 png 文件中 并从
  • 使用 gl_FragColor 与 vec4 颜色?

    似乎有很多不明确的地方gl FragColor被弃用 例如 它缺失在GLSL 4 40 规范 https www khronos org registry OpenGL specs gl GLSLangSpec 4 40 pdf 但它包含在
  • Windows 上的 OpenGL SDK

    我正在尝试编写一个 OpenGL 应用程序 因此我安装了 Windows 7 SDK 然而 它似乎是OpenGL 1 1 define GL VERSION 1 1 1 如何找到我安装的 OpenGL 版本 dll 以及在哪里可以找到较新的
  • 仅在发布模式下使用 glGenBuffer 时出现未处理的异常 - QT

    我在 Windows 7 上使用 Qt 4 8 发布模式编译项目时遇到了一些问题 调试时一切正常 但在发布时我收到未处理的异常 0xC0000005 访问冲突 我将范围缩小到发生这种情况的行 即生成像素缓冲区的时间 我的第一个猜测是 DLL
  • OpenGL 与 OpenCL,选择哪个以及为什么?

    哪些功能使 OpenCL 能够独特地选择 OpenGL 和 GLSL 进行计算 尽管有与图形相关的术语和不实用的数据类型 OpenGL 是否有任何真正的警告 例如 可以通过使用其他纹理将 a 渲染到纹理来完成并行函数评估 减少操作可以通过迭
  • 之前对 GL.Color3 的调用使我的纹理使用了错误的颜色

    制作 2D OpenGL 游戏 渲染帧时 我需要首先绘制一些计算的四边形几何体 然后绘制一些纹理精灵 当我的渲染方法主体仅绘制精灵时 一切正常 但是 当我尝试在精灵之前绘制几何四边形时 精灵的纹理会更改为之前使用的最后一个 GL Color
  • OpenGL 缓冲区、glFlush 和 glutSwapBuffers()

    使用之间有什么区别吗 glutInitDisplayMode GLUT SINGLE GLUT RGB with glFlush and glutInitDisplayMode GLUT DOUBLE GLUT RGB with glutS
  • nVidia 和 ATI 之间的 OpenGL 渲染差异

    最近 我将 ATI 驱动程序 我使用的是 HD7970 更新为最新版本 但我的 OpenGL 项目的一些对象停止工作 更重要的是 他们适用于 nVidia 最新驱动程序 在 960m 上测试 ATI 和 nVidia 渲染管道之间有什么我应
  • 开启TK onRenderFrame和onUpdateFrame的区别?

    我目前正在使用 OpenTK 框架和 OpenGL 用 C 编写 Jump n Run 游戏 Open TK 提供预设功能 例如GameWindow Run or GameWindow onUpdateFrame onRenderFrame
  • 如何使用OpenGL数组纹理?

    我正在尝试在OpenGL中使用精灵表 通过数组纹理实现它这就是我加载纹理的方式 QImage image image load C QtProjects project images spritesheet png png const un
  • 新显卡上的 nvoglv32.dll 中的绘制调用崩溃

    几天前 由于一些硬件更改 我设置了计算机并安装了新的 Windows 8 副本 其中 我将显卡从 Radeon HD 7870 更改为 Nvidia GTX 660 再次设置 Visual Studio 11 后 我从 Github 下载了
  • Libgdx SpriteBatch.draw() 指定 4 个顶点

    我正在使用 libGdx 创建一个 2d 游戏 并尝试使用这个特殊的方法来绘制一个简单的 2d 纹理 分别指定 4 个顶点 draw Texture texture float spriteVertices int offset int l
  • 并排显示图像的一半 - OpenGL

    我为两个图像创建了两个纹理 现在我想在opengl中按图像2的左侧部分 完整的图像1 图像2的右侧部分的顺序显示该纹理 我已经做了如下 Image1 显示在 opengl 屏幕的中央 但屏幕的左右部分不正确 应分别显示 image2 的左侧

随机推荐

  • Javafx:使用按钮激活工具提示

    我正在将 JavaFx 用于一个小应用程序 并且希望当用户单击 帮助 按钮时在文本区域上显示工具提示 将工具提示链接到我的文本没有问题 但当用户单击按钮时无法激活它 有没有办法做到这一点 这就是您正在寻找的 final Button hel
  • 在“by”参数中使用字符向量

    内data tableR 中的包 有没有一种方法可以使用在 R 中分配的字符向量by计算的论证 以下是使用 mtcars 所需输出的示例 mtcars lt data table mtcars ColSelect lt cyl One Co
  • 在 java 中读取我的文件时,BufferedReader 会跳过每隔一行

    因此 我正在读取一个包含我之前在代码中写入的约会的文件 我想筛选文本文件并找到某个日期的约会并将它们添加到 ArrayList 中 但是当 BufferedReader 遍历它时 它会跳过其他行 这是我的代码 public ArrayLis
  • Laravel:如何根据路由响应自定义 404 错误

    我在用着Laravel4框架 我遇到了这个问题 我想根据请求的 url 显示自定义 404 错误 例如 Route get site something function something return View make site er
  • 新表达式的模板参数推导失败

    我正在开发一个可变参数类模板 但如果不指定模板参数 我就无法将它与新表达式一起使用 我不想 我将问题简化为以下代码示例 template
  • dp是基于屏幕的物理尺寸吗? (dp = 1/160 英寸)

    这个定义正确吗 dp 与密度无关的像素 1 160 英寸 基于屏幕的物理尺寸 我发现了相互矛盾的信息 官方文档假设按比例缩放在等式 px dp dpi 160 中 还here 3 02 罗曼 努里克说 按比例缩放 但在官方文档中 px 像素
  • 在 Perl 中遍历多维哈希

    如果 Perl 中有一个具有多个维度的散列 或对散列的引用 并且您想要迭代所有值 那么最好的方法是什么 换句话说 如果我们有 f gt x y 我想要类似的东西 foreach x y deep keys f 代替 foreach x ke
  • 连接到多个 mongo db 主机并在 Spring Boot 中使用不同的数据库进行身份验证

    我有一个与 mongo db 集成的 java 应用程序 我碰巧有 3 个 mongo 数据库主机 均具有相同的端口 并且必须使用除我的应用程序使用的数据库之外的单独数据库对它们进行身份验证 例如 admin 是身份验证数据库名称 cont
  • Visual Studio 2010 Professional 中的 C# 模式

    在配置刚刚安装的 Visual Studio 2010 Professional 时 我错误地选择了 Visual Basic 模式 我想更正我的选择并将其更改为 C 我怎样才能做到这一点 工具 gt 导入和导出设置 gt 重置所有设置 g
  • 词典内部是如何维护的?

    当我说 Dictionary
  • 如何将数据标签添加到seaborn countplot / Factorplot [重复]

    这个问题在这里已经有答案了 我使用 python3 seaborn countplot 我的问题 如何为每个柱添加计数值 显示顶部的标签 每个酒吧 如何让这些条按降序排列 我写了这个 fig plt figure figsize 10 6
  • 在 Perl 中迭代哈希中的哈希数组

    我的哈希中有一个哈希数组 如下所示 VAR1 file gt pathname gt out log size gt 51 name gt out log time gt 1345799296 pathname gt test pl
  • Sublime text3 和 virtualenvs

    我有不同的virtualenv的 用virtualenwrapper 并且我希望能够指定哪个virtualenv与每个项目一起使用 由于我正在使用SublimeREPL用于自定义构建的插件 如何指定使用哪个 python 安装来构建我的项目
  • WebView - 如果不请求两次就无法下载文件?

    如果我听DownloadListener 我得到了我需要请求的URL在浏览器已经请求之后 浏览器已经打开了到该 URL 的连接 这就是它知道这是下载的原因 为什么它不能向我传递该连接 我也尝试分配一个自定义WebViewClient to
  • 在字符串中的特定位置插入字符

    我想在字符串中的特定位置插入额外的字符 或新字符串 例如我想插入d在第四个位置abcefg to get abcdefg 现在我正在使用 old lt abcefg n lt 4 paste substr old 1 n 1 d subst
  • 如何使用 XML 通过 Spring Security Oauth2 启用 /oauth/check_token

    我已经使用 spring security 3 2 和 javaconfig 成功启用了 oauth check token 端点 但目前我仅限于 spring security 3 1 4 然后我坚持使用 XML 配置 oauth tok
  • 如何选取质数来计算哈希码?

    这个问题是根据乔恩 斯基特 Jon Skeet 对这个问题给出的答案而来的 重写 System Object GetHashCode 的最佳算法是什么 为了计算哈希码 使用以下算法 public override int GetHashCo
  • Python 同步 stdout 和 stderr 输出

    使用以下代码 import sys print INFO flush True file sys stdout print ERROR flush True file sys stderr 有时输出是 ERROR INFO 有时 INFO
  • 访问 Roslyn REPL 中的 .config 文件

    使用罗斯林 2012 年 6 月 CTP 有没有办法为 Roslyn C Interactive REPL 提供正在探索的代码的 config 文件 一个简单的示例场景是依赖于通常从 app config web config 获取的连接字
  • glUniformBlockBinding 的用途是什么?

    假设我有一个索引处带有 UniformBlock 的着色器程序0 绑定 UniformBuffer 以下显然足以将 UniformBuffer 绑定到块 glUseProgram program glBindBuffer GL UNIFOR