1
0
Fork 0
mirror of https://github.com/Reuh/ubiquitousse.git synced 2025-10-27 17:19:31 +00:00
ubiquitousse/gltf/draw.lua

84 lines
4.3 KiB
Lua

local whiteTexture -- ./gltf/draw.can:4
whiteTexture = love["graphics"]["newCanvas"](2, 2) -- ./gltf/draw.can:4
whiteTexture:renderTo(function() -- ./gltf/draw.can:5
love["graphics"]["setColor"](1, 1, 1) -- ./gltf/draw.can:6
love["graphics"]["rectangle"]("fill", 0, 0, 2, 2) -- ./gltf/draw.can:7
end) -- ./gltf/draw.can:7
local maybeSend -- ./gltf/draw.can:11
maybeSend = function(s, name, val) -- ./gltf/draw.can:11
if s:hasUniform(name) then -- ./gltf/draw.can:12
s:send(name, val) -- ./gltf/draw.can:13
end -- ./gltf/draw.can:13
end -- ./gltf/draw.can:13
local maybeSendTexture -- ./gltf/draw.can:16
maybeSendTexture = function(s, name, tex) -- ./gltf/draw.can:16
if s:hasUniform(name) then -- ./gltf/draw.can:17
if tex then -- ./gltf/draw.can:18
s:send(name, tex["index"]["image"]) -- ./gltf/draw.can:19
else -- ./gltf/draw.can:19
s:send(name, whiteTexture) -- ./gltf/draw.can:21
end -- ./gltf/draw.can:21
end -- ./gltf/draw.can:21
end -- ./gltf/draw.can:21
local applyMaterial -- ./gltf/draw.can:27
applyMaterial = function(s, mat) -- ./gltf/draw.can:27
maybeSend(s, "baseColorFactor", mat["pbrMetallicRoughness"]["baseColorFactor"]) -- ./gltf/draw.can:28
maybeSendTexture(s, "baseColorTexture", mat["pbrMetallicRoughness"]["baseColorTexture"]) -- ./gltf/draw.can:29
maybeSend(s, "metallicFactor", mat["pbrMetallicRoughness"]["metallicFactor"]) -- ./gltf/draw.can:30
maybeSend(s, "roughnessFactor", mat["pbrMetallicRoughness"]["roughnessFactor"]) -- ./gltf/draw.can:31
maybeSendTexture(s, "metallicRoughnessTexture", mat["pbrMetallicRoughness"]["metallicRoughnessTexture"]) -- ./gltf/draw.can:32
maybeSendTexture(s, "normalTexture", mat["normalTexture"]) -- ./gltf/draw.can:33
maybeSendTexture(s, "occlusionTexture", mat["occlusionTexture"]) -- ./gltf/draw.can:34
if mat["occlusionTexture"] then -- ./gltf/draw.can:35
maybeSend(s, "occlusionTextureStrength", mat["occlusionTexture"]["strength"]) -- ./gltf/draw.can:36
else -- ./gltf/draw.can:36
maybeSend(s, "occlusionTextureStrength", 1) -- ./gltf/draw.can:38
end -- ./gltf/draw.can:38
maybeSendTexture(s, "emissiveTexture", mat["emissiveTexture"]) -- ./gltf/draw.can:40
if mat["emissiveTexture"] then -- ./gltf/draw.can:41
maybeSend(s, "emissiveTextureScale", mat["emissiveTexture"]["scale"]) -- ./gltf/draw.can:42
else -- ./gltf/draw.can:42
maybeSend(s, "emissiveTextureScale", 1) -- ./gltf/draw.can:44
end -- ./gltf/draw.can:44
maybeSend(s, "emissiveFactor", mat["emissiveFactor"]) -- ./gltf/draw.can:46
if mat["alphaMode"] == "BLEND" then -- ./gltf/draw.can:47
love["graphics"]["setBlendMode"]("alpha") -- ./gltf/draw.can:48
maybeSend(s, "alphaCutoff", 0) -- ./gltf/draw.can:49
else -- ./gltf/draw.can:49
love["graphics"]["setBlendMode"]("replace") -- ./gltf/draw.can:51
maybeSend(s, "alphaCutoff", mat["alphaMode"] == "BLEND" and mat["alphaCutoff"] or 0) -- ./gltf/draw.can:52
end -- ./gltf/draw.can:52
if mat["doubleSided"] then -- ./gltf/draw.can:54
love["graphics"]["setMeshCullMode"]("none") -- ./gltf/draw.can:55
else -- ./gltf/draw.can:55
love["graphics"]["setMeshCullMode"]("back") -- ./gltf/draw.can:57
end -- ./gltf/draw.can:57
end -- ./gltf/draw.can:57
local drawNode -- ./gltf/draw.can:62
drawNode = function(node, s) -- ./gltf/draw.can:62
if node["mesh"] then -- ./gltf/draw.can:63
s:send("modelMatrix", "column", node["matrix"]) -- ./gltf/draw.can:64
for _, primitive in ipairs(node["mesh"]["primitives"]) do -- ./gltf/draw.can:65
applyMaterial(s, primitive["material"]) -- ./gltf/draw.can:66
love["graphics"]["draw"](primitive["mesh"]) -- ./gltf/draw.can:67
end -- ./gltf/draw.can:67
end -- ./gltf/draw.can:67
for _, child in ipairs(node["children"]) do -- ./gltf/draw.can:70
drawNode(child, s) -- ./gltf/draw.can:71
end -- ./gltf/draw.can:71
end -- ./gltf/draw.can:71
local drawMainScene -- ./gltf/draw.can:77
drawMainScene = function(gltf, s) -- ./gltf/draw.can:77
love["graphics"]["push"]("all") -- ./gltf/draw.can:78
love["graphics"]["setDepthMode"]("lequal", true) -- ./gltf/draw.can:79
if s then -- ./gltf/draw.can:80
love["graphics"]["setShader"](s) -- ./gltf/draw.can:81
else -- ./gltf/draw.can:81
s = love["graphics"]["getShader"]() -- ./gltf/draw.can:83
end -- ./gltf/draw.can:83
for _, node in ipairs(gltf["scene"]["nodes"]) do -- ./gltf/draw.can:85
drawNode(node, s) -- ./gltf/draw.can:86
end -- ./gltf/draw.can:86
love["graphics"]["pop"]("all") -- ./gltf/draw.can:88
end -- ./gltf/draw.can:88
return drawMainScene -- ./gltf/draw.can:91