/* Copyright (c) 2001, Stanford University * All rights reserved. * * See the file LICENSE.txt for information on redistributing this software. */ #ifndef CR_LIMITS_H #define CR_LIMITS_H #include "chromium.h" #include "cr_version.h" #include #ifdef __cplusplus extern "C" { #endif /* glGetString strings */ #define CR_RENDERER "Chromium" #define CR_VENDOR "Humper" #define CR_MAX_TEXTURE_UNITS 8 #define CR_MAX_GENERAL_COMBINERS 8 #define CR_MAX_TEXTURE_SIZE 8192 #define CR_MAX_3D_TEXTURE_SIZE 512 #define CR_MAX_CUBE_TEXTURE_SIZE 4096 #define CR_MAX_RECTANGLE_TEXTURE_SIZE 4096 #define CR_MAX_TEXTURE_ANISOTROPY 8.0 #define CR_MAX_LIGHTS 8 #define CR_MAX_CLIP_PLANES 8 #define CR_MAX_PROJECTION_STACK_DEPTH 32 #define CR_MAX_MODELVIEW_STACK_DEPTH 32 #define CR_MAX_TEXTURE_STACK_DEPTH 10 #define CR_MAX_COLOR_STACK_DEPTH 2 #define CR_MAX_ATTRIB_STACK_DEPTH 16 #define CR_MAX_CLIENT_ATTRIB_STACK_DEPTH 16 #define CR_MAX_NAME_STACK_DEPTH 64 #define CR_MAX_ELEMENTS_INDICES 16384 #define CR_MAX_ELEMENTS_VERTICES 16384 #define CR_MAX_EVAL_ORDER 8 #define CR_MAX_LIST_NESTING 64 #define CR_MAX_PIXEL_MAP_TABLE 256 #define CR_MAX_VIEWPORT_DIM 16384 #define CR_SUBPIXEL_BITS 8 #define CR_ALIASED_POINT_SIZE_MIN 1.0 #define CR_ALIASED_POINT_SIZE_MAX 64.0 #define CR_SMOOTH_POINT_SIZE_MIN 1.0 #define CR_SMOOTH_POINT_SIZE_MAX 64.0 #define CR_POINT_SIZE_GRANULARITY 0.5 #define CR_ALIASED_LINE_WIDTH_MIN 1.0 #define CR_ALIASED_LINE_WIDTH_MAX 64.0 #define CR_SMOOTH_LINE_WIDTH_MIN 1.0 #define CR_SMOOTH_LINE_WIDTH_MAX 64.0 #define CR_LINE_WIDTH_GRANULARITY 0.5 #define CR_MAX_VERTEX_ATTRIBS 16 #define CR_MAX_TEXTURE_LOD_BIAS 8.0 #ifdef CR_NV_fragment_program #define CR_MAX_TEXTURE_COORDS 2 #define CR_MAX_TEXTURE_IMAGE_UNITS 2 #define CR_MAX_FRAGMENT_LOCAL_PARAMS 64 #endif #ifdef CR_NV_vertex_program #define CR_MAX_PROGRAM_MATRICES 8 #define CR_MAX_PROGRAM_MATRIX_STACK_DEPTH 4 #endif #ifdef CR_ARB_fragment_program #define CR_MAX_FRAGMENT_PROGRAM_INSTRUCTIONS 72 #define CR_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMS 24 #define CR_MAX_FRAGMENT_PROGRAM_ENV_PARAMS 256 #define CR_MAX_FRAGMENT_PROGRAM_TEMPS 16 #define CR_MAX_FRAGMENT_PROGRAM_ATTRIBS 10 #define CR_MAX_FRAGMENT_PROGRAM_ADDRESS_REGS 1 #define CR_MAX_FRAGMENT_PROGRAM_ALU_INSTRUCTIONS 48 #define CR_MAX_FRAGMENT_PROGRAM_TEX_INSTRUCTIONS 24 #define CR_MAX_FRAGMENT_PROGRAM_TEX_INDIRECTIONS 4 #endif #ifdef CR_ARB_vertex_program #define CR_MAX_VERTEX_PROGRAM_INSTRUCTIONS 128 #define CR_MAX_VERTEX_PROGRAM_LOCAL_PARAMS 96 #define CR_MAX_VERTEX_PROGRAM_ENV_PARAMS 256 /* for GL_NV_vertex_program2 */ #define CR_MAX_VERTEX_PROGRAM_TEMPS 12 #define CR_MAX_VERTEX_PROGRAM_ATTRIBS 16 #define CR_MAX_VERTEX_PROGRAM_ADDRESS_REGS 1 #endif #if defined(CR_ARB_vertex_program) || defined(CR_ARB_fragment_program) /* These must be the max of the fragment and vertex program limits */ #define CR_MAX_PROGRAM_LOCAL_PARAMS (CR_MAX_VERTEX_PROGRAM_LOCAL_PARAMS > CR_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMS ? CR_MAX_VERTEX_PROGRAM_LOCAL_PARAMS : CR_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMS) #define CR_MAX_PROGRAM_ENV_PARAMS (CR_MAX_VERTEX_PROGRAM_ENV_PARAMS > CR_MAX_FRAGMENT_PROGRAM_ENV_PARAMS ? CR_MAX_VERTEX_PROGRAM_ENV_PARAMS : CR_MAX_FRAGMENT_PROGRAM_ENV_PARAMS) #endif /* Just need these for autogenerated code in state_get.c, etc */ #if defined(CR_ARB_vertex_program) || defined(CR_NV_vertex_program) #define CR_any_vertex_program 1 #endif #if defined(CR_ARB_fragment_program) || defined(CR_NV_fragment_program) #define CR_any_fragment_program 1 #endif #if defined(CR_any_vertex_program) || defined(CR_any_fragment_program) #define CR_any_program 1 #endif /* * OpenGL's implementation-dependent values (not part of any attribute group). */ typedef struct { GLuint maxTextureUnits; GLuint maxTextureSize; GLuint max3DTextureSize; /* OpenGL 1.2 */ #ifdef CR_ARB_texture_cube_map GLuint maxCubeMapTextureSize; #endif GLuint maxLights; GLuint maxClipPlanes; GLuint maxProjectionStackDepth; GLuint maxModelviewStackDepth; GLuint maxTextureStackDepth; GLuint maxColorStackDepth; /* OpenGL 1.2 */ GLuint maxAttribStackDepth; GLuint maxClientAttribStackDepth; GLuint maxNameStackDepth; GLuint maxElementsIndices; GLuint maxElementsVertices; GLuint maxEvalOrder; GLuint maxListNesting; GLuint maxPixelMapTable; GLint maxViewportDims[2]; GLuint subpixelBits; GLfloat aliasedPointSizeRange[2]; GLfloat smoothPointSizeRange[2]; GLfloat pointSizeGranularity; GLfloat aliasedLineWidthRange[2]; GLfloat smoothLineWidthRange[2]; GLfloat lineWidthGranularity; #ifdef CR_EXT_texture_lod_bias GLfloat maxTextureLodBias; #endif #ifdef CR_EXT_texture_filter_anisotropic GLfloat maxTextureAnisotropy; #endif #ifdef CR_ARB_texture_compression GLuint numCompressedFormats; GLenum compressedFormats[10]; #endif #ifdef CR_NV_register_combiners GLuint maxGeneralCombiners; #endif #ifdef CR_NV_texture_rectangle GLuint maxRectTextureSize; #endif #ifdef CR_NV_fragment_program GLuint maxTextureCoords; GLuint maxTextureImageUnits; /*GLuint maxFragmentProgramLocalParams;*/ #endif #ifdef CR_NV_vertex_program GLuint maxProgramMatrixStackDepth; GLuint maxProgramMatrices; #endif #ifdef CR_ARB_fragment_program GLuint maxFragmentProgramInstructions; GLuint maxFragmentProgramLocalParams; GLuint maxFragmentProgramEnvParams; GLuint maxFragmentProgramTemps; GLuint maxFragmentProgramAttribs; GLuint maxFragmentProgramAddressRegs; GLuint maxFragmentProgramAluInstructions; GLuint maxFragmentProgramTexInstructions; GLuint maxFragmentProgramTexIndirections; #endif #ifdef CR_ARB_vertex_program GLuint maxVertexProgramInstructions; GLuint maxVertexProgramLocalParams; GLuint maxVertexProgramEnvParams; GLuint maxVertexProgramTemps; GLuint maxVertexProgramAttribs; GLuint maxVertexProgramAddressRegs; #endif const GLubyte *extensions; /* Framebuffer/visual attributes */ GLuint redBits, greenBits, blueBits, alphaBits; GLuint depthBits, stencilBits, indexBits; GLuint accumRedBits, accumGreenBits, accumBlueBits, accumAlphaBits; GLuint auxBuffers; GLboolean rgbaMode; GLboolean doubleBuffer; GLboolean stereo; GLuint sampleBuffers; GLuint samples; GLuint level; } CRLimitsState; /* Booleans to indicate which OpenGL extensions are supported at runtime. * XXX might merge this into the above structure someday. */ typedef struct { GLboolean ARB_depth_texture; GLboolean ARB_fragment_program; GLboolean ARB_imaging; GLboolean ARB_multisample; GLboolean ARB_multitexture; GLboolean ARB_occlusion_query; GLboolean ARB_point_parameters; GLboolean ARB_point_sprite; GLboolean ARB_shadow; GLboolean ARB_shadow_ambient; GLboolean ARB_texture_border_clamp; /* or SGIS_texture_border_clamp */ GLboolean ARB_texture_compression; GLboolean ARB_texture_cube_map; /* or EXT_texture_cube_map */ GLboolean ARB_texture_env_add; /* standard in OpenGL 1.3 */ GLboolean ARB_texture_env_combine; /* standard in OpenGL 1.3 */ GLboolean ARB_texture_env_crossbar; /* standard in OpenGL 1.4 */ GLboolean ARB_texture_env_dot3; /* standard in OpenGL 1.3 */ GLboolean ARB_texture_mirrored_repeat; GLboolean ARB_texture_non_power_of_two; /* standard in 1.5 */ GLboolean ARB_transpose_matrix; GLboolean ARB_vertex_buffer_object; GLboolean ARB_pixel_buffer_object; GLboolean ARB_vertex_program; GLboolean ARB_window_pos; GLboolean EXT_blend_color; GLboolean EXT_blend_logic_op; GLboolean EXT_blend_func_separate; GLboolean EXT_blend_minmax; GLboolean EXT_blend_subtract; GLboolean EXT_clip_volume_hint; GLboolean EXT_fog_coord; GLboolean EXT_multi_draw_arrays; GLboolean EXT_secondary_color; GLboolean EXT_separate_specular_color; GLboolean EXT_shadow_funcs; GLboolean EXT_stencil_wrap; GLboolean EXT_texture_edge_clamp; /* or SGIS_texture_edge_clamp */ GLboolean EXT_texture_filter_anisotropic; GLboolean EXT_texture_lod_bias; GLboolean EXT_texture3D; GLboolean IBM_rasterpos_clip; GLboolean NV_fog_distance; GLboolean NV_fragment_program; GLboolean NV_register_combiners; GLboolean NV_register_combiners2; GLboolean NV_texgen_reflection; GLboolean NV_texture_rectangle; GLboolean NV_vertex_program; GLboolean NV_vertex_program1_1; GLboolean NV_vertex_program2; GLboolean SGIS_generate_mipmap; GLboolean EXT_texture_from_pixmap; GLboolean ATI_texture_mirror_once; /* derived from above */ GLboolean any_vertex_program; /* NV or ARB */ GLboolean any_fragment_program; /* NV or ARB */ GLboolean any_program; /* vertex or fragment */ } CRExtensionState; extern DECLEXPORT(void) crStateLimitsInit(CRLimitsState *limits); extern DECLEXPORT(void) crStateLimitsDestroy(CRLimitsState *limits); extern DECLEXPORT(void) crStateLimitsPrint(const CRLimitsState *limits); extern DECLEXPORT(GLfloat) crStateComputeVersion(float minVersion); extern DECLEXPORT(GLubyte *) crStateMergeExtensions(GLuint n, const GLubyte **extensions); extern DECLEXPORT(void) crStateExtensionsInit( CRLimitsState *limits, CRExtensionState *extensions ); #ifdef __cplusplus } #endif #endif /* CR_STATE_FOG_H */