void LightEffect::prepareForRender(Sprite *sprite, Texture2D *normalmap) { auto gl = getGLProgramState(); gl->setUniformVec2("u_contentSize", sprite->getContentSize()); Point posRelToSprite = PointApplyAffineTransform(Point(_lightPos.x, _lightPos.y), sprite->getWorldToNodeAffineTransform()); gl->setUniformVec3("u_lightPos", Vec3(posRelToSprite.x, posRelToSprite.y, _lightPos.z)); gl->setUniformTexture("u_normals", normalmap); int opacity = sprite->getOpacity(); SpriteFrame *frame = sprite->getSpriteFrame(); Size untrimmedSize = frame->getOriginalSize(); Size trimmedSize = frame->getRect().size; Vec2 framePos = frame->getRect().origin; Size texSize = frame->getTexture()->getContentSize(); // set sprite position in sheet gl->setUniformVec2("u_spritePosInSheet", Vec2(framePos.x / texSize.width, framePos.y / texSize.height)); gl->setUniformVec2("u_spriteSizeRelToSheet", Vec2(untrimmedSize.width / texSize.width, untrimmedSize.height / texSize.height)); gl->setUniformInt("u_spriteRotated", frame->isRotated()); gl->setUniformFloat("u_spriteOpacity", (float)opacity / 255.0f); // set offset of trimmed sprite Vec2 bottomLeft = frame->getOffset() + (untrimmedSize - trimmedSize) / 2; Vec2 cornerOffset = frame->isRotated() ? Vec2(bottomLeft.y, bottomLeft.x) : Vec2(bottomLeft.x, untrimmedSize.height - trimmedSize.height - bottomLeft.y); gl->setUniformVec2("u_spriteOffset", cornerOffset); }
void BlockBase::initShader() { #if EDITOR_MODE == 0 auto shaderfile = FileUtils::getInstance()->fullPathForFilename("shaders/normal_vig.fsh"); // init shader GLchar * fragSource = (GLchar*)String::createWithContentsOfFile(shaderfile.c_str())->getCString(); auto program = GLProgram::createWithByteArrays(ccPositionTextureColor_noMVP_vert, fragSource); auto glProgramState = GLProgramState::getOrCreateWithGLProgram(program); float screenWidth = VisibleRect::getFrameSize().width; float screenHeight = VisibleRect::getFrameSize().height; mSprite->setGLProgramState(glProgramState); glProgramState->setUniformVec3("resolution", Vec3(screenWidth, screenHeight, 1.3)); #endif }