Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package org.destr.jogl.mesh;
- import java.io.DataInputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import javax.media.opengl.GL2;
- public class MeshReader extends DataInputStream {
- public static int glTypeToSize(int glType) {
- switch(glType) {
- case GL2.GL_BYTE: return 1;
- case GL2.GL_SHORT: return 2;
- case GL2.GL_INT: return 4;
- case GL2.GL_DOUBLE: return 8;
- case GL2.GL_FLOAT: return 4;
- default: return -1;
- }
- }
- public MeshReader(InputStream is) {
- super(is);
- }
- public BufferedMeshData readMesh() throws IOException {
- BufferedMeshData mesh = new BufferedMeshData();
- String version = readUTF();
- if(!version.equals("JMESH1.0")) {
- throw new IOException(String.format(
- "Invalis header \"%s\"", version
- ));
- }
- String format = readUTF().toUpperCase();
- if(format.equals("VNC")) {
- mesh.count = readInt();
- mesh.vGLType = readInt();
- mesh.vSize = readInt();
- mesh.vStride = readInt();
- mesh.vOffset = readLong();
- mesh.nUsed = true;
- mesh.nGLType = readInt();
- mesh.nStride = readInt();
- mesh.nOffset = readLong();
- mesh.tUsed = true;
- mesh.tGLType = readInt();
- mesh.tSize = readInt();
- mesh.tStride = readInt();
- mesh.tOffset = readLong();
- int vBytes = mesh.vSize * glTypeToSize(mesh.vGLType);
- if(vBytes < 0) {
- throw new IOException(String.format(
- "Can not read vertex glType %d", mesh.vGLType
- ));
- }
- int nBytes = 3 * glTypeToSize(mesh.nGLType);
- if(nBytes < 0) {
- throw new IOException(String.format(
- "Can not read normal glType %d", mesh.nGLType
- ));
- }
- int tBytes = mesh.tSize * glTypeToSize(mesh.tGLType);
- if(tBytes < 0) {
- throw new IOException(String.format(
- "Can not read texture coord glType %d", mesh.tGLType
- ));
- }
- mesh.data = new byte[mesh.count * (vBytes + nBytes + tBytes)];
- read(mesh.data);
- } else {
- throw new IOException(String.format(
- "Invalid format \"%s\"", format
- ));
- }
- return mesh;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment