Поведение GLSL при работе с неинициализированной униформой - PullRequest
0 голосов
/ 21 октября 2019

Я создаю шейдер, который будет иметь дело, скажем, с 10 точечными источниками света для сцены;но у меня проблемы с "до". Вот что я хочу сделать:

vec3 temp = CalcPointLight(pointLights[1], norm, FragPos, viewDir, fragDiffuse, fragSpecular);
temp *= (1.0 - ShadowCalculationPointLight(FragPos, pointLights[1].position, pointLights[1].shadowCubeMap));
temp *= pointLights[1].use;
result += temp

Итак, у меня есть массив структур pointLights, и я просто сделаю то же самое для всех 10 из них, и чтобы избежать ветвления, добавивif операторов, чтобы проверить, равен ли атрибут use 1, я умножаю результат вычисления света / тени на pointLights[1].value.

Но по некоторым причинам кажется, что если различные атрибутыpointLights[1] не инициализируются, тогда переменная result (которая позже отправляется как цвет фрагмента) больше не рисуется, даже если предполагается, что вектор temp умножается на 0.

ToУ меня есть два решения этой проблемы: либо я должен сгенерировать / написать шейдер для каждого количества точечных источников света, с которыми мне приходится иметь дело (поэтому, если я хочу использовать до 10 источников света, мне придется написать 11 различных шейдеров);или я всегда инициализирую все свои 10 источников света значениями, которые заставят мои функции всегда возвращать (0,0,0). Для последнего решения я не уверен, как инициализировать samplerCube таким образом, чтобы он содержал исключительно 0s ... Или есть другое решение?

РЕДАКТИРОВАТЬ: я пытаюсь реализовать второе решение, но какЯ упоминал ранее, но снова, как я должен инициализировать samplerCube? Должен ли я загрузить 6 текстур размером 1x1px в виде кубической карты в память графического процессора, и когда я захочу инициализировать униформу в своих шейдерах, отправьте эту «пустую» кубическую карту, или есть более причудливый способ сделать это (имея сэмплердаешь только (0,0,0,1))?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...