Added a GLView direct mode test app, a quick and dirty direct mode version of the BeBook GLView sample app.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20463 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
SubDir HAIKU_TOP src tests kits opengl ;
|
SubDir HAIKU_TOP src tests kits opengl ;
|
||||||
|
|
||||||
SubInclude HAIKU_TOP src tests kits opengl glinfo ;
|
SubInclude HAIKU_TOP src tests kits opengl glinfo ;
|
||||||
|
SubInclude HAIKU_TOP src tests kits opengl direct_mode ;
|
||||||
|
|||||||
@@ -0,0 +1,245 @@
|
|||||||
|
// sample BGLView app from the Be Book, modified to stress direct mode support.
|
||||||
|
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include <Application.h>
|
||||||
|
#include <DirectWindow.h>
|
||||||
|
#include <CheckBox.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 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;
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
SubDir HAIKU_TOP src tests kits opengl direct_mode ;
|
||||||
|
|
||||||
|
SetSubDirSupportedPlatformsBeOSCompatible ;
|
||||||
|
|
||||||
|
if $(TARGET_PLATFORM) != haiku {
|
||||||
|
# Needed for <GL/glut.h>, 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
|
||||||
|
;
|
||||||
@@ -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 <header>
|
||||||
|
# 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
|
||||||
|
|
||||||
Reference in New Issue
Block a user