void InexorCefMouseManager::Render() { glMatrixMode(GL_PROJECTION); glLoadIdentity(); float fx = (2.0f * ((float) x / (float) max_x)) - 1.0f; float fy = 1.0f -(2.0f * ((float) y / (float) max_y)); float ratio = (float) max_x / (float) max_y; float gx = size; float gy = size * ratio; glBlendFunc(GL_ONE, blendFunction); glEnable(GL_BLEND); glEnable(GL_TEXTURE_2D); settexture(texture.c_str(), 3); glColor4f(1.0f, 1.0f, 1.0f, 0.5f); glBegin(GL_QUADS); glTexCoord2f(0.0f, 0.0f); glVertex3f(fx, fy, 1.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f(fx + gx, fy, 1.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f(fx + gx, fy - gy, 1.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f(fx, fy - gy, 1.0f); glEnd(); glDisable(GL_TEXTURE_2D); glDisable(GL_BLEND); }
void gameplayhud(int w, int h) { glPushMatrix(); glScalef(0.5f, 0.5f, 1); draw_textf("using: %s", 636*2, h*2-256+149, selected ? selected->name : "(none)"); // temp glPopMatrix(); settexture("packages/hud/hud_rpg.png", 3); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); quad(0, h-128, 768, 128); settexture("packages/hud/hbar.png", 3); glColor4f(1, 0, 0, 0.5f); quad(130, h-128+57, 193*playerobj->s_hp/playerobj->eff_maxhp(), 17); glColor4f(0, 0, 1, 0.5f); quad(130, h-128+87, 193*playerobj->s_mana/playerobj->eff_maxmana(), 17); }
// XXX EMSCRIPTEN: Add a temporary customizable logo in the upper right. void drawlogo() { static int total = 0; extern int curtime; const int end = 3500; if (total > end + 2000) return; total += curtime; settexture("packages/hud/ff.png"); extern SDL_Surface *screen; float sz = screen->w/17, x = screen->w - sz*1.1, y = sz*0.1, tsz = 1, tx = 0, ty = 1; if (total > end) { float f = (total - end)/1000.0f; x += f*f*f*sz; } glBegin(GL_TRIANGLE_STRIP); glTexCoord2f(tx, ty); glVertex2f(x, y); glTexCoord2f(tx+tsz, ty); glVertex2f(x+sz, y); glTexCoord2f(tx, ty+tsz); glVertex2f(x, y+sz); glTexCoord2f(tx+tsz, ty+tsz); glVertex2f(x+sz, y+sz); glEnd(); }
void loading_theme::render(float bar, const char *text, GLuint tex, bool background) { #if 0 if(background || graphox::get<int>("sdl_backingstore_bug") > 0) restorebackground(); #endif int w = screen->w, h = screen->h; getbackgroundres(w, h); gettextres(w, h); glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); glOrtho(0, w, h, 0, -1, 1); glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); glEnable(GL_TEXTURE_2D); defaultshader->set(); glColor3f(1, 1, 1); float fh = 0.075f*min(w, h), fw = fh*10, fx = renderedframe ? w - fw - fh/4 : 0.5f*(w - fw), fy = renderedframe ? fh/4 : h - fh*1.5f, fu1 = 0/512.0f, fu2 = 511/512.0f, fv1 = 0/64.0f, fv2 = 52/64.0f; settexture("data/loading_frame.png", 3); glBegin(GL_TRIANGLE_STRIP); glTexCoord2f(fu1, fv1); glVertex2f(fx, fy); glTexCoord2f(fu2, fv1); glVertex2f(fx+fw, fy); glTexCoord2f(fu1, fv2); glVertex2f(fx, fy+fh); glTexCoord2f(fu2, fv2); glVertex2f(fx+fw, fy+fh); glEnd(); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); float bw = fw*(511 - 2*17)/511.0f, bh = fh*20/52.0f, bx = fx + fw*17/511.0f, by = fy + fh*16/52.0f, bv1 = 0/32.0f, bv2 = 20/32.0f, su1 = 0/32.0f, su2 = 7/32.0f, sw = fw*7/511.0f, eu1 = 23/32.0f, eu2 = 30/32.0f, ew = fw*7/511.0f, mw = bw - sw - ew, ex = bx+sw + max(mw*bar, fw*7/511.0f); if(bar > 0) { settexture("data/loading_bar.png", 3); glBegin(GL_QUADS); glTexCoord2f(su1, bv1); glVertex2f(bx, by); glTexCoord2f(su2, bv1); glVertex2f(bx+sw, by); glTexCoord2f(su2, bv2); glVertex2f(bx+sw, by+bh); glTexCoord2f(su1, bv2); glVertex2f(bx, by+bh); glTexCoord2f(su2, bv1); glVertex2f(bx+sw, by); glTexCoord2f(eu1, bv1); glVertex2f(ex, by); glTexCoord2f(eu1, bv2); glVertex2f(ex, by+bh); glTexCoord2f(su2, bv2); glVertex2f(bx+sw, by+bh); glTexCoord2f(eu1, bv1); glVertex2f(ex, by); glTexCoord2f(eu2, bv1); glVertex2f(ex+ew, by); glTexCoord2f(eu2, bv2); glVertex2f(ex+ew, by+bh); glTexCoord2f(eu1, bv2); glVertex2f(ex, by+bh); glEnd(); } if(text) { int tw = text_width(text); float tsz = bh*0.8f/FONTH; if(tw*tsz > mw) tsz = mw/tw; glPushMatrix(); glTranslatef(bx+sw, by + (bh - FONTH*tsz)/2, 0); glScalef(tsz, tsz, 1); draw_text(text, 0, 0); glPopMatrix(); } glDisable(GL_BLEND); if(tex) { glBindTexture(GL_TEXTURE_2D, tex); float sz = 0.35f*min(w, h), x = 0.5f*(w-sz), y = 0.5f*min(w, h) - sz/15; glBegin(GL_TRIANGLE_STRIP); glTexCoord2f(0, 0); glVertex2f(x, y); glTexCoord2f(1, 0); glVertex2f(x+sz, y); glTexCoord2f(0, 1); glVertex2f(x, y+sz); glTexCoord2f(1, 1); glVertex2f(x+sz, y+sz); glEnd(); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); settexture("data/mapshot_frame.png", 3); glBegin(GL_TRIANGLE_STRIP); glTexCoord2f(0, 0); glVertex2f(x, y); glTexCoord2f(1, 0); glVertex2f(x+sz, y); glTexCoord2f(0, 1); glVertex2f(x, y+sz); glTexCoord2f(1, 1); glVertex2f(x+sz, y+sz); glEnd(); glDisable(GL_BLEND); } glDisable(GL_TEXTURE_2D); glMatrixMode(GL_PROJECTION); glPopMatrix(); glMatrixMode(GL_MODELVIEW); glPopMatrix(); swapbuffers(); }
void renderprogress(float bar, const char *text, GLuint tex, bool background) // also used during loading { if(!inbetweenframes || envmapping) return; clientkeepalive(); // make sure our connection doesn't time out while loading maps etc. #ifdef __APPLE__ interceptkey(SDLK_UNKNOWN); // keep the event queue awake to avoid 'beachball' cursor #endif extern int sdl_backingstore_bug; if(background || sdl_backingstore_bug > 0) restorebackground(); int w = screen->w, h = screen->h; getbackgroundres(w, h); gettextres(w, h); glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); glOrtho(0, w, h, 0, -1, 1); glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); glEnable(GL_TEXTURE_2D); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); defaultshader->set(); glColor3f(1, 1, 1); float fh = 0.070f*min(w, h), fw = fh*10, fx = renderedframe ? w - fw - fh/4 : 0.5f*(w - fw), fy = renderedframe ? fh/4 : h - fh*1.5f; settexture("data/loadingscreen/load_frame.png", 3); glBegin(GL_QUADS); glTexCoord2f(0,0); glVertex2f(fx, fy); glTexCoord2f(1,0); glVertex2f(fx+fw, fy); glTexCoord2f(1,1); glVertex2f(fx+fw, fy+fh); glTexCoord2f(0,1); glVertex2f(fx, fy+fh); glEnd(); float bh = fh*20/52.0f, bx = fx + fw*17/511.0f; float by = fy + fh*16/52.0f, sw = fw*7/511.0f; float mw = fw, prog = bar; float ex = fx + max(mw*bar, fw*7/511.0f); if(bar > 0) { settexture("data/loadingscreen/load_bar.png", 3); glBegin(GL_QUADS); glTexCoord2f(0, 0); glVertex2f(fx, fy); glTexCoord2f(prog, 0); glVertex2f(ex, fy); glTexCoord2f(prog, 1); glVertex2f(ex, fy+fh); glTexCoord2f(0, 1); glVertex2f(fx, fy+fh); glEnd(); } if(text) { int tw = text_width(text); float tsz = bh*0.8f/FONTH; if(tw*tsz > mw) tsz = mw/tw; glPushMatrix(); glTranslatef(bx+sw, by + (bh - FONTH*tsz)/2, 0); glScalef(tsz, tsz, 1); draw_text(text, 0, 0); glPopMatrix(); } glDisable(GL_BLEND); if(tex) { float sz = 0.35f*min(w, h), x = 0.5f*(w-sz), y = 0.5f*min(w, h) - sz/15; glBindTexture(GL_TEXTURE_2D, tex); glBegin(GL_TRIANGLE_STRIP); glTexCoord2f(0, 0); glVertex2f(x, y); glTexCoord2f(1, 0); glVertex2f(x+sz, y); glTexCoord2f(0, 1); glVertex2f(x, y+sz); glTexCoord2f(1, 1); glVertex2f(x+sz, y+sz); glEnd(); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); settexture("data/loadingscreen/mapshot_frame.png", 3); glBegin(GL_TRIANGLE_STRIP); glTexCoord2f(0, 0); glVertex2f(x, y); glTexCoord2f(1, 0); glVertex2f(x+sz, y); glTexCoord2f(0, 1); glVertex2f(x, y+sz); glTexCoord2f(1, 1); glVertex2f(x+sz, y+sz); glEnd(); glDisable(GL_BLEND); } glDisable(GL_TEXTURE_2D); glMatrixMode(GL_PROJECTION); glPopMatrix(); glMatrixMode(GL_MODELVIEW); glPopMatrix(); swapbuffers(); }
void ClientSystem::drawHUD(int w, int h) { if (g3d_windowhit(true, false)) return; // Showing sauer GUI - do not show HUD float wFactor = float(h)/max(w,h); float hFactor = float(w)/max(w,h); // Rects glPushMatrix(); glScalef(w, h, 1); for (unsigned int i = 0; i < queuedHUDRects.size(); i++) { queuedHUDRect& q = queuedHUDRects[i]; if (q.x2 < 0) { float x1 = q.x1, y1 = q.y1; q.x1 = x1 - wFactor*fabs(q.x2)/2; q.y1 = y1 - hFactor*fabs(q.y2)/2; q.x2 = x1 + wFactor*fabs(q.x2)/2; q.y2 = y1 + hFactor*fabs(q.y2)/2; } vec rgb(q.color>>16, (q.color>>8)&0xFF, q.color&0xFF); rgb.mul(1.0/256.0); glColor3f(rgb[0], rgb[1], rgb[2]); glDisable(GL_TEXTURE_2D); notextureshader->set(); glBegin(GL_QUADS); glVertex2f(q.x1, q.y1); glVertex2f(q.x2, q.y1); glVertex2f(q.x2, q.y2); glVertex2f(q.x1, q.y2); glEnd(); glEnable(GL_TEXTURE_2D); defaultshader->set(); } glPopMatrix(); // Images glPushMatrix(); glScalef(w, h, 1); for (unsigned int i = 0; i < queuedHUDImages.size(); i++) { queuedHUDImage& q = queuedHUDImages[i]; glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); float x1 = q.centerX - (wFactor*q.width/2); float y1 = q.centerY - (hFactor*q.height/2); float x2 = q.centerX + (wFactor*q.width/2); float y2 = q.centerY + (hFactor*q.height/2); glColor3f(1, 1, 1); settexture(q.tex.c_str(), 3); glBegin(GL_QUADS); glTexCoord2f(0.0f, 0.0f); glVertex2f(x1, y1); glTexCoord2f(1.0f, 0.0f); glVertex2f(x2, y1); glTexCoord2f(1.0f, 1.0f); glVertex2f(x2, y2); glTexCoord2f(0.0f, 1.0f); glVertex2f(x1, y2); glEnd(); } glPopMatrix(); // Texts for (unsigned int i = 0; i < queuedHUDTexts.size(); i++) { queuedHUDText& q = queuedHUDTexts[i]; glPushMatrix(); glScalef(q.scale, q.scale, 1); int b = q.color & 255; q.color = q.color >> 8; int g = q.color & 255; int r = q.color >> 8; draw_text(q.text.c_str(), w*q.x/q.scale - text_width(q.text.c_str())/2, h*q.y/q.scale - FONTH/2, r, g, b); glPopMatrix(); } }