2014-11-30 18 views
6

Yeniden boyutlandırılabilir değil yeniden boyutlandırılabilir değiştirmeye çalışıyorum bir GLFW3 penceresi var.Yeniden boyutlandırılamayan bir GLFW penceresi ayarlama

Pencere oluşturulduktan sonra Pencere İpucu değiştirmeyi denedim, ancak bu ipuçları yalnızca oluşturulacak pencereyi etkilediğinden hiçbir şey yapmaz.

ne denedim:

glfwWindowHint(GLFW_RESIZABLE, GL_FALSE) 

bu mümkün mü? Bunu düşündüğüm bir yolu, yeniden boyutlandırılamaz olarak ayarlandıktan sonra pencere boyutunu geçerli boyuta döndüren onResize işlevi görüyordu. Bu çok berbat görünüyor.

Teşekkür

+1

Komutu glfwCreateWindow (...) 'dan önce yerleştiririm ve çalışır. Şimdi, pencereyi yeniden boyutlandıramıyorum. (Sürüm: GLFW 3.0.4) – mathew11

cevap

5

GLFW şu anda pencere oluşturulduktan sonra bu durumu değiştirmek için hiçbir API vardır.

  1. Zaten sahip geçici çözüm: Eğer GLFW kullanmak istediğinizde

    , iki seçenek var.

  2. Bu durumu değiştirdiğinizde yeni bir pencere oluşturun.
  3. Gerçek pencere tutamaçlarını elde etmek ve her bir platformun özelliğini uygulamak için GLFW native access'u kullanın (önemsediğinizde).

Tüm varyantlar bana çok çekici gelmiyor. Seçenek 2, GL bağlamlarının GLFW'deki pencerelere bağlanma biçimi nedeniyle özellikle kötüdür, ekstra (görünmez) bir pencere ve paylaşılan GL bağlamları kullanılarak mümkün olmalıdır, ancak çirkin olacaktır. Seçenek 3, tüm ilgili platformlar için uygulandıktan sonra kusursuz çalışması gerektiği avantajına sahiptir. GLFW açık kaynak olduğundan, bu seçenek 3b'yi de etkinleştirir:) bunu doğrudan GLFW'de uygulayın ve API'yi genişletin. Bunu resmi GLFW versiyonuna entegre edebileceksiniz bile.

5

Yaklaşımınız, GLFW 3.1.1-1'deki gibi çalışır.

#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; 
} 
+2

Downvoters, bu cevabın neden yanlış olduğunu anlattığın için teşekkürler, böylece bilgiyi öğrenebilir ve geliştirebilirim. –

0

Bu çalışır ama bu kesinlikle o geçiş edebilmek için gereken yalnızca olduğu gibi son derece, diğer çözüm önerilerinde: Aşağıdaki kodu ile Ubuntu 15.10 üzerinde test edilmiştir.

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 :) 
}