据我了解,如果希望在使用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”工作?
答案 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版都没有引入任何功能。而是获取最新版本并阅读以下内容:
该函数期望作为其第一个和第二个参数:
要设置其回调的窗口。
新的回调,或者为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。