sdlxLockTexture function render

({int pitch, Pointer<Void> pixels})? sdlxLockTexture(
  1. Pointer<SdlTexture> texture, {
  2. SdlxRect? rect,
})

Lock a portion of the texture for write-only pixel access.

As an optimization, the pixels made available for editing don't necessarily contain the old texture data. This is a write-only operation, and if you need to keep a copy of the texture data you should do that at the application level.

You must use SDL_UnlockTexture() to unlock the pixels and apply any changes.

\param texture the texture to lock for access, which was created with SDL_TEXTUREACCESS_STREAMING. \param rect an SDL_Rect structure representing the area to lock for access; NULL to lock the entire texture. \param pixels this is filled in with a pointer to the locked pixels, appropriately offset by the locked area. \param pitch this is filled in with the pitch of the locked pixels; the pitch is the length of one row in bytes. \returns true on success or false if the texture is not valid or was not created with SDL_TEXTUREACCESS_STREAMING; call SDL_GetError() for more information.

\threadsafety This function should only be called on the main thread.

\since This function is available since SDL 3.2.0.

\sa SDL_LockTextureToSurface \sa SDL_UnlockTexture

extern SDL_DECLSPEC bool SDLCALL SDL_LockTexture(SDL_Texture *texture, const SDL_Rect *rect, void **pixels, int *pitch)

See also:

Implementation

({Pointer<Void> pixels, int pitch})? sdlxLockTexture(
  Pointer<SdlTexture> texture, {
  SdlxRect? rect,
}) {
  Pointer<Void> pixels = nullptr;
  var pitch = 0;
  Pointer<SdlRect> rectPointer = nullptr;
  final pixelsPointer = ffi.calloc<Pointer<Void>>();
  final pitchPointer = ffi.calloc<Int32>();
  if (rect != null) {
    rectPointer = rect.calloc();
  }
  final result = sdlLockTexture(
    texture,
    rectPointer,
    pixelsPointer,
    pitchPointer,
  );
  if (result) {
    pixels = pixelsPointer.value;
    pitch = pitchPointer.value;
  }
  if (rectPointer != nullptr) {
    rectPointer.callocFree();
  }
  pixelsPointer.callocFree();
  pitchPointer.callocFree();
  return (pixels: pixels, pitch: pitch);
}