mirror of
https://github.com/dschmenk/PLASMA.git
synced 2025-08-08 09:25:19 +00:00
Avoid reading pixel back from screen - just track it
This commit is contained in:
@@ -13,6 +13,7 @@ const BLU = 2
|
|||||||
const RED_ANGLE = 104
|
const RED_ANGLE = 104
|
||||||
const GREEN_ANGLE = 241
|
const GREEN_ANGLE = 241
|
||||||
const BLUE_ANGLE = 347
|
const BLUE_ANGLE = 347
|
||||||
|
const GREY_CHROMA = 32 * 4 / 3
|
||||||
|
|
||||||
var sin90[] // first 90 degrees of sin in fixed s.15 format
|
var sin90[] // first 90 degrees of sin in fixed s.15 format
|
||||||
var = 0, 571, 1143, 1714, 2285, 2855, 3425, 3993
|
var = 0, 571, 1143, 1714, 2285, 2855, 3425, 3993
|
||||||
@@ -33,6 +34,7 @@ byte[256] gamma = 0, 2, 0 // Gamma correction
|
|||||||
var brightness = 0
|
var brightness = 0
|
||||||
var contrast = 0
|
var contrast = 0
|
||||||
var tint = 20
|
var tint = 20
|
||||||
|
var greyChroma = GREY_CHROMA
|
||||||
byte errDiv = 3
|
byte errDiv = 3
|
||||||
var rgbErr // Running color error array
|
var rgbErr // Running color error array
|
||||||
var arg
|
var arg
|
||||||
@@ -197,7 +199,7 @@ def rgbInit#0
|
|||||||
puti(ntscChroma[i*3 + BLU]); putln
|
puti(ntscChroma[i*3 + BLU]); putln
|
||||||
next
|
next
|
||||||
fin
|
fin
|
||||||
// Make up for additional 1/4 chroma cycle
|
// Make up for additional 1/4 chroma cycle in color match
|
||||||
for i = 0 to 11
|
for i = 0 to 11
|
||||||
ntscChroma[i] = (ntscChroma[i] * 4) / 3
|
ntscChroma[i] = (ntscChroma[i] * 4) / 3
|
||||||
next
|
next
|
||||||
@@ -277,7 +279,7 @@ def rgbExit#0
|
|||||||
end
|
end
|
||||||
|
|
||||||
def rgbImportExport(rgbfile, dhgrfile)#0
|
def rgbImportExport(rgbfile, dhgrfile)#0
|
||||||
byte refnum
|
byte refnum, chromabits
|
||||||
var i, j
|
var i, j
|
||||||
var rgbScanline, rgbptr, errptr
|
var rgbScanline, rgbptr, errptr
|
||||||
|
|
||||||
@@ -289,24 +291,26 @@ def rgbImportExport(rgbfile, dhgrfile)#0
|
|||||||
rgbInit
|
rgbInit
|
||||||
for j = 0 to 191
|
for j = 0 to 191
|
||||||
fileio:read(refnum, rgbScanline, 560 * 3)
|
fileio:read(refnum, rgbScanline, 560 * 3)
|
||||||
memset(@ntscCycle, 72, 24) // Reset chroma cycle
|
memset(@ntscCycle, greyChroma, 24) // Reset chroma cycle
|
||||||
rgbptr = rgbScanline
|
rgbptr = rgbScanline
|
||||||
errptr = rgbErr
|
errptr = rgbErr
|
||||||
for i = 0 to 559
|
for i = 0 to 559
|
||||||
// Calc best match
|
// Calc best match
|
||||||
|
chromabits = chromabits >> 1
|
||||||
if rgbPix(rgbptr, errptr, i & 3)
|
if rgbPix(rgbptr, errptr, i & 3)
|
||||||
dhgrSet(i, j)
|
dhgrSet(i, j)
|
||||||
|
chromabits = chromabits | $08
|
||||||
fin
|
fin
|
||||||
// Map GREY1 -> GREY2
|
// Map GREY1 -> GREY2
|
||||||
if (i & 3) == 3 and dcgrGetPixel(i >> 2, j) == 5
|
if (i & 3) == 3
|
||||||
dhgrOp(OP_SRC)
|
if chromabits == $0A // Bits are in reverse order from DCGR color value
|
||||||
dcgrColor(10)
|
dhgrOp(OP_SRC)
|
||||||
dcgrPixel(i >> 2, j)
|
dcgrColor(CLR_GREY2)
|
||||||
memset(@ntscCycle, 0, 24)
|
dcgrPixel(i >> 2, j)
|
||||||
memcpy(@ntscCycle + 0, @ntscChroma + 0, 6)
|
memset(@ntscCycle, greyChroma, 24) // Grey chroma cycle
|
||||||
//memcpy(@ntscCycle + 6, @ntscChroma + 6, 6)
|
elsif chromabits == $05
|
||||||
memcpy(@ntscCycle + 12, @ntscChroma + 12, 6)
|
memset(@ntscCycle, greyChroma, 24) // Grey chroma cycle
|
||||||
//memcpy(@ntscCycle + 18, @ntscChroma + 18, 6)
|
fin
|
||||||
fin
|
fin
|
||||||
rgbptr = rgbptr + 3
|
rgbptr = rgbptr + 3
|
||||||
errptr = errptr + 3 * 2
|
errptr = errptr + 3 * 2
|
||||||
@@ -380,6 +384,12 @@ if ^arg
|
|||||||
gamma[1] = atoi(arg + 2)
|
gamma[1] = atoi(arg + 2)
|
||||||
fin
|
fin
|
||||||
break
|
break
|
||||||
|
is 'N' // Set neutral chroma value
|
||||||
|
if ^arg > 2
|
||||||
|
^(arg + 2) = ^arg - 2
|
||||||
|
greyChroma = atoi(arg + 2)
|
||||||
|
fin
|
||||||
|
break
|
||||||
is 'T' // Adjust tint
|
is 'T' // Adjust tint
|
||||||
if ^arg > 2
|
if ^arg > 2
|
||||||
^(arg + 2) = ^arg - 2
|
^(arg + 2) = ^arg - 2
|
||||||
|
Reference in New Issue
Block a user