2015-05-04 44 views
1

我想在同一時間顯示兩個顯示,使用線程並在2個不同的畫布上顯示它們。軟件有沒有辦法使用多個LWJGL上下文

統計:

  • OS名的Linux
  • OS版本3.16.0-34泛型
  • LWJGL版本2.9.3
  • 的OpenGL 3.3版本(核心配置文件)梅薩10.1。從我的GUI類3

代碼,我試圖運行:

我的線程類
public UIMain2() { 
    initComponents(); 

    canvas1 = new Canvas(); 
    canvas1.setSize(700, 350); 
    canvas1.setBackground(Color.WHITE); 
    canvas1.isDisplayable(); 
    canvas1.setVisible(true);  
    jPanel2.add(canvas1);  
    dt1 = new DisplayThread(canvas1); 
    dt1.start(); 

    canvas2 = new Canvas(); 
    canvas2.setSize(700, 350); 
    canvas2.setBackground(Color.WHITE); 
    canvas2.isDisplayable(); 
    canvas2.setVisible(true);  
    jPanel3.add(canvas2);  
    dt2 = new DisplayThread(canvas2); 
    dt2.start(); 
} 

示例代碼:我DISPLAYMANAGER類

public class DisplayThread extends Thread { 

    Canvas canvas; 
    String modelString = ""; 
    Player player; 
    Camera camera; 
    DisplayManager m; 

    public DisplayThread(Canvas canvas) { 
     this.canvas = canvas; 
    } 

    public void run() { 
     m = new DisplayManager(); 
     m.createDisplayJFrame(canvas); 
     ... 
    } 

    ... 

} 

示例代碼:

public class DisplayManager { 

    private static final int WIDTH = 700; 
    private static final int HEIGHT = 350; 
    private static final int FPS_CAP = 120; 

    private static long lastFrameTime; 
    private static float delta; 

    //Display d = new Display(); 


    public void createDisplayJFrame(Canvas canvas) { 

     ContextAttribs attribs = new ContextAttribs(3, 2) 
      .withForwardCompatible(true).withProfileCore(true); 

     try { 

      Display.setDisplayMode(new DisplayMode(WIDTH, HEIGHT)); 
      Display.setParent(canvas); 
      Display.create(new PixelFormat(), attribs); 
      Display.setTitle("Potato"); 
     } catch (LWJGLException ex) { 
     } 
     GL11.glViewport(0, 0, WIDTH, HEIGHT); 
    } 

    ... 

} 

,我得到的錯誤是:「只有一個LWJGL上下文可以在任何實例一次「

是否有解決這個問題的方法來顯示每個線程的顯示?目前只有一個畫布顯示一個畫面。

回答

1

LWJGL2只允許通過Display類中的靜態方法訪問單個顯示。如果您想要使用多個顯示器,則必須升級到版本3,其中GLFW可讓您更好地控制窗口。

然而,作爲解決方法,您可以使用LWJGL顯示和帶有Canvas的JFrame。然後你可以渲染成一個framebuffer,獲取像素數據glGetTexImage並將其顯示在畫布上。

但是因爲這樣不會有很好的性能,而且因爲LWJGL3已經很穩定了,所以我推薦你使用新版本。

相關問題