Всем привет!! Пробл вот в чем. Решил пустить поток с помошью SDL_CreateThread и непосредственно из него выресовывать объект. Раньше я это делал непосредственно в самом цикле программы и всё замечательно работало. Но после того как я поместил функцию render в поток программа стала вылетать с ошибкой Fatal signal: Segmentation Fault (SDL parachute Deployed). В чем может быть ошибка раскрытия этого греба...ого парашута SDL. Помогите пожалуйста кому не лень.
Заранее огромное спасибо!
void render()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0,0, -1.7);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); // ñì.
glLineWidth(6.0);
glBegin(GL_LINES);
glVertex2f(-0.565,0.121);
glVertex2f(-0.565,0.352);
glEnd();
glFlush();
SDL_GL_SwapBuffers();
}
int threadFunc(void *read)
{
while(!done)
{
SDL_Delay(100);
render();
}
return (0);
}
int main(int argc, char **argv)
{
SDL_Init(SDL_INIT_TIMER | SDL_INIT_VIDEO);
SDL_SetVideoMode(WIDTH,HEIGHT,32,SDL_OPENGL | SDL_FULLSCREEN);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0,(GLfloat)width/(GLfloat)height,0.1f,50.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
SDL_ShowCursor(SDL_DISABLE);
glClearDepth(1);
glDepthFunc(GL_LEQUAL);
glEnable(GL_DEPTH_TEST);
glEnable(GL_MAP2_VERTEX_3);
glEnable(GL_AUTO_NORMAL);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
glLightfv(GL_LIGHT0, GL_POSITION, lightpos);
glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);
glClearColor(1,1,1,1);
SDL_Thread *thread;
thread = SDL_CreateThread(threadFunc, NULL);
if (thread == NULL)
{
cout<<"Thread error"<<endl;
return;
}
while(!done)
{
SDL_Event event;
while(SDL_PollEvent(&event))
{
switch(event.type)
{
case SDL_KEYDOWN:
done = 1;
break;
}
}
SDL_Delay(20);
// render();
}
SDL_Quit();
return 0;
}