我可以有两个统一的缓冲区指向 OpenGL 中的同一个块吗?
Can I have two uniform buffer pointing to same block in OpenGL?
我是OpenGL的新手。我正在尝试更新常量块的一些变量。例如,
我有一个像这样的块(从 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 来更新其中的一些值吗?块中的某些变量在初始化后不会更改。所以我会为它创建一个不可变的缓冲区。然后我将创建一个动态缓冲区来打包所有剩余的变量(每帧都会更改变量)。
我现在面临一个问题。我正在尝试使用 glBindBufferRange 将变量绑定到不同的插槽。但是,它只支持256字节倍数的偏移。
我的方法行不通吗?
你想要的是不可能的。单个接口块只能由单个缓冲区提供服务。 glBindBufferRange
方法的偏移量是缓冲区内存中的偏移量,它描述了接口块中的第一个变量将从何处开始读取。它不是接口块中的偏移量。
您的问题的明显解决方案是将界面块拆分为多个块,一个用于不可变的内容,一个用于动态的内容。
我是OpenGL的新手。我正在尝试更新常量块的一些变量。例如, 我有一个像这样的块(从 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 来更新其中的一些值吗?块中的某些变量在初始化后不会更改。所以我会为它创建一个不可变的缓冲区。然后我将创建一个动态缓冲区来打包所有剩余的变量(每帧都会更改变量)。
我现在面临一个问题。我正在尝试使用 glBindBufferRange 将变量绑定到不同的插槽。但是,它只支持256字节倍数的偏移。
我的方法行不通吗?
你想要的是不可能的。单个接口块只能由单个缓冲区提供服务。 glBindBufferRange
方法的偏移量是缓冲区内存中的偏移量,它描述了接口块中的第一个变量将从何处开始读取。它不是接口块中的偏移量。
您的问题的明显解决方案是将界面块拆分为多个块,一个用于不可变的内容,一个用于动态的内容。