diff --git a/src/tests/kits/opengl/Jamfile b/src/tests/kits/opengl/Jamfile index 54b201e90f..992e3a9b12 100644 --- a/src/tests/kits/opengl/Jamfile +++ b/src/tests/kits/opengl/Jamfile @@ -1,3 +1,4 @@ SubDir HAIKU_TOP src tests kits opengl ; SubInclude HAIKU_TOP src tests kits opengl glinfo ; +SubInclude HAIKU_TOP src tests kits opengl direct_mode ; diff --git a/src/tests/kits/opengl/direct_mode/GLDirectMode.cpp b/src/tests/kits/opengl/direct_mode/GLDirectMode.cpp new file mode 100644 index 0000000000..e790d7534b --- /dev/null +++ b/src/tests/kits/opengl/direct_mode/GLDirectMode.cpp @@ -0,0 +1,245 @@ +// sample BGLView app from the Be Book, modified to stress direct mode support. + + +#include + +#include +#include +#include +#include + +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 BDirectWindow +{ +public: + SampleGLWindow(BRect frame, uint32 type); + virtual bool QuitRequested(); + virtual void DirectConnected( direct_buffer_info *info ); + +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) + : BDirectWindow(frame, "OpenGL Test", B_TITLED_WINDOW, 0) +{ + BRect r = Bounds(); + + r.InsetBy(10, 10); + theView = new SampleGLView(r, type); + AddChild(theView); + Show(); + theView->Render(); +} + + +bool SampleGLWindow::QuitRequested() +{ + theView->EnableDirectMode(false); + be_app->PostMessage(B_QUIT_REQUESTED); + return true; +} + + +void SampleGLWindow::DirectConnected(direct_buffer_info *info) +{ + theView->DirectConnected(info); + theView->EnableDirectMode(true); +} + + + +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; +} diff --git a/src/tests/kits/opengl/direct_mode/Jamfile b/src/tests/kits/opengl/direct_mode/Jamfile new file mode 100644 index 0000000000..36de41379d --- /dev/null +++ b/src/tests/kits/opengl/direct_mode/Jamfile @@ -0,0 +1,15 @@ +SubDir HAIKU_TOP src tests kits opengl direct_mode ; + +SetSubDirSupportedPlatformsBeOSCompatible ; + +if $(TARGET_PLATFORM) != haiku { + # Needed for , not present in R5. + # Unfortunately we also get the other headers there, + # that we don't really want. + UsePublicHeaders opengl ; +} + +SimpleTest GLDirectMode : + GLDirectMode.cpp + : be game libGL.so +; diff --git a/src/tests/kits/opengl/direct_mode/makefile b/src/tests/kits/opengl/direct_mode/makefile new file mode 100644 index 0000000000..1d482352a4 --- /dev/null +++ b/src/tests/kits/opengl/direct_mode/makefile @@ -0,0 +1,97 @@ +## BeOS Generic Makefile v2.0 ## + +## Fill in this file to specify the project being created, and the referenced +## makefile-engine will do all of the hard work for you. This handles both +## Intel and PowerPC builds of the BeOS. + +## Application Specific Settings --------------------------------------------- + +# specify the name of the binary +NAME= GLDirectMode + +# specify the type of binary +# APP: Application +# SHARED: Shared library or add-on +# STATIC: Static library archive +# DRIVER: Kernel Driver +TYPE= APP + +# specify the source files to use +# full paths or paths relative to the makefile can be included +# all files, regardless of directory, will have their object +# files created in the common object directory. +# Note that this means this makefile will not work correctly +# if two source files with the same name (source.c or source.cpp) +# are included from different directories. Also note that spaces +# in folder names do not work well with this makefile. +SRCS= GLDirectMode.cpp + +# specify the resource files to use +# full path or a relative path to the resource file can be used. +RSRCS= + +# specify additional libraries to link against +# there are two acceptable forms of library specifications +# - if your library follows the naming pattern of: +# libXXX.so or libXXX.a you can simply specify XXX +# library: libbe.so entry: be +# +# - if your library does not follow the standard library +# naming scheme you need to specify the path to the library +# and it's name +# library: my_lib.a entry: my_lib.a or path/my_lib.a +LIBS= be GL game + +# specify additional paths to directories following the standard +# libXXX.so or libXXX.a naming scheme. You can specify full paths +# or paths relative to the makefile. The paths included may not +# be recursive, so include all of the paths where libraries can +# be found. Directories where source files are found are +# automatically included. +LIBPATHS= + +# additional paths to look for system headers +# thes use the form: #include
+# source file directories are NOT auto-included here +SYSTEM_INCLUDE_PATHS = /boot/develop/headers/be/opengl/ + +# additional paths to look for local headers +# thes use the form: #include "header" +# source file directories are automatically included +LOCAL_INCLUDE_PATHS = + +# specify the level of optimization that you desire +# NONE, SOME, FULL +OPTIMIZE= + +# specify any preprocessor symbols to be defined. The symbols +# will be set to a value of 1. For example specify DEBUG if you want +# DEBUG=1 to be set when compiling. +DEFINES= + +# specify special warning levels +# if unspecified default warnings will be used +# NONE = supress all warnings +# ALL = enable all warnings +WARNINGS = ALL + +# specify whether image symbols will be created +# so that stack crawls in the debugger are meaningful +# if TRUE symbols will be created +SYMBOLS = + +# specify debug settings +# if TRUE will allow application to be run from +# a source-level debugger +DEBUGGER = + +# specify additional compiler flags for all files +COMPILER_FLAGS = + +# specify additional linker flags +LINKER_FLAGS = + + +## include the makefile-engine +include /boot/develop/etc/makefile-engine +