use of org.lwjgl.opengl.GL30.glGenVertexArrays in project FMT by Fexcraft.
the class FMT method run.
public void run() throws Exception {
Translator.init();
timer.init();
glfwSetErrorCallback(errorCallback = GLFWErrorCallback.createPrint(System.err));
if (!glfwInit())
throw new IllegalStateException("Unable to initialize GLFW.");
glfwWindowHint(GLFW_RESIZABLE, GL11.GL_TRUE);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
window = glfwCreateWindow(WIDTH, HEIGHT, getTitle(null), MemoryUtil.NULL, MemoryUtil.NULL);
if (window == MemoryUtil.NULL)
throw new RuntimeException("Failed to create window");
glfwMakeContextCurrent(window);
GL.createCapabilities();
log("GL Renderer: " + glGetString(GL_RENDERER));
log("GL Vendor: " + glGetString(GL_VENDOR));
log("GL Version: " + glGetString(GL_VERSION));
icon(window);
glfwShowWindow(window);
glfwFocusWindow(window);
//
CAM = new GGR(5, -5, -5, -Static.rad45, Static.rad30);
AxisRotator.setDefImpl(Axis3DL.class);
Settings.applyTheme();
FRAME = new Frame(WIDTH, HEIGHT);
FRAME.getContainer().add(TOOLBAR = new Toolbar());
EditorComponent.registerComponents();
Settings.loadEditors();
for (Editor editor : Editor.EDITORLIST) FRAME.getContainer().add(editor);
FRAME.getContainer().add(pos = new Label("test", 0, 32, 200, 20));
FRAME.getContainer().add(rot = new Label("test", 0, 54, 200, 20));
FRAME.getContainer().add(fps = new Label("test", 0, 76, 200, 20));
FRAME.getContainer().add(poly = new Label("test", 0, 98, 200, 20));
FRAME.getContainer().add(info = new Label("test", 0, 120, 200, 20));
FRAME.getContainer().add(bar = new Label("test", 0, 0, 500, 20));
FRAME.getComponentLayer().setFocusable(false);
CONTEXT = new Context(window);
//
IMG_FRAME = new Frame(WIDTH, HEIGHT);
IMG_FRAME.getContainer().add(img_line0 = new Label("", 20, 20, 500, 20));
img_line0.getStyle().getBackground().setColor(ColorConstants.transparent());
img_line0.getStyle().setFont(FontRegistry.ROBOTO_BOLD);
IMG_FRAME.getContainer().add(img_line1 = new Label("", 20, 40, 500, 20));
img_line1.getStyle().getBackground().setColor(ColorConstants.transparent());
img_line1.getStyle().setFont(FontRegistry.ROBOTO_BOLD);
//
CallbackKeeper keeper = new DefaultCallbackKeeper();
CallbackKeeper.registerCallbacks(window, keeper);
keeper.getChainKeyCallback().add(new GLFWKeyCallback() {
@Override
public void invoke(long window, int key, int scancode, int action, int mods) {
KeyCompound.process(window, key, scancode, action, mods);
}
});
keeper.getChainCursorPosCallback().add(new GLFWCursorPosCallback() {
@Override
public void invoke(long window, double xpos, double ypos) {
CAM.cursorPosCallback(window, xpos, ypos);
}
});
keeper.getChainMouseButtonCallback().add(new GLFWMouseButtonCallback() {
@Override
public void invoke(long window, int button, int action, int mods) {
CAM.mouseCallback(window, button, action, mods);
}
});
keeper.getChainWindowCloseCallback().add(new GLFWWindowCloseCallback() {
@Override
public void invoke(long window) {
//
}
});
keeper.getChainFramebufferSizeCallback().add(new GLFWFramebufferSizeCallback() {
@Override
public void invoke(long window, int width, int height) {
HEIGHT = height;
TOOLBAR.setSize(WIDTH = width, TOOLBAR.getSize().y);
Editor.EDITORLIST.forEach(editor -> editor.align());
ToolbarMenu.MENUS.forEach((key, menu) -> menu.layer.hide());
Picker.resetBuffer(true);
}
});
keeper.getChainScrollCallback().add(new GLFWScrollCallback() {
@Override
public void invoke(long window, double xoffset, double yoffset) {
if (SELFIELD == null)
CAM.scrollCallback(window, xoffset, yoffset);
else
SELFIELD.scroll(yoffset);
}
});
SystemEventProcessor sys_event_processor = new SystemEventProcessorImpl();
SystemEventProcessor.addDefaultCallbacks(keeper, sys_event_processor);
RENDERER = new NvgRenderer();
RENDERER.initialize();
TextureManager.load();
// FMT.MODEL = new Model(new File("./saves/dodici.fmtb"), null).load();
FMT.MODEL = new Model(null, "Unnamed Model");
FMT.updateTitle();
// TODO load previous model
Settings.checkForUpdatesAndLogin();
KeyCompound.init();
//
LocalDateTime midnight = LocalDateTime.of(LocalDate.now(ZoneOffset.systemDefault()), LocalTime.MIDNIGHT);
long mid = midnight.toInstant(ZoneOffset.UTC).toEpochMilli();
long date = Time.getDate();
while ((mid += Time.MIN_MS * 5) < date) ;
if (BACKUP_TIMER == null && Settings.BACKUP_INTERVAL.value > 0) {
(BACKUP_TIMER = new Timer("BKUP")).schedule(new BackupHandler(), new Date(mid), Time.MIN_MS * Settings.BACKUP_INTERVAL.value);
}
//
if (Settings.DISCORD_RPC.value) {
DiscordEventHandlers.Builder handler = new DiscordEventHandlers.Builder();
handler.setReadyEventHandler(new DiscordUtil.ReadyEventHandler());
handler.setErroredEventHandler(new DiscordUtil.ErroredEventHandler());
handler.setDisconnectedEventHandler(new DiscordUtil.DisconectedEventHandler());
handler.setJoinGameEventHandler(new DiscordUtil.JoinGameEventHandler());
handler.setJoinRequestEventHandler(new DiscordUtil.JoinRequestEventHandler());
handler.setSpectateGameEventHandler(new DiscordUtil.SpectateGameEventHandler());
DiscordRPC.discordInitialize(CLID, handler.build(), true);
DiscordRPC.discordRunCallbacks();
DiscordUtil.update(true);
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
DiscordRPC.discordShutdown();
}
});
DiscordUtil.DISCORD_THREAD = new Thread(() -> {
while (!CLOSE) {
DiscordRPC.discordRunCallbacks();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
DiscordUtil.DISCORD_THREAD.setName("DRPC");
DiscordUtil.DISCORD_THREAD.start();
}
//
vsync();
ShaderManager.loadPrograms();
ModelRendererTurbo.RENDERER = new MRTRenderer();
int vao = glGenVertexArrays();
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
Picker.resetBuffer(true);
//
while (!glfwWindowShouldClose(window)) {
CAM.pollInput(accumulator += (delta = timer.getDelta()));
accumulator += (delta = timer.getDelta());
while (accumulator >= interval) {
// TODO "logic"
ToolbarMenu.checkHide();
timer.updateUPS();
accumulator -= interval;
// Trees.updateCounters();
fps.getTextState().setText(timer.getFPS() + "");
info.getTextState().setText(SELFIELD == null ? "none" : SELFIELD.polyval() == null ? SELFIELD.setting() == null ? "other" : "setting:" + SELFIELD.setting().id : SELFIELD.polyval().toString());
poly.getTextState().setText(MODEL.selected().isEmpty() ? "none" : MODEL.first_selected().name());
}
render(vao, alpha = accumulator / interval);
//
adjustLabels();
ImageHandler.updateText();
RENDERER.render(ImageHandler.shouldHide() ? IMG_FRAME : FRAME, CONTEXT);
timer.updateFPS();
glfwPollEvents();
glfwSwapBuffers(window);
sys_event_processor.processEvents(FRAME, CONTEXT);
EventProcessorProvider.getInstance().processEvents();
LayoutManager.getInstance().layout(FRAME);
AnimatorProvider.getAnimator().runAnimations();
ImageHandler.processTask();
timer.update();
}
DiscordRPC.discordShutdown();
RENDERER.destroy();
glfwDestroyWindow(window);
glfwTerminate();
Settings.save();
SessionHandler.save();
// TODO other saves
System.exit(EXIT_CODE);
}
use of org.lwjgl.opengl.GL30.glGenVertexArrays in project gaiasky by langurmonkey.
the class GaiaSky method create.
@Override
public void create() {
startTime = TimeUtils.millis();
// Log level
Gdx.app.setLogLevel(debugMode ? Application.LOG_DEBUG : Application.LOG_INFO);
Logger.level = debugMode ? Logger.LoggerLevel.DEBUG : Logger.LoggerLevel.INFO;
consoleLogger = new ConsoleLogger();
if (debugMode)
logger.debug("Logging level set to DEBUG");
// Init graphics and window
graphics = Gdx.graphics;
window = headless ? null : ((Lwjgl3Graphics) graphics).getWindow();
// Basic info
logger.info(settings.version.version, I18n.txt("gui.build", settings.version.build));
logger.info("Display mode", graphics.getWidth() + "x" + graphics.getHeight(), "Fullscreen: " + Gdx.graphics.isFullscreen());
logger.info("Device", GL30.glGetString(GL30.GL_RENDERER));
logger.info(I18n.txt("notif.glversion", GL30.glGetString(GL30.GL_VERSION)));
logger.info(I18n.txt("notif.glslversion", GL30.glGetString(GL30.GL_SHADING_LANGUAGE_VERSION)));
logger.info(I18n.txt("notif.javaversion", System.getProperty("java.version"), System.getProperty("java.vendor")));
// Frame buffer map
frameBufferMap = new HashMap<>();
// Disable all kinds of input
EventManager.publish(Event.INPUT_ENABLED_CMD, this, false);
if (!settings.initialized) {
logger.error(new RuntimeException(I18n.txt("notif.error", "global configuration not initialized")));
return;
}
// Initialise times
final ITimeFrameProvider clock = new GlobalClock(1, Instant.now());
final ITimeFrameProvider real = new RealTimeClock();
time = settings.runtime.realTime ? real : clock;
t = 0;
// Initialise i18n
I18n.initialize();
// Tooltips
TooltipManager.getInstance().initialTime = 1f;
TooltipManager.getInstance().hideAll();
// Initialise asset manager
final FileHandleResolver internalResolver = new InternalFileHandleResolver();
final FileHandleResolver dataResolver = fileName -> settings.data.dataFileHandle(fileName);
assetManager = new AssetManager(internalResolver);
assetManager.setLoader(com.badlogic.gdx.graphics.Texture.class, ".pfm", new PFMTextureLoader(dataResolver));
assetManager.setLoader(PFMData.class, new PFMDataLoader(dataResolver));
assetManager.setLoader(ISceneGraph.class, new SGLoader(dataResolver));
assetManager.setLoader(PointCloudData.class, new OrbitDataLoader(dataResolver));
assetManager.setLoader(GaiaAttitudeServer.class, new GaiaAttitudeLoader(dataResolver));
assetManager.setLoader(ExtShaderProgram.class, new ShaderProgramProvider(internalResolver, ".vertex.glsl", ".fragment.glsl"));
assetManager.setLoader(BitmapFont.class, new BitmapFontLoader(internalResolver));
assetManager.setLoader(AtmosphereShaderProvider.class, new AtmosphereShaderProviderLoader<>(internalResolver));
assetManager.setLoader(GroundShaderProvider.class, new GroundShaderProviderLoader<>(internalResolver));
assetManager.setLoader(TessellationShaderProvider.class, new TessellationShaderProviderLoader<>(internalResolver));
assetManager.setLoader(RelativisticShaderProvider.class, new RelativisticShaderProviderLoader<>(internalResolver));
assetManager.setLoader(IntModel.class, ".obj", new OwnObjLoader(new RegularInputStreamProvider(), internalResolver));
assetManager.setLoader(IntModel.class, ".obj.gz", new OwnObjLoader(new GzipInputStreamProvider(), internalResolver));
assetManager.setLoader(IntModel.class, ".g3dj", new G3dModelLoader(new JsonReader(), internalResolver));
assetManager.setLoader(IntModel.class, ".g3db", new G3dModelLoader(new UBJsonReader(), internalResolver));
// Remove Model loaders
// Init global resources
this.globalResources = new GlobalResources(assetManager);
// Initialize screenshots manager
new ScreenshotsManager(globalResources);
// Catalog manager
this.catalogManager = new CatalogManager();
this.scripting = new EventScriptingInterface(this.assetManager, this.catalogManager);
// Initialise master manager
MasterManager.initialize();
// Load slave assets
SlaveManager.load(assetManager);
// Initialise dataset updater
this.executorService = new GaiaSkyExecutorService();
// Bookmarks
this.bookmarksManager = new BookmarksManager();
// Location log
LocationLogManager.initialize();
// Init timer thread
Timer.instance();
// Initialise Cameras
cameraManager = new CameraManager(assetManager, CameraMode.FOCUS_MODE, vr, globalResources);
// Set asset manager to asset bean
AssetBean.setAssetManager(assetManager);
// Create vr context if possible
final VRStatus vrStatus = createVR();
cameraManager.updateFrustumPlanes();
// Tooltip to 1s
TooltipManager.getInstance().initialTime = 1f;
// Initialise Gaia attitudes
assetManager.load(Constants.ATTITUDE_FOLDER, GaiaAttitudeServer.class, new GaiaAttitudeLoaderParameter());
// Initialise hidden helper user
HiddenHelperUser.initialize();
// Initialise gravitational waves helper
RelativisticEffectsManager.initialize(time);
// GUI
guis = new ArrayList<>(3);
// Post-processor
postProcessor = PostProcessorFactory.instance.getPostProcessor();
// Scene graph renderer
sgr = new SceneGraphRenderer(vrContext, globalResources);
sgr.initialize(assetManager);
// Initialise scripting gateway server
if (!noScripting)
ScriptingServer.initialize();
// Tell the asset manager to load all the assets
final Set<AssetBean> assets = AssetBean.getAssets();
for (AssetBean ab : assets) {
ab.load(assetManager);
}
renderBatch = globalResources.getSpriteBatch();
EventManager.instance.subscribe(this, Event.LOAD_DATA_CMD);
welcomeGui = new WelcomeGui(globalResources.getSkin(), graphics, 1f / settings.program.ui.scale, skipWelcome, vrStatus);
welcomeGui.initialize(assetManager, globalResources.getSpriteBatch());
Gdx.input.setInputProcessor(welcomeGui.getGuiStage());
if (settings.runtime.openVr) {
welcomeGuiVR = new VRGui<>(WelcomeGuiVR.class, (int) (settings.graphics.backBufferResolution[0] / 2f), globalResources.getSkin(), graphics, 1f / settings.program.ui.scale);
welcomeGuiVR.initialize(assetManager, globalResources.getSpriteBatch());
}
// GL clear state
Gdx.gl.glClearColor(0, 0, 0, 0);
Gdx.gl.glClearDepthf(1f);
}
Aggregations