2015-09-04 2 views
0

У меня есть цикл анимации работает, в котором я получаю сообщение об ошибке, что читает ...Возможные источники асинхронной ошибки в WebGLRenderingContext?

GL ERROR :GL_INVALID_OPERATION : glDrawElements: Source and destination textures of the draw are the same. 

Эта ошибка появляется после того, как между 2 и 3 анимации запросов кадров, в зависимости от того, есть ли у меня обновилась или жесткий обновил экран - и даже тогда время ошибки несовместимо. Жесткое обновление может иногда задерживать появление ошибки до тех пор, пока не будет получено 3 запроса кадра, но большую часть времени для обновления и жесткого обновления ошибка появляется после двух запросов кадра. Исходя из этих наблюдений, проблема, похоже, связана с асинхронным компонентом. У меня также есть более простая версия игрушек этого цикла без ошибок. Я все больше и больше упрощал багги-программу (теперь она просто показывает не движущийся куб) и до сих пор не может найти источник проблемы.

Программа порядочно сложна, поэтому сложно определить, какой код показывать здесь, поэтому вместо этого я надеюсь на ответ, который может немного научить меня приближению к такой проблеме, поэтому я могу применять ее всякий раз Я сталкиваюсь с подобными ситуациями: Мой вопрос в том, каковы области лучших кандидатов в программе для такой проблемы? Зная это, я могу сосредоточить свои усилия.

Надеюсь, это имеет смысл - сообщите мне, если вам нужно уточнить. Благодаря!

Update:

  • Это кажется довольно простым, но я добавлю, что, когда я не ставил ни одного объекта в сцене (куба, ось хелперов и т.д.) и оставить все остальное то же самое, ошибка уходит.

  • Кроме того, мне интересно, может ли возникнуть такая ошибка из-за потерянного контекста? Как so.

+0

Это происходит при обращении к фреймбуферу и в то же время образец из его текстуры прикрепления цвета в шейдере. [См. Эту проблему с хромом] (https://code.google.com/p/chromium/issues/detail?id=421695) –

ответ

0

Вы, вероятно, нужно разместить свой код, но только гадать ...

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

Почему это происходит с перерывами, я могу только догадываться. Если вы загружаете текстуры с изображений или даже из dataURL, они загружают async. Будучи в кеше, или если вы тестируете локально, они будут загружаться быстро. Итак, я предполагаю, что вы не правильно устанавливаете свои текстурные единицы в каждом кадре (вызывая gl.activeTexture и gl.bindTexture для каждой текстурной единицы, используемой вашими шейдерами). Когда ваше изображение, наконец, загружено в async, вы вызываете gl.bindTexture, чтобы загрузить текстуру. Это в конечном итоге назначает текстуру любому текущему активному текстурному блоку и испортит вашу настройку.

+0

Я думаю, что вы, вероятно, правы в том, что асинхронная загрузка является источником проблемы ... Я сейчас экспериментирую, чтобы изолировать, когда вещи уходят с рельсов, - скоро последует за ними. Благодаря! – gromiczek

Смежные вопросы