GL30库中不存在intellij idea GLGEnVertexArray()。(JAVA LWJGL)
我试图按照thisOpenGL教程来渲染一个简单的三角形。在本教程开始时,在“VAO”部分下,我被告知要编写以下代码:
GLuint VertexArrayID;
glGenVertexArrays(1, &VertexArrayID);
glBindVertexArray(VertexArrayID);
我的C代码片段的Java代码是
int VertexArrayID;
glGenVertexArrays(1, VertexArrayID);
glBindVertexArray(VertexArrayID);
在the documentation中,我已经导入了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);
我在我的依赖项和pom中使用Maven。xml我正在使用来自LWJGL customizer的预设“一切”
# 1 楼答案
IDE没有“看到”
glGenVertexArrays
方法的原因是,您没有像对待GL11
类那样,看到import static
静态方法为了使类
GL30
的静态方法在类的范围内可解析,您还需要import static
使用GL30
的方法:import static org.lwjgl.opengl.GL30.*;
此外,从版本3.2.0 of LWJGL 3开始,版本化的类,如GL11、GL12、GL13、GL20等从相应的先前版本继承
因此,当您至少使用LWJGL 3.2.0时,就可以删除
import static org.lwjgl.opengl.GL11.*;
行和仅有import static org.lwjgl.opengl.GL30.*;
而且,由于您从GLFW请求OpenGL版本3.3,并且还使用了核心配置文件,因此您也可以使用
import static org.lwjgl.opengl.GL33C.*;
使OpenGL核心功能仅可见(而不是那些来自兼容性配置文件的功能-您没有请求,因此在运行时不可用)。这样,您就不会意外地使用不推荐使用的/兼容的函数# 2 楼答案
请注意,在C代码段中,传递给glgenvertexarray的是指向int变量的指针——您传递的是应该用生成的ID值填充的内存地址
在Java中,指向基元类型的指针的概念不同——在代码段中,传递的是整数值,而不是指针。 您试图使用的API类没有
glGenVertexArrays(int, int)
方法,因此您的IDE正在抱怨而是使用
glGenVertexArrays(int[])
或glGenVertexArrays(IntBuffer)
,例如: