diff options
Diffstat (limited to 'progs/beos')
-rw-r--r-- | progs/beos/GLInfo.cpp | 151 | ||||
-rw-r--r-- | progs/beos/Makefile | 33 | ||||
-rw-r--r-- | progs/beos/demo.cpp | 147 | ||||
-rw-r--r-- | progs/beos/sample.cpp | 225 |
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; +} |