В текущем потоке нет тока OpenGL ES Context - LWJGL с использованием OpenGL ES 3.0JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 В текущем потоке нет тока OpenGL ES Context - LWJGL с использованием OpenGL ES 3.0

Сообщение Anonymous »

Я пытаюсь использовать lwjgl, используя пример начала работы (от https://www.lwjgl.org/guide {что не изменяется нормально}), но изменяя его, чтобы он использовал opengl es 3.0 (для причин, не относящихся к значениям этот вопрос).

Я использую последний релиз LWJGL 3.1.1, выбрав минимальные opengl es в качестве моей задачи (от https://www.lwjgl.org/download и использование уроженцев Windows. (Я запускаю Windows 10 64bit) < /p>

Я застрял-я не уверен, как это исправить, и заставьте его запускать. < /P>
Ошибка, которую я получаю: < /p>

исключение в потоке "Main" java.lang.illegalstateexception: нет OpenGlg ES Context Current в текущем потоке. < /Strong> < /p>

Полная ошибка: < /p>

Exception in thread "main" java.lang.IllegalStateException: There is no OpenGL ES context current in the current thread.
at org.lwjgl.opengles.GLES.createCapabilities(GLES.java:222)
at com.test.desktop.HelloWorld.loop(HelloWorld.java:93)
at com.test.desktop.HelloWorld.run(HelloWorld.java:31)
at com.test.desktop.HelloWorld.main(HelloWorld.java:112)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
< /code>

Полный источник: < /p>

package com.test.desktop;

import org.lwjgl.*;
import org.lwjgl.glfw.*;
//import org.lwjgl.opengl.*;
import org.lwjgl.opengles.GLES;
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 static org.lwjgl.opengles.GLES20.*;
import static org.lwjgl.opengles.GLES30.*;
import static org.lwjgl.system.MemoryStack.*;
import static org.lwjgl.system.MemoryUtil.*;

public class HelloWorld {

// The window handle
private long window;

static final int WIDTH = 1024;
static final int HEIGHT = 768;

public void run() {
System.out.println("Hello LWJGL " + Version.getVersion() + "!");

init();
loop();

// Free the window callbacks and destroy the window
glfwFreeCallbacks(window);
glfwDestroyWindow(window);

// Terminate GLFW and free the error callback
glfwTerminate();
glfwSetErrorCallback(null).free();
}

private void init() {
// Setup an error callback. The default implementation
// will print the error message in System.err.
GLFWErrorCallback.createPrint(System.err).set();

// Initialize GLFW. Most GLFW functions will not work before doing this.
if ( !glfwInit() )
throw new IllegalStateException("Unable to initialize GLFW");

// Configure GLFW
glfwDefaultWindowHints(); // optional, the current window hints are already the default
glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE); // the window will stay hidden after creation
glfwWindowHint(GLFW_RESIZABLE, GLFW_TRUE); // the window will be resizable

// Create the window
window = glfwCreateWindow(WIDTH, HEIGHT, "Hello World!", NULL, NULL);
if ( window == NULL )
throw new RuntimeException("Failed to create the GLFW window");

// Setup a key callback. It will be called every time a key is pressed, repeated or released.
glfwSetKeyCallback(window, (window, key, scancode, action, mods) -> {
if ( key == GLFW_KEY_ESCAPE && action == GLFW_RELEASE )
glfwSetWindowShouldClose(window, true); // We will detect this in the rendering loop
});

// Get the resolution of the primary monitor
GLFWVidMode vidmode = glfwGetVideoMode(glfwGetPrimaryMonitor());

// Center the window
glfwSetWindowPos(
window,
(vidmode.width() - WIDTH) / 2,
(vidmode.height() - HEIGHT) / 2
);

// Make the OpenGL context current
glfwMakeContextCurrent(window);

// Enable v-sync
glfwSwapInterval(1);

// Make the window visible
glfwShowWindow(window);
}

private void loop() {
// This line is critical for LWJGL's interoperation with GLFW's
// OpenGL context, or any context that is managed externally.
// LWJGL detects the context that is current in the current thread,
// creates the GLCapabilities instance and makes the OpenGL
// bindings available for use.
GLES.createCapabilities();
// GL.createCapabilities();

// Set the clear color
glClearColor(1.0f, 0.0f, 0.0f, 0.0f);

// Run the rendering loop until the user has attempted to close
// the window or has pressed the ESCAPE key.
while ( !glfwWindowShouldClose(window) ) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // clear the framebuffer

glfwSwapBuffers(window); // swap the color buffers

// Poll for window events. The key callback above will only be
// invoked during this call.
glfwPollEvents();
}
}

public static void main(String[] args) {
new HelloWorld().run();
}
}
< /code>

Стоит ли отметить ... если я не пострядочно: < /p>

import org.lwjgl.opengl.*;
< /code>

и, изменение: < /p>

GLES.createCapabilities();
< /code>

и, вместо этого используйте следующее: < /p>

GL.createCapabilities();
< /code>

Я получаю эту ошибку: < /p>

Исключение в потоке "main" java.lang.illegalstateexception: Нет экземпляра Glescapability, установленного для текущего потока. Возможные решения:


Подробнее здесь: https://stackoverflow.com/questions/435 ... ing-opengl
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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