File: GLExtension.hpp

package info (click to toggle)
criticalmass 1%3A1.0.0-1.5
  • links: PTS
  • area: main
  • in suites: wheezy
  • size: 18,740 kB
  • sloc: ansic: 47,628; cpp: 25,167; sh: 12,025; xml: 3,532; perl: 3,271; makefile: 662; python: 66; awk: 40; lisp: 33
file content (100 lines) | stat: -rw-r--r-- 2,365 bytes parent folder | download | duplicates (10)
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
// Description:
//   GL extension helpers.
//
// Copyright (C) 2001 Frank Becker
//
// This program is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free Software
// Foundation;  either version 2 of the License,  or (at your option) any  later
// version.
//
// This program is distributed in the hope that it will be useful,  but  WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details
//
#ifndef _GLExtension_hpp_
#define _GLExtension_hpp_

extern "C" { typedef void (*__GL_EXT_FuncPtr)(); }

#define GLEXTCAST (__GL_EXT_FuncPtr)

#ifdef WIN32
# ifndef WINAPI
#  define WINAPI
# endif
#endif

#include <gl++.hpp>

#include "SDL.h"

#include <stdio.h>
#include <string.h>

#include <Trace.hpp>

class GLExtension
{
public:
    GLExtension( const char *extensionName)
    {
	//get all extensions, pad with space
	if( !_paddedExtensions)
	{
	    const char *extensions = (const char *)glGetString(GL_EXTENSIONS);
	    _paddedExtensions = new char[ strlen(extensions) +2];
	    strcat( strcpy( _paddedExtensions, extensions), " ");
//	    LOG_INFO << "[" << _paddedExtensions << "]" << endl;
	}

	_extensionName = new char[ strlen(extensionName)+1];
	strcpy(_extensionName, extensionName);

        //check if extension is supported
	_isSupported = false;
	if( strstr( _paddedExtensions, _extensionName))
	{
	    LOG_INFO << "Supported: [" << _extensionName << "]" << endl;
	    _isSupported =true;
	}
    }
    virtual ~GLExtension()
    {
	delete[] _extensionName;
    }
    virtual const char *getName( void) = 0;

    static void close( void)
    {
	delete[] _paddedExtensions;
	_paddedExtensions=0;
    }

    bool isSupported( void)
    {
	return _isSupported;
    }

protected:
    __GL_EXT_FuncPtr GetExtensionProc( char *fName)
    {
	__GL_EXT_FuncPtr fn = (__GL_EXT_FuncPtr) SDL_GL_GetProcAddress(fName);
	if(!fn) 
	{
	    LOG_ERROR << getName() << ": Unable to get function pointer for "
	              << fName << endl;
	}
	return fn;
    }

private:
    GLExtension( void);
    GLExtension( const GLExtension&);
    GLExtension &operator=(const GLExtension&);

    bool _isSupported;
    char *_extensionName;
    static char *_paddedExtensions;
};
#endif