All pastes #537670 Raw Edit

Anonymous

public lua v1 · immutable
·published 2007-06-04 20:20 UTC
rendered paste body
function widget:GetInfo()  return {    name      = "!GL test",    desc      = "Shaded spinning cube",    author    = "q",    date      = "Jan 8, 2007",    license   = "GNU GPL, v2 or later",    layer     = -3,    enabled   = false  --  loaded by default?  }end----------------------------------------------------------------------------------------------------------------------------------------------------------------local m = 0local A = { -1,  1,  1}local B = {  1,  1,  1}local C = {  1, -1,  1}local D = { -1, -1,  1}local E = { -1,  1, -1}local F = {  1,  1, -1}local G = {  1, -1, -1}local H = { -1, -1, -1}local startTime = Spring.GetTimer()local vsx, vsy = 0, 0local screenTexture = 0function widget:ViewResize(viewSizeX, viewSizeY)  vsx = viewSizeX  vsy = viewSizeY  if (screenTexture) then    gl.DeleteTexture(screenTexture)  end  screenTexture = gl.CreateTexture(vsx, vsy, {    min_filter = GL.NEAREST,    mag_filter = GL.NEAREST,  })  if (screenTexture == nil) then    Spring.Echo("Removing grey widget, bad screen texture")    widgetHandler:RemoveWidget()    return  endendfunction widget:Initialize()  if (gl.CreateShader == nil) then    Spring.Echo("Removing grey widget, no shaders")    widgetHandler:RemoveWidget()    return  end  cubeListNumber = gl.CreateList(function()      gl.BeginEnd(GL.QUADS, function()           Cube(A, B, C, D, E, F, G, H)        end      )    end  )  greyShader = gl.CreateShader({    fragment = [[      uniform sampler2D tex0;      uniform float time;      void main(void)      {        const vec2 txcd = vec2(gl_TexCoord[0]);        const vec3 color = vec3(texture2D(tex0, txcd));        const float illum = dot(color, vec3(0.299, 0.587, 0.114));        gl_FragColor = vec4(vec3(illum), 1.0) * vec4(1, 0.8, 0.6, 1);        gl_FragColor = gl_FragColor + noise4(gl_TexCoord[0]);        float noise = fract(time) * 1.25 * (txcd.x + txcd.y + txcd.x * txcd.y);        noise = fract(1234567.89 * noise);        noise = fract(345 * noise);        gl_FragColor += 0.5 * vec4(noise);      }    ]],    uniform = {      time = 1,    },    uniformInt = {      tex0 = 0,    }  })  timeLoc = gl.GetUniformLocation(greyShader, 'time')endfunction widget:Shutdown()  gl.DeleteList(cubeListNumber)  gl.DeleteTexture(screenTexture)  if (gl.DeleteShader) then    gl.DeleteShader(greyShader)  endendfunction widget:DrawScreen()  m = m + 1  local n = math.sin(m/100)  local diffTime = Spring.DiffTimers(Spring.GetTimer(), startTime)  gl.MatrixMode(GL.MODELVIEW)   gl.PushMatrix()  gl.Scale(44, 44, 44)  gl.Translate( 9+n,  8+n, 20+2*n)  gl.Rotate(m, 0, 1, 0)  gl.Rotate(m, 0, 0, 1)  gl.Culling( false )  gl.DepthTest( true )  gl.DepthMask( true )  gl.MatrixMode(GL.TEXTURE)  gl.PushMatrix()  --gl.Rotate(-45, 0, 0, 1)  gl.CopyToTexture(screenTexture, 0, 0, 0, 0, vsx, vsy)  gl.Blending(false)  gl.UseShader(greyShader)  gl.Texture(screenTexture)  gl.Uniform(timeLoc, diffTime)  gl.CallList(cubeListNumber)  gl.PopMatrix()  gl.PopMatrix()  gl.ResetMatrices()  gl.UseShader(0)  gl.Texture(false)  gl.Blending(true)endfunction Cube(A, B, C, D, E, F, G, H)  Face(A, B, C, D)  Face(E, F, G, H)  Face(B, F, G, C)  Face(A, E, H, D)  Face(A, B, F, E)  Face(D, C, G, H)endfunction Face(A, B, C, D)  gl.TexCoord(0, 1)  gl.Vertex(A[1], A[2], A[3])  gl.TexCoord(1, 1)  gl.Vertex(B[1], B[2], B[3])  gl.TexCoord(1, 0)  gl.Vertex(C[1], C[2], C[3])  gl.TexCoord(0, 0)  gl.Vertex(D[1], D[2], D[3])end