GLSL: Как мне хранить и отслеживать расположение униформ / атрибутов?

На данный момент я просто делаю:

someuniform1 = glGetUniformLocation(MyShaderName, "someuniform1");
someattribute1 = glGetAttribLocation(MyShaderName, "someattribute1");

Но этот метод кажется раздражающе повторяющимся, поэтому я подумал об использовании std :: map:

Shaders[MyShaderName].Uniforms["someuniform1"] = glGetUniformLocation(MyShaderName, "someuniform1");
Shaders[MyShaderName].Attributes["someattribute1"] = glGetAttribLocation(MyShaderName, "someattribute1");
// i could add a function to remove the repetition of the two strings at both sides.

Есть ли более умный / быстрый способ сделать этот? (чтобы уменьшить количество повторений, насколько это возможно).

-

Edit: Я больше думал об этой идее, и я подумал, было бы неплохо, если бы я просто прочитал исходные файлы glsl, проанализировал uniform / attributes и автоматически установить для моей карты, без необходимости писать что-либо еще, кроме источника glsl !? Так ли это делают большие мальчики?

Edit2: Сейчас я успешно разбираю файлы шейдеров GLSL и использую метод std :: map , Я использую одиночный вызов функции с одним строковым параметром, чтобы получить адрес для униформ / атрибутов в текущем включенном шейдере. в случае, если мне нужно больше производительности, я буду кэшировать вызовы std :: map для других переменных. Но я хотел бы знать, на правильном ли я здесь пути ... так что, пожалуйста, приветствую любые комментарии.

10
задан Rabbid76 30 September 2017 в 13:37
поделиться