void Polygon::doRender(const RenderState& rs) { if (!_verticesSize) return; _mat->apply2([ = ]() { STDRenderer* renderer = STDRenderer::getCurrent(); static std::vector<unsigned char> buff; buff.clear(); buff.reserve(_verticesSize); int num = _verticesSize / _vdecl->size; const unsigned char* ptr = (const unsigned char*)_verticesData; for (int i = 0; i < num; ++i) { const Vector2* pos = (Vector2*)ptr; Vector2 t = rs.transform.transform(*pos); append(buff, t); buff.insert(buff.end(), ptr + sizeof(t), ptr + sizeof(t) + _vdecl->size - sizeof(t)); ptr += _vdecl->size; } renderer->addVertices(&buff.front(), (unsigned int)buff.size()); }); }
void MovieSprite::doRender(const RenderState& rs) { convert(); if (!_ready) return; _shader->setShaderUniformsCallback(CLOSURE(this, &MovieSprite::setUniforms)); #if OXYGINE_RENDERER > 2 STDRenderer* renderer = STDRenderer::instance; renderer->setUberShaderProgram(_shader); Sprite::doRender(rs); renderer->setUberShaderProgram(&STDRenderer::uberShader); #else STDRenderer* renderer = safeCast<STDRenderer*>(rs.renderer); renderer->setUberShaderProgram(_shader); Sprite::doRender(rs); renderer->setUberShaderProgram(&Renderer::uberShader); #endif _shader->setShaderUniformsCallback(UberShaderProgram::ShaderUniformsCallback()); //Sprite::doRender(rs); }
bool MovieSprite::beginRender(const RenderState& rs) { convert(); if (!_ready) return false; _shader->setShaderUniformsCallback(CLOSURE(this, &MovieSprite::setUniforms)); STDRenderer* renderer = STDRenderer::instance; renderer->setUberShaderProgram(_shader); return true; }
void Box9Sprite::doRender(const RenderState &rs) { if (!_prepared) prepare(); _vstyle._apply(rs); const Diffuse &df = _frame.getDiffuse(); STDRenderer *renderer = safeCast<STDRenderer*>(rs.renderer); if (df.base) { if (_guidesX.size() >= 2 || _guidesY.size() >= 2) { renderer->setTexture(df.base, df.alpha, df.premultiplied); // number of vertical blocks int vc = (int)_pointsX.size() - 1; // number of horizontal blocks int hc = (int)_pointsY.size() - 1; int xgi = 0; // x guide index int ygi = 0; for (int yc = 0; yc < hc; yc++) { for (int xc = 0; xc < vc; xc++) { if (xc == 0) // select correct index for _guides% arrays xgi = 0; else if (xc == (int)_pointsX.size() - 2) xgi = 2; else xgi = 1; if (yc == 0) ygi = 0; else if (yc == (int)_pointsY.size() - 2) ygi = 2; else ygi = 1; RectF srcRect(_guidesX[xgi], _guidesY[ygi], _guidesX[xgi+1] - _guidesX[xgi], _guidesY[ygi+1] - _guidesY[ygi]); RectF destRect(_pointsX[xc], _pointsY[yc], _pointsX[xc+1] - _pointsX[xc], _pointsY[yc+1] - _pointsY[yc]); renderer->draw(&rs, getColor(), srcRect, destRect); } } } } }
void PostProcess::update(Actor* actor) { _screen = getScreenRect(*actor); OX_ASSERT(actor->_getStage()); _rt = getRTManager().get(_rt, _screen.getWidth(), _screen.getHeight(), _format); _transform = actor->computeGlobalTransform().inverted(); IVideoDriver* driver = IVideoDriver::instance; driver->setRenderTarget(_rt); Rect vp = _screen; vp.pos = Point(0, 0); driver->setViewport(vp); driver->clear(0); RenderState rs; STDMaterial* mat = STDMaterial::instance; STDRenderer* renderer = mat->getRenderer(); rs.material = mat; RectF clip = vp.cast<RectF>(); rs.clip = &clip; renderer->initCoordinateSystem(vp.getWidth(), vp.getHeight(), true); rs.transform = actor->getParent()->computeGlobalTransform(); if (!(_options._flags & PostProcessOptions::flag_fullscreen)) { AffineTransform offset; offset.identity(); offset.translate(-_screen.pos); rs.transform = rs.transform * offset; } mat->Material::render(actor, rs); mat->finish(); }
void DebugActor::render(RenderState const& parentRS) { RenderState rs = parentRS; parentRS.material->finish(); STDRenderer renderer; STDMaterial mat(&renderer); mat.apply(0); //STDRenderer* renderer = mat.getRenderer(); IVideoDriver* driver = renderer.getDriver(); driver->setDebugStats(false); Rect vp(Point(0, 0), core::getDisplaySize()); driver->setViewport(vp); renderer.initCoordinateSystem(vp.getWidth(), vp.getHeight()); renderer.resetSettings(); rs.material = &mat; Actor::render(rs); renderer.drawBatch(); driver->setDebugStats(true); mat.finish(); Material::setCurrent(0); }
void MovieSprite::endRender() { STDRenderer* renderer = STDRenderer::instance; renderer->setUberShaderProgram(&STDRenderer::uberShader); _shader->setShaderUniformsCallback(UberShaderProgram::ShaderUniformsCallback()); }
void DebugActor::render(RenderState const& parentRS) { timeMS tm = getTimeMS(); static int fps = 0; ++_frames; if (_frames > 50) { if (tm != _startTime) { fps = int(((float)_frames / (tm - _startTime)) * 1000); } _startTime = tm; _frames = 0; } std::stringstream s; s << "fps=" << fps << std::endl; #ifdef __S3E__ int mem_used = -1; int mem_free = -1; mem_used = s3eMemoryGetInt(S3E_MEMORY_USED); mem_free = s3eMemoryGetInt(S3E_MEMORY_FREE); s << "mfree=" << mem_free << " mem=" << mem_used << std::endl; #endif const IVideoDriver::Stats& vstats = IVideoDriver::_stats; #ifdef OXYGINE_DEBUG_TRACE_LEAKS s << "objects=" << (int)ObjectBase::__getCreatedObjects().size() << std::endl; #endif #if OXYGINE_TRACE_VIDEO_STATS int primitives = 0; primitives += vstats.elements[IVideoDriver::PT_TRIANGLES] / 3; if (vstats.elements[IVideoDriver::PT_TRIANGLE_STRIP]) primitives += vstats.elements[IVideoDriver::PT_TRIANGLE_STRIP] - 2; s << "batches=" << aligned(vstats.batches, 3) << " primitives=" << aligned(primitives, 3) << std::endl; #endif s << "update=" << aligned(getStage()->_statUpdate, 2) << "ms "; s << "render=" << aligned(vstats.duration, 2) << "ms "; s << "textures=" << aligned(NativeTexture::created, 2) << " "; #ifdef __APPLE__ size_t mem; iosGetMemoryUsage(mem); s << "memory=" << mem / 1024 << "kb "; #endif #ifdef _WIN32 PROCESS_MEMORY_COUNTERS_EX pmc; GetProcessMemoryInfo(GetCurrentProcess(), (PROCESS_MEMORY_COUNTERS*) &pmc, sizeof(pmc)); s << "memory=" << pmc.PrivateUsage / 1024 << "kb "; #endif if (!_debugText.empty()) { s << "\n"; s << _debugText; } _debugText = ""; _text->setText(s.str()); setHeight(_text->getTextRect().size.y + _text->getY() + 3); _bg->setSize(getSize()); Vector2 ds = core::getDisplaySize(); Vector2 pos(0, 0); switch (_corner) { case 1: pos.x = ds.x; break; case 2: pos = ds; break; case 3: pos.y = ds.y; break; } pos = getStage()->parent2local(pos); Vector2 realSize = getScaledSize(); switch (_corner) { case 1: pos.x -= realSize.x; break; case 2: pos -= realSize; break; case 3: pos.y -= realSize.y; break; } //setPosition(pos); setScale(1.0f / getStage()->getScaleX()); RenderState rs = parentRS; parentRS.material->finish(); STDRenderer renderer; STDMaterial mat(&renderer); mat.apply(0); IVideoDriver* driver = renderer.getDriver(); Rect vp(Point(0, 0), core::getDisplaySize()); driver->setViewport(vp); renderer.initCoordinateSystem(vp.getWidth(), vp.getHeight()); renderer.resetSettings(); rs.material = &mat; Actor::render(rs); renderer.drawBatch(); mat.finish(); Material::setCurrent(0); timeMS dur = getTimeMS() - tm; IVideoDriver::_stats.start += dur; }