Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

In this Discussion

Tagged

Are we using Lua GL?
  • MyC0deaMyC0dea
    Posts: 12

    source: http://luagl.sourceforge.net/ Are we using Lua GL if so which iteration of Lua are we using.

  • BortelsBortels
    Posts: 1,553

    No, we're not. (Well, they might be using it internally, but I doubt it, and if they are they aren't exposing the API. I rather suspect they're calling the native Objective-C bindings).

  • SimeonSimeon
    Posts: 3,452

    @MyC0dea no, we aren't using Lua GL. In fact, Lua GL is the sort of API we would like to stay away from, as it is very low level. The closest you'll come to Lua GL style functionality in Codea is in the Mesh type.

  • SimeonSimeon
    Posts: 3,452

    The following Lua GL code draws a rectangle and a triangle.

    From http://luagl.sourceforge.net/examples/nehe_02.lua

    As you can see, having to write the code below just to draw simple primitives is probably not desirable in most circumstances.

    require("iuplua")
    require("iupluagl")
    require("luagl")
    require("luaglu")
    
    iup.key_open()
    
    cnv = iup.glcanvas{buffer="DOUBLE", rastersize = "640x480"}
    
    function cnv:resize_cb(width, height)
      iup.GLMakeCurrent(self)
      gl.Viewport(0, 0, width, height)
    
      gl.MatrixMode('PROJECTION')   -- Select The Projection Matrix
      gl.LoadIdentity()             -- Reset The Projection Matrix
    
      if height == 0 then           -- Calculate The Aspect Ratio Of The Window
        height = 1
      end
    
      glu.Perspective(80, width / height, 1, 5000)
    
      gl.MatrixMode('MODELVIEW')    -- Select The Model View Matrix
      gl.LoadIdentity()             -- Reset The Model View Matrix
    end
    
    function cnv:action(x, y)
      iup.GLMakeCurrent(self)
      gl.Clear('COLOR_BUFFER_BIT,DEPTH_BUFFER_BIT') -- Clear Screen And Depth Buffer
    
      gl.LoadIdentity()              -- Reset The Current Modelview Matrix
      gl.Translate(-1.5, 0, -6)      -- Move Left 1.5 Units And Into The Screen 6.0
    
      gl.Begin('TRIANGLES')          -- Drawing Using Triangles
        gl.Vertex( 0,  1, 0)         -- Top
        gl.Vertex(-1, -1, 0)         -- Bottom Left
        gl.Vertex( 1, -1, 0)         -- Bottom Right
      gl.End()                       -- Finished Drawing The Triangle
    
      gl.Translate(3, 0, 0)          -- Move Right 3 Units
    
      gl.Begin('QUADS')              -- Draw A Quad
        gl.Vertex(-1,  1, 0)         -- Top Left
        gl.Vertex( 1,  1, 0)         -- Top Right
        gl.Vertex( 1, -1, 0)         -- Bottom Right
        gl.Vertex(-1, -1, 0)         -- Bottom Left
      gl.End()
    
      iup.GLSwapBuffers(self)
    end
    
    function cnv:k_any(c)
      if c == iup.K_q or c == iup.K_ESC then
        return iup.CLOSE
      elseif c == iup.K_F1 then
        if fullscreen then
          fullscreen = false
          dlg.fullscreen = "No"
        else
          fullscreen = true
          dlg.fullscreen = "Yes"
        end
        iup.SetFocus(cnv)
      end
    end
    
    function cnv:map_cb()
      iup.GLMakeCurrent(self)
      gl.ShadeModel('SMOOTH')            -- Enable Smooth Shading
      gl.ClearColor(0, 0, 0, 0.5)        -- Black Background
      gl.ClearDepth(1.0)                 -- Depth Buffer Setup
      gl.Enable('DEPTH_TEST')            -- Enables Depth Testing
      gl.DepthFunc('LEQUAL')             -- The Type Of Depth Testing To Do
      gl.Enable('COLOR_MATERIAL')
      gl.Hint('PERSPECTIVE_CORRECTION_HINT','NICEST')
    end
    
    dlg = iup.dialog{cnv; title="LuaGL Test Application 02"}
    
    dlg:show()
    cnv.rastersize = nil -- reset minimum limitation
    
    if (not iup.MainLoopLevel or iup.MainLoopLevel()==0) then
      iup.MainLoop()
    end