[英]GLSL: Float array in uniform buffer object
我有一個這樣的統一緩沖區(GLSL / GPU):
layout(std140) uniform UConstantBufferPS1
{
float m_LuminanceHistory[8];
};
我這樣上傳數據(C ++ / CPU):
SHistoryBuffer* pHistogramHistory = static_cast<SHistoryBuffer*>(Gfx::BufferManager::MapConstantBuffer(m_BufferSetPtr->GetBuffer(1)));
pHistogramHistory->m_LuminanceHistory[0] = 1.0f;
pHistogramHistory->m_LuminanceHistory[1] = 1.0f;
pHistogramHistory->m_LuminanceHistory[2] = 1.0f;
pHistogramHistory->m_LuminanceHistory[3] = 1.0f;
pHistogramHistory->m_LuminanceHistory[4] = 1.0f;
// ...
Gfx::BufferManager::UnmapConstantBuffer(m_BufferSetPtr->GetBuffer(1));
在GLSL端,除了第一個和第二個浮點值(m_LuminanceHistory [0])之外,其他所有內容均為0。 它似乎以某種方式包裝!
一個不好的解決方案是在CPU和GPU上定義一個浮點向量(vec4)數組。 然后,我可以在此數組內進行迭代並讀取數組的每個x值。 但是那時我的開銷很大。
有什么好的解決辦法嗎? THX 4我們的幫助!
編輯:
我使用以下解決方案:
layout(std140) uniform UConstantBufferPS1
{
vec4 m_LuminanceHistory[2];
};
float History[8];
History[0] = m_LuminanceHistory[0].x;
History[1] = m_LuminanceHistory[0].y;
History[2] = m_LuminanceHistory[0].z;
History[3] = m_LuminanceHistory[0].w;
History[4] = m_LuminanceHistory[1].x;
History[5] = m_LuminanceHistory[1].y;
History[6] = m_LuminanceHistory[1].z;
History[7] = m_LuminanceHistory[1].w;
該解決方案可以按預期工作,但我不知道為什么不能直接使用float [8]。
在您的Gtx :: BufferManager上沒有太多細節的情況下,我猜測以下可能有助於您進行調試的可能性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.