void Renderer::render() { Clock::startSection("render"); startRender(); renderMap(); for (auto &it : entities_) { renderEntity(it.second); } // render overlay second for z ordering issues if (entityOverlayRenderer_) { for (auto &it : entities_) { renderEntityOverlay(it.second); } } effectManager_->render(getRenderTime()); endRender(); }
void Font::write(float x, float y, float z, const char *text, int count, Alignment alignment) { if (count <= 0) count = getTextLength(text); // Get first line int pos = 0; int len = findTextChar(text, pos, count, '\n'); if (len == -1) len = count; beginRender(); while (pos < count) { float cx = x; if (alignment == Alignment::CENTER) { float w = getTextWidth(&text[pos], len); cx -= w / 2; } else if (alignment == Alignment::RIGHT) { float w = getTextWidth(&text[pos], len); cx -= w; } writeInternal(cx, y, z, &text[pos], len); y -= getLineHeight(); // Get next line pos += len; int ch = getTextChar(text, pos, &pos); if (ch == '\n') { len = findTextChar(text, pos, count, '\n'); if (len == -1) len = count - pos; else len = len - pos; } } endRender(); }
void App::_render() { beginRender(); render(); endRender(); }
void Render::render(RenderCamera* camera, RenderTarget *target, bool depthOnly) { RENDERER_PERFZONE(Render_render); const uint32 numLights = (uint32)m_visibleLights.Size(); if(target) { target->bind(); } // TODO: ²ÄÖÊ·Ö×é if(beginRender()) { if(depthOnly) { RENDERER_PERFZONE(Render_render_depthOnly); bindAmbientState(Colour(0,0,0,1)); bindViewProj(camera); renderMeshes(m_visibleLitMeshes, RenderMaterial::PASS_DEPTH); renderMeshes(m_visibleUnlitMeshes, RenderMaterial::PASS_DEPTH); } else if(numLights > RENDERER_DEFERRED_THRESHOLD) { RENDERER_PERFZONE(Render_render_deferred); bindDeferredState(); bindViewProj(camera); renderMeshes(m_visibleLitMeshes, RenderMaterial::PASS_UNLIT); renderMeshes(m_visibleUnlitMeshes, RenderMaterial::PASS_UNLIT); renderDeferredLights(); } else if(numLights > 0) { RENDERER_PERFZONE(Render_render_lit); bindAmbientState(m_ambientColor); bindViewProj(camera); RenderLight &light0 = *m_visibleLights[0]; light0.bind(); renderMeshes(m_visibleLitMeshes, light0.getPass()); light0.m_renderer = 0; //bindAmbientState(Colour(0,0,0,1)); beginMultiPass(); for(uint32 i=1; i<numLights; i++) { RenderLight &light = *m_visibleLights[i]; light.bind(); renderMeshes(m_visibleLitMeshes, light.getPass()); light.m_renderer = 0; } endMultiPass(); renderMeshes(m_visibleUnlitMeshes, RenderMaterial::PASS_UNLIT); } else { RENDERER_PERFZONE(Render_render_unlit); bindAmbientState(Colour(0,0,0,1)); bindViewProj(camera); renderMeshes(m_visibleLitMeshes, RenderMaterial::PASS_UNLIT); renderMeshes(m_visibleUnlitMeshes, RenderMaterial::PASS_UNLIT); } endRender(); } if(target) { target->unbind(); } m_visibleLitMeshes.Reset(); m_visibleUnlitMeshes.Reset(); m_visibleLights.Reset(); }
void Font::writeBox(float x, float y, float z, float width, const char *text, int count, Alignment alignment) { if (count <= 0) count = getTextLength(text); float currWidth = 0, wordWidth; int lineS = 0, lineE = 0, wordS = 0, wordE = 0; int wordCount = 0; const char *s = " "; float spaceWidth = getTextWidth(s, 1); bool softBreak = false; beginRender(); for (; lineS < count;) { // Determine the extent of the line for (;;) { // Determine the number of characters in the word while (wordE < count && getTextChar(text, wordE) != ' ' && getTextChar(text, wordE) != '\n') // Advance the cursor to the next character getTextChar(text, wordE, &wordE); // Determine the width of the word if (wordE > wordS) { wordCount++; wordWidth = getTextWidth(&text[wordS], wordE - wordS); } else wordWidth = 0; // Does the word fit on the line? The first word is always accepted. if (wordCount == 1 || currWidth + (wordCount > 1 ? spaceWidth : 0) + wordWidth <= width) { // Increase the line extent to the end of the word lineE = wordE; currWidth += (wordCount > 1 ? spaceWidth : 0) + wordWidth; // Did we reach the end of the line? if (wordE == count || getTextChar(text, wordE) == '\n') { softBreak = false; // Skip the newline character if (wordE < count) // Advance the cursor to the next character getTextChar(text, wordE, &wordE); break; } // Skip the trailing space if (wordE < count && getTextChar(text, wordE) == ' ') // Advance the cursor to the next character getTextChar(text, wordE, &wordE); // Move to next word wordS = wordE; } else { softBreak = true; // Skip the trailing space if (wordE < count && getTextChar(text, wordE) == ' ') // Advance the cursor to the next character getTextChar(text, wordE, &wordE); break; } } // Write the line if (alignment == Alignment::JUSTIFY) { float spacing = 0; if (softBreak) { if (wordCount > 2) spacing = (width - currWidth) / (wordCount - 2); else spacing = (width - currWidth); } writeInternal(x, y, z, &text[lineS], lineE - lineS, spacing); } else { float cx = x; if (alignment == Alignment::RIGHT) cx = x + width - currWidth; else if (alignment == Alignment::CENTER) cx = x + 0.5f*(width - currWidth); writeInternal(cx, y, z, &text[lineS], lineE - lineS); } if (softBreak) { // Skip the trailing space if (lineE < count && getTextChar(text, lineE) == ' ') // Advance the cursor to the next character getTextChar(text, lineE, &lineE); // We've already counted the first word on the next line currWidth = wordWidth; wordCount = 1; } else { // Skip the line break if (lineE < count && getTextChar(text, lineE) == '\n') // Advance the cursor to the next character getTextChar(text, lineE, &lineE); currWidth = 0; wordCount = 0; } // Move to next line lineS = lineE; wordS = wordE; y -= getLineHeight(); } endRender(); }
// --------------------------------------------------------------------------------------------------------------------------------------------------- // void ofxOculusRift::endRenderSceneRightEye() { endRender( &eyeFboRight ); }
// --------------------------------------------------------------------------------------------------------------------------------------------------- // void ofxOculusRift::endRenderSceneLeftEye() { endRender( &eyeFboLeft ); }
void wyRenderTexture::clear(float r, float g, float b, float a) { beginRender(r, g, b, a); endRender(); }