java - 使用着色器在 Windows 中工作但在 Linux 中不工作的 OpenGL 渲染

标签 java linux opengl shader lwjgl

我在尝试运行简单的 Java 代码以使用着色器渲染简单的三角形时遇到问题。在 Windows 中它运行良好 screenshot , 在 Linux 中它只显示黑屏。

我正在使用 Ubuntu 14.10 和 Mesa 10.1.3,以及 lwjgl作为框架。

这是我的主要绘图功能的代码:

private static void render() {
     GL20.glEnableVertexAttribArray(0);

     GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vbo);
     GL20.glVertexAttribPointer(0, 3, GL11.GL_DOUBLE, false, Vertex.BYTES, 0);

     GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, ibo);

     GL11.glDrawElements(GL11.GL_TRIANGLES, vertices.size(), GL11.GL_UNSIGNED_INT, 0);

     GL20.glDisableVertexAttribArray(0);
}

这是用于测试目的的简单代码的完整版本:code .

编辑:多次运行相同代码后,其中一个绘制this ,我无法复制它。

最佳答案

目前最大的问题是您拥有核心配置文件上下文,但您没有使用顶点数组对象。为什么 Windows 允许这样做,很难说,但 Linux 提供了您期望的行为。

您将需要在您的软件中至少创建并绑定(bind)一个顶点数组对象一次,因为这是编写 3.3 核心配置文件 软件的必需步骤。

如果将此添加到 Main.create (...),您将拥有符合 3.3 标准的核心代码:

int vao = GL30.glGenVertexArrays ();
GL30.glBindVertexArray (vao);

关于java - 使用着色器在 Windows 中工作但在 Linux 中不工作的 OpenGL 渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25957768/

相关文章:

java - 绘制纹理四边形 OpenGL

java - 致命 :gpu_data_manager_impl_private. cc(439)] GPU 进程不可用。再见

java - 线程重新运行run()方法

linux - nvcc 从命令行而不是从 shell 运行

linux - 亚马逊 EC2 实例 "Permission denied (publickey)"

opengl - 无法从附加到 FBO 的深度纹理读取深度值

objective-c - 如何在 OpenGL 中向网格对象添加顶点?

java - 如何将本地spring boot项目添加为另一个spring boot项目的依赖

java - 在 Android 中以 PKCS#1 格式在 Android 中生成 RSA key

c - kvm:模块验证失败:缺少签名和/或所需的 key - 污染内核