-
Notifications
You must be signed in to change notification settings - Fork 25
Expand file tree
/
Copy pathgl_extensions.cpp
More file actions
64 lines (54 loc) · 1.63 KB
/
Copy pathgl_extensions.cpp
File metadata and controls
64 lines (54 loc) · 1.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include "util/gl_extensions.hpp"
#include "display_kernel.hpp"
namespace cvisual {
template <class PFN>
void getPFN( PFN& func, display_kernel& d, const char* name ) {
func = reinterpret_cast<PFN>( d.getProcAddress( name ) );
if (!func)
throw std::runtime_error(
("Unable to get extension function: " +
(std::string)name + " even though the extension is advertised.").c_str() );
}
gl_extensions::gl_extensions() {
memset( this, 0, sizeof(this) );
}
void gl_extensions::init( display_kernel& d ) {
#define F( name ) getPFN( name, d, #name )
//printf("t: %p\n", &glBegin);
//printf("%p\n", d.getProcAddress("glBegin"));
if ( ARB_shader_objects = d.hasExtension( "GL_ARB_shader_objects" ) ) {
F( glCreateProgramObjectARB );
F( glLinkProgramARB );
F( glUseProgramObjectARB );
F( glCreateShaderObjectARB );
F( glShaderSourceARB );
F( glCompileShaderARB );
F( glAttachObjectARB );
F( glDeleteObjectARB );
F( glGetHandleARB );
F( glUniform1iARB );
F( glUniformMatrix4fvARB );
F( glUniform4fvARB );
F( glGetUniformLocationARB );
F( glGetObjectParameterivARB );
F( glGetInfoLogARB );
}
if ( EXT_texture3D = d.hasExtension( "GL_EXT_texture3D" ) ) {
F( glTexImage3D );
F( glTexSubImage3D );
} else {
#ifdef __APPLE__
// Supported natively but NOT as an extension
EXT_texture3D = true;
glTexImage3D = ::glTexImage3D;
glTexSubImage3D = ::glTexSubImage3D;
#endif
}
if ( ARB_multitexture = d.hasExtension( "GL_ARB_multitexture" ) ) {
F( glActiveTexture );
}
if ( ARB_point_parameters = d.hasExtension( "GL_ARB_point_parameters" ) ) {
F( glPointParameterfvARB );
}
}
} // namespace cvisual