Я пытаюсь создать класс для «сущности» в Vulkan (сущность - это графический объект, который может быть визуализирован в окне);
Этот класс будет содержать соответствующий буфер вершин, а такжес макетом набора дескрипторов, пулом дескрипторов, наборами дескрипторов и т. д. проблема заключается в том, как управлять унифицированными буферами, потому что я хотел бы что-то вроде этого:
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 будет содержать соответствующий объект (матрица в данном случае), второй - вектор единообразных буферов, поэтому они могут быть кактак же, как и количество изображений в цепочке подкачки):
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>() };
Проблема в том, что существуют различные виды унифицированных буферов (матрица, вектор, плавающее число, bool и т. д.), поэтому я застряло том, что писать как первый элемент объекта std :: pair.
Спасибо за ваше время.