Simple SlideShow Demo



Here is a simple slideshow demo. You load several images using the LoadTexture() (INIT script line 20) function and each texture is displayed during duration time (FRAME script lines 3 and 7).

This demo will be available in the next version of the code sample pack.

 

INIT script in Lua

winW, winH = gh_window.getsize()
   
font_a = gh_utils.font_create("Tahoma", 14)

-- An orthographic camera for 2D visualization
--
camera_ortho = gh_camera.create_ortho(-winW/2, winW/2, -winH/2, winH/2, 1.0, 10.0)
gh_camera.set_viewport(camera_ortho, 0, 0, winW, winH)
gh_camera.set_position(camera_ortho, 0, 0, 4)


-- The textures
--
local abs_path = 0
all_textures = {}
num_textures = 0

-- A helper function to load a texture and add it to the texture array.
--
function LoadTexture(filename)
  local tex = gh_texture.create_from_file(filename, 0, abs_path)
  if (tex > 0) then
    num_textures = num_textures + 1
    all_textures[num_textures] = tex
  end
end

-- Load all textures
--
LoadTexture("data/i01.jpg")
LoadTexture("data/i02.jpg")
LoadTexture("data/i03.jpg")
LoadTexture("data/i04.jpg")


-- The GPU program used to display a texture.
--
texture_prog = gh_node.getid("texture_prog")
gh_gpu_program.uniform1i(texture_prog, "tex0", 0)


-- The quad to display the texture.
--
mesh_quad = gh_mesh.create_quad(winW, winH)


gh_renderer.set_vsync(1)
gh_renderer.set_scissor_state(0)

local elapsed_time = gh_utils.get_elapsed_time()
last_time = elapsed_time
frame = 0
last_texture = 0

 

FRAME script in Lua

-- Each texture is displayed during "duration" seconds.
--
local duration = 1.0 -- in seconds    
    
local elapsed_time = gh_utils.get_elapsed_time()
local diff_time = elapsed_time - last_time
if (diff_time > duration) then
  last_time = elapsed_time
  frame = frame + 1
  if (frame >= num_textures) then
    frame = 0
  end
end


-- Texture rendering
--
gh_camera.bind(camera_ortho)

gh_renderer.set_depth_test_state(0)
gh_renderer.clear_color_depth_buffers(0.2, 0.2, 0.2, 1.0, 1.0)

gh_gpu_program.bind(texture_prog)

local tex = all_textures[frame+1]
-- A small test that avoind to bind the same texture every frame.
--
if (last_texture ~= tex) then 
  gh_texture.bind(tex, 0)
  last_texture = tex
end  

gh_object.set_position(mesh_quad, 0, 0, 0)
gh_object.set_euler_angles(mesh_quad, 0, 0, 0)
gh_object.render(mesh_quad)


-- Some info...
--
gh_utils.font_render(font_a, 10, 20, 1.0, 1.0, 0.0, 1.0, "GLSL Hacker - SlideShow demo")
gh_utils.font_render(font_a, 10, 40, 1.0, 1.0, 0.0, 1.0, "Image: " .. (frame+1))

 

SIZE script in Lua

winW, winH = gh_window.getsize(0)

gh_camera.update_ortho(camera_ortho, -winW/2, winW/2, -winH/2, winH/2, 1.0, 10.0)
gh_camera.set_viewport(camera_ortho, 0, 0, winW, winH)

gh_utils.font_set_viewport_info(font_a, 0, 0, winW, winH)

gh_mesh.update_quad_size(mesh_quad, winW, winH)

And to terminate, the texturing GLSL program: