OpenGL DSA(Direct State Access)介绍

来源:互联网 发布:电脑制作音频软件 编辑:程序博客网 时间:2024/06/08 06:00
        随着OpenGL4.5的发布,DSA(Direct State Access )成为了该版本的一个显著的特点。虽然DSA在早期的版本
已经以扩展的形式存在于OpenGL中。DSA的出现,让OpenGL开发者一定程度上摆脱了对资源的绑定操作。使 

OpenGL资源获取和资源更新更加形象化,通过程序更容易操作,比如


 对于GLSL变量的操作:

    利用DSA进行操作:

    glProgramUniform1fEXT(progId, loc, x);


    不用DSA进行操作:
    glUseProgram(progId);

    glUniform1f(loc, x); 


  对于2D纹理的Uploading:
  
    使用 DSA:
      glGenTextures(1, &tid);
     glBindTexture(GL_TEXTURE_2D, tid);
     glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, \

             w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixmap);


    不使用 DSA:
    glGenTextures(1, &tid);
    glTextureImage2DEXT(tid, GL_TEXTURE_2D, 0, GL_RGBA8, \
                    w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixmap);
                    
    对于简单的创建FBO:
    不使用 DSA:
        glGenTextures(1, &tid);
        glBindTexture(GL_TEXTURE_2D, tid);
        glTextureImage2DEXT(GL_TEXTURE_2D, 0, GL_RGBA8, w, h, 0, \
                    GL_RGBA, GL_UNSIGNED_BYTE, 0);
        glBindTexture(GL_TEXTURE_2D, 0);
        glGenFramebuffers(1, &fbo);
        glBindFramebuffer(GL_FRAMEBUFFER, fbo);
        glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tid, 0);
    使用 DSA:

        glGenTextures(1, &tid);
        glTextureImage2DEXT(tid, GL_TEXTURE_2D, 0, GL_RGBA8, w, h, 0, \ 
                    GL_RGBA, GL_UNSIGNED_BYTE, 0);
        glGenFramebuffers(1, &fbo);
        glNamedFramebufferTexture2DEXT(fbo, GL_COLOR_ATTACHMENT0, \ 
                               GL_TEXTURE_2D, tid, 0);
    
  对于模型视图变换:
    下面的代码在OpenGL的3.X版本和4.X版本没有实际的用处,但在OpenGL2.0版本仍然在用。
    不使用DSA:
      glMatrixMode(GL_MODELVIEW);
      glLoadMatrixf(matrix);


     使用DSA:

     glMatrixLoadfEXT(GL_MODELVIEW, matrix); 

       通过上边的例子也可以发现,DSA使我们对OpenGL API的操作更加便捷。

参考资料:

        【1】http://www.g-truc.net/post-0363.html

          【2】https://www.reddit.com/r/opengl/comments/2j3rfz/where_can_you_learn_direct_state_accessdsa/

          【3】http://www.geeks3d.com/20101228/opengl-direct-state-access-dsa/


1 0
原创粉丝点击