Exemplo n.º 1
0
void rs_gen_func_normalize(int dest, float vmin, float vmax) {


        // LAGGY !!!!!!!!!!!!!

    float val_min = rs_gen_reg.tex[dest*rs_gen_reg.tex_length];
    float val_max = rs_gen_reg.tex[dest*rs_gen_reg.tex_length];
    float f;

    int i, j;

    for (i = 0; i < rs_gen_reg.tex_size; i++) {
        for (j = 0; j < rs_gen_reg.tex_size; j++) {
            f = rs_gen_reg.tex[dest*rs_gen_reg.tex_length + i*rs_gen_reg.tex_size + j] ;
            val_max = rs_max(val_max, f);
            val_min = rs_min(val_min, f);
        };
    };

    float val_scale = (vmax - vmin) / (val_max - val_min) - vmin;

    for (i = 0; i < rs_gen_reg.tex_size; i++) {
        for (j = 0; j < rs_gen_reg.tex_size; j++) {
            rs_gen_reg.tex[dest*rs_gen_reg.tex_length + i*rs_gen_reg.tex_size + j] =
                vmin + val_scale * ( rs_gen_reg.tex[dest*rs_gen_reg.tex_length + i*rs_gen_reg.tex_size + j] - val_min);
        };
    };
};
Exemplo n.º 2
0
char *rs_strerror(rs_err_t err, char *errstr, size_t size) 
{
    char *msg;

    msg = ((uint32_t) err < RS_SYS_NERR) ? rs_sys_errlist[err]
        : rs_unknown_error; // not modify

    size = rs_min(size, rs_strlen(msg));

    return rs_cpymem(errstr, msg, size);
}
Exemplo n.º 3
0
int rs_binlog_query_handler(rs_reqdump_data_t *rd) 
{
    int                 r;
    rs_binlog_info_t    *bi;
    char                query[rd->binlog_info.dl], *p;

    bi = &(rd->binlog_info);
    p = query;

    if(bi->dl > RS_SQL_MAX_LEN * 2) {
        bi->skip = 1;
        return RS_OK;
    }

    /* get query event fixed data */ 
    if((r = rs_eof_read_binlog2(rd, query, bi->dl)) != RS_OK) 
    {
        return r;
    }

    /* seek after flags and unwant fixed data */
    p += RS_BINLOG_QUERY_THREAD_ID_LEN + RS_BINLOG_QUERY_EXEC_SEC_LEN;

    /* get database name len */
    rs_memcpy(&(bi->dbl), p, RS_BINLOG_QUERY_DB_NAME_LEN);
    bi->dbl = (bi->dbl & 0x000000FF) + 1;
    p += RS_BINLOG_QUERY_DB_NAME_LEN + RS_BINLOG_QUERY_ERR_CODE_LEN;

    /* get status block len */
    rs_memcpy(&(bi->sbl), p, RS_BINLOG_QUERY_STAT_BLOCK_LEN);
    bi->sbl = bi->sbl & 0x0000FFFF; 
    p += RS_BINLOG_QUERY_STAT_BLOCK_LEN + bi->sbl;

    /* get database name */
    rs_memcpy(bi->db, p, bi->dbl);
    p += bi->dbl;

    /* filter care about list */
    bi->sl = bi->el - RS_BINLOG_EVENT_HEADER_LEN - bi->sbl - 
        RS_BINLOG_QUERY_FIXED_DATA_LEN - bi->dbl; 

    bi->sl = rs_min(RS_SQL_MAX_LEN, bi->sl);

    rs_memcpy(bi->sql, p, bi->sl);

    bi->sql[bi->sl] = '\0';
    bi->log_format = RS_BINLOG_FORMAT_SQL_STATEMENT;

    rs_log_debug(RS_DEBUG_BINLOG, 0, 
            "\ndatabase name          : %s\n"
            "query sql              : %s\n"
            "next position          : %u\n",
            bi->db,
            bi->sql,
            bi->np
            );

    if(rs_strncmp(bi->sql, RS_TRAN_KEYWORD, RS_TRAN_KEYWORD_LEN) == 0) {
        bi->tran = 1;
    } else if(rs_strncmp(bi->sql, RS_TRAN_END_KEYWORD, 
                RS_TRAN_END_KEYWORD_LEN) == 0) {
        bi->tran = 0;
    } else {
    }

    return RS_OK;
}
 double sunlit_stomata_conductance () const
 { return 1.0 / rs_min (); }
 double shadow_stomata_conductance () const
 { return 1.0 / rs_min (); }
Exemplo n.º 6
0
int rs_eof_read_binlog2(rs_reqdump_data_t *rd, void *buf, size_t size) 
{
    int         wd1, wd2, err, r;
    size_t      ms, n, ls, tl; 
    ssize_t     l;
    struct      inotify_event *e;
    char        eb[1024], *p, *f;

    n = 0;
    wd1 = -1;
    wd2 = -2;
    f = buf;
    r = RS_ERR;
    ms = rs_min((uint32_t) (rd->io_buf->last - rd->io_buf->pos), size);

    /* use io_buf */
    if(ms > 0) {
        f = rs_cpymem(f, rd->io_buf->pos, ms);
        rd->io_buf->pos += ms;
    }

    while(ms < size) {

        /* feed io_buf */
        n = fread(rd->io_buf->start, 1, rd->io_buf->size, rd->binlog_fp);

        if(n > 0) {
            ls = rs_min(n, size - ms);

            f = rs_cpymem(f, rd->io_buf->start, ls);

            rd->io_buf->pos = rd->io_buf->start + ls; 
            rd->io_buf->last = rd->io_buf->start + n;

            ms += ls;
        } else {

            if(feof(rd->binlog_fp) == 0) {
                if((err = ferror(rd->binlog_fp)) != 0) {
                    /* file error */
                    rs_log_error(RS_LOG_ERR, err, "ferror(\"%s\") failed", 
                            rd->dump_file);
                    goto free;
                }
            }

            /* set inotify */
            if(rd->notify_fd == -1) {
                rd->notify_fd = rs_init_io_watch();

                if(rd->notify_fd < 0) {
                    goto free;
                }

                wd1 = rs_add_io_watch(rd->notify_fd, rd->dump_file, 
                        RS_IN_MODIFY);

                wd2 = inotify_add_watch(rd->notify_fd, 
                        rs_master_info->binlog_idx_file, RS_IN_MODIFY);

                if(wd1 < 0 || wd2 < 0) {
                    goto free;
                }
            }

            /* test has binlog */
            if((err = rs_has_next_binlog(rd)) == RS_OK) {
                r = RS_HAS_BINLOG;
                goto free;
            }

            if(err == RS_ERR) {
                goto free;
            }

            /* sleep wait, release cpu */
            err = rs_timed_select(rd->notify_fd, RS_BINLOG_EOF_WAIT_SEC, 0);

            if(err == RS_ERR) {
                goto free;
            } else if(err == RS_TIMEDOUT) {
                continue;
            }

            l = rs_read(rd->notify_fd, eb, 1024);

            if(l <= 0) {
                goto free;
            }

            p = eb;

            e = (struct inotify_event *) eb;
            if(e == NULL) {
                goto free;
            }

            while (((char *) e - eb) < l) {
                if (e->wd == wd1 && e->mask & RS_IN_MODIFY) {
                    break;
                } else if(e->wd == wd2 && e->mask & RS_IN_MODIFY) {
                    break;
                }

                tl = sizeof(struct inotify_event) + e->len;
                e = (struct inotify_event *) (p + tl); 

                if(e == NULL) {
                    break;
                }

                p += tl;
            } // end while
        }
    }

    r = RS_OK; 
    clearerr(rd->binlog_fp);

free:

    if(rd->notify_fd != -1) {
        if(close(rd->notify_fd) != 0) {
            rs_log_error(RS_LOG_ERR, rs_errno, "close() failed"); 
            r = RS_ERR;
        }

        rd->notify_fd = -1;
    }

    return r;
}
Exemplo n.º 7
0
void TransformMesh::Initialize(int gridSize, int minGridSize, double gridSizeOverrideRatio,
                               RS_Bounds& srcExt, int srcW, int srcH,
                               RS_Bounds& destExt, int destW, int destH,
                               CSysTransformer* xformer,
                               bool invertYaxis)
{
    _ASSERT(xformer != NULL);
    _ASSERT(gridSize > 0 && minGridSize > 0 && srcW > 0 && srcH > 0 && destW > 0 && destH > 0);
    _ASSERT(gridSizeOverrideRatio >= MIN_GRID_SIZE_OVERRIDE_RATIO && gridSizeOverrideRatio <= MAX_GRID_SIZE_OVERRIDE_RATIO);

    // initialize members
    m_minGridSize = minGridSize;
    m_gridSizeOverrideRatio = gridSizeOverrideRatio;

    int calculatedGridSize = gridSize;

    // if the override is enabled (0 < ratio < 1), then adjust if necessary
    if (gridSizeOverrideRatio < MAX_GRID_SIZE_OVERRIDE_RATIO
        && gridSizeOverrideRatio > MIN_GRID_SIZE_OVERRIDE_RATIO)
    {
        // the calculated grid size is the minimum of the passed in grid size and the overrided grid size
        calculatedGridSize = rs_min(gridSize, (int)(rs_min(srcH, srcW) * m_gridSizeOverrideRatio));
    }

    // we check to make sure the minGridSize is less that gridSize
    // -- in case we are given a minGridSize that is greater than the gridSize
    // ensure grid size is not less than the minimum
    if (minGridSize < gridSize)
    {
        calculatedGridSize = rs_max(minGridSize, calculatedGridSize);
    }

    // ensure grid size is not bigger than the source image's height and width
    m_gridSizeHeight = rs_min(calculatedGridSize, srcH);
    m_gridSizeWidth = rs_min(calculatedGridSize, srcW);


    m_yAxisInverted = invertYaxis;
    m_meshPoints.empty();
    m_numVerticalPoints = 0;
    m_numHorizontalPoints = 0;

    double pixPerSrcUnitX = (double)srcW / srcExt.width();
    double pixPerSrcUnitY = (double)srcH / srcExt.height();
    double pixPerDestUnitX = (double)destW / destExt.width();
    double pixPerDestUnitY = (double)destH / destExt.height();

    // Create a grid in pixel space that covers the whole src extent
    for (int gridX = 0; gridX < srcW + m_gridSizeWidth; gridX += m_gridSizeWidth)
    {
        ++m_numHorizontalPoints;

        // this sets the x-coordinate to the end pt if it gets close
        if (gridX + MAX_GRID_EXPANSION_FACTOR * m_gridSizeWidth > srcW || gridX > srcW)
        {
            gridX = srcW;
        }

        for (int gridY = 0; gridY < srcH + m_gridSizeHeight; gridY += m_gridSizeHeight)
        {
            if (gridX == 0)
                ++m_numVerticalPoints;

            // this sets the y-coordinate to the end pt if it gets close
            if (gridY + MAX_GRID_EXPANSION_FACTOR * m_gridSizeHeight > srcH || gridY > srcH)
                gridY = srcH;

            // The point in pixel coordinates in the src image
            RS_F_Point src_pt0(gridX, gridY);

            // Convert from screen coordinates to src CS coordinates (note that the screen coords are inverted because the
            // invert y axis based upon the setting
            RS_F_Point srcCS_pt0(src_pt0.x / pixPerSrcUnitX + srcExt.minx,
                (m_yAxisInverted ? (srcH - src_pt0.y) : src_pt0.y) / pixPerSrcUnitY + srcExt.miny);

            // Convert from src cs to dest cs coordinates
            RS_F_Point destCS_pt0(srcCS_pt0.x, srcCS_pt0.y);
            xformer->TransformPoint(destCS_pt0.x, destCS_pt0.y);

            // Convert from dest CS coordinates to dest pixel coordinates.
            RS_F_Point dest_pt0((destCS_pt0.x - destExt.minx) * pixPerDestUnitX,
                (destCS_pt0.y - destExt.miny) * pixPerDestUnitY);

            // Store the point mapping in the transform mesh
            MeshPoint mesh_pt;
            mesh_pt.pt_src = src_pt0;
            mesh_pt.pt_dest = dest_pt0;
            m_meshPoints.push_back(mesh_pt);
        }
    }
}
Exemplo n.º 8
0
void rs_gen_func_normalmap(int dest_r, int dest_g, int dest_b, int src, float k) {
    int i, j;
    float max_val = -111111.0;
    float min_val = 100000.0;
    for (i = 0; i < rs_gen_reg.tex_size; i++) {
        for (j = 0; j < rs_gen_reg.tex_size; j++) {
            unsigned short um = rs_gen_reg.tex_size + j-2;
            unsigned short vm = rs_gen_reg.tex_size + i-2;

            unsigned short u = j;
            unsigned short v = i;

            unsigned short up = j+2;
            unsigned short vp = i+2;

            um  %= rs_gen_reg.tex_size;
            vm  %= rs_gen_reg.tex_size;
            up %= rs_gen_reg.tex_size;
            vp %= rs_gen_reg.tex_size;

//            float val1 = rs_gen_reg.tex[src*rs_gen_reg.tex_length + v*rs_gen_reg.tex_size + u];

            float val_xp = 2.0 * rs_gen_reg.tex[src*rs_gen_reg.tex_length +  v*rs_gen_reg.tex_size + up]
                + rs_gen_reg.tex[src*rs_gen_reg.tex_length +  vm*rs_gen_reg.tex_size + up]
                + rs_gen_reg.tex[src*rs_gen_reg.tex_length +  vp*rs_gen_reg.tex_size + up];

            float val_xm = 2.0 * rs_gen_reg.tex[src*rs_gen_reg.tex_length +  v*rs_gen_reg.tex_size + um]
                + rs_gen_reg.tex[src*rs_gen_reg.tex_length +  vm*rs_gen_reg.tex_size + um]
                + rs_gen_reg.tex[src*rs_gen_reg.tex_length +  vp*rs_gen_reg.tex_size + um];

            float val_yp = 2.0 * rs_gen_reg.tex[src*rs_gen_reg.tex_length +  vp*rs_gen_reg.tex_size + u]
                + rs_gen_reg.tex[src*rs_gen_reg.tex_length +  vp*rs_gen_reg.tex_size + um]
                + rs_gen_reg.tex[src*rs_gen_reg.tex_length +  vp*rs_gen_reg.tex_size + up];

            float val_ym = 2.0 * rs_gen_reg.tex[src*rs_gen_reg.tex_length +  vm*rs_gen_reg.tex_size + u]
                + rs_gen_reg.tex[src*rs_gen_reg.tex_length +  vm*rs_gen_reg.tex_size + um]
                + rs_gen_reg.tex[src*rs_gen_reg.tex_length +  vm*rs_gen_reg.tex_size + up];

//            float val_dx = rs_gen_reg.tex[src*rs_gen_reg.tex_length +  v*rs_gen_reg.tex_size + u2] - val1;
//            float val_dy = rs_gen_reg.tex[src*rs_gen_reg.tex_length + v2*rs_gen_reg.tex_size +  u] - val1;

            float val_dx = val_xp - val_xm;
            float val_dy = val_yp - val_ym;



//            val_dx = val_dx;
//            val_dy = -val_dy;

//            val_dx = atan(val_dx * rs_gen_reg.tex_size ) / (M_PI/2);
//            val_dy = atan(val_dy * rs_gen_reg.tex_size ) / (M_PI/2);

            float bump_scale = 128.0 / rs_gen_reg.tex_size / k;

            rs_vec3_t bump = rs_vec3_cross( rs_vec3_normalize(rs_vec3(bump_scale, 0.0, val_dy)),
                rs_vec3_normalize(rs_vec3(0.0, bump_scale, -val_dx)));



            float val_dz = sqrtf( 1.0 - (RS_SQR(k*val_dx) + RS_SQR(k*val_dy)) );
//            val_dz = val_dz;

//            val_dz = 1.0 / 2.0;

            val_dx = 0.5 + 0.5*val_dx;
            val_dy = 0.5 + 0.5*val_dy;
            val_dz = 0.5 + 0.5*val_dz;

            max_val = rs_max(max_val, fabs(val_dx) );
//            max_val = rs_max(max_val, fabs(val_dy) );
            min_val = rs_min(min_val, val_dx);
//            min_val = rs_min(min_val, val_dy);

//            rs_gen_reg.tex[dest_r*rs_gen_reg.tex_length + i*rs_gen_reg.tex_size + j] = val_dy;
//            rs_gen_reg.tex[dest_g*rs_gen_reg.tex_length + i*rs_gen_reg.tex_size + j] = val_dx;
//            rs_gen_reg.tex[dest_b*rs_gen_reg.tex_length + i*rs_gen_reg.tex_size + j] = val_dz;

            rs_gen_reg.tex[dest_r*rs_gen_reg.tex_length + i*rs_gen_reg.tex_size + j] = 0.5 + 0.5*bump.x;
            rs_gen_reg.tex[dest_g*rs_gen_reg.tex_length + i*rs_gen_reg.tex_size + j] = 0.5 + 0.5*bump.y;
            rs_gen_reg.tex[dest_b*rs_gen_reg.tex_length + i*rs_gen_reg.tex_size + j] = 0.5 + 0.5*bump.z;

        };
    };

//////    if (max_val < 0.001) {
//////        DEBUG10f("WARNING, max_val of normalmap is too low (%.9f) \n", max_val);
//////        max_val = 0.001;
//////    };
//////
//////    max_val *= 1.0;
//////
//////    for (i = 0; i < rs_gen_reg.tex_size; i++) {
//////        for (j = 0; j < rs_gen_reg.tex_size; j++) {
//////
//////            rs_gen_reg.tex[dest_r*rs_gen_reg.tex_length + i*rs_gen_reg.tex_size + j] /= max_val;
//////            rs_gen_reg.tex[dest_g*rs_gen_reg.tex_length + i*rs_gen_reg.tex_size + j] /= max_val;
//////
//////            rs_gen_reg.tex[dest_b*rs_gen_reg.tex_length + i*rs_gen_reg.tex_size + j] =
//////                sqrtf( 1.0 - (RS_SQR(rs_gen_reg.tex[dest_r*rs_gen_reg.tex_length + i*rs_gen_reg.tex_size + j])
//////                    + RS_SQR(rs_gen_reg.tex[dest_g*rs_gen_reg.tex_length + i*rs_gen_reg.tex_size + j])) );
//////
//////
//////            rs_gen_reg.tex[dest_r*rs_gen_reg.tex_length + i*rs_gen_reg.tex_size + j] =
//////                0.5 + 0.5*rs_gen_reg.tex[dest_r*rs_gen_reg.tex_length + i*rs_gen_reg.tex_size + j];
//////            rs_gen_reg.tex[dest_g*rs_gen_reg.tex_length + i*rs_gen_reg.tex_size + j] =
//////                0.5 + 0.5*rs_gen_reg.tex[dest_g*rs_gen_reg.tex_length + i*rs_gen_reg.tex_size + j];
//////
//////
////////            float val_dx = rs_gen_reg.tex[dest_r*rs_gen_reg.tex_length + i*rs_gen_reg.tex_size + j];
////////            float val_dy = rs_gen_reg.tex[dest_g*rs_gen_reg.tex_length + i*rs_gen_reg.tex_size + j];
////////
////////            float val_dz = sqrtf( 1.0 - (RS_SQR(k*val_dx) + RS_SQR(k*val_dy)) );
//////
////////            val_dx = 0.5 + 0.5*k*val_dx;
////////            val_dy = 0.5 + 0.5*k*val_dy;
////////            val_dz = 0.5 + 0.5*val_dz;
//////
//////
//////            //rs_gen_reg.tex[dest_b*rs_gen_reg.tex_length + i*rs_gen_reg.tex_size + j] = val_dz;
//////
//////        };
//////    };

//    DEBUG10f("\n\nmax val %.3f \nmin %.3f \n", max_val, min_val);

};