Visualisere

Thursday, 31 December 2009 18:31
There are no translations available.

ShaderUtilities

Denne klassen inneholder kode som trengs i forbindelse med "Vår første shader" artikkelen. Språket er Java og bindingen er LWJGL.

import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.nio.ByteBuffer;
import java.nio.IntBuffer;

import org.lwjgl.BufferUtils;
import org.lwjgl.opengl.ARBShaderObjects;
import org.lwjgl.opengl.Util;

public class ShaderUtilities {
 
 public static ByteBuffer getProgramCode(String filename) {
 ClassLoader fileLoader = ShaderUtilities.class.getClassLoader();
 InputStream fileInputStream = fileLoader.getResourceAsStream(filename);
 byte[] shaderCode = null;
 
 try
 {
 if (fileInputStream == null)
 fileInputStream = new FileInputStream(filename);
 DataInputStream dataStream = new DataInputStream(fileInputStream);
 dataStream.readFully(shaderCode = new byte[ fileInputStream.available() ]);
 fileInputStream.close();
 dataStream.close();
 }
 catch (Exception e) {
 System.out.println(e.getMessage());
 }
 ByteBuffer shaderPro = BufferUtils.createByteBuffer(shaderCode.length);
 
 shaderPro.put(shaderCode);
 shaderPro.flip();
 return shaderPro;
 }
 
 public static void printLogInfo(int obj) {
 IntBuffer iVal = BufferUtils.createIntBuffer(1);
 ARBShaderObjects.glGetObjectParameterARB(obj, ARBShaderObjects.GL_OBJECT_INFO_LOG_LENGTH_ARB, iVal);
 
 int length = iVal.get();
 System.out.println("Info log length:"+length);
 if (length > 0) {
 // We have some info we need to output.
 ByteBuffer infoLog = BufferUtils.createByteBuffer(length);
 iVal.flip();
 ARBShaderObjects.glGetInfoLogARB(obj,  iVal, infoLog);
 byte[] infoBytes = new byte[length];
 infoLog.get(infoBytes);
 String out = new String(infoBytes);
 
 System.out.println("Info log:\n"+out);
 }
 Util.checkGLError();
 }
 
 public static ByteBuffer toByteString(String str, boolean isNullTerminated) {
 int length = str.length();
 if (isNullTerminated) {
 length++;
 }
 ByteBuffer buff = BufferUtils.createByteBuffer(length);
 buff.put( str.getBytes() );
 
 if (isNullTerminated) {
 buff.put( (byte)0 );
 }
 buff.flip();
 return buff;
 }
}//End of class ShaderUtilities

Last Updated on Sunday, 18 July 2010 22:50
 

Visualisere