Skip to content

Instantly share code, notes, and snippets.

@MatthewBlanchard
Created July 26, 2011 08:28
Show Gist options
  • Save MatthewBlanchard/1106274 to your computer and use it in GitHub Desktop.
Save MatthewBlanchard/1106274 to your computer and use it in GitHub Desktop.
OpenGL Test
require "os"
require "math"
require "glfw"
require "glua"
vertshade = [[
#version 330
layout(location = 0) in vec4 position;
void main()
{
gl_Position = position;
}
]]
fragshade = [[
#version 330
out vec4 outputColor;
void main()
{
outputColor = vec4(1.0f, 0.0f, 0.0f, 1.0f);
}
]]
function createShader(shadertype, source)
shader = gl.CreateShader(shadertype)
sources = alien.array("string", { source })
gl.ShaderSource(shader, 1, sources.buffer, nil)
gl.CompileShader(shader)
statusbuf = alien.array("int", { 0 })
gl.GetShaderiv(shader, GL_COMPILE_STATUS, statusbuf.buffer)
if statusbuf[1] == 0 then
return false
end
return shader
end
function createProgram(vert, frag)
program = gl.CreateProgram()
gl.AttachShader(program, vert)
gl.AttachShader(program, frag)
gl.LinkProgram(program)
statusbuf = alien.array("int", { 0 })
gl.GetProgramiv(program, GL_LINK_STATUS, statusbuf.buffer)
if statusbuf[1] == 0 then
return false
end
return program
end
function prepareVertData()
local vertData = alien.array("float",
{
0.75, 0.75, 0.0, 1.0,
0.75, -0.75, 0.0, 1.0,
-0.75, -0.75, 0.0, 1.0
})
buffersgenned = alien.array("int", { 0 })
gl.GenBuffers(1, buffersgenned.buffer)
gl.BindBuffer(GL_ARRAY_BUFFER, buffersgenned[1])
gl.BufferData(GL_ARRAY_BUFFER, 12*4, vertData.buffer, GL_STATIC_DRAW)
gl.BindBuffer(GL_ARRAY_BUFFER, 0)
end
function main()
running = true
if not glfw.Init() then
return "Can't init GLFW."
end
glfw.OpenWindowHint(GLFW_WINDOW_NO_RESIZE, 1)
glfw.OpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3)
glfw.OpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 1)
if not glfw.OpenWindow(800, 600, 0, 0, 0, 0, 0, 0, GLFW_WINDOW) then
glfw.Terminate()
return "Couldn't open window!"
end
glfw.SetWindowTitle("Windows man, windows.")
prepareVertData()
vertshader = createShader(GL_VERTEX_SHADER, vertshade)
fragshader = createShader(GL_FRAGMENT_SHADER, fragshade)
if not vertshader or not fragshader then return "Shader compilation failed." end
program = createProgram(vertshader, fragshader)
if not program then return "Program linking failed." end
print(gl.GetError())
while running do
gl.ClearColor(0, 0, 0, 0)
gl.Clear(GL_COLOR_BUFFER_BIT)
gl.UseProgram(program)
gl.BindBuffer(GL_ARRAY_BUFFER, buffersgenned[1])
gl.EnableVertexAttribArray(0)
gl.VertexAttribPointer(0, 4, GL_FLOAT, 0, 0, 0)
gl.DrawArrays(GL_TRIANGLES, 0, 3)
gl.DisableVertexAttribArray(0)
gl.BindBuffer(GL_ARRAY_BUFFER, 0)
gl.UseProgram(0)
glfw.SwapBuffers()
running = not glfw.GetKey(GLFW_KEY_SPACE)
end
glfw.CloseWindow()
glfw.Terminate()
return "Success. Clean exit."
end
print(main())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment