Невозможно создать VAO (OpenGL) на macOSJAVA

Программисты JAVA общаются здесь
Anonymous
Невозможно создать VAO (OpenGL) на macOS

Сообщение Anonymous »

Я использую Macbook M1. Я не хочу изучать Metal и хочу сам заниматься OpenGL. Однако всякий раз, когда я пытаюсь создать VAO, я получаю эту ошибку.

Код: Выделить всё

FATAL ERROR in native method: Thread[#3,main,5,main]: No context is current or a function that is not available in the current context was called. The JVM will abort execution.
at org.lwjgl.opengl.GL30C.nglGenVertexArrays(Native Method)
at org.lwjgl.opengl.GL30C.glGenVertexArrays(GL30C.java:1371)
at org.lwjgl.opengl.GL30.glGenVertexArrays(GL30.java:1297)
at net.livecrystal.engine.LCObject.(LCObject.java:22)
at net.livecrystal.test.Start.main(Start.java:25)
Это мой процесс создания VAO.

Код: Выделить всё

package net.livecrystal.engine;

import java.nio.FloatBuffer;

import org.lwjgl.BufferUtils;

import static org.lwjgl.opengl.GL15.GL_ARRAY_BUFFER;
import static org.lwjgl.opengl.GL15.GL_STATIC_DRAW;
import static org.lwjgl.opengl.GL15.glBindBuffer;
import static org.lwjgl.opengl.GL15.glBufferData;
import static org.lwjgl.opengl.GL30.glBindVertexArray;
import static org.lwjgl.opengl.GL41.*;

public class LCObject {
private int vertexArray;
private int verticesBufferID;
private int vertexCount;

public LCObject(float[] vertices) {
vertexCount = vertices.length;

vertexArray = glGenVertexArrays();
glBindVertexArray(vertexArray);

verticesBufferID = glGenBuffers();
FloatBuffer verticesBuffer = BufferUtils.createFloatBuffer(vertices.length);
verticesBuffer.put(vertices);
verticesBuffer.flip();
glBindBuffer(GL_ARRAY_BUFFER, verticesBufferID);
glBufferData(verticesBufferID, verticesBuffer, GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, false, 0, 0);

// Unbind
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);
}

public void render() {
glBindVertexArray(vertexArray);
glDrawArrays(GL_TRIANGLES, 0, vertexCount);
}

public void destroy() {
glDeleteVertexArrays(vertexArray);
glDeleteBuffers(verticesBufferID);
}

}
Я добавил следующие подсказки окон:

Код: Выделить всё

windowID = glfwCreateWindow(width, height, title, MemoryUtil.NULL, MemoryUtil.NULL);
glfwMakeContextCurrent(windowID);
createCapabilities();

glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GLFW_TRUE);
Попробовал также основную версию 4 и дополнительную версию 1. Никакой разницы.

Могу ли я решить эту проблему или мне нужно изучить Metal?
Что касается библиотеки, я выбрал «Минимальный OpenGL» и обязательно добавил все нативные.

Вернуться в «JAVA»