📄 xform.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 + -