blob: 6b0b9576d663c93623726670f35eb9ed48bcf93f [file] [log] [blame]
Philippe Houdoinf17ddd42004-08-14 09:59:16 +00001// $Id: demo.cpp,v 1.2 2004/08/14 09:59:16 phoudoin Exp $
jtgafb833d1999-08-19 00:55:39 +00002
3// Simple BeOS GLView demo
4// Written by Brian Paul
Philippe Houdoinf17ddd42004-08-14 09:59:16 +00005// Changes by Philippe Houdoin
jtgafb833d1999-08-19 00:55:39 +00006// This file is in the public domain.
7
8
9
10#include <stdio.h>
11#include <Application.h>
12#include <Window.h>
13#include <GLView.h>
14
Philippe Houdoinf17ddd42004-08-14 09:59:16 +000015class MyGL : public BGLView
16{
17public:
18 MyGL(BRect rect, char *name, ulong options);
19
20 virtual void AttachedToWindow();
21 virtual void Pulse();
22 virtual void FrameResized(float w, float h);
23
24private:
25 void Render();
26 void Reshape(float w, float h);
27 float mAngle;
28};
29
jtgafb833d1999-08-19 00:55:39 +000030
31class MyWindow : public BWindow
32{
33public:
Philippe Houdoinf17ddd42004-08-14 09:59:16 +000034 MyWindow(BRect frame);
35 virtual bool QuitRequested();
jtgafb833d1999-08-19 00:55:39 +000036};
37
38
39MyWindow::MyWindow(BRect frame)
40 : BWindow(frame, "demo", B_TITLED_WINDOW, B_NOT_ZOOMABLE)
41{
Philippe Houdoinf17ddd42004-08-14 09:59:16 +000042 // Make OpenGL view and put it in the window
43 BRect r = Bounds();
44 r.InsetBy(5, 5);
45
46 MyGL *gl = new MyGL(r, "GL", BGL_RGB | BGL_DOUBLE);
47 AddChild(gl);
48 SetPulseRate(1000000 / 30);
jtgafb833d1999-08-19 00:55:39 +000049}
50
51bool MyWindow::QuitRequested()
52{
53 be_app->PostMessage(B_QUIT_REQUESTED);
54 return true;
55}
56
57
jtgafb833d1999-08-19 00:55:39 +000058
59MyGL::MyGL(BRect rect, char *name, ulong options)
Philippe Houdoinf17ddd42004-08-14 09:59:16 +000060 : BGLView(rect, name, B_FOLLOW_ALL_SIDES, B_PULSE_NEEDED, options)
jtgafb833d1999-08-19 00:55:39 +000061{
Philippe Houdoinf17ddd42004-08-14 09:59:16 +000062 mAngle = 0.0;
jtgafb833d1999-08-19 00:55:39 +000063}
64
65
jtgafb833d1999-08-19 00:55:39 +000066void MyGL::AttachedToWindow()
67{
Philippe Houdoinf17ddd42004-08-14 09:59:16 +000068 BGLView::AttachedToWindow();
69
70 LockGL();
71 glClearColor(0.7, 0.7, 0, 0);
72 Reshape(Bounds().Width(), Bounds().Height());
73 UnlockGL();
jtgafb833d1999-08-19 00:55:39 +000074}
jtgafb833d1999-08-19 00:55:39 +000075
76
77void MyGL::FrameResized(float w, float h)
78{
Philippe Houdoinf17ddd42004-08-14 09:59:16 +000079 BGLView::FrameResized(w, h);
jtgafb833d1999-08-19 00:55:39 +000080
Philippe Houdoinf17ddd42004-08-14 09:59:16 +000081 LockGL();
82 Reshape(w, h);
83 UnlockGL();
84
85 Render();
jtgafb833d1999-08-19 00:55:39 +000086}
87
88
Philippe Houdoinf17ddd42004-08-14 09:59:16 +000089void MyGL::Pulse()
jtgafb833d1999-08-19 00:55:39 +000090{
Philippe Houdoinf17ddd42004-08-14 09:59:16 +000091 mAngle += 1.0;
92 Render();
93}
94
95
96void MyGL::Render()
97{
jtgafb833d1999-08-19 00:55:39 +000098 LockGL();
Philippe Houdoinf17ddd42004-08-14 09:59:16 +000099
jtgafb833d1999-08-19 00:55:39 +0000100 glClear(GL_COLOR_BUFFER_BIT);
Philippe Houdoinf17ddd42004-08-14 09:59:16 +0000101
jtgafb833d1999-08-19 00:55:39 +0000102 glPushMatrix();
Philippe Houdoinf17ddd42004-08-14 09:59:16 +0000103
104 glRotated(mAngle, 0, 0, 1);
jtgafb833d1999-08-19 00:55:39 +0000105 glColor3f(0, 0, 1);
Philippe Houdoinf17ddd42004-08-14 09:59:16 +0000106
jtgafb833d1999-08-19 00:55:39 +0000107 glBegin(GL_POLYGON);
108 glVertex2f(-1, -1);
109 glVertex2f( 1, -1);
110 glVertex2f( 1, 1);
111 glVertex2f(-1, 1);
112 glEnd();
Philippe Houdoinf17ddd42004-08-14 09:59:16 +0000113
114 glPopMatrix();
115
jtgafb833d1999-08-19 00:55:39 +0000116 SwapBuffers();
Philippe Houdoinf17ddd42004-08-14 09:59:16 +0000117
jtgafb833d1999-08-19 00:55:39 +0000118 UnlockGL();
119}
120
121
Philippe Houdoinf17ddd42004-08-14 09:59:16 +0000122void MyGL::Reshape(float w, float h)
jtgafb833d1999-08-19 00:55:39 +0000123{
Philippe Houdoinf17ddd42004-08-14 09:59:16 +0000124 glViewport(0, 0, (int) (w + 1), (int) (h + 1));
125 glMatrixMode(GL_PROJECTION);
126 glLoadIdentity();
127 glFrustum(-1, 1, -1, 1, 10, 30);
128 glMatrixMode(GL_MODELVIEW);
129 glLoadIdentity();
130 glTranslatef(0, 0, -18);
jtgafb833d1999-08-19 00:55:39 +0000131}
132
133
jtgafb833d1999-08-19 00:55:39 +0000134int main(int argc, char *argv[])
135{
136 BApplication *app = new BApplication("application/demo");
137
138 // make top-level window
Philippe Houdoinf17ddd42004-08-14 09:59:16 +0000139 MyWindow *win = new MyWindow(BRect(100, 100, 500, 500));
jtgafb833d1999-08-19 00:55:39 +0000140 win->Show();
141
Philippe Houdoinf17ddd42004-08-14 09:59:16 +0000142 app->Run();
jtgafb833d1999-08-19 00:55:39 +0000143
144 delete app;
145
146 return 0;
147}