Страницы

Поиск по вопросам

среда, 11 декабря 2019 г.

OpenGL и многопоточность

#cpp #linux #многопоточность #opengl


g++ -std=c++0x main.cpp -pthread -o main -lglut -lGL - вот так выглядит скрипт, которым
я компилирую свой код.

При запуске программы получаю ошибку  


  terminate called after throwing an instance of 'std::system_error'
    what():  Enable multithreading to use std::thread: Operation not permitted  


если компилировать g++ -std=c++0x main.cpp -pthread -o main -lglut (есть без параметра
-lGL), то многопоточность работает, но отрубается OpenGL, разумеется чтобы это скомпилить
я закомментил все что связано с opengl. Нужно чтобы одновременно работали и многопоточность
и OpenGL.  

Код:  

#include 
#include 
#include 

float x=-0.5;
using namespace std;

void renderScene(void) 
{
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
   glBegin(GL_TRIANGLES);
   glVertex3f(-0.5,-0.5,0.0);
   glVertex3f(0.0,0.5,0.0);
   glVertex3f(0.5,-0.5,0.0);
   glEnd();
   glRotatef(10,0,0,1);
   glutSwapBuffers();
}

void t1()
{
   while(x<1)
   {
      x=x+0.1;
      cout << x << endl;
   }
}

int main(int argc, char **argv) 
{
    thread thr(t1);
    thr.join();

    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA | GLUT_MULTISAMPLE);
    glutInitWindowPosition(100,100);
    glutInitWindowSize(400,400);
    glutCreateWindow("ss");
    glEnable(GL_MULTISAMPLE);
    glutDisplayFunc(renderScene);
    glutMainLoop();

    return 0;
}

    


Ответы

Ответ 1



А если добавить вот эту опцию компиляции -D_REENTERANT ? UPD: Вот так работает, Вы забыли подключить библиотеку -lpthread g++ -c ./test.cpp -std=c++0x -pthread -D_REENTERANT g++ -o ./test ./test.o -lglut -lGL -lm -lpthread -pthread

Комментариев нет:

Отправить комментарий