📄 3d.h
字号:
/* * $QNXLicenseC: * Copyright 2007, 2008, QNX Software Systems. * * Licensed under the Apache License, Version 2.0 (the "License"). You * may not reproduce, modify or distribute this software except in * compliance with the License. You may obtain a copy of the License * at: http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTIES OF ANY KIND, either express or implied. * * This file may contain contributions from others, either as * contributors under the License or as licensors under other terms. * Please review this entire file for other proprietary rights or license * notices, as well as the QNX Development Suite License Guide at * http://licensing.qnx.com/license-guide/ for other information. * $ */#ifndef _GRAPHICS_3D_H_INCLUDED#define _GRAPHICS_3D_H_INCLUDED#ifndef _GRAPHICS_DISPLAY_H_INCLUDED#include <graphics/display.h>#endif#ifndef _GLES_GL_H_INCLUDED#include <GLES/gl.h>#endif#ifndef _GLES_GLEXT_H_INCLUDED#include <GLES/glext.h>#endif#ifndef _GRAPHICS_REND_H_INCLUDED#include <graphics/rend.h>#endif#ifdef _MSC_VER#define near d_near#define far d_far#endif/* Sizes of the matrix stacks */#define DISP_3D_MODEL_MATRIX_ENTRIES 16#define DISP_3D_PROJ_MATRIX_ENTRIES 2#define DISP_3D_TEX_MATRIX_ENTRIES 2/* Max supported lights */#define DISP_3D_NUM_LIGHTS 8/* Max supported texture mapping units */#define DISP_3D_MAX_TMUS 4/* Max supported texture dimensions */#define DISP_3D_MAX_TEXTURE_SIZE 2048#define DISP_3D_LOG2_MAX_TEXTURE_SIZE 11#define __MKFMT(__bpp, __id) ((__id) | (__bpp)<<24)#define DISP_TEX_BITS_PER_PIXEL(__fmt) ((__fmt)>>24)#define DISP_TEXFORMAT_UNDEFINED 0#define DISP_TEXFORMAT_RGBA8888 __MKFMT(32, 1)#define DISP_TEXFORMAT_RGB888 __MKFMT(24, 2)#define DISP_TEXFORMAT_PK_RGBA4444 __MKFMT(16, 3)#define DISP_TEXFORMAT_PK_ARGB4444 __MKFMT(16, 4)#define DISP_TEXFORMAT_PK_RGBA5551 __MKFMT(16, 5)#define DISP_TEXFORMAT_PK_RGB565 __MKFMT(16, 6)#define DISP_TEXFORMAT_PKOE_RGBA4444 __MKFMT(16, 7)#define DISP_TEXFORMAT_PKOE_ARGB4444 __MKFMT(16, 8)#define DISP_TEXFORMAT_PKOE_RGB565 __MKFMT(16, 9)#define DISP_TEXFORMAT_LA88 __MKFMT(16, 10)#define DISP_TEXFORMAT_L8 __MKFMT(8, 11)#define DISP_TEXFORMAT_A8 __MKFMT(8, 12)#define DISP_TEXFORMAT_PAL8_RGB888 __MKFMT(8, 13)#define DISP_TEXFORMAT_PAL8_RGBA8888 __MKFMT(8, 14)#define DISP_TEXFORMAT_PAL4_RGB888 __MKFMT(4, 15)#define DISP_TEXFORMAT_PAL4_RGBA8888 __MKFMT(4, 16)#define DISP_TEXFORMAT_ARGB8888 __MKFMT(32, 17)#define DISP_TEXFORMAT_PK_ARGB1555 __MKFMT(16, 18)#define DISP_TEXFORMAT_PK_XRGB1555 __MKFMT(16, 19)#define DISP_TEXFORMAT_PKOE_ARGB1555 __MKFMT(16, 20)#define DISP_TEXFORMAT_PKOE_XRGB1555 __MKFMT(16, 21)#define DISP_TEXFORMAT_BGR888 __MKFMT(24, 22)#define DISP_TEXFORMAT_BGRA8888 __MKFMT(32, 23)#define DISP_TEXFORMAT_PKOE_RGBA5551 __MKFMT(16, 24)#define DISP_TEXFORMAT_ABGR8888 __MKFMT(32, 25)#define DISP_TEXFORMAT_AL88 __MKFMT(16, 26)/* Fujitsu proprietary compression */#define DISP_TEXFORMAT_FJCMP_RGBA5551 __MKFMT(16, 27)#define DISP_TEXFORMAT_FJCMP_RGBA8888 __MKFMT(32, 28)/* Only valid when indicating a preferred internal texture format */#define DISP_TEXFORMAT_RGB_ANY 100#define DISP_TEXFORMAT_RGBA_ANY 101#define DISP_3D_STATE_MODELMATRIX 0x00000001#define DISP_3D_STATE_PROJMATRIX 0x00000002#define DISP_3D_STATE_TEXMATRIX 0x00000004#define DISP_3D_STATE_NORMAL 0x00000008#define DISP_3D_STATE_DEPTH_RANGE 0x00000010#define DISP_3D_STATE_SHADING 0x00000020#define DISP_3D_STATE_DEPTH 0x00000040#define DISP_3D_STATE_ALPHA_TEST 0x00000080#define DISP_3D_STATE_BLEND 0x00000100#define DISP_3D_STATE_STENCIL 0x00000200#define DISP_3D_STATE_LOGIC_OP 0x00000400#define DISP_3D_STATE_FOG 0x00000800#define DISP_3D_STATE_TMU 0x00001000#define DISP_3D_STATE_COLORMASK 0x00002000#define DISP_3D_STATE_POLYGON_OFFSET 0x00004000#define DISP_3D_STATE_VIEWPORT 0x00008000#define DISP_3D_STATE_CULLFACE 0x00010000#define DISP_3D_STATE_SCISSOR 0x00020000#define DISP_3D_STATE_LIGHT 0x00040000#define DISP_3D_STATE_FLAGS 0x00080000#define DISP_3D_STATE_ANTIALIAS 0x00100000#define DISP_3D_STATE_POINT 0x00200000#define DISP_3D_STATE_LINE 0x00400000#define DISP_3D_STATE_FSOPS 0x00800000/* Global light state */#define DISP_3D_LIGHT_STATE_TWO_SIDE 0x00000001#define DISP_3D_LIGHT_STATE_AMBIENT 0x00000002#define DISP_3D_LIGHT_STATE_MAT_AMBIENT 0x00000004#define DISP_3D_LIGHT_STATE_MAT_DIFFUSE 0x00000008#define DISP_3D_LIGHT_STATE_MAT_SPECULAR 0x00000010#define DISP_3D_LIGHT_STATE_MAT_EMISSION 0x00000020#define DISP_3D_LIGHT_STATE_MAT_SHININESS 0x00000040#define DISP_3D_LIGHT_STATE_COLOR_MATERIAL 0x00000080/* Per-light state */#define DISP_3D_PER_LIGHT_STATE_AMBIENT 0x00000001#define DISP_3D_PER_LIGHT_STATE_DIFFUSE 0x00000002#define DISP_3D_PER_LIGHT_STATE_SPECULAR 0x00000004#define DISP_3D_PER_LIGHT_STATE_POSITION 0x00000008#define DISP_3D_PER_LIGHT_STATE_SPOT_DIRECTION 0x00000010#define DISP_3D_PER_LIGHT_STATE_SPOT_EXPONENT 0x00000020#define DISP_3D_PER_LIGHT_STATE_SPOT_CUTOFF 0x00000040#define DISP_3D_PER_LIGHT_STATE_CONSTANT_ATTENUATION 0x00000080#define DISP_3D_PER_LIGHT_STATE_LINEAR_ATTENUATION 0x00000100#define DISP_3D_PER_LIGHT_STATE_QUADRATIC_ATTENUATION 0x00000200/* Buffer objects */#define DISP_3D_BUFOBJ_NONE 0x00000000#define DISP_3D_BUFOBJ_VERTEX 0x00000001#define DISP_3D_BUFOBJ_COLOR 0x00000002#define DISP_3D_BUFOBJ_NORMAL 0x00000004#define DISP_3D_BUFOBJ_TEXCOORD0 0x00000008#define DISP_3D_BUFOBJ_TEXCOORD1 0x00000010#define DISP_3D_BUFOBJ_TEXCOORD2 0x00000020#define DISP_3D_BUFOBJ_TEXCOORD3 0x00000040#define DISP_3D_BUFOBJ_INDICES 0x00010000/* Datatypes for data in buffer objects */#define DISP_3D_DATATYPE_NONE 0x00000000#define DISP_3D_DATATYPE_CHAR 0x00000001#define DISP_3D_DATATYPE_UCHAR 0x00000002#define DISP_3D_DATATYPE_SHORT 0x00000003#define DISP_3D_DATATYPE_USHORT 0x00000004#define DISP_3D_DATATYPE_FIXED32 0x00000005#define DISP_3D_DATATYPE_FLOAT32 0x00000006/* For specifying how primitive information will be sent to driver */typedef enum { DISP_3D_SEND_OBJECT_COORDS = 0x00000001, /* Send vertices in Object/World coordinates */ DISP_3D_SEND_LIT_EYE_COORDS = 0x00000002, /* Send vertices in Eye coordinates, after lighting */ DISP_3D_SEND_CLIPPED_PRIMS = 0x00000004, /* Send clipped primitives */ DISP_3D_SEND_SPANS = 0x00000010, /* Render primitives as a series of spans */} disp_3d_send_type;/* Actions to be taken on vertices before sending to driver */typedef enum { DISP_3D_PRIMSTATE_XFORM_TEX = 0x00000001, /* Multiply texture coordinates by current texture matrix */ DISP_3D_PRIMSTATE_DIV_BY_W = 0x00000002, /* Perform division by W (clipped primitives only) */ DISP_3D_PRIMSTATE_VP_XLATE = 0x00000004, /* Translate to viewport coordinates (clipped primitives only) */} disp_3d_primstate_flag;typedef enum { DISP_3D_DATA_COORDS, /* X, Y, Z, W */ DISP_3D_DATA_NORMAL, /* X, Y, Z */ DISP_3D_DATA_RGBA, /* R, G, B, A */ DISP_3D_DATA_STRQ0, /* S, T, R, Q */ DISP_3D_DATA_STRQ1, /* S, T, R, Q */ DISP_3D_DATA_STRQ2, /* S, T, R, Q */ DISP_3D_DATA_STRQ3, /* S, T, R, Q */ DISP_3D_DATA_FOG, /* Fog distance */} disp_3d_data_type;typedef enum { DISP_3D_CTX_FLAG_USE_VTXCOLOR = 0x00000001, DISP_3D_CTX_FLAG_USE_VTXNORM = 0x00000002, DISP_3D_CTX_FLAG_PRIM_USE_VTXCOLOR = 0x00000004} disp_3d_ctx_flag;/* Driver may set these flags when processing Lit Eye Co-ordinates, if it * determines that it can't process the specified primitives correctly. * For example, the driver may be able to render triangle strips and * fans etc., but cannot handle the case where vertices are outside of the * far or near clipping planes. */typedef enum { DISP_3D_PCTL_FLAG_LEC_FBACK_MM_CP = 0x00000001, /* Matrix multiplication still needs to be performed on the vertices, and the driver is prepared to accept clipped primitives */ DISP_3D_PCTL_FLAG_LEC_FBACK_CP = 0x00000002, /* The driver is prepared to accept clipped primitives */ DISP_3D_PCTL_FLAG_LEC_FBACK_MM_SPANS = 0x00000004, /* Matrix multiplication still needs to be performed on the vertices, and the driver can only accept spans */ DISP_3D_PCTL_FLAG_LEC_FBACK_SPANS = 0x00000008, /* The driver can only accept spans */} disp_3d_pctl_flag;#define DISP_3D_PCTL_FLAG_LEC_FBACK_MASK \ (DISP_3D_PCTL_FLAG_LEC_FBACK_MM_CP | \ DISP_3D_PCTL_FLAG_LEC_FBACK_CP | \ DISP_3D_PCTL_FLAG_LEC_FBACK_MM_SPANS | \ DISP_3D_PCTL_FLAG_LEC_FBACK_SPANS)typedef enum { DISP_3D_MATRIX_FLAG_IS_IDENTITY = 0x00000001,} disp_3d_matrix_flag;/* Defines for "flags" argument to prim_begin() */#define DISP_3D_VTX_FLAG_DFLT_Z 0x00000001#define DISP_3D_VTX_FLAG_DFLT_W 0x00000002#define DISP_3D_VTX_FLAG_DFLT_R(__tmu) (1<<((__tmu)+4))#define DISP_3D_VTX_FLAG_DFLT_Q(__tmu) (1<<((__tmu)+12))typedef struct { int allocated; unsigned format[DISP_3D_LOG2_MAX_TEXTURE_SIZE+1]; /* See DISP_3D_TEXFORMAT_* */ int max_lod; GLfixed switchover; void *image[DISP_3D_LOG2_MAX_TEXTURE_SIZE+1]; int width[DISP_3D_LOG2_MAX_TEXTURE_SIZE+1]; int height[DISP_3D_LOG2_MAX_TEXTURE_SIZE+1]; int stride[DISP_3D_LOG2_MAX_TEXTURE_SIZE+1]; void *palette; int compressed_size; GLenum min_filter; GLenum mag_filter; int min_linear; GLenum wrap_s; GLenum wrap_t; void *driver_private;} disp_texture_t;typedef struct { unsigned name; GLenum usage; unsigned size; /* In bytes */ void *dataptr; void *driver_private;} disp_bufobj_t;typedef struct light_state { struct { disp_real r; disp_real g; disp_real b; disp_real a; } ambient; struct { disp_real r; disp_real g; disp_real b; disp_real a; } diffuse; struct { disp_real r; disp_real g; disp_real b; disp_real a; } specular; struct { disp_real x; disp_real y; disp_real z; disp_real w; } position; struct { disp_real x; disp_real y; disp_real z; GLboolean transformed; } spot_direction; disp_real spot_exponent; disp_real spot_cutoff; disp_real cos_spot_cutoff; disp_real constant_attenuation; disp_real linear_attenuation; disp_real quadratic_attenuation; GLboolean enabled; unsigned new_state; unsigned imp_flags; unsigned reserved[3];} disp_3d_light_state_t;typedef struct { int enabled; int complete; disp_real s; disp_real t; disp_real r; disp_real q; GLenum env_mode; int function; disp_real env_r; disp_real env_g; disp_real env_b; disp_real env_a; disp_real tex_matrix[DISP_3D_TEX_MATRIX_ENTRIES][16]; disp_3d_matrix_flag tex_matrix_flags[DISP_3D_TEX_MATRIX_ENTRIES]; int tex_matrix_stackptr;} disp_tmu_state_t;typedef struct { disp_real x; disp_real y; disp_real z; disp_real w; disp_real r[2]; disp_real g[2]; disp_real b[2]; disp_real a; disp_real fog; struct { disp_real s; disp_real t; disp_real r; disp_real q; } t[DISP_3D_MAX_TMUS]; union { struct { disp_real x; disp_real y; disp_real z; } normal; struct { /* * Stores NDC's or Viewports coords, depending * on what the device wants. */ disp_real x; disp_real y; disp_real z; } ndc; } u; unsigned flags; /* Not for driver's use */} disp_3d_vertex_t;typedef struct disp_3d_span_params { struct disp_rendercontext_t *rctx; GLfixed r_start; GLfixed r_step; GLfixed g_start; GLfixed g_step; GLfixed b_start; GLfixed b_step; GLfixed a_start; GLfixed a_step; GLfixed f_start; GLfixed f_step; int z_start; int z_step; GLfixed *spanbuf; GLfixed *cvgbuf; unsigned reserved[7];} disp_3d_span_params_t;typedef struct disp_3d_prim_state { disp_3d_send_type send_type; disp_3d_primstate_flag flags; unsigned reserved[4];} disp_3d_prim_state_t;typedef struct disp_3d_data_ptr { disp_real *xptr; disp_real *yptr; disp_real *zptr; disp_real *wptr; disp_real *rptr; disp_real *gptr; disp_real *bptr;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -