我已綁定的shader storage buffer
到shader storage block
像這樣只能從着色器存儲塊中獲取垃圾?
GLuint index = glGetProgramResourceIndex(myprogram, GL_SHADER_STORAGE_BLOCK, name);
glShaderStorageBlockBinding(myprogram, index, mybindingpoint);
glBindBuffer(GL_SHADER_STORAGE_BUFFER, mybuffer)
glBindBufferRange(GL_SHADER_STORAGE_BUFFER, mybindingpoint, mybuffer, 0, 48);
glBufferSubData(GL_SHADER_STORAGE_BUFFER, 0, 48, &mydata);
mydata
指向包含4個glm::vec3
對象std::vector
。
因爲我綁定48 bytes
作爲緩衝區範圍我期望lights[]
保持48/(4*3) = 4 vec3s
。
layout(std430) buffer light {
vec3 lights[];
};
元素在指數1
我std::vector
保存數據x=1.0, y=1.0, z=1.0
。
但是這樣做
gl_FragColor = vec4(lights[1], 1.0);
觀看輸出我看到黃色(x=1.0, y=1.0, z=0.0
)像素。這不是我加載到緩衝區中的內容。
有人可以告訴我我做錯了什麼嗎?
EDIT我剛變化了的着色器存儲塊以
layout(std430) buffer light {
float lights[];
};
和輸出
gl_FragColor = vec4(lights[3],lights[4],lights[5],1.0);
和它的工作原理(白色像素)。
如果有人可以解釋這一點,那仍然很棒。
請顯示mydata的確切定義 – deniss