void ShaderNode::loadShaderVertex(const char *vert, const char *frag) { GLProgram *shader = new GLProgram(); shader->initWithVertexShaderFilename(vert, frag); shader->addAttribute("aVertex", GLProgram::VERTEX_ATTRIB_POSITION); shader->link(); shader->updateUniforms(); _uniformCenter = glGetUniformLocation(shader->getProgram(), "center"); _uniformResolution = glGetUniformLocation(shader->getProgram(), "resolution"); _uniformTime = glGetUniformLocation(shader->getProgram(), "time"); this->setShaderProgram(shader); shader->release(); }
void ShaderCache::loadDefaultShaders() { // Position Texture Color shader GLProgram *p = new GLProgram(); loadDefaultShader(p, kShaderType_PositionTextureColor); _programs->setObject(p, GLProgram::SHADER_NAME_POSITION_TEXTURE_COLOR); p->release(); // Position Texture Color alpha test p = new GLProgram(); loadDefaultShader(p, kShaderType_PositionTextureColorAlphaTest); _programs->setObject(p, GLProgram::SHADER_NAME_POSITION_TEXTURE_ALPHA_TEST); p->release(); // // Position, Color shader // p = new GLProgram(); loadDefaultShader(p, kShaderType_PositionColor); _programs->setObject(p, GLProgram::SHADER_NAME_POSITION_COLOR); p->release(); // // Position Texture shader // p = new GLProgram(); loadDefaultShader(p, kShaderType_PositionTexture); _programs->setObject(p, GLProgram::SHADER_NAME_POSITION_TEXTURE); p->release(); // // Position, Texture attribs, 1 Color as uniform shader // p = new GLProgram(); loadDefaultShader(p, kShaderType_PositionTexture_uColor); _programs->setObject(p ,GLProgram::SHADER_NAME_POSITION_TEXTURE_U_COLOR); p->release(); // // Position Texture A8 Color shader // p = new GLProgram(); loadDefaultShader(p, kShaderType_PositionTextureA8Color); _programs->setObject(p, GLProgram::SHADER_NAME_POSITION_TEXTURE_A8_COLOR); p->release(); // // Position and 1 color passed as a uniform (to simulate glColor4ub ) // p = new GLProgram(); loadDefaultShader(p, kShaderType_Position_uColor); _programs->setObject(p, GLProgram::SHADER_NAME_POSITION_U_COLOR); p->release(); // // Position, Legth(TexCoords, Color (used by Draw Node basically ) // p = new GLProgram(); loadDefaultShader(p, kShaderType_PositionLengthTexureColor); _programs->setObject(p, GLProgram::SHADER_NAME_POSITION_LENGTH_TEXTURE_COLOR); p->release(); }
// 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(); auto center = Point(visibleSize.width / 2 + origin.x, visibleSize.height / 2 + origin.y); auto bg = Sprite::create("bg.png"); bg->setPosition(center); auto bgsize = bg->getContentSize(); float scaleX = visibleSize.width / bgsize.width; float scaleY = visibleSize.height / bgsize.height; bg->setScaleX(scaleX); bg->setScaleY(scaleY); addChild(bg); auto grass = Sprite::create("grass.png"); grass->setAnchorPoint(ccp(0.5, 0.5)); grass->setPosition(center); addChild(grass); Texture2D::TexParams p; p.minFilter = GL_LINEAR; p.magFilter = GL_LINEAR; p.wrapS = GL_REPEAT; p.wrapT = GL_REPEAT; glActiveTexture(GL_TEXTURE0); auto textureCache = Director::getInstance()->getTextureCache(); auto tex1 = textureCache->addImage("grass.png"); //tex1->setTexParameters(p); GLProgram* prog = new GLProgram(); prog->initWithFilenames("perlin_wind.vert", "perlin_wind.frag"); prog->retain(); prog->link(); prog->use(); prog->updateUniforms(); float gtime = Director::getInstance()->getDeltaTime(); float ctime = Director::getInstance()->getTotalFrames() * Director::getInstance()->getAnimationInterval(); //CCLog("Wind is %f", pnoise); ShaderCache::getInstance()->addGLProgram(prog, "perlin_wind"); grass->setGLProgram(prog); GLProgramState* state = GLProgramState::getOrCreateWithGLProgram(prog); //state->setUniformFloat("u_gtime", 1.0f); //state->setUniformFloat("u_ctime",0.5f); //state->setUniformFloat("u_color", m_cloudAmount); state->setUniformFloat("u_wind", 0); schedule(schedule_selector(HelloWorld::setWind)); prog->release(); schedule(schedule_selector(HelloWorld::setWind)); return true; }
// 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(); Point 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(Point(origin.x + visibleSize.width - closeItem->getContentSize().width/2 , origin.y + closeItem->getContentSize().height/2)); auto menu = Menu::create(closeItem, NULL); menu->setPosition(Point::ZERO); this->addChild(menu, 1); auto sprite = Sprite::create("HelloWorld.png"); sprite->setPosition(Point(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y)); this->addChild(sprite, 0); auto playSp = Sprite::create("general_right.png"); playSp->setPosition(Point(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y)); this->addChild(playSp); /*auto backgroundButton = Scale9Sprite::create("general_right.png"); auto titleButton = LabelTTF::create("", "Marker Felt", 30); ControlButton *button = ControlButton::create(titleButton, backgroundButton); button->setPosition(Point(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y)); button->setAdjustBackgroundImage(false); this->addChild(button);*/ GLchar * pszFragSource = "#ifdef GL_ES \n \ precision mediump float; \n \ #endif \n \ uniform sampler2D u_texture; \n \ varying vec2 v_texCoord; \n \ varying vec4 v_fragmentColor; \n \ void main(void) \n \ { \n \ // Convert to greyscale using NTSC weightings \n \ float grey = dot(texture2D(u_texture, v_texCoord).rgb, vec3(0.299, 0.587, 0.114)); \n \ gl_FragColor = vec4(grey, grey, grey, 1.0); \n \ }"; GLProgram* greyShader = new GLProgram(); greyShader->initWithVertexShaderByteArray(ccPositionTextureColor_vert, pszFragSource); greyShader->addAttribute(GLProgram::ATTRIBUTE_NAME_POSITION, GLProgram::VERTEX_ATTRIB_POSITION); greyShader->addAttribute(GLProgram::ATTRIBUTE_NAME_COLOR, GLProgram::VERTEX_ATTRIB_COLOR); greyShader->addAttribute(GLProgram::ATTRIBUTE_NAME_TEX_COORD, GLProgram::VERTEX_ATTRIB_TEX_COORDS); greyShader->link(); greyShader->updateUniforms(); //backgroundButton->setShaderProgram(greyShader); sprite->setShaderProgram(greyShader); playSp->setShaderProgram(greyShader); /*Array * children = button->getChildren(); for(int i = 0;i < children->count();i ++){ ((Node *)children->getObjectAtIndex(i))->setShaderProgram(greyShader); }*/ greyShader->release(); return true; }
void ShaderCache::loadDefaultShaders() { // Position Texture Color shader GLProgram *p = new GLProgram(); loadDefaultShader(p, kShaderType_PositionTextureColor); _programs->setObject(p, kShader_PositionTextureColor); p->release(); // Position Texture Color alpha test p = new GLProgram(); loadDefaultShader(p, kShaderType_PositionTextureColorAlphaTest); _programs->setObject(p, kShader_PositionTextureColorAlphaTest); p->release(); // // Position, Color shader // p = new GLProgram(); loadDefaultShader(p, kShaderType_PositionColor); _programs->setObject(p, kShader_PositionColor); p->release(); // // Position Texture shader // p = new GLProgram(); loadDefaultShader(p, kShaderType_PositionTexture); _programs->setObject(p, kShader_PositionTexture); p->release(); // // Position, Texture attribs, 1 Color as uniform shader // p = new GLProgram(); loadDefaultShader(p, kShaderType_PositionTexture_uColor); _programs->setObject(p ,kShader_PositionTexture_uColor); p->release(); // // Position Texture A8 Color shader // p = new GLProgram(); loadDefaultShader(p, kShaderType_PositionTextureA8Color); _programs->setObject(p, kShader_PositionTextureA8Color); p->release(); // // Position and 1 color passed as a uniform (to simulate glColor4ub ) // p = new GLProgram(); loadDefaultShader(p, kShaderType_Position_uColor); _programs->setObject(p, kShader_Position_uColor); p->release(); // // Position, Legth(TexCoords, Color (used by Draw Node basically ) // p = new GLProgram(); loadDefaultShader(p, kShaderType_PositionLengthTexureColor); _programs->setObject(p, kShader_PositionLengthTexureColor); p->release(); }
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; } }