Added support for single primitive input/output parameters.

This commit is contained in:
Ioannis Tsakpinis 2010-03-14 23:24:40 +00:00
parent e97e601894
commit 94a4c50a83
63 changed files with 1309 additions and 444 deletions

View file

@ -31,17 +31,13 @@
*/
package org.lwjgl.test.opengl;
import org.lwjgl.BufferUtils;
import org.lwjgl.LWJGLException;
import org.lwjgl.Sys;
import org.lwjgl.opengl.*;
import java.nio.IntBuffer;
import java.util.Random;
/**
* @author spasi <spasi@users.sourceforge.net>
*/
/** @author spasi <spasi@users.sourceforge.net> */
public final class SyncTest {
private SyncTest() {
@ -131,9 +127,7 @@ public final class SyncTest {
System.out.println("Unexpected wait status: 0x" + Integer.toHexString(status));
}
IntBuffer property = BufferUtils.createIntBuffer(1);
GL32.glGetSync(sync, GL32.GL_SYNC_STATUS, null, property);
System.out.println("Sync Status: " + (property.get(0) == GL32.GL_UNSIGNALED ? "UNSIGNALED" : "SIGNALED"));
System.out.println("Sync Status: " + (GL32.glGetSync(sync, GL32.GL_SYNC_STATUS) == GL32.GL_UNSIGNALED ? "UNSIGNALED" : "SIGNALED"));
GL32.glDeleteSync(sync);

View file

@ -44,7 +44,6 @@ package org.lwjgl.test.opengl;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import java.nio.IntBuffer;
import org.lwjgl.Sys;
import org.lwjgl.input.Keyboard;
@ -191,9 +190,7 @@ public final class VBOTest {
System.out.println("ARB VBO not supported!");
System.exit(1);
}
IntBuffer int_buffer = ByteBuffer.allocateDirect(4).order(ByteOrder.nativeOrder()).asIntBuffer();
ARBBufferObject.glGenBuffersARB(int_buffer);
buffer_id = int_buffer.get(0);
buffer_id = ARBBufferObject.glGenBuffersARB();
ARBBufferObject.glBindBufferARB(ARBVertexBufferObject.GL_ARRAY_BUFFER_ARB, buffer_id);
vertices = ByteBuffer.allocateDirect(2 * 4 * 4).order(ByteOrder.nativeOrder()).asFloatBuffer();
vertices.put(-50).put(-50).put(50).put(-50).put(50).put(50).put(-50).put(50);
@ -206,9 +203,7 @@ public final class VBOTest {
* Cleanup
*/
private static void cleanup() {
IntBuffer int_buffer = ByteBuffer.allocateDirect(4).order(ByteOrder.nativeOrder()).asIntBuffer();
int_buffer.put(0, buffer_id);
ARBBufferObject.glDeleteBuffersARB(int_buffer);
ARBBufferObject.glDeleteBuffersARB(buffer_id);
Display.destroy();
}
}

View file

@ -37,21 +37,18 @@
*/
package org.lwjgl.test.opengl.shaders;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.ByteBuffer;
import java.nio.IntBuffer;
import org.lwjgl.BufferUtils;
import org.lwjgl.opengl.ARBProgram;
import org.lwjgl.opengl.ARBShaderObjects;
import org.lwjgl.opengl.GL11;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.ByteBuffer;
abstract class Shader {
private static final IntBuffer int_buffer = BufferUtils.createIntBuffer(16);
protected static IntBuffer programBuffer = BufferUtils.createIntBuffer(1);
protected static ByteBuffer fileBuffer = BufferUtils.createByteBuffer(1024 * 10);
protected Shader() {
@ -61,18 +58,6 @@ abstract class Shader {
abstract void cleanup();
/**
* Obtain a GL integer value from the driver
*
* @param gl_enum The GL value you want
*
* @return the integer value
*/
public static int glGetInteger(int gl_enum) {
GL11.glGetInteger(gl_enum, int_buffer);
return int_buffer.get(0);
}
protected static String getShaderText(String file) {
String shader = null;
@ -107,7 +92,7 @@ abstract class Shader {
protected static void checkProgramError(String programFile, String programSource) {
if ( GL11.glGetError() == GL11.GL_INVALID_OPERATION ) {
final int errorPos = glGetInteger(ARBProgram.GL_PROGRAM_ERROR_POSITION_ARB);
final int errorPos = GL11.glGetInteger(ARBProgram.GL_PROGRAM_ERROR_POSITION_ARB);
int lineStart = 0;
int lineEnd = -1;
for ( int i = 0; i < programSource.length(); i++ ) {
@ -140,9 +125,7 @@ abstract class Shader {
}
protected static void printShaderObjectInfoLog(String file, int ID) {
ARBShaderObjects.glGetObjectParameterARB(ID, ARBShaderObjects.GL_OBJECT_INFO_LOG_LENGTH_ARB, programBuffer);
final int logLength = programBuffer.get(0);
final int logLength = ARBShaderObjects.glGetObjectParameteriARB(ID, ARBShaderObjects.GL_OBJECT_INFO_LOG_LENGTH_ARB);
if ( logLength <= 1 )
return;
@ -153,9 +136,7 @@ abstract class Shader {
}
protected static void printShaderProgramInfoLog(int ID) {
ARBShaderObjects.glGetObjectParameterARB(ID, ARBShaderObjects.GL_OBJECT_INFO_LOG_LENGTH_ARB, programBuffer);
final int logLength = programBuffer.get(0);
final int logLength = ARBShaderObjects.glGetObjectParameteriARB(ID, ARBShaderObjects.GL_OBJECT_INFO_LOG_LENGTH_ARB);
if ( logLength <= 1 )
return;

View file

@ -60,9 +60,7 @@ final class ShaderFP extends Shader {
vpFile = vpShaderFile;
vpSource = getShaderText(vpShaderFile);
ARBProgram.glGenProgramsARB(programBuffer);
vpID = programBuffer.get(0);
vpID = ARBProgram.glGenProgramsARB();
ARBProgram.glBindProgramARB(ARBVertexProgram.GL_VERTEX_PROGRAM_ARB, vpID);
ARBProgram.glProgramStringARB(ARBVertexProgram.GL_VERTEX_PROGRAM_ARB, ARBProgram.GL_PROGRAM_FORMAT_ASCII_ARB, vpSource);
@ -73,9 +71,7 @@ final class ShaderFP extends Shader {
fpFile = fpShaderFile;
fpSource = getShaderText(fpShaderFile);
ARBProgram.glGenProgramsARB(programBuffer);
fpID = programBuffer.get(0);
fpID = ARBProgram.glGenProgramsARB();
ARBProgram.glBindProgramARB(ARBFragmentProgram.GL_FRAGMENT_PROGRAM_ARB, fpID);
ARBProgram.glProgramStringARB(ARBFragmentProgram.GL_FRAGMENT_PROGRAM_ARB, ARBProgram.GL_PROGRAM_FORMAT_ASCII_ARB, fpSource);
@ -104,11 +100,8 @@ final class ShaderFP extends Shader {
}
void cleanup() {
programBuffer.put(0, vpID);
ARBProgram.glDeleteProgramsARB(programBuffer);
programBuffer.put(0, fpID);
ARBProgram.glDeleteProgramsARB(programBuffer);
ARBProgram.glDeleteProgramsARB(vpID);
ARBProgram.glDeleteProgramsARB(fpID);
}
}

View file

@ -70,8 +70,7 @@ final class ShaderFSH extends Shader {
printShaderObjectInfoLog(this.vshFile, vshID);
ARBShaderObjects.glGetObjectParameterARB(vshID, ARBShaderObjects.GL_OBJECT_COMPILE_STATUS_ARB, programBuffer);
if ( programBuffer.get(0) == GL11.GL_FALSE )
if ( ARBShaderObjects.glGetObjectParameteriARB(vshID, ARBShaderObjects.GL_OBJECT_COMPILE_STATUS_ARB) == GL11.GL_FALSE )
ShadersTest.kill("A compilation error occured in a vertex shader.");
// Initialize the fragment shader.
@ -84,8 +83,7 @@ final class ShaderFSH extends Shader {
printShaderObjectInfoLog(this.fshFile, fshID);
ARBShaderObjects.glGetObjectParameterARB(fshID, ARBShaderObjects.GL_OBJECT_COMPILE_STATUS_ARB, programBuffer);
if ( programBuffer.get(0) == GL11.GL_FALSE )
if ( ARBShaderObjects.glGetObjectParameteriARB(fshID, ARBShaderObjects.GL_OBJECT_COMPILE_STATUS_ARB) == GL11.GL_FALSE )
ShadersTest.kill("A compilation error occured in a fragment shader.");
// Initialize the shader program.
@ -98,8 +96,7 @@ final class ShaderFSH extends Shader {
printShaderProgramInfoLog(programID);
ARBShaderObjects.glGetObjectParameterARB(programID, ARBShaderObjects.GL_OBJECT_LINK_STATUS_ARB, programBuffer);
if ( programBuffer.get(0) == GL11.GL_FALSE )
if ( ARBShaderObjects.glGetObjectParameteriARB(programID, ARBShaderObjects.GL_OBJECT_LINK_STATUS_ARB) == GL11.GL_FALSE )
ShadersTest.kill("A linking error occured in a shader program.");
uniformLocation = getUniformLocation(programID, "UNIFORMS");

View file

@ -70,8 +70,7 @@ final class ShaderUNI extends Shader {
printShaderObjectInfoLog(file, shaderID);
GL20.glGetShader(shaderID, GL20.GL_COMPILE_STATUS, programBuffer);
if ( programBuffer.get(0) == GL11.GL_FALSE )
if ( GL20.glGetShader(shaderID, GL20.GL_COMPILE_STATUS) == GL11.GL_FALSE )
ShadersTest.kill("A compilation error occured in a vertex shader.");
programID = GL20.glCreateProgram();
@ -81,27 +80,19 @@ final class ShaderUNI extends Shader {
printShaderProgramInfoLog(programID);
GL20.glGetProgram(programID, GL20.GL_LINK_STATUS, programBuffer);
if ( programBuffer.get(0) == GL11.GL_FALSE )
if ( GL20.glGetProgram(programID, GL20.GL_LINK_STATUS) == GL11.GL_FALSE )
ShadersTest.kill("A linking error occured in a shader program.");
final String[] uniformNames = { "uniformA", "uniformB" };
IntBuffer indexes = BufferUtils.createIntBuffer(uniformNames.length);
IntBuffer params = BufferUtils.createIntBuffer(uniformNames.length);
IntBuffer getBuffer = BufferUtils.createIntBuffer(16);
IntBuffer buffers = BufferUtils.createIntBuffer(1);
// Get uniform block index and data size
final int blockIndex = ARBUniformBufferObject.glGetUniformBlockIndex(programID, "test");
ARBUniformBufferObject.glGetActiveUniformBlock(programID, blockIndex, ARBUniformBufferObject.GL_UNIFORM_BLOCK_DATA_SIZE, getBuffer);
final int blockSize = getBuffer.get(0);
final int blockSize = ARBUniformBufferObject.glGetActiveUniformBlock(programID, blockIndex, ARBUniformBufferObject.GL_UNIFORM_BLOCK_DATA_SIZE);
System.out.println("blockSize = " + blockSize);
// Create uniform buffer object and allocate a ByteBuffer
GL15.glGenBuffers(buffers);
bufferID = buffers.get(0);
bufferID = GL15.glGenBuffers();
GL15.glBindBuffer(ARBUniformBufferObject.GL_UNIFORM_BUFFER, bufferID);
GL15.glBufferData(ARBUniformBufferObject.GL_UNIFORM_BUFFER, blockSize, GL15.GL_DYNAMIC_DRAW);
buffer = BufferUtils.createFloatBuffer(blockSize);
@ -111,6 +102,9 @@ final class ShaderUNI extends Shader {
ARBUniformBufferObject.glUniformBlockBinding(programID, blockIndex, 0);
// Get uniform information
IntBuffer indexes = BufferUtils.createIntBuffer(uniformNames.length);
IntBuffer params = BufferUtils.createIntBuffer(uniformNames.length);
ARBUniformBufferObject.glGetUniformIndices(programID, uniformNames, indexes);
uniformA_index = indexes.get(0);
uniformB_index = indexes.get(1);

View file

@ -53,9 +53,7 @@ final class ShaderVP extends Shader {
file = shaderFile;
source = getShaderText(shaderFile);
ARBProgram.glGenProgramsARB(programBuffer);
ID = programBuffer.get(0);
ID = ARBProgram.glGenProgramsARB();
ARBProgram.glBindProgramARB(ARBVertexProgram.GL_VERTEX_PROGRAM_ARB, ID);
ARBProgram.glProgramStringARB(ARBVertexProgram.GL_VERTEX_PROGRAM_ARB, ARBProgram.GL_PROGRAM_FORMAT_ASCII_ARB, source);
@ -76,8 +74,7 @@ final class ShaderVP extends Shader {
}
void cleanup() {
programBuffer.put(0, ID);
ARBProgram.glDeleteProgramsARB(programBuffer);
ARBProgram.glDeleteProgramsARB(ID);
}
}

View file

@ -38,8 +38,6 @@
package org.lwjgl.test.opengl.shaders;
import java.nio.ByteBuffer;
import org.lwjgl.opengl.ARBShaderObjects;
import org.lwjgl.opengl.ARBVertexShader;
import org.lwjgl.opengl.GL11;
@ -64,8 +62,7 @@ final class ShaderVSH extends Shader {
printShaderObjectInfoLog(file, shaderID);
ARBShaderObjects.glGetObjectParameterARB(shaderID, ARBShaderObjects.GL_OBJECT_COMPILE_STATUS_ARB, programBuffer);
if ( programBuffer.get(0) == GL11.GL_FALSE )
if ( ARBShaderObjects.glGetObjectParameteriARB(shaderID, ARBShaderObjects.GL_OBJECT_COMPILE_STATUS_ARB) == GL11.GL_FALSE )
ShadersTest.kill("A compilation error occured in a vertex shader.");
programID = ARBShaderObjects.glCreateProgramObjectARB();
@ -75,8 +72,7 @@ final class ShaderVSH extends Shader {
printShaderProgramInfoLog(programID);
ARBShaderObjects.glGetObjectParameterARB(programID, ARBShaderObjects.GL_OBJECT_LINK_STATUS_ARB, programBuffer);
if ( programBuffer.get(0) == GL11.GL_FALSE )
if ( ARBShaderObjects.glGetObjectParameteriARB(programID, ARBShaderObjects.GL_OBJECT_LINK_STATUS_ARB) == GL11.GL_FALSE )
ShadersTest.kill("A linking error occured in a shader program.");
uniformLocation = getUniformLocation(programID, "UNIFORMS");