1
1
package logisticspipes .renderer .newpipe ;
2
2
3
+ import static logisticspipes .LogisticsPipes .enableVBO ;
4
+
3
5
import java .util .HashMap ;
4
6
import java .util .Map ;
5
7
11
13
12
14
import org .lwjgl .opengl .GL11 ;
13
15
16
+ import com .gtnewhorizon .gtnhlib .client .renderer .CapturingTessellator ;
17
+ import com .gtnewhorizon .gtnhlib .client .renderer .TessellatorManager ;
18
+ import com .gtnewhorizon .gtnhlib .client .renderer .vbo .VBOManager ;
19
+ import com .gtnewhorizon .gtnhlib .client .renderer .vbo .VertexBuffer ;
20
+ import com .gtnewhorizon .gtnhlib .client .renderer .vertex .DefaultVertexFormat ;
21
+
22
+ import logisticspipes .LogisticsPipes ;
14
23
import logisticspipes .items .LogisticsFluidContainer ;
15
24
import logisticspipes .proxy .SimpleServiceLocator ;
16
25
import logisticspipes .renderer .CustomBlockRenderer ;
@@ -32,18 +41,18 @@ public void doRenderItem(ItemIdentifierStack itemIdentifierStack, double x, doub
32
41
GL11 .glPushMatrix ();
33
42
34
43
if (renderList == -1 ) {
35
- renderList = GLAllocation .generateDisplayLists (1 );
36
- GL11 .glNewList (renderList , GL11 .GL_COMPILE );
37
- Tessellator tess = Tessellator .instance ;
38
- tess .startDrawingQuads ();
39
- LogisticsNewRenderPipe .innerTransportBox .render (LogisticsNewRenderPipe .innerBoxTexture );
40
- tess .draw ();
41
- GL11 .glEndList ();
44
+ if (enableVBO ) renderList = generateInnerBoxVBO ();
45
+ else renderList = generateInnerBoxDisplayList ();
42
46
}
43
47
44
48
Minecraft .getMinecraft ().getTextureManager ().bindTexture (LogisticsNewPipeItemBoxRenderer .BLOCKS );
45
49
GL11 .glTranslated (x - 0.5 , y - 0.5 , z - 0.5 );
46
- GL11 .glCallList (renderList );
50
+
51
+ if (LogisticsPipes .enableVBO ) {
52
+ VBOManager .get (renderList ).render ();
53
+ } else {
54
+ GL11 .glCallList (renderList );
55
+ }
47
56
48
57
if (itemIdentifierStack != null && itemIdentifierStack .getItem ().item instanceof LogisticsFluidContainer ) {
49
58
FluidStack f = SimpleServiceLocator .logisticsFluidManager .getFluidFromContainer (itemIdentifierStack );
@@ -56,7 +65,12 @@ public void doRenderItem(ItemIdentifierStack itemIdentifierStack, double x, doub
56
65
GL11 .glEnable (GL11 .GL_BLEND );
57
66
GL11 .glBlendFunc (GL11 .GL_SRC_ALPHA , GL11 .GL_ONE_MINUS_SRC_ALPHA );
58
67
59
- GL11 .glCallList (list );
68
+ if (LogisticsPipes .enableVBO ) {
69
+ VBOManager .get (list ).render ();
70
+ } else {
71
+ GL11 .glCallList (list );
72
+ }
73
+
60
74
GL11 .glPopAttrib ();
61
75
}
62
76
}
@@ -73,18 +87,12 @@ private int getRenderListFor(FluidStack fluid) {
73
87
if (array [pos ] != 0 ) {
74
88
return array [pos ];
75
89
}
76
- RenderInfo block = new RenderInfo ( );
90
+ float ratio = pos * 1.0F / ( LogisticsNewPipeItemBoxRenderer . RENDER_SIZE - 1 );
77
91
92
+ RenderInfo block = new RenderInfo ();
78
93
block .baseBlock = fluid .getFluid ().getBlock ();
79
94
block .texture = fluid .getFluid ().getStillIcon ();
80
95
81
- float ratio = pos * 1.0F / (LogisticsNewPipeItemBoxRenderer .RENDER_SIZE - 1 );
82
-
83
- // CENTER HORIZONTAL
84
-
85
- array [pos ] = GLAllocation .generateDisplayLists (1 );
86
- GL11 .glNewList (array [pos ], 4864 /* GL_COMPILE */ );
87
-
88
96
block .minX = 0.32 ;
89
97
block .maxX = 0.68 ;
90
98
@@ -94,9 +102,57 @@ private int getRenderListFor(FluidStack fluid) {
94
102
block .minZ = 0.32 ;
95
103
block .maxZ = 0.68 ;
96
104
105
+ if (enableVBO ) array [pos ] = generateVBO (block );
106
+ else array [pos ] = generateDisplayList (block );
107
+
108
+ return array [pos ];
109
+ }
110
+
111
+ private int generateDisplayList (RenderInfo block ) {
112
+ int id = GLAllocation .generateDisplayLists (1 );
113
+ GL11 .glNewList (id , GL11 .GL_COMPILE );
114
+
97
115
CustomBlockRenderer .INSTANCE .renderBlock (block , Minecraft .getMinecraft ().theWorld , 0 , 0 , 0 , false , true );
98
116
99
117
GL11 .glEndList ();
100
- return array [pos ];
118
+ return id ;
119
+ }
120
+
121
+ private int generateVBO (RenderInfo block ) {
122
+ TessellatorManager .startCapturing ();
123
+
124
+ CustomBlockRenderer .INSTANCE .renderBlock (block , Minecraft .getMinecraft ().theWorld , 0 , 0 , 0 , false , true );
125
+
126
+ VertexBuffer vbo = TessellatorManager .stopCapturingToVBO (DefaultVertexFormat .POSITION_TEXTURE_NORMAL );
127
+ int vboID = VBOManager .generateDisplayLists (1 );
128
+ VBOManager .registerVBO (vboID , vbo );
129
+ return vboID ;
101
130
}
131
+
132
+ private int generateInnerBoxDisplayList () {
133
+ int id = GLAllocation .generateDisplayLists (1 );
134
+ GL11 .glNewList (id , GL11 .GL_COMPILE );
135
+ Tessellator tess = Tessellator .instance ;
136
+ tess .startDrawingQuads ();
137
+
138
+ LogisticsNewRenderPipe .innerTransportBox .render (LogisticsNewRenderPipe .innerBoxTexture );
139
+
140
+ tess .draw ();
141
+ GL11 .glEndList ();
142
+ return id ;
143
+ }
144
+
145
+ private int generateInnerBoxVBO () {
146
+ TessellatorManager .startCapturing ();
147
+ CapturingTessellator tess = (CapturingTessellator ) TessellatorManager .get ();
148
+ tess .startDrawingQuads ();
149
+ LogisticsNewRenderPipe .innerTransportBox .render (LogisticsNewRenderPipe .innerBoxTexture );
150
+ tess .draw ();
151
+
152
+ VertexBuffer vbo = TessellatorManager .stopCapturingToVBO (DefaultVertexFormat .POSITION_TEXTURE_NORMAL );
153
+ int vboID = VBOManager .generateDisplayLists (1 );
154
+ VBOManager .registerVBO (vboID , vbo );
155
+ return vboID ;
156
+ }
157
+
102
158
}
0 commit comments