Преждевременное закрытие, нубоэксперименты :( с GLUT - Free Pascal

Узнай цену своей работы

Формулировка задачи:

здравствуйте. извините за нубство. но вот вроде сделал код
program project1;
 
{mode objfpc}
 
uses
  gl, glu, glut;
begin
  glutInit(@argc,argv);
  glutCreateWindow('OpenGL: Cube 2');
  glutMainLoop;
end.
, с обрезков примеров. если вырезать вот этот кусок, то результат тот-же :glutInit(@argc,argv); хотел, чтобы прога просто открывала окно для начала. она его открывает, но прога тут-же закрывается (файлы GLUT естественно в папке с программой. может кто объяснить нубу в чём дело? прога сделана в Lazarus, куски кода взяты из FPC IDE
ещё непонятно тут. в книге написано, что ничего лишнего нету в примерах программ. тогда становится неясным что такое cdec1, комментарии по этому поводу молчат. из листинга становится только понятно то, что это якобы описания процедур разных, но объеденённых для чего-то этим самым cdec1. зачем они объеденены, если это объеденение не используется, неясно. в книге графике уделено немного по GLUT, и тут я вроде всё прочитал
program Malevich;
uses
  GL,GLUT;
//----------------------------------------------------------
procedure OnRedraw; cdecl;      
  glClear(GL_COLOR_BUFFER_BIT); 
  glBegin(GL_QUADS);            
    glColor3f(0.8, 0.75, 0.75); 
    glVertex2f(-1, -1);     
    glVertex2f(-1,  1);     
    glVertex2f( 1,  1);     
    glVertex2f( 1, -1);     
    glColor3f(0.1,0.1,0.1); 
    glVertex2f(-0.9, -0.9); 
    glVertex2f(-0.9,  0.9); 
    glVertex2f( 0.9,  0.9); 
    glVertex2f( 0.9, -0.9); 
  glEnd;                        
  glFlush;             
end;
//-------------------------------------------------------------------
procedure OnResize(w,h:Longint); cdecl; 
begin
  glViewport(0, 0, w, h);   
  glLoadIdentity;       
  if w>h then glScalef(h/w,1,1)
  else glScalef(1,w/h,1);   
end;
//-------------------------------------------------------------------
begin
  glutInit(@argc,argv);     
  glutCreateWindow('OpenGL: Malevich'); 
  glutDisplayFunc(@OnRedraw);   
  glutReshapeFunc(@OnResize);   
  glMatrixMode(GL_MODELVIEW);
  glClearColor(1,1,1,1);       
  glutMainLoop;         
end.
комменты есть в книге, в прмерах с диска изменена кодировка и они нечитабельны
с соглашением вызова разобрался, извиняюсь, второй листинг

Решение задачи: «Преждевременное закрытие, нубоэксперименты :( с GLUT»

textual
Листинг программы
program project1;
 
{$mode objfpc}
 
uses
  gl, glu, glut;
 
procedure do_draw; cdecl;
begin
  glClear(GL_COLOR_BUFFER_BIT);
  glFlush();
end;
 
begin
  glutInit(@argc,argv);
  glutCreateWindow('OpenGL: Cube 2');
  glutDisplayFunc(@do_draw);
 
  glutMainLoop;
end.

Объяснение кода листинга программы

  1. Объявлена глобальная процедура do_draw.
  2. В основной функции программы начинается создание окна с помощью функции glutCreateWindow.
  3. Задано имя окна 'OpenGL: Cube 2'.
  4. Указана функция обратного вызова для обработки отображения с помощью функции glutDisplayFunc.
  5. В функции обратного вызова для отображения выполняется очистка буфера цвета с помощью функции glClear.
  6. Выполняется вызов функции обратного вызова с помощью функции glutMainLoop.
  7. Программа завершается.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.6 из 5
Похожие ответы