~thumper/glint/simple-app

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
/*
 * Copyright (C) 2012 Canonical Ltd
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 3 as
 * published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 * Authored by: Michi Henning <michi.henning@canonical.com>
 */

#include <glint/glint.h>

#include <boost/thread.hpp>
#include <GL/glx.h>

#include <iostream>
#include <string>
#include <cassert>

using namespace std;
using namespace glint;

class Drawer
{
public:
    Drawer(int xpos, int ypos)
        : xpos_(xpos), ypos_(ypos)
    {
    }

    void operator()();

private:
    int xpos_;
    int ypos_;
};

void
Drawer::
operator()()
{
    Runtime::Ptr rt = Runtime::create();
    GraphicsDisplay* d = rt->create_display(200, 200, xpos_, ypos_);
    d->set_visibility(GraphicsDisplay::Vis::visible);

#if 0
    while (true)
    {
        glShadeModel(GL_SMOOTH);
        glClearDepth(1.0f);
        glEnable(GL_DEPTH_TEST);
        glDepthFunc(GL_LEQUAL);
        glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);

        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();

        GLdouble fW, fH, aspect;
        aspect = d->width() / d->height();
        fH = tan(45.0 / 360 * 3.1415926) * 0.1f;
        fW = fH * aspect;
        glFrustum(-fW, fW, -fH, fH, 0.1f, 255.0f);

        glMatrixMode(GL_MODELVIEW);
        glFlush();

        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glLoadIdentity();

        glTranslatef(-1.5f, 0.0f, -6.0f);

        glBegin(GL_TRIANGLES);
            glVertex3f( 0.0f,  1.0f,  0.0f);
            glVertex3f(-1.0f, -1.0f,  0.0f);
            glVertex3f( 1.0f, -1.0f,  0.0f);
        glEnd();

        glTranslatef(3.0f, 0.0f, 0.0f);

        glBegin(GL_QUADS);
            glVertex3f(-1.0f, 1.0f, 0.0f);
            glVertex3f( 1.0f, 1.0f, 0.0f);
            glVertex3f( 1.0f,-1.0f, 0.0f);
            glVertex3f(-1.0f,-1.0f, 0.0f);
        glEnd();
        d->swap_buffers();

        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        d->swap_buffers();
    }
#endif
}

int
main()
{
    for (int i = 0; i < 4; ++i)
    {
        for (int j = 0; j < 5; ++j)
        {
            boost::thread t(Drawer(j*200, i*200));
            sleep(1);
        }
    }
    sleep(30);
}