В данный момент я просто делаю:
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
для других переменных. Но я хотел бы знать, если я на правильном пути здесь... так что, пожалуйста, любые комментарии оценили.