opengl - 我可以有两个统一的缓冲区指向 OpenGL 中的同一个 block 吗?

标签 opengl opengl-es rendering

我是 OpenGL 的新手。我正在尝试更新常量 block 的一些变量。例如, 我有一个类似的 block (从 opengl learnopengl.com 复制):

layout (std140) uniform ExampleBlock
{
                 // base alignment  // aligned offset
float value;     // 4               // 0 
vec3 vector;     // 16              // 16  (offset must be multiple of 16 so 4->16)
mat4 matrix;     // 16              // 32  (column 0)
                 // 16              // 48  (column 1)
                 // 16              // 64  (column 2)
                 // 16              // 80  (column 3)
float values[3]; // 16              // 96  (values[0])
                 // 16              // 112 (values[1])
                 // 16              // 128 (values[2])
bool boolean;    // 4               // 144
int integer;     // 4               // 148
};

我可以有两个缓冲区,并使用 glBindBufferRange 来更新其中的一些值吗? block 中的某些变量在初始化后不会更改。所以我会为它创建一个不可变的缓冲区。然后我将创建一个动态缓冲区来打包所有剩余的变量(变量每帧都改变)。

我现在面临一个问题。我正在尝试使用 glBindBufferRange 将变量绑定(bind)到不同的插槽。但是,它只支持 256 字节倍数的偏移量。

我的方法行不通吗?

最佳答案

你想要的是不可能的。单个接口(interface) block 只能由单个缓冲区提供服务。 glBindBufferRange 方法的偏移量是缓冲区内存中的偏移量,它描述了接口(interface) block 中的第一个变量将从何处开始读取。它不是接口(interface) block 中的偏移量。

您的问题的明显解决方案是将接口(interface) block 拆分为多个 block ,一个用于不可变的内容,一个用于动态的内容。

关于opengl - 我可以有两个统一的缓冲区指向 OpenGL 中的同一个 block 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69295612/

相关文章:

java - OpenGL 2D投影矩阵不绘制任何东西

c++ - OpenGL 着色器编译错误

java - Android OpenGL ES...为什么教程总是正确渲染,而我的版本却随机不正确?

android - 为什么我的 opengl 输出因各种设备而异?

html - 从 HTML/CSS 触发 Chrome 中的 GPU 光栅化以实现背景图像动画

c++ - 为什么我的圆柱模型不能在 Z 轴上旋转?

c++ - 如何在 QwtPlot3D 中显示图例?

iphone - 在 iPhone 游戏中处理图形的最佳方式

javascript - 滑动JS : Firefox issue

c++ - 实时 2D 渲染到系统内存