glGetnUniformfv вылетает без причины? - PullRequest
1 голос
/ 07 ноября 2019

Я попытался получить uniform vec3 из фрагментного шейдера в свой процессор, используя glGetnUniformfv. Согласно документации это должно прекрасно работать. Это также работает, когда вы получаете float от шейдера. Но при таком использовании

float f[3] = {0.0f};
glGetnUniformfv(program, glGetUniformLocation(program, name.c_str()), 3, f);

моя программа падает. Я проверил glGetUniformLocation, но у него был правильный вывод.

Ответы [ 2 ]

3 голосов
/ 07 ноября 2019

Третий параметр семейства функций glGetnUniform не является количеством записей в массиве. Это размер байта массива, на который указывает f. Что, поскольку f является массивом, а не просто указателем на массив, будет sizeof(f).

Теперь ваша реализация не должна была аварийно завершиться, поэтому, вероятно, там происходит что-то еще. Но это проблема в коде, который вы предоставили.

1 голос
/ 08 ноября 2019

Если вы не используете контекст, который на самом деле поддерживает OpenGL 4.5+, получите vec3, используя "старый способ", например так:

float f[3] = {0.0f};
glGetUniformfv(program, glGetUniformLocation(program, name.c_str()), f);

Новый glGet n * 1005 только для настольных ПК* Единые точки входа существуют только для дополнительной безопасности, аналогично strncpy против strcpy.

Кроме того, если вы do используете вариант glGet n , вы должны вместо этого пройти 123 для bufSize , так как это число байтов.

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