Package org.mt4j.util.math

Source Code of org.mt4j.util.math.ToolsVBO

/***********************************************************************
* mt4j Copyright (c) 2008 - 2009 C.Ruff, Fraunhofer-Gesellschaft All rights reserved.
*   This program is free software: you can redistribute it and/or modify
*   it under the terms of the GNU General Public License as published by
*   the Free Software Foundation, either version 3 of the License, or
*   (at your option) any later version.
*
*   This program is distributed in the hope that it will be useful,
*   but WITHOUT ANY WARRANTY; without even the implied warranty of
*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*   GNU General Public License for more details.
*
*   You should have received a copy of the GNU General Public License
*   along with this program.  If not, see <http://www.gnu.org/licenses/>.
*
***********************************************************************/
package org.mt4j.util.math;

import java.nio.FloatBuffer;

import javax.media.opengl.GL;

import processing.core.PApplet;
import processing.opengl.PGraphicsOpenGL;

import com.sun.opengl.util.BufferUtil;

/**
* Methods to build VBOs and get their binding names  (Ids).
*
* @author Christopher Ruff
*/
public class ToolsVBO {
 
  //TODO some methods are redundant
  //for floatbuffer vbo updates with vectors (3lements) can be updated the same way i.e.
 
  //////////////////////////////////////////////////////////////
  //   Methods to build VBOs and get their binding names    //
  //////////////////////////////////////////////////////////////
  /**
   * Generate vertex vbo.
   *
   * @param pa the pa
   * @param vertexBuffer the vertex buffer
   * @param vertexCount the vertex count
   *
   * @return the int
   */
  public static int generateVertexVBO(PApplet pa, FloatBuffer vertexBuffer, int vertexCount){
    int[] vboVertices = new int[1];
    GL gl =((PGraphicsOpenGL)pa.g).gl;
      gl.glGenBuffers(1, vboVertices, 0)// Get A Valid Name
      gl.glBindBuffer(GL.GL_ARRAY_BUFFER, vboVertices[0])// Bind The Buffer
      // Load The Data
      gl.glBufferData(GL.GL_ARRAY_BUFFER, vertexCount * 3 * BufferUtil.SIZEOF_FLOAT, vertexBuffer, GL.GL_STATIC_DRAW);
      //Unbind VBOs
      gl.glBindBuffer(GL.GL_ARRAY_BUFFER, 0);
      gl.glBindBuffer(GL.GL_ELEMENT_ARRAY_BUFFER, 0);
    return vboVertices[0];
  }
 
  /**
   * Update vertex vbo.
   *
   * @param pa the pa
   * @param vertexBuffer the vertex buffer
   * @param vertexCount the vertex count
   * @param vboName the vbo name
   */
  public static void updateVertexVBO(PApplet pa, FloatBuffer vertexBuffer, int vertexCount, int vboName){
    GL gl =((PGraphicsOpenGL)pa.g).gl;
    gl.glBindBuffer(GL.GL_ARRAY_BUFFER, vboName)// Bind The Buffer
    // Load The Data
    gl.glBufferData(GL.GL_ARRAY_BUFFER, vertexCount * 3 * BufferUtil.SIZEOF_FLOAT, vertexBuffer, GL.GL_STATIC_DRAW);
    //Unbind VBOs
    gl.glBindBuffer(GL.GL_ARRAY_BUFFER, 0);
    gl.glBindBuffer(GL.GL_ELEMENT_ARRAY_BUFFER, 0);
  }
 
  /**
   * Generate texture vbo.
   *
   * @param pa the pa
   * @param textureBuffer the texture buffer
   * @param vertexCount the vertex count
   *
   * @return the int
   */
  public static int generateTextureVBO(PApplet pa, FloatBuffer textureBuffer, int vertexCount){
    int[] vboTexCoords = new int[1];// Texture Coordinate VBO Name
    GL gl =((PGraphicsOpenGL)pa.g).gl;
      gl.glGenBuffers(1, vboTexCoords, 0)// Get A Valid Name
      gl.glBindBuffer(GL.GL_ARRAY_BUFFER, vboTexCoords[0]); // Bind The Buffer
      // Load The Data
      gl.glBufferData(GL.GL_ARRAY_BUFFER, vertexCount * 2 * BufferUtil.SIZEOF_FLOAT, textureBuffer, GL.GL_STATIC_DRAW);
      //Unbind VBOs
      gl.glBindBuffer(GL.GL_ARRAY_BUFFER, 0);
      gl.glBindBuffer(GL.GL_ELEMENT_ARRAY_BUFFER, 0);
    return vboTexCoords[0];
  }
 
  /**
   * Update texture vbo.
   *
   * @param pa the pa
   * @param textureBuffer the texture buffer
   * @param vertexCount the vertex count
   * @param vboName the vbo name
   */
  public static void updateTextureVBO(PApplet pa, FloatBuffer textureBuffer, int vertexCount, int vboName){
    GL gl =((PGraphicsOpenGL)pa.g).gl;
      gl.glBindBuffer(GL.GL_ARRAY_BUFFER, vboName); // Bind The Buffer
      // Load The Data
      gl.glBufferData(GL.GL_ARRAY_BUFFER, vertexCount * 2 * BufferUtil.SIZEOF_FLOAT, textureBuffer, GL.GL_STATIC_DRAW);
      //Unbind VBOs
      gl.glBindBuffer(GL.GL_ARRAY_BUFFER, 0);
      gl.glBindBuffer(GL.GL_ELEMENT_ARRAY_BUFFER, 0);
  }
 
  /**
   * Generate color vbo.
   *
   * @param pa the pa
   * @param colorBuffer the color buffer
   * @param vertexCount the vertex count
   *
   * @return the int
   */
  public static int generateColorVBO(PApplet pa, FloatBuffer colorBuffer, int vertexCount){
    int[] vboColor = new int[1];// vertexcolor Coordinate VBO Name
    GL gl =((PGraphicsOpenGL)pa.g).gl;
      gl.glGenBuffers(1, vboColor, 0)// Get A Valid Name
      gl.glBindBuffer(GL.GL_ARRAY_BUFFER, vboColor[0]); // Bind The Buffer
      // Load The Data
      gl.glBufferData(GL.GL_ARRAY_BUFFER, vertexCount * 4 * BufferUtil.SIZEOF_FLOAT, colorBuffer, GL.GL_STATIC_DRAW);
      //Unbind VBOs
      gl.glBindBuffer(GL.GL_ARRAY_BUFFER, 0);
      gl.glBindBuffer(GL.GL_ELEMENT_ARRAY_BUFFER, 0);
    return vboColor[0];
  }
 
  /**
   * Update color vbo.
   *
   * @param pa the pa
   * @param colorBuffer the color buffer
   * @param vertexCount the vertex count
   * @param vboName the vbo name
   */
  public static void updateColorVBO(PApplet pa, FloatBuffer colorBuffer, int vertexCount, int vboName){
    GL gl =((PGraphicsOpenGL)pa.g).gl;
      gl.glBindBuffer(GL.GL_ARRAY_BUFFER, vboName); // Bind The Buffer
      // Load The Data
      gl.glBufferData(GL.GL_ARRAY_BUFFER, vertexCount * 4 * BufferUtil.SIZEOF_FLOAT, colorBuffer, GL.GL_STATIC_DRAW);
      //Unbind VBOs
      gl.glBindBuffer(GL.GL_ARRAY_BUFFER, 0);
      gl.glBindBuffer(GL.GL_ELEMENT_ARRAY_BUFFER, 0);
  }
 
  /**
   * Generate stroke color vbo.
   *
   * @param pa the pa
   * @param strokeColBuffer the stroke col buffer
   * @param vertexCount the vertex count
   *
   * @return the int
   */
  public static int generateStrokeColorVBO(PApplet pa, FloatBuffer strokeColBuffer, int vertexCount){
    int[] vboStrokeColor = new int[1];// stroke Coordinate VBO Name
    GL gl =((PGraphicsOpenGL)pa.g).gl;
      gl.glGenBuffers(1, vboStrokeColor, 0)// Get A Valid Name
      gl.glBindBuffer(GL.GL_ARRAY_BUFFER, vboStrokeColor[0]); // Bind The Buffer
      // Load The Data
      gl.glBufferData(GL.GL_ARRAY_BUFFER,vertexCount * 4 * BufferUtil.SIZEOF_FLOAT, strokeColBuffer, GL.GL_STATIC_DRAW);
      //Unbind VBOs
      gl.glBindBuffer(GL.GL_ARRAY_BUFFER, 0);
      gl.glBindBuffer(GL.GL_ELEMENT_ARRAY_BUFFER, 0);
    return vboStrokeColor[0];
  }
 
  /**
   * Update stroke color vbo.
   *
   * @param pa the pa
   * @param strokeColBuffer the stroke col buffer
   * @param vertexCount the vertex count
   * @param vboName the vbo name
   */
  public static void updateStrokeColorVBO(PApplet pa, FloatBuffer strokeColBuffer, int vertexCount, int vboName){
    GL gl =((PGraphicsOpenGL)pa.g).gl;
      gl.glBindBuffer(GL.GL_ARRAY_BUFFER, vboName); // Bind The Buffer
      // Load The Data
      gl.glBufferData(GL.GL_ARRAY_BUFFER,vertexCount * 4 * BufferUtil.SIZEOF_FLOAT, strokeColBuffer, GL.GL_STATIC_DRAW);
      //Unbind VBOs
      gl.glBindBuffer(GL.GL_ARRAY_BUFFER, 0);
      gl.glBindBuffer(GL.GL_ELEMENT_ARRAY_BUFFER, 0);
  }
 
 
  /**
   * Generate normals vbo.
   *
   * @param pa the pa
   * @param normalsBuffer the normals buffer
   * @param normalsCount the normals count
   *
   * @return the int
   */
  public static int generateNormalsVBO(PApplet pa, FloatBuffer normalsBuffer, int normalsCount){
    int[] vboNormals = new int[1];
    GL gl =((PGraphicsOpenGL)pa.g).gl;
      gl.glGenBuffers(1, vboNormals, 0)// Get A Valid Name
      gl.glBindBuffer(GL.GL_ARRAY_BUFFER, vboNormals[0])// Bind The Buffer
      // Load The Data
      gl.glBufferData(GL.GL_ARRAY_BUFFER, normalsCount * 3 * BufferUtil.SIZEOF_FLOAT, normalsBuffer, GL.GL_STATIC_DRAW);
      //Unbind VBOs
      gl.glBindBuffer(GL.GL_ARRAY_BUFFER, 0);
      gl.glBindBuffer(GL.GL_ELEMENT_ARRAY_BUFFER, 0);
    return vboNormals[0];
  }
 
 
  /**
   * Update normals vbo.
   *
   * @param pa the pa
   * @param normalsBuffer the normals buffer
   * @param normalsCount the normals count
   * @param vboName the vbo name
   */
  public static void updateNormalsVBO(PApplet pa, FloatBuffer normalsBuffer, int normalsCount, int vboName){
    GL gl =((PGraphicsOpenGL)pa.g).gl;
    gl.glBindBuffer(GL.GL_ARRAY_BUFFER, vboName)// Bind The Buffer
    // Load The Data
    gl.glBufferData(GL.GL_ARRAY_BUFFER, normalsCount * 3 * BufferUtil.SIZEOF_FLOAT, normalsBuffer, GL.GL_STATIC_DRAW);
    //Unbind VBOs
    gl.glBindBuffer(GL.GL_ARRAY_BUFFER, 0);
    gl.glBindBuffer(GL.GL_ELEMENT_ARRAY_BUFFER, 0);
  }

}
TOP

Related Classes of org.mt4j.util.math.ToolsVBO

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.