📄 program.h
字号:
/* * Mesa 3-D graphics library * Version: 6.5 * * Copyright (C) 1999-2005 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. *//** * \file program.c * Vertex and fragment program support functions. * \author Brian Paul *//** * \mainpage Mesa vertex and fragment program module * * This module or directory contains most of the code for vertex and * fragment programs and shaders, including state management, parsers, * and (some) software routines for executing programs */#ifndef PROGRAM_H#define PROGRAM_H#include "mtypes.h"/* for GL_ARB_v_p and GL_ARB_f_p SWZ instruction */#define SWIZZLE_X 0#define SWIZZLE_Y 1#define SWIZZLE_Z 2#define SWIZZLE_W 3#define SWIZZLE_ZERO 4 /* keep these values together: KW */#define SWIZZLE_ONE 5 /* keep these values together: KW */#define MAKE_SWIZZLE4(a,b,c,d) (((a)<<0) | ((b)<<3) | ((c)<<6) | ((d)<<9))#define SWIZZLE_NOOP MAKE_SWIZZLE4(0,1,2,3)#define GET_SWZ(swz, idx) (((swz) >> ((idx)*3)) & 0x7)#define GET_BIT(msk, idx) (((msk) >> (idx)) & 0x1)#define WRITEMASK_X 0x1#define WRITEMASK_Y 0x2#define WRITEMASK_XY 0x3#define WRITEMASK_Z 0x4#define WRITEMASK_XZ 0x5#define WRITEMASK_YZ 0x6#define WRITEMASK_XYZ 0x7#define WRITEMASK_W 0x8#define WRITEMASK_XW 0x9#define WRITEMASK_YW 0xa#define WRITEMASK_XYW 0xb#define WRITEMASK_ZW 0xc#define WRITEMASK_XZW 0xd#define WRITEMASK_YZW 0xe#define WRITEMASK_XYZW 0xfextern struct program _mesa_DummyProgram;/* * Internal functions */extern void_mesa_init_program(GLcontext *ctx);extern void_mesa_free_program_data(GLcontext *ctx);extern void_mesa_set_program_error(GLcontext *ctx, GLint pos, const char *string);extern const GLubyte *_mesa_find_line_column(const GLubyte *string, const GLubyte *pos, GLint *line, GLint *col);extern struct program * _mesa_init_vertex_program(GLcontext *ctx, struct vertex_program *prog, GLenum target, GLuint id);extern struct program * _mesa_init_fragment_program(GLcontext *ctx, struct fragment_program *prog, GLenum target, GLuint id);extern struct program *_mesa_new_program(GLcontext *ctx, GLenum target, GLuint id);extern void_mesa_delete_program(GLcontext *ctx, struct program *prog);/** * Used for describing GL state referenced from inside ARB vertex and * fragment programs. * A string such as "state.light[0].ambient" gets translated into a * sequence of tokens such as [ STATE_LIGHT, 0, STATE_AMBIENT ]. */enum state_index { STATE_MATERIAL, STATE_LIGHT, STATE_LIGHTMODEL_AMBIENT, STATE_LIGHTMODEL_SCENECOLOR, STATE_LIGHTPROD, STATE_TEXGEN, STATE_FOG_COLOR, STATE_FOG_PARAMS, STATE_CLIPPLANE, STATE_POINT_SIZE, STATE_POINT_ATTENUATION, STATE_MATRIX, STATE_MODELVIEW, STATE_PROJECTION, STATE_MVP, STATE_TEXTURE, STATE_PROGRAM, STATE_MATRIX_INVERSE, STATE_MATRIX_TRANSPOSE, STATE_MATRIX_INVTRANS, STATE_AMBIENT, STATE_DIFFUSE, STATE_SPECULAR, STATE_EMISSION, STATE_SHININESS, STATE_HALF, STATE_POSITION, STATE_ATTENUATION, STATE_SPOT_DIRECTION, STATE_TEXGEN_EYE_S, STATE_TEXGEN_EYE_T, STATE_TEXGEN_EYE_R, STATE_TEXGEN_EYE_Q, STATE_TEXGEN_OBJECT_S, STATE_TEXGEN_OBJECT_T, STATE_TEXGEN_OBJECT_R, STATE_TEXGEN_OBJECT_Q, STATE_TEXENV_COLOR, STATE_DEPTH_RANGE, STATE_VERTEX_PROGRAM, STATE_FRAGMENT_PROGRAM, STATE_ENV, STATE_LOCAL, STATE_INTERNAL, /* Mesa additions */ STATE_NORMAL_SCALE, STATE_POSITION_NORMALIZED /* normalized light position */};/** * Named program parameters * Used for NV_fragment_program "DEFINE"d constants and "DECLARE"d parameters, * and ARB_fragment_program global state references. For the later, Name * might be "state.light[0].diffuse", for example. */struct program_parameter{ const char *Name; /* Null-terminated */ enum register_file Type; /** PROGRAM_NAMED_PARAM, CONSTANT or STATE_VAR */ enum state_index StateIndexes[6]; /* Global state reference */};struct program_parameter_list{ GLuint Size; /** allocated size of Parameters, ParameterValues */ GLuint NumParameters; /** number of parameters in arrays */ struct program_parameter *Parameters; /** Array [Size] */ GLfloat (*ParameterValues)[4]; /** Array [Size] */ GLuint StateFlags; /** _NEW_* flags indicating which statechanges might invalidate ParameterValues[] */};/* * Program parameter functions */extern struct program_parameter_list *_mesa_new_parameter_list(void);extern void_mesa_free_parameter_list(struct program_parameter_list *paramList);extern void_mesa_free_parameters(struct program_parameter_list *paramList);extern GLint_mesa_add_named_parameter(struct program_parameter_list *paramList, const char *name, const GLfloat values[4]);extern GLint_mesa_add_named_constant(struct program_parameter_list *paramList, const char *name, const GLfloat values[4]);extern GLint_mesa_add_unnamed_constant(struct program_parameter_list *paramList, const GLfloat values[4]);extern GLint_mesa_add_state_reference(struct program_parameter_list *paramList, const GLint *stateTokens);extern GLfloat *_mesa_lookup_parameter_value(struct program_parameter_list *paramList, GLsizei nameLen, const char *name);extern GLint_mesa_lookup_parameter_index(struct program_parameter_list *paramList, GLsizei nameLen, const char *name);extern void_mesa_load_state_parameters(GLcontext *ctx, struct program_parameter_list *paramList);extern void_mesa_print_instruction(const struct prog_instruction *inst);extern void_mesa_print_program(const struct program *prog);extern void_mesa_print_program_parameters(GLcontext *ctx, const struct program *prog);/* * API functions common to ARB/NV_vertex/fragment_program */extern void GLAPIENTRY_mesa_BindProgram(GLenum target, GLuint id);extern void GLAPIENTRY_mesa_DeletePrograms(GLsizei n, const GLuint *ids);extern void GLAPIENTRY_mesa_GenPrograms(GLsizei n, GLuint *ids);extern GLboolean GLAPIENTRY_mesa_IsProgram(GLuint id);/* * GL_MESA_program_debug */extern void_mesa_ProgramCallbackMESA(GLenum target, GLprogramcallbackMESA callback, GLvoid *data);extern void_mesa_GetProgramRegisterfvMESA(GLenum target, GLsizei len, const GLubyte *registerName, GLfloat *v);#endif /* PROGRAM_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -