Всем привет!! Пробл вот в чем. Решил пустить поток с помошью 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; }