2016-11-29 5 views
0

Я экспериментировал с созданием в OpenGL игровой движок, и инициализировать сцену, как это: (упрощенный)Создание «читаемого» уникального идентификатора элемента в массиве?

Чтение scene.txt файла построчно:

  • Первая часть: Название Шейдеры. Я загружаю их

  • Вторая часть: Название Материалы которые должны быть созданы.

    • И имя шейдера, который будет приложен к материалу.

Итак, как вы видите, в настоящее время я идентифицирую «элементы» (например, шейдеры и материалы) строкой, которая не является столь эффективным. (Но я думаю, что это приемлемо во время инициализации)

Проблема заключается в том, что если я хочу изменить материал объекта или шейдер материала, во время выполнения, я должен пройти через соответствующий массив и сравнить его элементов имена (строка) до тех пор, пока я не найду соответствующий.

Я думаю, что это немного медленно, поэтому я хотел бы знать, как я могу сделать уникальный, легко сопоставимый идентификатор во время выполнения?

Есть ли способ «динамического управления переходом» или что-то в этом роде?

  • Другими словами: Как я могу определить то, что не знаю, время компиляции?

  • (с использованием Int в качестве идентификатора не очень "говорящая" фамилия)

  • это как раз пришла мне в голову:

    • создает перечисление для всех возможных шейдеры.
    • Я создаю массив bools, который содержит 1 элемент для каждого возможного шейдера.
    • При инициализации я установил для этого массива шейдера значение true, если оно загружено.

Это может быть очень плохая идея, так что не стесняйтесь комментарий :)

+1

Вы можете попробовать один из стандартных контейнеров, таких как 'std :: unordered_map', чтобы сопоставить строку с объектом. –

+0

Просто используйте int и все. Почему нет? Я действительно не понимаю массив bools, он ничего не изменит, если вы захотите найти что-то по имени, он только скажет, загружен ли он. –

+0

Unordered_map - это хорошая вещь. :) @SamiKuhmonen Я хотел бы изменить базу идентификации, потому что строки медленны. Идея в конце сообщения - это то, что я решил заменить идентификатором строки. – Tudvari

ответ

0

Наконец я выбрал std::unordered_map с std::string ключевых значений.

Смежные вопросы