GFX update :D
This commit is contained in:
1 parent
05ca0f10a2
commit
c1b4ef2644
70 files changed
+1398
-5174
No files matched your search
@@ -0,0 +1,2 @@
|
||||
Hyperion
|
||||
Astronand
|
||||
@@ -0,0 +1,318 @@
|
||||
--:Minify:--
|
||||
local kernel=...
|
||||
if not kernel.cct then return end
|
||||
|
||||
local plt={
|
||||
[0]=0x000000,0x0b0b0b,0x222222,0x444444,0x555555,0x777777,0x888888,0xaaaaaa,
|
||||
0xbbbbbb,0xdddddd,0xeeeeee,0x00000b,0x000022,0x000044,0x000055,0x000077,
|
||||
0x000088,0x0000aa,0x0000bb,0x0000dd,0x0000ee,0x000b00,0x002200,0x004400,
|
||||
0x005500,0x007700,0x008800,0x00aa00,0x00bb00,0x00dd00,0x00ee00,0x0b0000,
|
||||
0x220000,0x440000,0x550000,0x770000,0x880000,0xaa0000,0xbb0000,0xdd0000,
|
||||
0xee0000,0x000033,0x000066,0x000099,0x0000cc,0x0000ff,0x003300,0x003333,
|
||||
0x003366,0x003399,0x0033cc,0x0033ff,0x006600,0x006633,0x006666,0x006699,
|
||||
0x0066cc,0x0066ff,0x009900,0x009933,0x009966,0x009999,0x0099cc,0x0099ff,
|
||||
0x00cc00,0x00cc33,0x00cc66,0x00cc99,0x00cccc,0x00ccff,0x00ff00,0x00ff33,
|
||||
0x00ff66,0x00ff99,0x00ffcc,0x00ffff,0x330000,0x330033,0x330066,0x330099,
|
||||
0x3300cc,0x3300ff,0x333300,0x333333,0x333366,0x333399,0x3333cc,0x3333ff,
|
||||
0x336600,0x336633,0x336666,0x336699,0x3366cc,0x3366ff,0x339900,0x339933,
|
||||
0x339966,0x339999,0x3399cc,0x3399ff,0x33cc00,0x33cc33,0x33cc66,0x33cc99,
|
||||
0x33cccc,0x33ccff,0x33ff00,0x33ff33,0x33ff66,0x33ff99,0x33ffcc,0x33ffff,
|
||||
0x660000,0x660033,0x660066,0x660099,0x6600cc,0x6600ff,0x663300,0x663333,
|
||||
0x663366,0x663399,0x6633cc,0x6633ff,0x666600,0x666633,0x666666,0x666699,
|
||||
0x6666cc,0x6666ff,0x669900,0x669933,0x669966,0x669999,0x6699cc,0x6699ff,
|
||||
0x66cc00,0x66cc33,0x66cc66,0x66cc99,0x66cccc,0x66ccff,0x66ff00,0x66ff33,
|
||||
0x66ff66,0x66ff99,0x66ffcc,0x66ffff,0x990000,0x990033,0x990066,0x990099,
|
||||
0x9900cc,0x9900ff,0x993300,0x993333,0x993366,0x993399,0x9933cc,0x9933ff,
|
||||
0x996600,0x996633,0x996666,0x996699,0x9966cc,0x9966ff,0x999900,0x999933,
|
||||
0x999966,0x999999,0x9999cc,0x9999ff,0x99cc00,0x99cc33,0x99cc66,0x99cc99,
|
||||
0x99cccc,0x99ccff,0x99ff00,0x99ff33,0x99ff66,0x99ff99,0x99ffcc,0x99ffff,
|
||||
0xcc0000,0xcc0033,0xcc0066,0xcc0099,0xcc00cc,0xcc00ff,0xcc3300,0xcc3333,
|
||||
0xcc3366,0xcc3399,0xcc33cc,0xcc33ff,0xcc6600,0xcc6633,0xcc6666,0xcc6699,
|
||||
0xcc66cc,0xcc66ff,0xcc9900,0xcc9933,0xcc9966,0xcc9999,0xcc99cc,0xcc99ff,
|
||||
0xcccc00,0xcccc33,0xcccc66,0xcccc99,0xcccccc,0xccccff,0xccff00,0xccff33,
|
||||
0xccff66,0xccff99,0xccffcc,0xccffff,0xff0000,0xff0033,0xff0066,0xff0099,
|
||||
0xff00cc,0xff00ff,0xff3300,0xff3333,0xff3366,0xff3399,0xff33cc,0xff33ff,
|
||||
0xff6600,0xff6633,0xff6666,0xff6699,0xff66cc,0xff66ff,0xff9900,0xff9933,
|
||||
0xff9966,0xff9999,0xff99cc,0xff99ff,0xffcc00,0xffcc33,0xffcc66,0xffcc99,
|
||||
0xffcccc,0xffccff,0xffff00,0xffff33,0xffff66,0xffff99,0xffffcc,0xffffff,
|
||||
}
|
||||
|
||||
local iplt={}
|
||||
for i=0, #plt do
|
||||
iplt[plt[i]]=i
|
||||
end
|
||||
local l1f,l1d,l2,ops={},{},{},0
|
||||
|
||||
local function findClosest(tbl, target)
|
||||
local closest = nil
|
||||
local smallestDiff = math.huge
|
||||
|
||||
for k, _ in pairs(tbl) do
|
||||
if k==target then return k end
|
||||
local diff = math.abs(k - target)
|
||||
if diff < smallestDiff then
|
||||
smallestDiff = diff
|
||||
closest = k
|
||||
end
|
||||
end
|
||||
|
||||
return closest
|
||||
end
|
||||
|
||||
local function aprox(c24)
|
||||
ops = ops + 1
|
||||
|
||||
if ops % 1024 == 0 then
|
||||
l1d = {}
|
||||
l1f = {}
|
||||
end
|
||||
|
||||
if ops % 8192 == 0 then
|
||||
l2 = {}
|
||||
end
|
||||
|
||||
if l2[c24] ~= nil then
|
||||
return l2[c24]
|
||||
end
|
||||
|
||||
if l1d[c24] ~= nil then
|
||||
l1f[c24] = l1f[c24] + 1
|
||||
|
||||
if l1f[c24] >= 16 then
|
||||
l2[c24] = l1d[c24]
|
||||
l1d[c24] = nil
|
||||
l1f[c24] = nil
|
||||
return l2[c24]
|
||||
end
|
||||
|
||||
return l1d[c24]
|
||||
end
|
||||
|
||||
local closestKey = findClosest(iplt, c24)
|
||||
if not closestKey then return nil end
|
||||
|
||||
local value = iplt[closestKey]
|
||||
|
||||
l1d[c24] = value
|
||||
l1f[c24] = 1
|
||||
|
||||
return value
|
||||
end
|
||||
|
||||
local function splitFramebufferToStrings(fb, w)
|
||||
local rows = {}
|
||||
|
||||
for i = 1, #fb, w do
|
||||
local row_chars = {}
|
||||
for j = 0, w - 1 do
|
||||
local val = fb[i + j]
|
||||
if val ~= nil then
|
||||
table.insert(row_chars, string.char(aprox(val)))
|
||||
else
|
||||
break
|
||||
end
|
||||
end
|
||||
table.insert(rows, table.concat(row_chars))
|
||||
end
|
||||
|
||||
return rows
|
||||
end
|
||||
|
||||
local function creategfx(term, id)
|
||||
local active=false
|
||||
term.setGraphicsMode(2)
|
||||
for i=0, #plt do
|
||||
term.setPaletteColor(i,plt[i])
|
||||
end
|
||||
term.setGraphicsMode(false)
|
||||
term.setPaletteColor(0x1, 0xFFFFFF)
|
||||
term.setPaletteColor(0x2, 0xFF0000)
|
||||
term.setPaletteColor(0x4, 0x00FF00)
|
||||
term.setPaletteColor(0x8, 0x0000FF)
|
||||
term.setPaletteColor(0x10, 0x00FFFF)
|
||||
term.setPaletteColor(0x20, 0xFF00FF)
|
||||
term.setPaletteColor(0x40, 0xFFFF00)
|
||||
term.setPaletteColor(0x80, 0xFF6D00)
|
||||
term.setPaletteColor(0x100, 0x6DFF55)
|
||||
term.setPaletteColor(0x200, 0x24FFFF)
|
||||
term.setPaletteColor(0x400, 0x924900)
|
||||
term.setPaletteColor(0x800, 0x6D6D55)
|
||||
term.setPaletteColor(0x1000, 0xDBDBAA)
|
||||
term.setPaletteColor(0x2000, 0x6D00FF)
|
||||
term.setPaletteColor(0x4000, 0xB6FF00)
|
||||
term.setPaletteColor(0x8000, 0x000000)
|
||||
local handle={
|
||||
gplt=function()
|
||||
return setmetatable({},{__index=plt,__usermeta=false,__pairs=function() return pairs(plt) end})
|
||||
end,
|
||||
spixel=function(x,y,c)
|
||||
term.setPixel(x,y,aprox(c))
|
||||
end,
|
||||
gpixel=function(x,y)
|
||||
return term.getPixel()
|
||||
end,
|
||||
drawFB=function(x,y,fb,w)
|
||||
local f=splitFramebufferToStrings(fb,w)
|
||||
term.drawPixels(x,y,f)
|
||||
end,
|
||||
box=function(x,y,w,h,c,fill)
|
||||
c=aprox(c)
|
||||
if not fill then
|
||||
term.drawPixels(x,y,c,w,1)
|
||||
term.drawPixels(x,y,c,1,h)
|
||||
term.drawPixels(x+w-1,y,c,1,h)
|
||||
term.drawPixels(x,y+h-1,c,w,1)
|
||||
else
|
||||
term.drawPixels(x,y,c,w,h)
|
||||
end
|
||||
end,
|
||||
circle=function(xc,yc,r,c,fill)
|
||||
c=aprox(c)
|
||||
if not fill then
|
||||
local x = 0
|
||||
local y = r
|
||||
local d = 3 - 2 * r
|
||||
|
||||
-- Helper function to plot all 8 symmetric points
|
||||
local function plot8Points(x, y)
|
||||
term.setPixel(xc + x, yc + y, c)
|
||||
term.setPixel(xc - x, yc + y, c)
|
||||
term.setPixel(xc + x, yc - y, c)
|
||||
term.setPixel(xc - x, yc - y, c)
|
||||
term.setPixel(xc + y, yc + x, c)
|
||||
term.setPixel(xc - y, yc + x, c)
|
||||
term.setPixel(xc + y, yc - x, c)
|
||||
term.setPixel(xc - y, yc - x, c)
|
||||
end
|
||||
|
||||
plot8Points(x, y)
|
||||
|
||||
while y >= x do
|
||||
x = x + 1
|
||||
if d > 0 then
|
||||
y = y - 1
|
||||
d = d + 4 * (x - y) + 10
|
||||
else
|
||||
d = d + 4 * x + 6
|
||||
end
|
||||
plot8Points(x, y)
|
||||
end
|
||||
else
|
||||
local x = 0
|
||||
local y = r
|
||||
local d = 3 - 2 * r
|
||||
|
||||
-- Helper to fill rows using symmetry
|
||||
local function fillRows(x, y)
|
||||
-- Width is (2 * coordinate) + 1 to include the center column
|
||||
local strX = string.rep(string.char(c), 2 * x + 1)
|
||||
local strY = string.rep(string.char(c), 2 * y + 1)
|
||||
-- Draw the horizontal spans
|
||||
term.drawPixels(xc - x, yc + y, {strX})
|
||||
term.drawPixels(xc - x, yc - y, {strX})
|
||||
term.drawPixels(xc - y, yc + x, {strY})
|
||||
term.drawPixels(xc - y, yc - x, {strY})
|
||||
end
|
||||
|
||||
fillRows(x, y)
|
||||
|
||||
while y >= x do
|
||||
x = x + 1
|
||||
if d > 0 then
|
||||
y = y - 1
|
||||
d = d + 4 * (x - y) + 10
|
||||
else
|
||||
d = d + 4 * x + 6
|
||||
end
|
||||
fillRows(x, y)
|
||||
end
|
||||
end
|
||||
end,
|
||||
line=function(x1,y1,x2,y2,c)
|
||||
x1=math.floor(x1+0.5)
|
||||
y1=math.floor(y1+0.5)
|
||||
x2=math.floor(x2+0.5)
|
||||
y2=math.floor(y2+0.5)
|
||||
|
||||
c=aprox(c)
|
||||
|
||||
local w,h=term.getSize(2)
|
||||
|
||||
local dx=math.abs(x2-x1)
|
||||
local dy=math.abs(y2-y1)
|
||||
|
||||
local sx=x1<x2 and 1 or -1
|
||||
local sy=y1<y2 and 1 or -1
|
||||
|
||||
local err=dx-dy
|
||||
|
||||
while true do
|
||||
|
||||
if 0<x1 and x1<=w and 0<y1 and y1<=h then
|
||||
term.setPixel(x1,y1,c)
|
||||
end
|
||||
|
||||
if x1==x2 and y1==y2 then
|
||||
break
|
||||
end
|
||||
|
||||
local e2=2*err
|
||||
|
||||
if e2>-dy then
|
||||
err=err-dy
|
||||
x1=x1+sx
|
||||
end
|
||||
|
||||
if e2<dx then
|
||||
err=err+dx
|
||||
y1=y1+sy
|
||||
end
|
||||
|
||||
end
|
||||
end,
|
||||
setMode=function(state)
|
||||
if state then
|
||||
term.setGraphicsMode(2)
|
||||
for i=0, #plt do
|
||||
term.setPaletteColor(i,plt[i])
|
||||
end
|
||||
active=true
|
||||
else
|
||||
term.setGraphicsMode(false)
|
||||
term.setPaletteColor(0x1, 0xFFFFFF)
|
||||
term.setPaletteColor(0x2, 0xFF0000)
|
||||
term.setPaletteColor(0x4, 0x00FF00)
|
||||
term.setPaletteColor(0x8, 0x0000FF)
|
||||
term.setPaletteColor(0x10, 0x00FFFF)
|
||||
term.setPaletteColor(0x20, 0xFF00FF)
|
||||
term.setPaletteColor(0x40, 0xFFFF00)
|
||||
term.setPaletteColor(0x80, 0xFF6D00)
|
||||
term.setPaletteColor(0x100, 0x6DFF55)
|
||||
term.setPaletteColor(0x200, 0x24FFFF)
|
||||
term.setPaletteColor(0x400, 0x924900)
|
||||
term.setPaletteColor(0x800, 0x6D6D55)
|
||||
term.setPaletteColor(0x1000, 0xDBDBAA)
|
||||
term.setPaletteColor(0x2000, 0x6D00FF)
|
||||
term.setPaletteColor(0x4000, 0xB6FF00)
|
||||
term.setPaletteColor(0x8000, 0x000000)
|
||||
active=false
|
||||
end
|
||||
end,
|
||||
getMode=function()
|
||||
return active
|
||||
end,
|
||||
size=function()
|
||||
return term.getSize(2)
|
||||
end,
|
||||
drawRun=function(y,x1,x2,c)
|
||||
term.drawPixels(x1,y,c,{string.rep(string.char(aprox(c)),x1-x2)})
|
||||
end
|
||||
}
|
||||
return handle
|
||||
end
|
||||
|
||||
for id,obj in pairs(kernel.cct.term) do
|
||||
if obj.setGraphicsMode then
|
||||
kernel.cct.gfx[id]=creategfx(obj, id)
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1 @@
|
||||
firmware for CraftOS PC
|
||||
@@ -0,0 +1 @@
|
||||
1.0.0
|
||||
Reference in new issue
Block a user