GLFW get screen height/width?

2020-06-12 04:46发布

Playing around with OpenGL for a while, using the freeglut library, I decided that I will use GLFW for my next training project instead, since I was told that GLUT was only designed for learning purposes and should not be used professionally. I had no problems with linking the lib to my NetBeans project and it compiles just fine, using mingw32 4.6.2.

However, I am running into difficulties trying to position the window at the center of the screen. Under freeglut, I previously used:

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

I can't find any glfw function that would return the screen size or width. Is such a function simply not implemented?

标签: c++ opengl glfw
4条回答
孤傲高冷的网名
2楼-- · 2020-06-12 04:55

first you need two variables to store your width and height.

int width, height;

then as described on page 14 of the reference.

glfwSetWindowPos(width / 2, height / 2);

and as a bonus you can then call

glfwGetWindowSize(&width, &height);

this a void function and does not return any value however it will update the two previously declared variables.. so place it in the mainloop or the window reshape callback function.

you can verify this in the official manual here on page 15.

查看更多
在下西门庆
3楼-- · 2020-06-12 05:02
// 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.
查看更多
唯我独甜
4楼-- · 2020-06-12 05:06

How about glfwGetDesktopMode, I think this is what you want.

Example:

GLFWvidmode return_struct;

glfwGetDesktopMode( &return_struct );

int height = return_struct.Height;
查看更多
家丑人穷心不美
5楼-- · 2020-06-12 05:07

This might help somebody...

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_Width and m_Height are variables that have the width and the height of the window.

Reference: http://www.glfw.org/docs/latest/monitor.html

查看更多
登录 后发表回答