CGLInfo.m
上传用户:center1979
上传日期:2022-07-26
资源大小:50633k
文件大小:5k
源码类别:

OpenGL

开发平台:

Visual C++

  1. //
  2. //  CGLInfo.m
  3. //  celestia
  4. //
  5. //  Created by Bob Ippolito on Wed Jun 26 2002.
  6. //  2005-05 Modified substantially by Da Woon Jung
  7. //
  8. #import "CGLInfo.h"
  9. #import <OpenGL/OpenGL.h>
  10. #import <OpenGL/gl.h>
  11. #import <OpenGL/glext.h>
  12. #ifndef GL_SHADING_LANGUAGE_VERSION_ARB
  13. #define GL_SHADING_LANGUAGE_VERSION_ARB   0x8B8C
  14. #endif
  15. static char *gExtensions;
  16. #define ENDL    [result appendString:@"n"]
  17. // Function taken from glext.cpp, so we don't have to compile
  18. // this whole file as Obj-C++
  19. static BOOL ExtensionSupported(const char *ext)
  20. {
  21.     if (gExtensions == nil)
  22.         return false;
  23.     char *extensions = gExtensions;
  24.     int len = strlen(ext);
  25.     for (;;) {
  26.         if (strncmp(extensions, ext, len) == 0)
  27.             return YES;
  28.         extensions = strchr(extensions, ' ');
  29.         if  (extensions != nil)
  30.             ++extensions;
  31.         else
  32.             break;
  33.     }
  34.     return NO;
  35. }
  36. static NSString *queryGLInteger(GLenum e, NSString *desc)
  37. {
  38.     GLint r = 0;
  39.     NSString *result;
  40.     glGetIntegerv(e, &r);
  41. //    if (glGetError())
  42. //        result = [NSString stringWithFormat:NSLocalizedString(@"%@: --not available--",""), desc];
  43. //    else
  44.     result = [NSString stringWithFormat: NSLocalizedString(@"%@: %d",""), desc, r];
  45.     return result;
  46. }
  47. static NSString *queryGLExtension(const char *extName)
  48. {
  49.     return [NSString stringWithFormat: NSLocalizedString(@"%s:  %@",""), extName, (ExtensionSupported(extName) ? NSLocalizedString(@"Supported","") : @"-")];
  50. }
  51. @implementation CGLInfo
  52. +(NSString *)info
  53. {
  54.     NSMutableString *result = [NSMutableString string];
  55.     gExtensions = (char *) glGetString(GL_EXTENSIONS);
  56.     [result appendString:
  57.         [NSString stringWithFormat:NSLocalizedString(@"Vendor: %@",""),
  58.             [NSString stringWithUTF8String:(const char *)glGetString (GL_VENDOR)]]]; ENDL;
  59.     [result appendString:
  60.         [NSString stringWithFormat:NSLocalizedString(@"Renderer: %@",""), [NSString stringWithUTF8String:(const char *)glGetString (GL_RENDERER)]]]; ENDL;
  61.     [result appendString:
  62.         [NSString stringWithFormat:NSLocalizedString(@"Version: %@",""), [NSString stringWithUTF8String:(const char *)glGetString (GL_VERSION)]]]; ENDL;
  63.     if (ExtensionSupported("GL_ARB_shading_language_100"))
  64.     {
  65.         NSString *glslVersion = [NSString stringWithUTF8String:
  66.             (const char *)glGetString (0x8B8C)];
  67.         if (glslVersion)
  68.         {
  69.             [result appendString:
  70.                 [NSString stringWithFormat: @"%@%@",
  71.                     NSLocalizedStringFromTable(@"GLSL version: ",@"po",""),
  72.                     glslVersion]
  73.             ]; ENDL;
  74.         }
  75.     }
  76.     ENDL;
  77.     [result appendString:
  78.         (ExtensionSupported("GL_ARB_multitexture") ?
  79.          queryGLInteger(GL_MAX_TEXTURE_UNITS_ARB, NSLocalizedString(@"Max simultaneous textures","")) :
  80.          [NSString stringWithFormat: [NSString stringWithFormat: @"%@: 1", NSLocalizedString(@"Max simultaneous textures","")]])]; ENDL;
  81.     [result appendString: queryGLInteger(GL_MAX_TEXTURE_SIZE, NSLocalizedString(@"Max texture size",""))]; ENDL;
  82.     if (ExtensionSupported("GL_ARB_texture_cube_map"))
  83.     {
  84.         GLint maxCubeMapSize = 0;
  85.         glGetIntegerv(GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB, &maxCubeMapSize);
  86.         [result appendString:
  87.             [NSString stringWithFormat: @"%@%d",
  88.                 NSLocalizedStringFromTable(@"Max cube map size: ",@"po",""),
  89.                 maxCubeMapSize]
  90.         ]; ENDL;
  91.     }
  92.     GLfloat pointSizeRange[2];
  93.     glGetFloatv(GL_POINT_SIZE_RANGE, pointSizeRange);
  94.     [result appendString:
  95.         [NSString stringWithFormat: @"%@%f - %f",
  96.             NSLocalizedStringFromTable(@"Point size range: ",@"po",""),
  97.             pointSizeRange[0], pointSizeRange[1]]
  98.     ]; ENDL;
  99.     ENDL;
  100.     [result appendString: NSLocalizedString(@"Extensions:","")]; ENDL;
  101.     [result appendString: queryGLExtension("GL_ARB_vertex_buffer_object")]; ENDL;
  102.     [result appendString: queryGLExtension("GL_ARB_texture_compression")]; ENDL;
  103.     [result appendString: queryGLExtension("GL_EXT_texture_compression_s3tc")]; ENDL;
  104.     [result appendString: queryGLExtension("GL_ARB_texture_border_clamp")]; ENDL;
  105.     [result appendString: queryGLExtension("GL_EXT_texture_edge_clamp")]; ENDL;
  106.     [result appendString: queryGLExtension("GL_ARB_texture_cube_map")]; ENDL;
  107.     [result appendString: queryGLExtension("GL_SGIS_generate_mipmap")]; ENDL;
  108.     [result appendString: queryGLExtension("GL_EXT_rescale_normal")]; ENDL;
  109.     [result appendString: queryGLExtension("GL_ARB_point_sprite")]; ENDL;
  110.     ENDL;
  111.     [result appendString: queryGLExtension("GL_ARB_vertex_program")]; ENDL;
  112.     [result appendString: queryGLExtension("GL_NV_vertex_program")]; ENDL;
  113.     [result appendString: queryGLExtension("GL_NV_fragment_program")]; ENDL;
  114.     [result appendString: queryGLExtension("GL_NV_register_combiners")]; ENDL;
  115.     [result appendString: queryGLExtension("GL_ARB_texture_env_dot3")]; ENDL;
  116.     [result appendString: queryGLExtension("GL_ARB_texture_env_combine")]; ENDL;
  117.     [result appendString: queryGLExtension("GL_EXT_texture_env_combine")]; ENDL;
  118.     [result appendString: queryGLExtension("GL_ARB_shading_language_100")]; ENDL;
  119.     [result appendString: queryGLExtension("GL_ARB_shader_objects")]; ENDL;
  120.     [result appendString: queryGLExtension("GL_ARB_vertex_shader")]; ENDL;
  121.     [result appendString: queryGLExtension("GL_ARB_fragment_shader")]; ENDL;
  122.     return result;
  123. }
  124. @end