Last active
March 23, 2016 18:11
-
-
Save pollend/da35bf1c183e6de49341 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import org.lwjgl.*; | |
import org.lwjgl.glfw.*; | |
import org.lwjgl.opengl.*; | |
import static org.lwjgl.glfw.GLFW.*; | |
import static org.lwjgl.opengl.GL11.*; | |
import static org.lwjgl.system.MemoryUtil.*; | |
public class Benchmark { | |
// We need to strongly reference callback instances. | |
private GLFWErrorCallback errorCallback; | |
private GLFWKeyCallback keyCallback; | |
// The window handle | |
private long window; | |
public void run() { | |
System.out.println("Hello LWJGL " + Version.getVersion() + "!"); | |
init(); | |
GL.createCapabilities(); | |
System.out.println("GL Enable and Disable"); | |
{ | |
OpenGlStateMachine state = new OpenGlStateMachine(); | |
long startTime = System.currentTimeMillis(); | |
for(int x =0; x < 500000; x++) | |
{ | |
state.glEnable(new OpenGlStateMachine.GLState[]{OpenGlStateMachine.GLState.T_GL_DEPTH_TEST}); | |
} | |
long endTime = System.currentTimeMillis(); | |
System.out.println("Total execution time: " + (endTime-startTime) + "ms"); | |
} | |
{ | |
long startTime = System.currentTimeMillis(); | |
for(int x =0; x < 500000; x++) | |
GL11.glEnable(GL_DEPTH_TEST); | |
long endTime = System.currentTimeMillis(); | |
System.out.println("Total execution time: " + (endTime-startTime) + "ms"); | |
} | |
System.out.println("GL Cull"); | |
{ | |
long startTime = System.currentTimeMillis(); | |
OpenGlStateMachine state = new OpenGlStateMachine(); | |
for(int x =0; x < 500000; x++) | |
state.glCull(OpenGlStateMachine.GLCull.T_GL_BACK); | |
long endTime = System.currentTimeMillis(); | |
System.out.println("Total execution time: " + (endTime-startTime) + "ms"); | |
} | |
{ | |
long startTime = System.currentTimeMillis(); | |
OpenGlStateMachine state = new OpenGlStateMachine(); | |
for(int x =0; x < 500000; x++) | |
GL11.glCullFace(GL11.GL_CULL_FACE); | |
long endTime = System.currentTimeMillis(); | |
System.out.println("Total execution time: " + (endTime-startTime) + "ms"); | |
} | |
System.out.println("GL Blend"); | |
{ | |
long startTime = System.currentTimeMillis(); | |
OpenGlStateMachine state = new OpenGlStateMachine(); | |
for(int x =0; x < 500000; x++) | |
state.glBlend(OpenGlStateMachine.GLBlendState.T_GL_SRC_ALPHA,OpenGlStateMachine.GLBlendState.T_GL_ONE_MINUS_DST_ALPHA); | |
long endTime = System.currentTimeMillis(); | |
System.out.println("Total execution time: " + (endTime-startTime) + "ms"); | |
} | |
{ | |
long startTime = System.currentTimeMillis(); | |
OpenGlStateMachine state = new OpenGlStateMachine(); | |
for(int x =0; x < 500000; x++) | |
GL11.glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); | |
long endTime = System.currentTimeMillis(); | |
System.out.println("Total execution time: " + (endTime-startTime) + "ms"); | |
} | |
// Destroy window and window callbacks | |
glfwDestroyWindow(window); | |
} | |
private void init() { | |
// Setup an error callback. The default implementation | |
// will print the error message in System.err. | |
glfwSetErrorCallback(errorCallback = GLFWErrorCallback.createPrint(System.err)); | |
// Initialize GLFW. Most GLFW functions will not work before doing this. | |
if ( glfwInit() != GLFW_TRUE ) | |
throw new IllegalStateException("Unable to initialize GLFW"); | |
// Configure our window | |
glfwDefaultWindowHints(); // optional, the current window hints are already the default | |
glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE); // the window will stay hidden after creation | |
glfwWindowHint(GLFW_RESIZABLE, GLFW_TRUE); // the window will be resizable | |
int WIDTH = 300; | |
int HEIGHT = 300; | |
// Create the window | |
window = glfwCreateWindow(WIDTH, HEIGHT, "Hello World!", NULL, NULL); | |
if ( window == NULL ) | |
throw new RuntimeException("Failed to create the GLFW window"); | |
// Setup a key callback. It will be called every time a key is pressed, repeated or released. | |
glfwSetKeyCallback(window, keyCallback = new GLFWKeyCallback() { | |
@Override | |
public void invoke(long window, int key, int scancode, int action, int mods) { | |
if ( key == GLFW_KEY_ESCAPE && action == GLFW_RELEASE ) | |
glfwSetWindowShouldClose(window, GLFW_TRUE); // We will detect this in our rendering loop | |
} | |
}); | |
// Get the resolution of the primary monitor | |
GLFWVidMode vidmode = glfwGetVideoMode(glfwGetPrimaryMonitor()); | |
// Center our window | |
glfwSetWindowPos( | |
window, | |
(vidmode.width() - WIDTH) / 2, | |
(vidmode.height() - HEIGHT) / 2 | |
); | |
// Make the OpenGL context current | |
glfwMakeContextCurrent(window); | |
// Enable v-sync | |
glfwSwapInterval(1); | |
// Make the window visible | |
glfwShowWindow(window); | |
} | |
private void loop() { | |
// This line is critical for LWJGL's interoperation with GLFW's | |
// OpenGL context, or any context that is managed externally. | |
// LWJGL detects the context that is current in the current thread, | |
// creates the GLCapabilities instance and makes the OpenGL | |
// bindings available for use. | |
GL.createCapabilities(); | |
// Set the clear color | |
glClearColor(1.0f, 0.0f, 0.0f, 0.0f); | |
// Run the rendering loop until the user has attempted to close | |
// the window or has pressed the ESCAPE key. | |
while ( glfwWindowShouldClose(window) == GLFW_FALSE ) { | |
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // clear the framebuffer | |
glfwSwapBuffers(window); // swap the color buffers | |
// Poll for window events. The key callback above will only be | |
// invoked during this call. | |
glfwPollEvents(); | |
} | |
} | |
public static void main(String[] args) { | |
new Benchmark().run(); | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment