Пример #1
0
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);
}
Пример #2
0
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);
}