我是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字节的倍数偏移。
我的方法可行吗?