package com.mojang.blaze3d.opengl; import com.mojang.blaze3d.systems.CommandEncoderBackend; import com.mojang.blaze3d.systems.GpuSurface; import com.mojang.blaze3d.systems.GpuSurfaceBackend; import com.mojang.blaze3d.systems.SurfaceException; import com.mojang.blaze3d.textures.GpuTextureView; import java.util.Collection; import java.util.EnumSet; import java.util.Set; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import org.lwjgl.glfw.GLFW; @Environment(EnvType.CLIENT) public class GlSurface implements GpuSurfaceBackend { private static final Set SUPPORTED_PRESENT_MODES = EnumSet.of(GpuSurface.PresentMode.FIFO, GpuSurface.PresentMode.IMMEDIATE); private final long windowHandle; public GlSurface(final long windowHandle) { this.windowHandle = windowHandle; } @Override public void configure(final GpuSurface.Configuration config) throws SurfaceException { GLFW.glfwSwapInterval(config.presentMode() == GpuSurface.PresentMode.FIFO ? 1 : 0); } @Override public boolean isSuboptimal() { return false; } @Override public void acquireNextTexture() { } @Override public void blitFromTexture(final CommandEncoderBackend commandEncoder, final GpuTextureView textureView) { ((GlCommandEncoder)commandEncoder).presentTexture(textureView); } @Override public void present() { GLFW.glfwSwapBuffers(this.windowHandle); } @Override public void close() { } @Override public Collection supportedPresentModes() { return SUPPORTED_PRESENT_MODES; } }