Проблема: рендеринг останавливается с OpenGL на Mac OS X 10.6 - PullRequest
0 голосов
/ 18 марта 2011

У меня были проблемы, и, проведя неделю, пробуя всевозможные решения и вырвав свои волосы, я пришел сюда, чтобы посмотреть, сможет ли кто-нибудь мне помочь.

Я работаю над плагином для 3D-браузера для Mac (у меня есть тот, который работает на Windows). Единственный полностью аппаратно ускоренный способ сделать это - использовать CAOpenGLLayer (или что-то, что унаследовано от этого). Если NSWindow создано, и вы присоединяете слой к NSView этого окна, тогда все работает правильно. Но по какой-то причине я могу получить только определенное количество кадров (16) для рендеринга при передаче слоя в браузер.

Какао вызывает drawInCGLContext моего слоя для первых 16 кадров. Затем, по неизвестной причине, он перестает называть это. 16 кажется очень конкретным - и программным - количеством кадров, и поэтому я хотел бы знать, есть ли у кого-нибудь понимание, почему drawInCGLContext не будет вызываться после 16 кадров?

Я вполне уверен, что это не потому, что я передаю слой в браузер - я создал очень минимальный пример плагина, который рендерит вращающийся квад, используя CAOpenGLLayer, и это действительно работает. Но полный плагин намного сложнее, и я просто не знаю, где искать. Я просто не знаю, почему drawInCGLContext перестает вызываться. Я пытался форсировать его с помощью CATransaction, он определенно получает сообщение setNeedsDisplay, но drawInCGLContext никогда не вызывается. OpenGL также не сообщает об ошибках (в настоящее время я проверяю результаты всех вызовов OpenGL). Я не совсем понимаю! Помощь

1 Ответ

2 голосов
/ 24 марта 2011

Итак, для всех, кто столкнулся с этой проблемой в будущем: вы пытаетесь рисовать, используя контекст OpenGL вне drawInCGLContext. В коде была ошибка, из-за которой почти все рисование происходило из правильного места (drawInCGLContext), но один путь к коду приводил к его рендерингу снаружи.

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

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