瀏覽代碼

render only given data instead of the whole buffer, init texture renderer instantly if wanted

Kajetan Johannes Hammerle 5 年之前
父節點
當前提交
ef6c4ffa3f
共有 1 個文件被更改,包括 27 次插入13 次删除
  1. 27 13
      src/me/hammerle/snuviengine/api/TextureRenderer.java

+ 27 - 13
src/me/hammerle/snuviengine/api/TextureRenderer.java

@@ -17,23 +17,37 @@ public class TextureRenderer
     
     private boolean built = false;
     
-    public TextureRenderer(int triangles)
+    public TextureRenderer(int triangles, boolean initDelayed)
     {
         buffer = BufferUtils.createFloatBuffer(triangles * 12);
-        Shader.addTask(() -> 
+        if(initDelayed)
+        {
+            Shader.addTask(() -> init());
+        }
+        else
         {
-            vao = glGenVertexArrays();
-            vbo = glGenBuffers();
+            init();
+        }
+    }
+    
+    private void init()
+    {   
+        vao = glGenVertexArrays();
+        vbo = glGenBuffers();
 
-            GLHelper.glBindVertexArray(vao);
-            GLHelper.glBindBuffer(vbo);
+        GLHelper.glBindVertexArray(vao);
+        GLHelper.glBindBuffer(vbo);
 
-            glEnableVertexAttribArray(0);
-            glVertexAttribPointer(0, 2, GL_FLOAT, false, 16, 0);
+        glEnableVertexAttribArray(0);
+        glVertexAttribPointer(0, 2, GL_FLOAT, false, 16, 0);
 
-            glEnableVertexAttribArray(1);  
-            glVertexAttribPointer(1, 2, GL_FLOAT, false, 16, 8);
-        });
+        glEnableVertexAttribArray(1);  
+        glVertexAttribPointer(1, 2, GL_FLOAT, false, 16, 8);
+    }
+    
+    public TextureRenderer(int triangles)
+    {
+        this(triangles, true);
     }
     
     public void addTriangle(float x1, float y1, float x2, float y2, float x3, float y3, float tx1, float ty1, float tx2, float ty2, float tx3, float ty3)
@@ -111,8 +125,8 @@ public class TextureRenderer
             throw new ShaderException("build must be called before drawing");
         }
         GLHelper.glBindVertexArray(vao);
-        GLHelper.glBindBuffer(vbo);
-        glDrawArrays(GL_TRIANGLES, 0, buffer.limit() / 4);
+        GLHelper.glBindBuffer(vbo);       
+        glDrawArrays(GL_TRIANGLES, 0, triangles * 3);
     }
     
     public void delete()