Cocos2d-x контекст opengl отсутствует на Android (ОК с iPhone)

Когда я выхожу из приложения, и снова введите его, я получил сообщение об ошибке:

libEGL call to OpenGL ES API with no current context (logged once per thread) (red warning text) libc Fatal signal 11 (SIGSEGV) at 0x5f012000 (code=2) (black text) 

И файл ошибки: (не знаю, где, но нормально, если я не использую этот файл)

.час:

 #ifndef __CCMaskLayer__LAYER_H__ #define __CCMaskLayer__LAYER_H__ #include "cocos2d.h" using namespace cocos2d; class CCMaskLayer : public cocos2d::CCLayer { public: CCMaskLayer(); ~CCMaskLayer(); virtual bool initWithRGBASizeCenterPosition(float red, float green, float blue, float alpha, CCSize s, CCPoint p); virtual void onExit(); virtual void onEnterTransitionDidFinish(); LAYER_NODE_FUNC(CCMaskLayer); static CCMaskLayer* layerWithCCColor4FSizeCenterPosition(ccColor4F c, CCSize s, CCPoint p); static CCMaskLayer* layerWithRGBASizeCenterPosition(float red, float green, float blue, float alpha, CCSize s, CCPoint p); void scratchOffCircle(CCPoint center, float radius); void scratchOffRect(CCRect rect); CC_SYNTHESIZE_RETAIN(CCRenderTexture* , masked, masked); CC_SYNTHESIZE(float, r, r); CC_SYNTHESIZE(float, g, g); CC_SYNTHESIZE(float, b, b); CC_SYNTHESIZE(float, a, a); private: void setClear(float red, float green, float blue, float alpha); }; #endif // __CCMaskLayer__LAYER_H__ 

.cpp:

 #include "CCMaskLayer.h" using namespace cocos2d; CCMaskLayer::CCMaskLayer() { } CCMaskLayer::~CCMaskLayer() { masked->release(); } bool CCMaskLayer::initWithRGBASizeCenterPosition(float red, float green, float blue, float alpha, CCSize s, CCPoint p) { if ( !CCLayer::init() ) { return false; } this->setClear(red, green, blue, alpha); CCSize size = s; masked = CCRenderTexture::renderTextureWithWidthAndHeight(size.width, size.height); masked->getSprite()->setBlendFunc((ccBlendFunc){GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA}); masked->setPosition(p); this->addChild(masked); this->setIsTouchEnabled(true); return true; } void CCMaskLayer::onEnterTransitionDidFinish() { CCLayer::onEnterTransitionDidFinish(); } void CCMaskLayer::onExit() { CCLayer::onExit(); } CCMaskLayer* CCMaskLayer::layerWithCCColor4FSizeCenterPosition(ccColor4F c, CCSize s, CCPoint p) { return CCMaskLayer::layerWithRGBASizeCenterPosition(cr, cg, cb, ca, s, p); } CCMaskLayer* CCMaskLayer::layerWithRGBASizeCenterPosition(float r, float g, float b, float a, CCSize s, CCPoint p) { CCMaskLayer* layer = new CCMaskLayer; layer->initWithRGBASizeCenterPosition(r, g, b, a, s, p); layer->autorelease(); return layer; } void CCMaskLayer::setClear(float red, float green, float blue, float alpha) { r = red; g = green; b = blue; a = alpha; } void CCMaskLayer::scratchOffCircle(CCPoint center, float radius) { masked->beginWithClear(r, g, b, a); glBlendFunc(GL_ZERO, GL_ONE_MINUS_SRC_ALPHA); glDisable(GL_TEXTURE_2D); glDisableClientState(GL_TEXTURE_COORD_ARRAY); glDisableClientState(GL_COLOR_ARRAY); glColorMask(0.0f, 0.0f, 0.0f, 1.0f); glPointSize(radius * 2 * CC_CONTENT_SCALE_FACTOR()); glEnable(GL_POINT_SMOOTH); glVertexPointer(2, GL_FLOAT, 0, &center); glDrawArrays(GL_POINTS, 0, 1); glColorMask(1.0f, 1.0f, 1.0f, 1.0f); glEnableClientState(GL_COLOR_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glEnable(GL_TEXTURE_2D); masked->end(); } void CCMaskLayer::scratchOffRect(CCRect rect) { masked->beginWithClear(r, g, b, a); glBlendFunc(GL_ZERO, GL_ONE_MINUS_SRC_ALPHA); glDisable(GL_TEXTURE_2D); glDisableClientState(GL_TEXTURE_COORD_ARRAY); glDisableClientState(GL_COLOR_ARRAY); glColorMask(0.0f, 0.0f, 0.0f, 1.0f); CCPoint vertices[4] = { rect.origin, // bottom, left CCPointMake(rect.origin.x, rect.origin.y + rect.size.height), // top, left CCPointMake(rect.origin.x + rect.size.width, rect.origin.y), // bottom, right CCPointMake(rect.origin.x + rect.size.width, rect.origin.y + rect.size.height), // top, right }; glVertexPointer(2, GL_FLOAT, 0, &vertices); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); glColorMask(1.0f, 1.0f, 1.0f, 1.0f); glEnableClientState(GL_COLOR_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glEnable(GL_TEXTURE_2D); masked->end(); } 

Обратите внимание, что он отлично работает для iOS, но сбой для android.

РЕДАКТИРОВАТЬ::

Если я прокомментирую последнюю строку меток «круглые / прямые», ничего не будет нарисовано, но это не сбой. Поэтому проблема заключается в строке: masked-> end ()?

Это случается с ошибками cocos2d-x. Исправлено на новой версии v2.x. (Кажется, cocos2d-x перестает обновлять версии 1.x, которые используют opengl es 1.x), к сожалению, не поддерживают iPhone и iPhone 3g. В любом случае обновление cocos2d-x 2.x теперь работает.

Intereting Posts
Firebase Synchronous XMLHttpRequest в основной теме устарел Java.lang.RuntimeException: Не удается запустить активность ComponentInfo Не удалось запустить службу DayDream в моем обычном приложении для Android. Есть ли предпочтительный способ получить системное время в cocos2d-x? Android-тесты – Как добавить журналы Espresso Оверлей приложения Android по всей стране (HUD) Android-браузер Android не загрузит мой URL-адрес, но загрузит другие Android медленное открытие мягкой клавиатуры Android: объекты с включенным списком ListView несут невидимый разделитель Матч родителя для viewpager внутри scrollview не работает Служба Android с повторяющейся нитью в фоновом режиме с частичной блокировкой следа `AndEngine` Образцы не запускаются на Eclipse, обновляя до последних SDK и ADT для anddorid Как работают InputStream, InputStreamReader и BufferedReader в Java? Влияние HTTP-запросов на время работы от батареи Хранилище данных Android, когда использовать SqlLite и когда использовать JSON, альтернативы Linq