大佬教程收集整理的这篇文章主要介绍了Android上缺少cocos2d-x opengl上下文(可以使用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)
.H:
#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,CCPoint p); static CCMaskLayer* layerWithRGBASizeCenterPosition(float red,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 alpha); }; #endif // __CCMaskLayer__LAYER_H__
的.cpp:
#include "CCMaskLayer.h" using namespace cocos2d; CCMaskLayer::CCMaskLayer() { } CCMaskLayer::~CCMaskLayer() { masked->release(); } bool CCMaskLayer::initWithRGBASizeCenterPosition(float red,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,CCPoint p) { return CCMaskLayer::layerWithRGBASizeCenterPosition(c.r,c.g,c.b,c.a,s,p); } CCMaskLayer* CCMaskLayer::layerWithRGBASizeCenterPosition(float r,float g,float b,float a,CCPoint p) { CCMaskLayer* layer = new CCMaskLayer; layer->initWithRGBASizeCenterPosition(r,p); layer->autorelease(); return layer; } void CCMaskLayer::setClear(float red,float alpha) { r = red; g = green; b = blue; a = alpha; } void CCMaskLayer::scratchOffCircle(CCPoint center,float radius) { masked->beginWithClear(r,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,1.0f); glPointSize(radius * 2 * CC_CONTENT_SCALE_FACTOR()); glEnable(GL_POINT_SMOOTH); glVertexPointer(2,GL_FLOAT,¢er); glDrawArrays(GL_POINTS,1); glColorMask(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,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),right CCPointMake(rect.origin.x + rect.size.width,right }; glVertexPointer(2,&vertices); glDrawArrays(GL_TRIANGLE_StriP,4); glColorMask(1.0f,1.0f); glEnableClientState(GL_COLOR_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glEnable(GL_TEXTURE_2D); masked->end(); }
请注意,它适用于iOS但崩溃的Android.
编辑::
如果我注释掉最后一行刮开圆/矩形方法,将不会绘制任何东西,但它不会崩溃.所以问题是行:masked-> end()?
以上是大佬教程为你收集整理的Android上缺少cocos2d-x opengl上下文(可以使用iPhone)全部内容,希望文章能够帮你解决Android上缺少cocos2d-x opengl上下文(可以使用iPhone)所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。