Texture pixels

From Multi Theft Auto: Wiki
Jump to navigation Jump to search


* MTA refers to the raw information that a texture contains as 'pixels'.

* Pixels can be retrieved from any texture type including render targets and screen sources by using the function dxGetTexturePixels.

* Pixels are just a string to Lua, so they can be saved to a file or even sent over the 'internet'.

Pixels properties

Pixels have two properties:

  • dimensions (width and height) which is retrieved by using the function dxGetPixelsSize
  • format (plain,jpeg,png,dds) which is retrieved by using the function dxGetPixelsFormat
    • plain - Fastest and simplest - It's default format of the pixels returned by dxGetTexturePixels and the only one that can be used with dxSetTexturePixels, dxGetPixelColor and dxSetPixelColor. But it also uses a lot of bytes, so internet transfers will be longer. Also can't be read by Photoshop or browsers etc.
    • png - A few less bytes, still quite big for net transfers. Can be saved to a file and read by Photoshop and browsers etc.
    • jpeg - A lot less bytes, so best for net transfers. Can be saved to a file and read by Photoshop and browsers etc.
    • dds - DirectDraw Surface. Game's native texture format with various compressed and uncompressed options. Used to store standard, cube or volume textures. Compressed pixels in this format can be loaded nearly instantly by dxCreateTexture.

To convert between the 3 different formats, use the function dxConvertPixels

Pixels more

Pixels can also be loaded from any png/jpeg file just like this:

   fh = fileOpen( "hello.jpg" )
   pixels = fileRead(fh,fileGetSize ( fh ))

Pixels can be used to create textures just like this:

   myNewTexture = dxCreateTexture(pixels)

Pixels can be used to save textures just like this:

   pixels = dxGetTexturePixels(myRenderTarget)
   pixels = dxConvertPixels(pixels, 'jpeg')
   fh = fileCreate( "piccy.jpg" )
   fileWrite(fh, pixels)

Pixels performance

Getting/setting pixels from textures is not quick and not something you want to be doing every frame (in onClientRender for example). Setting pixels to a render target is especially slow. Pixels are ideal however for transferring composite images built on a render target into a normal texture for later use. For example, making a custom radar map.