Update graphics subsystem and OpenGL API
This commit is contained in:
parent
bae7b4c337
commit
51e0f84c3f
4 changed files with 73 additions and 7 deletions
|
@ -30,7 +30,7 @@ import org.jetbrains.annotations.NotNull;
|
|||
* @since 1-alpha0
|
||||
*/
|
||||
@SuppressWarnings({ "unused" })
|
||||
public class OpenGlManagement implements ApiManagementClass {
|
||||
public final class OpenGlManagement implements ApiManagementClass {
|
||||
/** {@inheritDoc} */
|
||||
@NotNull
|
||||
@Override
|
||||
|
|
|
@ -21,12 +21,14 @@ package de.staropensource.sosengine.graphics.opengl;
|
|||
|
||||
import de.staropensource.sosengine.base.annotations.EventListener;
|
||||
import de.staropensource.sosengine.base.classes.EventPriority;
|
||||
import de.staropensource.sosengine.base.classes.helpers.EventHelper;
|
||||
import de.staropensource.sosengine.base.logging.LoggerInstance;
|
||||
import de.staropensource.sosengine.base.types.LogIssuer;
|
||||
import de.staropensource.sosengine.base.utility.Miscellaneous;
|
||||
import de.staropensource.sosengine.graphics.GraphicsSubsystem;
|
||||
import de.staropensource.sosengine.graphics.classes.ApiMainClass;
|
||||
import de.staropensource.sosengine.graphics.classes.ApiManagementClass;
|
||||
import de.staropensource.sosengine.graphics.events.GraphicsApiErrorEvent;
|
||||
import de.staropensource.sosengine.graphics.opengl.events.GraphicsErrorEvent;
|
||||
import lombok.Getter;
|
||||
import org.lwjgl.glfw.GLFWErrorCallback;
|
||||
|
@ -88,10 +90,15 @@ public final class OpenGlSubsystem implements ApiMainClass {
|
|||
instance.logger.crash("The subsystem tried to initialize twice");
|
||||
}
|
||||
|
||||
long initTime = Miscellaneous.measureExecutionTime(() -> {
|
||||
// Precompute event listeners
|
||||
EventHelper.precomputeEventListeners(GraphicsErrorEvent.class);
|
||||
|
||||
// Register Graphics API
|
||||
GraphicsSubsystem.getInstance().registerGraphicsApi(this);
|
||||
});
|
||||
|
||||
logger.info("Initialized subsystem");
|
||||
logger.info("Initialized subsystem in " + initTime + "ms");
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
|
@ -140,14 +147,25 @@ public final class OpenGlSubsystem implements ApiMainClass {
|
|||
}
|
||||
|
||||
/**
|
||||
* Called when a graphics error occurs. This method just logs the error and returns.
|
||||
* Called when an OpenGL error occurs. This method just logs the error and returns.
|
||||
*
|
||||
* @param error graphics error
|
||||
* @since 1-alpha0
|
||||
*/
|
||||
@EventListener(event = GraphicsErrorEvent.class, priority = EventPriority.EXTREMELY_IMPORTANT)
|
||||
public static void onGraphicsError(String error) {
|
||||
instance.logger.error("An error occurred: " + error);
|
||||
instance.logger.error("OpenGL returned an error: " + error);
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when a Graphics API error occurs. This method just logs the error and returns.
|
||||
*
|
||||
* @param error Graphics API error
|
||||
* @since 1-alpha0
|
||||
*/
|
||||
@EventListener(event = GraphicsApiErrorEvent.class, priority = EventPriority.EXTREMELY_IMPORTANT)
|
||||
public static void onGraphicsApiError(String error) {
|
||||
instance.logger.error("Graphics API returned an error: " + error);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -33,7 +33,6 @@ import de.staropensource.sosengine.graphics.events.GraphicsApiShutdownEvent;
|
|||
import de.staropensource.sosengine.graphics.events.GraphicsErrorEvent;
|
||||
import lombok.Getter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
|
|
|
@ -0,0 +1,49 @@
|
|||
package de.staropensource.sosengine.graphics.events;
|
||||
|
||||
import de.staropensource.sosengine.base.classes.Event;
|
||||
import de.staropensource.sosengine.base.events.LogEvent;
|
||||
import de.staropensource.sosengine.base.types.LogIssuer;
|
||||
import de.staropensource.sosengine.base.types.LogLevel;
|
||||
import de.staropensource.sosengine.base.classes.helpers.EventHelper;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
/**
|
||||
* Called when a graphics error occurs.
|
||||
*
|
||||
* @since 1-alpha0
|
||||
*/
|
||||
@SuppressWarnings({ "unused" })
|
||||
public class GraphicsApiErrorEvent implements Event {
|
||||
/**
|
||||
* Constructor.
|
||||
*/
|
||||
public GraphicsApiErrorEvent() {}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
* @deprecated use the {@code callEvent} method with arguments
|
||||
* @see LogEvent#callEvent(LogLevel, LogIssuer, String)
|
||||
*/
|
||||
@Deprecated
|
||||
@Override
|
||||
public void callEvent() {}
|
||||
|
||||
/**
|
||||
* Calls the event and notifies all annotated methods.
|
||||
*
|
||||
* @param error graphics error
|
||||
* @since 1-alpha0
|
||||
*/
|
||||
public void callEvent(@NotNull String error) {
|
||||
EventHelper.logCall(getClass());
|
||||
|
||||
for (Method method : EventHelper.getAnnotatedMethods(getClass())) {
|
||||
try {
|
||||
method.invoke(null, error);
|
||||
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NullPointerException | ExceptionInInitializerError ignored) {}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue