11
11
12
12
import java .awt .Desktop ;
13
13
import java .io .IOException ;
14
- import java .lang .reflect .Method ;
15
- import java .lang .reflect .Modifier ;
16
14
import java .net .URI ;
17
15
import java .nio .ByteBuffer ;
18
16
import java .nio .file .Files ;
22
20
import java .util .Calendar ;
23
21
import java .util .List ;
24
22
import java .util .Objects ;
25
- import java .util .Optional ;
26
23
import java .util .StringJoiner ;
27
24
import java .util .concurrent .ExecutionException ;
28
25
import java .util .concurrent .Executors ;
34
31
import java .util .concurrent .atomic .AtomicBoolean ;
35
32
import java .util .concurrent .locks .ReentrantLock ;
36
33
import java .util .function .BiConsumer ;
37
- import java .util .function .Consumer ;
38
- import java .util .function .Function ;
39
- import java .util .function .IntConsumer ;
40
- import java .util .function .IntSupplier ;
41
- import java .util .function .LongSupplier ;
42
- import java .util .function .Supplier ;
43
34
import java .util .stream .Collector ;
44
35
import java .util .stream .Collectors ;
45
36
import joptsimple .OptionParser ;
46
37
import net .neoforged .fml .loading .FMLConfig ;
47
38
import net .neoforged .fml .loading .FMLPaths ;
48
- import net .neoforged .fml .loading .ImmediateWindowHandler ;
39
+ import net .neoforged .fml .loading .progress . ProgressMeter ;
49
40
import net .neoforged .fml .loading .progress .StartupNotificationManager ;
50
41
import net .neoforged .neoforgespi .earlywindow .ImmediateWindowProvider ;
51
42
import org .jetbrains .annotations .Nullable ;
@@ -76,6 +67,7 @@ public class DisplayWindow implements ImmediateWindowProvider {
76
67
private static final int [][] GL_VERSIONS = new int [][] { { 4 , 6 }, { 4 , 5 }, { 4 , 4 }, { 4 , 3 }, { 4 , 2 }, { 4 , 1 }, { 4 , 0 }, { 3 , 3 }, { 3 , 2 } };
77
68
private static final Logger LOGGER = LoggerFactory .getLogger ("EARLYDISPLAY" );
78
69
private final AtomicBoolean animationTimerTrigger = new AtomicBoolean (true );
70
+ private final ProgressMeter mainProgress ;
79
71
80
72
private ColourScheme colourScheme ;
81
73
private ElementShader elementShader ;
@@ -103,10 +95,13 @@ public class DisplayWindow implements ImmediateWindowProvider {
103
95
104
96
private final Semaphore renderLock = new Semaphore (1 );
105
97
private boolean maximized ;
106
- private String glVersion ;
107
98
private SimpleFont font ;
108
99
private Runnable repaintTick = () -> {};
109
100
101
+ public DisplayWindow () {
102
+ mainProgress = StartupNotificationManager .addProgressBar ("EARLY" , 0 );
103
+ }
104
+
110
105
@ Override
111
106
public String name () {
112
107
return "fmlearlywindow" ;
@@ -270,15 +265,14 @@ void paintFramebuffer() {
270
265
}
271
266
272
267
// Called from NeoForge
273
- public void render ( int alpha ) {
268
+ public void renderToFramebuffer ( ) {
274
269
GlDebug .pushGroup ("update EarlyDisplay framebuffer" );
275
270
GlState .readFromOpenGL ();
276
271
var backup = GlState .createSnapshot ();
277
272
278
273
GlState .viewport (0 , 0 , this .context .scaledWidth (), this .context .scaledHeight ());
279
- RenderElement .globalAlpha = alpha ;
280
274
framebuffer .activate ();
281
- GlState .clearColor (colourScheme .background ().redf (), colourScheme .background ().greenf (), colourScheme .background ().bluef (), alpha / 255f );
275
+ GlState .clearColor (colourScheme .background ().redf (), colourScheme .background ().greenf (), colourScheme .background ().bluef (), 1f );
282
276
elementShader .activate ();
283
277
elementShader .updateScreenSizeUniform (this .context .scaledWidth (), this .context .scaledHeight ());
284
278
paintFramebuffer ();
@@ -305,11 +299,6 @@ public Runnable start(@Nullable String mcVersion, final String forgeVersion) {
305
299
306
300
private static final String ERROR_URL = "https://links.neoforged.net/early-display-errors" ;
307
301
308
- @ Override
309
- public String getGLVersion () {
310
- return this .glVersion ;
311
- }
312
-
313
302
private final ReentrantLock crashLock = new ReentrantLock ();
314
303
315
304
private void crashElegantly (String errorDetails ) {
@@ -445,7 +434,6 @@ public void initWindow(@Nullable String mcVersion) {
445
434
var min = glfwGetWindowAttrib (window , GLFW_CONTEXT_VERSION_MINOR );
446
435
var gotVersion = maj + "." + min ;
447
436
LOGGER .info ("Requested GL version " + requestedVersion + " got version " + gotVersion );
448
- this .glVersion = gotVersion ;
449
437
this .window = window ;
450
438
451
439
int [] x = new int [1 ];
@@ -539,7 +527,7 @@ private void handleLastGLFWError(BiConsumer<Integer, String> handler) {
539
527
*
540
528
* @return the Window we own.
541
529
*/
542
- public long setupMinecraftWindow ( final IntSupplier width , final IntSupplier height , final Supplier < String > title , final LongSupplier monitorSupplier ) {
530
+ public long takeOverGlfwWindow ( ) {
543
531
// wait for the window to actually be initialized
544
532
try {
545
533
this .initializationFuture .get (30 , TimeUnit .SECONDS );
@@ -550,7 +538,7 @@ public long setupMinecraftWindow(final IntSupplier width, final IntSupplier heig
550
538
crashElegantly ("We seem to be having trouble initializing the window, waited for 30 seconds" );
551
539
}
552
540
// we have to spin wait for the window ticker
553
- ImmediateWindowHandler . updateProgress ("Initializing Game Graphics" );
541
+ updateProgress ("Initializing Game Graphics" );
554
542
while (!this .windowTick .isDone ()) {
555
543
this .windowTick .cancel (false );
556
544
}
@@ -572,7 +560,6 @@ public long setupMinecraftWindow(final IntSupplier width, final IntSupplier heig
572
560
573
561
glfwMakeContextCurrent (window );
574
562
// Set the title to what the game wants
575
- glfwSetWindowTitle (window , title .get ());
576
563
glfwSwapInterval (0 );
577
564
// Clean up our hooks
578
565
glfwSetFramebufferSizeCallback (window , null ).free ();
@@ -584,40 +571,7 @@ public long setupMinecraftWindow(final IntSupplier width, final IntSupplier heig
584
571
}
585
572
586
573
@ Override
587
- public boolean positionWindow (final Optional <Object > monitor , final IntConsumer widthSetter , final IntConsumer heightSetter , final IntConsumer xSetter , final IntConsumer ySetter ) {
588
- widthSetter .accept (this .winWidth );
589
- heightSetter .accept (this .winHeight );
590
- xSetter .accept (this .winX );
591
- ySetter .accept (this .winY );
592
- return true ;
593
- }
594
-
595
- @ Override
596
- public void updateFramebufferSize (final IntConsumer width , final IntConsumer height ) {
597
- width .accept (this .fbWidth );
598
- height .accept (this .fbHeight );
599
- }
600
-
601
- private Method loadingOverlay ;
602
-
603
- @ SuppressWarnings ("unchecked" )
604
- @ Override
605
- public <T > Supplier <T > loadingOverlay (final Supplier <?> mc , final Supplier <?> ri , final Consumer <Optional <Throwable >> ex , final boolean fade ) {
606
- try {
607
- return (Supplier <T >) loadingOverlay .invoke (null , mc , ri , ex , this );
608
- } catch (Throwable e ) {
609
- throw new IllegalStateException ("How did you get here?" , e );
610
- }
611
- }
612
-
613
- @ Override
614
- public void updateModuleReads (final ModuleLayer layer ) {
615
- var fm = layer .findModule ("neoforge" ).orElseThrow ();
616
- getClass ().getModule ().addReads (fm );
617
- var clz = Class .forName (fm , "net.neoforged.neoforge.client.loading.NeoForgeLoadingOverlay" );
618
- var methods = Arrays .stream (clz .getMethods ()).filter (m -> Modifier .isStatic (m .getModifiers ())).collect (Collectors .toMap (Method ::getName , Function .identity ()));
619
- loadingOverlay = methods .get ("newInstance" );
620
- }
574
+ public void updateModuleReads (final ModuleLayer layer ) {}
621
575
622
576
public int getFramebufferTextureId () {
623
577
return framebuffer .getTexture ();
@@ -633,6 +587,16 @@ public void periodicTick() {
633
587
repaintTick .run ();
634
588
}
635
589
590
+ @ Override
591
+ public void updateProgress (String label ) {
592
+ mainProgress .label (label );
593
+ }
594
+
595
+ @ Override
596
+ public void completeProgress () {
597
+ mainProgress .complete ();
598
+ }
599
+
636
600
public void addMojangTexture (final int textureId ) {
637
601
this .elements .add (0 , RenderElement .mojang (textureId , framecount ));
638
602
// this.elements.get(0).retire(framecount + 1);
0 commit comments