@@ -31,6 +31,10 @@ public class VBO {
3131
3232 private boolean autoIndexed = false ;
3333
34+ // Sky rendering diagnostics — log first N VBO draws per frame
35+ private static int skyLogCount = 0 ;
36+ private static final int SKY_LOG_MAX = 30 ; // total draws to log across all frames
37+
3438 public VBO () {}
3539
3640 public void upload (MeshData meshData ) {
@@ -122,6 +126,28 @@ public void drawWithShader(Matrix4f MV, Matrix4f P, ShaderInstance shader) {
122126 ((ShaderMixed ) shader ).updateUniformsOnly ();
123127
124128 GraphicsPipeline pipeline = ((ShaderMixed ) shader ).getPipeline ();
129+
130+ // Diagnostic: log VBO draws to track sky rendering
131+ if (skyLogCount < SKY_LOG_MAX ) {
132+ skyLogCount ++;
133+ String shaderClass = shader .getClass ().getSimpleName ();
134+ String shaderName = "?" ;
135+ try { shaderName = shader .getName (); } catch (Exception ignored ) {}
136+ boolean pipelineNull = (pipeline == null );
137+ Renderer r = Renderer .getInstance ();
138+ boolean renderPassNull = (r .getBoundRenderPass () == null );
139+ // MV matrix: col0.x, col1.y indicate camera rotation (should NOT be 1,1 for rotated camera)
140+ float mv00 = MV .m00 (), mv11 = MV .m11 (), mv01 = MV .m01 (), mv10 = MV .m10 ();
141+ org .slf4j .LoggerFactory .getLogger ("VBO" ).info (
142+ "[VBO_DRAW] #{} shader={} class={} pipeline={} renderPass={} idxCnt={} MV[00={} 11={} 01={} 10={}]" ,
143+ skyLogCount , shaderName , shaderClass ,
144+ pipelineNull ? "NULL" : "OK" ,
145+ renderPassNull ? "NULL" : "OK" ,
146+ this .indexCount ,
147+ String .format ("%.3f" , mv00 ), String .format ("%.3f" , mv11 ),
148+ String .format ("%.3f" , mv01 ), String .format ("%.3f" , mv10 ));
149+ }
150+
125151 if (pipeline == null ) {
126152 RenderSystem .getModelViewMatrix ().set (savedMV );
127153 return ;
@@ -138,7 +164,13 @@ public void drawWithShader(Matrix4f MV, Matrix4f P, GraphicsPipeline pipeline) {
138164 RenderSystem .assertOnRenderThread ();
139165
140166 Renderer renderer = Renderer .getInstance ();
141- if (renderer .getBoundRenderPass () == null ) return ;
167+ if (renderer .getBoundRenderPass () == null ) {
168+ if (skyLogCount <= SKY_LOG_MAX ) {
169+ org .slf4j .LoggerFactory .getLogger ("VBO" ).warn (
170+ "[VBO_DRAW] SKIPPED draw (no render pass) pipeline={}" , pipeline );
171+ }
172+ return ;
173+ }
142174
143175 VRenderSystem .applyMVP (MV , P );
144176
0 commit comments