mirror of
				https://github.com/stevenrobertson/cuburn.git
				synced 2025-11-03 18:00:55 -05:00 
			
		
		
		
	Arbitrary camera, part 2
This commit is contained in:
		@ -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)
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user