【问题标题】:Java threads in OpenGL applicationOpenGL 应用程序中的 Java 线程
【发布时间】:2013-05-08 14:59:46
【问题描述】:

我想知道是否可以在 Java 中执行以下操作。我正在使用 LWJGL wrapper 开发基于 Java 的 OpenGL 应用程序。在每帧渲染完成的渲染循环中,我正在保存来自 GL 的像素帧到图像文件中。问题是帧的大小有时非常大,并且在将像素写入文件直到渲染循环的下一次开始期间它会产生明显的开销。我认为要做的是以下:

  1. 在帧渲染完成时从帧缓冲区读取像素。
  2. 在处理图像文件的类上启动一个新线程 写作。

我想知道这种技术是否有帮助?如果在单独的线程上完成下一个渲染循环,是否会在不等待图像文件保存的情况下开始?使用线程是否可行?我想要实现的是 GL 渲染循环不应该等待文件写入,而是继续渲染,同时在每个渲染循环结束时将新的像素数据提取到文件写入对象中。

【问题讨论】:

    标签: java multithreading opengl


    【解决方案1】:

    如下编写一个线程类来运行单个正在运行的线程。

    public class WritePixelsToImageThread extends Thread { 
    
        public void run(){
            // place your code here for
            // read pixels from Frame and write that image.
            // this is an individual process
        }
    }
    

    在启动该线程后

    new WritePixelsToImageThread().start();
    

    【讨论】:

    • 不管WritePixelsToImageThread 中的工作是否会导致渲染循环继续进行?
    • 是的,您在循环中添加此代码 new WritePixelsToImageThread().start();它将在 run 方法中启动新线程来完成这项工作。
    • 同步呢?如果在下一个循环中,当我将新像素提取到 WritePixelsToImageThread 中时,它仍然没有完成保存最后一帧怎么办?或者你的意思是为每个图像保存我应该创建一个新线程?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多