void RasterNode::blt(const glm::mat4& transform, const glm::vec2& destSize) { GLContext* pContext = GLContext::getCurrent(); FRect destRect; StandardShaderPtr pShader = pContext->getStandardShader(); float opacity = getEffectiveOpacity(); pContext->setBlendColor(glm::vec4(1.0f, 1.0f, 1.0f, opacity)); pShader->setAlpha(opacity); if (m_pFXNode) { pContext->setBlendMode(m_BlendMode, true); m_pFXNode->getTex()->activate(GL_TEXTURE0); pShader->setColorModel(0); pShader->disableColorspaceMatrix(); pShader->setGamma(glm::vec4(1.0f, 1.0f, 1.0f, 1.0f)); pShader->setPremultipliedAlpha(true); pShader->setMask(false); FRect relDestRect = m_pFXNode->getRelDestRect(); destRect = FRect(relDestRect.tl.x*destSize.x, relDestRect.tl.y*destSize.y, relDestRect.br.x*destSize.x, relDestRect.br.y*destSize.y); } else { m_pSurface->activate(getMediaSize()); pContext->setBlendMode(m_BlendMode, m_pSurface->isPremultipliedAlpha()); destRect = FRect(glm::vec2(0,0), destSize); } glm::vec3 pos(destRect.tl.x, destRect.tl.y, 0); glm::vec3 scaleVec(destRect.size().x, destRect.size().y, 1); glm::mat4 localTransform = glm::translate(transform, pos); localTransform = glm::scale(localTransform, scaleVec); pShader->setTransform(localTransform); pShader->activate(); m_pSubVA->draw(); }
void CameraNode::updateCameraImage() { if (!isAutoUpdateCameraImage()) { m_pCurBmp = m_pCamera->getImage(false); blt32(getTransform(), getSize(), getEffectiveOpacity(), getBlendMode()); } }
void CameraNode::render() { if (m_bIsPlaying) { ScopeTimer Timer(CameraProfilingZone); blt32(getTransform(), getSize(), getEffectiveOpacity(), getBlendMode()); } }
void VectorNode::render() { ScopeTimer timer(RenderProfilingZone); float curOpacity = getEffectiveOpacity(); if (curOpacity > 0.01) { m_pShape->draw(m_Transform, curOpacity); } }
void DivNode::preRender(const VertexArrayPtr& pVA, bool bIsParentActive, float parentEffectiveOpacity) { Node::preRender(pVA, bIsParentActive, parentEffectiveOpacity); if (getCrop() && getSize() != glm::vec2(0,0)) { pVA->startSubVA(m_ClipVA); glm::vec2 viewport = getSize(); m_ClipVA.appendPos(glm::vec2(0,0), glm::vec2(0,0), Pixel32(0,0,0,0)); m_ClipVA.appendPos(glm::vec2(0,viewport.y), glm::vec2(0,0), Pixel32(0,0,0,0)); m_ClipVA.appendPos(glm::vec2(viewport.x,0), glm::vec2(0,0), Pixel32(0,0,0,0)); m_ClipVA.appendPos(viewport, glm::vec2(0,0), Pixel32(0,0,0,0)); m_ClipVA.appendQuadIndexes(0, 1, 2, 3); } for (unsigned i = 0; i < getNumChildren(); i++) { getChild(i)->preRender(pVA, bIsParentActive, getEffectiveOpacity()); } }
bool FilledVectorNode::isVisible() const { return getEffectiveActive() && (getEffectiveOpacity() > 0.01 || getParent()->getEffectiveOpacity()*m_FillOpacity > 0.01); }