Acme-MITHALDU-BleedingOpenGL
view release on metacpan or search on metacpan
pogl_glut.xs view on Meta::CPAN
AV * handler_data = newAV(); \
\
PackCallbackST(handler_data, 0); \
\
glut_ ## type ## _handler_data = handler_data; \
\
glut ## type ## Func(generic_glut_ ## type ## _handler);\
} \
ENSURE_callback_thread;}
/* Begin a global state callback definition */
#define begin_decl_ggh(type, params, nparam) \
\
static AV * glut_ ## type ## _handler_data = 0; \
\
static void generic_glut_ ## type ## _handler params \
{ \
AV * handler_data = glut_ ## type ## _handler_data; \
SV * handler; \
int i; \
dSP; \
\
handler = *av_fetch(handler_data, 0, 0); \
\
GLUT_PUSHMARK(sp); \
GLUT_EXTEND_STACK(sp,av_len(handler_data)+nparam); \
for (i=1;i<=av_len(handler_data);i++) \
GLUT_PUSH_NEW_SV(*av_fetch(handler_data, i, 0));
/* End a global state callback definition */
#define end_decl_ggh() \
PUTBACK; \
DO_perl_call_sv(handler, G_DISCARD); \
}
/* Define callbacks */
enum {
HANDLE_GLUT_Display,
HANDLE_GLUT_OverlayDisplay,
HANDLE_GLUT_Reshape,
HANDLE_GLUT_Keyboard,
HANDLE_GLUT_KeyboardUp,
HANDLE_GLUT_Mouse,
HANDLE_GLUT_MouseWheel, /* Open/FreeGLUT -chm */
HANDLE_GLUT_Motion,
HANDLE_GLUT_PassiveMotion,
HANDLE_GLUT_Entry,
HANDLE_GLUT_Visibility,
HANDLE_GLUT_WindowStatus,
HANDLE_GLUT_Special,
HANDLE_GLUT_SpecialUp,
HANDLE_GLUT_Joystick, /* Open/FreeGLUT -chm */
HANDLE_GLUT_SpaceballMotion,
HANDLE_GLUT_SpaceballRotate,
HANDLE_GLUT_SpaceballButton,
HANDLE_GLUT_ButtonBox,
HANDLE_GLUT_Dials,
HANDLE_GLUT_TabletMotion,
HANDLE_GLUT_TabletButton,
HANDLE_GLUT_MenuDestroy, /* Open/FreeGLUT -chm */
HANDLE_GLUT_Close, /* Open/FreeGLUT -chm */
HANDLE_GLUT_WMClose, /* AGL GLUT -chm */
};
/* Callback for glutDisplayFunc */
begin_decl_gwh(Display, (void), 0)
end_decl_gwh()
/* Callback for glutOverlayDisplayFunc */
begin_decl_gwh(OverlayDisplay, (void), 0)
end_decl_gwh()
/* Callback for glutReshapeFunc */
begin_decl_gwh(Reshape, (int width, int height), 2)
GLUT_PUSH_NEW_IV(width);
GLUT_PUSH_NEW_IV(height);
end_decl_gwh()
/* Callback for glutKeyboardFunc */
begin_decl_gwh(Keyboard, (unsigned char key, int width, int height), 3)
GLUT_PUSH_NEW_U8(key);
GLUT_PUSH_NEW_IV(width);
GLUT_PUSH_NEW_IV(height);
end_decl_gwh()
/* Callback for glutKeyboardUpFunc */
begin_decl_gwh(KeyboardUp, (unsigned char key, int width, int height), 3)
GLUT_PUSH_NEW_U8(key);
GLUT_PUSH_NEW_IV(width);
GLUT_PUSH_NEW_IV(height);
end_decl_gwh()
/* Callback for glutMouseFunc */
begin_decl_gwh(Mouse, (int button, int state, int x, int y), 4)
GLUT_PUSH_NEW_IV(button);
GLUT_PUSH_NEW_IV(state);
GLUT_PUSH_NEW_IV(x);
GLUT_PUSH_NEW_IV(y);
end_decl_gwh()
/* Callback for glutMouseWheelFunc */ /* Open/FreeGLUT -chm */
begin_decl_gwh(MouseWheel, (int wheel, int direction, int x, int y), 4)
GLUT_PUSH_NEW_IV(wheel);
GLUT_PUSH_NEW_IV(direction);
GLUT_PUSH_NEW_IV(x);
GLUT_PUSH_NEW_IV(y);
end_decl_gwh()
/* Callback for glutPassiveMotionFunc */
begin_decl_gwh(PassiveMotion, (int x, int y), 2)
GLUT_PUSH_NEW_IV(x);
GLUT_PUSH_NEW_IV(y);
end_decl_gwh()
/* Callback for glutMotionFunc */
begin_decl_gwh(Motion, (int x, int y), 2)
GLUT_PUSH_NEW_IV(x);
GLUT_PUSH_NEW_IV(y);
end_decl_gwh()
pogl_glut.xs view on Meta::CPAN
/* Callback for glutJoystickFunc */ /* Open/FreeGLUT -chm */
begin_decl_gwh(Joystick, (unsigned int buttons, int xaxis, int yaxis, int zaxis), 4)
GLUT_PUSH_NEW_IV(buttons);
GLUT_PUSH_NEW_IV(xaxis);
GLUT_PUSH_NEW_IV(yaxis);
GLUT_PUSH_NEW_IV(zaxis);
end_decl_gwh()
/* Callback for glutSpaceballMotionFunc */
begin_decl_gwh(SpaceballMotion, (int x, int y, int z), 3)
GLUT_PUSH_NEW_IV(x);
GLUT_PUSH_NEW_IV(y);
GLUT_PUSH_NEW_IV(z);
end_decl_gwh()
/* Callback for glutSpaceballRotateFunc */
begin_decl_gwh(SpaceballRotate, (int x, int y, int z), 3)
GLUT_PUSH_NEW_IV(x);
GLUT_PUSH_NEW_IV(y);
GLUT_PUSH_NEW_IV(z);
end_decl_gwh()
/* Callback for glutSpaceballButtonFunc */
begin_decl_gwh(SpaceballButton, (int button, int state), 2)
GLUT_PUSH_NEW_IV(button);
GLUT_PUSH_NEW_IV(state);
end_decl_gwh()
/* Callback for glutButtonBoxFunc */
begin_decl_gwh(ButtonBox, (int button, int state), 2)
GLUT_PUSH_NEW_IV(button);
GLUT_PUSH_NEW_IV(state);
end_decl_gwh()
/* Callback for glutDialsFunc */
begin_decl_gwh(Dials, (int dial, int value), 2)
GLUT_PUSH_NEW_IV(dial);
GLUT_PUSH_NEW_IV(value);
end_decl_gwh()
/* Callback for glutTabletMotionFunc */
begin_decl_gwh(TabletMotion, (int x, int y), 2)
GLUT_PUSH_NEW_IV(x);
GLUT_PUSH_NEW_IV(y);
end_decl_gwh()
/* Callback for glutTabletButtonFunc */
begin_decl_gwh(TabletButton, (int button, int state, int x, int y), 4)
GLUT_PUSH_NEW_IV(button);
GLUT_PUSH_NEW_IV(state);
GLUT_PUSH_NEW_IV(x);
GLUT_PUSH_NEW_IV(y);
end_decl_gwh()
/* Callback for glutIdleFunc */
begin_decl_ggh(Idle, (void), 0)
end_decl_ggh()
/* Callback for glutMenuStatusFunc */
begin_decl_ggh(MenuStatus, (int status, int x, int y), 3)
GLUT_PUSH_NEW_IV(status);
GLUT_PUSH_NEW_IV(x);
GLUT_PUSH_NEW_IV(y);
end_decl_ggh()
/* Callback for glutMenuStateFunc */
begin_decl_ggh(MenuState, (int status), 1)
GLUT_PUSH_NEW_IV(status);
end_decl_ggh()
/* Callback for glutMenuDestroyFunc */ /* Open/FreeGLUT -chm */
begin_decl_gwh(MenuDestroy, (void), 0)
end_decl_gwh()
/* Callback for glutCloseFunc */
#ifdef HAVE_AGL_GLUT
static void generic_glut_WMClose_handler(void)
#else
static void generic_glut_Close_handler(void)
#endif
{
int win = glutGetWindow();
AV * handler_data = (AV*)get_glut_win_handler(win, HANDLE_GLUT_Close);
SV * handler = *av_fetch(handler_data, 0, 0);
dSP;
GLUT_PUSHMARK(sp);
GLUT_EXTEND_STACK(sp,1);
GLUT_PUSH_NEW_IV(win);
PUTBACK;
DO_perl_call_sv(handler, G_DISCARD);
}
/* Callback for glutTimerFunc */
static void generic_glut_timer_handler(int value)
{
AV * handler_data = (AV*)value;
SV * handler;
int i;
dSP;
handler = *av_fetch(handler_data, 0, 0);
GLUT_PUSHMARK(sp);
GLUT_EXTEND_STACK(sp,av_len(handler_data));
for (i=1;i<=av_len(handler_data);i++)
GLUT_PUSH_NEW_SV(*av_fetch(handler_data, i, 0));
PUTBACK;
DO_perl_call_sv(handler, G_DISCARD);
SvREFCNT_dec(handler_data);
}
static AV * glut_menu_handlers = 0;
/* Callback for glutMenuFunc */
static void generic_glut_menu_handler(int value)
{
AV * handler_data;
SV * handler;
SV ** h;
int i;
dSP;
h = av_fetch(glut_menu_handlers, glutGetMenu(), FALSE);
if (!h || !SvOK(*h) || !SvROK(*h))
croak("Unable to locate menu handler");
handler_data = (AV*)SvRV(*h);
handler = *av_fetch(handler_data, 0, 0);
GLUT_PUSHMARK(sp);
GLUT_EXTEND_STACK(sp,av_len(handler_data) + 1);
for (i=1;i<=av_len(handler_data);i++)
GLUT_PUSH_NEW_SV(*av_fetch(handler_data, i, 0));
GLUT_PUSH_NEW_IV(value);
PUTBACK;
DO_perl_call_sv(handler, G_DISCARD);
}
/* End of set up for GLUT callback stuff */
MODULE = Acme::MITHALDU::BleedingOpenGL::GLUT PACKAGE = Acme::MITHALDU::BleedingOpenGL
#// Test for done with glutInit
int
done_glutInit()
CODE:
RETVAL = _done_glutInit;
OUTPUT:
RETVAL
# GLUT
#//# glutInit();
void
glutInit()
CODE:
{
int argc;
char ** argv;
AV * ARGV;
SV * ARGV0;
SV * sv;
int i;
if (_done_glutInit)
croak("illegal glutInit() reinitialization attempt");
argv = 0;
ARGV = perl_get_av("ARGV", FALSE);
ARGV0 = perl_get_sv("0", FALSE);
argc = av_len(ARGV)+2;
if (argc) {
argv = malloc(sizeof(char*)*argc);
argv[0] = SvPV(ARGV0, PL_na);
for(i=0;i<=av_len(ARGV);i++)
argv[i+1] = SvPV(*av_fetch(ARGV, i, 0), PL_na);
}
pogl_glut.xs view on Meta::CPAN
#//# glutHideWindow();
void
glutHideWindow()
#//# glutIconifyWindow();
void
glutIconifyWindow()
#//# glutSetWindowTitle($title);
void
glutSetWindowTitle(title)
char * title
#//# glutSetIconTitle($title);
void
glutSetIconTitle(title)
char * title
#if GLUT_API_VERSION >= 3
#//# glutSetCursor(cursor);
void
glutSetCursor(cursor)
int cursor
#endif
# Overlays
#if GLUT_API_VERSION >= 3
#//# glutEstablishOverlay();
void
glutEstablishOverlay()
#//# glutUseLayer(layer);
void
glutUseLayer(layer)
GLenum layer
#//# glutRemoveOverlay();
void
glutRemoveOverlay()
#//# glutPostOverlayRedisplay();
void
glutPostOverlayRedisplay()
#//# glutShowOverlay();
void
glutShowOverlay()
#//# glutHideOverlay();
void
glutHideOverlay()
#endif
# Menus
#//# $ID = glutCreateMenu(\&callback);
int
glutCreateMenu(handler=0, ...)
SV * handler
CODE:
{
if (!handler || !SvOK(handler)) {
croak("A handler must be specified");
} else {
AV * handler_data = newAV();
PackCallbackST(handler_data, 0);
RETVAL = glutCreateMenu(generic_glut_menu_handler);
if (!glut_menu_handlers)
glut_menu_handlers = newAV();
av_store(glut_menu_handlers, RETVAL, newRV_inc((SV*)handler_data));
SvREFCNT_dec(handler_data);
}
}
OUTPUT:
RETVAL
#//# glutSetMenu($menu);
void
glutSetMenu(menu)
int menu
#//# glutGetMenu();
int
glutGetMenu()
#//# glutDestroyMenu($menu);
void
glutDestroyMenu(menu)
int menu
CODE:
{
glutDestroyMenu(menu);
av_store(glut_menu_handlers, menu, newSVsv(&PL_sv_undef));
}
#//# glutAddMenuEntry($name, $value);
void
glutAddMenuEntry(name, value)
char * name
int value
#//# glutAddSubMenu($name, $menu);
void
glutAddSubMenu(name, menu)
char * name
int menu
#//# glutChangeToMenuEntry($entry, $name, $value);
void
glutChangeToMenuEntry(entry, name, value)
int entry
char * name
int value
#//# glutChangeToSubMenu($entry, $name, $menu);
void
glutChangeToSubMenu(entry, name, menu)
int entry
char * name
int menu
#//# glutRemoveMenuItem($entry);
void
glutRemoveMenuItem(entry)
int entry
#//# glutAttachMenu(button);
void
glutAttachMenu(button)
int button
#//# glutDetachMenu(button);
void
glutDetachMenu(button)
int button
# Callbacks
#//# glutDisplayFunc(\&callback);
void
glutDisplayFunc(handler=0, ...)
SV * handler
CODE:
decl_gwh_xs_nullfail(Display, ("Display function must be specified"))
#if GLUT_API_VERSION >= 3
#//# glutOverlayDisplayFunc(\&callback);
void
glutOverlayDisplayFunc(handler=0, ...)
SV * handler
CODE:
decl_gwh_xs(OverlayDisplay)
#endif
#//# glutReshapeFunc(\&callback);
void
glutReshapeFunc(handler=0, ...)
SV * handler
CODE:
decl_gwh_xs(Reshape)
#//# glutKeyboardFunc(\&callback);
void
glutKeyboardFunc(handler=0, ...)
SV * handler
CODE:
decl_gwh_xs(Keyboard)
#if GLUT_API_VERSION >= 4
#//# glutKeyboardUpFunc(\&callback);
void
glutKeyboardUpFunc(handler=0, ...)
SV * handler
CODE:
decl_gwh_xs(KeyboardUp)
#//# glutWindowStatusFunc(\&callback);
void
glutWindowStatusFunc(handler=0, ...)
SV * handler
CODE:
{
#if defined HAVE_FREEGLUT
decl_gwh_xs(WindowStatus)
#endif
}
#endif
#//# glutMouseFunc(\&callback);
void
pogl_glut.xs view on Meta::CPAN
#//# glutJoystickFunc(\&callback); /* Open/FreeGLUT -chm */
# void /* Not implemented, don't know how */
# glutJoystickFunc(handler=0, ...)
# SV * handler
# CODE:
# decl_gwh_xs(Joystick)
#//# glutSpaceballMotionFunc(\&callback);
void
glutSpaceballMotionFunc(handler=0, ...)
SV * handler
CODE:
decl_gwh_xs(SpaceballMotion)
#//# glutSpaceballRotateFunc(\&callback);
void
glutSpaceballRotateFunc(handler=0, ...)
SV * handler
CODE:
decl_gwh_xs(SpaceballRotate)
#//# glutSpaceballButtonFunc(\&callback);
void
glutSpaceballButtonFunc(handler=0, ...)
SV * handler
CODE:
decl_gwh_xs(SpaceballButton)
#//# glutButtonBoxFunc(\&callback);
void
glutButtonBoxFunc(handler=0, ...)
SV * handler
CODE:
decl_gwh_xs(ButtonBox)
#//# glutDialsFunc(\&callback);
void
glutDialsFunc(handler=0, ...)
SV * handler
CODE:
decl_gwh_xs(Dials)
#//# glutTabletMotionFunc(\&callback);
void
glutTabletMotionFunc(handler=0, ...)
SV * handler
CODE:
decl_gwh_xs(TabletMotion)
#//# glutTabletButtonFunc(\&callback);
void
glutTabletButtonFunc(handler=0, ...)
SV * handler
CODE:
decl_gwh_xs(TabletButton)
#endif
#if GLUT_API_VERSION >= 3
#//# glutMenuStatusFunc(\&callback);
void
glutMenuStatusFunc(handler=0, ...)
SV * handler
CODE:
decl_ggh_xs(MenuStatus)
#endif
#//# glutMenuStateFunc(\&callback);
void
glutMenuStateFunc(handler=0, ...)
SV * handler
CODE:
{
#if defined HAVE_FREEGLUT
decl_ggh_xs(MenuState)
#endif
}
#//# glutIdleFunc(\&callback);
void
glutIdleFunc(handler=0, ...)
SV * handler
CODE:
decl_ggh_xs(Idle)
#//# glutTimerFunc($msecs, \&callback);
void
glutTimerFunc(msecs, handler=0, ...)
unsigned int msecs
SV * handler
CODE:
{
if (!handler || !SvOK(handler)) {
croak("A handler must be specified");
} else {
AV * handler_data = newAV();
PackCallbackST(handler_data, 1);
glutTimerFunc(msecs, generic_glut_timer_handler, (int)handler_data);
}
ENSURE_callback_thread;}
# Colors
#//# glutSetColor($cell, $red, $green, $blue)
void
glutSetColor(cell, red, green, blue)
int cell
GLfloat red
GLfloat green
GLfloat blue
#//# glutGetColor($cell, $component);
GLfloat
glutGetColor(cell, component)
int cell
int component
#//# glutCopyColormap($win);
void
glutCopyColormap(win)
int win
# State
#//# glutGet($state);
int
glutGet(state)
GLenum state
#if GLUT_API_VERSION >= 3
#//# glutLayerGet(info);
pogl_glut.xs view on Meta::CPAN
#//# void glutWarpPointer (int x, int y)
void
glutWarpPointer(x, y)
int x
int y
#//# void glutWireCylinder (GLdouble radius, GLdouble height, GLint slices, GLint stacks)
void
glutWireCylinder(radius, height, slices, stacks)
GLdouble radius
GLdouble height
GLint slices
GLint stacks
CODE:
{
#if defined HAVE_FREEGLUT
glutWireCylinder(radius, height, slices, stacks);
#endif
}
#//# void glutWireRhombicDodecahedron (void)
void
glutWireRhombicDodecahedron()
CODE:
{
#if defined HAVE_FREEGLUT
glutWireRhombicDodecahedron();
#endif
}
#endif
# /* FreeGLUT APIs */
#//# glutSetOption($option_flag, $value);
void
glutSetOption(option_flag, value)
GLenum option_flag
int value
CODE:
{
#if defined HAVE_FREEGLUT
glutSetOption(option_flag, value);
#endif
}
#//# glutLeaveMainLoop();
void
glutLeaveMainLoop()
CODE:
{
#if defined HAVE_FREEGLUT
glutLeaveMainLoop();
#else
int win = glutGetWindow();
glutDestroyWindow(win);
destroy_glut_win_handlers(win);
#endif
}
#//# glutMenuDestroyFunc(\&callback);
void
glutMenuDestroyFunc(handler=0, ...)
SV * handler
CODE:
{
#if defined HAVE_FREEGLUT
decl_gwh_xs(MenuDestroy)
#endif
}
#//# glutCloseFunc(\&callback);
void
glutCloseFunc(handler=0, ...)
SV * handler
CODE:
{
if (_done_glutCloseFunc_warn == 0) {
warn("glutCloseFunc: not implemented\n");
_done_glutCloseFunc_warn++;
}
}
#ifdef HAVE_FREEGLUT
#//# glutInitContextVersion($majorVersion, $minorVersion);
void
glutInitContextVersion(majorVersion, minorVersion)
int majorVersion
int minorVersion
CODE:
{
glutInitContextVersion(majorVersion, minorVersion);
}
#//# glutInitContextFlags($flags);
void
glutInitContextFlags(flags)
int flags
CODE:
{
glutInitContextFlags(flags);
}
#//# glutInitContextProfile($profile);
void
glutInitContextProfile(profile)
int profile
CODE:
{
glutInitContextProfile(profile);
}
#endif
( run in 2.101 seconds using v1.01-cache-2.11-cpan-cdf2f3d4e48 )