我应该将什么传递给glfwSetWindowSizeCallback?

时间:2018-10-09 22:24:50

标签: c++ opengl window glfw

据我了解,如果希望在使用glfw时重新调整其OpenGL窗口的大小,则标题中的功能是必需的。

根据我在文档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”工作?

2 个答案:

答案 0 :(得分:1)

glfwSetWindowSizeCallback(m_Window, [](GLFWwindow* window, int width, int height)
            {
                 //Do Something
            });

我使用lambda函数进行回调。您可以得到指向窗口,窗口的宽度和高度的指针。您可以在// Do Something区域中执行任何操作,并使用从参数中获得的数据。

答案 1 :(得分:0)

  

我收到一个错误:此范围内未声明“ 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);
}

有关更多信息,请检查this tutorial,特别是this part