mirror of
https://github.com/stevenrobertson/cuburn.git
synced 2025-02-05 11:40:04 -05:00
Arbitrary camera, part 2
This commit is contained in:
parent
b2ee583b08
commit
e8a31bb4a5
@ -7,7 +7,7 @@ __global__
|
|||||||
void logfilt(float4 *pixbuf, float k1, float k2,
|
void logfilt(float4 *pixbuf, float k1, float k2,
|
||||||
float gamma, float vibrancy, float highpow) {
|
float gamma, float vibrancy, float highpow) {
|
||||||
// TODO: test if over an edge of the framebuffer
|
// TODO: test if over an edge of the framebuffer
|
||||||
int i = 1024 * blockIdx.x + threadIdx.x;
|
int i = blockDim.x * blockIdx.x + threadIdx.x;
|
||||||
float4 pix = pixbuf[i];
|
float4 pix = pixbuf[i];
|
||||||
|
|
||||||
if (pix.w <= 0) return;
|
if (pix.w <= 0) return;
|
||||||
|
@ -70,7 +70,8 @@ void iter(mwc_st *msts, iter_info *infos, float *accbuf, float *denbuf) {
|
|||||||
iter_info *info = &(infos[blockIdx.x]);
|
iter_info *info = &(infos[blockIdx.x]);
|
||||||
|
|
||||||
int consec_bad = -{{features.fuse}};
|
int consec_bad = -{{features.fuse}};
|
||||||
int nsamps = 2560;
|
// TODO: make nsteps adjustable via genome
|
||||||
|
int nsamps = {{packer.get('cp.width * cp.height / 512000. * cp.adj_density')}};
|
||||||
|
|
||||||
float x, y, color;
|
float x, y, color;
|
||||||
x = mwc_next_11(&rctx);
|
x = mwc_next_11(&rctx);
|
||||||
@ -121,7 +122,7 @@ void iter(mwc_st *msts, iter_info *infos, float *accbuf, float *denbuf) {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
int i = iy * {{features.height}} + ix;
|
int i = iy * {{features.width}} + ix;
|
||||||
|
|
||||||
// since info was declared const, C++ barfs unless it's loaded first
|
// since info was declared const, C++ barfs unless it's loaded first
|
||||||
float cp_step_frac = {{packer.get('cp_step_frac')}};
|
float cp_step_frac = {{packer.get('cp_step_frac')}};
|
||||||
@ -140,9 +141,10 @@ void iter(mwc_st *msts, iter_info *infos, float *accbuf, float *denbuf) {
|
|||||||
**globals())
|
**globals())
|
||||||
|
|
||||||
def render(features, cps):
|
def render(features, cps):
|
||||||
|
# TODO: make this adjustable via genome
|
||||||
nsteps = 1000
|
nsteps = 1000
|
||||||
abuf = np.zeros((1024, 1024, 4), dtype=np.float32)
|
abuf = np.zeros((features.height, features.width, 4), dtype=np.float32)
|
||||||
dbuf = np.zeros((1024, 1024), dtype=np.float32)
|
dbuf = np.zeros((features.height, features.width), dtype=np.float32)
|
||||||
seeds = mwc.MWC.make_seeds(512 * nsteps)
|
seeds = mwc.MWC.make_seeds(512 * nsteps)
|
||||||
|
|
||||||
iter = IterCode(features)
|
iter = IterCode(features)
|
||||||
@ -200,14 +202,16 @@ def render(features, cps):
|
|||||||
|
|
||||||
f = np.float32
|
f = np.float32
|
||||||
|
|
||||||
k1 = cp.contrast * cp.brightness * 268 / 256
|
npix = features.width * features.height
|
||||||
area = 1
|
|
||||||
k2 = 1 / (cp.contrast * (5 * nsteps))
|
k1 = cp.brightness * 268 / 256
|
||||||
|
area = features.width * features.height / cp.ppu ** 2
|
||||||
|
k2 = 1 / (area * cp.adj_density)
|
||||||
|
|
||||||
fun = mod.get_function("logfilt")
|
fun = mod.get_function("logfilt")
|
||||||
t = fun(abufd, f(k1), f(k2),
|
t = fun(abufd, f(k1), f(k2),
|
||||||
f(1 / cp.gamma), f(cp.vibrancy), f(cp.highlight_power),
|
f(1 / cp.gamma), f(cp.vibrancy), f(cp.highlight_power),
|
||||||
block=(1024,1,1), grid=(1024,1), time_kernel=True)
|
block=(256,1,1), grid=(npix/256,1), time_kernel=True)
|
||||||
print "Completed color filtering in %g seconds" % t
|
print "Completed color filtering in %g seconds" % t
|
||||||
|
|
||||||
abuf = cuda.from_device_like(abufd, abuf)
|
abuf = cuda.from_device_like(abufd, abuf)
|
||||||
|
7
main.py
7
main.py
@ -39,7 +39,6 @@ def main(args):
|
|||||||
MWCTest.test_mwc()
|
MWCTest.test_mwc()
|
||||||
membench()
|
membench()
|
||||||
|
|
||||||
window = pyglet.window.Window(1024, 1024) if '-g' in args else None
|
|
||||||
|
|
||||||
with open(args[1]) as fp:
|
with open(args[1]) as fp:
|
||||||
genomes = Genome.from_string(fp.read())
|
genomes = Genome.from_string(fp.read())
|
||||||
@ -52,9 +51,11 @@ def main(args):
|
|||||||
if '-g' not in args:
|
if '-g' not in args:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
window = pyglet.window.Window(anim.features.width, anim.features.height)
|
||||||
imgbuf = (np.minimum(accum * 255, 255)).astype(np.uint8)
|
imgbuf = (np.minimum(accum * 255, 255)).astype(np.uint8)
|
||||||
|
image = pyglet.image.ImageData(anim.features.width, anim.features.height,
|
||||||
image = pyglet.image.ImageData(1024, 1024, 'RGBA', imgbuf.tostring(), -4096)
|
'RGBA', imgbuf.tostring(),
|
||||||
|
-anim.features.width * 4)
|
||||||
tex = image.texture
|
tex = image.texture
|
||||||
|
|
||||||
#pal = (anim.ctx.ptx.instances[PaletteLookup].pal * 255.).astype(np.uint8)
|
#pal = (anim.ctx.ptx.instances[PaletteLookup].pal * 255.).astype(np.uint8)
|
||||||
|
Loading…
Reference in New Issue
Block a user