我正在計算着色器,其輸出寫入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 – genpfault
@AndonM。Coleman我總是很高興揭示有關OpenGL新的陷阱:) –