texture.h

来自「《光线引擎演示程序》执行程序+源代码,《光线引擎演示程序》执行程序+源代码」· C头文件 代码 · 共 351 行

H
351
字号
/*==========================================================================;
 *
 *  光线游戏引擎(Light Game Engine)
 *
 *  版权所有 (C) 2005-2007 康 旭。 保留所有权利。
 *  Copyright (C) KangXu.  All Rights Reserved.
 *
 *  文件:   texture.h
 *  内容:   纹理函数,现在能读取 25 种 .bmp, .cut, .dds, .doom, .gif, .ico, .jpg, .lbm, .mdl, .mng, .pal, .pbm, .pcd, .pcx, .pgm, .pic, .png, .ppm, .psd, .psp, .raw, .sgi, .tga 和 .tif .hdr 文件。
            支持保存的格式有 15 种: .bmp, .dds, .h, .jpg, .pal, .pbm, .pcx, .hdr, .pgm,.png, .ppm, .raw, .sgi, .tga 和 .tif. 

 *
 ****************************************************************************/


/*! \file texture.h * 纹理函数. * 此文件是纹理函数头文件. */// 指定纹理原点
#define LIGHT_ORIGIN_UPPER_LEFT  0
#define LIGHT_ORIGIN_LOWER_LEFT  1

// 纹理层
#define LIGHT_TEXTURE_LAYER_2D   0
#define LIGHT_TEXTURE_LAYER_CUBE_MAP_POSITIVE_X   3
#define LIGHT_TEXTURE_LAYER_CUBE_MAP_NEGATIVE_X   4
#define LIGHT_TEXTURE_LAYER_CUBE_MAP_POSITIVE_Y   5
#define LIGHT_TEXTURE_LAYER_CUBE_MAP_NEGATIVE_Y   6
#define LIGHT_TEXTURE_LAYER_CUBE_MAP_POSITIVE_Z   7
#define LIGHT_TEXTURE_LAYER_CUBE_MAP_NEGATIVE_Z   8

// 图像文件格式
#define LIGHT_AUTO         0x0000
#define LIGHT_BMP          0x0420
#define LIGHT_CUT          0x0421
#define LIGHT_DOOM         0x0422
#define LIGHT_DOOM_FLAT    0x0423
#define LIGHT_ICO          0x0424
#define LIGHT_JPG          0x0425
#define LIGHT_JFIF         0x0425
#define LIGHT_LBM          0x0426
#define LIGHT_PCD          0x0427
#define LIGHT_PCX          0x0428
#define LIGHT_PIC          0x0429
#define LIGHT_PNG          0x042A
#define LIGHT_PNM          0x042B
#define LIGHT_SGI          0x042C
#define LIGHT_TGA          0x042D
#define LIGHT_TIF          0x042E
#define LIGHT_CHEAD        0x042F
#define LIGHT_RAW          0x0430
#define LIGHT_MDL          0x0431
#define LIGHT_WAL          0x0432
#define LIGHT_LIF          0x0434
#define LIGHT_MNG          0x0435
#define LIGHT_JNG          0x0435
#define LIGHT_GIF          0x0436
#define LIGHT_DDS          0x0437
#define LIGHT_DCX          0x0438
#define LIGHT_PSD          0x0439
#define LIGHT_EXIF         0x043A
#define LIGHT_PSP          0x043B
#define LIGHT_PIX          0x043C
#define LIGHT_PXR          0x043D
#define LIGHT_XPM          0x043E
#define LIGHT_HDR          0x043F

#define LIGHT_JASC_PAL     0x0475


/*! \class LightTexture * \brief 纹理类 * *  本类负责纹理的读取、创建和管理。支持 25 种图像文件 .bmp, .cut, .dds, .doom, .gif, .ico, .jpg, .lbm, .mdl, .mng, .pal,
 *  .pbm, .pcd, .pcx, .pgm, .pic, .png, .ppm, .psd, .psp, .raw, .sgi, .tga, .tif 和 .hdr 的读取,支持 15 种图像文件 .bmp, *  .dds, .h, .jpg, .pal, .pbm, .pcx, .hdr, .pgm,.png, .ppm, .raw, .sgi, .tga 和 .tif 的保存。每个 LightTexture 实例都必 *  须通过 LightEngine 类的 NewTexture 方法分配。  */

class LightTexture
{

public:

	/*! \fn void SetOrigin( int mode ) = 0	 *  \brief 设置纹理原点,当读取纹理时使用	 *	 *  设置纹理原点,当读取纹理时使用	 *	 *  \param int mode 原点位置	 *	 *  \return 无	 *	 *  \see 
	 */
	virtual void SetOrigin( int mode ) = 0;

	/*! \fn int GetOrigin( void ) = 0	 *  \brief 查询纹理原点	 *	 *  查询纹理原点	 *	 *  \param 无	 *	 *  \return 返回纹理原点	 *	 *  \see 
	 */
	virtual int GetOrigin( void ) = 0;

	/*! \fn int NonPowerOfTwo( int non_power2 ) = 0	 *  \brief 非 2 次幂纹理设置	 *	 *  非 2 次幂纹理设置	 *	 *  \param int non_power2 如果为 0 则为 2 次幂纹理,否则为非 2 次幂纹理	 *	 *  \return 如果函数调用成功,返回非零值;如果函数调用失败,返回零。	 *	 *  \see 
	 */
	virtual int NonPowerOfTwo( int non_power2 ) = 0;

	/*! \fn void SetLayer( int layer ) = 0	 *  \brief 设置当前纹理层,当读取纹理时使用	 *	 *  设置当前纹理层,当读取纹理时使用	 *	 *  \param int layer 当前纹理层	 *	 *  \return 如果函数调用成功,返回非零值;如果函数调用失败,返回零。	 *	 *  \see 
	 */
	virtual void SetLayer( int layer ) = 0;

	/*! \fn int GetLayer( void ) = 0	 *  \brief 查询当前纹理层	 *	 *  查询当前纹理层	 *	 *  \param 无	 *	 *  \return 返回当前纹理层。	 *	 *  \see 
	 */
	virtual int GetLayer( void ) = 0;

	/*! \fn int Load( const char *filename ) = 0	 *  \brief 将纹理文件读入内存	 *	 *  将纹理文件读入内存,现在能读取 25 种 .bmp, .cut, .dds, .doom, .gif, .ico, .jpg, .lbm, .mdl, .mng, .pal, .pbm, .pcd, .pcx, .pgm, .pic, .png, .ppm, .psd, .psp, .raw, .sgi, .tga 和 .tif .hdr 文件。	 *	 *  \param const char *filename 文件纹理名	 *	 *  \return 如果函数调用成功,返回非零值;如果函数调用失败,返回零。	 *	 *  \see 
	 */
	virtual int Load( const char *filename ) = 0;

	/*! \fn int Build( int width, int height, unsigned char *rgba ) = 0	 *  \brief 从内存中创建纹理	 *	 *  从内存中创建纹理	 *	 *  \param int width 纹理宽度	 *	 *  \param int height 纹理高度	 *	 *  \param unsigned char *rgba 纹理数据(RGBA)	 *	 *  \return 如果函数调用成功,返回非零值;如果函数调用失败,返回零。	 *	 *  \see 
	 */
	virtual int Build( int width, int height, unsigned char *rgba ) = 0;

	/*! \fn  int Create( int width, int height, int type ) = 0	 *  \brief 创建新纹理	 *	 *  创建新纹理	 *	 *  \param int width 纹理宽度	 *	 *  \param int height 纹理高度	 *	 *  \param int type 纹理类型, 0 为普通纹理, 1 为可渲染纹理	 *	 *  \return 如果函数调用成功,返回非零值;如果函数调用失败,返回零。	 *	 *  \see 
	 */
	virtual int Create( int width, int height, int type ) = 0;

	/*! \fn  int Grid( int width, int height, int numframe ) = 0	 *  \brief 设置栅格动画	 *	 *  在现有纹理的基础上设置栅格动画。	 *	 *  \param int width 栅格动画的宽度	 *	 *  \param int height 栅格动画的高度	 *	 *  \param int numframe 动画帧数	 *	 *  \return 如果函数调用成功,返回非零值;如果函数调用失败,返回零。	 *	 *  \see 
	 */
	virtual int Grid( int width, int height, int numframe ) = 0;

	/*! \fn  int GetSize( LPSIZE lpsize ) = 0	 *  \brief 查询纹理原始的宽度和高度	 *	 *  查询纹理原始的宽度和高度	 *	 *  \param LPSIZE lpsize 返回纹理大小的数据指针	 *	 *  \return 如果函数调用成功,返回非零值;如果函数调用失败,返回零。	 *	 *  \see 
	 */
	virtual int GetSize( LPSIZE lpsize ) = 0;

	/*! \fn  int GetSizePower2( LPSIZE lpsize ) = 0	 *  \brief 查询纹理实际(二次幂)的宽度和高度	 *	 *  查询纹理实际(二次幂)的宽度和高度	 *	 *  \param LPSIZE lpsize 返回纹理实际(二次幂)的大小的数据指针	 *	 *  \return 如果函数调用成功,返回非零值;如果函数调用失败,返回零。	 *	 *  \see 
	 */
	virtual int GetSizePower2( LPSIZE lpsize ) = 0;

	/*! \fn  bool IsValid( void ) = 0	 *  \brief 查询纹理是否有效	 *	 *  查询纹理是否有效	 *	 *  \param 无	 *	 *  \return 如果函数调用成功,返回非零值;如果函数调用失败,返回零。	 *	 *  \see 
	 */
	virtual bool IsValid( void ) = 0;

	/*! \fn  int Speed( int speed ) = 0	 *  \brief 设置动画播放速度	 *	 *  设置动画播放速度	 *	 *  \param int speed 动画播放的速度,用每帧持续的时间表示,以千分之一秒为单位。	 *	 *  \return 如果函数调用成功,返回非零值;如果函数调用失败,返回零。	 *	 *  \see 
	 */
	virtual int Speed( int speed ) = 0;

	/*! \fn  int Active( void ) = 0	 *  \brief 将纹理激活为当前纹理	 *	 *  将纹理激活为当前纹理,如果是动画纹理,则自动播放动画。	 *	 *  \param 无	 *	 *  \return 如果函数调用成功,返回非零值;如果函数调用失败,返回零。	 *	 *  \see 
	 */
	virtual int Active( void ) = 0;

	/*! \fn  int ActiveFrame( int frame ) = 0	 *  \brief 将纹理的指定帧激活为当前纹理	 *	 *  将纹理的指定帧激活为当前纹理。	 *	 *  \param int frame 要激活的纹理帧,如果该帧不存在,则该帧被指定为写入、渲染和保存的目标帧。	 *	 *  \return 如果函数调用成功,返回非零值;如果函数调用失败,返回零。	 *	 *  \see 
	 */
	virtual int ActiveFrame( int frame ) = 0;

	/*! \fn  int Render( bool RenderToSelf ) = 0	 *  \brief 渲染到纹理	 *	 *  渲染到纹理	 *	 *  \param bool RenderToSelf  是否渲染到纹理, 1 为渲染到纹理, 0 为渲染到屏幕	 *	 	 *  \return 如果函数调用成功,返回非零值;如果函数调用失败,返回零。	 *	 *  \see 
	 */
	virtual int Render( bool RenderToSelf ) = 0;

	/*! \fn  int Save( const char *filename, int format, int color ) = 0	 *  \brief 将纹理颜色数据保存到指定的图像文件中。	 *	 *  将纹理颜色数据保存到指定的图像文件中。如果是动画纹理,则保存活动帧。	 *  支持 15 种图像文件 .bmp, .dds, .h, .jpg, .pal, .pbm, .pcx, .hdr, .pgm,.png, .ppm, .raw, .sgi, .tga 和 .tif 的保存	 *	 *  \param const char *filename  要保存颜色数据的图像文件名	 *	 	 *  \param int format  图像文件的格式,如果是 LIGHT_AUTO 则根据文件扩展名确定。	 *	 	 *  \param int color  图像文件的颜色模式	 *	 	 *  \return 如果函数调用成功,返回非零值;如果函数调用失败,返回零。	 *	 *  \see 
	 */
	virtual int Save( const char *filename, int format, int color ) = 0;

	/*! \fn  int Unload( void ) = 0	 *  \brief 从内存中释放纹理	 *	 *  从内存中释放纹理	 *	 *  \param 无	 *	 *  \return 如果函数调用成功,返回非零值;如果函数调用失败,返回零。	 *	 *  \see 
	 */
	virtual int Unload( void ) = 0;

	/*! \fn  int Delete( void ) = 0	 *  \brief 删除纹理	 *	 *  删除纹理	 *	 *  \param 无	 *	 *  \return 如果函数调用成功,返回非零值;如果函数调用失败,返回零。	 *	 *  \see 
	 */
	virtual int Delete( void ) = 0;

};

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?