void genpic(int p){ //根据密度数据生成位图 int i,j; printf("Generating pic...\n"); max=B*total/(p+1)*8/DIM/DIM; //颜色255对应的根密度 for(j=0;j<DIM;j++) for(i=0;i<DIM;i++) colorfunc(den[i][j],bitmap[j][i]); }
static forceinline void R_DrawColumnGeneric(PIXEL_T* dest, const drawcolumn_t& drawcolumn) { #ifdef RANGECHECK if (drawcolumn.x < 0 || drawcolumn.x >= viewwidth || drawcolumn.yl < 0 || drawcolumn.yh >= viewheight) { Printf (PRINT_HIGH, "R_DrawColumn: %i to %i at %i\n", drawcolumn.yl, drawcolumn.yh, drawcolumn.x); return; } #endif palindex_t* source = drawcolumn.source; int pitch = drawcolumn.pitch_in_pixels; int count = drawcolumn.yh - drawcolumn.yl + 1; if (count <= 0) return; const fixed_t fracstep = drawcolumn.iscale; fixed_t frac = drawcolumn.texturefrac; const int texheight = drawcolumn.textureheight; const int mask = (texheight >> FRACBITS) - 1; COLORFUNC colorfunc(drawcolumn); // [SL] Properly tile textures whose heights are not a power-of-2, // avoiding a tutti-frutti effect. From Eternity Engine. if (texheight & (texheight - 1)) { // texture height is NOT a power-of-2 // just do a simple blit to the dest buffer (I'm lazy) if (frac < 0) while ((frac += texheight) < 0); else while (frac >= texheight) frac -= texheight; while (count--) { colorfunc(source[frac >> FRACBITS], dest); dest += pitch; if ((frac += fracstep) >= texheight) frac -= texheight; } } else { // texture height is a power-of-2 // do some loop unrolling while (count >= 8)
static forceinline void R_FillColumnGeneric(PIXEL_T* dest, const drawcolumn_t& drawcolumn) { #ifdef RANGECHECK if (drawcolumn.x < 0 || drawcolumn.x >= viewwidth || drawcolumn.yl < 0 || drawcolumn.yh >= viewheight) { Printf (PRINT_HIGH, "R_FillColumn: %i to %i at %i\n", drawcolumn.yl, drawcolumn.yh, drawcolumn.x); return; } #endif int color = drawcolumn.color; int pitch = drawcolumn.pitch_in_pixels; int count = drawcolumn.yh - drawcolumn.yl + 1; if (count <= 0) return; COLORFUNC colorfunc(drawcolumn); do { colorfunc(color, dest); dest += pitch; } while (--count); }