Установка окна GLFW как не изменяемого размера

У меня есть окно GLFW3, которое я пытаюсь изменить с изменяемого размера на не изменяемый.

Я попытался изменить подсказку окна после создания окна, но это ничего не делает, поскольку подсказки влияют только на создаваемое окно.

что я пробовал:

glfwWindowHint(GLFW_RESIZABLE, GL_FALSE)

это возможно? Одним из способов сделать это, о котором я думал, была функция onResize, которая изменяет размер окна обратно на текущий размер после установки не изменяемого размера. Это кажется очень хакки.

спасибо

3 ответов


GLFW в настоящее время не имеет API для изменения этого состояния после создания окна.

когда вы хотите использовать GLFW, я вижу два варианта:

  1. решение у вас уже есть.
  2. создайте новое окно при переключении этого состояния.
  3. использовать GLFW native access чтобы получить реальные дескрипторы окон и реализовать функцию для каждой платформы (вы заботитесь).

все варианты не кажутся слишком привлекательными ко мне. Вариант 2 особенно плох из-за того, как контексты GL привязаны к окнам в GLFW, это должно быть возможно с помощью дополнительного (невидимого) окна и общих контекстов GL, но это будет уродливо.

Вариант 3 имеет то преимущество, что он должен работать безупречно, как только он будет реализован для всех соответствующих платформ. Поскольку GLFW является открытым исходным кодом, это также включает опцию 3b): реализовать это непосредственно в GLFW и расширить API. Возможно, вы даже сможете интегрировать это в официальный Версия GLFW.


ваш подход работает с GLFW 3.1.1-1. Протестировано на Ubuntu 15.10 с кодом ниже:

#include <GLFW/glfw3.h>

int main(void) {
    GLFWwindow* window;
    if (!glfwInit())
        return -1;
    glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);
    window = glfwCreateWindow(640, 480, __FILE__, NULL, NULL);
    if (!window) {
        glfwTerminate();
        return -1;
    }
    glfwMakeContextCurrent(window);
    while (!glfwWindowShouldClose(window)) {
        glfwSwapBuffers(window);
        glfwPollEvents();
    }
    glfwTerminate();
    return 0;
}

этой работает но я настоятельно рекомендую другие решения, так как это только в том случае, если вам строго нужно иметь возможность тумблер его.

IntBuffer wid = BufferUtils.createIntBuffer(1);
IntBuffer hei = BufferUtils.createIntBuffer(1);

glfwGetWindowSize(window, wid, hei);

int windowWidth = wid.get();
int windowHeight = hei.get(); // I recommend making this public

while(!glfwWindowShouldClose(window)) {
    glfwSetWindowSize(window, windowWidth, windowHeight);
    // People can still maximize the window ... Comment if you have a solution :)
}