Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了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,&center);   
    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()?

解决方法

这恰好是cocos2d-x错误.修复了新版本v2.x. (似乎cocos2d-x停止更新使用opengl es 1.x的1.x版本)因此遗憾地不支持iPhone和iPhone 3g.无论如何更新cocos2d-x 2.x现在有效.

大佬总结

以上是大佬教程为你收集整理的Android上缺少cocos2d-x opengl上下文(可以使用iPhone)全部内容,希望文章能够帮你解决Android上缺少cocos2d-x opengl上下文(可以使用iPhone)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。