Example #1
0
void Canvas::renderWindow(WindowPtr pWindow, MCFBOPtr pFBO, const IntRect& viewport)
{
    GLContext* pContext = pWindow->getGLContext();
    pContext->activate();

    GLContextManager::get()->uploadDataForContext();
    renderFX(pContext);
    glm::mat4 projMat;
    if (pFBO) {
        pFBO->activate(pContext);
        glm::vec2 size = m_pRootNode->getSize();
        projMat = glm::ortho(0.f, size.x, 0.f, size.y);
        glViewport(0, 0, GLsizei(size.x), GLsizei(size.y));
    } else {
        glproc::BindFramebuffer(GL_FRAMEBUFFER, 0);
        projMat = glm::ortho(float(viewport.tl.x), float(viewport.br.x), 
                float(viewport.br.y), float(viewport.tl.y));
        IntPoint windowSize = pWindow->getSize();
        glViewport(0, 0, windowSize.x, windowSize.y);
    }
    {
        ScopeTimer Timer(VATransferProfilingZone);
        m_pVertexArray->update(pContext);
    }
    clearGLBuffers(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT | GL_DEPTH_BUFFER_BIT,
            !pFBO);
    GLContext::checkError("Canvas::renderWindow: glViewport()");
    m_pVertexArray->activate(pContext);
    {
        ScopeTimer timer(RootRenderProfilingZone);
        m_pRootNode->maybeRender(pContext, projMat);
    }
    renderOutlines(pContext, projMat);
}
Example #2
0
void RasterNode::renderFX()
{
    if (m_bFXDirty || m_pSurface->isDirty() || m_pFXNode->isDirty()) {
        ScopeTimer Timer(FXProfilingZone);
        GLContext* pContext = GLContext::getCurrent();
        StandardShader::get()->setAlpha(1.0f);
        m_pSurface->activate(getMediaSize());

        m_pFBO->activate();
        clearGLBuffers(GL_COLOR_BUFFER_BIT, false);

        bool bPremultipliedAlpha = m_pSurface->isPremultipliedAlpha();
        if (bPremultipliedAlpha) {
            glproc::BlendColor(1.0f, 1.0f, 1.0f, 1.0f);
        }
        pContext->setBlendMode(GLContext::BLEND_BLEND, bPremultipliedAlpha);
        m_pImagingProjection->setColor(m_Color);
        m_pImagingProjection->draw(StandardShader::get()->getShader());
/*
        static int i=0;
        stringstream ss;
        ss << "node" << i << ".png";
        BitmapPtr pBmp = m_pFBO->getImage(0);
        pBmp->save(ss.str());
*/  
        m_pFXNode->apply(m_pFBO->getTex()->getCurTex());
        
/*        
        stringstream ss1;
        ss1 << "nodefx" << i << ".png";
        i++;
        m_pFXNode->getImage()->save(ss1.str());
*/
    }
}
void MeshObj::restoreDataFmFile(void) {
    clearGLBuffers(); clearMeshObjLists(); initMeshStructure();
#if SHOW
	printVertexData();
#endif
	checkError("MeshObj::restoreDataFmFile");
} // end restoreDataFmFile
void MeshObj::reverseNormals(void) {
    clearGLBuffers();	
	
	for(GLuint i = 0, size = vertList.size(); size > i; ++i)
		vertList[i].calcNorm = -vertList[i].calcNorm;
	for(GLuint i = 0, size = normArrObj.size(); size > i; ++i)
		normArrObj[i] = -normArrObj[i];
    initBufObjs();
#if SHOW
	printVertexData();
#endif
	checkError("MeshObj::reverseNormals");
} // end reverseNormals
Example #5
0
void Canvas::render(IntPoint windowSize, bool bUpsideDown, FBOPtr pFBO,
        ProfilingZoneID& renderProfilingZone)
{
    {
        ScopeTimer Timer(PreRenderProfilingZone);
        m_pRootNode->preRender();
    }
    if (pFBO) {
        pFBO->activate();
    } else {
        glproc::BindFramebuffer(GL_FRAMEBUFFER_EXT, 0);
        GLContext::getCurrent()->checkError("Canvas::render: BindFramebuffer()");
    }
    if (m_MultiSampleSamples > 1) {
        glEnable(GL_MULTISAMPLE);
        GLContext::getCurrent()->checkError( 
                "Canvas::render: glEnable(GL_MULTISAMPLE)");
    } else {
        glDisable(GL_MULTISAMPLE);
        GLContext::getCurrent()->checkError(
                "Canvas::render: glDisable(GL_MULTISAMPLE)");
    }
    clearGLBuffers(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glViewport(0, 0, windowSize.x, windowSize.y);
    GLContext::getCurrent()->checkError("Canvas::render: glViewport()");
    glMatrixMode(GL_PROJECTION);
    GLContext::getCurrent()->checkError("Canvas::render: glMatrixMode()");
    glLoadIdentity();
    GLContext::getCurrent()->checkError("Canvas::render: glLoadIdentity()");
    glm::vec2 size = m_pRootNode->getSize();
    if (bUpsideDown) {
        gluOrtho2D(0, size.x, 0, size.y);
    } else {
        gluOrtho2D(0, size.x, size.y, 0);
    }
    GLContext::getCurrent()->checkError("Canvas::render: gluOrtho2D()");
    
    glMatrixMode(GL_MODELVIEW);
    {
        ScopeTimer Timer(renderProfilingZone);
        m_pRootNode->maybeRender();

        renderOutlines();
    }
}
void MeshObj::recalculateVertexNormals(void) {
	clearGLBuffers(); clearMeshObjLists();

	for(GLuint i = 0, size = vPosArr.size(); size > i; ++i) {
		struct vertex vert;
		vert.idx = i;
		vertList.push_back(vert);
	}
	for(GLuint i = 0, size = vIdxArr.size(); size > i; ++i)
		idxArrObj.push_back(vIdxArr[i]);
	for(GLuint i = 0, size = vIdxArr.size(); size > i; i += 3) {
		GLuint idx0 = idxArrObj[i], idx1 = idxArrObj[i + 1], 
		    idx2 = idxArrObj[i + 2];
		
		if (0 != vTexArr.size()) {
			vertList[idx0].texUV = vTexArr[vTexIdxArr[i]];
			vertList[idx1].texUV = vTexArr[vTexIdxArr[i + 1]];
			vertList[idx2].texUV = vTexArr[vTexIdxArr[i + 2]];
		}
			
		glm::vec3 v1 = vPosArr[vertList[idx1].idx] - 
		    vPosArr[vertList[idx0].idx];
		glm::vec3 v2 = vPosArr[vertList[idx2].idx] - 
		    vPosArr[vertList[idx0].idx];

		glm::vec3 normal = glm::normalize(glm::cross(v1, v2));

		vertList[idx0].calcNorm += normal;
		vertList[idx1].calcNorm += normal;
		vertList[idx2].calcNorm += normal;
	}	
	for (GLuint i = 0, size = vertList.size(); size > i; ++i) {
        vertArrObj.push_back(vPosArr[vertList[i].idx]);
        
        if (0 != vTexArr.size())
        	texArrObj.push_back(vertList[i].texUV);
        normArrObj.push_back(vertList[i].calcNorm);
    }
    
	initBufObjs();
#if SHOW
	printVertexData();
#endif
	checkError("MeshObj::recalculateVertexNormals");
} // end recalculateVertexNormals
Example #7
0
void Canvas::render(IntPoint windowSize, bool bOffscreen)
{
    clearGLBuffers(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT | GL_DEPTH_BUFFER_BIT,
            !bOffscreen);
    glViewport(0, 0, windowSize.x, windowSize.y);
    GLContext::checkError("Canvas::render: glViewport()");
    glm::vec2 size = m_pRootNode->getSize();
    glm::mat4 projMat;
    if (bOffscreen) {
        projMat = glm::ortho(0.f, size.x, 0.f, size.y);
    } else {
        projMat = glm::ortho(0.f, size.x, size.y, 0.f);
    }
    m_pVertexArray->activate();
    m_pRootNode->maybeRender(projMat);

    renderOutlines(projMat);
}