Permalink
9141569 Aug 1, 2003
executable file 173 lines (141 sloc) 5.68 KB
#!/usr/bin/env python
#
# This is the python source code for a utility which checks
# lots of things about the current OpenGL system.
#
# It is part of the Vision Egg package, but does not require
# the Vision Egg to be installed.
#
# Copyright (c) 2001-2003 Andrew Straw. Distributed under the terms
# of the GNU General Public License (GPL).
__cvs__ = '$Revision$'.split()[1]
__date__ = ' '.join('$Date$'.split()[1:3])
__author__ = 'Andrew Straw <astraw@users.sourceforge.net>'
import time, sys, string
import pygame
from pygame.locals import *
from OpenGL.GL import * # PyOpenGL packages
from Numeric import *
def capitalize_word(word):
result = word
if word[0] in string.lowercase:
result = string.upper(word[0]) + word[1:]
return result
ARB_exts = ['matrix_palette','multisample','multitexture','point_parameters',
'texture_border_clamp','texture_compression','texture_cube_map',
'texture_env_add','texture_env_combine','texture_env_crossbar',
'texture_env_dot3','transpose_matrix','vertex_blend']
EXT_exts = ['abgr','bgra','blend_color','blend_minmax','blend_subtract',
'clip_volume_hint','compiled_vertex_array','draw_range_elements',
'fog_coord','multi_draw_arrays','packed_pixels',
'paletted_texture','point_parameters','rescale_normal',
'secondary_color','separate_specular_color','shared_texture_palette',
'stencil_wrap','texture_compression_s3tc','texture3D','texture_cube_map',
'texture_edge_clamp','texture_env_add','texture_env_combine',
'texture_env_dot3','texture_filter_anisotropic','texture_lod_bias',
'texture_object','vertex_array','vertex_weighting']
if sys.platform == 'win32':
time_func = time.clock
else:
time_func = time.time
### Setup graphics
width = 640
height = 480
size = (width,height)
if sys.platform == "darwin": # bug in Mac OS X version of pygame
pygame.init()
pygame.display.init()
pygame.display.set_caption("OpenGL Test")
try_bpps = [0,32,24] # bits per pixel (32 = 8 bits red, 8 green, 8 blue, 8 alpha)
flags = OPENGL | DOUBLEBUF
found_mode = 0
for bpp in try_bpps:
modeList = pygame.display.list_modes( bpp, flags )
if modeList == -1: # equal to -1 if any resolution will work
found_mode = 1
else:
if len(modeList) == 0: # any resolution is OK
found_mode = 1
else:
if size in modeList:
found_mode = 1
else:
size = modeList[0]
print "WARNING: Using %dx%d video mode instead of requested size."%(size[0],size[1])
if found_mode:
break
if found_mode == 0:
print "WARNING: Could not find acceptable video mode! Trying anyway..."
print "Initializing graphics at %d x %d ( %d bpp )."%(size[0],size[1],bpp)
pygame.display.set_mode((width,height), flags, bpp )
print
### Get OpenGL info
print "OpenGL information returned from OpenGL drivers:"
print " GL_VENDOR =",glGetString(GL_VENDOR)
print " GL_RENDERER =",glGetString(GL_RENDERER)
print " GL_VERSION = ",glGetString(GL_VERSION)
print " GL_EXTENSIONS ="
for extension in string.split(glGetString(GL_EXTENSIONS)):
print " ",extension
print
### Get WGL info if this is win32
if sys.platform == 'win32':
from OpenGL.WGL.EXT.extensions_string import *
if wglInitExtensionsStringEXT(): # Returns 1 if it's working
print " WGL_EXTENSIONS ="
for extension in string.split(wglGetExtensionsStringEXT()):
print " ",extension
print
### Buffer information
print "Buffer information"
print " GL_AUX_BUFFERS =",glGetIntegerv( GL_AUX_BUFFERS )
print " GL_RGBA_MODE =",glGetBooleanv( GL_RGBA_MODE )
print " GL_DOUBLEBUFFER = ",glGetBooleanv( GL_DOUBLEBUFFER )
print " GL_STEREO = ",glGetBooleanv( GL_STEREO )
print " GL_RED_BITS =",glGetIntegerv( GL_RED_BITS )
print " GL_GREEN_BITS =",glGetIntegerv( GL_GREEN_BITS )
print " GL_BLUE_BITS =",glGetIntegerv( GL_BLUE_BITS )
print " GL_ALPHA_BITS =",glGetIntegerv( GL_ALPHA_BITS )
print " GL_ACCUM_RED_BITS =",glGetIntegerv( GL_ACCUM_RED_BITS )
print " GL_ACCUM_GREEN_BITS =",glGetIntegerv( GL_ACCUM_GREEN_BITS )
print " GL_ACCUM_BLUE_BITS =",glGetIntegerv( GL_ACCUM_BLUE_BITS )
print " GL_ACCUM_ALPHA_BITS =",glGetIntegerv( GL_ACCUM_ALPHA_BITS )
print
### Test OpenGL extensions
print "Testing PyOpenGL extension support"
for ext in ARB_exts:
print " GL_ARB_%s:"%ext,
module_name = "OpenGL.GL.ARB.%s"%ext
try:
mod = __import__(module_name,globals(),locals(),[])
components = string.split(module_name, '.') # make mod refer to deepest module
for comp in components[1:]:
mod = getattr(mod, comp)
init_name = "glInit%sARB"%string.join(map(capitalize_word,string.split(ext,'_')),'')
init_func = getattr(mod,init_name)
if init_func():
print "OK"
else:
print "Failed"
except Exception, x:
print "Failed (exception raised):",x
for ext in EXT_exts:
print " GL_EXT_%s:"%ext,
module_name = "OpenGL.GL.EXT.%s"%ext
try:
mod = __import__(module_name,globals(),locals(),[])
components = string.split(module_name, '.') # make mod refer to deepest module
for comp in components[1:]:
mod = getattr(mod, comp)
init_name = "glInit%sEXT"%string.join(map(capitalize_word,string.split(ext,'_')),'')
init_func = getattr(mod,init_name)
if init_func():
print "OK"
else:
print "Failed"
except Exception, x:
print "Failed (exception raised):",x
print
print "Texture information"
max_dim = glGetIntegerv(GL_MAX_TEXTURE_SIZE)
print " GL_MAX_TEXTURE_SIZE is", max_dim