Установка окна GLFW как не изменяемого размера
У меня есть окно GLFW3, которое я пытаюсь изменить с изменяемого размера на не изменяемый.
Я попытался изменить подсказку окна после создания окна, но это ничего не делает, поскольку подсказки влияют только на создаваемое окно.
что я пробовал:
glfwWindowHint(GLFW_RESIZABLE, GL_FALSE)
это возможно? Одним из способов сделать это, о котором я думал, была функция onResize, которая изменяет размер окна обратно на текущий размер после установки не изменяемого размера. Это кажется очень хакки.
спасибо
3 ответов
GLFW в настоящее время не имеет API для изменения этого состояния после создания окна.
когда вы хотите использовать GLFW, я вижу два варианта:
- решение у вас уже есть.
- создайте новое окно при переключении этого состояния.
- использовать 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 :)
}