glsl:
#version 450
layout(set = 0, binding = 0) uniform mat4 MyMatrix;
void main() {
}
如果有多个帧缓冲区,则可以同时将多个帧缓冲区提交到队列,例如:
while(!isClose) {
...
VkSubmitInfo submitInfo = {};
submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;
std::vector<VkCommandBuffer> cs = {commandBuffers[imageIndex]}; // bind different frame buffer
...
vkQueueSubmit(graphicsQueue, 1, &submitInfo, inFlightFences[currentFrame]);
...
currentFrame = (currentFrame + 1) % MAX_FRAMES_IN_FLIGHT;
...
}
MyMatrix需要更新每一帧。如果MyMatrix使用相同的VkBuffer,则可能会覆盖每一帧数据?那我应该为MyMatrix创建多个VkBuffers吗?
答案 0 :(得分:0)
多个缓冲区可能是多余的-通常分配一个大的统一缓冲区,然后为每个draw call batch从该缓冲区中再分配。然后,您可以为每个绘图只在该缓冲区中使用偏移量,而不是每次都需要一个新缓冲区。
通常,偏移量对于硬件来说要比全新的缓冲区描述符便宜。