在我的程序中,我要渲染一个模型。我有一个生成的无符号字符数组,其中每个字节中的所有位都可以使用。数组中有一个元素对应于模型中的每个三角形。为了获取三角形的颜色,我使用
我的问题是我的GPU版本是4.2,这意味着我只能使用UBO而不能使用SSBO。最大数组大小(字节数组)略大于16,000,而我需要100,000个,所需的最小UBO大小为16KB。在我的情况下,使用标准的uniform float[N]具有与UBO相同的限制。
我一直在研究这个: https://www.opengl.org/registry/specs/NV/shader_buffer_load.txt 但在我使用设备特定的东西之前,我想知道是否还有其他选择。
如果您想查看,这是我的当前Frag-Shader:
gl_PrimitiveID
,它可以给出正在渲染的缓冲区中三角形的位置。我的问题是我的GPU版本是4.2,这意味着我只能使用UBO而不能使用SSBO。最大数组大小(字节数组)略大于16,000,而我需要100,000个,所需的最小UBO大小为16KB。在我的情况下,使用标准的uniform float[N]具有与UBO相同的限制。
我一直在研究这个: https://www.opengl.org/registry/specs/NV/shader_buffer_load.txt 但在我使用设备特定的东西之前,我想知道是否还有其他选择。
如果您想查看,这是我的当前Frag-Shader:
#version 420 core
out vec3 color;
layout (std140) uniform ColorBlock{
unsigned char colors[16000]; // this need to be 100,000
};
void main(){
float r, g, b;
r = colors[1.0f / gl_PrimitiveID];
g = colors[1.0f / gl_PrimitiveID];
b = colors[1.0f / gl_PrimitiveID];
color = vec3(r, g, b);
}
unsigned char
?GLSL支持的最小数据类型是32位。如果你在C中有一个字节数组,你需要在GLSL中解包它。 - undefined