Проблема с верхним левым краем окна при переходе из полноэкранного режима в оконный режим - GLFW / LWJGL - PullRequest
0 голосов
/ 30 ноября 2019

По сути, я создаю простой игровой движок, использующий Java с LWJGL. Для создания окна я использую GLFW, и проблема в том, что когда я открываю окно в полноэкранном режиме, а затем перехожу в оконный режим, верхние левые пиксели не отображаются, они в основном становятся прозрачными и показывают, что под ними. Пример:

enter image description here

Самое странное, что когда я создаю окно в оконном режиме, а затем перехожу в полноэкранный режим и обратно, это уже небывает, так что я думаю, что это как-то связано с подсказками 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);
}
...