По поводу BlendFunc... у меня это вроде бы исправлено уже:
- Код: Выделить всё
void CCMagicEmitter::visit(void)
{
GLint attr_GL_BLEND_SRC_ALPHA, attr_GL_BLEND_DST_ALPHA;
glGetIntegerv(GL_BLEND_SRC_ALPHA, &attr_GL_BLEND_SRC_ALPHA);
glGetIntegerv(GL_BLEND_DST_ALPHA, &attr_GL_BLEND_DST_ALPHA);
// Set the shader program for OpenGL
CCGLProgram* program=CCShaderCache::sharedShaderCache()->programForKey(kCCShader_PositionTextureColor);
setShaderProgram(program);
program->use();
program->setUniformsForBuiltins();
ccGLEnableVertexAttribs( kCCVertexAttribFlag_Position | kCCVertexAttribFlag_TexCoords | kCCVertexAttribFlag_Color);
emitter->Render();
glBlendFunc(attr_GL_BLEND_SRC_ALPHA, attr_GL_BLEND_DST_ALPHA);
}
хотя... можно еще добавить:
- Код: Выделить всё
GLboolean blendEnabled;
glGetBooleanv(GL_BLEND, &blendEnabled);
хуже точно не будет.
У себя я исправил это сохранением текущих настроек блендинга в int MP_Emitter::Render() и восстановлением их в конце метода.
Здесь ничего исправлять не рекомендую - это ядро враппера, которое одинаково для всех платформ, включая DirectX.
И еще, другая проблема возникает не только на кокосе, но и на мармеладе как минимум. Некоторые системы частиц не получается перемещать, они все время рисуются в одной и той же позиции
Такие проблемы, скорее всего, относятся к настройкам эмиттера. У эмиттера есть режим перемещения и вращения, который определяет, остаются ли частицы на месте или перемещаются/вращаются вместе с эмиттером. В API это задается через Magic_SetEmitterPositionMode/Magic_SetEmitterDirectionMode. В редакторе есть кнопка под сценой (следующая после масштаба сцены), которая устанавливает этот режим для эмиттера. Вы попробуйте сначала менять режим через API (передавайте true).