Я экспериментирую с фреймворком Cocos2d HTML5, но считаю, что это стандартная проблема WebGL, которую я не могу точно определить, так как у меня нет хороших знаний по этой теме. Если у меня есть стандартное изображение PNG с полупрозрачными пикселями, такими как мягкие края, и если фон (холст или другой элемент позади RenderTexture) заполнен не черным цветом, спрайт при рисовании в RenderTexture в конечном итоге впитывается в фон, даже если этого не должно быть. Например, если рисунок, который я рисую, красный и я использую зеленый фон, полупрозрачные пиксели в конечном итоге трансформируются в желтый. См. Эти изображения для иллюстрации:
Внешний вид на сплошном черном фоне - это то, что я хочу
Появление на не черном фоне, с просачиванием bg насквозь
Все, что находится на заднем плане, будет видно, когда я размещу любое изображение, отличное от 100% непрозрачности.
Полный код класса RenderTexture на основе JavaScript можно увидеть в репозитории cocos2d-html5 Github в разделе cocos2d / misc_nodes / CCRenderTexture.js. Это преобразование из Cocos2d-x C ++ / Objective C (которое не демонстрирует этой проблемы). Несколько лет назад в системе отслеживания проблем cocosd-iphone была обнаружена проблема №937, описывающая ту же проблему для версии, отличной от HTML. С тех пор это было решено, но я не могу определить, какое было разрешение или как его можно было преобразовать в формат WebGL. Я уверен, что это проблема наложения, но я безуспешно пытался изменить режимы наложения (с GL_ONE, GL_ONE_MINUS_SRC_ALPHA на GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA).
Мы будем очень благодарны за любую помощь экспертов OpenGL / WebGL. Если я использую стандартные «спрайты» в Cocos2d вне этого RenderTexture, проблемы не существует. Кроме того, функция MotionStreak, похоже, тоже работает без сбоев, но мне требуется RenderTexture для создания динамических текстур для дальнейшего использования.