void Flush() { g_CurrentColour.set(255, 255, 255, 255); if(g_Cnt == 0) return; MEngine* engine = MEngine::getInstance(); MRenderingContext* render = engine->getRenderingContext(); MSystemContext* system = engine->getSystemContext(); unsigned int w, h; system->getScreenSize(&w, &h); // set up the "camera" render->setViewport(0, 0, w, h); render->setMatrixMode(M_MATRIX_PROJECTION); render->loadIdentity(); render->setOrthoView(0, w, h, 0, 1.0f, -1.0f); render->setMatrixMode(M_MATRIX_MODELVIEW); render->loadIdentity(); // set up arrays render->enableVertexArray(); render->enableTexCoordArray(); render->enableColorArray(); render->setVertexPointer(M_FLOAT, 3, g_Vertices); render->setTexCoordPointer(M_FLOAT, 2, g_UVs); render->setColorPointer(M_UBYTE, 4, g_Colours); render->disableCullFace(); render->disableDepthTest(); render->drawArray(M_PRIMITIVE_TRIANGLES, 0, g_Cnt * 6); g_Cnt = 0; g_Selected = NULL; }
void MGuiWindow::draw(void) { MRenderingContext * render = MGui::getInstance()->getRenderingContext(); if(! isVisible()) return; MWindow * window = MWindow::getInstance(); rescaleScrollingBar(); render->enableScissorTest(); render->setScissor((int)getPosition().x, window->getHeight() - (int)getPosition().y - (unsigned int)getScale().y, (unsigned int)getScale().x, (unsigned int)getScale().y); // normal clear if((getNormalColor().w >= 1.0f) && (! hasNormalTexture())) { render->setClearColor(getNormalColor()); render->clear(M_BUFFER_COLOR); MGuiEvent guiEvent; guiEvent.type = MGUI_EVENT_DRAW; if(m_pointerEvent) m_pointerEvent(this, &guiEvent); // 2d mode set2dMode(render); render->disableDepthTest(); render->disableCullFace(); render->disableLighting(); render->enableBlending(); render->setBlendingMode(M_BLENDING_ALPHA); render->enableTexture(); } else { // background set2dMode(render); render->disableDepthTest(); render->disableCullFace(); render->disableLighting(); render->enableBlending(); render->setBlendingMode(M_BLENDING_ALPHA); if(hasNormalTexture()) // texture clear { render->enableTexture(); render->setColor4(getNormalColor()); drawTexturedQuad(getNormalTexture()); } else if(getNormalColor().w < 1.0f) { render->disableTexture(); render->setColor4(getNormalColor()); drawQuad(); } if(m_pointerEvent) { MGuiEvent guiEvent; guiEvent.type = MGUI_EVENT_DRAW; m_pointerEvent(this, &guiEvent); // 2d mode set2dMode(render); render->disableDepthTest(); render->disableCullFace(); render->disableLighting(); render->enableBlending(); render->setBlendingMode(M_BLENDING_ALPHA); render->enableTexture(); } } // gui render->pushMatrix(); render->translate(MVector3(getPosition().x, getPosition().y, 0)); render->pushMatrix(); render->translate(MVector3(getScroll().x, getScroll().y, 0)); // drawing unsigned int i; unsigned int oSize = m_objects.size(); for(i=0; i<oSize; i++) m_objects[i]->draw(); render->popMatrix(); // draw shadows if(hasShadow()) { render->disableScissorTest(); drawShadow(); render->enableScissorTest(); } // scolling slides if(isHorizontalScroll()) m_hScrollSlide.draw(); if(isVerticalScroll()) m_vScrollSlide.draw(); render->popMatrix(); }