PDA

View Full Version : Missing prototypes in glext.h



npapier
05-19-2010, 03:23 AM
Is it normal that the file glext.h no longer contains the functions prototypes for the recent extensions published ?

For example specification of extension GL_AMD_debug_output contains DebugMessageEnableAMD() function, but not glext.h.
The tokens are well declared in glext.h :

#ifndef GL_AMD_debug_output
#define GL_MAX_DEBUG_LOGGED_MESSAGES_AMD 0x9144
#define GL_DEBUG_LOGGED_MESSAGES_AMD 0x9145
...
#define GL_DEBUG_CATEGORY_APPLICATION_AMD 0x914F
#define GL_DEBUG_CATEGORY_OTHER_AMD 0x9150
#endif
but not the function prototypes that should be in a section similar to:

#ifndef GL_NV_texture_barrier
#define GL_NV_texture_barrier 1
#ifdef GL_GLEXT_PROTOTYPES
GLAPI void APIENTRY glTextureBarrierNV (void);
#endif /* GL_GLEXT_PROTOTYPES */
typedef void (APIENTRYP PFNGLTEXTUREBARRIERNVPROC) (void);
#endif

Nicolas.

Alfonse Reinheart
05-19-2010, 09:17 AM
Is it normal that the file glext.h no longer contains the functions prototypes for the recent extensions published ?

Define "recent." GL_AMD_debug_output was released less than 2 weeks ago. That's probably not enough time to update the spec files and everything.

npapier
05-20-2010, 01:37 AM
recent "definition": the new extensions added by glext.h version 62

To highlight the problem, the main difference between glext.h version 62 and 61 are for the section containing tokens (lines 4669-4830):

#ifndef GL_EXT_shader_image_load_store
#define GL_MAX_IMAGE_UNITS_EXT 0x8F38
#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_E XT 0x8F39
#define GL_IMAGE_BINDING_NAME_EXT 0x8F3A
...
#define GL_ATOMIC_COUNTER_BARRIER_BIT_EXT 0x00001000
#define GL_ALL_BARRIER_BITS_EXT 0xFFFFFFFF
#endif

#ifndef GL_EXT_vertex_attrib_64bit
/* reuse GL_DOUBLE */
#define GL_DOUBLE_VEC2_EXT 0x8FFC
...
#define GL_DOUBLE_MAT4x3_EXT 0x8F4E
#endif

#ifndef GL_NV_gpu_program5
#define GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV 0x8E5A
...
#define GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV 0x8E5D
#endif

#ifndef GL_NV_gpu_shader5
#define GL_INT64_NV 0x140E
...

#define GL_FLOAT16_VEC4_NV 0x8FFB
/* reuse GL_PATCHES */
#endif

#ifndef GL_NV_shader_buffer_store
#define GL_SHADER_GLOBAL_ACCESS_BARRIER_BIT_NV 0x00000010
/* reuse GL_READ_WRITE */
/* reuse GL_WRITE_ONLY */
#endif

#ifndef GL_NV_tessellation_program5
#define GL_MAX_PROGRAM_PATCH_ATTRIBS_NV 0x86D8
...
#define GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV 0x8C75
#endif

#ifndef GL_NV_vertex_attrib_integer_64bit
/* reuse GL_INT64_NV */
/* reuse GL_UNSIGNED_INT64_NV */
#endif

#ifndef GL_NV_multisample_coverage
#define GL_COVERAGE_SAMPLES_NV 0x80A9
#define GL_COLOR_SAMPLES_NV 0x8E20
#endif

#ifndef GL_AMD_name_gen_delete
#define GL_DATA_BUFFER_AMD 0x9151
...
#define GL_SAMPLER_OBJECT_AMD 0x9155
#endif

#ifndef GL_AMD_debug_output
#define GL_MAX_DEBUG_LOGGED_MESSAGES_AMD 0x9144
...
#define GL_DEBUG_CATEGORY_OTHER_AMD 0x9150
#endif

and for the section declaring prototypes (lines 10238-10274):

#ifndef GL_EXT_shader_image_load_store
#define GL_EXT_shader_image_load_store 1
#endif

#ifndef GL_EXT_vertex_attrib_64bit
#define GL_EXT_vertex_attrib_64bit 1
#endif

#ifndef GL_NV_gpu_program5
#define GL_NV_gpu_program5 1
#endif

#ifndef GL_NV_gpu_shader5
#define GL_NV_gpu_shader5 1
#endif

#ifndef GL_NV_shader_buffer_store
#define GL_NV_shader_buffer_store 1
#endif

#ifndef GL_NV_tessellation_program5
#define GL_NV_tessellation_program5 1
#endif

#ifndef GL_NV_vertex_attrib_integer_64bit
#define GL_NV_vertex_attrib_integer_64bit 1
#endif

#ifndef GL_NV_multisample_coverage
#define GL_NV_multisample_coverage 1
#endif

#ifndef GL_AMD_name_gen_delete
#define GL_AMD_name_gen_delete 1
#endif

As you can read, the tokens are here. But that's not true for the prototypes. So, that's why I am a bit surprised and i reported this problem.