我正在开发一个计算着色器,其中输出被写入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
}