震驚!時間之神又給了這個古老的API+了0.1

之前我一直以為4.5就是終結,還寫了為了忘卻的紀念:析OpenGL史上第二偉大的擴展,DSA。在前幾天的SIGGRAPH上,Khronos突然推出了OpenGL 4.6。相比OpenGL 4.5,這個版本加入了一些Vulkan的技術,進一步完善了OpenGL。

這幾個擴展進入了核心。

  • GL_ARB_gl_spirv和GL_ARB_spirv_extensions可以讓OpenGL用上Vulkan的SPIR-V。
  • GL_ARB_indirect_parameters和GL_ARB_shader_draw_parameters都是讓GPU可以直接從顯存里得到渲染參數,而不用從CPU給過去。減少了CPU開銷。
  • GL_ARB_pipeline_statistics_query和GL_ARB_transform_feedback_overflow_query是來自於D3D的概念,可以在程序里獲取流水線的統計信息,方便profile和debug。
  • GL_ARB_texture_filter_anisotropic是從一個非常古老的擴展GL_EXT_texture_filter_anisotropic提升而來,負責各項異性的紋理過濾。原先在實現方法上有知識產許可權制,多少年了一直是在EXT的狀態。
  • GL_ARB_polygon_offset_clamp來自於有一段時間了的GL_EXT_polygon_offset_clamp。可以幫助減少漏光的現象。
  • GL_ARB_shader_atomic_counter_ops和GL_ARB_shader_group_vote的概念來自於CUDA,可以在shader之間做原子操作和傳遞信息。
  • GL_KHR_no_error可以關掉錯誤機制,以降低驅動開銷。

同時增加了幾個擴展:

  • GL_KHR_parallel_shader_compile可以多線程編譯shader。這個擴展從ARB版本提升而來,對,ARB不進入核心還能再提升成KHR。GL和GLES都能用。
  • WGL_ARB_create_context_no_error和GXL_ARB_create_context_no_error用來建立GL_KHR_no_error的context。

不要小看這+0.1,這代表OpenGL還沒終結。而且這一續就至少續了一年進去。明年沒準還會有4.7。

glloader和KlayGE已經支持了OpenGL 4.6和最新加入的幾個擴展。

NV的新驅動已經支持4.6。為什麼支持的這麼快呢?用KlayGE的GLCompatibility一看就知道,NV之前的驅動已經支持絕大部分這些擴展,除了GL_ARB_spirv_extension。這裡只要改一下返回的版本號,再把這個擴展加上就行。第一時間就能解決。

另一個最近才出現的擴展是GL_NV_blend_minmax_factor。之前有個GL_AMD_blend_minmax_factor,內容和NV的完全一樣,連token定義都一樣。NV把它推廣成一個GL和GLES都能用的擴展。不過比較厚道的是,token名里照樣用的_AMD。

最後,我想說一下,我仍然不贊同Vulkan那種出個新API的做法。更欣賞改進OpenGL以達到零開銷的目的。OpenGL like Vulkan就是一個很好的實踐。通過對擴展的使用,OpenGL程序照樣能達到Vulkan的性能,同時老代碼又能得以保留。


推薦閱讀:

如何實現魚眼效果?
在 OpenGL 中應用查找表(LUT)技術時,如何避免紋理數據自動歸一化導致的圖像異常?
不同GLSL版本之間的區別?
OpenGL ES2 對象樹繪製與 VBO組織問題?
現代OpenGL是怎麼繪製曲面的?

TAG:计算机图形学 | OpenGL | OpenGLES |