summaryrefslogtreecommitdiffstats
path: root/progs/beos
diff options
context:
space:
mode:
Diffstat (limited to 'progs/beos')
-rw-r--r--progs/beos/GLInfo.cpp151
-rw-r--r--progs/beos/Makefile33
-rw-r--r--progs/beos/demo.cpp147
-rw-r--r--progs/beos/sample.cpp225
4 files changed, 556 insertions, 0 deletions
diff --git a/progs/beos/GLInfo.cpp b/progs/beos/GLInfo.cpp
new file mode 100644
index 00000000000..cfa8c83af82
--- /dev/null
+++ b/progs/beos/GLInfo.cpp
@@ -0,0 +1,151 @@
+// Small app to display GL infos
+
+#include <stdio.h>
+#include <string.h>
+
+#include <Application.h>
+#include <Window.h>
+#include <OutlineListView.h>
+#include <ScrollView.h>
+#include <GLView.h>
+
+#include <String.h>
+
+#include <GL/gl.h>
+#include <GL/glu.h>
+
+#define GLUT_INFO 1
+#ifdef GLUT_INFO
+ #include <GL/glut.h>
+#endif
+
+
+class GLInfoWindow : public BWindow
+{
+public:
+ GLInfoWindow(BRect frame);
+ virtual bool QuitRequested() { be_app->PostMessage(B_QUIT_REQUESTED); return true; }
+
+private:
+ BGLView *gl;
+ BOutlineListView *list;
+ BScrollView *scroller;
+};
+
+
+class GLInfoApp : public BApplication
+{
+public:
+ GLInfoApp();
+private:
+ GLInfoWindow *window;
+};
+
+
+GLInfoApp::GLInfoApp()
+ : BApplication("application/x-vnd.OBOS-GLInfo")
+{
+ window = new GLInfoWindow(BRect(50, 50, 350, 350));
+}
+
+GLInfoWindow::GLInfoWindow(BRect frame)
+ : BWindow(frame, "OpenGL Info", B_TITLED_WINDOW, 0)
+{
+ BRect r = Bounds();
+ char *s;
+ BString l;
+
+ // Add a outline list view
+ r.right -= B_V_SCROLL_BAR_WIDTH;
+ list = new BOutlineListView(r, "GLInfoList", B_SINGLE_SELECTION_LIST, B_FOLLOW_ALL_SIDES);
+ scroller = new BScrollView("GLInfoListScroller", list, B_FOLLOW_ALL_SIDES,
+ B_WILL_DRAW | B_FRAME_EVENTS, false, true);
+
+ gl = new BGLView(r, "opengl", B_FOLLOW_ALL_SIDES, 0, BGL_RGB | BGL_DOUBLE);
+ gl->Hide();
+ AddChild(gl);
+ AddChild(scroller);
+
+ Show();
+
+ LockLooper();
+
+ // gl->LockGL();
+
+ list->AddItem(new BStringItem("OpenGL", 0));
+
+ s = (char *) glGetString(GL_VENDOR);
+ if (s) {
+ l = ""; l << "Vendor Name: " << s;
+ list->AddItem(new BStringItem(l.String(), 1));
+ }
+
+ s = (char *) glGetString(GL_VERSION);
+ if (s) {
+ l = ""; l << "Version: " << s;
+ list->AddItem(new BStringItem(l.String(), 1));
+ }
+
+ s = (char *) glGetString(GL_RENDERER);
+ if (s) {
+ l = ""; l << "Renderer Name: " << s;
+ list->AddItem(new BStringItem(l.String(), 1));
+ }
+
+ s = (char *) glGetString(GL_EXTENSIONS);
+ if (s) {
+ list->AddItem(new BStringItem("Extensions", 1));
+ while (*s) {
+ char extname[255];
+ int n = strcspn(s, " ");
+ strncpy(extname, s, n);
+ extname[n] = 0;
+ list->AddItem(new BStringItem(extname, 2));
+ if (! s[n])
+ break;
+ s += (n + 1); // next !
+ }
+ }
+
+ list->AddItem(new BStringItem("GLU", 0));
+ s = (char *) gluGetString(GLU_VERSION);
+ if (s) {
+ l = ""; l << "Version: " << s;
+ list->AddItem(new BStringItem(l.String(), 1));
+ }
+
+ s = (char *) gluGetString(GLU_EXTENSIONS);
+ if (s) {
+ list->AddItem(new BStringItem("Extensions", 1));
+ while (*s) {
+ char extname[255];
+ int n = strcspn(s, " ");
+ strncpy(extname, s, n);
+ extname[n] = 0;
+ list->AddItem(new BStringItem(extname, 2));
+ if (! s[n])
+ break;
+ s += (n + 1); // next !
+ }
+ }
+
+#ifdef GLUT_INFO
+ list->AddItem(new BStringItem("GLUT", 0));
+ l = "API version: "; l << GLUT_API_VERSION;
+ list->AddItem(new BStringItem(l.String(), 1));
+#endif
+
+ // gl->UnlockGL();
+
+ UnlockLooper();
+}
+
+
+
+int main(int argc, char *argv[])
+{
+ GLInfoApp *app = new GLInfoApp;
+ app->Run();
+ delete app;
+ return 0;
+}
diff --git a/progs/beos/Makefile b/progs/beos/Makefile
new file mode 100644
index 00000000000..45782fb3cf7
--- /dev/null
+++ b/progs/beos/Makefile
@@ -0,0 +1,33 @@
+# progs/beos/Makefile
+
+TOP = ../..
+include $(TOP)/configs/current
+
+# Makefile for BeOS demos
+
+# Written by Brian Paul
+# This file is in the public domain.
+#
+# Modified by Philippe Houdoin
+
+LDFLAGS += -soname=_APP_ $(APP_LIB_DEPS)
+
+INCLUDES = -I. -I- -I../../include
+
+default: demo sample GLInfo
+
+clean:
+ rm -f demo sample GLInfo
+ rm -f *.o
+
+demo: demo.o
+ $(LD) demo.o $(LDFLAGS) -o $@
+
+sample: sample.o
+ $(LD) sample.o $(LDFLAGS) -o $@
+
+GTLInfo: GLInfo.o
+ $(LD) GLInfo.o $(INCLUDES) $(LDFLAGS) -o $@
+
+.cpp.o:
+ $(CC) -c $< $(INCLUDES) $(CFLAGS) -o $@
diff --git a/progs/beos/demo.cpp b/progs/beos/demo.cpp
new file mode 100644
index 00000000000..6b0b9576d66
--- /dev/null
+++ b/progs/beos/demo.cpp
@@ -0,0 +1,147 @@
+// $Id: demo.cpp,v 1.2 2004/08/14 09:59:16 phoudoin Exp $
+
+// Simple BeOS GLView demo
+// Written by Brian Paul
+// Changes by Philippe Houdoin
+// This file is in the public domain.
+
+
+
+#include <stdio.h>
+#include <Application.h>
+#include <Window.h>
+#include <GLView.h>
+
+class MyGL : public BGLView
+{
+public:
+ MyGL(BRect rect, char *name, ulong options);
+
+ virtual void AttachedToWindow();
+ virtual void Pulse();
+ virtual void FrameResized(float w, float h);
+
+private:
+ void Render();
+ void Reshape(float w, float h);
+ float mAngle;
+};
+
+
+class MyWindow : public BWindow
+{
+public:
+ MyWindow(BRect frame);
+ virtual bool QuitRequested();
+};
+
+
+MyWindow::MyWindow(BRect frame)
+ : BWindow(frame, "demo", B_TITLED_WINDOW, B_NOT_ZOOMABLE)
+{
+ // Make OpenGL view and put it in the window
+ BRect r = Bounds();
+ r.InsetBy(5, 5);
+
+ MyGL *gl = new MyGL(r, "GL", BGL_RGB | BGL_DOUBLE);
+ AddChild(gl);
+ SetPulseRate(1000000 / 30);
+}
+
+bool MyWindow::QuitRequested()
+{
+ be_app->PostMessage(B_QUIT_REQUESTED);
+ return true;
+}
+
+
+
+MyGL::MyGL(BRect rect, char *name, ulong options)
+ : BGLView(rect, name, B_FOLLOW_ALL_SIDES, B_PULSE_NEEDED, options)
+{
+ mAngle = 0.0;
+}
+
+
+void MyGL::AttachedToWindow()
+{
+ BGLView::AttachedToWindow();
+
+ LockGL();
+ glClearColor(0.7, 0.7, 0, 0);
+ Reshape(Bounds().Width(), Bounds().Height());
+ UnlockGL();
+}
+
+
+void MyGL::FrameResized(float w, float h)
+{
+ BGLView::FrameResized(w, h);
+
+ LockGL();
+ Reshape(w, h);
+ UnlockGL();
+
+ Render();
+}
+
+
+void MyGL::Pulse()
+{
+ mAngle += 1.0;
+ Render();
+}
+
+
+void MyGL::Render()
+{
+ LockGL();
+
+ glClear(GL_COLOR_BUFFER_BIT);
+
+ glPushMatrix();
+
+ glRotated(mAngle, 0, 0, 1);
+ glColor3f(0, 0, 1);
+
+ glBegin(GL_POLYGON);
+ glVertex2f(-1, -1);
+ glVertex2f( 1, -1);
+ glVertex2f( 1, 1);
+ glVertex2f(-1, 1);
+ glEnd();
+
+ glPopMatrix();
+
+ SwapBuffers();
+
+ UnlockGL();
+}
+
+
+void MyGL::Reshape(float w, float h)
+{
+ glViewport(0, 0, (int) (w + 1), (int) (h + 1));
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ glFrustum(-1, 1, -1, 1, 10, 30);
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity();
+ glTranslatef(0, 0, -18);
+}
+
+
+int main(int argc, char *argv[])
+{
+ BApplication *app = new BApplication("application/demo");
+
+ // make top-level window
+ MyWindow *win = new MyWindow(BRect(100, 100, 500, 500));
+ win->Show();
+
+ app->Run();
+
+ delete app;
+
+ return 0;
+}
diff --git a/progs/beos/sample.cpp b/progs/beos/sample.cpp
new file mode 100644
index 00000000000..a86a118747f
--- /dev/null
+++ b/progs/beos/sample.cpp
@@ -0,0 +1,225 @@
+// sample BGLView app from the Be Book
+
+
+#include <stdio.h>
+#include <Application.h>
+#include <Window.h>
+#include <GLView.h>
+
+
+class SampleGLView : public BGLView
+{
+public:
+ SampleGLView(BRect frame, uint32 type);
+ virtual void AttachedToWindow(void);
+ virtual void FrameResized(float newWidth, float newHeight);
+ virtual void ErrorCallback(GLenum which);
+
+ void Render(void);
+
+private:
+ void gInit(void);
+ void gDraw(void);
+ void gReshape(int width, int height);
+
+ float width;
+ float height;
+};
+
+
+
+class SampleGLWindow : public BWindow
+{
+public:
+ SampleGLWindow(BRect frame, uint32 type);
+ virtual bool QuitRequested() { be_app->PostMessage(B_QUIT_REQUESTED); return true; }
+
+private:
+ SampleGLView *theView;
+};
+
+
+class SampleGLApp : public BApplication
+{
+public:
+ SampleGLApp();
+private:
+ SampleGLWindow *theWindow;
+};
+
+
+SampleGLApp::SampleGLApp()
+ : BApplication("application/x-vnd.sample")
+{
+ BRect windowRect;
+ uint32 type = BGL_RGB|BGL_DOUBLE;
+
+ windowRect.Set(50, 50, 350, 350);
+
+ theWindow = new SampleGLWindow(windowRect, type);
+}
+
+
+
+SampleGLWindow::SampleGLWindow(BRect frame, uint32 type)
+ : BWindow(frame, "OpenGL Test", B_TITLED_WINDOW, 0)
+{
+ theView = new SampleGLView(Bounds(), type);
+ AddChild(theView);
+ Show();
+ theView->Render();
+}
+
+
+
+SampleGLView::SampleGLView(BRect frame, uint32 type)
+ : BGLView(frame, "SampleGLView", B_FOLLOW_ALL_SIDES, 0, type)
+{
+ width = frame.right-frame.left;
+ height = frame.bottom-frame.top;
+}
+
+
+void SampleGLView::AttachedToWindow(void)
+{
+ LockGL();
+ BGLView::AttachedToWindow();
+ gInit();
+ gReshape(width, height);
+ UnlockGL();
+}
+
+
+void SampleGLView::FrameResized(float newWidth, float newHeight)
+{
+ BGLView::FrameResized(newWidth, newHeight);
+
+ LockGL();
+
+ width = newWidth;
+ height = newHeight;
+
+ gReshape(width,height);
+
+ UnlockGL();
+ Render();
+}
+
+
+void SampleGLView::ErrorCallback(GLenum whichError)
+{
+// fprintf(stderr, "Unexpected error occured (%d):\\n", whichError);
+// fprintf(stderr, " %s\\n", gluErrorString(whichError));
+}
+
+
+
+// globals
+GLenum use_stipple_mode; // GL_TRUE to use dashed lines
+GLenum use_smooth_mode; // GL_TRUE to use anti-aliased lines
+GLint linesize; // Line width
+GLint pointsize; // Point diameter
+
+float pntA[3] = {
+ -160.0, 0.0, 0.0
+};
+float pntB[3] = {
+ -130.0, 0.0, 0.0
+};
+
+
+
+void SampleGLView::gInit(void)
+{
+ glClearColor(0.0, 0.0, 0.0, 0.0);
+ glLineStipple(1, 0xF0E0);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE);
+ use_stipple_mode = GL_FALSE;
+ use_smooth_mode = GL_TRUE;
+ linesize = 2;
+ pointsize = 6;
+}
+
+
+
+void SampleGLView::gDraw(void)
+{
+ GLint i;
+
+ glClear(GL_COLOR_BUFFER_BIT);
+ glLineWidth(linesize);
+
+/*
+
+ if (use_stipple_mode) {
+ glEnable(GL_LINE_STIPPLE);
+ } else {
+ glDisable(GL_LINE_STIPPLE);
+ }
+*/
+
+ glDisable(GL_POINT_SMOOTH);
+
+
+ glPushMatrix();
+
+ glPointSize(pointsize); // Set size for point
+
+ for (i = 0; i < 360; i += 5) {
+ glRotatef(5.0, 0,0,1); // Rotate right 5 degrees
+
+ if (use_smooth_mode) {
+ glEnable(GL_LINE_SMOOTH);
+ glEnable(GL_BLEND);
+ } else {
+ glDisable(GL_LINE_SMOOTH);
+ glDisable(GL_BLEND);
+ }
+
+ glColor3f(1.0, 1.0, 0.0); // Set color for line
+ glBegin(GL_LINE_STRIP); // And create the line
+ glVertex3fv(pntA);
+ glVertex3fv(pntB);
+ glEnd();
+
+ glDisable(GL_POINT_SMOOTH);
+ glDisable(GL_BLEND);
+
+ glColor3f(0.0, 1.0, 0.0); // Set color for point
+ glBegin(GL_POINTS);
+ glVertex3fv(pntA); // Draw point at one end
+ glVertex3fv(pntB); // Draw point at other end
+ glEnd();
+ }
+
+ glPopMatrix(); // Done with matrix
+}
+
+
+void SampleGLView::gReshape(int width, int height)
+{
+ glViewport(0, 0, width, height);
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ glOrtho(-175, 175, -175, 175, -1, 1);
+ glMatrixMode(GL_MODELVIEW);
+}
+
+
+void SampleGLView::Render(void)
+{
+ LockGL();
+ gDraw();
+ SwapBuffers();
+ UnlockGL();
+}
+
+
+
+int main(int argc, char *argv[])
+{
+ SampleGLApp *app = new SampleGLApp;
+ app->Run();
+ delete app;
+ return 0;
+}