@@ -118,23 +118,35 @@ protected Size createGLFWWindow(PropertySettings appSettings, long monitor) {
118
118
protected void createFullscreen (long monitor , VideoMode requested ) {
119
119
SimpleLogger .d (getClass (), "Fullscreen resolution " + requested .getWidth () + ", " + requested .getHeight ());
120
120
GLFWVidMode vidMode = GLFW .glfwGetVideoMode (monitor );
121
- float [] x = new float [1 ];
122
- float [] y = new float [1 ];
123
- GLFW .glfwGetWindowContentScale (monitor , x , y );
121
+
122
+ float [] xscale = new float [1 ];
123
+ float [] yscale = new float [1 ];
124
+ GLFW .glfwGetMonitorContentScale (monitor , xscale , yscale );
124
125
SimpleLogger .d (getClass (), "Current monitor resolution " + vidMode .width () + ", " + vidMode .height ()
125
- + " and scale: " + x [0 ] + ", " + y [0 ]);
126
+ + " and scale: " + xscale [0 ] + ", " + yscale [0 ]);
126
127
if (requested .getWidth () == vidMode .width () && requested .getHeight () == vidMode .height ()) {
127
128
SimpleLogger .d (getClass (), "Setting current monitor to fullscreen" );
128
129
setVideoMode (requested , monitorIndex );
129
130
} else {
130
- GLFW .glfwWindowHint (GLFW .GLFW_ICONIFIED , GLFW .GLFW_FALSE );
131
- SimpleLogger .d (getClass (), "Creating new window" );
132
- window = createWindow (requested .getWidth (), requested .getHeight (), monitor );
133
- GLFWVidMode m = GLFW .glfwGetVideoMode (monitor );
134
- if (m .width () != requested .getWidth () || m .height () != requested .getHeight ()) {
135
- throw new IllegalArgumentException ("Could not create videomode" );
131
+ // Check monitor content scale
132
+ if (xscale [0 ] != 1.0 || yscale [0 ] != 1.0 ) {
133
+ VideoMode current = new VideoMode (vidMode .width (), vidMode .height (), true , requested .getSwapInterval ());
134
+ SimpleLogger .d (getClass (), "-------------------------------------------------------------------" );
135
+ SimpleLogger .d (getClass (), "Monitor scaling is set to " + (xscale [0 ]) * 100
136
+ + "%, this will affect chosen fullscreen windows." );
137
+ SimpleLogger .d (getClass (), "Setting mode to current monitor resolution " + vidMode .toString ());
138
+ SimpleLogger .d (getClass (), "To resolve this issue, turn off or set DPI scaling to 100%" );
139
+ SimpleLogger .d (getClass (), "-------------------------------------------------------------------" );
140
+ requested = current ;
136
141
}
137
142
}
143
+ window = createWindow (requested .getWidth (), requested .getHeight (), monitor );
144
+ GLFWVidMode m = GLFW .glfwGetVideoMode (monitor );
145
+ if (m .width () != requested .getWidth () || m .height () != requested .getHeight ()) {
146
+ throw new IllegalArgumentException ("Could not create videomode, requested " + requested .toString ()
147
+ + ", but is " + m .width () + ", " + m .height ());
148
+ }
149
+
138
150
}
139
151
140
152
private Size getFrameBufferSize (long window ) {
@@ -177,22 +189,31 @@ private List<Size> listVideoModes(long monitor) {
177
189
}
178
190
}
179
191
if (Environment .getInstance ().isProperty (Property .TEST_FULLSCREEN_MODES , false )) {
192
+ float [] xscale = new float [1 ];
193
+ float [] yscale = new float [1 ];
194
+ GLFW .glfwGetMonitorContentScale (monitor , xscale , yscale );
180
195
// Test if fullscreen modes are created properly.
181
- SimpleLogger .d (getClass (), "Testing " + sizes .size () + " monitor modes." );
196
+ SimpleLogger .d (getClass (),
197
+ "Testing " + sizes .size () + " monitor modes. Content scale: " + xscale [0 ] + ", " + yscale [0 ]);
182
198
int [] width = new int [1 ];
183
199
int [] height = new int [1 ];
184
200
for (Size s : sizes ) {
185
201
SimpleLogger .d (getClass (), "Creating window with size " + s .toString () + " for monitor " + monitor );
186
202
long win = GLFW .glfwCreateWindow (s .getWidth (), s .getHeight (), "" , monitor , MemoryUtil .NULL );
203
+ GLFWVidMode mode = GLFW .glfwGetVideoMode (monitor );
187
204
GLFW .glfwGetFramebufferSize (win , width , height );
188
205
Size framebuffer = new Size (width [0 ], height [0 ]);
189
206
GLFW .glfwGetWindowSize (win , width , height );
190
207
Size windowSize = new Size (width [0 ], height [0 ]);
191
208
if (framebuffer .equals (s )) {
192
- SimpleLogger .d (getClass (), "SUCCESS for monitor mode " + s .toString ());
209
+ SimpleLogger .d (getClass (), "SUCCESS for monitor mode " + s .toString () + ", vidMode " + mode .width ()
210
+ + ", " + mode .height ());
193
211
} else {
212
+
194
213
SimpleLogger .d (getClass (),
195
- "FAILED for monitor mode " + s .toString () + ", real size " + framebuffer );
214
+ "FAILED for monitor mode " + s .toString () + ", framebuffer: " + framebuffer + ", window: "
215
+ + windowSize + ", vidMode " + mode .width ()
216
+ + ", " + mode .height ());
196
217
}
197
218
GLFW .glfwDestroyWindow (win );
198
219
}
0 commit comments