Example #1
0
parg_buffer* parg_buffer_to_gpu(parg_buffer* cpubuf, parg_buffer_type memtype)
{
    int nbytes = parg_buffer_length(cpubuf);
    void* bytes = parg_buffer_lock(cpubuf, PARG_READ);
    parg_buffer* gpubuf = parg_buffer_create(bytes, nbytes, memtype);
    parg_buffer_unlock(cpubuf);
    return gpubuf;
}
Example #2
0
void parg_buffer_to_file(parg_buffer* buf, const char* filepath)
{
    FILE* f = fopen(filepath, "wb");
    parg_verify(f, "Unable to open file", filepath);
    char* contents = parg_buffer_lock(buf, PARG_READ);
    fwrite(contents, 1, parg_buffer_length(buf), f);
    fclose(f);
    parg_buffer_unlock(buf);
}
Example #3
0
parg_buffer* parg_buffer_dup(parg_buffer* srcbuf, parg_buffer_type memtype)
{
    int nbytes = parg_buffer_length(srcbuf);
    parg_buffer* dstbuf = parg_buffer_alloc(nbytes, memtype);
    void* src = parg_buffer_lock(srcbuf, PARG_READ);
    void* dst = parg_buffer_lock(dstbuf, PARG_WRITE);
    memcpy(dst, src, nbytes);
    parg_buffer_unlock(dstbuf);
    parg_buffer_unlock(srcbuf);
    return dstbuf;
}
Example #4
0
void parg_mesh_compute_normals(parg_mesh* mesh)
{
    par_shapes_mesh m = {0};
    int nbytes = parg_buffer_length(mesh->coords);
    m.points = (float*) parg_buffer_lock(mesh->coords, PARG_READ);
    m.triangles = (uint16_t*) parg_buffer_lock(mesh->indices, PARG_READ);
    m.npoints = nbytes / 12;
    m.ntriangles = mesh->ntriangles;
    par_shapes_compute_normals(&m);
    mesh->normals = parg_buffer_create(m.normals, nbytes, PARG_CPU);
    parg_buffer_unlock(mesh->coords);
    parg_buffer_unlock(mesh->indices);
    free(m.normals);
}
Example #5
0
File: asset.c Project: prideout/tol
void parg_asset_preload(parg_token id)
{
    if (!_pngsuffix) {
        _pngsuffix = sdsnew(".png");
    }
    sds filename = parg_token_to_sds(id);
    parg_buffer* buf = parg_buffer_from_path(filename);
    parg_assert(buf, "Unable to load asset");
    if (sdslen(filename) > 4) {
        sds suffix = sdsdup(filename);
        sdsrange(suffix, -4, -1);
        if (!sdscmp(suffix, _pngsuffix)) {
            unsigned char* decoded;
            unsigned dims[3] = {0, 0, 4};
            unsigned char* filedata = parg_buffer_lock(buf, PARG_READ);
            unsigned err = lodepng_decode_memory(&decoded, &dims[0], &dims[1],
                    filedata, parg_buffer_length(buf), LCT_RGBA, 8);
            parg_assert(err == 0, "PNG decoding error");
            parg_buffer_free(buf);
            int nbytes = dims[0] * dims[1] * dims[2];
            buf = parg_buffer_alloc(nbytes + 12, PARG_CPU);
            int* ptr = parg_buffer_lock(buf, PARG_WRITE);
            *ptr++ = dims[0];
            *ptr++ = dims[1];
            *ptr++ = dims[2];
            memcpy(ptr, decoded, nbytes);
            free(decoded);
            parg_buffer_unlock(buf);
        }
        sdsfree(suffix);
    }
    if (!_asset_registry) {
        _asset_registry = kh_init(assmap);
    }
    int ret;
    int iter = kh_put(assmap, _asset_registry, id, &ret);
    kh_value(_asset_registry, iter) = buf;
}