Я экспериментировал с созданием в OpenGL игровой движок, и инициализировать сцену, как это: (упрощенный)Создание «читаемого» уникального идентификатора элемента в массиве?
Чтение scene.txt файла построчно:
Первая часть: Название Шейдеры. Я загружаю их
Вторая часть: Название Материалы которые должны быть созданы.
- И имя шейдера, который будет приложен к материалу.
Итак, как вы видите, в настоящее время я идентифицирую «элементы» (например, шейдеры и материалы) строкой, которая не является столь эффективным. (Но я думаю, что это приемлемо во время инициализации)
Проблема заключается в том, что если я хочу изменить материал объекта или шейдер материала, во время выполнения, я должен пройти через соответствующий массив и сравнить его элементов имена (строка) до тех пор, пока я не найду соответствующий.
Я думаю, что это немного медленно, поэтому я хотел бы знать, как я могу сделать уникальный, легко сопоставимый идентификатор во время выполнения?
Есть ли способ «динамического управления переходом» или что-то в этом роде?
Другими словами: Как я могу определить то, что не знаю, время компиляции?
(с использованием Int в качестве идентификатора не очень "говорящая" фамилия)
это как раз пришла мне в голову:
- создает перечисление для всех возможных шейдеры.
- Я создаю массив bools, который содержит 1 элемент для каждого возможного шейдера.
- При инициализации я установил для этого массива шейдера значение true, если оно загружено.
Это может быть очень плохая идея, так что не стесняйтесь комментарий :)
Вы можете попробовать один из стандартных контейнеров, таких как 'std :: unordered_map', чтобы сопоставить строку с объектом. –
Просто используйте int и все. Почему нет? Я действительно не понимаю массив bools, он ничего не изменит, если вы захотите найти что-то по имени, он только скажет, загружен ли он. –
Unordered_map - это хорошая вещь. :) @SamiKuhmonen Я хотел бы изменить базу идентификации, потому что строки медленны. Идея в конце сообщения - это то, что я решил заменить идентификатором строки. – Tudvari