/usr/lib/ocaml/sdl/sdlvideo.mli is in libsdl-ocaml-dev 0.9.1-2build4.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 | (*
* OCamlSDL - An ML interface to the SDL library
* Copyright (C) 1999, 2000, 2001, 2002 OCamlSDL development team
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*)
(** Module for video manipulations *)
(* $Id: sdlvideo.mli,v 1.34 2012/06/19 18:20:59 oliv__a Exp $ *)
open Bigarray
exception Video_exn of string
(** {3 Rectangles} *)
type rect = {
mutable r_x : int ;
mutable r_y : int ;
mutable r_w : int ;
mutable r_h : int ;
}
(** rectangular area (x, y, w, h) *)
val rect : x:int -> y:int -> w:int -> h:int -> rect
val copy_rect : rect -> rect
(** @return a copy of the rectangle *)
(** {3 Video mode informations} *)
type pixel_format_info = {
palette : bool ;
bits_pp : int ; (** bits per pixel *)
bytes_pp : int ; (** bytes per pixel *)
rmask : int32 ; (** red mask value *)
gmask : int32 ; (** green mask value *)
bmask : int32 ; (** blue mask value *)
amask : int32 ; (** alpha mask value *)
rshift : int ;
gshift : int ;
bshift : int ;
ashift : int ;
rloss : int ;
gloss : int ;
bloss : int ;
aloss : int ;
colorkey : int32 ; (** RGB color key information *)
alpha : int ; (** Alpha value information (per-surface alpha) *)
}
(** Structure describing how color are encoded as pixels *)
type video_info = {
hw_available : bool; (** Hardware surfaces? *)
wm_available : bool; (** Window manager present? *)
blit_hw : bool; (** Accelerated blits HW -> HW *)
blit_hw_color_key : bool; (** Accelerated blits with color key *)
blit_hw_alpha : bool; (** Accelerated blits with alpha *)
blit_sw : bool; (** Accelerated blits SW -> HW *)
blit_sw_color_key : bool; (** Accelerated blits with color key *)
blit_sw_alpha : bool; (** Accelerated blits with alpha *)
blit_fill : bool; (** Accelerated color fill *)
video_mem : int; (** Total amount of video memory (Ko) *)
}
(** Information on either the 'best' available mode (if called before
[set_video_mode]) or the current video mode. *)
val get_video_info : unit -> video_info
(** @return information about the video hardware *)
val get_video_info_format : unit -> pixel_format_info
(** @return information about the pixel format *)
val driver_name : unit -> string
(** @return the name of the video driver *)
type video_flag = [
| `SWSURFACE (** Surface is in system memory *)
| `HWSURFACE (** Surface is in video memory *)
| `ASYNCBLIT (** Enables the use of asynchronous updates of the display
surface. This will usually slow down blitting on single
CPU machines, but may provide a speed increase on SMP
systems.*)
| `ANYFORMAT (** Normally, if a video surface of the requested
bits-per-pixel (bpp) is not available, SDL will emulate
one with a shadow surface. Passing [`ANYFORMAT] prevents
this and causes SDL to use the video surface, regardless
of its pixel depth. *)
| `HWPALETTE (** Give SDL exclusive palette access *)
| `DOUBLEBUF (** Enable hardware double buffering; only valid with
[`HWSURFACE]. Calling {!Sdlvideo.flip} will flip the
buffers and update the screen. All drawing will take place
on the surface that is not displayed at the moment. If
double buffering could not be enabled then {!Sdlvideo.flip}
will just perform a {!Sdlvideo.update_rect} on the entire
screen. *)
| `FULLSCREEN (** SDL will attempt to use a fullscreen mode. If a hardware
resolution change is not possible (for whatever reason),
the next higher resolution will be used and the display
window centered on a black background. *)
| `OPENGL (** Create an OpenGL rendering context. You should have
previously set OpenGL video attributes with
SDL_GL_SetAttribute. *)
| `OPENGLBLIT (** Create an OpenGL rendering context, like above, but allow
normal blitting operations. The screen (2D) surface may
have an alpha channel, and {!Sdlvideo.update_rect} must
be used for updating changes to the screen surface. *)
| `RESIZABLE (** Create a resizable window. When the window is resized by
the user a {!Sdlevent2.VIDEORESIIZE} event is generated
and {!Sdlvideo.set_video_mode} can be called again with
the new size. *)
| `NOFRAME (** If possible, [`NOFRAME] causes SDL to create a window
with no title bar or frame decoration. Fullscreen modes
automatically have this flag set. *)
]
type modes =
| NOMODE (** no dimensions available for the requested format *)
| ANY (** any dimension okay *)
| DIM of (int * int) list
val list_modes : ?bpp:int -> video_flag list -> modes
(** @return a list of available screen dimensions for the given format
and video flags, sorted largest to smallest or NOMODE or ANY *)
val video_mode_ok : w:int -> h:int -> bpp:int -> video_flag list -> int
(** Check to see if a particular video mode is supported.
@return 0 if the requested mode is not supported or returns the
bits-per-pixel of the closest available mode with the given width
and height. If this bits-per-pixel is different from the one used
when setting the video mode, set_video_mode will succeed, but will
emulate the requested bits-per-pixel with a shadow surface. *)
(** {3 Surfaces} *)
type surface
(** Graphical surface datatype *)
type surface_flags = [
| video_flag
| `HWACCEL (** Blit uses hardware acceleration *)
| `SRCCOLORKEY (** Blit uses a source color key *)
| `RLEACCEL (** Surface is RLE encoded *)
| `SRCALPHA (** Blit uses source alpha blending *)
| `PREALLOC (** Surface uses preallocated memory *)
]
type surface_info = {
flags : surface_flags list ;
w : int ; (** width *)
h : int ; (** height *)
pitch : int ; (** pitch *)
clip_rect : rect ; (** clipping information *)
refcount : int ; (** reference count *)
}
val surface_info : surface -> surface_info
(** @return information for the given [surface] *)
val surface_format : surface -> pixel_format_info
(** @return pixel format information for the given [surface] *)
val surface_dims : surface -> int * int * int
(** @return width, height and pitch of the given [surface] *)
val surface_flags : surface -> surface_flags list
(** @return flag list for the given [surface] *)
val surface_bpp : surface -> int
(** @return bits-per-pixel for the given [surface] *)
(** {3 Video modes-related functions} *)
val get_video_surface : unit -> surface
(** @return the current display [surface] *)
val set_video_mode :
w:int -> h:int -> ?bpp:int -> video_flag list -> surface
(** Set up a video mode with the specified [width], [height] and
[bits-per-pixel].
@param bpp if omited, it is treated as the current display bits per
pixel
@return the current display [surface] *)
val update_rect : ?rect:rect -> surface -> unit
(** @param rect makes sure the given area is updated on the given
screen. The rectangle must be confined within the screen boundaries
(no clipping is done). Updates the entire screen if omitted *)
val update_rects : rect list -> surface -> unit
(** Makes sure the given list of rectangles is updated on the given
screen. The rectangles must all be confined within the screen
boundaries (no clipping is done).
This function should not be called while screen is locked.*)
val flip : surface -> unit
(** Swaps screen buffers.
On hardware that supports double-buffering ([`DOUBLEBUF]), this function
sets up a flip and returns. The hardware will wait for vertical retrace,
and then swap video buffers before the next video surface blit or lock
will return.
On hardware that doesn't support double-buffering, this is equivalent to
calling [update_rect]
*)
(** {3 Color manipulation} *)
val set_gamma : r:float -> g:float -> b:float -> unit
(** Set the gamma correction for each of the color channels.
The gamma values range (approximately) between 0.1 and 10.0
If this function isn't supported directly by the hardware, it will
be emulated using gamma ramps, if available.*)
type color = int * int * int
(** Format independent color description [(r,g,b)] are 8 bits unsigned
integers *)
val black : color
val white : color
val red : color
val green : color
val blue : color
val yellow : color
val cyan : color
val magenta : color
(** {4 Palettes} *)
val use_palette : surface -> bool
(** @return [true] if surface use indexed colors *)
val palette_ncolors : surface -> int
(** Number of colors in the surface's palette *)
val get_palette_color : surface -> int -> color
(** Retrieve a color by its index in a surface's palette *)
type palette_flag =
| LOGPAL (** set logical palette, which controls how blits are mapped
to/from the surface *)
| PHYSPAL (** set physical palette, which controls how pixels
look on the screen *)
| LOGPHYSPAL
val set_palette : surface ->
?flag:palette_flag -> ?firstcolor:int -> color array -> unit
(** Sets a portion of the palette for a given 8-bit [surface].
@param flag defaults to LOGPHYSPAL
@param firstcolor where to blit the color array given as argument
(defaults to 0)
*)
(** {4 Conversions} *)
val map_RGB : surface -> ?alpha:int -> color -> int32
(** Maps an RGB triple or an RGBA quadruple to a pixel value for a given
pixel format *)
val get_RGB : surface -> int32 -> color
(** Maps a pixel value into the RGB components for a given pixel format
@return RGB color *)
val get_RGBA : surface -> int32 -> color * int
(** Maps a pixel value into the RGBA components for a given pixel format *
@return RGB color and alpha value *)
(** {3 Creating RGB surface} *)
val create_RGB_surface :
[ `SWSURFACE | `HWSURFACE | `ASYNCBLIT | `SRCCOLORKEY | `SRCALPHA ] list ->
w:int -> h:int -> bpp:int ->
rmask:int32 -> gmask:int32 -> bmask:int32 -> amask:int32 -> surface
(** Creates a RGB surface.
If the depth is 4 or 8 bits, an empty palette is allocated
for the surface. If the depth is greater than 8 bits, the pixel format is
set using the given masks.
@return the new surface *)
val create_RGB_surface_format : surface ->
[ `SWSURFACE | `HWSURFACE | `ASYNCBLIT | `SRCCOLORKEY | `SRCALPHA ] list ->
w:int -> h:int -> surface
(** Creates a RGB surface with the same pixel format as the first
parameter. *)
val create_RGB_surface_from_32 :
(int32, int32_elt, c_layout) Array1.t ->
w:int -> h:int -> pitch:int ->
rmask:int32 -> gmask:int32 -> bmask:int32 -> amask:int32 -> surface
val create_RGB_surface_from_24 :
(int, int8_unsigned_elt, c_layout) Array1.t ->
w:int -> h:int -> pitch:int ->
rmask:int -> gmask:int -> bmask:int -> amask:int -> surface
val create_RGB_surface_from_16 :
(int, int16_unsigned_elt, c_layout) Array1.t ->
w:int -> h:int -> pitch:int ->
rmask:int -> gmask:int -> bmask:int -> amask:int -> surface
val create_RGB_surface_from_8 :
(int, int8_unsigned_elt, c_layout) Array1.t ->
w:int -> h:int -> pitch:int ->
rmask:int -> gmask:int -> bmask:int -> amask:int -> surface
(** {3 Locking/Unlocking surface} *)
val must_lock : surface -> bool
(** @return [true] if the surface should be locked before accessing
its pixels *)
val lock : surface -> unit
(** Sets up a surface for directly accessing the pixels. *)
val unlock : surface -> unit
(** Releases the lock on the given [surface] *)
(** {3 Accessing surface pixels} *)
val pixel_data : surface -> (int, int8_unsigned_elt, c_layout) Array1.t
val pixel_data_8 : surface -> (int, int8_unsigned_elt, c_layout) Array1.t
val pixel_data_16 : surface -> (int, int16_unsigned_elt, c_layout) Array1.t
val pixel_data_24 : surface -> (int, int8_unsigned_elt, c_layout) Array1.t
val pixel_data_32 : surface -> (int32, int32_elt, c_layout) Array1.t
val get_pixel : surface -> x:int -> y:int -> int32
val get_pixel_color : surface -> x:int -> y:int -> color
(** Access an individual pixel on a surface and returns is as a [color].
The surface may have to be locked before access. *)
val put_pixel : surface -> x:int -> y:int -> int32 -> unit
val put_pixel_color : surface -> x:int -> y:int -> color -> unit
(** Sets an individual pixel on a surface.
The surface may have to be locked before access. *)
(** {3 Reading/writing in BMP files} *)
val load_BMP : string -> surface
(** Loads a surface from a named Windows BMP file.*)
val load_BMP_from_mem : string -> surface
(** Loads a BMP image from a memory buffer. *)
val save_BMP : surface -> string -> unit
(** Saves the [surface] as a Windows BMP file named file. *)
(** {3 Colorkey and alpha stuff} *)
val unset_color_key : surface -> unit
val set_color_key : surface -> ?rle:bool -> int32 -> unit
(** Sets the color key (transparent pixel) in a blittable [surface]. *)
val get_color_key : surface -> int32
(** @return the color key of the given [surface] *)
val unset_alpha : surface -> unit
val set_alpha : surface -> ?rle:bool -> int -> unit
(** sets the alpha value for the entire [surface], as opposed to
using the alpha component of each pixel. *)
val get_alpha : surface -> int
(** @return the alpha value of the given [surface] *)
(** {3 Clipping} *)
val unset_clip_rect : surface -> unit
(** disable clipping for the given [surface] *)
val set_clip_rect : surface -> rect -> unit
(** Sets the clipping rectangle for the destination [surface] in a blit. *)
val get_clip_rect : surface -> rect
(** @return the clipping rectangle for the destination [surface] in a blit. *)
(** {3 Blitting} *)
val blit_surface :
src:surface -> ?src_rect:rect ->
dst:surface -> ?dst_rect:rect -> unit -> unit
(** Performs a fast blit from the source [surface]
to the destination [surface].
@param src_rect the width and height determine the size of the
copied rectangle. If omitted, the entire surface is copied.
@param dst_rect only the position is used (the width and height are
ignored). If omitted, the detination position (upper left corner)
is (0, 0).
The final blit rectangles are saved in [src_rect] and [dst_rect]
after all clipping is performed.
The blit function should not be called on a locked surface.
*)
val fill_rect : ?rect:rect -> surface -> int32 -> unit
(** performs a fast fill of the given rectangle with 'color' *)
val display_format : ?alpha:bool -> surface -> surface
(** This function takes a surface and copies it to a new surface of the
pixel format and colors of the video framebuffer, suitable for fast
blitting onto the display surface.
@param alpha if [true], include an alpha channel in the new surface *)
|