Как и в OP, я столкнулся с некоторым кодом, который использует это, и, не зная ничего лучшего, я реализовал его сразу же после этапа ссылки на программу. Получена такая же ошибка.
Я не эксперт здесь, но, основываясь на нескольких наблюдениях, я подумал, что уточню, что, по-видимому, говорит @robinjam (что повторяет то, что говорят GL docs около glValidateProgram
).
Образец кода, который я использовал, был демонстрационным проектом Apple iOS OpenGL ES 2.0, и я еще не запускал эту точную часть кода на устройстве, но Simulator дает мне эту ошибку Validation Failed: Current draw framebuffer is invalid.
. Тем не менее, важно отметить, что метод, который работает с этим, - (BOOL)validateProgram:(GLuint)prog
, включен в ViewController.mm
(а не .m
, потому что я заразил его с помощью C++ на ранней стадии), но не содержит кода, снабженного этим примером кода, который фактически называет его.
Поэтому цель glValidateProgram не использовать его в качестве дополнительного «проверки» шаг после компоновки программы, так как GL и состояние приложения вряд ли готовы к фактически с помощью, что программа в данный момент, вероятно, это еще до того, мы начинаем инициализировать фреймбуфер по умолчанию (его битдап, его мультисэмпл буферы и т. д.), и это то, о чем подсказывает ошибка.
Соответствующее место для вызова glValidateProgram будет прямо перед тем, как вы сделаете реальный вызов рендеринга.
Это было бы полезно для отладки. Это необязательный способ предоставить нам драйвер, чтобы помочь нам, когда что-то пошло не так. Было бы глупо называть это каждый раз, когда мы визуализируем в ситуации без отладки, где все работает плавно.
Это будет звучать легкомысленно, но ... недопустимый фрейм-буффер рисования - вот почему это происходит. Вы изменили его? Что это такое? –
Николь прав, как обычно. Кроме того, glCheckFramebufferStatus может быть вашим лучшим другом здесь. – Robinson
glCheckFramebuffertatus возвращает GL_FRAMEBUFFER_UNDEFINED, который в соответствии с ссылкой на OpenGL означает: "возвращается, если цель является фреймбуфером по умолчанию, но фреймбуфер по умолчанию не существует." Что я могу определить фреймбуфер по умолчанию? – user2156225