Search in sources :

Example 1 with GL

use of org.lwjgl.opengl.GL 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);
}
Also used : Date(java.util.Date) RGB(net.fexcraft.lib.common.math.RGB) FontRegistry(org.liquidengine.legui.style.font.FontRegistry) Timer(java.util.Timer) Context(org.liquidengine.legui.system.context.Context) Toolbar(net.fexcraft.app.fmt.ui.Toolbar) ByteBuffer(java.nio.ByteBuffer) net.fexcraft.app.fmt.utils(net.fexcraft.app.fmt.utils) Frame(org.liquidengine.legui.component.Frame) Static(net.fexcraft.lib.common.Static) IntBuffer(java.nio.IntBuffer) MemoryStack(org.lwjgl.system.MemoryStack) LocalTime(java.time.LocalTime) GL30.glGenVertexArrays(org.lwjgl.opengl.GL30.glGenVertexArrays) GL11(org.lwjgl.opengl.GL11) ZoneOffset(java.time.ZoneOffset) Settings(net.fexcraft.app.fmt.settings.Settings) LayoutManager(org.liquidengine.legui.system.layout.LayoutManager) DiscordEventHandlers(net.arikia.dev.drpc.DiscordEventHandlers) GLFWScrollCallback(org.lwjgl.glfw.GLFWScrollCallback) SystemEventProcessorImpl(org.liquidengine.legui.system.handler.processor.SystemEventProcessorImpl) NvgRenderer(org.liquidengine.legui.system.renderer.nvg.NvgRenderer) GLFW(org.lwjgl.glfw.GLFW) DiscordRPC(net.arikia.dev.drpc.DiscordRPC) TextureManager(net.fexcraft.app.fmt.texture.TextureManager) Time(net.fexcraft.lib.common.math.Time) DefaultCallbackKeeper(org.liquidengine.legui.system.context.DefaultCallbackKeeper) CallbackKeeper(org.liquidengine.legui.system.context.CallbackKeeper) Vector2i(org.joml.Vector2i) LocalDate(java.time.LocalDate) Label(org.liquidengine.legui.component.Label) AxisRotator(net.fexcraft.lib.common.math.AxisRotator) ModelRendererTurbo(net.fexcraft.lib.tmt.ModelRendererTurbo) EventProcessorProvider(org.liquidengine.legui.listener.processor.EventProcessorProvider) STBImage(org.lwjgl.stb.STBImage) AnimatorProvider(org.liquidengine.legui.animation.AnimatorProvider) GLFWErrorCallback(org.lwjgl.glfw.GLFWErrorCallback) LocalDateTime(java.time.LocalDateTime) Configuration(org.lwjgl.system.Configuration) Renderer(org.liquidengine.legui.system.renderer.Renderer) Field(net.fexcraft.app.fmt.ui.fields.Field) GLFWKeyCallback(org.lwjgl.glfw.GLFWKeyCallback) SystemEventProcessor(org.liquidengine.legui.system.handler.processor.SystemEventProcessor) GLFWCursorPosCallback(org.lwjgl.glfw.GLFWCursorPosCallback) Logging.log(net.fexcraft.app.fmt.utils.Logging.log) GlCache(net.fexcraft.app.fmt.utils.MRTRenderer.GlCache) BoxBuilder(net.fexcraft.lib.tmt.BoxBuilder) GLFWWindowCloseCallback(org.lwjgl.glfw.GLFWWindowCloseCallback) GLFWImage(org.lwjgl.glfw.GLFWImage) GL30.glBindVertexArray(org.lwjgl.opengl.GL30.glBindVertexArray) Model(net.fexcraft.app.fmt.polygon.Model) MemoryUtil(org.lwjgl.system.MemoryUtil) File(java.io.File) ModelT1P(net.fexcraft.app.fmt.demo.ModelT1P) EditorComponent(net.fexcraft.app.fmt.ui.EditorComponent) ToolbarMenu(net.fexcraft.app.fmt.ui.ToolbarMenu) DrawMode(net.fexcraft.app.fmt.utils.MRTRenderer.DrawMode) GLFWFramebufferSizeCallback(org.lwjgl.glfw.GLFWFramebufferSizeCallback) Editor(net.fexcraft.app.fmt.ui.Editor) Vector4f(org.joml.Vector4f) ColorConstants(org.liquidengine.legui.style.color.ColorConstants) GL(org.lwjgl.opengl.GL) GLFWMouseButtonCallback(org.lwjgl.glfw.GLFWMouseButtonCallback) LocalDateTime(java.time.LocalDateTime) Frame(org.liquidengine.legui.component.Frame) DefaultCallbackKeeper(org.liquidengine.legui.system.context.DefaultCallbackKeeper) CallbackKeeper(org.liquidengine.legui.system.context.CallbackKeeper) GLFWCursorPosCallback(org.lwjgl.glfw.GLFWCursorPosCallback) GLFWWindowCloseCallback(org.lwjgl.glfw.GLFWWindowCloseCallback) BoxBuilder(net.fexcraft.lib.tmt.BoxBuilder) Label(org.liquidengine.legui.component.Label) GLFWMouseButtonCallback(org.lwjgl.glfw.GLFWMouseButtonCallback) NvgRenderer(org.liquidengine.legui.system.renderer.nvg.NvgRenderer) GLFWFramebufferSizeCallback(org.lwjgl.glfw.GLFWFramebufferSizeCallback) Toolbar(net.fexcraft.app.fmt.ui.Toolbar) DiscordEventHandlers(net.arikia.dev.drpc.DiscordEventHandlers) Context(org.liquidengine.legui.system.context.Context) GLFWKeyCallback(org.lwjgl.glfw.GLFWKeyCallback) GLFWScrollCallback(org.lwjgl.glfw.GLFWScrollCallback) Date(java.util.Date) LocalDate(java.time.LocalDate) Timer(java.util.Timer) DefaultCallbackKeeper(org.liquidengine.legui.system.context.DefaultCallbackKeeper) SystemEventProcessorImpl(org.liquidengine.legui.system.handler.processor.SystemEventProcessorImpl) Model(net.fexcraft.app.fmt.polygon.Model) Editor(net.fexcraft.app.fmt.ui.Editor) SystemEventProcessor(org.liquidengine.legui.system.handler.processor.SystemEventProcessor)

Aggregations

File (java.io.File)1 ByteBuffer (java.nio.ByteBuffer)1 IntBuffer (java.nio.IntBuffer)1 LocalDate (java.time.LocalDate)1 LocalDateTime (java.time.LocalDateTime)1 LocalTime (java.time.LocalTime)1 ZoneOffset (java.time.ZoneOffset)1 Date (java.util.Date)1 Timer (java.util.Timer)1 DiscordEventHandlers (net.arikia.dev.drpc.DiscordEventHandlers)1 DiscordRPC (net.arikia.dev.drpc.DiscordRPC)1 ModelT1P (net.fexcraft.app.fmt.demo.ModelT1P)1 Model (net.fexcraft.app.fmt.polygon.Model)1 Settings (net.fexcraft.app.fmt.settings.Settings)1 TextureManager (net.fexcraft.app.fmt.texture.TextureManager)1 Editor (net.fexcraft.app.fmt.ui.Editor)1 EditorComponent (net.fexcraft.app.fmt.ui.EditorComponent)1 Toolbar (net.fexcraft.app.fmt.ui.Toolbar)1 ToolbarMenu (net.fexcraft.app.fmt.ui.ToolbarMenu)1 Field (net.fexcraft.app.fmt.ui.fields.Field)1