Initiate game mode support
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37820 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -20,7 +20,7 @@ MergeObject <opengl>glut.o :
|
|||||||
glutCursor.cpp
|
glutCursor.cpp
|
||||||
glutMenu.cpp
|
glutMenu.cpp
|
||||||
glutDstr.cpp
|
glutDstr.cpp
|
||||||
# glutGameMode.cpp
|
glutGameMode.cpp
|
||||||
beos_x11.cpp
|
beos_x11.cpp
|
||||||
|
|
||||||
# C sources
|
# C sources
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
/***********************************************************
|
/***********************************************************
|
||||||
* Window related callbacks
|
* Window related callbacks
|
||||||
***********************************************************/
|
***********************************************************/
|
||||||
void APIENTRY
|
void APIENTRY
|
||||||
glutDisplayFunc(GLUTdisplayCB displayFunc)
|
glutDisplayFunc(GLUTdisplayCB displayFunc)
|
||||||
{
|
{
|
||||||
/* XXX Remove the warning after GLUT 3.0. */
|
/* XXX Remove the warning after GLUT 3.0. */
|
||||||
@@ -31,49 +31,49 @@ glutDisplayFunc(GLUTdisplayCB displayFunc)
|
|||||||
gState.currentWindow->display = displayFunc;
|
gState.currentWindow->display = displayFunc;
|
||||||
}
|
}
|
||||||
|
|
||||||
void APIENTRY
|
void APIENTRY
|
||||||
glutKeyboardFunc(GLUTkeyboardCB keyboardFunc)
|
glutKeyboardFunc(GLUTkeyboardCB keyboardFunc)
|
||||||
{
|
{
|
||||||
gState.currentWindow->keyboard = keyboardFunc;
|
gState.currentWindow->keyboard = keyboardFunc;
|
||||||
}
|
}
|
||||||
|
|
||||||
void APIENTRY
|
void APIENTRY
|
||||||
glutKeyboardUpFunc(GLUTkeyboardCB keyboardUpFunc)
|
glutKeyboardUpFunc(GLUTkeyboardCB keyboardUpFunc)
|
||||||
{
|
{
|
||||||
gState.currentWindow->keyboardUp = keyboardUpFunc;
|
gState.currentWindow->keyboardUp = keyboardUpFunc;
|
||||||
}
|
}
|
||||||
|
|
||||||
void APIENTRY
|
void APIENTRY
|
||||||
glutSpecialFunc(GLUTspecialCB specialFunc)
|
glutSpecialFunc(GLUTspecialCB specialFunc)
|
||||||
{
|
{
|
||||||
gState.currentWindow->special = specialFunc;
|
gState.currentWindow->special = specialFunc;
|
||||||
}
|
}
|
||||||
|
|
||||||
void APIENTRY
|
void APIENTRY
|
||||||
glutSpecialUpFunc(GLUTspecialCB specialUpFunc)
|
glutSpecialUpFunc(GLUTspecialCB specialUpFunc)
|
||||||
{
|
{
|
||||||
gState.currentWindow->specialUp = specialUpFunc;
|
gState.currentWindow->specialUp = specialUpFunc;
|
||||||
}
|
}
|
||||||
|
|
||||||
void APIENTRY
|
void APIENTRY
|
||||||
glutMouseFunc(GLUTmouseCB mouseFunc)
|
glutMouseFunc(GLUTmouseCB mouseFunc)
|
||||||
{
|
{
|
||||||
gState.currentWindow->mouse = mouseFunc;
|
gState.currentWindow->mouse = mouseFunc;
|
||||||
}
|
}
|
||||||
|
|
||||||
void APIENTRY
|
void APIENTRY
|
||||||
glutMotionFunc(GLUTmotionCB motionFunc)
|
glutMotionFunc(GLUTmotionCB motionFunc)
|
||||||
{
|
{
|
||||||
gState.currentWindow->motion = motionFunc;
|
gState.currentWindow->motion = motionFunc;
|
||||||
}
|
}
|
||||||
|
|
||||||
void APIENTRY
|
void APIENTRY
|
||||||
glutPassiveMotionFunc(GLUTpassiveCB passiveMotionFunc)
|
glutPassiveMotionFunc(GLUTpassiveCB passiveMotionFunc)
|
||||||
{
|
{
|
||||||
gState.currentWindow->passive = passiveMotionFunc;
|
gState.currentWindow->passive = passiveMotionFunc;
|
||||||
}
|
}
|
||||||
|
|
||||||
void APIENTRY
|
void APIENTRY
|
||||||
glutEntryFunc(GLUTentryCB entryFunc)
|
glutEntryFunc(GLUTentryCB entryFunc)
|
||||||
{
|
{
|
||||||
gState.currentWindow->entry = entryFunc;
|
gState.currentWindow->entry = entryFunc;
|
||||||
@@ -97,7 +97,7 @@ visibilityHelper(int status)
|
|||||||
gState.currentWindow->visibility(GLUT_VISIBLE);
|
gState.currentWindow->visibility(GLUT_VISIBLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void APIENTRY
|
void APIENTRY
|
||||||
glutVisibilityFunc(GLUTvisibilityCB visibilityFunc)
|
glutVisibilityFunc(GLUTvisibilityCB visibilityFunc)
|
||||||
{
|
{
|
||||||
gState.currentWindow->visibility = visibilityFunc;
|
gState.currentWindow->visibility = visibilityFunc;
|
||||||
@@ -107,7 +107,7 @@ glutVisibilityFunc(GLUTvisibilityCB visibilityFunc)
|
|||||||
glutWindowStatusFunc(NULL);
|
glutWindowStatusFunc(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void APIENTRY
|
void APIENTRY
|
||||||
glutReshapeFunc(GLUTreshapeCB reshapeFunc)
|
glutReshapeFunc(GLUTreshapeCB reshapeFunc)
|
||||||
{
|
{
|
||||||
if (reshapeFunc) {
|
if (reshapeFunc) {
|
||||||
|
|||||||
@@ -0,0 +1,101 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010, Haiku Inc.
|
||||||
|
* Authors:
|
||||||
|
* Philippe Houdoin <phoudoin %at% haiku-os %dot% org>
|
||||||
|
*
|
||||||
|
* Distributed under the terms of the MIT License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <GL/glut.h>
|
||||||
|
#include "glutint.h"
|
||||||
|
#include "glutState.h"
|
||||||
|
#include "glutBlocker.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
|
||||||
|
void APIENTRY
|
||||||
|
glutGameModeString(const char *string)
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int APIENTRY
|
||||||
|
glutEnterGameMode(void)
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void APIENTRY
|
||||||
|
glutLeaveGameMode(void)
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int APIENTRY
|
||||||
|
glutGameModeGet(GLenum pname)
|
||||||
|
{
|
||||||
|
int ret = -1;
|
||||||
|
|
||||||
|
switch( pname ) {
|
||||||
|
case GLUT_GAME_MODE_ACTIVE:
|
||||||
|
ret = gState.gameMode != NULL;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GLUT_GAME_MODE_POSSIBLE:
|
||||||
|
// TODO
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GLUT_GAME_MODE_WIDTH:
|
||||||
|
if (gState.gameMode)
|
||||||
|
ret = gState.gameMode->width;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GLUT_GAME_MODE_HEIGHT:
|
||||||
|
if (gState.gameMode)
|
||||||
|
ret = gState.gameMode->height;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GLUT_GAME_MODE_PIXEL_DEPTH:
|
||||||
|
if (gState.gameMode)
|
||||||
|
ret = gState.gameMode->pixelDepth;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GLUT_GAME_MODE_REFRESH_RATE:
|
||||||
|
if (gState.gameMode)
|
||||||
|
ret = gState.gameMode->refreshRate;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GLUT_GAME_MODE_DISPLAY_CHANGED:
|
||||||
|
// TODO
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
__glutWarning( "Unknown gamemode get: %d", pname );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void APIENTRY
|
||||||
|
glutForceJoystickFunc(void)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
Forces a joystick poll and callback.
|
||||||
|
|
||||||
|
Forces the OpenGLUT joystick code to poll your
|
||||||
|
joystick(s) and to call your joystick callbacks
|
||||||
|
with the result. The operation completes, including
|
||||||
|
callbacks, before glutForceJoystickFunc() returns.
|
||||||
|
|
||||||
|
See also glutJoystickFunc()
|
||||||
|
*/
|
||||||
|
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010, Haiku Inc.
|
||||||
|
* Authors:
|
||||||
|
* Philippe Houdoin <phoudoin %at% haiku-os %dot% org>
|
||||||
|
*
|
||||||
|
* Distributed under the terms of the MIT License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <GL/glut.h>
|
||||||
|
|
||||||
|
|
||||||
|
/*! All information needed for game mode and
|
||||||
|
subwindows (handled as similarly as possible).
|
||||||
|
*/
|
||||||
|
class GlutGameMode {
|
||||||
|
public:
|
||||||
|
int width;
|
||||||
|
int height;
|
||||||
|
int pixelDepth;
|
||||||
|
int refreshRate;
|
||||||
|
};
|
||||||
@@ -17,8 +17,10 @@
|
|||||||
***********************************************************/
|
***********************************************************/
|
||||||
#include <GL/glut.h>
|
#include <GL/glut.h>
|
||||||
#include <Application.h>
|
#include <Application.h>
|
||||||
|
|
||||||
#include "glutWindow.h"
|
#include "glutWindow.h"
|
||||||
#include "glutMenu.h"
|
#include "glutMenu.h"
|
||||||
|
#include "glutGameMode.h"
|
||||||
|
|
||||||
/***********************************************************
|
/***********************************************************
|
||||||
* CLASS: GlutState
|
* CLASS: GlutState
|
||||||
@@ -45,7 +47,7 @@ struct GlutState {
|
|||||||
int modifierKeys; // only valid during keyboard callback
|
int modifierKeys; // only valid during keyboard callback
|
||||||
int keyRepeatMode; // global repeat
|
int keyRepeatMode; // global repeat
|
||||||
|
|
||||||
bool gameMode; // game mode is active
|
GlutGameMode* gameMode;
|
||||||
|
|
||||||
bool debug; // call glGetError
|
bool debug; // call glGetError
|
||||||
bool quitAll; // quit
|
bool quitAll; // quit
|
||||||
@@ -57,14 +59,15 @@ struct GlutState {
|
|||||||
initWidth = initHeight = 300;
|
initWidth = initHeight = 300;
|
||||||
displayMode = GLUT_RGB | GLUT_SINGLE | GLUT_DEPTH;
|
displayMode = GLUT_RGB | GLUT_SINGLE | GLUT_DEPTH;
|
||||||
displayString = 0;
|
displayString = 0;
|
||||||
currentWindow = 0;
|
currentWindow = NULL;
|
||||||
currentMenu = 0;
|
currentMenu = NULL;
|
||||||
windowList = 0;
|
windowList = NULL;
|
||||||
windowListSize = 0;
|
windowListSize = 0;
|
||||||
idle = 0;
|
idle = 0;
|
||||||
menuStatus = 0;
|
menuStatus = 0;
|
||||||
modifierKeys = ~0;
|
modifierKeys = ~0;
|
||||||
keyRepeatMode = GLUT_KEY_REPEAT_DEFAULT;
|
keyRepeatMode = GLUT_KEY_REPEAT_DEFAULT;
|
||||||
|
gameMode = NULL;
|
||||||
debug = quitAll = false;
|
debug = quitAll = false;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -103,16 +103,16 @@ GlutWindow::GlutWindow(GlutWindow *nparent, const char *name,
|
|||||||
// clear callbacks
|
// clear callbacks
|
||||||
display = __glutDefaultDisplay;
|
display = __glutDefaultDisplay;
|
||||||
reshape = __glutDefaultReshape;
|
reshape = __glutDefaultReshape;
|
||||||
mouse = 0;
|
mouse = NULL;
|
||||||
motion = 0;
|
motion = NULL;
|
||||||
passive = 0;
|
passive = NULL;
|
||||||
entry = 0;
|
entry = NULL;
|
||||||
keyboard = 0;
|
keyboard = NULL;
|
||||||
keyboardUp = 0;
|
keyboardUp = NULL;
|
||||||
visibility = 0;
|
visibility = NULL;
|
||||||
special = 0;
|
special = NULL;
|
||||||
specialUp = 0;
|
specialUp = NULL;
|
||||||
windowStatus = 0;
|
windowStatus = NULL;
|
||||||
|
|
||||||
// clear event counters
|
// clear event counters
|
||||||
anyevents = 1;
|
anyevents = 1;
|
||||||
@@ -124,7 +124,7 @@ GlutWindow::GlutWindow(GlutWindow *nparent, const char *name,
|
|||||||
entryEvent = 0;
|
entryEvent = 0;
|
||||||
keybEvent = 0;
|
keybEvent = 0;
|
||||||
keybUpEvent = 0;
|
keybUpEvent = 0;
|
||||||
windowStatusEvent = 0; // DirectConnected() will report change in
|
windowStatusEvent = 0; // DirectConnected() will report change in
|
||||||
visState = -1; // visibility
|
visState = -1; // visibility
|
||||||
specialEvent = 0;
|
specialEvent = 0;
|
||||||
specialUpEvent = 0;
|
specialUpEvent = 0;
|
||||||
@@ -132,7 +132,7 @@ GlutWindow::GlutWindow(GlutWindow *nparent, const char *name,
|
|||||||
menuEvent = 0;
|
menuEvent = 0;
|
||||||
visible = true;
|
visible = true;
|
||||||
ignoreKeyRepeat = (gState.keyRepeatMode == GLUT_KEY_REPEAT_OFF);
|
ignoreKeyRepeat = (gState.keyRepeatMode == GLUT_KEY_REPEAT_OFF);
|
||||||
|
|
||||||
gBlock.QuickNewEvent();
|
gBlock.QuickNewEvent();
|
||||||
|
|
||||||
// if i'm a subwindow, add me to my parent view
|
// if i'm a subwindow, add me to my parent view
|
||||||
@@ -218,7 +218,7 @@ void
|
|||||||
glutSetWindow(int win)
|
glutSetWindow(int win)
|
||||||
{
|
{
|
||||||
GlutWindow *window;
|
GlutWindow *window;
|
||||||
|
|
||||||
if (win < 1 || win > gState.windowListSize) {
|
if (win < 1 || win > gState.windowListSize) {
|
||||||
__glutWarning("glutSetWindow attempted on bogus window.");
|
__glutWarning("glutSetWindow attempted on bogus window.");
|
||||||
return;
|
return;
|
||||||
@@ -270,7 +270,7 @@ __glutDestroyWindow(GlutWindow *window, GlutWindow *initialWindow)
|
|||||||
cur = cur->siblings;
|
cur = cur->siblings;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// finally, check if we are the current window, and set to 0
|
// finally, check if we are the current window, and set to 0
|
||||||
if (gState.currentWindow == window)
|
if (gState.currentWindow == window)
|
||||||
gState.currentWindow = 0;
|
gState.currentWindow = 0;
|
||||||
@@ -484,7 +484,7 @@ glutIconifyWindow()
|
|||||||
{
|
{
|
||||||
if (gState.currentWindow->parent)
|
if (gState.currentWindow->parent)
|
||||||
__glutFatalError("can't iconify a subwindow");
|
__glutFatalError("can't iconify a subwindow");
|
||||||
|
|
||||||
gState.currentWindow->Window()->Lock();
|
gState.currentWindow->Window()->Lock();
|
||||||
gState.currentWindow->Window()->Minimize(true);
|
gState.currentWindow->Window()->Minimize(true);
|
||||||
gState.currentWindow->Window()->Unlock();
|
gState.currentWindow->Window()->Unlock();
|
||||||
@@ -494,7 +494,7 @@ glutIconifyWindow()
|
|||||||
/*! Sets the window title */
|
/*! Sets the window title */
|
||||||
void
|
void
|
||||||
glutSetWindowTitle(const char *name)
|
glutSetWindowTitle(const char *name)
|
||||||
{
|
{
|
||||||
if (gState.currentWindow->parent)
|
if (gState.currentWindow->parent)
|
||||||
__glutFatalError("glutSetWindowTitle: isn't a top-level window");
|
__glutFatalError("glutSetWindowTitle: isn't a top-level window");
|
||||||
|
|
||||||
@@ -545,7 +545,7 @@ __glutConvertDisplayMode(unsigned long *options)
|
|||||||
newoptions |= BGL_STENCIL;
|
newoptions |= BGL_STENCIL;
|
||||||
*options = newoptions;
|
*options = newoptions;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gState.displayMode & GLUT_INDEX) {
|
if (gState.displayMode & GLUT_INDEX) {
|
||||||
__glutWarning("BeOS doesn't support indexed color");
|
__glutWarning("BeOS doesn't support indexed color");
|
||||||
return 0;
|
return 0;
|
||||||
@@ -625,7 +625,7 @@ GlutBWindow::~GlutBWindow()
|
|||||||
Hide();
|
Hide();
|
||||||
|
|
||||||
Sync();
|
Sync();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
#include "glutint.h"
|
#include "glutint.h"
|
||||||
|
|
||||||
/* CENTRY */
|
/* CENTRY */
|
||||||
int GLUTAPIENTRY
|
int GLUTAPIENTRY
|
||||||
glutExtensionSupported(const char *extension)
|
glutExtensionSupported(const char *extension)
|
||||||
{
|
{
|
||||||
static const GLubyte *extensions = NULL;
|
static const GLubyte *extensions = NULL;
|
||||||
@@ -125,7 +125,7 @@ static struct name_address_pair glut_functions[] = {
|
|||||||
{ "glutWindowStatusFunc", (const GLUTproc) glutWindowStatusFunc },
|
{ "glutWindowStatusFunc", (const GLUTproc) glutWindowStatusFunc },
|
||||||
{ "glutKeyboardUpFunc", (const GLUTproc) glutKeyboardUpFunc },
|
{ "glutKeyboardUpFunc", (const GLUTproc) glutKeyboardUpFunc },
|
||||||
{ "glutSpecialUpFunc", (const GLUTproc) glutSpecialUpFunc },
|
{ "glutSpecialUpFunc", (const GLUTproc) glutSpecialUpFunc },
|
||||||
// { "glutJoystickFunc", (const GLUTproc) glutJoystickFunc },
|
{ "glutJoystickFunc", (const GLUTproc) glutJoystickFunc },
|
||||||
{ "glutSetColor", (const GLUTproc) glutSetColor },
|
{ "glutSetColor", (const GLUTproc) glutSetColor },
|
||||||
{ "glutGetColor", (const GLUTproc) glutGetColor },
|
{ "glutGetColor", (const GLUTproc) glutGetColor },
|
||||||
{ "glutCopyColormap", (const GLUTproc) glutCopyColormap },
|
{ "glutCopyColormap", (const GLUTproc) glutCopyColormap },
|
||||||
@@ -167,17 +167,17 @@ static struct name_address_pair glut_functions[] = {
|
|||||||
{ "glutReportErrors", (const GLUTproc) glutReportErrors },
|
{ "glutReportErrors", (const GLUTproc) glutReportErrors },
|
||||||
{ "glutIgnoreKeyRepeat", (const GLUTproc) glutIgnoreKeyRepeat },
|
{ "glutIgnoreKeyRepeat", (const GLUTproc) glutIgnoreKeyRepeat },
|
||||||
{ "glutSetKeyRepeat", (const GLUTproc) glutSetKeyRepeat },
|
{ "glutSetKeyRepeat", (const GLUTproc) glutSetKeyRepeat },
|
||||||
// { "glutForceJoystickFunc", (const GLUTproc) glutForceJoystickFunc },
|
{ "glutForceJoystickFunc", (const GLUTproc) glutForceJoystickFunc },
|
||||||
// { "glutGameModeString", (const GLUTproc) glutGameModeString },
|
{ "glutGameModeString", (const GLUTproc) glutGameModeString },
|
||||||
// { "glutEnterGameMode", (const GLUTproc) glutEnterGameMode },
|
{ "glutEnterGameMode", (const GLUTproc) glutEnterGameMode },
|
||||||
// { "glutLeaveGameMode", (const GLUTproc) glutLeaveGameMode },
|
{ "glutLeaveGameMode", (const GLUTproc) glutLeaveGameMode },
|
||||||
// { "glutGameModeGet", (const GLUTproc) glutGameModeGet },
|
{ "glutGameModeGet", (const GLUTproc) glutGameModeGet },
|
||||||
{ NULL, NULL }
|
{ NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/* XXX This isn't an official GLUT function, yet */
|
/* XXX This isn't an official GLUT function, yet */
|
||||||
GLUTproc GLUTAPIENTRY
|
GLUTproc GLUTAPIENTRY
|
||||||
glutGetProcAddress(const char *procName)
|
glutGetProcAddress(const char *procName)
|
||||||
{
|
{
|
||||||
/* Try GLUT functions first */
|
/* Try GLUT functions first */
|
||||||
|
|||||||
Reference in New Issue
Block a user