From c60a1ad4f6aa4904e80280586b440a584b5ff061 Mon Sep 17 00:00:00 2001
From: Normand Briere <nbriere@noware.ca>
Date: Mon, 22 Apr 2019 15:17:45 -0400
Subject: [PATCH] Refactoring phase 2

---
 CameraPane.java |  194 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 194 insertions(+), 0 deletions(-)

diff --git a/CameraPane.java b/CameraPane.java
index 36fbe8d..c4bdcc2 100644
--- a/CameraPane.java
+++ b/CameraPane.java
@@ -192,6 +192,11 @@
     
     /// INTERFACE
     
+    public boolean IsBoxMode()
+    {
+            return BOXMODE;
+    }
+    
     public void ClearDepth()
     {
         GetGL().glClear(GetGL().GL_DEPTH_BUFFER_BIT);
@@ -566,6 +571,195 @@
         }
     }
 
+    /**
+     * <code>draw</code> renders a <code>TriMesh</code> object including
+     * it's normals, colors, textures and vertices.
+     *
+     * @see Renderer#draw(TriMesh)
+     * @param tris
+     *            the mesh to render.
+     */
+    public void DrawParticles(TriMesh geo, Object3D shape, boolean selected, boolean rotate) // TriMesh tris)
+    {
+            CameraPane display = this;
+            
+        float r = display.modelParams0[0];
+        float g = display.modelParams0[1];
+        float b = display.modelParams0[2];
+        float opacity = display.modelParams5[1];        
+        
+        //final GL gl = GLU.getCurrentGL();
+        GL gl = display.GetGL(); // getGL();
+        
+        FloatBuffer vertBuf = geo.vertBuf;
+
+        int v = vertBuf.capacity();
+
+        int count = 0;
+        
+        boolean cf = gl.glIsEnabled(gl.GL_CULL_FACE);
+        gl.glEnable(gl.GL_CULL_FACE);
+   //     gl.glScalef(1.0f/1024,1.0f/1024,1.0f/1024);
+        for (int i=0; i<v/3; i++)
+        {
+            int index3 = i*3;
+            
+            if (geo.sizeBuf.get(index3+1) == 0)
+                continue;
+            
+            count++;
+            
+            int index4 = i*4;
+            
+            float tx = vertBuf.get(index3);
+            float ty = vertBuf.get(index3+1);
+            float tz = vertBuf.get(index3+2);
+            
+        //    if (tx == 0 && ty == 0 && tz == 0)
+        //        continue;
+            
+        gl.glMatrixMode(gl.GL_TEXTURE);
+        gl.glPushMatrix();
+        
+        float[] texmat = geo.texmat;
+        texmat[12] = texmat[13] = texmat[14] = i;
+        
+        gl.glMultMatrixf(texmat, 0);
+        
+            gl.glMatrixMode(gl.GL_MODELVIEW);
+            gl.glPushMatrix();
+            
+            gl.glTranslatef(tx,ty,tz);
+
+            if (rotate)
+                gl.glRotatef(i, 0, 1, 0);
+            
+            float size = geo.sizeBuf.get(index3) / 100;
+            gl.glScalef(size,size,size);
+            
+            float cr = geo.colorBuf.get(index4);
+            float cg = geo.colorBuf.get(index4+1);
+            float cb = geo.colorBuf.get(index4+2);
+            float ca = geo.colorBuf.get(index4+3);
+            
+            display.modelParams0[0] = r * cr;
+            display.modelParams0[1] = g * cg;
+            display.modelParams0[2] = b * cb;
+            
+            display.modelParams5[1] = opacity * ca;
+            
+        gl.glProgramEnvParameter4fvARB(gl.GL_FRAGMENT_PROGRAM_ARB, 0, display.modelParams0, 0);
+        gl.glProgramEnvParameter4fvARB(gl.GL_FRAGMENT_PROGRAM_ARB, 5, display.modelParams5, 0);
+        
+        RandomNode.globalseed = (int)geo.sizeBuf.get(index3+2); // i;
+        RandomNode.globalseed2 = RandomNode.globalseed;
+        
+//            gl.glColor4f(cr,cg,cb,ca);
+   //         gl.glScalef(1024/16,1024/16,1024/16);
+            shape.Draw/*Node*/(display,null,selected,false); // blocked
+   //         gl.glScalef(16.0f/1024,16.0f/1024,16.0f/1024);
+            //gl.glTranslatef(-tx,-ty,-tz);
+            gl.glPopMatrix();
+            
+        gl.glMatrixMode(gl.GL_TEXTURE);
+        gl.glPopMatrix();
+        }
+   //     gl.glScalef(1024,1024,1024);
+        if (!cf)
+            gl.glDisable(gl.GL_CULL_FACE);
+        
+        display.modelParams0[0] = r;
+        display.modelParams0[1] = g;
+        display.modelParams0[2] = b;
+            
+        display.modelParams5[1] = opacity;
+            
+        gl.glProgramEnvParameter4fvARB(gl.GL_FRAGMENT_PROGRAM_ARB, 0, display.modelParams0, 0);
+        gl.glProgramEnvParameter4fvARB(gl.GL_FRAGMENT_PROGRAM_ARB, 5, display.modelParams5, 0);
+        
+        gl.glMatrixMode(gl.GL_MODELVIEW);
+        
+//        System.err.println("total = " + v/3 + "; displayed = " + count);
+        if (true)
+        return;
+        
+////        if (!tris.predraw(this))
+////        {
+////            return;
+////        }
+////        if (Debug.stats)
+////        {
+////            StatCollector.addStat(StatType.STAT_TRIANGLE_COUNT, tris.getTriangleCount());
+////            StatCollector.addStat(StatType.STAT_VERTEX_COUNT, tris.getVertexCount());
+////            StatCollector.addStat(StatType.STAT_GEOM_COUNT, 1);
+////        }
+////
+////        if (tris.getDisplayListID() != -1)
+////        {
+////            renderDisplayList(tris);
+////            return;
+////        }
+////
+////        if (!generatingDisplayList)
+////        {
+////            applyStates(tris.states, tris);
+////        }
+////        if (Debug.stats)
+////        {
+////            StatCollector.startStat(StatType.STAT_RENDER_TIMER);
+////        }
+////        boolean transformed = doTransforms(tris);
+//
+//        int glMode = GL.GL_TRIANGLES;
+//        switch (getMode())
+//        {
+//            case Triangles:
+//                glMode = GL.GL_TRIANGLES;
+//                break;
+//            case Strip:
+//                glMode = GL.GL_TRIANGLE_STRIP;
+//                break;
+//            case Fan:
+//                glMode = GL.GL_TRIANGLE_FAN;
+//                break;
+//        }
+//
+//        if (!predrawGeometry(gl))
+//        {
+//            // make sure only the necessary indices are sent through on old
+//            // cards.
+//            IntBuffer indices = this.getIndexBuffer();
+//            if (indices == null)
+//            {
+//                logger.severe("missing indices on geometry object: " + this.toString());
+//            } else
+//            {
+//                indices.rewind();
+//                indices.limit(this.getMaxIndex());
+//
+//                gl.glDrawElements(glMode, indices.limit(), GL.GL_UNSIGNED_INT, indices); // TODO Check <count> and assumed <type> of GL_UNSIGNED_INT
+//
+//                indices.clear();
+//            }
+//        } else
+//        {
+//            gl.glDrawElements(glMode, this.getIndexBuffer().limit(),
+//                    GL.GL_UNSIGNED_INT, 0);
+//        }
+//
+////        postdrawGeometry(tris);
+////        if (transformed)
+////        {
+////            undoTransforms(tris);
+////        }
+////
+////        if (Debug.stats)
+////        {
+////            StatCollector.endStat(StatType.STAT_RENDER_TIMER);
+////        }
+////        tris.postdraw(this);
+    }
+
     /// INTERFACE
     
     void SetColor(Object3D obj, Vertex p0)

--
Gitblit v1.6.2