Обработка потоков GLFW? - PullRequest
0 голосов
/ 20 января 2020

Я делаю рендер GL в окне. Сама программа работает нормально, но когда я «продвигаю» рендер l oop (как я сделал для сетевого класса, так что я предполагал, что он должен работать), программа открывается и работает в течение пары секунд перед сбоем, например, если память был заполнен?

загляните в главное, чтобы увидеть мою проблему

class MyWorld {

public:

  GLFWwindow *window;
  std::thread thread;

  MyWorld() {

    glfwInit();

    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

    window = glfwCreateWindow(300, 300, "OUTPUT", nullptr, nullptr);

    glfwMakeContextCurrent(window);

    glViewport(0, 0, 300, 300);

    glewInit();

  }

  void run() {

    while (1) {

      glfwMakeContextCurrent(window);

      glfwPollEvents();

      glClearColor(sin(glfwGetTime()), 0, 0, 1 ); // BG COLOR
      glClear( GL_COLOR_BUFFER_BIT );

      glfwSwapBuffers(window);

    }

  }

  void threadrun() {

    glfwMakeContextCurrent(NULL);
    thread = std::thread(&MyWorld::run, this);
    thread.detach();

  }

};

int main() {

  MyWorld world;

  // world.run(); // this works fine

  world.threadrun(); // this doesn't


  while (1) { continue; }


}
...