void Counter::draw() { if (!_init) { _init = true; char buffer[] = {0, 0}; for ( int i = 0; i < 10; i++ ) { buffer[0] = '0' + i; _digitTex[i] = CreateTextureWithLabelUseFont(buffer, 52.0, "Arial Bold", DIGIT_WIDTH, _h, 0 ); } _rightTex = CreateTextureWithLabelUseFont( _rightText, 52.0, "Arial Bold", TEXT_WIDTH, _h, -1 ); } glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, _rightTex); float w0 = TEXT_WIDTH + 15 + 4 * (DIGIT_WIDTH - 3); float x0 = _x + (_w - w0) / 2.0; DrawQuadInverted( x0 + w0 - TEXT_WIDTH + 15, _y, TEXT_WIDTH, _h ); int n = lrint(floor(_number)); int digitCount = 1; if (_number >= 1) digitCount += lrint(floor(log10(_number))); for (int i = 0; i < digitCount; i++ ) { int r = n % 10; n /= 10; glBindTexture( GL_TEXTURE_2D, _digitTex[r] ); DrawQuadInverted( x0 + w0 - TEXT_WIDTH - (i + 1)*(DIGIT_WIDTH - 3), _y, DIGIT_WIDTH, _h ); } glBindTexture(GL_TEXTURE_2D, 0); glDisable(GL_TEXTURE_2D); }
void SmoothMeter::draw() { int value = (int)lrint(_smoothValue); float angle = angleForValue(_smoothValue, _max) * 180 / M_PI; if (0 == _backgroundTexture) { glGenTextures(1, &_backgroundTexture); glBindTexture(GL_TEXTURE_RECTANGLE_ARB, _backgroundTexture); initBackground(_w, _h, _max); } if (0 == _needleTexture) { glGenTextures(1, &_needleTexture); glBindTexture(GL_TEXTURE_RECTANGLE_ARB, _needleTexture); initNeedle(_w, _h, _max); } if (0 == _legendTexture) { _legendTexture = CreateTextureWithLabel(_legend, 36, false, LEGEND_WIDTH, LEGEND_HEIGHT); } glEnable(GL_TEXTURE_RECTANGLE_ARB); glMatrixMode(GL_TEXTURE); glPushMatrix(); glLoadIdentity(); glScalef(_w, _h, 1); glMatrixMode(GL_MODELVIEW); glBindTexture(GL_TEXTURE_RECTANGLE_ARB, _backgroundTexture); DrawQuad(_w* -0.5, _h* -0.5, _w, _h); glBindTexture(GL_TEXTURE_RECTANGLE_ARB, _needleTexture); glPushMatrix(); glRotatef(angle, 0, 0, 1); DrawQuad(_w* -0.5, _h* -0.5, _w, _h); glPopMatrix(); glMatrixMode(GL_TEXTURE); glPopMatrix(); glMatrixMode(GL_MODELVIEW); glBindTexture(GL_TEXTURE_RECTANGLE_ARB, 0); glDisable(GL_TEXTURE_RECTANGLE_ARB); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, _legendTexture); DrawQuadInverted(-0.5 * LEGEND_WIDTH, -220, LEGEND_WIDTH, LEGEND_HEIGHT); // FIXME purge unused values, or don't use the global cache glBindTexture(GL_TEXTURE_2D, value_texture_for(value)); DrawQuadInverted(-0.5 * VALUE_WIDTH, -110, VALUE_WIDTH, VALUE_HEIGHT); glBindTexture(GL_TEXTURE_2D, 0); glDisable(GL_TEXTURE_2D); }