У меня были проблемы, и, проведя неделю, пробуя всевозможные решения и вырвав свои волосы, я пришел сюда, чтобы посмотреть, сможет ли кто-нибудь мне помочь.
Я работаю над плагином для 3D-браузера для Mac (у меня есть тот, который работает на Windows). Единственный полностью аппаратно ускоренный способ сделать это - использовать CAOpenGLLayer (или что-то, что унаследовано от этого). Если NSWindow создано, и вы присоединяете слой к NSView этого окна, тогда все работает правильно. Но по какой-то причине я могу получить только определенное количество кадров (16) для рендеринга при передаче слоя в браузер.
Какао вызывает drawInCGLContext моего слоя для первых 16 кадров. Затем, по неизвестной причине, он перестает называть это. 16 кажется очень конкретным - и программным - количеством кадров, и поэтому я хотел бы знать, есть ли у кого-нибудь понимание, почему drawInCGLContext не будет вызываться после 16 кадров?
Я вполне уверен, что это не потому, что я передаю слой в браузер - я создал очень минимальный пример плагина, который рендерит вращающийся квад, используя CAOpenGLLayer, и это действительно работает. Но полный плагин намного сложнее, и я просто не знаю, где искать. Я просто не знаю, почему drawInCGLContext перестает вызываться. Я пытался форсировать его с помощью CATransaction, он определенно получает сообщение setNeedsDisplay, но drawInCGLContext никогда не вызывается. OpenGL также не сообщает об ошибках (в настоящее время я проверяю результаты всех вызовов OpenGL). Я не совсем понимаю! Помощь