123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223 |
- // 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)
- {
- LockGL();
- BGLView::FrameResized(width, height);
- 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;
- }
|