Show More
Commit Description:
Add missing component and message.
Commit Description:
Add missing component and message.
File last commit:
Show/Diff file:
Action:
FNA/lib/FNA3D/include/FNA3D_Image.h
148 lines | 4.1 KiB | text/x-c | CLexer
Upgrade FNA to 22.12...
r690 /* FNA3D - 3D Graphics Library for FNA
*
* Copyright (c) 2020-2022 Ethan Lee
*
* This software is provided 'as-is', without any express or implied warranty.
* In no event will the authors be held liable for any damages arising from
* the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software in a
* product, an acknowledgment in the product documentation would be
* appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source distribution.
*
* Ethan "flibitijibibo" Lee <flibitijibibo@flibitijibibo.com>
*
*/
#ifndef FNA3D_IMAGE_H
#define FNA3D_IMAGE_H
#ifdef _WIN32
#define FNA3DAPI __declspec(dllexport)
#define FNA3DCALL __cdecl
#else
#define FNA3DAPI
#define FNA3DCALL
#endif
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/* Image Read API */
typedef int32_t (FNA3DCALL * FNA3D_Image_ReadFunc)(
void* context,
char *data,
int32_t size
);
typedef void (FNA3DCALL * FNA3D_Image_SkipFunc)(
void* context,
int32_t n
);
typedef int32_t (FNA3DCALL * FNA3D_Image_EOFFunc)(void* context);
/* Decodes PNG/JPG/GIF data into raw RGBA8 texture data.
*
* readFunc: Callback used to pull data from the stream.
* skipFunc: Callback used to seek around a stream.
* eofFunc: Callback used to check that we're reached the end of a stream.
* context: User pointer passed back to the above callbacks.
* w: Filled with the width of the image.
* h: Filled with the height of the image.
* len: Filled with the size (in bytes) of the return value.
* forceW: Forced width of the returned image (-1 to ignore).
* forceH: Forced height of the returned image (-1 to ignore).
* zoom: When forcing dimensions, enable this to crop instead of stretch.
*
* Returns a block of memory suitable for use with FNA3D_SetTextureData2D.
* Be sure to free the memory with FNA3D_Image_Free after use!
*/
FNA3DAPI uint8_t* FNA3D_Image_Load(
FNA3D_Image_ReadFunc readFunc,
FNA3D_Image_SkipFunc skipFunc,
FNA3D_Image_EOFFunc eofFunc,
void* context,
int32_t *w,
int32_t *h,
int32_t *len,
int32_t forceW,
int32_t forceH,
uint8_t zoom
);
/* Frees memory returned by FNA3D_Image_Load. (Do NOT free the memory yourself!)
*
* mem: A pointer previously returned by FNA3D_Image_Load.
*/
FNA3DAPI void FNA3D_Image_Free(uint8_t *mem);
/* Image Write API */
typedef void (FNA3DCALL * FNA3D_Image_WriteFunc)(
void* context,
void* data,
int32_t size
);
/* Encodes RGBA8 image data into PNG data.
*
* writeFunc: Callback used to write data to a stream.
* context: User pointer passed back to the above callback.
* srcW: The original width of the image data.
* srcH: The original height of the image data.
* dstW: The requested width of the PNG data.
* dstH: The requested height of the PNG data.
* data: The raw RGBA8 image data.
*/
FNA3DAPI void FNA3D_Image_SavePNG(
FNA3D_Image_WriteFunc writeFunc,
void* context,
int32_t srcW,
int32_t srcH,
int32_t dstW,
int32_t dstH,
uint8_t *data
);
/* Encodes RGBA8 image data into JPG data, discarding the alpha channel.
*
* writeFunc: Callback used to write data to a stream.
* context: User pointer passed back to the above callback.
* srcW: The original width of the image data.
* srcH: The original height of the image data.
* dstW: The requested width of the JPG data.
* dstH: The requested height of the JPG data.
* data: The raw RGBA8 image data.
* quality: The JPG compression quality (0 - 100).
*/
FNA3DAPI void FNA3D_Image_SaveJPG(
FNA3D_Image_WriteFunc writeFunc,
void* context,
int32_t srcW,
int32_t srcH,
int32_t dstW,
int32_t dstH,
uint8_t *data,
int32_t quality
);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* FNA3D_IMAGE_H */
/* vim: set noexpandtab shiftwidth=8 tabstop=8: */