示例#1
0
CAMLprim value
caml_SDL_SurfaceGetPixel8(value surface, value x, value y)
{
    Uint8 *pixels = (Uint8 *) SDL_Surface_val(surface)->pixels;
    int width = SDL_Surface_val(surface)->w;
    int ofs = (Long_val(y) * width) + Long_val(x);
    return caml_copy_int32(pixels[ofs]);
}
示例#2
0
CAMLprim value
caml_SDL_SurfaceGetDims(value surface)
{
    CAMLparam1(surface);
    CAMLlocal1(dims);
    dims = caml_alloc(2, 0);
    Store_field(dims, 0, Val_int(SDL_Surface_val(surface)->w));
    Store_field(dims, 1, Val_int(SDL_Surface_val(surface)->h));
    CAMLreturn(dims);
}
示例#3
0
CAMLprim value
caml_SDL_BlitSurfs(
        value src, value dst, value _dstrect)
{
    CAMLparam3(src, dst, _dstrect);
    SDL_Rect dstrect;
    SDL_Rect_val(&dstrect, _dstrect);
    int r = SDL_BlitSurface(
        SDL_Surface_val(src), NULL,
        SDL_Surface_val(dst), &dstrect);
    if (r) caml_failwith("Sdlsurface.blit_surfs");
    CAMLreturn(Val_unit);
}
示例#4
0
CAMLprim value
caml_SDL_Surface_ba_get_pixels(value surface)
{
    SDL_Surface *surf = SDL_Surface_val(surface);

    Uint8 bpp = surf->format->BitsPerPixel;
    int b_flag = 0;
    long dim = surf->h;

    switch (bpp) {
      case 8:
        dim *= surf->pitch;
        b_flag |= CAML_BA_UINT8; break;
      case 16:
        dim *= surf->pitch / 2;
        b_flag |= CAML_BA_UINT16; break;
      case 24:
        dim *= surf->pitch;
        b_flag |= CAML_BA_UINT8; break;
      case 32:
        dim *= surf->pitch / 4;
        b_flag |= CAML_BA_INT32; break;
      case 64:
        dim *= surf->pitch / 8;
        b_flag |= CAML_BA_INT64; break;
      default:
        caml_failwith("Sdlsurface_ba.get_pixels");
    }

    b_flag |= CAML_BA_C_LAYOUT | CAML_BA_EXTERNAL ;

    return caml_ba_alloc(b_flag, 1, surf->pixels, &dim);
}
示例#5
0
CAMLprim value
caml_SDL_SaveBMP(value surf, value filename)
{
    int r = SDL_SaveBMP(SDL_Surface_val(surf), String_val(filename));
    if (r) caml_failwith("Sdlsurface.save_bmp");
    return Val_unit;
}
示例#6
0
CAMLprim value
caml_SDL_BlitSurface(
        value src, value _srcrect,
        value dst, value _dstrect)
{
    CAMLparam4(src, _srcrect, dst, _dstrect);
    CAMLlocal1(ret);
    SDL_Rect dstrect;
    SDL_Rect srcrect;
    SDL_Rect_val(&dstrect, _dstrect);
    SDL_Rect_val(&srcrect, _srcrect);
    int r = SDL_BlitSurface(
        SDL_Surface_val(src), &srcrect,
        SDL_Surface_val(dst), &dstrect);
    if (r) caml_failwith("Sdlsurface.blit_surface");
    Val_SDL_Rect(ret, &dstrect);
    CAMLreturn(ret);
}
示例#7
0
CAMLprim value
caml_SDL_Surface_get_pixelformat_t(value surface)
{
    SDL_PixelFormat *pixel_format =
        SDL_Surface_val(surface)->format;

    Uint32 format = pixel_format->format;

    return Val_Sdl_pixelformat_t(format);
}
示例#8
0
CAMLprim value sdlimagestub_savepng(value surf, value file)
{
	CAMLparam2(surf, file);
	int ret = IMG_SavePNG(
		String_val(file),
		SDL_Surface_val(surf),
		IMG_COMPRESS_MAX);
	if(ret != 0) raise_failure();
	CAMLreturn(Val_unit);
}
示例#9
0
CAMLprim value
caml_SDL_Surface_Blit_Pixels(
        value surf, value pixels_buffer)
{
    SDL_Surface *surface = SDL_Surface_val(surf);
    memcpy(surface->pixels,
        String_val(pixels_buffer),
        caml_string_length(pixels_buffer));
    return Val_unit;
}
示例#10
0
CAMLprim value
caml_SDL_CreateTextureFromSurface(value renderer, value surface)
{
    SDL_Texture *tex =
        SDL_CreateTextureFromSurface(
                SDL_Renderer_val(renderer),
                SDL_Surface_val(surface));
    if (!tex)
        caml_failwith("Sdltexture.create_from_surface");
    return Val_SDL_Texture(tex);
}
示例#11
0
CAMLprim value
caml_SDL_SetColorKey(value surface, value flag, value key)
{
    /* TODO:
     *  You can pass SDL_RLEACCEL to enable RLE accelerated blits.
     */
    int r = SDL_SetColorKey(
        SDL_Surface_val(surface), Bool_val(flag), Int32_val(key));
    if (r) caml_failwith("Sdlsurface.set_color_key");
    return Val_unit;
}
示例#12
0
CAMLprim value
caml_SDL_SetSurfaceBlendMode(
        value surface,
        value blendMode)
{
    int r =
        SDL_SetSurfaceBlendMode(
            SDL_Surface_val(surface),
            SDL_BlendMode_val(blendMode));
    if (r) caml_failwith("Sdlsurface.set_blend_mode");
    return Val_unit;
}
示例#13
0
CAMLprim value
caml_SDL_FillRect(
        value dst,
        value rect,
        value color)
{
    SDL_Rect _rect;
    SDL_Rect_val(&_rect, rect);
    int r = SDL_FillRect(
        SDL_Surface_val(dst), &_rect,
        Int32_val(color));
    if (r) caml_failwith("Sdlsurface.fill_rect");
    return Val_unit;
}
示例#14
0
CAMLprim value
caml_SDL_Surface_get_pixels(value surface)
{
    SDL_Surface *surf = SDL_Surface_val(surface);

    unsigned int len =
        surf->w * surf->h *
        surf->format->BytesPerPixel;

    value ml_pixels = caml_alloc_string(len);
    memcpy(String_val(ml_pixels), surf->pixels, len);

    return ml_pixels;
}
示例#15
0
CAMLprim value
caml_SDL_FreeSurface(value surf)
{
    SDL_FreeSurface(SDL_Surface_val(surf));
    return Val_unit;
}
示例#16
0
CAMLprim value
caml_SDL_SurfacePaletteColors(value surface)
{
    return Val_int(
        SDL_SurfacePaletteColors(SDL_Surface_val(surface)));
}
示例#17
0
CAMLprim value
caml_SDL_SurfaceHasPalette(value surface)
{
    SDL_bool b = SDL_SurfaceHasPalette(SDL_Surface_val(surface));
    return Val_bool(b);
}
示例#18
0
CAMLprim value
caml_SDL_SurfaceGetBitsPerPixel(value surface)
{
    return Val_int(
        SDL_Surface_val(surface)->format->BitsPerPixel);
}
示例#19
0
CAMLprim value
caml_SDL_SurfaceGetPitch(value surface)
{
    return Val_int(SDL_Surface_val(surface)->pitch);
}
示例#20
0
CAMLprim value
caml_SDL_SurfaceGetHeight(value surface)
{
    return Val_int(SDL_Surface_val(surface)->h);
}
示例#21
0
CAMLprim value
caml_SDL_SurfaceGetWidth(value surface)
{
    return Val_int(SDL_Surface_val(surface)->w);
}