首页 > 解决方案 > GL30 库中不存在 glGenVertexArrays()。(JAVA LWJGL)

问题描述

我正在尝试按照这个OpenGL 教程来渲染一个简单的三角形。在教程开始时,在“The VAO”部分下,我被告知要编写以下代码:

GLuint VertexArrayID;
glGenVertexArrays(1, &VertexArrayID);
glBindVertexArray(VertexArrayID);

我的这个 C 代码片段的 Java 代码是

int VertexArrayID;
glGenVertexArrays(1, VertexArrayID);
glBindVertexArray(VertexArrayID);

文档中,说明我导入的 GL30 类包括方法 glGenVertexArray() 和 glBindVertexArray()。然而 IntelliJ 没有将其视为一种有效的方法。

我的进口:

import org.lwjgl.*;
import org.lwjgl.glfw.*;
import org.lwjgl.opengl.*;
import org.lwjgl.system.*;

import java.nio.*;

import static org.lwjgl.glfw.Callbacks.*;
import static org.lwjgl.glfw.GLFW.*;
import static org.lwjgl.opengl.GL11.*;
import org.lwjgl.opengl.GL30.*;
import static org.lwjgl.system.MemoryStack.*;
import static org.lwjgl.system.MemoryUtil.*;

我的 GLFW 窗口提示:

glfwWindowHint(GLFW_SAMPLES, 4); // 4x antialiasing
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); // OpenGL 3
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); // For macOS
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

我将 Maven 用于我的依赖项,在我的 pom.xml 中我使用 LWJGL 定制器中的预设“Everything” 。

标签: javaintellij-ideaopengllwjglglfw

解决方案


请注意,在 C 代码段中,它是指向被传递给 glGenVertexArrays 的 int 变量的指针 - 您正在传递应该使用生成的 ID 值填充的内存地址。

在 Java 中,您没有指向原始类型的指针的相同概念 - 在您的代码段中,您传递的是整数值,而不是指针。您尝试使用的 API 类没有glGenVertexArrays(int, int)方法,因此您的 IDE 抱怨。

而是使用glGenVertexArrays(int[])or glGenVertexArrays(IntBuffer),例如:

int[] vertexArrayIDs = new int[1]; // create an array where the generated ids will be stored
glGenVertexArrays(vertexArrayIDs); // no need to say how many IDs we want - it's implicit in the array length
glBindVertexArray(vertexArrayIDs[0]) // access the array to get the generated ID;

推荐阅读