Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import org.lwjgl.glfw.GLFW.*
- import org.lwjgl.glfw.GLFWErrorCallback
- import org.lwjgl.opengl.GL
- import org.lwjgl.system.MemoryStack
- import org.lwjgl.system.MemoryStack.stackPush
- import org.lwjgl.glfw.GLFW.glfwPollEvents
- import java.awt.SystemColor.window
- import org.lwjgl.glfw.GLFW.glfwSwapBuffers
- import org.lwjgl.opengl.GL11
- import org.lwjgl.opengl.GL11.*
- import org.lwjgl.opengl.GL15.*
- import org.lwjgl.opengl.GL20
- import org.lwjgl.opengl.GL30.*
- import kotlin.math.sin
- import org.lwjgl.glfw.GLFW.glfwPollEvents
- import java.awt.SystemColor.window
- import org.lwjgl.glfw.GLFW.glfwSwapBuffers
- class App(var width: Int, var height: Int) {
- private val window: Long
- init {
- GLFWErrorCallback.createPrint(System.err).set()
- if (!glfwInit()) throw IllegalStateException("Unable to initialize GLFW")
- glfwWindowHint(GLFW_RESIZABLE, GLFW_TRUE)
- glfwDefaultWindowHints()
- glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3)
- glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2)
- glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE)
- glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GLFW_TRUE)
- window = glfwCreateWindow(width, height, "Amazing test game", 0, 0)
- if (window <= 0) throw IllegalStateException("Unable to create GLFW window")
- glfwSetKeyCallback(window) { window, key, _, action, _ ->
- if (key == GLFW_KEY_ESCAPE && action == GLFW_RELEASE) {
- glfwSetWindowShouldClose(window, true)
- }
- }
- val videoMod = glfwGetVideoMode(glfwGetPrimaryMonitor())!!
- glfwSetWindowPos(window, (videoMod.width() - width) / 2, (videoMod.height() - height) / 2)
- glfwMakeContextCurrent(window)
- glfwSwapInterval(1)
- glfwShowWindow(window)
- }
- fun loop1() {
- }
- fun loop() {
- GL.createCapabilities()
- val vao = glGenVertexArrays()
- stackPush().use {
- val vertices = it.mallocFloat(3 * 6)
- vertices.put(-0.6f).put(-0.4f).put(0f).put(1f).put(0f).put(0f)
- vertices.put(0.6f).put(-0.4f).put(0f).put(0f).put(1f).put(0f)
- vertices.put(0f).put(0.6f).put(0f).put(0f).put(0f).put(1f)
- vertices.flip()
- val vbo = glGenBuffers()
- glBindVertexArray(vao)
- glBindBuffer(GL_ARRAY_BUFFER, vbo)
- glBufferData(GL_ARRAY_BUFFER, vertices, GL_STATIC_DRAW)
- val floatSize = 4
- val posAttrib = glGetAttribLocation(shaderProgram, "position")
- glVertexAttribPointer(posAttrib, 3, GL_FLOAT, false, 6 * floatSize, 0)
- glEnableVertexAttribArray(posAttrib)
- val colAttrib = glGetAttribLocation(shaderProgram, "color")
- glVertexAttribPointer(colAttrib, 3, GL_FLOAT, false, 6 * floatSize, 3L * floatSize)
- glEnableVertexAttribArray(colAttrib)
- }
- val vertexShader = GL20.glCreateShader(GL20.GL_VERTEX_SHADER)
- GL20.glShaderSource(vertexShader, ClassLoader.getSystemResource("shaders/test.vert").readText())
- GL20.glCompileShader(vertexShader)
- val fragShader = GL20.glCreateShader(GL20.GL_FRAGMENT_SHADER)
- GL20.glShaderSource(fragShader, ClassLoader.getSystemResource("shaders/test.frag").readText())
- GL20.glCompileShader(fragShader)
- val vertStatus = GL20.glGetShaderi(vertexShader, GL20.GL_COMPILE_STATUS)
- if (vertStatus != GL11.GL_TRUE) throw RuntimeException(GL20.glGetProgramInfoLog(vertexShader))
- val fragStatus = GL20.glGetShaderi(fragShader, GL20.GL_COMPILE_STATUS)
- if (fragStatus != GL11.GL_TRUE) throw RuntimeException(GL20.glGetProgramInfoLog(fragShader))
- val shaderProgram = glCreateProgram()
- GL20.glAttachShader(shaderProgram, fragShader)
- GL20.glAttachShader(shaderProgram, vertexShader)
- glBindFragDataLocation(shaderProgram, 0, "fragColor")
- GL20.glLinkProgram(shaderProgram)
- val status = glGetProgrami(shaderProgram, GL_LINK_STATUS)
- if (status != GL_TRUE) {
- throw RuntimeException(glGetProgramInfoLog(shaderProgram))
- }
- while (!glfwWindowShouldClose(window)) {
- glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT)
- glUseProgram(shaderProgram)
- glBindVertexArray(vao)
- glDrawArrays(GL_TRIANGLES, 0, 3)
- glfwPollEvents()
- glfwSwapBuffers(window)
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement