2010-09-28 9 views
0

J'essaie de coller une image sur l'écran en utilisant les menus. Mon menu fonctionne-correctement de la manière appropriée-jusqu'à ce que je bouge ma souris alors le design de carrelage disparaît?bogue potentiel openGL

#include <GL/glut.h>  
#include <fstream>  
#include <cstdlib> 
#include "TUGL.h" 
#include <glui.h> 

//Global variables 

class GLintPoint 
{ 
    public: 
    GLint x; 
    GLint y; 
}; 

GLint numpoints;  
GLintPoint P[10];  


window Win(800,600); 
frame Frame; 
GLUI *glui; 
int mainwindow; 

//Function prototypes 

void readinpoints();     
void drawline(GLint from, GLint to); 
void display(void);     
void init (void);      
void keyboard(unsigned char key, int x, int y); 
void tile1(void); 
void tile4(void); 
void tile9(void); 
void tile16(void); 
void myReshape(GLsizei W, GLsizei H); 
void define_glui_window(); 
void choice_selected(int value); 
void drawImage(void); 
//Main 

int main(int argc, char** argv) 
{ 
    glutInit(&argc, argv); 
    glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); 
    glutInitWindowSize (Win.width, Win.height); 
    glutInitWindowPosition (100, 100); 
    mainwindow = glutCreateWindow ("*star*"); 

    init(); 
    define_glui_window(); 
    glutDisplayFunc(display); 
    glutKeyboardFunc(keyboard); 
    glutReshapeFunc(myReshape); 
    readinpoints(); 

    glutMainLoop(); 
    return 0; 
} 

//Functions 

void init (void) 
{ 
    glClearColor (0.0, 0.0, 0.0, 0.0); //set background color 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho(0.0, 200, 0.0, 249, -1.0, 1.0); 

} 

void readinpoints() 

{ 
    ifstream infile("polyline.pts"); 

    numpoints=0; 
    infile>>P[numpoints].x>>P[numpoints].y; 
    while (!infile.eof()) 
    { 
    numpoints++; 
    infile>>P[numpoints].x>>P[numpoints].y; 
    } 
    numpoints=numpoints-1; 
} 

void drawline(GLint from, GLint to) 

{ 
    glBegin(GL_LINES); 
    { 
    glVertex2i(P[from].x, P[from].y); 
    glVertex2i(P[to].x, P[to].y); 
    } 
    glEnd(); 
} 

void drawImage(void); 
{ 
    glClear (GL_COLOR_BUFFER_BIT) 
    glColor3f (1.0, 0.0, 1.0);  
    glLineWidth(3); 

    drawline(0,1);   
    drawline(1,2);  
    drawline(2,3);   
    drawline(3,4); 
    drawline(4,5); 
    drawline(5,6); 
    drawline(6,7); 
    drawline(7,8); 
    drawline(8,9); 
    drawline(9,0); 

    glFlush(); 

} 

void display(void) 

{ 
    glClear (GL_COLOR_BUFFER_BIT); 
    //autoViewPort(Frame, Win); 
    drawImage();    
} 

void tile1(void) 

{ glClear (GL_COLOR_BUFFER_BIT); 
    for(int i=0; i < 1; i++) 
     for(int j=0; j < 1; j++) 
     { 
      //autoViewPort(Frame, Win); 
      glViewport(i * 800, j * 600, 800, 600); 
      drawImage(); 
      glFlush(); 
     } 
} 
void tile4(void) 

{ glClear (GL_COLOR_BUFFER_BIT); 
    for(int i=0; i < 2; i++) 
     for(int j=0; j < 2; j++) 
     { 
     // autoViewPort(400, 300); 
      glViewport(i * 400, j * 300, 400, 300); 
      drawImage(); 
        glFlush(); 
     } 
} 
void tile9(void) 

{ 
    glClear (GL_COLOR_BUFFER_BIT); 
    for(int i=0; i < 3; i++) 
     for(int j=0; j < 3; j++) 
     { 
     // autoViewPort(267, 200); 
      glViewport(i * 267, j * 200, 267, 200); 
      drawImage(); 
        glFlush(); 
     } 
} 
void tile16(void) 
{ 
    glClear (GL_COLOR_BUFFER_BIT); 
    for(int i=0; i < 4; i++) 
     for(int j=0; j < 4; j++) 
     { 
     // autoViewPort(200, 150); 
      glViewport(i * 200, j * 150, 200, 150); 
      drawImage(); 
        glFlush(); 
     } 
} 
void keyboard(unsigned char key, int x, int y) 
{ 
    switch (key) {   
     case 27:  
     exit(0); 
     break; 
     case 'f': 

    tile4(); 
    break; 
    case 'n': 
    tile9(); 
    break; 
    case 's': 
    tile16(); 
    break; 
    case 'o': 
    tile1(); 
    break; 
    } 
} 
void myReshape(GLsizei W, GLsizei H) 

{ 
    Win.set(W,H); 
    autoViewPort(Frame, Win); 
} 

void choice_selected(int value) 

{ 
    switch (value) 
    { 
    case 1: 
     tile1(); 
     break; 
    case 2: 
     tile4(); 
     break; 
    case 3: 
     tile9(); 
     break; 
    case 4: 
     tile16(); 
     break; 
    } 
} 

void define_glui_window() 
{ 
    glui = GLUI_Master.create_glui("OPTIONS", 0, 560, 50); 

    GLUI_StaticText *message1 = glui->add_statictext(" BACKGROUND COLOR "); 
    glui->add_button("Tile-1", 1, choice_selected); 
    glui->add_button("Tile-4", 2, choice_selected); 
    glui->add_button("Tile-9", 3, choice_selected); 
    glui->add_button("Tile-16", 4, choice_selected); 
    glui->set_main_gfx_window(mainwindow); 
    GLUI_Master.sync_live_all(); 
} 

Répondre

2

Vérifiez les erreurs avec glError() après chaque appel OpenGL. Le point qui échoue retournera une erreur. Ensuite, vous pouvez également rechercher le code d'erreur pour plus d'informations sur ce qui s'est mal passé.

0

Essayez

glutPosRedisaply();

après glFlush();