2626import btw .mixces .animatium .config .AnimatiumConfig ;
2727import btw .mixces .animatium .mixins .accessor .ClientLevelDataAccessor ;
2828import com .mojang .blaze3d .buffers .GpuBuffer ;
29+ import com .mojang .blaze3d .buffers .GpuBufferSlice ;
2930import com .mojang .blaze3d .pipeline .RenderPipeline ;
3031import com .mojang .blaze3d .pipeline .RenderTarget ;
3132import com .mojang .blaze3d .systems .RenderPass ;
@@ -85,14 +86,12 @@ public static void fillRectangle(GuiGraphics context, int x, int y, int width, i
8586 context .fill (x , y , x + width , y + height , color );
8687 }
8788
88- public static void drawBuffer (BufferBuilder builder , RenderTarget renderTarget , RenderPipeline renderPipeline ) {
89- GpuBuffer vertexBuffer ;
90- GpuBuffer indexBuffer ;
91- VertexFormat .IndexType indexType ;
92- int indexCount ;
93- try (MeshData meshData = builder .buildOrThrow ()) {
94- indexCount = meshData .drawState ().indexCount ();
95- vertexBuffer = renderPipeline .getVertexFormat ().uploadImmediateVertexBuffer (meshData .vertexBuffer ());
89+ public static void drawBuffer (RenderPipeline renderPipeline , RenderTarget renderTarget , MeshData meshData , Consumer <RenderPass > renderPassConsumer ) {
90+ GpuBufferSlice dynamicTransforms = DynamicTransformsBuilder .of ().build ();
91+ try {
92+ GpuBuffer vertexBuffer = renderPipeline .getVertexFormat ().uploadImmediateVertexBuffer (meshData .vertexBuffer ());
93+ GpuBuffer indexBuffer ;
94+ VertexFormat .IndexType indexType ;
9695 if (meshData .indexBuffer () == null ) {
9796 RenderSystem .AutoStorageIndexBuffer autoStorageIndexBuffer = RenderSystem .getSequentialBuffer (meshData .drawState ().mode ());
9897 indexBuffer = autoStorageIndexBuffer .getBuffer (meshData .drawState ().indexCount ());
@@ -101,32 +100,45 @@ public static void drawBuffer(BufferBuilder builder, RenderTarget renderTarget,
101100 indexBuffer = renderPipeline .getVertexFormat ().uploadImmediateIndexBuffer (meshData .indexBuffer ());
102101 indexType = meshData .drawState ().indexType ();
103102 }
104- } catch (Exception e ) {
105- vertexBuffer = null ;
106- indexBuffer = null ;
107- indexType = null ;
108- indexCount = 0 ;
109- }
110103
111- if (vertexBuffer == null ) {
112- throw new RuntimeException ("Vertex buffer was null when trying to render buffer." );
113- }
104+ GpuTextureView colorTextureView = RenderSystem .outputColorTextureOverride != null ? RenderSystem .outputColorTextureOverride : renderTarget .getColorTextureView ();
105+ GpuTextureView depthTextureView = renderTarget .useDepth ? (RenderSystem .outputDepthTextureOverride != null ? RenderSystem .outputDepthTextureOverride : renderTarget .getDepthTextureView ()) : null ;
106+ try (RenderPass renderPass = RenderSystem .getDevice ().createCommandEncoder ().createRenderPass (() -> "Immediate draw for " + renderPipeline , colorTextureView , OptionalInt .empty (), depthTextureView , OptionalDouble .empty ())) {
107+ renderPass .setPipeline (renderPipeline );
108+ for (int i = 0 ; i < 12 ; ++i ) {
109+ GpuTextureView textureView = RenderSystem .getShaderTexture (i );
110+ if (textureView != null ) {
111+ renderPass .bindSampler ("Sampler" + i , textureView );
112+ }
113+ }
114114
115- try (RenderPass renderPass = RenderSystem .getDevice ()
116- .createCommandEncoder ()
117- .createRenderPass (() -> "Immediate Rendering" , renderTarget .getColorTextureView (), OptionalInt .empty (), renderTarget .useDepth ? renderTarget .getDepthTextureView () : null , OptionalDouble .empty ())) {
118- renderPass .setPipeline (renderPipeline );
119- renderPass .setVertexBuffer (0 , vertexBuffer );
120- renderPass .setIndexBuffer (indexBuffer , indexType );
121- for (int i = 0 ; i < 12 ; i ++) {
122- GpuTextureView gpuTexture = RenderSystem .getShaderTexture (i );
123- if (gpuTexture != null ) {
124- renderPass .bindSampler ("Sampler" + i , gpuTexture );
115+ renderPass .setUniform ("DynamicTransforms" , dynamicTransforms );
116+ renderPassConsumer .accept (renderPass );
117+ RenderSystem .bindDefaultUniforms (renderPass );
118+ renderPass .setVertexBuffer (0 , vertexBuffer );
119+ renderPass .setIndexBuffer (indexBuffer , indexType );
120+ renderPass .drawIndexed (0 , 0 , meshData .drawState ().indexCount (), 1 );
121+ }
122+ } catch (Throwable var17 ) {
123+ if (meshData != null ) {
124+ try {
125+ meshData .close ();
126+ } catch (Throwable var14 ) {
127+ var17 .addSuppressed (var14 );
125128 }
126129 }
127130
128- renderPass . drawIndexed ( 0 , 0 , indexCount , 1 ) ;
131+ throw var17 ;
129132 }
133+
134+ if (meshData != null ) {
135+ meshData .close ();
136+ }
137+ }
138+
139+ public static void drawBuffer (RenderPipeline renderPipeline , RenderTarget renderTarget , MeshData meshData ) {
140+ drawBuffer (renderPipeline , renderTarget , meshData , (pass ) -> {
141+ });
130142 }
131143
132144 // Sky Stuff
0 commit comments