📄 ctl.h
字号:
/* ************************************************************************* *\
**
** INTEL Corporation Proprietary Information
**
** This listing is supplied under the terms of a license
** agreement with INTEL Corporation and may not be copied
** nor disclosed except in accordance with the terms of
** that agreement.
**
** Copyright (c) 2004 Intel Corporation.
** All Rights Reserved.
**
** ************************************************************************* **
** FILE: CTL.h
** DESCRIPTION: Interface to the Common Transform & lighting Library
**
** CREATED: September 14, 2004
**
\* ************************************************************************* */
#if !defined( __CTL_H__ )
#define __CTL_H__
#if defined( __cplusplus )
extern "C" {
#endif /* __cplusplus */
#define __offsetof(s,m) ((size_t)&((s*)0)->m)
/* ************************************************************************* *\
** Base types
\* ************************************************************************* */
typedef int CTLBOOL;
#define CTLTRUE 0x01
#define CTLFALSE 0x00
typedef unsigned char CTLBYTE;
typedef unsigned char CTLU8;
typedef char CTLI8;
typedef unsigned short CTLU16;
typedef short CTLI16;
typedef unsigned int CTLU32;
typedef int CTLI32;
typedef float CTLFLOAT;
typedef CTLI32 CTLFIXED;
#if defined( PROFILE_COMMON_LITE )
// Common-Lite profile uses fixed point
typedef CTLFIXED CTLVALUE;
#elif defined( PROFILE_COMMON )
// Common profile uses floating point
typedef CTLFLOAT CTLVALUE;
#else
#error Profile type not defined!
#endif /* PROFILE_COMMON(LITE) */
// State handle
typedef void* CTLHANDLE;
#define CTLHANDLE_NULL ((CTLHANDLE)0)
// Maximum Num Of Texture Units
#define CTL_MAX_TEXTURE_UNITS 2
// Max num of lights supported
#define CTLLIGHT_MAX_NUM 8
/*****************************************************************************
Matrix definition
******************************************************************************/
typedef struct _CTL_MATRIX44
{
CTLVALUE m11, m12, m13, m14; // Column 1
CTLVALUE m21, m22, m23, m24; // Column 2
CTLVALUE m31, m32, m33, m34; // Column 3
CTLVALUE m41, m42, m43, m44; // Column 4
} CTLMATRIX44;
/* ************************************************************************* *\
** Vector definitions
\* ************************************************************************* */
typedef struct _CTL_VECTOR4
{
CTLVALUE x, y, z, w;
} CTLVECTOR4;
typedef struct _CTL_VECTOR3
{
CTLVALUE x, y, z;
} CTLVECTOR3;
typedef struct _CTL_VECTOR2
{
CTLVALUE x, y;
} CTLVECTOR2;
/* ************************************************************************* *\
** Color definitions
\* ************************************************************************* */
typedef struct _CTL_COLOR4
{
CTLVALUE r, g, b, a;
} CTLCOLOR4;
/* ************************************************************************* *\
** Enumerations
\* ************************************************************************* */
// Vertex Array types
// maintain this ordering as these values are also used as array indices
typedef enum _ARRAY_TYPE
{
CTLATYPE_VERTEX = 0,
CTLATYPE_NORMAL,
CTLATYPE_COLOR,
CTLATYPE_TEXCOORD0,
CTLATYPE_TEXCOORD1,
} CTL_ARRAY_TYPE;
/*****************************************************************************
Data type enumeration
maintain this ordering as these values are also used as array indices
******************************************************************************/
typedef enum _CTL_ARRAY_FORMAT
{
CTLAFORMAT_NONE = 0,
CTLAFORMAT_FIXED,
CTLAFORMAT_FLOAT,
CTLAFORMAT_INT16,
CTLAFORMAT_INT8,
CTLAFORMAT_UINT8,
CTLAFORMAT_PACKED,
} CTL_ARRAY_FORMAT;
// Color source
typedef enum _COLOR_SOURCE
{
CTLSOURCE_COLOR_CONSTANT = 0,
CTLSOURCE_COLOR_MATERIAL,
} CTL_COLOR_SOURCE;
/*****************************************************************************
Cull mode enumeration
******************************************************************************/
typedef enum _CULL_MODE
{
CTLCULL_NONE = 0,
CTLCULL_CCW,
CTLCULL_CW,
} CTL_CULL_MODE;
/*****************************************************************************
Fog mode enumeration
******************************************************************************/
typedef enum _FOG_MODE
{
CTLFOG_NONE = 0,
CTLFOG_LINEAR,
CTLFOG_EXP,
CTLFOG_EXP2,
} CTL_FOG_MODE;
/*****************************************************************************
Light type enumeration
maintain this ordering as these values are also used as array indices
******************************************************************************/
typedef enum _LIGHT_TYPE
{
CTLLIGHT_DIRECTIONAL = 0,
CTLLIGHT_POINT,
CTLLIGHT_SPOT,
} CTL_LIGHT_TYPE;
/*****************************************************************************
Primitive type enumeration
******************************************************************************/
typedef enum _PRIMITIVE_TYPE
{
CTLPRIMITIVE_POINTS = 0,
CTLPRIMITIVE_LINELIST,
CTLPRIMITIVE_LINESTRIP,
CTLPRIMITIVE_LINELOOP,
CTLPRIMITIVE_TRILIST,
CTLPRIMITIVE_TRISTRIP,
CTLPRIMITIVE_TRIFAN,
} CTL_PRIMITIVE_TYPE;
/*****************************************************************************
Profile variable enumeration
******************************************************************************/
typedef enum _PROFILEVAR
{
// variable id argument type
CTLPROFILE_VERTICES_SUBMITTED, // value
CTLPROFILE_PRIMITIVES_SUBMITTED, // value
CTLPROFILE_PRIMITIVES_CULLED, // value
CTLPROFILE_PRIMITIVES_CLIPPED, // value
CTLPROFILE_PRIMITIVES_RASTERIZED, // value
CTLPROFILE_NUM_CALLS_DRAWPRIMITIVES, // value
} CTL_PROFILEVAR;
/*****************************************************************************
Raster variable enumeration
******************************************************************************/
typedef enum _RASTERVAR
{
// variable id argument type
CTLRASTER_HANDLE = 0, // handle
} CTL_RASTERVAR;
// Rotation angles
typedef enum _ROTATION
{
CTLROTATION_0 = 0,
CTLROTATION_90,
CTLROTATION_180,
CTLROTATION_270,
} CTL_ROTATION;
/*****************************************************************************
Shade mode enumeration
******************************************************************************/
typedef enum _SHADE_MODE
{
CTLSHADE_FLAT = 0,
CTLSHADE_SMOOTH,
} CTL_SHADE_MODE;
/*****************************************************************************
State variable enumeration
******************************************************************************/
typedef enum _STATEVAR
{
// variable id argument type
CTLSTATE_COLOR_CURRENT = 0,// CTLCOLOR4
CTLSTATE_COLOR_SOURCE, // one of CTL_COLOR_SOURCE
CTLSTATE_CULL_MODE, // one of CTL_CULL_MODE
CTLSTATE_FOG_ENABLE, // enable (disable = 0, enable = everything else)
CTLSTATE_FOG_MODE, // one of CTL_FOG_MODE
CTLSTATE_FOG_COLOR, // CTLCOLOR4
CTLSTATE_FOG_DENSITY, // value (fixed or float, depends on model)
CTLSTATE_FOG_START, // value
CTLSTATE_FOG_END, // value
CTLSTATE_LIGHT_AMBIENT, // color
CTLSTATE_LIGHT_ENABLE, // enable
CTLSTATE_LIGHT_TWOSIDED, // boolean (false = 0, true = everything else)
CTLSTATE_DIFFUSE, // current diffuse color
CTLSTATE_LINEWIDTH, // value
CTLSTATE_POINTSIZE, // value
CTLSTATE_PROFILE_ENABLE, // enable
CTLSTATE_PROFILE_PROC, // proc address
CTLSTATE_NORMAL_CURRENT, // CTLVECTOR3
CTLSTATE_NORMAL_INVERT, // boolean
CTLSTATE_NORMAL_NORMALIZE, // boolean
CTLSTATE_RESCALE_NORMAL, // whether to rescale all normals
CTLSTATE_FLIP_2SIDES, // flip two sides (for two-sided lighting)
CTLSTATE_SCREEN_DIMS, // value, value
CTLSTATE_SCREEN_ROTATION, // one of CTL_ROTATION
CTLSTATE_SHADE_MODE, // one of CTL_SHADE_MODE
CTLSTATE_COLOR_ARRAY_ENABLE,
CTLSTATE_NORMAL_ARRAY_ENABLE,
CTLSTATE_TRANSFORM_TEX1, // boolean
CTLSTATE_TRANSFORM_TEX2, // boolean
} CTL_STATEVAR;
/*****************************************************************************
Transformation type enumeration
******************************************************************************/
typedef enum _TRANSFORM_TYPE
{
CTLTRANSFORM_VIEW = 0, // model view matrix
CTLTRANSFORM_PROJECTION, // projection matrix
CTLTRANSFORM_DEVICE, // device matrix (screen rotations)
CTLTRANSFORM_TEX1, // texture 1 trasnform
CTLTRANSFORM_TEX2, // texture 2 transform
} CTL_TRANSFORM_TYPE;
/* ************************************************************************* *\
** Structure definitions
\* ************************************************************************* */
/*****************************************************************************
Light structure definition
******************************************************************************/
typedef struct _LIGHT
{
/*00*/ CTL_LIGHT_TYPE eType;
/*04*/ CTLVECTOR4 sPosition;
/*14*/ CTLVECTOR3 sDirection;
/*20*/ CTLCOLOR4 sAmbient;
/*30*/ CTLCOLOR4 sDiffuse;
/*40*/ CTLCOLOR4 sSpecular;
/*50*/ CTLVALUE SpotExponent;
/*54*/ CTLVALUE SpotCutoff;
/*58*/ CTLVALUE Attenuation[3];
/*64*/ CTLU32 Pad;
/*68*/
} CTL_LIGHT;
/*****************************************************************************
Material structure definition
******************************************************************************/
typedef struct _MATERIAL
{
/*00*/ CTLCOLOR4 sAmbient;
/*10*/ CTLCOLOR4 sDiffuse;
/*20*/ CTLCOLOR4 sSpecular;
/*30*/ CTLCOLOR4 sEmissive;
/*40*/ CTLVALUE Power;
/*44*/ CTLU32 Pad;
/*48*/
} CTL_MATERIAL;
/*****************************************************************************
Viewport structure definition
******************************************************************************/
typedef struct _VIEWPORT
{
/*00*/ CTLI32 i32X, i32Y; // top-left corner
/*08*/ CTLU32 u32Width, u32Height; // dimensions
/*10*/ CTLVALUE Near, Far; // clip planes
/*18*/
} CTL_VIEWPORT;
/*****************************************************************************
Vertex array definition
******************************************************************************/
typedef struct _ARRAY
{
// Pointer to the first component of the first array element
CTLBYTE *pPointer;
// Stride (in bytes) between consecutive array elements
CTLU32 u32Stride;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -