class CEngine
{
void RenderHere();
void ResizeWindow(GLsizei w, GLsizei h);
};
void main(void)
{
...
CEngine *myEngine = new CEngine();
glutDisplayFunc(myEngine->RenderHere);
glutReshapeFunc(myEngine->ResizeWindow);
glutMainLoop();
}
When I do this, I get an error...
''glutDisplayFunc'': cannot convert parameter 1 from ''void (void)'' to ''void(__cdecl *)(void)''
Anyone know how I can do this? I also tried puting everything that goes in the main function in my class constructor to make the window and register the callback functions, etc... but that didn''t work either.
Thanks for any help.
DarkMonkey
Callback functions in GLUT
Hello,
I am trying to wrap my functions that will be called in the GLUT callback functions in a class.
Example:
Sorry, but glut is designed for C, not C++.
If you want to implement such mechanism, you have to simulate the callback mechanism in some oriented-object way.
For example :
--in header (.h / .H / .hh / etc)
class CEngine
{
public:
void RenderHere();
void ResizeWindow(GLsizei w, GLsizei h);
static CEngine* current_engine;
};
extern void RenderHereWithEngine();
extern void ResizeWindowWithEngine(GLsizei,GLsizei);
--in source (.cpp / .C / .cc / etc)
CEngine* CEngine::current_engine == NULL;
void RenderHereWithEngine()
{
if (current_engine != NULL)
current_engine->RenderHere();
}
void ResizeWindowWithEngine(GLsizei w, GLsizei h)
{
if (current_engine != NULL)
current_engine->ResizeWindow(w, h);
}
--in main (main.cpp / main.C ...)
void main(void)
{
...
CEngine *myEngine = new CEngine();
CEngine::current_engine = myEngine;
glutDisplayFunc(RenderHereWithEngine);
glutReshapeFunc(ResizeWindowWithEngine);
glutMainLoop();
}
That''s the fastest way I know, so there may be "cleaner" ways.
If you want to implement such mechanism, you have to simulate the callback mechanism in some oriented-object way.
For example :
--in header (.h / .H / .hh / etc)
class CEngine
{
public:
void RenderHere();
void ResizeWindow(GLsizei w, GLsizei h);
static CEngine* current_engine;
};
extern void RenderHereWithEngine();
extern void ResizeWindowWithEngine(GLsizei,GLsizei);
--in source (.cpp / .C / .cc / etc)
CEngine* CEngine::current_engine == NULL;
void RenderHereWithEngine()
{
if (current_engine != NULL)
current_engine->RenderHere();
}
void ResizeWindowWithEngine(GLsizei w, GLsizei h)
{
if (current_engine != NULL)
current_engine->ResizeWindow(w, h);
}
--in main (main.cpp / main.C ...)
void main(void)
{
...
CEngine *myEngine = new CEngine();
CEngine::current_engine = myEngine;
glutDisplayFunc(RenderHereWithEngine);
glutReshapeFunc(ResizeWindowWithEngine);
glutMainLoop();
}
That''s the fastest way I know, so there may be "cleaner" ways.
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement
Recommended Tutorials
Advertisement