コード例 #1
0
ファイル: ogreapp.cpp プロジェクト: dorgonman/cocos2d-x-ogre
void oc_reset_cc_gl_state(){
	//reset to cocos2d-x render state
	static GLuint s_cc_gl_program = 0;
	static CCDirector* s_cc_director = NULL;
	if( 0 == s_cc_gl_program ){
		CCShaderCache* cache = CCShaderCache::sharedShaderCache();
		CCGLProgram* glp = cache->programForKey(kCCShader_PositionTextureColor);
		s_cc_gl_program = glp->getProgram();
	}
	if( NULL == s_cc_director ){
		s_cc_director = CCDirector::sharedDirector();
	}
	glUseProgram(s_cc_gl_program);
	s_cc_director->setAlphaBlending(true);
	s_cc_director->setDepthTest(false);
	s_cc_director->setProjection(kCCDirectorProjection3D);
//	glDisable( GL_CULL_FACE );
}
コード例 #2
0
ファイル: YUVSprite.cpp プロジェクト: JohnCrash/ffplayer
bool YUVSprite::initWidthYUV420P(int w,int h,uint8_t *yuv[3],int linesize[3])
{
    /* 初始化shader program */
    //double t0 = cc_clock();
    CCShaderCache * ccsc = CCShaderCache::sharedShaderCache();
    while(1){
        if(ccsc){
            _prog = ccsc->programForKey(_yuv420pShaderName);
            if(!_prog){
                _prog = new CCGLProgram();
            
                if(_prog && _prog->initWithVertexShaderByteArray(_vshader,_fshader) ){
                    //add attribute
                    _prog->addAttribute("position", ATTRIB_VERTEX);
                    _prog->addAttribute("TexCoordIn", ATTRIB_TEXTURE);
                    if(_prog->link()){
                        _prog->updateUniforms();
                        ccsc->addProgram(_prog, _yuv420pShaderName);
                        _prog->release();
                        CHECK_GL_ERROR_DEBUG();
                        break;
                    }else{
                        CCLOG("yuv420p shader program link failed");
                    }
                }else{
                    CCLOG("yuv420p shader program compile failed");
                }
            }else break;
        }
        CCLOG("YUVSprite::initWidthYUV420P yuv420p shader program init failed");
        return false;
    }
    //double t1 = cc_clock();
    /* 加载texture */
    if(CCSprite::init()){
        if(yuv){
            _width = w;
            _height = h;
            
            setContentSize(CCSize(w,h));
            CCRect rect = CCRectZero;
            rect.size = CCSize(w,h);
            setTextureRect(rect,false,rect.size);
            textureUniformY = glGetUniformLocation(_prog->getProgram(), "tex_y");
            textureUniformU = glGetUniformLocation(_prog->getProgram(), "tex_u");
            textureUniformV = glGetUniformLocation(_prog->getProgram(), "tex_v");
            
            borderUniformY = glGetUniformLocation(_prog->getProgram(), "yborder");
            borderUniformU = glGetUniformLocation(_prog->getProgram(), "uborder");
            borderUniformV = glGetUniformLocation(_prog->getProgram(), "vborder");
            
            _border[0] = (float)w/(float)linesize[0];
            _border[1] = (float)w/(2.0f*linesize[1]);
            _border[2] = (float)w/(2.0f*linesize[2]);
           // double t2 = cc_clock();
            glGenTextures(1, &id_y);
            glBindTexture(GL_TEXTURE_2D, id_y);
            glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, linesize[0], h, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, yuv[0]);
            glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
            glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
            
           // double t3 = cc_clock();
            glGenTextures(1, &id_u);
            glBindTexture(GL_TEXTURE_2D, id_u);
            glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE,linesize[1], h/2, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, yuv[1]);
            glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
            glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
            
           // double t4 = cc_clock();
            glGenTextures(1, &id_v);
            glBindTexture(GL_TEXTURE_2D, id_v);
            glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, linesize[2], h/2, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, yuv[2]);
            glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
            glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
            
           // double t5 = cc_clock();
           // CCLOG("prog %f, unif %f , y= %f , u=%f , v=%f",t1-t0,t2-t1,t3-t2,t4-t3,t5-t4);
            CHECK_GL_ERROR_DEBUG();

            textureDone = 1;
        }
        return true;
    }
    return false;
}