Art Crypto Art GLSL Lua MetaOpus NFT Shader Video

Life Journey ~ Looking Back

Life Journey ~ Looking back in the journey of life, appreciating the divine moments.

Be kind and generous.

Generative video (1024×1024 MP4)

Art Crypto Art Generative GLSL Lua NFT OpenSea Shader

Sublime ~ Embracing eternal peace in the Light

Sublime ~ Embracing eternal peace in the Light

Generative art created with shaders (GLSL) and Lua.

Total 3 editions at OpenSea:

Art CleanNFT Crypto Art Generative GLSL Hic et Nunc Lua NFT Shader

Into the Light #2

Into the Light #2

Light among the chaos.

Generative art created by Dave Yang.

Art Generative GLSL Lua


Another generative piece inspired by Paul Klee’s New Harmony. Original artwork at 8K resolution (7680 × 4320).




Each “square” is assigned a numeric value for determining the color information:

Images are generated from my custom app with rules for visual settings. Grid size, texture, vignette, colors…etc. can all be controlled in real-time. A zap feature changes the color of a “square” so I have total control of the look and feel and not rely completely on the logic of the app. The app supports up to whatever the screen resolution is set at (the highest resolution my monitor supports is 8K).

Generative GLSL Lua Music Visualizer Shader Solar2D Video



Created with custom app in Lua and GLSL.

Corona SDK Lua Tutorials

UI data binding for Corona SDK

Here is a simple demo of data-binding to user-interface elements in Corona SDK. The purpose is to update variables so that UI elements (textfields in this demo) are updated automatically.

-- UI data binding demo for Corona SDK
-- Update variables and UI elements (textfields in this demo) are updated automatically
-- Created by:  Dave Yang / Quantumwave Interactive Inc.
-- Version:     1.00

-- place variables inside UIdata
local UIdata = {
    sum = 0,
    rand = -1,

-- create the UI elements
local sumTxt = display.newText( UIdata.sum, 150, 125, native.systemFont, 24 )
local randTxt = display.newText( UIdata.rand, 150, 250, native.systemFont, 24 )

-- bind the data to the UI elements
local UIdataBinding = {
    sum = sumTxt,
    rand = randTxt,


-- reference to the original UIdata table
local _uidata = UIdata

-- empty UIdata to make it work with the metatable below
UIdata = {}

-- the metatable defines what to do with access and change to data in UIdata
local UIdataMT = {
    __index = function(t,k)
        return _uidata[k]

    __newindex = function(t,k,v)
        -- changes to the data is updated in the textfield; other UI elements can be applied according to type
        UIdataBinding[tostring(k)].text = v
        -- update the original data
        _uidata[k] = v

setmetatable(UIdata, UIdataMT)

-- single line if you prefer to replace the lines above starting from 'local UIdataMT = {'
--setmetatable(UIdata, {__index=function(t,k) return _uidata[k] end, __newindex=function(t,k,v) UIdataBinding[tostring(k)].text=v;_uidata[k]=v end})


-- change and access data

UIdata.sum = 42

UIdata.rand = math.random(99)

The latest updates can be found at github.

Corona SDK Lua Tips & Tricks

ZeroBrane Studio

For Lua development, whether it is for plain Lua or platforms such as Corona SDK, ZeroBrane Studio is an excellent open-source IDE (written in Lua) for Windows, Mac OS and Linux. I still use Sublime Text with the Corona Editor plugin but ZeroBrane Studio is my first choice for Lua development.

This IDE is updated frequently and has great support from Paul Kulchenko. To grab the latest update before a new version is released, download from the github page, and follow these steps on Mac OS:

  1. Locate in the Applications folder
  2. Right-click on the app and choose Show Package Contents
  3. Open the Contents folder, and then the ZeroBraneStudio folder
  4. Drag and drop everything(*) inside the (github) ZeroBraneStudio folder into the above folder inside the app

* Actually not all files are needed, see an example of files and folders to drag over in the following image:


If you have made changes to a theme or configuration (such as tomorrow.lua in the cfg folder), make sure you have a backup copy before replacing everything as described above.

Download the IDE here:

To show Corona SDK reference from right-clicking on a keyword in the editor, add the following code to the end of your user settings (user.lua) found under the Edit | Preferences menu:

showreference = {
	target = '',
	transform = function(s)
		local tip = G.GetTipInfo(G.ide:GetEditor(), s)
		if tip then s = tip:match("%)%s*(%S+)") or s end
		s = (G.type(G[s]) == "function" and "global." or "")..s
		s = s..(s:find("[%.%:]") and "" or ".index")
		s = s:find("^_") and "type."..s:sub(2) or "library."..s

Add showreference.lua from ZeroBranePackage to the ~/.zbstudio folder if it’s not there already. Quit and relaunch the IDE to see the update.