diff options
Diffstat (limited to 'progs/beos/GLInfo.cpp')
-rw-r--r-- | progs/beos/GLInfo.cpp | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/progs/beos/GLInfo.cpp b/progs/beos/GLInfo.cpp new file mode 100644 index 000000000..cfa8c83af --- /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; +} |