[General] Sugerencias con mi programa OpenGl

resulta que hice un programa en codeblocks con OpenGL.esta fucional todo, pero por más que trato no puedo hacerlo con listas de visualización (glnewlist).

Por fa ayuda.

Acxa les dejo el código, el programa genra una curva dado dos puntos.
#ifdef __APLE__.
#include <GLUT/glut, h>.
#else.
#include <GL/glut, h>.
#include <iostream>.
#endif.
#include<conio, h>.
#include<stdio, h>.
#include<math, h>.
#include<iostream>.
#include <stdlib, h>.
#define NUM_PUNTOS 200.
#define NUM_EXTREMOS 200.
#include <GL/glut, h>.
#include <iostream>.
#include<math, h>.
#include<stdio, h>.
#include <stdlib, h>.
#define max 70000000.

Using namespace std;.

Int comparar(int x, int y);.

Void dda(float x0, float y0, float x1, float y1);.

Void init(void);.

Void hermite(void);.

Void dibujar_puntos(void);.

Void dibujar_rectas(void);.

Int dim=600;.

Float P_Control[NUM_PUNTOS][2];.

Float P_Extremo[NUM_EXTREMOS][2];.

Int num_punto=0, inc=50;.

Int activ_add_point=0;.

Int activ_ver_recta=0;.

Int activ_mov_point=0;.

Int activ_curve=0;.

Int MOVENAMe =-1;.

Int MOVEPOINT =-1;.

Void init(void).
{.

GlutCreateWindow(Labo_1);.

GlClearColor(1.0, 1.0, 1.0, 0.0);.

GlMatrixMode(GL_PROJECTION);.

GlLoadIdentity();.

GluOrtho2D(0.0, dim, 0.0, dim);.
}.

Static void display(void).
{.

GlClear(GL_COLOR_BUFER_BIT | GL_DEPTH_BUFER_BIT);.

GlColor3d(1,0,0);.

GlPushMatrix();.

Dibujar_puntos();.

Dibujar_rectas();.

If(activ_curve==1){.

Hermite();.
}.

GlPopMatrix();.

GlutSwapBuffers();.
}.

Void ControlRaton(int button, int state, int x, int y){.

If(activ_add_point==1 && num_punto.= 2){.

If (button==GLUT_LEFT_BUTON && state==GLUT_DOWN){.

P_Control[num_punto][0]=x;.

P_Control[num_punto][1]=dim-y;.

P_Extremo[num_punto][0]=x+inc;.

P_Extremo[num_punto][1]=dim-y+inc;.

Cout<<x<< <<dim-y<<endl;.

Num_punto++;.
}.
}.

Else{.

If(activ_mov_point==1){.

If (button==GLUT_LEFT_BUTON && state==GLUT_DOWN){.

Int newX=x;.

Int newY=dim-y;.

Int choiceFound = 0;.

For (int i = 0; i < num_punto &&.choiceFound; i++){.

If ((abs(P_Control[i][0] – newX) <= 20) &&.
(abs(P_Control[i][1] – newY) <= 20)){.

MOVEPOINT = i;.

ChoiceFound = 1;.
}.
}.
}.

If (button == GLUT_LEFT_BUTON && state == GLUT_UP) {.

MOVEPOINT = -1;.
}.
}.

Else{.

If (button==GLUT_LEFT_BUTON && state==GLUT_DOWN){.

Int newX=x;.

Int newY=dim-y;.

Int choiceFound = 0;.

For (int i = 0; i < num_punto &&.choiceFound; i++){.

If ((abs(P_Extremo[i][0] – newX) <= 50) &&.
(abs(P_Extremo[i][1] – newY) <= 50)){.

MOVENAMe = i;.

ChoiceFound = 1;.
}.
}.
}.

If (button == GLUT_LEFT_BUTON && state == GLUT_UP) {.

MOVENAMe = -1;.
}.
}.
}.

GlutPostRedisplay();.
}.

Void myMouseMove(int x, int y).
{.

If (MOVENAMe > -1 && activ_ver_recta==1).
{.

Int newX = x;.

Int newY = dim- y;.

P_Extremo[MOVENAME][0] = newX;.

P_Extremo[MOVENAME][1] = newY;.

GlutPostRedisplay();.
}.

If (MOVEPOINT > -1 && activ_mov_point==1).
{.

Int newX = x;.

Int newY = dim- y;.

P_Control[MOVEPOINT][0] = newX;.

P_Control[MOVEPOINT][1] = newY;.

GlutPostRedisplay();.
}.
}.

Void dibujar_puntos(void){.

GlColor3d(1,0,0);.

For(int i=0;i<num_punto;i++){.

GlPointSize(10);.

GlBegin(GL_POINTS);.

GlVertex2f(P_Control[i][0],P_Control[i][1]);.

GlEnd();.
}.
}.

Void dibujar_rectas(void){.

If(activ_ver_recta==1){.

For(int i=0;i<num_punto;i++){.

Dda(P_Control[i][0],P_Control[i][1],P_Extremo[i][0],P_Extremo[i][1]);.
}.
}.
}.

Void hermite().
{.

GlLineWidth(4.0);.

GlColor3f(1,1,0);.

Float fu[4];.

GlBegin(GL_LINE_STRIP);.

For (float uInt = 0; uInt <= 1; uInt+=0.01).
{.

Float u = uInt;.

Float u2 = u*u;.

Float u3 = u2*u;.

Fu[0] = 2.0*u3 – 3.0*u2 + 1.0;.

Fu[1] = -2.0*u3 + 3.0*u2;.

Fu[2] = u3 – 2.0*u2 + u;.

Fu[3] = u3 – u2;.

Float x = 0.0;.

Float y = 0.0;.
// p0 = P_Control[0].
x += fu[0]*P_Control[0][0];.

Y += fu[0]*P_Control[0][1];.
// p1 = P_Control[1].
x += fu[1]*P_Control[1][0];.

Y += fu[1]*P_Control[1][1];.
// tangent at p0 = ctrlPoints[1]-ctrlPoints[0].
x += fu[2]*(P_Extremo[0][0]-P_Control[0][0]);.

Y += fu[2]*(P_Extremo[0][1]-P_Control[0][1]);.
// tangent at p1 = ctrlPoints[3]-ctrlPoints[2].
x += fu[3]*(P_Extremo[1][0]-P_Control[1][0]);.

Y += fu[3]*(P_Extremo[1][1]-P_Control[1][1]);.

GlVertex2i(x, y);.
}.

GlEnd();.

GlFlush();.
}.

Void dda(float x0, float y0, float x1, float y1){.

GlColor3d(1,0,0);.

GlBegin(GL_LINES);.

GlVertex2f(x0, y0);.

GlVertex2f(x1, y1);.

GlEnd();.
}.

Static void idle(void).
{.

GlutPostRedisplay();.
}.

Void menu_principal(int opción){.

Switch(opción){.

Case 4:
Exit(-1);.

Break;.
}.
}.

Void menu_puntos(int opción){.

Switch(opción){.
}.
}.

Void menu_mod_puntos(int opción){.

Switch(opción){.

Case 1:
Activ_mov_point=1;.

Activ_add_point=0;.

Break;.

Case 2:
Activ_mov_point=0;.

Break;.
}.
}.

Void menu_add_puntos(int opción){.

Switch(opción){.

Case 1:
If(num_punto.=2){.

Activ_add_point=1;.
}.

Break;.

Case 2:
Activ_add_point=0;.

Break;.
}.
}.

Void menu_recta(int opción){.

Switch(opción){.

Case 1:
Activ_ver_recta=1;.

Activ_mov_point=0;.

Break;.

Case 2:
Activ_ver_recta=0;.

Break;.
}.
}.

Void menu_curva(int opción){.

Switch(opción){.

Case 1:
If(num_punto==2){.

Activ_curve=1;.
}.

Break;.

Case 2:
Activ_curve=0;.

Break;.
}.
}.

Int main(int argc, char *argv[]).
{.

GlutInit(&argc, argv);.

GlutInitWindowSize(dim, dim);.

GlutInitWindowPosition(100,100);.

GlutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);.

Init();.

Int submenu_curva = glutCreateMenu(menu_curva);.

GlutAddMenuEntry(Activar,1);.

GlutAddMenuEntry(Desactivar,2);.

Int submenu_rectas = glutCreateMenu(menu_recta);.

GlutAddMenuEntry(Activar,1);.

GlutAddMenuEntry(Desactivar,2);.

Int submenu_add = glutCreateMenu(menu_add_puntos);.

GlutAddMenuEntry(Activar,1);.

GlutAddMenuEntry(Desactivar,2);.

Int submenu_mod = glutCreateMenu(menu_mod_puntos);.

GlutAddMenuEntry(Activar,1);.

GlutAddMenuEntry(Desactivar,2);.

Int submenu_puntos = glutCreateMenu(menu_puntos);.

GlutAddSubMenu(Ingreso de puntos , submenu_add);.

GlutAddSubMenu(Modificar posición, submenu_mod);.

Int menú = glutCreateMenu(menu_principal);.

GlutAddSubMenu(Puntos de control, submenu_puntos);.

GlutAddSubMenu(Rectas tangentes , submenu_rectas);.

GlutAddSubMenu(Curva de Hermite, submenu_curva);.

GlutAddMenuEntry(salir,4);.

GlutAttachMenu(GLUT_RIGHT_BUTON);.

GlutDisplayFunc(display);.

GlutIdleFunc(idle);.

GlClearColor(1,1,1,1);.

GlutMouseFunc(ControlRaton);.

GlutMotionFunc(myMouseMove);.

GlutMainLop();.

Return 0;.
}.

Ver más sobre el tema y los comentarios en el foro