⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xform.h

📁 Lido PXA270平台开发板的最新BSP,包括源代码
💻 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) 2003 Intel Corporation.
**    All Rights Reserved.
**
** ************************************************************************* **
\* ************************************************************************* */

/**************************************************************************
 * Name         : xform.h
 * Author       : BCB
 * Created      : 02/05/2003
 *
 * Copyright    : 2003 by Imagination Technologies Limited. All rights reserved.
 *              : No part of this software, either material or conceptual
 *              : may be copied or distributed, transmitted, transcribed,
 *              : stored in a retrieval system or translated into any
 *              : human or computer language in any form by any means,
 *              : electronic, mechanical, manual or other-wise, or
 *              : disclosed to third parties without the express written
 *              : permission of Imagination Technologies Limited, Unit 8, HomePark
 *              : Industrial Estate, King's Langley, Hertfordshire,
 *              : WD4 8LZ, U.K.
 *
 * Platform     : ANSI
 **************************************************************************/
#ifndef _XFORM_
#define _XFORM_
#include "XPL.h"
#include "MRL.h"
#include "ogles_types.h"
#include "constants.h"
#include "Metrics.h"

#if defined( PROFILE_COMMON )
#define NATIVE           F32
#define MATRIX4          Matrix4f
#define MATRIX4_IDENTITY Matrix4f_SetIdentity
#define MATRIX4_ISIDENT  Matrix4f_IsIdentity
#define MATRIX4_MULTIPLY Matrix4f_Multiply
#define VECTOR3          Vector3f
#define VECTOR4          Vector4f
#define VECTOR3_TRANS    Vector3f_Transform3x3
#define VECTOR4_TRANS    Vector4f_Transform

#define CTLAFORMAT_NATIVE  CTLAFORMAT_FLOAT

#define F32toNATIVE(f32) (f32)
#define I32toNATIVE(i32) (1.0f*i32)

#define nZERO  fZERO
#define nONE   fONE

#elif defined( PROFILE_COMMON_LITE )
#define NATIVE           X32
#define MATRIX4          Matrix4x
#define MATRIX4_IDENTITY Matrix4x_SetIdentity
#define MATRIX4_ISIDENT  Matrix4x_IsIdentity
#define MATRIX4_MULTIPLY Matrix4x_Multiply
#define VECTOR3          Vector3x
#define VECTOR4          Vector4x
#define VECTOR3_TRANS    Vector3x_Transform3x3
#define VECTOR4_TRANS    Vector4x_Transform

#define CTLAFORMAT_NATIVE  CTLAFORMAT_FIXED

#define F32toNATIVE(f32) FtoX(f32)
#define I32toNATIVE(i32) (i32<<16)

#define nZERO  xZERO
#define nONE   xONE

#else
#error "Profile not defined for xform.h"
#endif  /* PROFILE_COMMON(_LITE) */


#define GLES_ABSF(f)  ((IMG_FLOAT)fabs((double) (f)))
#define GLES_SQRTF(f) (float)sqrt((float)(f))
#define GLES_SINF(f) (float)sin((float) (f))
#define GLES_COSF(f) (float)cos((float) (f))
#define GLES_ABS(i)				abs(i)

typedef struct GLESfogStateRec
{
	GLenum eMode;
   IMG_UINT32 ui32Color;
   NATIVE Density;
   NATIVE Start, End;
   
   IMG_BOOL bLinearDirty;
	U32 MVChangeCount;

} GLESfogState;

/*
** Transform struct.  This structure is what the matrix stacks are
** composed of.  inverseTranspose contains the inverse transpose of matrix.
** For the modelView stack, "mvp" will contain the concatenation of
** the modelView and current projection matrix (i.e. the multiplication of
** the two matricies).
*/
typedef struct GLESMVTransformRec
{
   U32     MatrixChangeCount;
   MATRIX4 sMatrix;

   U32     InverseMatrixChangeCount;
   MATRIX4 sInverse;

	U32     MVEyeChangeCount;
	VECTOR3 EyeVector;
	
   VECTOR3 EyePosition;

} GLESMVTransform;


typedef struct GLESProjectionTransformRec
{
	U32     MatrixChangeCount;
   MATRIX4 sMatrix;

} GLESProjectionTransform;


typedef struct GLESTexTransformRec
{
	U32     MatrixChangeCount;
   MATRIX4 sMatrix;

   U32  IdentityCheckChangeCount;
	U32  bIsIdentity;

} GLESTexTransform;


#define GLES_MATRIX_CHANGECOUNT_INVALID (0)

IMG_VOID ModelViewPushMatrix       (GLESContext *gc);
IMG_VOID ModelViewPopMatrix        (GLESContext *gc);
MATRIX4* ModelViewGetCurrentMatrix (GLESContext *gc, U32 bMakeDirty);
MATRIX4* ModelViewGetInverse       (GLESContext *gc);

IMG_VOID ProjectionPushMatrix       (GLESContext *gc);
IMG_VOID ProjectionPopMatrix        (GLESContext *gc);
MATRIX4* ProjectionGetCurrentMatrix (GLESContext *gc, U32 bMakeDirty);

IMG_VOID TexturePushMatrix          (GLESContext *gc);
IMG_VOID TexturePopMatrix           (GLESContext *gc);
MATRIX4* TextureGetCurrentMatrix    (GLESContext *gc, U32 bMakeDirty);
MATRIX4* TextureGetCurrentMatrixIdx (GLESContext *gc, U32 i);

/* ************************************************************************* *\
 * ************************************************************************* *
 * Viewport definition from context.h
 * ************************************************************************* *
\* ************************************************************************* */

typedef struct GLESviewportRec
{
   /*
   ** Viewport parameters in screen(buffer) space.
   */
   IMG_INT32 i32X, i32Y;
   IMG_UINT32 ui32Width, ui32Height;
	float MaxZ, MinZ;

	IMG_BOOL bDirty;

} GLESviewport;

/* ************************************************************************* *\
 * ************************************************************************* *
 * Viewport code from context.h
 * ************************************************************************* *
\* ************************************************************************* */
/*
** Transformation machinery state.  Contains the state needed to transform
** user coordinates into eye & window coordinates.
*/
typedef struct GLEStransformMachineRec
{
   U32 MatrixChangeCounter;
   /*
   ** Transformation stack.
   */
   GLESMVTransform *psModelViewStack;
   U32 ModelViewCurrent;

   /*
   ** Current projection matrix.
   */
   GLESProjectionTransform *psProjectionStack;
   U32 ProjectionCurrent;

   /*
   ** Texture matrix stack.
   */
   GLESTexTransform* apsTextureStack[GLES_MAX_TEXTURE_UNITS];
   U32 TextureCurrent[GLES_MAX_TEXTURE_UNITS];

   /*
   ** Transform Engine
   */
   CTLHANDLE ctl;
   MRLState* pMRLState;

   /*
   ** Matrix
   */
   U32 MVPSModelViewChangeCount;

   U32     PSChangeCount;
   MATRIX4 PSMatrix;

   I32     ScreenRotation;
   MATRIX4 ScreenMatrix;

   U32 CurrentTexMatrixChangeCount[GLES_MAX_TEXTURE_UNITS];

} GLEStransformMachine;


/* ************************************************************************* *\
 * routines
\* ************************************************************************* */
void InitCurrentState(GLESContext *gc);
void InitFogState(GLESContext *gc);

IMG_VOID ValidateState(GLESContext *gc);

IMG_BOOL InitTransformState(GLESContext *gc);
IMG_VOID FreeTransformState(GLESContext *gc);
IMG_VOID SetupTransformLightingProcs(GLESContext *gc);

IMG_VOID InitVertexArrayState(GLESContext *gc);

IMG_BOOL InitLightingState(GLESContext* gc);
IMG_VOID FreeLightingState(GLESContext* gc);

IMG_VOID ApplyViewport(GLESContext *gc);
IMG_VOID ApplyDepthRange(GLESContext *gc, IMG_FLOAT fZNear, IMG_FLOAT fZFar);

#endif /* _XFORM_ */

⌨️ 快捷键说明

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