void PortholeRenderPass::render(Renderer* client, const DrawContext& context) { if(context.task == DrawContext::OverlayDrawTask) { DrawInterface* di = client->getRenderer(); di->beginDraw2D(context); di->drawRect(Vector2f(10, 10), Vector2f(100, 100), Color::Red); di->endDraw(); } }
void StringTextureSource::refreshTexture(Texture* texture, const DrawContext& context) { // Compute text size. Vector2f textSize = Font::getTextSize(myText, myFontStyle); DrawInterface* di = context.renderer->getRenderer(); // Initialize the texture and render target (if needed) if(!texture->isInitialized()) texture->initialize(textSize[0], textSize[1], GL_RGBA); if(myRenderTarget == NULL) { myRenderTarget = context.renderer->createRenderTarget(RenderTarget::RenderToTexture); myRenderTarget->setTextureTarget(texture); } // Render the string to the texture. myRenderTarget->bind(); myRenderTarget->clear(); glPushAttrib(GL_VIEWPORT_BIT); glViewport(0, 0, textSize[0], textSize[1]); glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); glOrtho(0, textSize[0], textSize[1], 0, 0, 1); glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); Font* fnt = di->getFont(myFontStyle); di->drawText(myText, fnt, Vector2f::Zero(), Font::HALeft | Font::VATop, myFontColor); di->drawRect(Vector2f::Zero(), Vector2f(1000, 1000), Color::White); glPopMatrix(); glMatrixMode(GL_PROJECTION); glPopMatrix(); glPopAttrib(); myRenderTarget->unbind(); }
void ImageRenderable::drawContent(const DrawContext& context) { WidgetRenderable::drawContent(context); PixelData* tex = myOwner->getData(); if(tex != NULL) { DrawInterface* di = getRenderer(); di->fillTexture(tex); di->textureRegion(0, 0, 1, 1); if(!myOwner->myUseFullSource) { Rect& r = myOwner->mySourceRect; int w = tex->getWidth(); int h = tex->getHeight(); float su = (float)r.x() / w; float sv = 1 - (float)r.y() / h; float eu = (float)(r.x() + r.width()) / w; float ev = 1 - (float)(r.y() + r.height()) / h; di->textureRegion(su, ev, eu, sv); } else if(myOwner->myTile) { int w = tex->getWidth(); int h = tex->getHeight(); int W = myOwner->getWidth(); int H = myOwner->getHeight(); float eu = (float)(W) / w; float ev = (float)(H) / h; di->textureRegion(0, 0, eu, ev); } if(myTextureUniform != 0) { glUniform1i(myTextureUniform, 0); } if(myOwner->isStereo()) { DrawContext::Eye eye = context.eye; if(eye == DrawContext::EyeLeft) { di->textureRegion(0, 0, 0.5f, 1); } else if(eye == DrawContext::EyeRight) { di->textureRegion(0.5f, 0, 0.5f, 1); } } Vector2f size = myOwner->getSize(); if(myOwner->myUseFullDest) { di->rect(0, 0, size[0], size[1]); } else { Rect& r = myOwner->myDestRect; di->rect(r.x(), r.y(), r.width(), r.height()); } } else { refresh(); } }