Что я должен передать glfwSetWindowSizeCallback? - PullRequest
0 голосов
/ 10 октября 2018

Из того, что я понимаю, функция в названии необходима, если вы хотите изменить размеры окон OpenGL при использовании glfw.

Из того, что я прочитал в документации: https://www.glfw.org/docs/latest/group__window.html#gaa40cd24840daa8c62f36cafc847c72b6, это должны быть параметры GLFWwindow * и GLFWwindow *.

Однако, если я пытаюсь объявить

 GLFWwindow * test;

, я получаю сообщение об ошибке: «GLFWwindow» не было объявлено в этой области |Это имеет смысл, так как я использую glfw 2.7.9

Код, который у меня есть:

if (!glfwOpenWindow (1024,768,8,8,8,0,8,0,GLFW_WINDOW)) {
  glfwTerminate();
  return 0;
}
glfwSetWindowTitle ("Test window:");
glfwSetWindowSizeCallback (/*what to put here?*/);

Итак, что мне поставить, чтобы заставить работать "glfwSetWindowSizeCallback"?

1 Ответ

0 голосов
/ 10 октября 2018

Я получаю сообщение об ошибке: «GLFWwindow» не было объявлено в этой области |Это имеет смысл, поскольку я использую glfw 2.7.9

Не использовать 2.7.2.Ей 7 лет. Кроме того, ни одна из функциональных возможностей в ваших вопросах не была представлена ​​до версии 3.0.Вместо этого получите последнюю версию и прочитайте следующее:

Функция ожидает в качестве первого и второго параметра:

  1. Окно, для которого необходимо установить обратный вызов.

  2. Новый обратный вызов или NULL для удаления текущего установленного обратного вызова.

Пример:

GLFWwindow* window;
glfwSetWindowSizeCallback(window, window_size_callback); // Set the to callback function name
void window_size_callback(GLFWwindow* window, int width, int height)
{
    // What to do
}

Обратите внимание, что:

Функция обратного вызова получает новый размер в экранных координатах клиентской области окна при изменении его размера.

Для этого:

Не передавайте размер окна в glViewport или другие пиксельные вызовы OpenGL.Используйте размер кадрового буфера в пикселях для вызовов на основе пикселей.

Поэтому, если вы пытаетесь добиться изменения размера окна с помощью glViewport, вместо этого сделайте следующее:

GLFWwindow* window;
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
void framebuffer_size_callback(window, int width, int height)
{
    glViewport(0, 0, width, height);
}

Для получения дополнительной информации, проверьте этот учебник , в частности эту часть .

...