【发布时间】:2015-10-13 09:17:27
【问题描述】:
我正在开发一个计算着色器,其中输出被写入SSBO。现在,这个缓冲区的使用者是 CUDA,它希望它包含无符号字节。我目前看不到如何编写SSBO 中每个索引的字节。使用纹理或图像,标准化浮点到无符号字节的转换由 OpenGL 处理。例如,我可以附加一个内部格式为 R8 的纹理并存储每个条目的字节。但是使用 SSBO 是不可能的。意味着除了 bool 数据类型之外,SSBO 中的所有数字存储类型只能是每个条目至少 4 个字节?
实际上,我希望能够做到以下几点:
计算着色器:
#version 430 core
layout (local_size_x = 8,local_size_y = 8 ) in;
struct SSBOBlock
{
byte mydata;
};
layout(std430,binding = BUFFER_OUTPUT) writeonly buffer bBuffer
{
SSBOBlock Ouput[];
} Out;
void main()
{
//..... Compute shader stuff...
//.......
Out.Ouput[globalIndex].mydata = val;//where val is normalized float
}
【问题讨论】:
-
如果您一直认为 GLSL 中的
bool是 1 字节,您可能需要重新编写一些着色器 :) -
#version 423 core...wat -
@AndonM.Coleman 我总是很高兴揭示有关 OpenGL 的新问题 :)
标签: opengl glsl compute-shader