示例#1
0
void Utils::addGray(Sprite* sp)
{
    //return;
    GLProgram * p = new GLProgram();
    //GLProgram* p = GLProgramCache::getInstance()->getGLProgram(GLProgram::SHADER_NAME_POSITION_TEXTURE_COLOR);
    p->initWithFilenames("gray.vsh", "gray.fsh");
    p->bindAttribLocation(GLProgram::ATTRIBUTE_NAME_POSITION, GLProgram::VERTEX_ATTRIB_POSITION);
    p->bindAttribLocation(GLProgram::ATTRIBUTE_NAME_COLOR, GLProgram::VERTEX_ATTRIB_COLOR);
    p->bindAttribLocation(GLProgram::ATTRIBUTE_NAME_TEX_COORD, GLProgram::VERTEX_ATTRIB_TEX_COORDS);
    p->link();
    p->updateUniforms();
    sp->setGLProgram(p);
}
示例#2
0
void ToolFunc::graySprite(cocos2d::ui::ImageView* sprite)
{
	if(sprite)  
	{  
		GLProgram * p = new GLProgram();  
		p->initWithFilenames("Shader/gray.vsh", "Shader/gray.fsh");  
		p->bindAttribLocation(GLProgram::ATTRIBUTE_NAME_POSITION, GLProgram::VERTEX_ATTRIB_POSITION);  
		p->bindAttribLocation(GLProgram::ATTRIBUTE_NAME_COLOR, GLProgram::VERTEX_ATTRIB_COLOR);  
		p->bindAttribLocation(GLProgram::ATTRIBUTE_NAME_TEX_COORD, GLProgram::VERTEX_ATTRIB_TEX_COORDS);  
		p->link();  
		p->updateUniforms();  
		sprite->setShaderProgram(p);  
	} 
}
示例#3
0
void FSprite::InitShader(const std::string& alpha_file)
{
#ifdef ETC1
    //Shader
    GLProgram* glp = new GLProgram();
    glp->autorelease();
    
    glp->initWithFilenames("testv.vsh", "test.fsh");
    glp->bindAttribLocation(GLProgram::ATTRIBUTE_NAME_POSITION, GLProgram::VERTEX_ATTRIB_POSITION);
    glp->bindAttribLocation(GLProgram::ATTRIBUTE_NAME_COLOR, GLProgram::VERTEX_ATTRIB_COLOR);
    glp->bindAttribLocation(GLProgram::ATTRIBUTE_NAME_TEX_COORD, GLProgram::VERTEX_ATTRIB_TEX_COORD);
    glp->link();
    glp->updateUniforms();
    
    opacity_location_ = glGetUniformLocation(glp->getProgram(), "u_opacity");
    
    current_alpha_file_ = alpha_file;
    
//  #pragma message WARN("getTextureForKey or someth else, texture should be added on loading scene, do not add (cocos should check that anyway but still dont do it)  all the time!!")
    Texture2D* tex = Director::getInstance()->getTextureCache()->addImage(alpha_file);
	setBlendFunc(BlendFunc({ GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA }));
    //setBlendFunc((BlendFunc) { GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA });
    
    GLProgramState* glprogramstate = GLProgramState::getOrCreateWithGLProgram(glp);
    
    setGLProgramState(glprogramstate);
    
    glprogramstate->setUniformFloat(opacity_location_, (float)getOpacity()/255.0);
    
    glprogramstate->setUniformTexture("u_texture1", tex);
    

    
    setGLProgram(glp);
#endif
}
示例#4
0
// on "init" you need to initialize your instance
bool HelloWorld::init()
{
    //////////////////////////////
    // 1. super init first
    if ( !Layer::init() )
    {
        return false;
    }
    
    Size visibleSize = Director::getInstance()->getVisibleSize();
    Vec2 origin = Director::getInstance()->getVisibleOrigin();

    /////////////////////////////
    // 2. add a menu item with "X" image, which is clicked to quit the program
    //    you may modify it.

    // add a "close" icon to exit the progress. it's an autorelease object
    auto closeItem = MenuItemImage::create(
                                           "CloseNormal.png",
                                           "CloseSelected.png",
                                           CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));
    
	closeItem->setPosition(Vec2(origin.x + visibleSize.width - closeItem->getContentSize().width/2 ,
                                origin.y + closeItem->getContentSize().height/2));

    // create menu, it's an autorelease object
    auto menu = Menu::create(closeItem, NULL);
    menu->setPosition(Vec2::ZERO);
    this->addChild(menu, 1);

    /////////////////////////////
    // 3. add your codes below...

    // add a label shows "Hello World"
    // create and initialize a label
    
    auto label = LabelTTF::create("Hello World", "Arial", 24);
    
    // position the label on the center of the screen
    label->setPosition(Vec2(origin.x + visibleSize.width/2,
                            origin.y + visibleSize.height - label->getContentSize().height));

    // add the label as a child to this layer
    this->addChild(label, 1);

    // add "HelloWorld" splash screen"
    auto sprite = Sprite::create("HelloWorld.png");

    // position the sprite on the center of the screen
    sprite->setPosition(Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));

    auto _gridNodeTarget = NodeGrid::create();
    _gridNodeTarget->addChild(sprite);
    this->addChild(_gridNodeTarget);
    // add the sprite as a child to this layer
//    this->addChild(sprite, 0);
    
    GLProgram* shader = new GLProgram();
    sprite->setGLProgram(shader);
    shader->initWithFilenames("sepia.vsh", "sepia.fsh");
    shader->bindAttribLocation(GLProgram::ATTRIBUTE_NAME_POSITION, GLProgram::VERTEX_ATTRIB_POSITION);
    shader->bindAttribLocation(GLProgram::ATTRIBUTE_NAME_TEX_COORD, GLProgram::VERTEX_ATTRIB_TEX_COORD);
    shader->link();
    shader->updateUniforms();
    
    shader->setUniformLocationWith1i(shader->getUniformLocationForName("u_enableSepia"), true);
    shader->setUniformLocationWith1i(shader->getUniformLocationForName("u_enableGray"), true);

    auto action = Waves3D::create(10, Size(15,10), 5, 40);;
    _gridNodeTarget->runAction(RepeatForever::create(action));
//	CCSprite *sprite = [CCSprite spriteWithImageNamed:@"Rocks.png"];
//	sprite.shader = [CCShader shaderNamed:self.shaderName];
//	
//	sprite.shaderUniforms[@"u_CausticTexture"] = [CCTexture textureWithFile:@"Caustic.png"];
//	
//	CCTexture *noise = [CCTexture textureWithFile:@"BisectionNoise.png"];
//	noise.texParameters = &(ccTexParams){GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT};
//	sprite.shaderUniforms[@"u_NoiseTexture"] = noise;
    
//    auto texture0 = Director::getInstance()->getTextureCache()->addImage("Images/grossini_dance_atlas.png");
//    texture0->generateMipmap();
//    Texture2D::TexParams texParams = { GL_LINEAR_MIPMAP_LINEAR, GL_LINEAR, GL_CLAMP_TO_EDGE, GL_CLAMP_TO_EDGE };
//    texture0->setTexParameters(texParams);
    
    return true;
}
示例#5
0
void Skin::setSkinEffectShaderProgram()
{
	switch (_effectType)
	{
	case cocostudio::SkinEffect_None: setShaderProgram(ShaderCache::getInstance()->getProgram(GLProgram::SHADER_NAME_POSITION_TEXTURE_COLOR_NO_MVP));break;
	case cocostudio::SkinEffect_Grey:
		{
			const GLchar* fragSource = SkinEffectShader_Grey;
			GLProgram* program = new GLProgram();
			program->initWithByteArrays(ccPositionTextureColor_vert, fragSource);
			setShaderProgram(program);
			program->release();

			CHECK_GL_ERROR_DEBUG();

			program->bindAttribLocation(GLProgram::ATTRIBUTE_NAME_POSITION, GLProgram::VERTEX_ATTRIB_POSITION);
			program->bindAttribLocation(GLProgram::ATTRIBUTE_NAME_COLOR, GLProgram::VERTEX_ATTRIB_COLOR);
			program->bindAttribLocation(GLProgram::ATTRIBUTE_NAME_TEX_COORD, GLProgram::VERTEX_ATTRIB_TEX_COORDS);

			CHECK_GL_ERROR_DEBUG();

			program->link();

			CHECK_GL_ERROR_DEBUG();

			program->updateUniforms();

			CHECK_GL_ERROR_DEBUG();
		}
		break;
	case cocostudio::SkinEffect_Elite:
		{
			const GLchar* fragSource = SkinEffectShader_Elite;
			GLProgram* program = new GLProgram();
			program->initWithByteArrays(ccPositionTextureColor_vert, fragSource);
			setShaderProgram(program);
			program->release();

			CHECK_GL_ERROR_DEBUG();

			program->bindAttribLocation(GLProgram::ATTRIBUTE_NAME_POSITION, GLProgram::VERTEX_ATTRIB_POSITION);
			program->bindAttribLocation(GLProgram::ATTRIBUTE_NAME_COLOR, GLProgram::VERTEX_ATTRIB_COLOR);
			program->bindAttribLocation(GLProgram::ATTRIBUTE_NAME_TEX_COORD, GLProgram::VERTEX_ATTRIB_TEX_COORDS);

			CHECK_GL_ERROR_DEBUG();

			program->link();

			CHECK_GL_ERROR_DEBUG();

			program->updateUniforms();

			CHECK_GL_ERROR_DEBUG();
		}
		break;
	case cocostudio::SkinEffect_HighLight:
		{
			const GLchar* fragSource = SkinEffectShader_HighLight;
			GLProgram* program = new GLProgram();
			program->initWithByteArrays(ccPositionTextureColor_vert, fragSource);
			setShaderProgram(program);
			program->release();

			CHECK_GL_ERROR_DEBUG();

			program->bindAttribLocation(GLProgram::ATTRIBUTE_NAME_POSITION, GLProgram::VERTEX_ATTRIB_POSITION);
			program->bindAttribLocation(GLProgram::ATTRIBUTE_NAME_COLOR, GLProgram::VERTEX_ATTRIB_COLOR);
			program->bindAttribLocation(GLProgram::ATTRIBUTE_NAME_TEX_COORD, GLProgram::VERTEX_ATTRIB_TEX_COORDS);

			CHECK_GL_ERROR_DEBUG();

			program->link();

			CHECK_GL_ERROR_DEBUG();

			program->updateUniforms();

			CHECK_GL_ERROR_DEBUG();
		}
		break;
	default:
		break;
	}
}