Login  Register

Re: Possible to use vertex shader without vbo?

Posted by sirus20x6 on Sep 09, 2015; 8:48pm
URL: https://forum.jogamp.org/Possible-to-use-vertex-shader-without-vbo-tp4034532p4035259.html

If I limit how many vertices I draw it works (after a larger than expected delay of several seconds)

note x here is only 50 and I really have 678 elements

<code>
    private void drawTerrain()
    {
        float [] v1 = new float[3];
        float [] v2 = new float[3];
        float [] norm = new float[3];


        v1[0] = 30.0f / 5.0f;  // Scale factor is a hack
        v1[1] = 0.0f;

        v2[0] = 0.0f;
        v2[1] = 30.0f / 5.0f;  // Ditto on hack
       
        gl.glEnable(GLLightingFunc.GL_COLOR_MATERIAL);
        gl.glColorMaterial(GL.GL_FRONT_AND_BACK,
                GLLightingFunc.GL_AMBIENT_AND_DIFFUSE);

        immModeSink.glBegin(GL.GL_TRIANGLE_STRIP);



        for(int x = 1; x < 50; x++) {

            for(int y = 1; y < latticeSizeY; y++)
            {
                v1[2] = Model.topo1dim[x+1 + y * latticeSizeX] - Model.topo1dim[x-1 + y * latticeSizeX];
                v2[2] = Model.topo1dim[x + (y+1) * latticeSizeX] - Model.topo1dim[x + (y-1) * latticeSizeX];
                cross(norm, v2, v1);
                immModeSink.glNormal3f(norm[0],norm[1],norm[2]);
                immModeSink.glColor3f(Model.vert_color2[x + y * Model.lattice_size_x].x, Model.vert_color2[(x + y * Model.lattice_size_x)].y, Model.vert_color2[(x + y * Model.lattice_size_x)].z);
                immModeSink.glVertex3f(x, y, Model.topo1dim[x + y * latticeSizeX]);

                x++;

                v1[2] = Model.topo1dim[x+1 + y * latticeSizeX] - Model.topo1dim[x-1 + y * latticeSizeX];
                v2[2] = Model.topo1dim[x + (y+1) * latticeSizeX] - Model.topo1dim[x + (y-1) * latticeSizeX];
                cross(norm, v2, v1);
                immModeSink.glNormal3f(norm[0],norm[1],norm[2]);
                immModeSink.glColor3f(Model.vert_color2[x + y * Model.lattice_size_x].x, Model.vert_color2[(x + y * Model.lattice_size_x)].y, Model.vert_color2[(x + y * Model.lattice_size_x)].z);
                immModeSink.glVertex3f(x, y, Model.topo1dim[x + y * latticeSizeX]);
                x--;
            }

            //degenerate triangles

            //eff
            immModeSink.glNormal3f(0f,0f,0f);
            immModeSink.glColor3f(0f, 0f, 0f);
            immModeSink.glVertex3f(x, latticeSizeY, Model.topo1dim[x + latticeSizeY * latticeSizeX]);
            immModeSink.glNormal3f(0f, 0f, 0f);
            immModeSink.glColor3f(0f, 0f, 0f);
            immModeSink.glVertex3f(x + 1, latticeSizeY, Model.topo1dim[(x + 1) + latticeSizeY * latticeSizeX]);
            immModeSink.glNormal3f(0f, 0f, 0f);
            immModeSink.glColor3f(0f, 0f, 0f);
            immModeSink.glVertex3f(x + 1, latticeSizeY, Model.topo1dim[(x + 1) + latticeSizeY * latticeSizeX]);

            //FFG
            immModeSink.glNormal3f(0f, 0f, 0f);
            immModeSink.glColor3f(0f, 0f, 0f);
            immModeSink.glVertex3f(x + 1, latticeSizeY, Model.topo1dim[(x + 1) + latticeSizeY * latticeSizeX]);
            immModeSink.glNormal3f(0f, 0f, 0f);
            immModeSink.glColor3f(0f, 0f, 0f);
            immModeSink.glVertex3f(x + 1, latticeSizeY, Model.topo1dim[(x + 1) + latticeSizeY * latticeSizeX]);
            immModeSink.glNormal3f(0f, 0f, 0f);
            immModeSink.glColor3f(0f, 0f, 0f);
            immModeSink.glVertex3f(x, 1, Model.topo1dim[x + latticeSizeX]);

            //FGG
            immModeSink.glNormal3f(0f, 0f, 0f);
            immModeSink.glColor3f(0f, 0f, 0f);
            immModeSink.glVertex3f(x + 1, latticeSizeY, Model.topo1dim[(x + 1) + latticeSizeY * latticeSizeX]);
            immModeSink.glNormal3f(0f, 0f, 0f);
            immModeSink.glColor3f(0f, 0f, 0f);
            immModeSink.glVertex3f(x, 1, Model.topo1dim[x + latticeSizeX]);
            immModeSink.glNormal3f(0f, 0f, 0f);
            immModeSink.glColor3f(0f, 0f, 0f);
            immModeSink.glVertex3f(x, 1, Model.topo1dim[x + latticeSizeX]);

            //GGH
            immModeSink.glNormal3f(0f, 0f, 0f);
            immModeSink.glColor3f(0f, 0f, 0f);
            immModeSink.glVertex3f(x, 1, Model.topo1dim[x + latticeSizeX]);
            immModeSink.glNormal3f(0f, 0f, 0f);
            immModeSink.glColor3f(0f, 0f, 0f);
            immModeSink.glVertex3f(x, 1, Model.topo1dim[x + latticeSizeX]);
            immModeSink.glNormal3f(0f, 0f, 0f);
            immModeSink.glColor3f(0f, 0f, 0f);
            immModeSink.glVertex3f(x + 1, 1, Model.topo1dim[(x + 1) + latticeSizeX]);

            //GHG
            immModeSink.glNormal3f(0f, 0f, 0f);
            immModeSink.glColor3f(0f, 0f, 0f);
            immModeSink.glVertex3f(x, 1, Model.topo1dim[x + latticeSizeX]);
            immModeSink.glNormal3f(0f, 0f, 0f);
            immModeSink.glColor3f(0f, 0f, 0f);
            immModeSink.glVertex3f(x + 1, 1, Model.topo1dim[(x + 1) + latticeSizeX]);
            immModeSink.glNormal3f(0f, 0f, 0f);
            immModeSink.glColor3f(0f, 0f, 0f);
            immModeSink.glVertex3f(x, 1, Model.topo1dim[x + latticeSizeX]);

            //GGH
            immModeSink.glNormal3f(0f, 0f, 0f);
            immModeSink.glColor3f(0f, 0f, 0f);
            immModeSink.glVertex3f(x, 1, Model.topo1dim[x + latticeSizeX]);
            immModeSink.glNormal3f(0f, 0f, 0f);
            immModeSink.glColor3f(0f, 0f, 0f);
            immModeSink.glVertex3f(x, 1, Model.topo1dim[x + latticeSizeX]);
            immModeSink.glNormal3f(0f,0f,0f);
            immModeSink.glColor3f(0f,0f,0f);
            immModeSink.glVertex3f(x + 1, 1, Model.topo1dim[(x + 1) + latticeSizeX]);
        }

        immModeSink.glEnd(gl);


    }
</code>





Thats a small strip of the terrain now working correctly.
If I increase x to say 150 or over then it never loads and I have to issue a kill signal to terminate it.


full code here https://github.com/sirus20x6/Wilsim-GC/blob/HR/src/View.java