mirror of
				https://github.com/scottdraves/flam3.git
				synced 2025-11-03 18:00:41 -05:00 
			
		
		
		
	apophysis only uses the bottom 255 elements of the palette (instead of all 256). In many cases this does not have a noticable effect on images, but in others, the color difference is very striking. the env var 'apo_palette' may be set to 1 in order to render the image in flam3 as it would appear in apophysis.
git-svn-id: https://flam3.googlecode.com/svn/trunk@152 77852712-ef1d-11de-8684-7d64432d61a3
This commit is contained in:
		
				
					committed by
					
						
						Scott Draves
					
				
			
			
				
	
			
			
			
						parent
						
							0053026871
						
					
				
				
					commit
					6be5e2e3f2
				
			@ -106,14 +106,13 @@ insert_palette  unset           insert the palette into the image.
 | 
			
		||||
enable_jpeg_comments  1         enables comments in the jpeg header (render and animate)
 | 
			
		||||
enable_png_comments   1         enables comments in the png header (render and animate)
 | 
			
		||||
 | 
			
		||||
New in 2.8:
 | 
			
		||||
 | 
			
		||||
earlyclip       0               enables the early clipping of rgb values for better antialiasing and resizing
 | 
			
		||||
                                defaults to 0 for backwards compatibility
 | 
			
		||||
flam27          0               flam3 2.7 compatibility mode; ensures generated genomes can be used by flam3 2.7.18
 | 
			
		||||
stagger         0               affects simultaneity of xform interpolation during genome interpolation.
 | 
			
		||||
                                represents how 'separate' the xforms are interpolated.  set to 1 for each
 | 
			
		||||
                                xform to be interpolated individually, fractions control interp overlap.
 | 
			
		||||
apo_palette     0               set this to 1 to use only the first 255 elements of the palette (apophysis compatibility)
 | 
			
		||||
 | 
			
		||||
for example:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -103,13 +103,13 @@ static char *the_docstring1 =
 | 
			
		||||
"enable_jpeg_comments   1    enables comments in the jpeg header (render and animate)\n"
 | 
			
		||||
"enable_png_comments    1    enables comments in the png header (render and animate)\n"
 | 
			
		||||
"\n"
 | 
			
		||||
"New in 2.8:\n"
 | 
			
		||||
"earlyclip       0               enables the early clipping of rgb values for better antialiasing and resizing\n"
 | 
			
		||||
"                                defaults to 0 for backwards compatibility\n"
 | 
			
		||||
"flam27          0               flam3 2.7 compatibility mode; ensures generated genomes can be used by flam3 2.7.18\n"
 | 
			
		||||
"stagger         0               affects simultaneity of xform interpolation during genome interpolation.\n"
 | 
			
		||||
"                                represents how 'separate' the xforms are interpolated.  set to 1 for each\n"
 | 
			
		||||
"                                xform to be interpolated individually, fractions control interp overlap.\n"
 | 
			
		||||
"apo_palette     0               set this to 1 to use only the first 255 elements of the palette (apophysis compatibility)\n"
 | 
			
		||||
 | 
			
		||||
"\n"
 | 
			
		||||
"for example:\n"
 | 
			
		||||
 | 
			
		||||
@ -87,7 +87,7 @@ typedef struct {
 | 
			
		||||
   double badvals; /* accumulates all badvalue resets */
 | 
			
		||||
   double batch_size;
 | 
			
		||||
   int temporal_sample_num,ntemporal_samples;
 | 
			
		||||
   int batch_num, nbatches, aborted;
 | 
			
		||||
   int batch_num, nbatches, aborted, cmap_size;
 | 
			
		||||
   time_t *progress_timer;
 | 
			
		||||
   time_t *progress_timer_history;
 | 
			
		||||
   double *progress_history;
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										26
									
								
								src/rect.c
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								src/rect.c
									
									
									
									
									
								
							@ -258,6 +258,8 @@ static void iter_thread(void *fth) {
 | 
			
		||||
   struct timespec pauset;
 | 
			
		||||
   int SBS = ficp->spec->sub_batch_size;
 | 
			
		||||
   int fuse;
 | 
			
		||||
   int cmap_size = ficp->cmap_size;
 | 
			
		||||
   int cmap_size_m1 = ficp->cmap_size-1;
 | 
			
		||||
 | 
			
		||||
   double eta = 0.0;
 | 
			
		||||
   
 | 
			
		||||
@ -443,7 +445,7 @@ static void iter_thread(void *fth) {
 | 
			
		||||
            
 | 
			
		||||
            //fprintf(stdout,"%.16f\n",p[2]*256.0);
 | 
			
		||||
            
 | 
			
		||||
            while(color_index0 < CMAP_SIZE_M1) {
 | 
			
		||||
            while(color_index0 < cmap_size_m1) {
 | 
			
		||||
            	if (ficp->dmap[color_index0+1].index > p[2])
 | 
			
		||||
            	   break;
 | 
			
		||||
            	else
 | 
			
		||||
@ -463,15 +465,15 @@ static void iter_thread(void *fth) {
 | 
			
		||||
               bump_no_overflow(b[0][3], logvis*ficp->dmap[color_index0].color[3]);
 | 
			
		||||
               bump_no_overflow(b[0][4], logvis*255.0);
 | 
			
		||||
#else
 | 
			
		||||
            dbl_index0 = p[2] * CMAP_SIZE;
 | 
			
		||||
            dbl_index0 = p[2] * cmap_size;
 | 
			
		||||
            color_index0 = (int) (dbl_index0);
 | 
			
		||||
            
 | 
			
		||||
            if (flam3_palette_mode_linear == fthp->cp.palette_mode) {
 | 
			
		||||
               if (color_index0 < 0) {
 | 
			
		||||
                  color_index0 = 0;
 | 
			
		||||
                  dbl_frac = 0;
 | 
			
		||||
               } else if (color_index0 >= CMAP_SIZE_M1) {
 | 
			
		||||
                  color_index0 = CMAP_SIZE_M1-1;
 | 
			
		||||
               } else if (color_index0 >= cmap_size_m1) {
 | 
			
		||||
                  color_index0 = cmap_size_m1-1;
 | 
			
		||||
                  dbl_frac = 1.0;
 | 
			
		||||
               } else {
 | 
			
		||||
                  /* interpolate between color_index0 and color_index0+1 */
 | 
			
		||||
@ -487,8 +489,8 @@ static void iter_thread(void *fth) {
 | 
			
		||||
            
 | 
			
		||||
               if (color_index0 < 0) {
 | 
			
		||||
                  color_index0 = 0;
 | 
			
		||||
               } else if (color_index0 >= CMAP_SIZE_M1) {
 | 
			
		||||
                  color_index0 = CMAP_SIZE_M1;
 | 
			
		||||
               } else if (color_index0 >= cmap_size_m1) {
 | 
			
		||||
                  color_index0 = cmap_size_m1;
 | 
			
		||||
               }
 | 
			
		||||
                        
 | 
			
		||||
               for (ci=0;ci<4;ci++)
 | 
			
		||||
@ -563,6 +565,8 @@ static int render_rectangle(flam3_frame *spec, void *out,
 | 
			
		||||
   int thi;
 | 
			
		||||
   time_t tstart,tend;   
 | 
			
		||||
   double sumfilt;
 | 
			
		||||
   char *ai;
 | 
			
		||||
   int cmap_size;
 | 
			
		||||
   
 | 
			
		||||
   char *last_block;
 | 
			
		||||
   size_t memory_rqd;
 | 
			
		||||
@ -580,6 +584,9 @@ static int render_rectangle(flam3_frame *spec, void *out,
 | 
			
		||||
 | 
			
		||||
   stats->num_iters = 0;
 | 
			
		||||
 | 
			
		||||
   /* correct for apophysis's use of 255 colors in the palette rather than all 256 */
 | 
			
		||||
   cmap_size = 256 - argi("apo_palette",0);
 | 
			
		||||
 | 
			
		||||
   memset(&cp,0, sizeof(flam3_genome));
 | 
			
		||||
 | 
			
		||||
   /* interpolate and get a control point                      */
 | 
			
		||||
@ -769,10 +776,10 @@ static int render_rectangle(flam3_frame *spec, void *out,
 | 
			
		||||
 | 
			
		||||
         /* compute the colormap entries.                             */
 | 
			
		||||
         /* the input colormap is 256 long with entries from 0 to 1.0 */
 | 
			
		||||
         for (j = 0; j < CMAP_SIZE; j++) {
 | 
			
		||||
            dmap[j].index = cp.palette[(j * 256) / CMAP_SIZE].index / 256.0;
 | 
			
		||||
         for (j = 0; j < cmap_size; j++) {
 | 
			
		||||
            dmap[j].index = cp.palette[(j * 256) / cmap_size].index / 256.0;
 | 
			
		||||
            for (k = 0; k < 4; k++)
 | 
			
		||||
               dmap[j].color[k] = (cp.palette[(j * 256) / CMAP_SIZE].color[k] * WHITE_LEVEL) * color_scalar;
 | 
			
		||||
               dmap[j].color[k] = (cp.palette[(j * 256) / cmap_size].color[k] * WHITE_LEVEL) * color_scalar;
 | 
			
		||||
         }
 | 
			
		||||
 | 
			
		||||
         /* compute camera */
 | 
			
		||||
@ -836,6 +843,7 @@ static int render_rectangle(flam3_frame *spec, void *out,
 | 
			
		||||
         fic.ntemporal_samples = ntemporal_samples;
 | 
			
		||||
         fic.batch_num = batch_num;
 | 
			
		||||
         fic.nbatches = nbatches;
 | 
			
		||||
         fic.cmap_size = cmap_size;
 | 
			
		||||
 | 
			
		||||
         fic.dmap = (flam3_palette_entry *)dmap;
 | 
			
		||||
         fic.color_scalar = color_scalar;
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user