void DivNode::renderOutlines(const VertexArrayPtr& pVA, Pixel32 color) { Pixel32 effColor = color; if (m_ElementOutlineColor != Pixel32(0,0,0,0)) { effColor = m_ElementOutlineColor; effColor.setA(128); } if (effColor != Pixel32(0,0,0,0)) { glm::vec2 size = getSize(); if (size == glm::vec2(DEFAULT_SIZE, DEFAULT_SIZE)) { glm::vec2 p0 = getAbsPos(glm::vec2(-4, 0.5)); glm::vec2 p1 = getAbsPos(glm::vec2(5, 0.5)); glm::vec2 p2 = getAbsPos(glm::vec2(0.5, -4)); glm::vec2 p3 = getAbsPos(glm::vec2(0.5, 5)); pVA->addLineData(effColor, p0, p1, 1); pVA->addLineData(effColor, p2, p3, 1); } else { glm::vec2 p0 = getAbsPos(glm::vec2(0.5, 0.5)); glm::vec2 p1 = getAbsPos(glm::vec2(size.x+0.5,0.5)); glm::vec2 p2 = getAbsPos(glm::vec2(size.x+0.5,size.y+0.5)); glm::vec2 p3 = getAbsPos(glm::vec2(0.5,size.y+0.5)); pVA->addLineData(effColor, p0, p1, 1); pVA->addLineData(effColor, p1, p2, 1); pVA->addLineData(effColor, p2, p3, 1); pVA->addLineData(effColor, p3, p0, 1); } } for (unsigned i = 0; i < getNumChildren(); i++) { getChild(i)->renderOutlines(pVA, effColor); } }
void AreaNode::renderOutlines(const VertexArrayPtr& pVA, Pixel32 parentColor) { Pixel32 effColor = getEffectiveOutlineColor(parentColor); if (effColor != Pixel32(0,0,0,0)) { glm::vec2 size = getSize(); glm::vec2 p0 = getAbsPos(glm::vec2(0.5, 0.5)); glm::vec2 p1 = getAbsPos(glm::vec2(size.x+0.5,0.5)); glm::vec2 p2 = getAbsPos(glm::vec2(size.x+0.5,size.y+0.5)); glm::vec2 p3 = getAbsPos(glm::vec2(0.5,size.y+0.5)); pVA->addLineData(effColor, p0, p1, 1); pVA->addLineData(effColor, p1, p2, 1); pVA->addLineData(effColor, p2, p3, 1); pVA->addLineData(effColor, p3, p0, 1); } }
void Canvas::renderOutlines(GLContext* pContext, const glm::mat4& transform) { VertexArrayPtr pVA = GLContextManager::get()->createVertexArray(); pVA->initForGLContext(pContext); pContext->setBlendMode(GLContext::BLEND_BLEND, false); m_pRootNode->renderOutlines(pVA, Pixel32(0,0,0,0)); StandardShader* pShader = pContext->getStandardShader(); pShader->setTransform(transform); pShader->setUntextured(); pShader->setAlpha(0.5f); pShader->activate(); if (pVA->getNumVerts() != 0) { pVA->draw(pContext); } }
void FilledVectorNode::preRender() { Node::preRender(); float curOpacity = getParent()->getEffectiveOpacity()*m_FillOpacity; VertexArrayPtr pFillVA; pFillVA = m_pFillShape->getVertexArray(); if (isDrawNeeded() || curOpacity != m_OldOpacity) { pFillVA->reset(); Pixel32 color = getFillColorVal(); calcFillVertexes(pFillVA, color); pFillVA->update(); m_OldOpacity = curOpacity; } VectorNode::preRender(); }
void Canvas::clip(const glm::mat4& transform, VertexArrayPtr pVA, GLenum stencilOp) { // Disable drawing to color buffer glColorMask(0, 0, 0, 0); // Enable drawing to stencil buffer glStencilMask(~0); // Draw clip rectangle into stencil buffer glStencilFunc(GL_ALWAYS, 0, 0); glStencilOp(stencilOp, stencilOp, stencilOp); StandardShaderPtr pShader = GLContext::getCurrent()->getStandardShader(); pShader->setUntextured(); pShader->activate(); glLoadMatrixf(glm::value_ptr(transform)); pVA->draw(); // Set stencil test to only let glStencilFunc(GL_LEQUAL, m_ClipLevel, ~0); glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); // Disable drawing to stencil buffer glStencilMask(0); // Enable drawing to color buffer glColorMask(~0, ~0, ~0, ~0); }
VertexArrayPtr RenderContext::createVertexArray(VertexDescription description, VertexBufferPtr buffer) { VertexArrayPtr vao = VertexArrayPtr(new VertexArray()); vao->bind(); buffer->bind(); int offset = 0; for(VertexDescriptionElement e : description) { if(e.shaderAttribLocation() != -1) { glVertexAttribPointer(e.shaderAttribLocation(), e.numberOfComponents(), (int)e.type(), GL_FALSE, description.sizeInBytes(), (char*)nullptr + offset); glEnableVertexAttribArray(e.shaderAttribLocation()); } offset += e.sizeInBytes(); } buffer->release(); vao->release(); return vao; }
void Shape::setVertexArray(const VertexArrayPtr& pVA) { pVA->startSubVA(m_SubVA); m_SubVA.appendVertexData(m_pVertexData); /* cerr << endl; cerr << "Global VA: " << endl; pVA->dump(); cerr << "Local vertex data: " << endl; m_pVertexData->dump(); */ }
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()); } }
void DivNode::renderOutlines(const VertexArrayPtr& pVA, Pixel32 parentColor) { Pixel32 effColor = getEffectiveOutlineColor(parentColor); if (effColor != Pixel32(0,0,0,0)) { glm::vec2 size = getSize(); if (size == glm::vec2(0,0)) { glm::vec2 p0 = getAbsPos(glm::vec2(-4, 0.5)); glm::vec2 p1 = getAbsPos(glm::vec2(5, 0.5)); glm::vec2 p2 = getAbsPos(glm::vec2(0.5, -4)); glm::vec2 p3 = getAbsPos(glm::vec2(0.5, 5)); pVA->addLineData(effColor, p0, p1, 1); pVA->addLineData(effColor, p2, p3, 1); } else { AreaNode::renderOutlines(pVA, parentColor); } } for (unsigned i = 0; i < getNumChildren(); i++) { getChild(i)->renderOutlines(pVA, effColor); } }
void RasterNode::calcVertexArray(const VertexArrayPtr& pVA) { if (isVisible() && m_pSurface->isCreated()) { if (!m_bHasStdVertices) { pVA->startSubVA(*m_pSubVA); for (unsigned y = 0; y < m_TileVertices.size()-1; y++) { for (unsigned x = 0; x < m_TileVertices[0].size()-1; x++) { int curVertex = m_pSubVA->getNumVerts(); m_pSubVA->appendPos(m_TileVertices[y][x], m_TexCoords[y][x], m_Color); m_pSubVA->appendPos(m_TileVertices[y][x+1], m_TexCoords[y][x+1], m_Color); m_pSubVA->appendPos(m_TileVertices[y+1][x+1], m_TexCoords[y+1][x+1], m_Color); m_pSubVA->appendPos(m_TileVertices[y+1][x], m_TexCoords[y+1][x], m_Color); m_pSubVA->appendQuadIndexes( curVertex+1, curVertex, curVertex+2, curVertex+3); } } } } }
void Renderer::DrawVertexArray(VertexArrayPtr vertArray) { vertArray->SetActive(); glDrawElements(GL_TRIANGLES, vertArray->GetIndexCount(), GL_UNSIGNED_INT, nullptr); }
void Renderer::DrawVertexArray(VertexArrayPtr vertArray) { vertArray->SetActive(); mGraphicsDriver->DrawIndexed(vertArray->GetIndexCount(), 0, 0); }