通过WinAPI确定英特尔高清显卡版本

所以我试图通过WinAPI函数获取graphics卡上的信息,但是如何获取我的确切卡信息有一个问题。 我已经编写代码来调用EnumDisplayDevices,并通过我的电话收到DeviceString“英特尔(R)高清显卡系列”。 但是,这并不是告诉我确切的卡,例如英特尔高清显卡家族有一个4200,4400,等等(从我的理解)。

我search了更多的方法来find这些信息,甚至通过registry,仍然使我的描述string“英特尔(R)高清显卡家庭”…现在我在这里。 非常感谢任何能帮助我的人,这实际上是一个stackoverflow线程,导致我在EnumDisplayDevices的方向在第一:)

我会用OpenGL代替WinAPI ,因为我不知道WinAPI是否有这样的功能,也懒得研究。 是的,你可以搜索这个信息的注册表键,但由于可能的位置/名称的变化,这是不安全的。 OpenGL的方式非常简单:

  1. 创建OpenGL渲染上下文
  2. 获取适当的供应商和设备字符串。
  3. 发布OpenGL渲染上下文

它适用于任何支持OpenGL 1.0的 OpenGL图形卡/驱动程序,它们都是当今所有的显卡。

  • 请参阅: OpenGL上下文初始化的C ++示例
  • 或者: 在C ++中完成GL + VAO / VBO + GLSL +着色器的例子

你可以使用OpenGL函数glGetString来获取这个信息:

 GL_VENDOR Returns the company responsible for this OpenGL implementation. This name does not change from release to release. GL_RENDERER Returns the name of the renderer. This name is typically specific to a particular configuration of a hardware platform. It does not change from release to release. GL_VERSION Returns a version or release number (of supported OpenGL and gfx driver version) GL_EXTENSIONS Returns a space-separated list of supported extensions to OpenGL (all capabilities of your card) 

其余的很简单(使用gl_init,gl_exit从第二个链接):

 gl_init(Your_App_Window_Handle); char *vendor =(char*)glGetString(GL_VENDOR); char *device =(char*)glGetString(GL_RENDERER); char *version=(char*)glGetString(GL_VERSION); char *ext =(char*)glGetString(GL_EXTENSIONS); gl_exit(); 

我的设置返回:

 vendor ="NVIDIA Corporation" device ="GeForce GTX 550 Ti/PCIe/SSE2" version="4.5.0 NVIDIA 347.25" ext ="GL_AMD_multi_draw_indirect GL_ARB_arrays_of_arrays GL_ARB_base_instance GL_ARB_blend_func_extended GL_ARB_buffer_storage GL_ARB_clear_buffer_object GL_ARB_clear_texture GL_ARB_clip_control GL_ARB_color_buffer_float GL_ARB_compatibility GL_ARB_compressed_texture_pixel_storage GL_ARB_conservative_depth GL_ARB_compute_shader GL_ARB_compute_variable_group_size GL_ARB_conditional_render_inverted GL_ARB_copy_buffer GL_ARB_copy_image GL_ARB_cull_distance GL_ARB_debug_output GL_ARB_depth_buffer_float GL_ARB_depth_clamp GL_ARB_depth_texture GL_ARB_derivative_control GL_ARB_direct_state_access GL_ARB_draw_buffers GL_ARB_draw_buffers_blend GL_ARB_draw_indirect GL_ARB_draw_elements_base_vertex GL_ARB_draw_instanced GL_ARB_enhanced_layouts GL_ARB_ES2_compatibility GL_ARB_ES3_compatibility GL_ARB_ES3_1_compatibility GL_ARB_explicit_attrib_location GL_ARB_explicit_uniform_location GL_ARB_fragment_coord_conventions GL_ARB_fragment_layer_viewport GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_framebuffer_no_attachments GL_ARB_framebuffer_object GL_ARB_framebuffer_sRGB GL_ARB_geometry_shader4 GL_ARB_get_program_binary GL_ARB_get_texture_sub_image GL_ARB_gpu_shader5 GL_ARB_gpu_shader_fp64 GL_ARB_half_float_pixel GL_ARB_half_float_vertex GL_ARB_imaging GL_ARB_indirect_parameters GL_ARB_instanced_arrays GL_ARB_internalformat_query GL_ARB_internalformat_query2 GL_NV_internalformat_sample_query GL_ARB_invalidate_subdata GL_ARB_map_buffer_alignment GL_ARB_map_buffer_range GL_ARB_multi_bind GL_ARB_multi_draw_indirect GL_ARB_multisample GL_ARB_multitexture GL_ARB_occlusion_query GL_ARB_occlusion_query2 GL_ARB_pipeline_statistics_query GL_ARB_pixel_buffer_object GL_ARB_point_parameters GL_ARB_point_sprite GL_ARB_program_interface_query GL_ARB_provoking_vertex GL_ARB_robust_buffer_access_behavior GL_ARB_robustness GL_ARB_sample_shading GL_ARB_sampler_objects GL_ARB_seamless_cube_map GL_ARB_separate_shader_objects GL_ARB_shader_atomic_counters GL_ARB_shader_bit_encoding GL_ARB_shader_draw_parameters GL 

[笔记]

你只需要包含gl.h就可以不需要glu,glew或者其他任何东西(除了wglext.h ,它应该包含在gl.h )。 它通常位于独立的include子目录中,如:

 #include <gl\gl.h>