void GLProgramCache::reloadDefaultGLPrograms() { // reset all programs and reload them // Position Texture Color shader GLProgram *p = getGLProgram(GLProgram::SHADER_NAME_POSITION_TEXTURE_COLOR); p->reset(); loadDefaultGLProgram(p, kShaderType_PositionTextureColor); // Position Texture Color without MVP shader p = getGLProgram(GLProgram::SHADER_NAME_POSITION_TEXTURE_COLOR_NO_MVP); p->reset(); loadDefaultGLProgram(p, kShaderType_PositionTextureColor_noMVP); // Position Texture Color alpha test p = getGLProgram(GLProgram::SHADER_NAME_POSITION_TEXTURE_ALPHA_TEST); p->reset(); loadDefaultGLProgram(p, kShaderType_PositionTextureColorAlphaTest); // Position Texture Color alpha test p = getGLProgram(GLProgram::SHADER_NAME_POSITION_TEXTURE_ALPHA_TEST_NO_MV); p->reset(); loadDefaultGLProgram(p, kShaderType_PositionTextureColorAlphaTestNoMV); // // Position, Color shader // p = getGLProgram(GLProgram::SHADER_NAME_POSITION_COLOR); p->reset(); loadDefaultGLProgram(p, kShaderType_PositionColor); // // Position, Color shader no MVP // p = getGLProgram(GLProgram::SHADER_NAME_POSITION_COLOR_NO_MVP); loadDefaultGLProgram(p, kShaderType_PositionColor_noMVP); // // Position Texture shader // p = getGLProgram(GLProgram::SHADER_NAME_POSITION_TEXTURE); p->reset(); loadDefaultGLProgram(p, kShaderType_PositionTexture); // // Position, Texture attribs, 1 Color as uniform shader // p = getGLProgram(GLProgram::SHADER_NAME_POSITION_TEXTURE_U_COLOR); p->reset(); loadDefaultGLProgram(p, kShaderType_PositionTexture_uColor); // // Position Texture A8 Color shader // p = getGLProgram(GLProgram::SHADER_NAME_POSITION_TEXTURE_A8_COLOR); p->reset(); loadDefaultGLProgram(p, kShaderType_PositionTextureA8Color); // // Position and 1 color passed as a uniform (to simulate glColor4ub ) // p = getGLProgram(GLProgram::SHADER_NAME_POSITION_U_COLOR); p->reset(); loadDefaultGLProgram(p, kShaderType_Position_uColor); // // Position, Legth(TexCoords, Color (used by Draw Node basically ) // p = getGLProgram(GLProgram::SHADER_NAME_POSITION_LENGTH_TEXTURE_COLOR); p->reset(); loadDefaultGLProgram(p, kShaderType_PositionLengthTexureColor); //p = getGLProgram(GLProgram::SHADER_NAME_LABEL_DISTANCEFIELD_NORMAL); //p->reset(); // loadDefaultGLProgram(p, kShaderType_LabelDistanceFieldNormal); p = getGLProgram(GLProgram::SHADER_NAME_LABEL_DISTANCEFIELD_GLOW); p->reset(); loadDefaultGLProgram(p, kShaderType_LabelDistanceFieldGlow); p = getGLProgram(GLProgram::SHADER_NAME_LABEL_NORMAL); p->reset(); loadDefaultGLProgram(p, kShaderType_LabelNormal); p = getGLProgram(GLProgram::SHADER_NAME_LABEL_OUTLINE); p->reset(); loadDefaultGLProgram(p, kShaderType_LabelOutline); p = getGLProgram(GLProgram::SHADER_3D_POSITION); p->reset(); loadDefaultGLProgram(p, kShaderType_3DPosition); p = getGLProgram(GLProgram::SHADER_3D_POSITION_TEXTURE); p->reset(); loadDefaultGLProgram(p, kShaderType_3DPositionTex); p = getGLProgram(GLProgram::SHADER_3D_SKINPOSITION_TEXTURE); p->reset(); loadDefaultGLProgram(p, kShaderType_3DSkinPositionTex); }
void Skeleton::onDraw(const Mat4 &transform, uint32_t flags) { getGLProgram()->use(); getGLProgram()->setUniformsForBuiltins(transform); GL::blendFunc(blendFunc.src, blendFunc.dst); Color3B color = getColor(); skeleton->r = color.r / (float)255; skeleton->g = color.g / (float)255; skeleton->b = color.b / (float)255; skeleton->a = getOpacity() / (float)255; if (premultipliedAlpha) { skeleton->r *= skeleton->a; skeleton->g *= skeleton->a; skeleton->b *= skeleton->a; } int additive = 0; TextureAtlas* textureAtlas = 0; V3F_C4B_T2F_Quad quad; quad.tl.vertices.z = 0; quad.tr.vertices.z = 0; quad.bl.vertices.z = 0; quad.br.vertices.z = 0; for (int i = 0, n = skeleton->slotCount; i < n; i++) { spSlot* slot = skeleton->drawOrder[i]; if (!slot->attachment || slot->attachment->type != ATTACHMENT_REGION) continue; spRegionAttachment* attachment = (spRegionAttachment*)slot->attachment; TextureAtlas* regionTextureAtlas = getTextureAtlas(attachment); if (slot->data->additiveBlending != additive) { if (textureAtlas) { textureAtlas->drawQuads(); textureAtlas->removeAllQuads(); } additive = !additive; GL::blendFunc(blendFunc.src, additive ? GL_ONE : blendFunc.dst); } else if (regionTextureAtlas != textureAtlas && textureAtlas) { textureAtlas->drawQuads(); textureAtlas->removeAllQuads(); } textureAtlas = regionTextureAtlas; setFittedBlendingFunc(textureAtlas); ssize_t quadCount = textureAtlas->getTotalQuads(); if (textureAtlas->getCapacity() == quadCount) { textureAtlas->drawQuads(); textureAtlas->removeAllQuads(); if (!textureAtlas->resizeCapacity(textureAtlas->getCapacity() * 2)) return; } spRegionAttachment_updateQuad(attachment, slot, &quad, premultipliedAlpha); textureAtlas->updateQuad(&quad, quadCount); } if (textureAtlas) { textureAtlas->drawQuads(); textureAtlas->removeAllQuads(); } if(debugBones || debugSlots) { Director* director = Director::getInstance(); CCASSERT(nullptr != director, "Director is null when seting matrix stack"); director->pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW); director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW, transform); if (debugSlots) { // Slots. DrawPrimitives::setDrawColor4B(0, 0, 255, 255); glLineWidth(1); Vec2 points[4]; V3F_C4B_T2F_Quad tmpQuad; for (int i = 0, n = skeleton->slotCount; i < n; i++) { spSlot* slot = skeleton->drawOrder[i]; if (!slot->attachment || slot->attachment->type != ATTACHMENT_REGION) continue; spRegionAttachment* attachment = (spRegionAttachment*)slot->attachment; spRegionAttachment_updateQuad(attachment, slot, &tmpQuad); points[0] = Vec2(tmpQuad.bl.vertices.x, tmpQuad.bl.vertices.y); points[1] = Vec2(tmpQuad.br.vertices.x, tmpQuad.br.vertices.y); points[2] = Vec2(tmpQuad.tr.vertices.x, tmpQuad.tr.vertices.y); points[3] = Vec2(tmpQuad.tl.vertices.x, tmpQuad.tl.vertices.y); DrawPrimitives::drawPoly(points, 4, true); } } if (debugBones) { // Bone lengths. glLineWidth(2); DrawPrimitives::setDrawColor4B(255, 0, 0, 255); for (int i = 0, n = skeleton->boneCount; i < n; i++) { spBone *bone = skeleton->bones[i]; float x = bone->data->length * bone->m00 + bone->worldX; float y = bone->data->length * bone->m10 + bone->worldY; DrawPrimitives::drawLine(Vec2(bone->worldX, bone->worldY), Vec2(x, y)); } // Bone origins. DrawPrimitives::setPointSize(4); DrawPrimitives::setDrawColor4B(0, 0, 255, 255); // Root bone is blue. for (int i = 0, n = skeleton->boneCount; i < n; i++) { spBone *bone = skeleton->bones[i]; DrawPrimitives::drawPoint(Vec2(bone->worldX, bone->worldY)); if (i == 0) DrawPrimitives::setDrawColor4B(0, 255, 0, 255); } } director->popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW); } }
void GLProgramCache::reloadDefaultGLPrograms() { // reset all programs and reload them // Position Texture Color shader GLProgram *p = getGLProgram(GLProgram::SHADER_NAME_POSITION_TEXTURE_COLOR); p->reset(); loadDefaultGLProgram(p, kShaderType_PositionTextureColor); // Position Texture Color without MVP shader p = getGLProgram(GLProgram::SHADER_NAME_POSITION_TEXTURE_COLOR_NO_MVP); p->reset(); loadDefaultGLProgram(p, kShaderType_PositionTextureColor_noMVP); // Position Texture Color alpha test p = getGLProgram(GLProgram::SHADER_NAME_POSITION_TEXTURE_ALPHA_TEST); p->reset(); loadDefaultGLProgram(p, kShaderType_PositionTextureColorAlphaTest); // Position Texture Color alpha test p = getGLProgram(GLProgram::SHADER_NAME_POSITION_TEXTURE_ALPHA_TEST_NO_MV); p->reset(); loadDefaultGLProgram(p, kShaderType_PositionTextureColorAlphaTestNoMV); // // Position, Color shader // p = getGLProgram(GLProgram::SHADER_NAME_POSITION_COLOR); p->reset(); loadDefaultGLProgram(p, kShaderType_PositionColor); // Position, Color, PointSize shader p = getGLProgram(GLProgram::SHADER_NAME_POSITION_COLOR_TEXASPOINTSIZE); p->reset(); loadDefaultGLProgram(p, kShaderType_PositionColorTextureAsPointsize); // // Position, Color shader no MVP // p = getGLProgram(GLProgram::SHADER_NAME_POSITION_COLOR_NO_MVP); p->reset(); loadDefaultGLProgram(p, kShaderType_PositionColor_noMVP); // // Position Texture shader // p = getGLProgram(GLProgram::SHADER_NAME_POSITION_TEXTURE); p->reset(); loadDefaultGLProgram(p, kShaderType_PositionTexture); // // Position, Texture attribs, 1 Color as uniform shader // p = getGLProgram(GLProgram::SHADER_NAME_POSITION_TEXTURE_U_COLOR); p->reset(); loadDefaultGLProgram(p, kShaderType_PositionTexture_uColor); // // Position Texture A8 Color shader // p = getGLProgram(GLProgram::SHADER_NAME_POSITION_TEXTURE_A8_COLOR); p->reset(); loadDefaultGLProgram(p, kShaderType_PositionTextureA8Color); // // Position and 1 color passed as a uniform (to simulate glColor4ub ) // p = getGLProgram(GLProgram::SHADER_NAME_POSITION_U_COLOR); p->reset(); loadDefaultGLProgram(p, kShaderType_Position_uColor); // // Position, Legth(TexCoords, Color (used by Draw Node basically ) // p = getGLProgram(GLProgram::SHADER_NAME_POSITION_LENGTH_TEXTURE_COLOR); p->reset(); loadDefaultGLProgram(p, kShaderType_PositionLengthTexureColor); #if CC_TARGET_PLATFORM != CC_PLATFORM_WP8 p = getGLProgram(GLProgram::SHADER_NAME_LABEL_DISTANCEFIELD_NORMAL); p->reset(); loadDefaultGLProgram(p, kShaderType_LabelDistanceFieldNormal); p = getGLProgram(GLProgram::SHADER_NAME_LABEL_DISTANCEFIELD_GLOW); p->reset(); loadDefaultGLProgram(p, kShaderType_LabelDistanceFieldGlow); #endif p = getGLProgram(GLProgram::SHADER_NAME_POSITION_GRAYSCALE); p->reset(); loadDefaultGLProgram(p, kShaderType_UIGrayScale); p = getGLProgram(GLProgram::SHADER_NAME_LABEL_NORMAL); p->reset(); loadDefaultGLProgram(p, kShaderType_LabelNormal); p = getGLProgram(GLProgram::SHADER_NAME_LABEL_OUTLINE); p->reset(); loadDefaultGLProgram(p, kShaderType_LabelOutline); p = getGLProgram(GLProgram::SHADER_NAME_GRADIENT_LABEL_OUTLINE); p->reset(); loadDefaultGLProgram(p, kShaderType_GradientLabelOutline); p = getGLProgram(GLProgram::SHADER_3D_POSITION); p->reset(); loadDefaultGLProgram(p, kShaderType_3DPosition); p = getGLProgram(GLProgram::SHADER_3D_POSITION_TEXTURE); p->reset(); loadDefaultGLProgram(p, kShaderType_3DPositionTex); p = getGLProgram(GLProgram::SHADER_3D_SKINPOSITION_TEXTURE); p->reset(); loadDefaultGLProgram(p, kShaderType_3DSkinPositionTex); p = getGLProgram(GLProgram::SHADER_3D_POSITION_NORMAL); p->reset(); loadDefaultGLProgram(p, kShaderType_3DPositionNormal); p = getGLProgram(GLProgram::SHADER_3D_POSITION_NORMAL_TEXTURE); p->reset(); loadDefaultGLProgram(p, kShaderType_3DPositionNormalTex); p = getGLProgram(GLProgram::SHADER_3D_SKINPOSITION_NORMAL_TEXTURE); p->reset(); loadDefaultGLProgram(p, kShaderType_3DSkinPositionNormalTex); p = getGLProgram(GLProgram::SHADER_3D_PARTICLE_TEXTURE); p->reset(); loadDefaultGLProgram(p, kShaderType_3DParticleTex); p = getGLProgram(GLProgram::SHADER_3D_PARTICLE_COLOR); p->reset(); loadDefaultGLProgram(p, kShaderType_3DParticleColor); p = getGLProgram(GLProgram::SHADER_3D_SKYBOX); p->reset(); loadDefaultGLProgram(p, kShaderType_3DSkyBox); p = getGLProgram(GLProgram::SHADER_3D_TERRAIN); p->reset(); loadDefaultGLProgram(p, kShaderType_3DTerrain); }
void OpenGL1::onDraw(){ Size visibleSize = Director::getInstance()->getVisibleSize(); // add your codes here... /*! * @author wuxingogo, 15-04-06 00:04:09 * * @brief 获得当前的着色器程序 * * @return nil */ auto glProgram = getGLProgram(); glProgram->use(); /*! * @author wuxingogo, 15-04-06 00:04:17 * * @brief set cocos2dx default shader */ glProgram->setUniformsForBuiltins(); auto size = Director::getInstance()->getWinSize(); /*! * @author wuxingogo, 15-04-06 00:04:48 * * @brief triangle vertex */ float vertex[] = { 0,0, size.width , 0, size.width / 2, size.height }; /*! * @author wuxingogo, 15-04-06 00:04:27 * * @brief color vertex */ float color[] = { 0,1,0,1, 1,0,0,1, 0,0,1,1 }; /*! * @author wuxingogo, 15-04-06 00:04:40 * * @brief set addtive GL Enable, the color and vertex. */ GL::enableVertexAttribs(GL::VERTEX_ATTRIB_FLAG_POSITION | GL::VERTEX_ATTRIB_FLAG_COLOR); glVertexAttribPointer(GLProgram::VERTEX_ATTRIB_POSITION, 2, GL_FLOAT, GL_FALSE, 0, vertex); glVertexAttribPointer(GLProgram::VERTEX_ATTRIB_COLOR, 4, GL_FLOAT, GL_FALSE, 0, color); glDrawArrays(GL_TRIANGLES, 0, 3); CC_INCREMENT_GL_DRAWN_BATCHES_AND_VERTICES(1, 3); CHECK_GL_ERROR_DEBUG(); }
Sprite *HelloWorld::spriteWithColor1(Color4F color1, Color4F color2, float texWidth, float texHeight, int nStripes) { RenderTexture *rt = RenderTexture::create(texWidth, texHeight); rt->beginWithClear(color1.r, color1.g, color1.b, color1.a); // 3: Draw into the texture // You'll add this later setGLProgramState(cocos2d::GLProgramState::getOrCreateWithGLProgramName(cocos2d::GLProgram::SHADER_NAME_POSITION_TEXTURE_COLOR_NO_MVP)); _customCommand.init(_globalZOrder); _customCommand.func = [texWidth, texHeight, nStripes, color2, this]() { Vec2 *vertices = new Vec2[6*nStripes]; Color4F *colors = new Color4F[6*nStripes]; int nVertices = 0; float x1 = -texHeight; float x2; float y1 = texHeight; float y2 = 0; float dx = texWidth / nStripes * 2; float stripeWidth = dx/2; for (int i=0; i<nStripes; i++) { x2 = x1 + texHeight; vertices[nVertices] = Vec2 {x1, y1}; colors[nVertices++] = Color4F{color2.r, color2.g, color2.b, color2.a}; vertices[nVertices] = Vec2 {x1+stripeWidth, y1}; colors[nVertices++] = Color4F {color2.r, color2.g, color2.b, color2.a}; vertices[nVertices] = Vec2 {x2, y2}; colors[nVertices++] = Color4F {color2.r, color2.g, color2.b, color2.a}; vertices[nVertices] = vertices[nVertices-2]; colors[nVertices++] = Color4F {color2.r, color2.g, color2.b, color2.a}; vertices[nVertices] = vertices[nVertices-2]; colors[nVertices++] = Color4F {color2.r, color2.g, color2.b, color2.a}; vertices[nVertices] = Vec2 {x2+stripeWidth, y2}; colors[nVertices++] = Color4F {color2.r, color2.g, color2.b, color2.a}; x1 += dx; } getGLProgram()->use(); getGLProgram()->setUniformsForBuiltins(); cocos2d::GL::enableVertexAttribs(cocos2d::GL::VERTEX_ATTRIB_FLAG_POSITION | cocos2d::GL::VERTEX_ATTRIB_FLAG_COLOR); // glBindBuffer(GL_ARRAY_BUFFER, 0); glVertexAttribPointer(cocos2d::GLProgram::VERTEX_ATTRIB_POSITION, 2, GL_FLOAT, GL_FALSE, 0, vertices); glVertexAttribPointer(cocos2d::GLProgram::VERTEX_ATTRIB_COLOR, 4, GL_FLOAT, GL_TRUE, 0, colors); glDrawArrays(GL_TRIANGLES, 0, (GLsizei)nVertices); float gradientAlpha = 0.7f; nVertices = 0; vertices[nVertices] = Vec2 {0, 0}; colors[nVertices++] = Color4F {0, 0, 0, 0 }; vertices[nVertices] = Vec2 {texWidth, 0}; colors[nVertices++] = Color4F {0, 0, 0, 0}; vertices[nVertices] = Vec2 {0, texHeight}; colors[nVertices++] = Color4F {0, 0, 0, gradientAlpha}; vertices[nVertices] = Vec2 {texWidth, texHeight}; colors[nVertices++] = Color4F {0, 0, 0, gradientAlpha}; glVertexAttribPointer(cocos2d::GLProgram::VERTEX_ATTRIB_POSITION, 2, GL_FLOAT, GL_FALSE, 0, vertices); glVertexAttribPointer(cocos2d::GLProgram::VERTEX_ATTRIB_COLOR, 4, GL_FLOAT, GL_FALSE, 0, colors); // glBlendFunc(CC_BLEND_SRC, CC_BLEND_DST); cocos2d::GL::blendFunc(CC_BLEND_SRC, CC_BLEND_DST); glDrawArrays(GL_TRIANGLE_STRIP, 0, (GLsizei)nVertices); // layer 3: top highlight float borderHeight = texHeight/16; float borderAlpha = 0.3f; nVertices = 0; vertices[nVertices] = Vec2 {0, 0}; colors[nVertices++] = Color4F {1, 1, 1, borderAlpha}; vertices[nVertices] = Vec2 {texWidth, 0}; colors[nVertices++] = Color4F {1, 1, 1, borderAlpha}; vertices[nVertices] = Vec2 {0, borderHeight}; colors[nVertices++] = Color4F {0, 0, 0, 0}; vertices[nVertices] = Vec2 {texWidth, borderHeight}; colors[nVertices++] = Color4F {0, 0, 0, 0}; glVertexAttribPointer(cocos2d::GLProgram::VERTEX_ATTRIB_POSITION, 2, GL_FLOAT, GL_FALSE, 0, vertices); glVertexAttribPointer(cocos2d::GLProgram::VERTEX_ATTRIB_COLOR, 4, GL_FLOAT, GL_FALSE, 0, colors); glBlendFunc(CC_BLEND_SRC, CC_BLEND_DST); glDrawArrays(GL_TRIANGLE_STRIP, 0, (GLsizei)nVertices); CC_SAFE_DELETE_ARRAY(vertices); CC_SAFE_DELETE_ARRAY(colors); }; auto renderer = Director::getInstance()->getRenderer(); renderer->addCommand(&_customCommand); Sprite *noise = Sprite::create("Noise-iphone5hd.png"); noise->setBlendFunc(BlendFunc {GL_DST_COLOR, GL_ZERO}); noise->setPosition(texWidth/2, texHeight/2); noise->visit(); rt->end(); return Sprite::createWithTexture(rt->getSprite()->getTexture()); }
uint32_t GAFMovieClip::setUniforms() { #if GAF_ENABLE_NEW_UNIFORM_SETTER #define getUniformId(x) GAFShaderManager::getUniformLocation(x) #else #define getUniformId(x) GAFShaderManager::getUniformName(x) #endif #if CHECK_CTX_IDENTITY const bool ctx = hasCtx(); #else const bool ctx = false; #endif GLProgramState* state = getGLProgramState(); GAFMovieClipHash hash; memset(&hash, 0, sizeof(GAFMovieClipHash)); hash.program = getGLProgram()->getProgram(); hash.texture = _texture->getName(); hash.blend = _blendFunc; if (!ctx) { Color4F color(m_colorTransformMult.x, m_colorTransformMult.y, m_colorTransformMult.z, m_colorTransformMult.w); setColor(Color3B(color)); setOpacity(static_cast<GLubyte>(color.a * 255.0f)); } else { { hash.a = m_colorTransformMult; hash.b = m_colorTransformOffsets; state->setUniformVec4( getUniformId(GAFShaderManager::EUniforms::ColorTransformMult), m_colorTransformMult); state->setUniformVec4( getUniformId(GAFShaderManager::EUniforms::ColorTransformOffset), m_colorTransformOffsets); } if (!m_colorMatrixFilterData) { hash.d = cocos2d::Mat4::IDENTITY; hash.e = cocos2d::Vec4::ZERO; state->setUniformMat4( getUniformId(GAFShaderManager::EUniforms::ColorMatrixBody), cocos2d::Mat4::IDENTITY); state->setUniformVec4( getUniformId(GAFShaderManager::EUniforms::ColorMatrixAppendix), cocos2d::Vec4::ZERO); } else { hash.d = Mat4(m_colorMatrixFilterData->matrix); hash.e = Vec4(m_colorMatrixFilterData->matrix2); state->setUniformMat4( getUniformId(GAFShaderManager::EUniforms::ColorMatrixBody), Mat4(m_colorMatrixFilterData->matrix)); state->setUniformVec4( getUniformId(GAFShaderManager::EUniforms::ColorMatrixAppendix), Vec4(m_colorMatrixFilterData->matrix2)); } } return XXH32((void*)&hash, sizeof(GAFMovieClipHash), 0); }
void Label::onDraw(const Mat4& transform, bool transformUpdated) { // Optimization: Fast Dispatch if( _textureAtlas == NULL || (_batchNodes.size() == 1 && _textureAtlas->getTotalQuads() == 0) ) { return; } auto glprogram = getGLProgram(); glprogram->use(); GL::blendFunc( _blendFunc.src, _blendFunc.dst ); if (_shadowEnabled) { if (_currentLabelType == LabelType::TTF) { glprogram->setUniformLocationWith4f(_uniformTextColor, _shadowColor4F.r, _shadowColor4F.g, _shadowColor4F.b, _shadowColor4F.a); if (_currLabelEffect == LabelEffect::OUTLINE || _currLabelEffect == LabelEffect::GLOW) { glprogram->setUniformLocationWith4f(_uniformEffectColor, _shadowColor4F.r, _shadowColor4F.g, _shadowColor4F.b, _shadowColor4F.a); } getGLProgram()->setUniformsForBuiltins(_shadowTransform); for (const auto &child : _children) { child->updateTransform(); } for (const auto& batchNode : _batchNodes) { batchNode->getTextureAtlas()->drawQuads(); } } else { Color3B oldColor = _realColor; GLubyte oldOPacity = _displayedOpacity; _displayedOpacity = _shadowOpacity; setColor(_shadowColor3B); getGLProgram()->setUniformsForBuiltins(_shadowTransform); for (const auto &child : _children) { child->updateTransform(); } for (const auto& batchNode : _batchNodes) { batchNode->getTextureAtlas()->drawQuads(); } _displayedOpacity = oldOPacity; setColor(oldColor); } } glprogram->setUniformsForBuiltins(transform); for(const auto &child: _children) { child->updateTransform(); } if (_currentLabelType == LabelType::TTF) { switch (_currLabelEffect) { case LabelEffect::OUTLINE: //draw text with outline glprogram->setUniformLocationWith4f(_uniformTextColor, _textColorF.r,_textColorF.g,_textColorF.b,_textColorF.a); glprogram->setUniformLocationWith4f(_uniformEffectColor, _effectColorF.r, _effectColorF.g, _effectColorF.b, _effectColorF.a); for (const auto& batchNode:_batchNodes) { batchNode->getTextureAtlas()->drawQuads(); } //draw text without outline glprogram->setUniformLocationWith4f(_uniformEffectColor, _effectColorF.r, _effectColorF.g, _effectColorF.b, 0.f); break; case LabelEffect::GLOW: glprogram->setUniformLocationWith4f(_uniformEffectColor, _effectColorF.r, _effectColorF.g, _effectColorF.b, _effectColorF.a); case LabelEffect::NORMAL: glprogram->setUniformLocationWith4f(_uniformTextColor, _textColorF.r,_textColorF.g,_textColorF.b,_textColorF.a); break; default: break; } } for (const auto& batchNode:_batchNodes) { batchNode->getTextureAtlas()->drawQuads(); } }
void Atlas1::onDraw(const Mat4 &transform, uint32_t flags) { getGLProgram()->use(); getGLProgram()->setUniformsForBuiltins(transform); _textureAtlas->drawQuads(); }