По сути, я создаю простой игровой движок, использующий Java с LWJGL. Для создания окна я использую GLFW, и проблема в том, что когда я открываю окно в полноэкранном режиме, а затем перехожу в оконный режим, верхние левые пиксели не отображаются, они в основном становятся прозрачными и показывают, что под ними. Пример:
Самое странное, что когда я создаю окно в оконном режиме, а затем перехожу в полноэкранный режим и обратно, это уже небывает, так что я думаю, что это как-то связано с подсказками glfw, может быть?
Еще одна странная вещь заключается в том, что когда я изменяю размер окна до меньшего с помощью мыши, эти верхние левые пиксели исчезают, однако, когдаЯ изменяю размер, они снова появляются ...
У кого-нибудь есть решение, которое не требует, чтобы я запускал окно в оконном режиме и только потом переходил в полноэкранный режим?
Так как я строюВ движке код уже несколько сложен, но, если я извлекаю функции GLFW, он выглядит примерно так:
GLFWErrorCallback.createPrint(System.err).set();
if (!GLFW.glfwInit());
GLFW.glfwDefaultHints();
GLFW.glfwWindowHint(GLFW.GLFW_OPENGL_FORWARD_COMPAT, true);
GLFW.glfwWindowHint(GLFW.GLFW_CONTEXT_VERSION_MAJOR, 4);
GLFW.glfwWindowHint(GLFW.GLFW_CONTEXT_VERSION_MINOR, 6);
GLFW.glfwWindowHint(GLFW.GLFW_OPENGL_PROFILE, GLFW.GLFW_OPENGL_CORE_PROFILE);
long monitorReference = ...;
GLFWVidMode mode = GLFW.glfwGetVideoMode(monitorReference);
long windowReference = GLFW.glfwCreateWindow(mode.width(), mode.height(), title, monitorReference, 0);
GLFW.glfwMakeContextCurrent(windowReference);
GLCapabilities capabilities = GL.createCapabilities();
GLFW.glfwSwapInterval(1);
GLFW.glfwShowWindow(windowReference);
GL11.glViewport(0, 0, windowWidth, windowHeight);
// Bind Callbacks To Events
...
// main loop
while (toRun) {
if (Keyboard.isKeyPressed(GLFW.GLFW_KEY_F)) // go from fullscreen mode to windowed mode
GLFW.glfwSetWindowMonitor(windowReference, 0, somePosX, somePosY, someWidth, someHeight, 0);
GLFW.glfwSwapBuffers(windowReference);
GLFW.glfwPollEvents();
}
// Cleanup stuff
...
// Resize callback code
static void windowSizeCallback(long windowReference, int width, int height) {
if (GLFW.glfwGetCurrentContext() != windowReference) {
GLFW.glfwMakeContextCurrent(windowReference);
GL.setCapabilities(capabilities);
}
GL11.glViewport(0, 0, newWindowWidth, newWindowHeight);
}