JRuby+LWJGLでGLSLを試してみる

はじめてということで、手始めに動くかどうかだけ試します。
GLSLのfragment側で色を緑にしてみます。

$:.unshift File.dirname(__FILE__)
require 'java'
require 'lwjgl.jar'

import org.lwjgl.opengl.Display
import org.lwjgl.opengl.DisplayMode
GL11 = org.lwjgl.opengl.GL11
GL20 = org.lwjgl.opengl.GL20

Display.setDisplayMode DisplayMode.new(300, 200)
Display.setTitle "sample"
Display.create


v_str = <<VERT
void main(void)
{
  gl_Position = ftransform();
}
VERT

f_str = <<FRAG
void main(void)
{
  gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);
}
FRAG

vid = GL20.glCreateShader(GL20::GL_VERTEX_SHADER)
GL20.glShaderSource(vid, v_str)
GL20.glCompileShader(vid)

fid = GL20.glCreateShader(GL20::GL_FRAGMENT_SHADER)
GL20.glShaderSource(fid, f_str)
GL20.glCompileShader(fid)

pid = GL20.glCreateProgram
GL20.glAttachShader(pid, vid)
GL20.glAttachShader(pid, fid)
GL20.glLinkProgram(pid)
linked = GL20.glGetProgram(pid, GL20::GL_LINK_STATUS)
puts "linked err." if linked==GL11::GL_FALSE

GL20.glUseProgram(pid)


GL11.glClearColor 0.1,0.1,0.1,1

while !Display.isCloseRequested 

  GL11.glClear GL11::GL_COLOR_BUFFER_BIT

  #GL11.glColor3d(1,0,0)
  GL11.glBegin GL11::GL_POLYGON
  GL11.glVertex2d(-0.5,-0.5)
  GL11.glVertex2d( 0.5,-0.5)
  GL11.glVertex2d( 0.5, 0.5)
  GL11.glVertex2d(-0.5, 0.5)
  GL11.glEnd

  Display.update
end

とくに難しいことなく動きました。
めでたしめでたし。
とりあえず、ここまで。