资源描述:
《面向通用计算的可编程图形硬件技术-opengl performance optimization》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、OpenGLPerformanceOptimization这篇文章比较长,希望大家能够看完。^_olOPenGLStateMachinelTypicalD3D9HardwarearchitecturelLessStateChangelGL_TRIANGLE_STRIPinsteadofGL_TRIANGLESlTextureLoadinglTextureCompositelTextureMipMaplMultiPassvs.SinglePasslTextureCompressionlAvoidPixelOpera
2、tionslVertexArray,DisplayList,lVertexBufferObjectlAdvancedTech:VSandPs.lLessOperationsforDepthTest,StencilTest,AlphaTest,lFastShadowlMISC:LOD,cull,SwpaBuffers,wglMakeCurrentetc上一个讲座是关于OpenGLDriver体系结构,估计大家都有很多疑问,而且我自己又看了一遍,发现一些问题讲得不够清晰,而且没有交代讲驱动程序体系结构的目的。其主要目
3、的是,当我们了解了驱动程序的体系结构,我们更好地写出一个OpenGL应用程序框架结构。今天我将结合OpenGL状态机和一个典型的D3D9硬件体系结构探讨如何对OpenGL应用程序的性能进行优化。MSDN的OpenGL帮助也提到了关于性能优化方面的问题,但是这已经是多年以前的article,而随着图形加速硬件的发展,许多新的技术不断涌现,我们应该跟上时代发展的步伐。我今天讲的内容应该是不全面的,希望大家踊跃指正和补充。1OpenGL状态机(StateMachine)OpenGL状态机的目前只有1.1版本,也是最经典
4、的,大家可以参考下述链接:ftp://ftp.sgi.com/opengl/doc/opengl1.1/state.pdfftp://ftp.sgi.com/opengl/doc/opengl1.1/state.ps它们是内容相同而格式不同的状态机表达。整个文件中只有一张Postscript的图。这张图实际上就是SGIRealityEngine的硬件程序流程描述。首先硬件接受应用程序输入的顶点信息,(Color,Normal,Texture,EdgeFlag,Vertex,),经过世界坐标变换(glTransla
5、te,glRotate,glScale),接着进行UserClipPlane,之后进入视图变幻和裁减(ProjectionMatrix),然后视口变换(ViewPort),经过PrimitiveSetup,光栅化处理(Flat或Phong)生成片断Fragment,下面的对每个依次作纹理贴图计算,纹理混合(TextureBlend),深度测试(DepthTest),模板测试(Stencil测试),透明测试(AlphaTest),透明混合(AphaBlend),然后写入颜色缓冲区,深度缓冲区,模板缓冲区。整个流程如
6、下:Application
7、VertexInformation(Material,Normal,Textcoord,EdgeFlag,VertexPosition)
8、Lighting
9、WorldMatrixTransform
10、UserClipPlaneClipping
11、ProjectionMatrixTransformandClip
12、ViewPort
13、PrimitiveSetup(point,Line,Triangle)
14、Rasterization(FlatorPhong)==>GenerateFragment
15、
16、FragmentTextureAddressing()==TextureInVideomemory
17、FragmentTextureBlend(blendDiffuse,SpecularandTextureofFragment)
18、DepthTest==withDepthBuffer
19、StencilTest==withStencilBuffer
20、AlphaTest==withalphachannelofcolorbuffer
21、AlphaBlend==withcolorbuffer
22、FragmentwritetoFra
23、meBuffers我们可以看到OpenGL每处理一个几何图元,需要经过大量的处理过程。大家应该对这个图的每个步骤地工作相当清晰。这里有几个概念需要说明。第一个概念是Fragment,片断或者片元。每一个片断对应屏幕上的一个像素点,它是光栅化(Rasterization)引擎使用FLATshading或PhongShading生成的。Rasterization引擎产生的片断