首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当试图加载美国之音时,没有当前上下文或当前上下文中不可用的函数。

当试图加载美国之音时,没有当前上下文或当前上下文中不可用的函数。
EN

Stack Overflow用户
提问于 2020-05-29 11:53:49
回答 2查看 3.7K关注 0票数 0

来源:

代码语言:javascript
复制
import java.nio.FloatBuffer;
import java.util.ArrayList;
import java.util.List;

import org.lwjgl.BufferUtils;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL15;
import org.lwjgl.opengl.GL20;
import org.lwjgl.opengl.GL30;

public class Loader {
    private List<Integer> vaos = new ArrayList<Integer>();
    private List<Integer> vbos = new ArrayList<Integer>();

    public RawModel loadToVAO(float[] positions) {
        int vaoID = createVAO();
        storeDataInAttributeList(0,positions);
        unbindVAO();
        return new RawModel(vaoID,positions.length/3);
    }

    public void cleanUP() {
        for(int vao:vaos) {
            GL30.glDeleteVertexArrays(vao);
        }
        for(int vbo:vbos) {
            GL30.glDeleteVertexArrays(vbo);
        }
    }

    private int createVAO() {
        int vaoID = GL30.glGenVertexArrays();
        vaos.add(vaoID);
        GL30.glBindVertexArray(vaoID);
        return vaoID;
    }

    private void storeDataInAttributeList(int attributeNumber,float[] data) {
        int vaoID = GL15.glGenBuffers();
        vbos.add(vaoID);
        GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vaoID);
        FloatBuffer buffer = storeDataImFloatBuffer(data);
        GL15.glBufferData(GL15.GL_ARRAY_BUFFER, buffer, GL15.GL_STATIC_DRAW);
        GL20.glVertexAttribPointer(attributeNumber, 3, GL11.GL_FLOAT, false, 0, 0);
        GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);

    }
    private void unbindVAO(){
        GL30.glBindVertexArray(0);
    }

    private FloatBuffer storeDataImFloatBuffer(float[] data) {
        FloatBuffer buffer = BufferUtils.createFloatBuffer(data.length);
        buffer.put(data);
        buffer.flip();
        return buffer;
    }
}

错误:

代码语言:javascript
复制
FATAL ERROR in native method: Thread[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:2420) 
 at org.lwjgl.opengl.GL30.glGenVertexArrays(GL30.java:2369) at Loader.createVAO(Loader.java:32) 
 at Loader.loadToVAO(Loader.java:16) at MainGameLoop.main(MainGameLoop.java:21)
EN

回答 2

Stack Overflow用户

发布于 2020-06-01 08:01:17

您没有调用glfwMakeContextCurrent(窗口)或GL.createCapabilities()来实际生成OpenGL上下文。在创建窗口后添加这两行。

票数 4
EN

Stack Overflow用户

发布于 2022-10-14 17:43:29

如果您在macOS上,请在LWJGL 3中的显示创建之后执行以下操作:

代码语言:javascript
复制
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 1);
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62085373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档