diff --git a/.classpath b/.classpath index aa24133..f60f002 100644 --- a/.classpath +++ b/.classpath @@ -1,30 +1,30 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.project b/.project index 04ec89c..c1e561a 100644 --- a/.project +++ b/.project @@ -1,23 +1,23 @@ - - - GameProject-SimpleJavaEngine - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.buildship.core.gradleprojectbuilder - - - - - - org.eclipse.jdt.core.javanature - org.eclipse.buildship.core.gradleprojectnature - - + + + SimpleJavaEngine + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.buildship.core.gradleprojectbuilder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.buildship.core.gradleprojectnature + + diff --git a/.settings/org.eclipse.buildship.core.prefs b/.settings/org.eclipse.buildship.core.prefs index d123caf..76702c8 100644 --- a/.settings/org.eclipse.buildship.core.prefs +++ b/.settings/org.eclipse.buildship.core.prefs @@ -1,13 +1,13 @@ -arguments= -auto.sync=false -build.scans.enabled=false -connection.gradle.distribution=GRADLE_DISTRIBUTION(VERSION(9.1.0)) -connection.project.dir= -eclipse.preferences.version=1 -gradle.user.home= -java.home=C\:/Program Files/Java/jdk-25.0.2+10 -jvm.arguments= -offline.mode=false -override.workspace.settings=true -show.console.view=false -show.executions.view=false +arguments= +auto.sync=false +build.scans.enabled=false +connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) +connection.project.dir= +eclipse.preferences.version=1 +gradle.user.home= +java.home=C\:/Program Files/Java/jdk25 +jvm.arguments= +offline.mode=false +override.workspace.settings=true +show.console.view=false +show.executions.view=false diff --git a/build.gradle b/build.gradle index 1dfa11b..e8641a2 100644 --- a/build.gradle +++ b/build.gradle @@ -7,10 +7,23 @@ tasks.withType(JavaCompile) { options.encoding = 'UTF-8' } + eclipse { classpath { downloadJavadoc = true downloadSources = true + file { + whenMerged { cp -> + cp.entries.forEach { entry -> + // Target the core LWJGL modules + if (entry.kind == 'lib' && entry.path.contains('org.lwjgl')) { + // Dynamically add a JPMS modular export rule to the Eclipse compiler + def rule = new org.gradle.plugins.ide.eclipse.model.AccessRule('accessible', 'org/lwjgl/system/**') + entry.accessRules.add(rule) + } + } + } + } } } @@ -29,7 +42,7 @@ repositories { name = "Speiger Maven" url = "https://maven.speiger.com/repository/main" } - maven { url "https://oss.sonatype.org/content/repositories/snapshots/" } + maven { url "https://central.sonatype.com/repository/maven-snapshots" } } diff --git a/gradle.properties b/gradle.properties index 9b30e24..84c3308 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -org.gradle.jvmargs=-Xmx2G - -lwjglVersion = 3.3.4 +org.gradle.jvmargs=-Xmx2G + +lwjglVersion = 3.3.4 lwjglNatives = natives-windows \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 757df18..547f883 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.1-bin.zip -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/src/graphics/java/speiger/src/coreengine/api/buffer/VertexBuffer.java b/src/graphics/java/speiger/src/coreengine/api/buffer/VertexBuffer.java deleted file mode 100644 index 1c09e53..0000000 --- a/src/graphics/java/speiger/src/coreengine/api/buffer/VertexBuffer.java +++ /dev/null @@ -1,5 +0,0 @@ -package speiger.src.coreengine.api.buffer; - -public interface VertexBuffer { - -} diff --git a/src/graphics/java/speiger/src/coreengine/api/core/GraphicsCommandQueue.java b/src/graphics/java/speiger/src/coreengine/api/core/GraphicsCommandQueue.java deleted file mode 100644 index e7268e6..0000000 --- a/src/graphics/java/speiger/src/coreengine/api/core/GraphicsCommandQueue.java +++ /dev/null @@ -1,5 +0,0 @@ -package speiger.src.coreengine.api.core; - -public interface GraphicsCommandQueue { - -} diff --git a/src/graphics/java/speiger/src/coreengine/api/core/GraphicsResource.java b/src/graphics/java/speiger/src/coreengine/api/core/GraphicsResource.java deleted file mode 100644 index ae0e4b2..0000000 --- a/src/graphics/java/speiger/src/coreengine/api/core/GraphicsResource.java +++ /dev/null @@ -1,5 +0,0 @@ -package speiger.src.coreengine.api.core; - -public interface GraphicsResource { - public void remove(); -} diff --git a/src/graphics/java/speiger/src/coreengine/api/texture/Texture.java b/src/graphics/java/speiger/src/coreengine/api/texture/Texture.java deleted file mode 100644 index d9d971b..0000000 --- a/src/graphics/java/speiger/src/coreengine/api/texture/Texture.java +++ /dev/null @@ -1,6 +0,0 @@ -package speiger.src.coreengine.api.texture; - -public abstract class Texture { - protected final TextureType type = null; - -} diff --git a/src/graphics/java/speiger/src/coreengine/graphics/api/buffer/BufferState.java b/src/graphics/java/speiger/src/coreengine/graphics/api/buffer/BufferState.java new file mode 100644 index 0000000..bdf07e6 --- /dev/null +++ b/src/graphics/java/speiger/src/coreengine/graphics/api/buffer/BufferState.java @@ -0,0 +1,13 @@ +package speiger.src.coreengine.graphics.api.buffer; + +public enum BufferState { + STATIC_DRAW, + STATIC_READ, + STATIC_COPY, + STREAM_DRAW, + STREAM_READ, + STREAM_COPY, + DYNAMIC_DRAW, + DYNAMIC_READ, + DYNAMIC_COPY; +} diff --git a/src/graphics/java/speiger/src/coreengine/graphics/api/buffer/VertexBuffer.java b/src/graphics/java/speiger/src/coreengine/graphics/api/buffer/VertexBuffer.java new file mode 100644 index 0000000..439a20d --- /dev/null +++ b/src/graphics/java/speiger/src/coreengine/graphics/api/buffer/VertexBuffer.java @@ -0,0 +1,44 @@ +package speiger.src.coreengine.graphics.api.buffer; + +import java.nio.Buffer; +import java.nio.ByteBuffer; + +import org.lwjgl.system.MemoryUtil; + +import speiger.src.coreengine.graphics.api.core.GraphicsResource; + +public abstract class VertexBuffer implements GraphicsResource { + protected final BufferState usage; + protected int size; + + public VertexBuffer(BufferState usage, int size) { + this.usage = usage; + this.size = size; + } + + public BufferState usage() { + return usage; + } + + public int size() { + return size; + } + + public abstract VertexBuffer allocate(int totalBytes); + public abstract VertexBuffer set(long pointer, int totalBytes); + public VertexBuffer set(ByteBuffer buffer) { + return set(MemoryUtil.memAddress(buffer), buffer.remaining()); + } + + public abstract VertexBuffer fill(long pointer, int totalBytes, int offset); + public VertexBuffer fill(int offset, ByteBuffer buffer) { + return fill(MemoryUtil.memAddress(buffer), buffer.remaining(), offset); + } + + public abstract VertexBuffer read(long pointer, int totalbytes, int offset); + public VertexBuffer read(Buffer buffer, int totalBytes, int offset) { + return read(MemoryUtil.memAddress(buffer), totalBytes, offset); + } + + +} diff --git a/src/graphics/java/speiger/src/coreengine/api/core/Graphics.java b/src/graphics/java/speiger/src/coreengine/graphics/api/core/Graphics.java similarity index 74% rename from src/graphics/java/speiger/src/coreengine/api/core/Graphics.java rename to src/graphics/java/speiger/src/coreengine/graphics/api/core/Graphics.java index 9a70ff1..cc2e2ae 100644 --- a/src/graphics/java/speiger/src/coreengine/api/core/Graphics.java +++ b/src/graphics/java/speiger/src/coreengine/graphics/api/core/Graphics.java @@ -1,9 +1,9 @@ -package speiger.src.coreengine.api.core; - -import speiger.src.coreengine.rendering.input.window.Window; - -public interface Graphics { - public String getName(); - - public GraphicsDevice createDevice(Window window); -} +package speiger.src.coreengine.graphics.api.core; + +import speiger.src.coreengine.rendering.input.window.Window; + +public interface Graphics { + public String getName(); + + public GraphicsDevice createDevice(Window window); +} diff --git a/src/graphics/java/speiger/src/coreengine/graphics/api/core/GraphicsCommandQueue.java b/src/graphics/java/speiger/src/coreengine/graphics/api/core/GraphicsCommandQueue.java new file mode 100644 index 0000000..58f8d79 --- /dev/null +++ b/src/graphics/java/speiger/src/coreengine/graphics/api/core/GraphicsCommandQueue.java @@ -0,0 +1,5 @@ +package speiger.src.coreengine.graphics.api.core; + +public interface GraphicsCommandQueue { + +} diff --git a/src/graphics/java/speiger/src/coreengine/api/core/GraphicsDevice.java b/src/graphics/java/speiger/src/coreengine/graphics/api/core/GraphicsDevice.java similarity index 58% rename from src/graphics/java/speiger/src/coreengine/api/core/GraphicsDevice.java rename to src/graphics/java/speiger/src/coreengine/graphics/api/core/GraphicsDevice.java index 86d60d0..24314df 100644 --- a/src/graphics/java/speiger/src/coreengine/api/core/GraphicsDevice.java +++ b/src/graphics/java/speiger/src/coreengine/graphics/api/core/GraphicsDevice.java @@ -1,12 +1,12 @@ -package speiger.src.coreengine.api.core; - -import speiger.src.coreengine.api.buffer.VertexBuffer; -import speiger.src.coreengine.api.texture.Texture; -import speiger.src.coreengine.rendering.input.window.Window; - -public interface GraphicsDevice { - public GraphicsSurface createSurface(Window window); - public GraphicsCommandQueue getQueue(); - public VertexBuffer createBuffer(); - public Texture createTexture(); -} +package speiger.src.coreengine.graphics.api.core; + +import speiger.src.coreengine.graphics.api.buffer.VertexBuffer; +import speiger.src.coreengine.graphics.api.texture.Texture; +import speiger.src.coreengine.rendering.input.window.Window; + +public interface GraphicsDevice { + public GraphicsSurface createSurface(Window window); + public GraphicsCommandQueue getQueue(); + public VertexBuffer createBuffer(); + public Texture createTexture(); +} diff --git a/src/graphics/java/speiger/src/coreengine/graphics/api/core/GraphicsResource.java b/src/graphics/java/speiger/src/coreengine/graphics/api/core/GraphicsResource.java new file mode 100644 index 0000000..4674765 --- /dev/null +++ b/src/graphics/java/speiger/src/coreengine/graphics/api/core/GraphicsResource.java @@ -0,0 +1,11 @@ +package speiger.src.coreengine.graphics.api.core; + +public interface GraphicsResource extends AutoCloseable { + public boolean isRemoved(); + public void remove(); + + @Override + default void close() { + remove(); + } +} diff --git a/src/graphics/java/speiger/src/coreengine/api/core/GraphicsSurface.java b/src/graphics/java/speiger/src/coreengine/graphics/api/core/GraphicsSurface.java similarity index 58% rename from src/graphics/java/speiger/src/coreengine/api/core/GraphicsSurface.java rename to src/graphics/java/speiger/src/coreengine/graphics/api/core/GraphicsSurface.java index 5713d38..bb5dbf6 100644 --- a/src/graphics/java/speiger/src/coreengine/api/core/GraphicsSurface.java +++ b/src/graphics/java/speiger/src/coreengine/graphics/api/core/GraphicsSurface.java @@ -1,5 +1,5 @@ -package speiger.src.coreengine.api.core; - -public interface GraphicsSurface { - public void setVsync(boolean value); -} +package speiger.src.coreengine.graphics.api.core; + +public interface GraphicsSurface { + public void setVsync(boolean value); +} diff --git a/src/graphics/java/speiger/src/coreengine/graphics/api/sampler/Sampler.java b/src/graphics/java/speiger/src/coreengine/graphics/api/sampler/Sampler.java new file mode 100644 index 0000000..cac7dd3 --- /dev/null +++ b/src/graphics/java/speiger/src/coreengine/graphics/api/sampler/Sampler.java @@ -0,0 +1,13 @@ +package speiger.src.coreengine.graphics.api.sampler; + +public abstract class Sampler { + SamplerSettings settings; + + public Sampler(SamplerSettings settings) { + this.settings = settings; + } + + public SamplerSettings settings() { + return settings; + } +} diff --git a/src/graphics/java/speiger/src/coreengine/graphics/api/sampler/SamplerSettings.java b/src/graphics/java/speiger/src/coreengine/graphics/api/sampler/SamplerSettings.java new file mode 100644 index 0000000..8a7e186 --- /dev/null +++ b/src/graphics/java/speiger/src/coreengine/graphics/api/sampler/SamplerSettings.java @@ -0,0 +1,5 @@ +package speiger.src.coreengine.graphics.api.sampler; + +public class SamplerSettings { + +} diff --git a/src/graphics/java/speiger/src/coreengine/graphics/api/texture/Texture.java b/src/graphics/java/speiger/src/coreengine/graphics/api/texture/Texture.java new file mode 100644 index 0000000..4130b21 --- /dev/null +++ b/src/graphics/java/speiger/src/coreengine/graphics/api/texture/Texture.java @@ -0,0 +1,16 @@ +package speiger.src.coreengine.graphics.api.texture; + +import speiger.src.coreengine.graphics.api.core.GraphicsResource; + +public abstract class Texture implements GraphicsResource { + final TextureSettings settings; + + public Texture(TextureSettings settings) { + this.settings = settings; + } + + public TextureSettings settings() { + return settings; + } + +} diff --git a/src/graphics/java/speiger/src/coreengine/graphics/api/texture/TextureSettings.java b/src/graphics/java/speiger/src/coreengine/graphics/api/texture/TextureSettings.java new file mode 100644 index 0000000..41d3969 --- /dev/null +++ b/src/graphics/java/speiger/src/coreengine/graphics/api/texture/TextureSettings.java @@ -0,0 +1,128 @@ +package speiger.src.coreengine.graphics.api.texture; + +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.OptionalInt; + +import speiger.src.collections.objects.lists.ImmutableObjectList; +import speiger.src.coreengine.graphics.api.texture.states.StencilType; +import speiger.src.coreengine.graphics.api.texture.states.SwizzleMask; +import speiger.src.coreengine.graphics.api.texture.states.TextureFormat; +import speiger.src.coreengine.graphics.api.texture.states.TextureType; + +public record TextureSettings(TextureType type, TextureFormat internal, TextureFormat external, boolean generateMipmapping, OptionalInt baseLevel, OptionalInt maxLevel, List> swizzle, Optional stencilType) { + + public Builder copy() { return new Builder(this); } + public static Builder builder() { return new Builder(); } + + public boolean hasSwizzle() { + for(int i = 0;i<4;i++) { + if(swizzle().get(i).isPresent()) return true; + } + return false; + } + + public static class Builder { + TextureFormat internalFormat; + TextureFormat externalFormat; + TextureType type; + boolean generateMipmapping = false; + OptionalInt baseLevel = OptionalInt.empty(); + OptionalInt maxLevel = OptionalInt.empty(); + @SuppressWarnings("unchecked") + Optional[] swizzle = new Optional[] {Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty()}; + Optional stencilType = Optional.empty(); + + private Builder() {} + private Builder(TextureSettings settings) { + type = settings.type; + internalFormat = settings.internal; + externalFormat = settings.external; + generateMipmapping = settings.generateMipmapping; + baseLevel = settings.baseLevel; + maxLevel = settings.maxLevel; + settings.swizzle.toArray(swizzle); + stencilType = settings.stencilType; + } + + public TextureSettings build() { + return new TextureSettings( + Objects.requireNonNull(type, "Texture Type shouldn't be null"), + Objects.requireNonNull(internalFormat, "Internal Format shouldn't be null"), + Objects.requireNonNull(externalFormat, "External Format shouldn't be null"), + generateMipmapping, baseLevel, maxLevel, new ImmutableObjectList<>(swizzle), stencilType); + } + + public Builder type(TextureType type) { + this.type = type; + return this; + } + + public Builder format(TextureFormat format) { + this.internalFormat = format; + this.externalFormat = format; + return this; + } + + public Builder internal(TextureFormat format) { + this.internalFormat = format; + return this; + } + + public Builder external(TextureFormat format) { + this.externalFormat = format; + return this; + } + + public Builder swizzle(SwizzleMask red, SwizzleMask green, SwizzleMask blue, SwizzleMask alpha) { + swizzle[0] = Optional.ofNullable(red); + swizzle[1] = Optional.ofNullable(green); + swizzle[2] = Optional.ofNullable(blue); + swizzle[3] = Optional.ofNullable(alpha); + return this; + } + + public Builder swizzleRed(SwizzleMask mask) { + swizzle[0] = Optional.ofNullable(mask); + return this; + } + + public Builder swizzleGreen(SwizzleMask mask) { + swizzle[1] = Optional.ofNullable(mask); + return this; + } + + public Builder swizzleBlue(SwizzleMask mask) { + swizzle[2] = Optional.ofNullable(mask); + return this; + } + + public Builder swizzleAlpha(SwizzleMask mask) { + swizzle[3] = Optional.ofNullable(mask); + return this; + } + + public Builder stencil(StencilType type) { + stencilType = Optional.ofNullable(type); + return this; + } + + public Builder generateMipmapping(boolean value) { + this.generateMipmapping = value; + return this; + } + + public Builder mipMapping(int base, int max) { + this.baseLevel = OptionalInt.of(base); + this.maxLevel = OptionalInt.of(max); + return this; + } + + public Builder clearmMipMapping() { + this.baseLevel = OptionalInt.empty(); + this.maxLevel = OptionalInt.empty(); + return this; + } + } +} diff --git a/src/graphics/java/speiger/src/coreengine/graphics/api/texture/states/StencilType.java b/src/graphics/java/speiger/src/coreengine/graphics/api/texture/states/StencilType.java new file mode 100644 index 0000000..032a2b4 --- /dev/null +++ b/src/graphics/java/speiger/src/coreengine/graphics/api/texture/states/StencilType.java @@ -0,0 +1,6 @@ +package speiger.src.coreengine.graphics.api.texture.states; + +public enum StencilType { + DEPTH_COMPONENT, + STENCIL_INDEX +} diff --git a/src/graphics/java/speiger/src/coreengine/graphics/api/texture/states/SwizzleMask.java b/src/graphics/java/speiger/src/coreengine/graphics/api/texture/states/SwizzleMask.java new file mode 100644 index 0000000..999af38 --- /dev/null +++ b/src/graphics/java/speiger/src/coreengine/graphics/api/texture/states/SwizzleMask.java @@ -0,0 +1,10 @@ +package speiger.src.coreengine.graphics.api.texture.states; + +public enum SwizzleMask { + ZERO, + ONE, + RED, + GREEN, + BLUE, + ALPHA; +} diff --git a/src/graphics/java/speiger/src/coreengine/graphics/api/texture/states/TextureFormat.java b/src/graphics/java/speiger/src/coreengine/graphics/api/texture/states/TextureFormat.java new file mode 100644 index 0000000..5b3b91a --- /dev/null +++ b/src/graphics/java/speiger/src/coreengine/graphics/api/texture/states/TextureFormat.java @@ -0,0 +1,11 @@ +package speiger.src.coreengine.graphics.api.texture.states; + +public enum TextureFormat { + R, + RGB, + RGBA, + DEPTH, + DEPTH_STENCIL, + LUMINANCE, + LUMINANCE_ALPHA +} diff --git a/src/graphics/java/speiger/src/coreengine/api/texture/TextureType.java b/src/graphics/java/speiger/src/coreengine/graphics/api/texture/states/TextureType.java similarity index 76% rename from src/graphics/java/speiger/src/coreengine/api/texture/TextureType.java rename to src/graphics/java/speiger/src/coreengine/graphics/api/texture/states/TextureType.java index 824c3c7..bef2444 100644 --- a/src/graphics/java/speiger/src/coreengine/api/texture/TextureType.java +++ b/src/graphics/java/speiger/src/coreengine/graphics/api/texture/states/TextureType.java @@ -1,15 +1,15 @@ -package speiger.src.coreengine.api.texture; - -public enum TextureType { - TEXTURE_1D, - TEXTURE_1D_ARRAY, - TEXTURE_2D, - TEXTURE_2D_ARRAY, - TEXTURE_2D_MULTISAMPLE, - TEXTURE_2D_MULTISAMPLE_ARRAY, - TEXTURE_3D, - TEXTURE_CUBE_MAP, - TEXTURE_CUBE_MAP_ARRAY, - TEXTURE_RECTANGLE, - TEXTURE_BUFFER; -} +package speiger.src.coreengine.graphics.api.texture.states; + +public enum TextureType { + TEXTURE_1D, + TEXTURE_1D_ARRAY, + TEXTURE_2D, + TEXTURE_2D_ARRAY, + TEXTURE_2D_MULTISAMPLE, + TEXTURE_2D_MULTISAMPLE_ARRAY, + TEXTURE_3D, + TEXTURE_CUBE_MAP, + TEXTURE_CUBE_MAP_ARRAY, + TEXTURE_RECTANGLE, + TEXTURE_BUFFER; +} diff --git a/src/main/java/speiger/src/coreengine/NewInputTest.java b/src/main/java/speiger/src/coreengine/NewInputTest.java index 04ec2ec..54c08d9 100644 --- a/src/main/java/speiger/src/coreengine/NewInputTest.java +++ b/src/main/java/speiger/src/coreengine/NewInputTest.java @@ -1,324 +1,325 @@ -package speiger.src.coreengine; - -import java.util.List; -import java.util.function.BiConsumer; - -import org.lwjgl.glfw.GLFW; -import org.lwjgl.opengl.GL; -import org.lwjgl.opengl.GL11; -import org.lwjgl.opengl.GL43; -import org.lwjgl.system.Configuration; -import org.lwjgl.util.freetype.FreeType; - -import speiger.src.collections.objects.lists.ObjectArrayList; -import speiger.src.coreengine.assets.AssetLocation; -import speiger.src.coreengine.assets.AssetManager; -import speiger.src.coreengine.assets.base.IAssetPackage; -import speiger.src.coreengine.assets.base.IAssetProvider; -import speiger.src.coreengine.math.vector.matrix.Matrix4f; -import speiger.src.coreengine.rendering.gui.font.Font; -import speiger.src.coreengine.rendering.gui.font.FontManager; -import speiger.src.coreengine.rendering.gui.font.TextStyle; -import speiger.src.coreengine.rendering.gui.font.glyth.Glyth; -import speiger.src.coreengine.rendering.gui.font.glyth.IGlythSheetInfo; -import speiger.src.coreengine.rendering.gui.font.glyth.MissingGlyth; -import speiger.src.coreengine.rendering.gui.font.glyth.UnbakedGlyth.GlythBaker; -import speiger.src.coreengine.rendering.input.devices.FileDrop; -import speiger.src.coreengine.rendering.input.devices.Joystick; -import speiger.src.coreengine.rendering.input.devices.Keyboard; -import speiger.src.coreengine.rendering.input.devices.Mouse; -import speiger.src.coreengine.rendering.input.events.KeyEvent; -import speiger.src.coreengine.rendering.input.events.MouseEvent; -import speiger.src.coreengine.rendering.input.window.Window; -import speiger.src.coreengine.rendering.input.window.WindowManager; -import speiger.src.coreengine.rendering.models.buffers.BufferAttribute; -import speiger.src.coreengine.rendering.models.buffers.VertexArray; -import speiger.src.coreengine.rendering.shader.Shader; -import speiger.src.coreengine.rendering.shader.SimpleShader; -import speiger.src.coreengine.rendering.shader.uniform.base.TextureUniform; -import speiger.src.coreengine.rendering.shader.uniform.vec.Matrix4fUniform; -import speiger.src.coreengine.rendering.tesselation.buffer.IVertexBuilder; -import speiger.src.coreengine.rendering.tesselation.buffer.VertexBuilder; -import speiger.src.coreengine.rendering.tesselation.format.VertexTypes; -import speiger.src.coreengine.rendering.textures.custom.Drawable; -import speiger.src.coreengine.rendering.textures.custom.DynamicTexture; -import speiger.src.coreengine.rendering.utils.GLStateTracker; -import speiger.src.coreengine.rendering.utils.values.GLDataType; -import speiger.src.coreengine.rendering.utils.values.GLMode; -import speiger.src.coreengine.rendering.utils.values.textures.GLTextureFormat; -import speiger.src.coreengine.utils.eventbus.EventBus; -import speiger.src.coreengine.utils.helpers.IOUtils; - -public class NewInputTest { - - EventBus bus = new EventBus(); - WindowManager manager = new WindowManager(); - AssetManager assets = new AssetManager(List.of(IAssetPackage.of(IOUtils.getBaseLocation()))); - FontManager fonts = new FontManager(); - private Shader shaderTest = Shader.create(TestShader::new); - private Shader guiShader = Shader.create(GuiShader::new); - - - public static void main(String[] args) { - new NewInputTest().run(); - } - - private void applyWindowSize(Window window) { - int scale = 0; - guiShader.get().proView.set(new Matrix4f().ortho(0, 0, window.width() >> scale, window.height() >> scale, 1000, -1000)); - } - - public void run() { - Configuration.HARFBUZZ_LIBRARY_NAME.set(FreeType.getLibrary()); - GLFW.glfwInit(); - manager.initialize(); - Mouse.INSTANCE.init(bus); - Keyboard.INSTANCE.init(bus); - Joystick.INSTANCE.init(manager, bus); - FileDrop.INSTANCE.init(bus); - manager.addDevices(Mouse.INSTANCE, Keyboard.INSTANCE, Joystick.INSTANCE, FileDrop.INSTANCE); - Window window = manager.builder().title("Testing Engine").width(800).height(600).antialis(0).build(); - Window secondWindow = manager.builder().title("Second Window Engine").width(800).height(600).antialis(0).build(); - Thread.ofPlatform().start(() -> drawSecondScreen(secondWindow)); - window.setupContext(); - shaderTest.register(); - guiShader.register(); - assets.addListener(GLStateTracker.instance().shaders); - assets.addListener(GLStateTracker.TEXTURE_TRACKER); - assets.addListener(fonts); - assets.reload(); - - applyWindowSize(window); - System.out.println("Testing: "+GL.getCapabilities().OpenGL41); - System.out.println("Testing: "+Integer.divideUnsigned(-1, 255)); - - GL11.glEnable(GL43.GL_MULTISAMPLE); - int size = 512; - int half = size >> 1; - int base = size >> 3; - - DynamicTexture texture = new DynamicTexture(size, size, DynamicTexture.DEFAULT_PARAMETERS); - texture.fill(0, 0, size, size, -1); - texture.fill(0, 0, half, half, 255, 0, 0, 255); - texture.fill(half, 0, half, half, 0, 255, 0, 255); - texture.fill(half, half, half, half, 255, 0, 0, 255); - texture.fill(0, half, half, half, 0, 0, 255, 255); - texture.process(true); - window.visible(true); - - bus.register(MouseEvent.Click.class, T -> { - System.out.println("Testing: Button="+T.button()+", Click="+T.press()+", X="+T.x()+", Y="+T.y()+", WindowId="+T.windowId()+", WindowName="+manager.getWindow(T.windowId()).title()); - }); - bus.register(KeyEvent.Key.class, T -> { - if(T.key() == GLFW.GLFW_KEY_T) { - T.cancel(); -// texture.bind(); - Drawable drawable = new Drawable(GLTextureFormat.RGBA, half, half); - drawable.fill(0, 0, half, half, 255, 255, 0, 255); - drawable.upload(texture.id(), base * 3, base * 3, base, base, base * 2, base * 2); - drawable.close(); - } - else if(T.key() == GLFW.GLFW_KEY_U) { - MissingGlyth glyth = new MissingGlyth(18.5F, 4F); - glyth.bake(new GlythBaker() { - @Override - public Glyth bake(IGlythSheetInfo info) { - int width = info.width(); - int height = info.height(); - info.upload(texture.id(), half - (width >> 1), half - (height >> 1)); - System.out.println("Test3: "+width+", "+height); - return null; - } - }); - } - else if(T.key() == GLFW.GLFW_KEY_O && T.press()) { - window.borderless(!window.isBorderless()); - } - }); - - VertexBuilder builder = new VertexBuilder(255); - builder.start(GLMode.TRIANGLES, VertexTypes.TESTING); - builder.pos(-0.5F, -0.5F, 0).tex(0F, 1F).rgba(-1).endVertex(); - builder.pos(0.5F, -0.5F, 0).tex(1F, 1F).rgba(-1).endVertex(); - builder.pos(0.5F, 0.5F, 0).tex(1F, 0F).rgba(-1).endVertex(); - builder.pos(0.5F, 0.5F, 0).tex(1F, 0F).rgba(-1).endVertex(); - builder.pos(-0.5F, 0.5F, 0).tex(0F, 0F).rgba(-1).endVertex(); - builder.pos(-0.5F, -0.5F, 0).tex(0F, 1F).rgba(-1).endVertex(); - -// Font font = fonts.createFont(1F); - TestModel model = new TestModel(builder.getBytes()); -// TestModel[] guiModel = new TestModel[1]; -// List draws = new ObjectArrayList<>(); -// TexturedBuffer buffer = new TexturedBuffer((K, V) -> { -// draws.addAll(K); -// guiModel[0] = new TestModel(V); -// System.out.println("Testing: "+V.length+" bytes, "+K.size()); -// }); - -// String s = "The Quick brown fox Jumps over the Lazy dog"; - float x = 50; - float y = 50; - float scale = 1F; - y /= scale; - TextStyle style = TextStyle.DEFAULT.size(12).bold(false); -// font.drawText(style, "Testing My Theory", x, y, -1, buffer, scale, true); -// float offset = font.drawText(style, "The Quick ", 50, y, -1, buffer, scale, false); -// offset += font.drawText(style, "Brown ", 50+offset, y, -1, buffer, scale, false); -// offset += font.drawText(style, "§ox ", 50+offset, y, -1, buffer, scale, false); -// offset += font.drawText(style, "Jumps ", 50+offset, y, -1, buffer, scale, false); -// offset += font.drawText(style, "over the Lazy dog", 50+offset, y, -1, buffer, scale, true); -// font.drawText(s, 50, 50, -1, buffer, true); - GLStateTracker tracker = GLStateTracker.instance(); - GL11.glClearColor(0.2F, 0.55F, 0.66F, 1F); - while(!window.shouldClose()) { - GLFW.glfwPollEvents(); - if(window.changed()) { - window.updateViewport(); - applyWindowSize(window); - } - - window.beginFrame(); - GL11.glClear(GL11.GL_COLOR_BUFFER_BIT); - texture.bind(); - shaderTest.bind(); - model.bindArray(); - GLStateTracker.drawArrays(GLMode.TRIANGLES.glValue(), 6); - model.unbindArray(); -// guiModel[0].bindArray(); -// guiShader.bind(); -// tracker.blend.enable(); -// tracker.blend.setFunction(GLBlendFactor.SRC_ALPHA, GLBlendFactor.ONE_MINUS_SRC_ALPHA); -// for(GLDraw draw : draws) { -// tracker.textures.bind(draw.texture()); -// GLStateTracker.drawArrays(GLMode.TRIANGLES.glValue(), draw.startVertex(), draw.vertexCount()); -// } -// GLStateTracker.instance().blend.disable(); -// guiModel[0].unbindArray(); - - window.handleInput(); - window.finishFrame(); - try { Thread.sleep(100); } - catch(InterruptedException e) { e.printStackTrace(); } - } - window.destroy(); - manager.destroy(); - } - - public void drawSecondScreen(Window window) { - window.setupContext(); - assets.addListener(GLStateTracker.instance().shaders); - Shader secondShader = Shader.createAndRegister(TestShader::new); - - guiShader.register(); - window.visible(true); - GL11.glClearColor(0.4F, 0.55F, 0.36F, 1F); - int size = 512; - int half = size >> 1; - int base = size >> 3; - - DynamicTexture texture = new DynamicTexture(size, size, DynamicTexture.DEFAULT_PARAMETERS); - texture.fill(0, 0, size, size, -1); - texture.fill(0, 0, half, half, 255, 0, 0, 255); - texture.fill(half, 0, half, half, 0, 255, 0, 255); - texture.fill(half, half, half, half, 255, 0, 0, 255); - texture.fill(0, half, half, half, 0, 0, 255, 255); - texture.process(true); - - VertexBuilder builder = new VertexBuilder(255); - builder.start(GLMode.TRIANGLES, VertexTypes.TESTING); - builder.pos(-0.5F, -0.5F, 0).tex(0F, 1F).rgba(-1).endVertex(); - builder.pos(0.5F, -0.5F, 0).tex(1F, 1F).rgba(-1).endVertex(); - builder.pos(0.5F, 0.5F, 0).tex(1F, 0F).rgba(-1).endVertex(); - builder.pos(0.5F, 0.5F, 0).tex(1F, 0F).rgba(-1).endVertex(); - builder.pos(-0.5F, 0.5F, 0).tex(0F, 0F).rgba(-1).endVertex(); - builder.pos(-0.5F, -0.5F, 0).tex(0F, 1F).rgba(-1).endVertex(); - - TestModel model = new TestModel(builder.getBytes()); - while(!window.shouldClose()) { - GLFW.glfwPollEvents(); - if(window.changed()) { - window.updateViewport(); - applyWindowSize(window); - } - window.beginFrame(); - GL11.glClear(GL11.GL_COLOR_BUFFER_BIT); - texture.bind(); - secondShader.bind(); - model.bindArray(); - GLStateTracker.drawArrays(GLMode.TRIANGLES.glValue(), 6); - model.unbindArray(); - - window.handleInput(); - window.finishFrame(); - try { Thread.sleep(100); } - catch(InterruptedException e) { e.printStackTrace(); } - } - window.destroy(); - } - - public static class TexturedBuffer implements Font.TexturedBuffer { - int previousId = -1; - int lastVertex = 0; - List draws = new ObjectArrayList<>(); - VertexBuilder builder; - BiConsumer, byte[]> callbacks; - - public TexturedBuffer(BiConsumer, byte[]> callbacks) { - this.callbacks = callbacks; - } - - @Override - public IVertexBuilder builderForTexture(int textureId) { - if(builder == null) { - builder = new VertexBuilder(100000); - builder.start(GLMode.TRIANGLES, VertexTypes.TESTING); - previousId = textureId; - } - else if(previousId != textureId) { - int count = builder.size() - lastVertex; - draws.add(new GLDraw(previousId, lastVertex, count)); - lastVertex+=count; - previousId = textureId; - } - return builder; - } - - @Override - public void end() { - int count = builder.size() - lastVertex; - draws.add(new GLDraw(previousId, lastVertex, count)); - callbacks.accept(draws, builder.getBytes()); - builder.close(); - } - - } - - public static record GLDraw(int texture, int startVertex, int vertexCount) { - - } - - public static class GuiShader extends SimpleShader { - public TextureUniform texture = uniforms.addTexture("texture", 0); - public Matrix4fUniform proView = uniforms.addMat("proViewMatrix", new Matrix4f()); - - public GuiShader(IAssetProvider provider) { - super(provider, "gui_shader", AssetLocation.of("shader/testGui/vertex.vs"), AssetLocation.of("shader/testGui/fragment.fs"), "in_position", "in_tex", "in_color"); - } - - } - - public static class TestShader extends SimpleShader { - public TextureUniform texture = uniforms.addTexture("texture", 0); - public TestShader(IAssetProvider provider) { - super(provider, "testing_shader", AssetLocation.of("shader/testing/vertex.vs"), AssetLocation.of("shader/testing/fragment.fs"), "in_position", "in_tex", "in_color"); - } - } - - public static class TestModel extends VertexArray { - public TestModel(byte[] data) { - bind(); - createBuffer(new BufferAttribute(0, 3), new BufferAttribute(1, 2), new BufferAttribute(2, 4, GLDataType.UNSIGNED_BYTE, true)).set(data).unbind(); - unbind(); - } - } -} +package speiger.src.coreengine; + +import java.util.List; +import java.util.function.BiConsumer; + +import org.lwjgl.glfw.GLFW; +import org.lwjgl.opengl.GL; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL43; +import org.lwjgl.system.Configuration; +import org.lwjgl.util.freetype.FreeType; + + +import speiger.src.collections.objects.lists.ObjectArrayList; +import speiger.src.coreengine.assets.AssetLocation; +import speiger.src.coreengine.assets.AssetManager; +import speiger.src.coreengine.assets.base.IAssetPackage; +import speiger.src.coreengine.assets.base.IAssetProvider; +import speiger.src.coreengine.math.vector.matrix.Matrix4f; +import speiger.src.coreengine.rendering.gui.font.Font; +import speiger.src.coreengine.rendering.gui.font.FontManager; +import speiger.src.coreengine.rendering.gui.font.TextStyle; +import speiger.src.coreengine.rendering.gui.font.glyth.Glyth; +import speiger.src.coreengine.rendering.gui.font.glyth.IGlythSheetInfo; +import speiger.src.coreengine.rendering.gui.font.glyth.MissingGlyth; +import speiger.src.coreengine.rendering.gui.font.glyth.UnbakedGlyth.GlythBaker; +import speiger.src.coreengine.rendering.input.devices.FileDrop; +import speiger.src.coreengine.rendering.input.devices.Joystick; +import speiger.src.coreengine.rendering.input.devices.Keyboard; +import speiger.src.coreengine.rendering.input.devices.Mouse; +import speiger.src.coreengine.rendering.input.events.KeyEvent; +import speiger.src.coreengine.rendering.input.events.MouseEvent; +import speiger.src.coreengine.rendering.input.window.Window; +import speiger.src.coreengine.rendering.input.window.WindowManager; +import speiger.src.coreengine.rendering.models.buffers.BufferAttribute; +import speiger.src.coreengine.rendering.models.buffers.VertexArray; +import speiger.src.coreengine.rendering.shader.Shader; +import speiger.src.coreengine.rendering.shader.SimpleShader; +import speiger.src.coreengine.rendering.shader.uniform.base.TextureUniform; +import speiger.src.coreengine.rendering.shader.uniform.vec.Matrix4fUniform; +import speiger.src.coreengine.rendering.tesselation.buffer.IVertexBuilder; +import speiger.src.coreengine.rendering.tesselation.buffer.VertexBuilder; +import speiger.src.coreengine.rendering.tesselation.format.VertexTypes; +import speiger.src.coreengine.rendering.textures.custom.Drawable; +import speiger.src.coreengine.rendering.textures.custom.DynamicTexture; +import speiger.src.coreengine.rendering.utils.GLStateTracker; +import speiger.src.coreengine.rendering.utils.values.GLDataType; +import speiger.src.coreengine.rendering.utils.values.GLMode; +import speiger.src.coreengine.rendering.utils.values.textures.GLTextureFormat; +import speiger.src.coreengine.utils.eventbus.EventBus; +import speiger.src.coreengine.utils.helpers.IOUtils; + +public class NewInputTest { + + EventBus bus = new EventBus(); + WindowManager manager = new WindowManager(); + AssetManager assets = new AssetManager(List.of(IAssetPackage.of(IOUtils.getBaseLocation()))); + FontManager fonts = new FontManager(); + private Shader shaderTest = Shader.create(TestShader::new); + private Shader guiShader = Shader.create(GuiShader::new); + + + public static void main(String[] args) { + new NewInputTest().run(); + } + + private void applyWindowSize(Window window) { + int scale = 0; + guiShader.get().proView.set(new Matrix4f().ortho(0, 0, window.width() >> scale, window.height() >> scale, 1000, -1000)); + } + + public void run() { + Configuration.HARFBUZZ_LIBRARY_NAME.set(FreeType.getLibrary()); + GLFW.glfwInit(); + manager.initialize(); + Mouse.INSTANCE.init(bus); + Keyboard.INSTANCE.init(bus); + Joystick.INSTANCE.init(manager, bus); + FileDrop.INSTANCE.init(bus); + manager.addDevices(Mouse.INSTANCE, Keyboard.INSTANCE, Joystick.INSTANCE, FileDrop.INSTANCE); + Window window = manager.builder().title("Testing Engine").width(800).height(600).antialis(0).build(); + Window secondWindow = manager.builder().title("Second Window Engine").width(800).height(600).antialis(0).build(); + Thread.ofPlatform().start(() -> drawSecondScreen(secondWindow)); + window.setupContext(); + shaderTest.register(); + guiShader.register(); + assets.addListener(GLStateTracker.instance().shaders); + assets.addListener(GLStateTracker.TEXTURE_TRACKER); + assets.addListener(fonts); + assets.reload(); + + applyWindowSize(window); + System.out.println("Testing: "+GL.getCapabilities().OpenGL41); + System.out.println("Testing: "+Integer.divideUnsigned(-1, 255)); + + GL11.glEnable(GL43.GL_MULTISAMPLE); + int size = 512; + int half = size >> 1; + int base = size >> 3; + + DynamicTexture texture = new DynamicTexture(size, size, DynamicTexture.DEFAULT_PARAMETERS); + texture.fill(0, 0, size, size, -1); + texture.fill(0, 0, half, half, 255, 0, 0, 255); + texture.fill(half, 0, half, half, 0, 255, 0, 255); + texture.fill(half, half, half, half, 255, 0, 0, 255); + texture.fill(0, half, half, half, 0, 0, 255, 255); + texture.process(true); + window.visible(true); + + bus.register(MouseEvent.Click.class, T -> { + System.out.println("Testing: Button="+T.button()+", Click="+T.press()+", X="+T.x()+", Y="+T.y()+", WindowId="+T.windowId()+", WindowName="+manager.getWindow(T.windowId()).title()); + }); + bus.register(KeyEvent.Key.class, T -> { + if(T.key() == GLFW.GLFW_KEY_T) { + T.cancel(); +// texture.bind(); + Drawable drawable = new Drawable(GLTextureFormat.RGBA, half, half); + drawable.fill(0, 0, half, half, 255, 255, 0, 255); + drawable.upload(texture.id(), base * 3, base * 3, base, base, base * 2, base * 2); + drawable.close(); + } + else if(T.key() == GLFW.GLFW_KEY_U) { + MissingGlyth glyth = new MissingGlyth(18.5F, 4F); + glyth.bake(new GlythBaker() { + @Override + public Glyth bake(IGlythSheetInfo info) { + int width = info.width(); + int height = info.height(); + info.upload(texture.id(), half - (width >> 1), half - (height >> 1)); + System.out.println("Test3: "+width+", "+height); + return null; + } + }); + } + else if(T.key() == GLFW.GLFW_KEY_O && T.press()) { + window.borderless(!window.isBorderless()); + } + }); + + VertexBuilder builder = new VertexBuilder(255); + builder.start(GLMode.TRIANGLES, VertexTypes.TESTING); + builder.pos(-0.5F, -0.5F, 0).tex(0F, 1F).rgba(-1).endVertex(); + builder.pos(0.5F, -0.5F, 0).tex(1F, 1F).rgba(-1).endVertex(); + builder.pos(0.5F, 0.5F, 0).tex(1F, 0F).rgba(-1).endVertex(); + builder.pos(0.5F, 0.5F, 0).tex(1F, 0F).rgba(-1).endVertex(); + builder.pos(-0.5F, 0.5F, 0).tex(0F, 0F).rgba(-1).endVertex(); + builder.pos(-0.5F, -0.5F, 0).tex(0F, 1F).rgba(-1).endVertex(); + +// Font font = fonts.createFont(1F); + TestModel model = new TestModel(builder.getBytes()); +// TestModel[] guiModel = new TestModel[1]; +// List draws = new ObjectArrayList<>(); +// TexturedBuffer buffer = new TexturedBuffer((K, V) -> { +// draws.addAll(K); +// guiModel[0] = new TestModel(V); +// System.out.println("Testing: "+V.length+" bytes, "+K.size()); +// }); + +// String s = "The Quick brown fox Jumps over the Lazy dog"; + float x = 50; + float y = 50; + float scale = 1F; + y /= scale; + TextStyle style = TextStyle.DEFAULT.size(12).bold(false); +// font.drawText(style, "Testing My Theory", x, y, -1, buffer, scale, true); +// float offset = font.drawText(style, "The Quick ", 50, y, -1, buffer, scale, false); +// offset += font.drawText(style, "Brown ", 50+offset, y, -1, buffer, scale, false); +// offset += font.drawText(style, "§ox ", 50+offset, y, -1, buffer, scale, false); +// offset += font.drawText(style, "Jumps ", 50+offset, y, -1, buffer, scale, false); +// offset += font.drawText(style, "over the Lazy dog", 50+offset, y, -1, buffer, scale, true); +// font.drawText(s, 50, 50, -1, buffer, true); + GLStateTracker tracker = GLStateTracker.instance(); + GL11.glClearColor(0.2F, 0.55F, 0.66F, 1F); + while(!window.shouldClose()) { + GLFW.glfwPollEvents(); + if(window.changed()) { + window.updateViewport(); + applyWindowSize(window); + } + + window.beginFrame(); + GL11.glClear(GL11.GL_COLOR_BUFFER_BIT); + texture.bind(); + shaderTest.bind(); + model.bindArray(); + GLStateTracker.drawArrays(GLMode.TRIANGLES.glValue(), 6); + model.unbindArray(); +// guiModel[0].bindArray(); +// guiShader.bind(); +// tracker.blend.enable(); +// tracker.blend.setFunction(GLBlendFactor.SRC_ALPHA, GLBlendFactor.ONE_MINUS_SRC_ALPHA); +// for(GLDraw draw : draws) { +// tracker.textures.bind(draw.texture()); +// GLStateTracker.drawArrays(GLMode.TRIANGLES.glValue(), draw.startVertex(), draw.vertexCount()); +// } +// GLStateTracker.instance().blend.disable(); +// guiModel[0].unbindArray(); + + window.handleInput(); + window.finishFrame(); + try { Thread.sleep(100); } + catch(InterruptedException e) { e.printStackTrace(); } + } + window.destroy(); + manager.destroy(); + } + + public void drawSecondScreen(Window window) { + window.setupContext(); + assets.addListener(GLStateTracker.instance().shaders); + Shader secondShader = Shader.createAndRegister(TestShader::new); + + guiShader.register(); + window.visible(true); + GL11.glClearColor(0.4F, 0.55F, 0.36F, 1F); + int size = 512; + int half = size >> 1; + int base = size >> 3; + + DynamicTexture texture = new DynamicTexture(size, size, DynamicTexture.DEFAULT_PARAMETERS); + texture.fill(0, 0, size, size, -1); + texture.fill(0, 0, half, half, 255, 0, 0, 255); + texture.fill(half, 0, half, half, 0, 255, 0, 255); + texture.fill(half, half, half, half, 255, 0, 0, 255); + texture.fill(0, half, half, half, 0, 0, 255, 255); + texture.process(true); + + VertexBuilder builder = new VertexBuilder(255); + builder.start(GLMode.TRIANGLES, VertexTypes.TESTING); + builder.pos(-0.5F, -0.5F, 0).tex(0F, 1F).rgba(-1).endVertex(); + builder.pos(0.5F, -0.5F, 0).tex(1F, 1F).rgba(-1).endVertex(); + builder.pos(0.5F, 0.5F, 0).tex(1F, 0F).rgba(-1).endVertex(); + builder.pos(0.5F, 0.5F, 0).tex(1F, 0F).rgba(-1).endVertex(); + builder.pos(-0.5F, 0.5F, 0).tex(0F, 0F).rgba(-1).endVertex(); + builder.pos(-0.5F, -0.5F, 0).tex(0F, 1F).rgba(-1).endVertex(); + + TestModel model = new TestModel(builder.getBytes()); + while(!window.shouldClose()) { + GLFW.glfwPollEvents(); + if(window.changed()) { + window.updateViewport(); + applyWindowSize(window); + } + window.beginFrame(); + GL11.glClear(GL11.GL_COLOR_BUFFER_BIT); + texture.bind(); + secondShader.bind(); + model.bindArray(); + GLStateTracker.drawArrays(GLMode.TRIANGLES.glValue(), 6); + model.unbindArray(); + + window.handleInput(); + window.finishFrame(); + try { Thread.sleep(100); } + catch(InterruptedException e) { e.printStackTrace(); } + } + window.destroy(); + } + + public static class TexturedBuffer implements Font.TexturedBuffer { + int previousId = -1; + int lastVertex = 0; + List draws = new ObjectArrayList<>(); + VertexBuilder builder; + BiConsumer, byte[]> callbacks; + + public TexturedBuffer(BiConsumer, byte[]> callbacks) { + this.callbacks = callbacks; + } + + @Override + public IVertexBuilder builderForTexture(int textureId) { + if(builder == null) { + builder = new VertexBuilder(100000); + builder.start(GLMode.TRIANGLES, VertexTypes.TESTING); + previousId = textureId; + } + else if(previousId != textureId) { + int count = builder.size() - lastVertex; + draws.add(new GLDraw(previousId, lastVertex, count)); + lastVertex+=count; + previousId = textureId; + } + return builder; + } + + @Override + public void end() { + int count = builder.size() - lastVertex; + draws.add(new GLDraw(previousId, lastVertex, count)); + callbacks.accept(draws, builder.getBytes()); + builder.close(); + } + + } + + public static record GLDraw(int texture, int startVertex, int vertexCount) { + + } + + public static class GuiShader extends SimpleShader { + public TextureUniform texture = uniforms.addTexture("texture", 0); + public Matrix4fUniform proView = uniforms.addMat("proViewMatrix", new Matrix4f()); + + public GuiShader(IAssetProvider provider) { + super(provider, "gui_shader", AssetLocation.of("shader/testGui/vertex.vs"), AssetLocation.of("shader/testGui/fragment.fs"), "in_position", "in_tex", "in_color"); + } + + } + + public static class TestShader extends SimpleShader { + public TextureUniform texture = uniforms.addTexture("texture", 0); + public TestShader(IAssetProvider provider) { + super(provider, "testing_shader", AssetLocation.of("shader/testing/vertex.vs"), AssetLocation.of("shader/testing/fragment.fs"), "in_position", "in_tex", "in_color"); + } + } + + public static class TestModel extends VertexArray { + public TestModel(byte[] data) { + bind(); + createBuffer(new BufferAttribute(0, 3), new BufferAttribute(1, 2), new BufferAttribute(2, 4, GLDataType.UNSIGNED_BYTE, true)).set(data).unbind(); + unbind(); + } + } +} diff --git a/src/main/java/speiger/src/coreengine/rendering/guiOld/helper/box/GuiBox.java b/src/main/java/speiger/src/coreengine/rendering/guiOld/helper/box/GuiBox.java index dc8b11b..2a6bc96 100644 --- a/src/main/java/speiger/src/coreengine/rendering/guiOld/helper/box/GuiBox.java +++ b/src/main/java/speiger/src/coreengine/rendering/guiOld/helper/box/GuiBox.java @@ -1,182 +1,182 @@ -package speiger.src.coreengine.rendering.guiOld.helper.box; - -import java.util.List; - -import speiger.src.collections.objects.lists.ObjectArrayList; -import speiger.src.collections.objects.lists.ObjectList; - -public class GuiBox implements IGuiBox -{ - ObjectList children = new ObjectArrayList<>(); - IGuiBox parent; - - float minX; - float minY; - float maxX; - float maxY; - - float width; - float height; - float scale = 1F; - - float baseX; - float baseY; - float baseWidth; - float baseHeight; - float baseScale = 1F; - - - protected GuiBox() {} - - public GuiBox(float x, float y, float width, float height) { - set(x, y, width, height); - onChanged(); - } - - public static IGuiBox clone(IGuiBox box) { - return new GuiBox(box.getMinX(), box.getMinY(), box.getWidth(), box.getHeight()); - } - - public static IGuiBox clonePadded(IGuiBox box, float padding) { - return new GuiBox(box.getMinX() + padding, box.getMinY() + padding, box.getWidth() - padding * 2F, box.getHeight() - padding * 2F); - } - - @Override - public IGuiBox addChild(IGuiBox box) { - children.add(box); - box.setParent(this); - return this; - } - - @Override - public IGuiBox removeChild(IGuiBox box) { - if(children.remove(box)) box.setParent(null); - return this; - } - - @Override - public IGuiBox clearChildren() { - for(int i = 0,m=children.size();i children() { - return children.unmodifiable(); - } - - @Override - public IGuiBox onChanged() { - minX = parent == null ? baseX : parent.getMinX(baseX); - minY = parent == null ? baseY : parent.getMinY(baseY); - maxX = parent == null ? baseX + width : parent.getMinX(baseX + width); - maxY = parent == null ? baseY + height : parent.getMinY(baseY + height); - scale = parent == null ? baseScale : parent.getScale() * baseScale; - for(int i = 0,m=children.size();i children = new ObjectArrayList<>(); + IGuiBox parent; + + float minX; + float minY; + float maxX; + float maxY; + + float width; + float height; + float scale = 1F; + + float baseX; + float baseY; + float baseWidth; + float baseHeight; + float baseScale = 1F; + + + protected GuiBox() {} + + public GuiBox(float x, float y, float width, float height) { + set(x, y, width, height); + onChanged(); + } + + public static IGuiBox clone(IGuiBox box) { + return new GuiBox(box.getMinX(), box.getMinY(), box.getWidth(), box.getHeight()); + } + + public static IGuiBox clonePadded(IGuiBox box, float padding) { + return new GuiBox(box.getMinX() + padding, box.getMinY() + padding, box.getWidth() - padding * 2F, box.getHeight() - padding * 2F); + } + + @Override + public IGuiBox addChild(IGuiBox box) { + children.add(box); + box.setParent(this); + return this; + } + + @Override + public IGuiBox removeChild(IGuiBox box) { + if(children.remove(box)) box.setParent(null); + return this; + } + + @Override + public IGuiBox clearChildren() { + for(int i = 0,m=children.size();i children() { + return children.unmodifiable(); + } + + @Override + public IGuiBox onChanged() { + minX = parent == null ? baseX : parent.getMinX(baseX); + minY = parent == null ? baseY : parent.getMinY(baseY); + maxX = parent == null ? baseX + width : parent.getMinX(baseX + width); + maxY = parent == null ? baseY + height : parent.getMinY(baseY + height); + scale = parent == null ? baseScale : parent.getScale() * baseScale; + for(int i = 0,m=children.size();i