На данный момент я просто делаю:
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.
Есть ли более умный / быстрый способ сделать это? (максимально уменьшить повторение).
-
Редактировать: Я больше думал об этой идее и подумал: разве было бы неплохо, если бы я просто прочитал исходные файлы glsl, проанализировал форму / атрибуты и автоматически установил свою карту без меня? нужно написать что-нибудь еще, кроме источника glsl !? Вот как это делают большие мальчики?
Edit2: Теперь я успешно разбираю файлы шейдера GLSL и, используя метод std::map
, использую одиночный вызов функции с одним строковым параметром, чтобы получить адрес для униформ / атрибутов в текущем включенном шейдере. , в случае, если мне нужно больше производительности, я буду кешировать вызовы std::map
для других переменных. Но я хотел бы знать, нахожусь ли я на правильном пути здесь ... поэтому, пожалуйста, любые комментарии приветствуются.