【发布时间】:2019-06-28 00:14:26
【问题描述】:
我正在尝试在 Vulkan 中为“实体”创建一个类(实体是可以在窗口中呈现的图形对象);
这个类将包含对应的Vertex Buffer,以及描述符集布局、描述符池、描述符集等,问题是如何管理统一缓冲区,因为我想要这样的东西:
class Entity final {
public:
enum class Uniform_Type : char {
MODEL_MATRIX, VIEW_MATRIX, PROJECTION_MATRIX, AMBIENT_VECTOR, DIFFUSE_VECTOR,
SPECULAR_VECTOR, SHININESS_FLOAT, LIGHT_AMBIENT_VECTOR, LIGHT_DIFFUSE_VECTOR,
LIGHT_SPECULAR_VECTOR, IS_LIGHT_SOURCE_BOOLEAN, LIGHT_POSITION_VECTOR,
VIEW_POSITION_VECTOR
};
// Private fields
std::unordered_map<Uniform_Type, std::pair<WHAT_HERE, std::vector<Uniform_Buffer>>> uniformsMap;
};
所以如果我的类只需要模型、视图和投影矩阵,我会做这样的事情(std::pair 的第一个元素将保存相应的对象(在这种情况下是一个矩阵),第二个是Uniform Buffers 的向量,因此它们可以与交换链中的图像数量一样多):
uniformsMap[MODEL_MATRIX] = { glm::mat4(1.0f), std::vector<Uniform_Buffer>() };
uniformsMap[VIEW_MATRIX] = { glm::mat4(1.0f), std::vector<Uniform_Buffer>() };
uniformsMap[PROJECTION_MATRIX] = { glm::mat4(1.0f), std::vector<Uniform_Buffer>() };
问题在于有各种统一缓冲区(矩阵、向量、浮点数、布尔值等...),所以我一直坚持写什么作为 std::pair 对象的第一个元素。
感谢您的宝贵时间。
【问题讨论】: