mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-04 02:42:49 -04:00
move extensions checking from wgldisplay to glstuff
This commit is contained in:
parent
942f315170
commit
7e1501fd18
@ -48,6 +48,8 @@
|
|||||||
#include "nodePath.h"
|
#include "nodePath.h"
|
||||||
#include "dcast.h"
|
#include "dcast.h"
|
||||||
#include "pvector.h"
|
#include "pvector.h"
|
||||||
|
#include "vector_string.h"
|
||||||
|
#include "string_utils.h"
|
||||||
|
|
||||||
#ifdef DO_PSTATS
|
#ifdef DO_PSTATS
|
||||||
#include "pStatTimer.h"
|
#include "pStatTimer.h"
|
||||||
@ -417,6 +419,17 @@ reset() {
|
|||||||
if(GLCAT.is_debug())
|
if(GLCAT.is_debug())
|
||||||
GLCAT.debug() << "frame buffer depth < 8bits channel, enabling dithering\n";
|
GLCAT.debug() << "frame buffer depth < 8bits channel, enabling dithering\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Output the vendor and version strings.
|
||||||
|
show_gl_string("GL_VENDOR", GL_VENDOR);
|
||||||
|
show_gl_string("GL_RENDERER", GL_RENDERER);
|
||||||
|
show_gl_string("GL_VERSION", GL_VERSION);
|
||||||
|
|
||||||
|
// Save the extensions tokens.
|
||||||
|
save_extensions((const char *)glGetString(GL_EXTENSIONS));
|
||||||
|
get_extra_extensions();
|
||||||
|
report_extensions();
|
||||||
|
|
||||||
report_gl_errors();
|
report_gl_errors();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1577,12 +1590,12 @@ draw_sphere(GeomSphere *geom, GeomContext *) {
|
|||||||
// Draw overall
|
// Draw overall
|
||||||
issuer.issue_color(G_OVERALL, ci);
|
issuer.issue_color(G_OVERALL, ci);
|
||||||
|
|
||||||
GLUquadricObj *sph = gluNewQuadric();
|
GLUquadricObj *sph = GLP(uNewQuadric)();
|
||||||
gluQuadricNormals(sph, wants_normals() ? (GLenum)GLU_SMOOTH : (GLenum)GLU_NONE);
|
GLP(uQuadricNormals)(sph, wants_normals() ? (GLenum)GLU_SMOOTH : (GLenum)GLU_NONE);
|
||||||
gluQuadricTexture(sph, wants_texcoords() ? (GLenum)GL_TRUE : (GLenum)GL_FALSE);
|
GLP(uQuadricTexture)(sph, wants_texcoords() ? (GLenum)GL_TRUE : (GLenum)GL_FALSE);
|
||||||
gluQuadricOrientation(sph, (GLenum)GLU_OUTSIDE);
|
GLP(uQuadricOrientation)(sph, (GLenum)GLU_OUTSIDE);
|
||||||
gluQuadricDrawStyle(sph, (GLenum)GLU_FILL);
|
GLP(uQuadricDrawStyle)(sph, (GLenum)GLU_FILL);
|
||||||
//gluQuadricDrawStyle(sph, (GLenum)GLU_LINE);
|
//GLP(uQuadricDrawStyle)(sph, (GLenum)GLU_LINE);
|
||||||
|
|
||||||
for (int i = 0; i < nprims; i++) {
|
for (int i = 0; i < nprims; i++) {
|
||||||
// Draw per primitive
|
// Draw per primitive
|
||||||
@ -1597,7 +1610,7 @@ draw_sphere(GeomSphere *geom, GeomContext *) {
|
|||||||
LVector3f v = edge - center;
|
LVector3f v = edge - center;
|
||||||
float r = sqrt(dot(v, v));
|
float r = sqrt(dot(v, v));
|
||||||
|
|
||||||
// Since gluSphere doesn't have a center parameter, we have to use
|
// Since GLP(uSphere) doesn't have a center parameter, we have to use
|
||||||
// a matrix transform.
|
// a matrix transform.
|
||||||
|
|
||||||
GLP(MatrixMode)(GL_MODELVIEW);
|
GLP(MatrixMode)(GL_MODELVIEW);
|
||||||
@ -1605,13 +1618,13 @@ draw_sphere(GeomSphere *geom, GeomContext *) {
|
|||||||
GLP(MultMatrixf)(LMatrix4f::translate_mat(center).get_data());
|
GLP(MultMatrixf)(LMatrix4f::translate_mat(center).get_data());
|
||||||
|
|
||||||
// Now render the sphere using GLU calls.
|
// Now render the sphere using GLU calls.
|
||||||
gluSphere(sph, r, 16, 10);
|
GLP(uSphere)(sph, r, 16, 10);
|
||||||
|
|
||||||
GLP(MatrixMode)(GL_MODELVIEW);
|
GLP(MatrixMode)(GL_MODELVIEW);
|
||||||
GLP(PopMatrix)();
|
GLP(PopMatrix)();
|
||||||
}
|
}
|
||||||
|
|
||||||
gluDeleteQuadric(sph);
|
GLP(uDeleteQuadric)(sph);
|
||||||
report_gl_errors();
|
report_gl_errors();
|
||||||
DO_PSTATS_STUFF(_draw_primitive_pcollector.stop());
|
DO_PSTATS_STUFF(_draw_primitive_pcollector.stop());
|
||||||
}
|
}
|
||||||
@ -2621,7 +2634,7 @@ report_errors_loop(int line, const char *source_file, GLenum error_code) {
|
|||||||
static const int max_gl_errors_reported = 20;
|
static const int max_gl_errors_reported = 20;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
while ((count < max_gl_errors_reported) && (error_code != GL_NO_ERROR)) {
|
while ((count < max_gl_errors_reported) && (error_code != GL_NO_ERROR)) {
|
||||||
const GLubyte *error_string = gluErrorString(error_code);
|
const GLubyte *error_string = GLP(uErrorString)(error_code);
|
||||||
if (error_string != (const GLubyte *)NULL) {
|
if (error_string != (const GLubyte *)NULL) {
|
||||||
GLCAT.error()
|
GLCAT.error()
|
||||||
<< "at " << line << " of " << source_file << ": "
|
<< "at " << line << " of " << source_file << ": "
|
||||||
@ -2637,6 +2650,89 @@ report_errors_loop(int line, const char *source_file, GLenum error_code) {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: GLGraphicsStateGuardian::show_gl_string
|
||||||
|
// Access: Protected
|
||||||
|
// Description: Outputs the result of glGetString() on the indicated
|
||||||
|
// tag.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
void CLP(GraphicsStateGuardian)::
|
||||||
|
show_gl_string(const string &name, GLenum id) {
|
||||||
|
if (GLCAT.is_debug()) {
|
||||||
|
const GLubyte *text = GLP(GetString)(id);
|
||||||
|
if (text == (const GLubyte *)NULL) {
|
||||||
|
GLCAT.debug()
|
||||||
|
<< "Unable to query " << name << "\n";
|
||||||
|
} else {
|
||||||
|
GLCAT.debug()
|
||||||
|
<< name << " = " << (const char *)text << "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: GLGraphicsStateGuardian::save_extensions
|
||||||
|
// Access: Protected
|
||||||
|
// Description: Separates the string returned by GL_EXTENSIONS (or
|
||||||
|
// glx or wgl extensions) into its individual tokens
|
||||||
|
// and saves them in the _extensions member.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
void CLP(GraphicsStateGuardian)::
|
||||||
|
save_extensions(const char *extensions) {
|
||||||
|
if (extensions != (const char *)NULL) {
|
||||||
|
vector_string tokens;
|
||||||
|
extract_words(extensions, tokens);
|
||||||
|
|
||||||
|
vector_string::iterator ti;
|
||||||
|
for (ti = tokens.begin(); ti != tokens.end(); ++ti) {
|
||||||
|
_extensions.insert(*ti);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: GLGraphicsStateGuardian::get_extra_extensions
|
||||||
|
// Access: Protected, Virtual
|
||||||
|
// Description: This may be redefined by a derived class (e.g. glx or
|
||||||
|
// wgl) to get whatever further extensions strings may
|
||||||
|
// be appropriate to that interface, in addition to the
|
||||||
|
// GL extension strings return by glGetString().
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
void CLP(GraphicsStateGuardian)::
|
||||||
|
get_extra_extensions() {
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: GLGraphicsStateGuardian::report_extensions
|
||||||
|
// Access: Protected
|
||||||
|
// Description: Outputs the list of GL extensions to notify, if debug
|
||||||
|
// mode is enabled.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
void CLP(GraphicsStateGuardian)::
|
||||||
|
report_extensions() const {
|
||||||
|
if (GLCAT.is_debug()) {
|
||||||
|
GLCAT.debug()
|
||||||
|
<< "GL Extensions:\n";
|
||||||
|
pset<string>::const_iterator ei;
|
||||||
|
for (ei = _extensions.begin(); ei != _extensions.end(); ++ei) {
|
||||||
|
GLCAT.debug() << (*ei) << "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: GLGraphicsStateGuardian::has_extension
|
||||||
|
// Access: Protected
|
||||||
|
// Description: Returns true if the indicated extension is reported
|
||||||
|
// by the GL system, false otherwise. The extension
|
||||||
|
// name is case-sensitive.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
bool CLP(GraphicsStateGuardian)::
|
||||||
|
has_extension(const string &extension) const {
|
||||||
|
return (_extensions.find(extension) != _extensions.end());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
// Function: CLP(GraphicsStateGuardian)::set_draw_buffer
|
// Function: CLP(GraphicsStateGuardian)::set_draw_buffer
|
||||||
// Access: Protected
|
// Access: Protected
|
||||||
@ -2905,7 +3001,7 @@ apply_texture_immediate(Texture *tex) {
|
|||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
gluBuild2DMipmaps(GL_TEXTURE_2D, internal_format,
|
GLP(uBuild2DMipmaps)(GL_TEXTURE_2D, internal_format,
|
||||||
xsize, ysize,
|
xsize, ysize,
|
||||||
external_format, type, image);
|
external_format, type, image);
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
@ -2929,7 +3025,7 @@ apply_texture_immediate(Texture *tex) {
|
|||||||
// want to give explict error for texture creation failure
|
// want to give explict error for texture creation failure
|
||||||
GLenum error_code = GLP(GetError)();
|
GLenum error_code = GLP(GetError)();
|
||||||
if(error_code != GL_NO_ERROR) {
|
if(error_code != GL_NO_ERROR) {
|
||||||
const GLubyte *error_string = gluErrorString(error_code);
|
const GLubyte *error_string = GLP(uErrorString)(error_code);
|
||||||
GLCAT.error() << "GL texture creation failed for " << tex->get_name() <<
|
GLCAT.error() << "GL texture creation failed for " << tex->get_name() <<
|
||||||
((error_string != (const GLubyte *)NULL) ? " : " : "") << endl;
|
((error_string != (const GLubyte *)NULL) ? " : " : "") << endl;
|
||||||
}
|
}
|
||||||
@ -2981,7 +3077,7 @@ draw_texture(TextureContext *tc, const DisplayRegion *dr) {
|
|||||||
GLP(MatrixMode)(GL_PROJECTION);
|
GLP(MatrixMode)(GL_PROJECTION);
|
||||||
GLP(PushMatrix)();
|
GLP(PushMatrix)();
|
||||||
GLP(LoadIdentity)();
|
GLP(LoadIdentity)();
|
||||||
gluOrtho2D(0, 1, 0, 1);
|
GLP(uOrtho2D)(0, 1, 0, 1);
|
||||||
|
|
||||||
float txl, txr, tyt, tyb;
|
float txl, txr, tyt, tyb;
|
||||||
txl = tyb = 0.0f;
|
txl = tyb = 0.0f;
|
||||||
@ -3089,7 +3185,7 @@ draw_pixel_buffer(PixelBuffer *pb, const DisplayRegion *dr) {
|
|||||||
GLP(MatrixMode)( GL_PROJECTION );
|
GLP(MatrixMode)( GL_PROJECTION );
|
||||||
GLP(PushMatrix)();
|
GLP(PushMatrix)();
|
||||||
GLP(LoadIdentity)();
|
GLP(LoadIdentity)();
|
||||||
gluOrtho2D(0, props.get_x_size(),
|
GLP(uOrtho2D)(0, props.get_x_size(),
|
||||||
0, props.get_y_size());
|
0, props.get_y_size());
|
||||||
|
|
||||||
#ifdef GSG_VERBOSE
|
#ifdef GSG_VERBOSE
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
#include "pointerToArray.h"
|
#include "pointerToArray.h"
|
||||||
#include "fog.h"
|
#include "fog.h"
|
||||||
#include "graphicsWindow.h"
|
#include "graphicsWindow.h"
|
||||||
|
#include "pset.h"
|
||||||
|
|
||||||
class PlaneNode;
|
class PlaneNode;
|
||||||
class Light;
|
class Light;
|
||||||
@ -130,6 +131,12 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
static void report_errors_loop(int line, const char *source_file,
|
static void report_errors_loop(int line, const char *source_file,
|
||||||
GLenum error_code);
|
GLenum error_code);
|
||||||
|
void show_gl_string(const string &name, GLenum id);
|
||||||
|
void save_extensions(const char *extensions);
|
||||||
|
virtual void get_extra_extensions();
|
||||||
|
void report_extensions() const;
|
||||||
|
bool has_extension(const string &extension) const;
|
||||||
|
|
||||||
virtual bool slot_new_light(int light_id);
|
virtual bool slot_new_light(int light_id);
|
||||||
virtual void enable_lighting(bool enable);
|
virtual void enable_lighting(bool enable);
|
||||||
virtual void set_ambient_light(const Colorf &color);
|
virtual void set_ambient_light(const Colorf &color);
|
||||||
@ -295,6 +302,8 @@ protected:
|
|||||||
|
|
||||||
int _pass_number;
|
int _pass_number;
|
||||||
|
|
||||||
|
pset<string> _extensions;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static GraphicsStateGuardian *
|
static GraphicsStateGuardian *
|
||||||
make_GlGraphicsStateGuardian(const FactoryParams ¶ms);
|
make_GlGraphicsStateGuardian(const FactoryParams ¶ms);
|
||||||
|
@ -183,11 +183,8 @@ make_gsg(const FrameBufferProperties &properties) {
|
|||||||
|
|
||||||
// Now we can make a GSG.
|
// Now we can make a GSG.
|
||||||
PT(glxGraphicsStateGuardian) gsg =
|
PT(glxGraphicsStateGuardian) gsg =
|
||||||
new glxGraphicsStateGuardian(new_properties);
|
new glxGraphicsStateGuardian(new_properties, context, fbconfig,
|
||||||
gsg->_context = context;
|
_display, _screen);
|
||||||
gsg->_fbconfig = fbconfig;
|
|
||||||
gsg->_display = _display;
|
|
||||||
|
|
||||||
return gsg.p();
|
return gsg.p();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,11 +27,15 @@ TypeHandle glxGraphicsStateGuardian::_type_handle;
|
|||||||
// Description:
|
// Description:
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
glxGraphicsStateGuardian::
|
glxGraphicsStateGuardian::
|
||||||
glxGraphicsStateGuardian(const FrameBufferProperties &properties) :
|
glxGraphicsStateGuardian(const FrameBufferProperties &properties,
|
||||||
GLGraphicsStateGuardian(properties)
|
GLXContext context, GLXFBConfig fbconfig,
|
||||||
|
Display *display, int screen) :
|
||||||
|
GLGraphicsStateGuardian(properties),
|
||||||
|
_context(context),
|
||||||
|
_fbconfig(fbconfig),
|
||||||
|
_display(display),
|
||||||
|
_screen(screen)
|
||||||
{
|
{
|
||||||
_context = (GLXContext)NULL;
|
|
||||||
_display = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
@ -46,3 +50,16 @@ glxGraphicsStateGuardian::
|
|||||||
_context = (GLXContext)NULL;
|
_context = (GLXContext)NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: glxGraphicsStateGuardian::get_extra_extensions
|
||||||
|
// Access: Protected, Virtual
|
||||||
|
// Description: This may be redefined by a derived class (e.g. glx or
|
||||||
|
// wgl) to get whatever further extensions strings may
|
||||||
|
// be appropriate to that interface, in addition to the
|
||||||
|
// GL extension strings return by glGetString().
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
void glxGraphicsStateGuardian::
|
||||||
|
get_extra_extensions() {
|
||||||
|
save_extensions(glXQueryExtensionsString(_display, _screen));
|
||||||
|
}
|
||||||
|
@ -31,12 +31,18 @@
|
|||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
class glxGraphicsStateGuardian : public GLGraphicsStateGuardian {
|
class glxGraphicsStateGuardian : public GLGraphicsStateGuardian {
|
||||||
public:
|
public:
|
||||||
glxGraphicsStateGuardian(const FrameBufferProperties &properties);
|
glxGraphicsStateGuardian(const FrameBufferProperties &properties,
|
||||||
|
GLXContext context, GLXFBConfig fbconfig,
|
||||||
|
Display *display, int screen);
|
||||||
virtual ~glxGraphicsStateGuardian();
|
virtual ~glxGraphicsStateGuardian();
|
||||||
|
|
||||||
GLXContext _context;
|
GLXContext _context;
|
||||||
GLXFBConfig _fbconfig;
|
GLXFBConfig _fbconfig;
|
||||||
Display *_display;
|
Display *_display;
|
||||||
|
int _screen;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void get_extra_extensions();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static TypeHandle get_class_type() {
|
static TypeHandle get_class_type() {
|
||||||
|
@ -413,6 +413,7 @@ open_window() {
|
|||||||
|
|
||||||
XVisualInfo *visual_info =
|
XVisualInfo *visual_info =
|
||||||
glXGetVisualFromFBConfig(_display, glxgsg->_fbconfig);
|
glXGetVisualFromFBConfig(_display, glxgsg->_fbconfig);
|
||||||
|
|
||||||
if (visual_info == NULL) {
|
if (visual_info == NULL) {
|
||||||
// No X visual for this fbconfig; how can we open the window?
|
// No X visual for this fbconfig; how can we open the window?
|
||||||
glxdisplay_cat.error()
|
glxdisplay_cat.error()
|
||||||
|
@ -62,34 +62,8 @@ void wglGraphicsStateGuardian::
|
|||||||
reset() {
|
reset() {
|
||||||
GLGraphicsStateGuardian::reset();
|
GLGraphicsStateGuardian::reset();
|
||||||
|
|
||||||
// Output the vendor and version strings.
|
_supports_pbuffer = has_extension("WGL_ARB_pbuffer");
|
||||||
show_gl_string("GL_VENDOR", GL_VENDOR);
|
_supports_pixel_format = has_extension("WGL_ARB_pixel_format");
|
||||||
show_gl_string("GL_RENDERER", GL_RENDERER);
|
|
||||||
show_gl_string("GL_VERSION", GL_VERSION);
|
|
||||||
|
|
||||||
// Save the extensions tokens.
|
|
||||||
save_extensions((const char *)glGetString(GL_EXTENSIONS));
|
|
||||||
|
|
||||||
// Also save the tokens listed by wglGetExtensionsString. This is a
|
|
||||||
// little trickier, since the query function is itself an extension.
|
|
||||||
typedef const GLubyte *(*wglGetExtensionsStringEXT_proc)(void);
|
|
||||||
wglGetExtensionsStringEXT_proc wglGetExtensionsStringEXT =
|
|
||||||
(wglGetExtensionsStringEXT_proc)wglGetProcAddress("wglGetExtensionsStringEXT");
|
|
||||||
if (wglGetExtensionsStringEXT != NULL) {
|
|
||||||
save_extensions((const char *)wglGetExtensionsStringEXT());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (wgldisplay_cat.is_debug()) {
|
|
||||||
wgldisplay_cat.debug()
|
|
||||||
<< "GL Extensions:\n";
|
|
||||||
pset<string>::const_iterator ei;
|
|
||||||
for (ei = _extensions.begin(); ei != _extensions.end(); ++ei) {
|
|
||||||
wgldisplay_cat.debug() << (*ei) << "\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_supports_pbuffer = (_extensions.count("WGL_ARB_pbuffer") != 0);
|
|
||||||
_supports_pixel_format = (_extensions.count("WGL_ARB_pixel_format") != 0);
|
|
||||||
|
|
||||||
_wglCreatePbufferARB =
|
_wglCreatePbufferARB =
|
||||||
(wglCreatePbufferARB_proc)wglGetProcAddress("wglCreatePbufferARB");
|
(wglCreatePbufferARB_proc)wglGetProcAddress("wglCreatePbufferARB");
|
||||||
@ -132,6 +106,26 @@ reset() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: wglGraphicsStateGuardian::get_extra_extensions
|
||||||
|
// Access: Protected, Virtual
|
||||||
|
// Description: This may be redefined by a derived class (e.g. glx or
|
||||||
|
// wgl) to get whatever further extensions strings may
|
||||||
|
// be appropriate to that interface, in addition to the
|
||||||
|
// GL extension strings return by glGetString().
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
void wglGraphicsStateGuardian::
|
||||||
|
get_extra_extensions() {
|
||||||
|
// This is a little bit tricky, since the query function is itself
|
||||||
|
// an extension.
|
||||||
|
typedef const GLubyte *(*wglGetExtensionsStringEXT_proc)(void);
|
||||||
|
wglGetExtensionsStringEXT_proc wglGetExtensionsStringEXT =
|
||||||
|
(wglGetExtensionsStringEXT_proc)wglGetProcAddress("wglGetExtensionsStringEXT");
|
||||||
|
if (wglGetExtensionsStringEXT != NULL) {
|
||||||
|
save_extensions((const char *)wglGetExtensionsStringEXT());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
// Function: wglGraphicsStateGuardian::make_context
|
// Function: wglGraphicsStateGuardian::make_context
|
||||||
@ -156,42 +150,3 @@ make_context(HDC hdc) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
|
||||||
// Function: wglGraphicsStateGuardian::show_gl_string
|
|
||||||
// Access: Private
|
|
||||||
// Description: Outputs the result of glGetString() on the indicated
|
|
||||||
// tag.
|
|
||||||
////////////////////////////////////////////////////////////////////
|
|
||||||
void wglGraphicsStateGuardian::
|
|
||||||
show_gl_string(const string &name, GLenum id) {
|
|
||||||
if (wgldisplay_cat.is_debug()) {
|
|
||||||
const GLubyte *text = glGetString(id);
|
|
||||||
if (text == (const GLubyte *)NULL) {
|
|
||||||
wgldisplay_cat.debug()
|
|
||||||
<< "Unable to query " << name << "\n";
|
|
||||||
} else {
|
|
||||||
wgldisplay_cat.debug()
|
|
||||||
<< name << " = " << (const char *)text << "\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
|
||||||
// Function: wglGraphicsStateGuardian::save_extensions
|
|
||||||
// Access: Private
|
|
||||||
// Description: Separates the string returned by GL_EXTENSIONS or
|
|
||||||
// wglGetExtensionsStringEXT into its individual tokens
|
|
||||||
// and saves them in the _extensions member.
|
|
||||||
////////////////////////////////////////////////////////////////////
|
|
||||||
void wglGraphicsStateGuardian::
|
|
||||||
save_extensions(const char *extensions) {
|
|
||||||
vector_string tokens;
|
|
||||||
extract_words(extensions, tokens);
|
|
||||||
|
|
||||||
vector_string::iterator ti;
|
|
||||||
for (ti = tokens.begin(); ti != tokens.end(); ++ti) {
|
|
||||||
_extensions.insert(*ti);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
@ -40,10 +40,11 @@ public:
|
|||||||
|
|
||||||
virtual void reset();
|
virtual void reset();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void get_extra_extensions();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void make_context(HDC hdc);
|
void make_context(HDC hdc);
|
||||||
void show_gl_string(const string &name, GLenum id);
|
|
||||||
void save_extensions(const char *extensions);
|
|
||||||
|
|
||||||
// All windows that share a particular GL context must also share
|
// All windows that share a particular GL context must also share
|
||||||
// the same pixel format; therefore, we store the pixel format
|
// the same pixel format; therefore, we store the pixel format
|
||||||
@ -53,8 +54,6 @@ private:
|
|||||||
bool _made_context;
|
bool _made_context;
|
||||||
HGLRC _context;
|
HGLRC _context;
|
||||||
|
|
||||||
pset<string> _extensions;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
bool _supports_pbuffer;
|
bool _supports_pbuffer;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user