root/src/apps/glteapot/FPS.cpp
/*
        Copyright 1999, Be Incorporated.   All Rights Reserved.
        This file may be used under the terms of the Be Sample Code License.
*/
#include "FPS.h"

FPS::FPS()
{
}


FPS::~FPS()
{
}


void
FPS::drawChar(GLfloat x, GLfloat y, GLint number)
{
        static bool numbers[13][7] = {
                { true, true, true, true, true, true, false },          /* 0 */
                { false, true, true, false, false, false, false },      /* 1 */
                { true, true, false, true, true, false, true },         /* 2 */
                { true, true, true, true, false, false, true },         /* 3 */
                { false, true, true, false, false, true, true },        /* 4 */
                { true, false, true, true, false, true, true },         /* 5 */
                { true, false, true, true, true, true, true },          /* 6 */
                { true, true, true, false, false, false, false },       /* 7 */
                { true, true, true, true, true, true, true },           /* 8 */
                { true, true, true, false, false, true, true },         /* 9 */

                { true, false, false, false, true, true, true },        /* F */
                { true, true, false, false, true, true, true },         /* P */
                { true, false, true, true, false, true, true },         /* S */
        };

        static GLfloat gap = 0.03;
        static GLfloat size = 1.0;

        static GLfloat x0 = -size / 4;
        static GLfloat x1 = -size / 4 + gap;
        static GLfloat x2 = -x1;
        static GLfloat x3 = -x0;

        static GLfloat y0 = size / 2;
        static GLfloat y1 = size / 2 - gap;
        static GLfloat y2 = 0 + gap;
        static GLfloat y3 = 0;
        static GLfloat y4 = -y2;
        static GLfloat y5 = -y1;
        static GLfloat y6 = -y0;

        glBegin(GL_LINES);
        if (numbers[number][0]) {
                glVertex2f(x1 + x, y0 + y);
                glVertex2f(x2 + x, y0 + y);
        }

        if (numbers[number][1]) {
                glVertex2f(x3 + x, y1 + y);
                glVertex2f(x3 + x, y2 + y);
        }

        if (numbers[number][2]) {
                glVertex2f(x3 + x, y4 + y);
                glVertex2f(x3 + x, y5 + y);
        }

        if (numbers[number][3]) {
                glVertex2f(x1 + x, y6 + y);
                glVertex2f(x2 + x, y6 + y);
        }

        if (numbers[number][4]) {
                glVertex2f(x0 + x, y5 + y);
                glVertex2f(x0 + x, y4 + y);
        }

        if (numbers[number][5]) {
                glVertex2f(x0 + x, y2 + y);
                glVertex2f(x0 + x, y1 + y);
        }

        if (numbers[number][6]) {
                glVertex2f(x1 + x, y3 + y);
                glVertex2f(x2 + x, y3 + y);
        }

        glEnd();
}


void
FPS::drawCounter(GLfloat frameRate)
{
        GLfloat pos = 0;
        int ifps = (int)frameRate;

        int count = 0;
        int number = 1;
        while (ifps > number) {
                number *= 10;
                count++;
        }

        number /= 10;
        for (int i = 0; i < count; i++) {
                drawChar(pos, 0, (ifps / number) % 10);
                pos += 1.0;
                if (number == 1)
                        break;
                number /= 10;
        }

        pos += 0.5;
        drawChar(pos, 0, 10);
        pos += 1;
        drawChar(pos, 0, 11);
        pos += 1;
        drawChar(pos, 0, 12);
        pos += 1;
}