OpenGL DSA(Direct State Access)介绍
来源:互联网 发布:电脑制作音频软件 编辑:程序博客网 时间:2024/06/08 06:00
随着OpenGL4.5的发布,DSA(Direct State Access )成为了该版本的一个显著的特点。虽然DSA在早期的版本
已经以扩展的形式存在于OpenGL中。DSA的出现,让OpenGL开发者一定程度上摆脱了对资源的绑定操作。使
glUseProgram(progId);
使用 DSA:
glGenTextures(1, &tid);
glBindTexture(GL_TEXTURE_2D, tid);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, \
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);
已经以扩展的形式存在于OpenGL中。DSA的出现,让OpenGL开发者一定程度上摆脱了对资源的绑定操作。使
OpenGL资源获取和资源更新更加形象化,通过程序更容易操作,比如
对于GLSL变量的操作:
利用DSA进行操作:glProgramUniform1fEXT(progId, loc, x);
glUseProgram(progId);
glUniform1f(loc, x);
使用 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);
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
- OpenGL DSA(Direct State Access)介绍
- 9 Direct Memory Access
- Direct access to component
- Direct memory access(DMA)
- c direct parameter access
- Direct access to Nova metadata
- Remote Direct Memory Access (RDMA)
- OpenGL&D3D State Machine
- Direct/OpenGL 左右坐标系统
- ext direct spring 介绍
- DSA
- dsa
- dsa
- dsa
- dsa
- dsa
- dsa
- dsa
- RemoteAttribute
- Java中,int转byte数组
- spark学习笔记(4)IntelliJ IDEA搭建Spark开发环境
- WordPress提示“缺少临时文件夹”的解决方法
- LeetCode—156. Binary Tree Upside Down
- OpenGL DSA(Direct State Access)介绍
- UML类图学习
- linux下常见错误及解决方法
- PrefUtils
- 无线局域网安全(二)————TKIP加密
- RTSP H264硬解码显示
- Makefile 笔记
- PHP操作Redis 有序集(Sorted Set) 的相关命令 (三)
- Error:Jack is required to support java 8 language features. 及Jack的介绍