GLFW获得屏幕高度/宽度?

时间:2012-07-04 20:48:54

标签: c++ opengl glfw

使用freeglut库来玩OpenGL一段时间后,我决定将GLFW用于我的下一个培训项目,因为我被告知GLUT仅用于学习目的,不应该专业使用。我将lib链接到我的NetBeans项目没有问题,使用mingw32 4.6.2编译得很好。

但是,我在尝试将窗口定位在屏幕中心时遇到了困难。 在freeglut下,我之前使用过:

glutInitWindowPosition ( 
                         (glutGet(GLUT_SCREEN_WIDTH)-RES_X)  / 2,
                         (glutGet(GLUT_SCREEN_HEIGHT)-RES_Y) / 2 
                       );

我找不到任何会返回屏幕大小或宽度的glfw函数。这样的功能根本没有实现吗?

4 个答案:

答案 0 :(得分:8)

glfwGetDesktopMode如何,我认为这就是你想要的。

示例:

GLFWvidmode return_struct;

glfwGetDesktopMode( &return_struct );

int height = return_struct.Height;

答案 1 :(得分:5)

首先你需要两个变量来存储你的宽度和高度。

int width, height;

然后如reference.

第14页所述
glfwSetWindowPos(width / 2, height / 2);

然后作为奖励,您可以致电

glfwGetWindowSize(&width, &height);

这是一个void函数,并且不返回任何值,但它会更新两个先前声明的变量..所以将它放在mainloop或window reshape回调函数中。

您可以在第15页的官方手册here中对此进行验证。

答案 2 :(得分:2)

这可能对某人有帮助......

void Window::CenterTheWindow(){
            GLFWmonitor* monitor = glfwGetPrimaryMonitor();
            const GLFWvidmode* mode = glfwGetVideoMode(monitor);
            glfwSetWindowPos(m_Window, (mode->width - m_Width) / 2, (mode->height - m_Height) / 2);
}

m_Widthm_Height是具有窗口宽度和高度的变量。

参考:http://www.glfw.org/docs/latest/monitor.html

答案 3 :(得分:0)

// Settings
int SCR_WIDTH = 800;
int SCR_HEIGHT = 600;
char TITLE[] = "Stack Overflow";
/*..Initilized..*/
const GLFWvidmode* mode = glfwGetVideoMode(glfwGetPrimaryMonitor());
GLFWwindow* window = glfwCreateWindow(SCR_WIDTH,SCR_HEIGHT,TITLE,nullptr,nullptr);
// Because (x,y) starts from the top left corner, We got to subtract our window size.
glfwSetWindowPos(window,(mode->width-SCR_WIDTH)/2,(mode->height-SCR_HEIGHT)/2);
//divided by two to center.