Jump to content
  • Advertisement
Sign in to follow this  
OgbobeBuko

OpenGL new Opengl Window

This topic is 2548 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

hi, just wanted to ask if it was possible to have two opengl windows.....something of this nature......run program first window displays click button in the first window and the second window displays covering the first one...close the second window the first window dislays again...

if this is possible can anyone please tell me how i could achieve that......
working with opengl and glut

thank you.

Share this post


Link to post
Share on other sites
Advertisement
http://docs.google.com/viewer?a=v&q=cache:o0oeSgPKnqIJ:www.cs.uml.edu/~hmasterm/Charts/Managing_Multiple_Windows.ppt+glut+multiple+windows+demo&hl=sv&gl=se&pid=bl&srcid=ADGEESihxzk1y3TDCXn6d5irTvT0eoQWFZmh6L-rLJo0UKQNO5WLd7tjoe8DxW6_wOzOu1F6U7VqTnFtTkhbGkd-gyJn6TpPkbNUcjAtHqDgSsGSZ-keOGkPA16TRsnBflwj8NMrIshN&sig=AHIEtbQDybhldTyKsm014-eghrMqGlOgHQ

or if you have powerpoint:

http://www.cs.uml.edu/~hmasterm/Charts/Managing_Multiple_Windows.ppt

Share this post


Link to post
Share on other sites
I don't think GLUT can get you multiple windows. It's really intended as a simple framework for abstracting some of the OS interaction, but that simplification comes at a cost and the cost is flexibility.

Share this post


Link to post
Share on other sites
thanks guys for your reply....

@Brother Bob ..i have a window already with 2D buttons rendered...but i want to also add animations into my program..but i want the animations to run in another opengl window after the animation button has been clicked....then return back to the first window after the animation is finished...

@SimonForsman...thanks for the link ..i'll take a look at it...

Share this post


Link to post
Share on other sites
All you need to do is create the second window as you need it, draw as usual, and destroy it when you're done. As I said in my first post, I'm not sure what specific part, or if it's the whole concept of having multiple window, you're having problem with.

From your vague description of your program, it sounds like you just need to do the following:
  • When clicking the button, create a new window and register the callbacks for that window.
  • The new window's display callback displays the animation.
  • The new window's idle callback drives the animation forward.
  • When the animation is finished, destroy it.

Share this post


Link to post
Share on other sites

All you need to do is create the second window as you need it, draw as usual, and destroy it when you're done. As I said in my first post, I'm not sure what specific part, or if it's the whole concept of having multiple window, you're having problem with.

From your vague description of your program, it sounds like you just need to do the following:
  • When clicking the button, create a new window and register the callbacks for that window.
  • The new window's display callback displays the animation.
  • The new window's idle callback drives the animation forward.
  • When the animation is finished, destroy it.


thanks Brother Bob for your reply.......i am still having issues creating the second window.....the first window creates alright but when i click the button for the animation window to be created nothing happens..
any idea why this might be happening??




void main(int argc, char** argv) {
atexit(OnShutdown);
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
glutInitWindowSize(width, height);
//glutCreateWindow("GLUT Picking Demo [using selection buffer]");

// Make Main outer window
window1 = glutCreateWindow("Satellite Assembly");
glutDisplayFunc(OnRender);
glutReshapeFunc(OnReshape);
glutIdleFunc(OnIdle);


if(animate){
// Create First subwindow
window2 = glutCreateWindow("Animation");
glutDisplayFunc(display2);
glutReshapeFunc(animation_Reshape);
glutIdleFunc(OnIdle1);

}


glutKeyboardFunc(OnKey);
glutSpecialFunc (keyboard_s);
glutMouseFunc(Mouse);
glutMotionFunc(Motion);
glutPassiveMotionFunc(MousePassiveMotion);

InitGL();

glutMainLoop();
}



static void TheButtonCallback8()
{
animate=true;
loadMast = true;
loadReflector = true;
loadReceiver = true;
loadConnector = true;
loadStand = true;
printf("Run Animation");
}



thanks alot for your help

Share this post


Link to post
Share on other sites
Think about your code; under what conditions will the second window be created?

I will be created when main executes and animate is true. The variable animate is not true when you start the program, so it won't be created when the program starts. Is the function main executed again, at any time, after animate is set to true? If not, then that code is never going to be reached again. But if it is called again, so the second window can be created, you have other problems as well; you will completely reinitialize everything, including creating another primary window. Not to mention that in a well-formed program, you are not allowed to call main yourself.

You need to create the window in some piece of code that is actually executed when you press your button. If it's not executed, well, then nothing happens. Take a look at this quick example.
[source]
#include <GL/glut.h>

int primaryWindow = 0;
int secondaryWindow = 0;
GLfloat angle = 0;

void idleFunc();

void redisplaySecondaryFunc()
{
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0, 0, -5);
glRotatef(angle, 0, 1, 0);
glutWireTeapot(2);
glutSwapBuffers();
}

void reshapeSecondaryFunc(int w, int h)
{
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-1, 1, -1, 1, 1, 10);
glMatrixMode(GL_MODELVIEW);
}

void redisplayFunc()
{
glClearColor(0.75, 0.75, 1, 1);
glClear(GL_COLOR_BUFFER_BIT);
glutSwapBuffers();
}

void reshapeFunc(int w, int h)
{
glViewport(0, 0, w, h);
}

void mouseFunc(int button, int state, int, int)
{
if(button == GLUT_LEFT_BUTTON && state == GLUT_DOWN && secondaryWindow == 0)
{
secondaryWindow = glutCreateWindow("animation");
glutDisplayFunc(redisplaySecondaryFunc);
glutReshapeFunc(reshapeSecondaryFunc);
glutIdleFunc(idleFunc);

angle = 0;
}
}


void idleFunc()
{
if(secondaryWindow != 0)
{
angle += 1;
if(angle < 360)
{
glutPostWindowRedisplay(secondaryWindow);
}
else
{
glutIdleFunc(0);
glutDestroyWindow(secondaryWindow);

secondaryWindow = 0;
angle = 0;
}
}
}

void main (int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_DEPTH);
glutInitWindowSize(400,400);
primaryWindow = glutCreateWindow(argv[0]);
glutDisplayFunc(redisplayFunc);
glutMouseFunc(mouseFunc);
glutReshapeFunc(reshapeFunc);
glutMainLoop();
}
[/source]
It creates secondary window with some animation when you click inside the primary window. Keep in mind though that the idle callback is global and not tied to any particular window.

Share this post


Link to post
Share on other sites
solved the errors but its having serious effects on my animations ....cant explain why.....models don't display properly(look like shadows)...some timing orientations were also affected......any ideas on how i could solve this problem...





static void TheButtonCallback8()
{

if(window2==0){
window2 = glutCreateWindow("animation");
glutDisplayFunc(display2); //animation display
glutReshapeFunc(OnReshape);
glutIdleFunc(onIdle1);
}


printf("Run Animation");
}

void OnIdle1()
{
if(window2 != 0)
{
rY += 0.05;

glutPostWindowRedisplay(window2);
}
else
{
glutIdleFunc(0);
glutDestroyWindow(window2);
glutPostWindowRedisplay(window1);

window2 = 0;
rY = 0;
}

}

void main(int argc, char** argv) {
atexit(OnShutdown);
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
glutInitWindowSize(width, height);
//glutCreateWindow("GLUT Picking Demo [using selection buffer]");

// Make Main outer window
window1 = glutCreateWindow("Satellite Assembly");
glutDisplayFunc(OnRender);
glutReshapeFunc(OnReshape);
glutIdleFunc(onIdle);

glutKeyboardFunc(OnKey);
glutSpecialFunc (keyboard_s);
glutMouseFunc(Mouse);
glutMotionFunc(Motion);
glutPassiveMotionFunc(MousePassiveMotion);

InitGL();

glutMainLoop();

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!