sdlxReadSurfacePixelFloat function surface

bool sdlxReadSurfacePixelFloat(
  1. Pointer<SdlSurface> surface,
  2. SdlxPoint point,
  3. SdlxFColor color
)

Retrieves a single pixel from a surface.

This function prioritizes correctness over speed: it is suitable for unit tests, but is not intended for use in a game engine.

\param surface the surface to read. \param x the horizontal coordinate, 0 <= x < width. \param y the vertical coordinate, 0 <= y < height. \param r a pointer filled in with the red channel, normally in the range 0-1, or NULL to ignore this channel. \param g a pointer filled in with the green channel, normally in the range 0-1, or NULL to ignore this channel. \param b a pointer filled in with the blue channel, normally in the range 0-1, or NULL to ignore this channel. \param a a pointer filled in with the alpha channel, normally in the range 0-1, or NULL to ignore this channel. \returns true on success or false on failure; call SDL_GetError() for more information.

\threadsafety This function can be called on different threads with different surfaces.

\since This function is available since SDL 3.2.0.

extern SDL_DECLSPEC bool SDLCALL SDL_ReadSurfacePixelFloat(SDL_Surface *surface, int x, int y, float *r, float *g, float *b, float *a)

Implementation

bool sdlxReadSurfacePixelFloat(
  Pointer<SdlSurface> surface,
  SdlxPoint point,
  SdlxFColor color,
) {
  final rPointer = ffi.calloc<Float>();
  final gPointer = ffi.calloc<Float>();
  final bPointer = ffi.calloc<Float>();
  final aPointer = ffi.calloc<Float>();
  final result = sdlReadSurfacePixelFloat(
    surface,
    point.x,
    point.y,
    rPointer,
    gPointer,
    bPointer,
    aPointer,
  );
  if (result) {
    color
      ..r = rPointer.value
      ..g = gPointer.value
      ..b = bPointer.value
      ..a = aPointer.value;
  }
  rPointer.callocFree();
  gPointer.callocFree();
  bPointer.callocFree();
  aPointer.callocFree();
  return result;
}