【发布时间】:2019-07-09 19:30:42
【问题描述】:
编辑:删除了很多混乱并重新表述了问题。
我已使用以下方法将一组浮点数存储到我的着色器中:
float simpleArray2D[4] = { 10.0f, 20.0f, 30.0f, 400.0f };
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, 2, 2, 0, GL_RGB, GL_FLOAT, &simpleArray2D);
如何访问着色器中浮点数组中的特定元素?
具体的片段着色器代码显示了我到目前为止所做的测试,当值是指定的值时显示绿色(在本例中为10.0f),否则显示红色。
vec2 textureCoordinates = vec2(0.0f, 0.0f);
float testValueFloat = float(texture(floatArraySampler, textureCoordinates));
outColor = testValueFloat >= 10.0f ? vec4(0,1,0,1) : vec4(1,0,0,1); //Showed green
//outColor = testValueFloat >= 10.1f ? vec4(0,1,0,1) : vec4(1,0,0,1); //Showed red
【问题讨论】:
-
为此使用纹理的具体原因是什么?使用 UBO、TBO 或 SSBO 可能会更好。
-
它用于将大约 700 个浮点数的数组加载到 GPU 中,我正在根据镶嵌坐标访问数组的不同部分
-
在这种情况下,使用 UBO 或 SSBO 会更好。
-
我会调查的。在将 +100 个浮点数存储到着色器中时,我通常是否总是使用 UBO 或 SSBO?如果我在静态场景中测量每帧的执行时间并比较这些方法,我能注意到差异吗?
-
您将测量的内容取决于许多不同的因素,但 UBO 是向着色器获取几 kB 数据的正确位置,并且允许 GL 实现选择最佳路径在实际硬件上。