当前位置: 首页 > news >正文

鞍山制作网站的公司4399小游戏大全

鞍山制作网站的公司,4399小游戏大全,问卷调查网站建设,电脑微信怎么进入公众号前言 本篇在讲什么 本篇为蓝宝书学习笔记 原子计数器 本篇适合什么 适合初学Open的小白 本篇需要什么 对C语法有简单认知 对OpenGL有简单认知 最好是有OpenGL超级宝典蓝宝书 依赖Visual Studio编辑器 本篇的特色 具有全流程的图文教学 重实践#xff0c;轻理论#… 前言 本篇在讲什么 本篇为蓝宝书学习笔记 原子计数器 本篇适合什么 适合初学Open的小白 本篇需要什么 对C语法有简单认知 对OpenGL有简单认知 最好是有OpenGL超级宝典蓝宝书 依赖Visual Studio编辑器 本篇的特色 具有全流程的图文教学 重实践轻理论快速上手 提供全流程的源码内容 ★提高阅读体验★ ♠ 一级标题 ♥ 二级标题 ♣ 三级标题 ♦ 四级标题 目录♠ 原子计数器♠ 用法♥ 声明♥ 绑定♥ 重置♥ 计数♠ 案例♠ 推送♠ 结语♠ 原子计数器 什么是原子计数器 原子计数器是一种特殊的变量表示的是多个着色器之间共享的存储这个存储和一个缓冲对象关联而且我们可以调用特定的函数进行原子内存操作 原子计数器的作用 变量本身的功能是用于计数 ♠ 用法 ♥ 声明 layout (binding3,offset8) uniform atomic_uint my_variable;声明了原子计数器my_variable并绑定在3上其中起始位置是8 ♥ 绑定 GLuint buf; glGenBuffers(1, buf); glBindBuffer(GL_ATOMIC_COUNTER_BUFFER, buf); glBufferData(GL_ATOMIC_COUNTER_BUFFER, 16 * sizeof(GLuint), NULL, GL_DYNAMIC_COPY); glBindBufferBase(GL_ATOMIC_COUNTER_BUFFER, 3, buf);同uniform和buffer相同可以使用相同的方式将缓存对象绑定至绑定点上特定参数GL_ATOMIC_COUNTER_BUFFER ♥ 重置 在使用前我们要重置计数器变量书中提供了三种方式重设变量 glBufferSubData const GLuint zero 0; glBufferSubData(GL_ATOMIC_COUNTER_BUFFER, 2 * sizeof(GLuint), sizeof(GLuint), zero);通过glBufferSubData更新指定位置的数据 glMapBufferRange GLuint * data (GLuint *)glMapBufferRange(GL ATOMIC COUNTER BUFFER, 0, 16 * sizeof(GLuint), GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_RANGE_BIT); data[2] 0; glUnmapBuffer(GL_ATOMIC_COUNTER_BUFFER);通过glMapBufferRange获取变量地址后直接赋值 glClearBufferSubData glClearBufferSubData(GL_ATOMIC_COUNTER_BUFFER, GL_R32UI, 2 * sizeof(GLuint), sizeof(GLuint), GL_RED_INTEGER, GL_UNSIGNED_INT, zero);通过glClearBufferSubData赋值 ♥ 计数 OpenGL提供了三种用于计数的着色器函数 加一 uint atomicCounterIncrement(atomic_uint a);减一 uint atomicCounterDecrement(atomic_uint a);获取值 uint atomicCounter(atomic_uint a);♠ 案例 我们来看一个完整的演示示例吧改例子将一个计数器绑定到缓存后并清零通过计数器的数量来判断颜色的显示 注该例子直接修改OpenGl超级宝典官方示例singletri.cpp只需修改startup方法即可 virtual void startup() {static const char * vs_source[] {#version 450 core \n \n \nvoid main(void) \n{ \n const vec4 vertices[] vec4[](vec4( 0.25, -0.25, 0.5, 1.0), \n vec4(-0.25, -0.25, 0.5, 1.0), \n vec4( 0.25, 0.25, 0.5, 1.0)); \n \n gl_Position vertices[gl_VertexID]; \n} \n};static const char * fs_source[] {#version 450 core \n \n \nlayout (binding0) uniform atomic_uint my_variable; \n \nout vec4 color; \n \nvoid main(void) \n{ \n uint counter atomicCounterIncrement(my_variable); \n if(counter20000){ \n color vec4(1.0, 0.8, 1.0, 1.0); \n }else{ \n color vec4(0.0, 0.8, 1.0, 1.0); \n } \n } \n};program glCreateProgram();GLuint fs glCreateShader(GL_FRAGMENT_SHADER);glShaderSource(fs, 1, fs_source, NULL);glCompileShader(fs);GLuint vs glCreateShader(GL_VERTEX_SHADER);glShaderSource(vs, 1, vs_source, NULL);glCompileShader(vs);glAttachShader(program, vs);glAttachShader(program, fs);glLinkProgram(program);glGenVertexArrays(1, vao);glBindVertexArray(vao);// 绑定缓存GLuint buf;glGenBuffers(1, buf);glBindBuffer(GL_ATOMIC_COUNTER_BUFFER, buf);glBufferData(GL_ATOMIC_COUNTER_BUFFER, 16 * sizeof(GLuint), NULL, GL_DYNAMIC_COPY);glBindBufferBase(GL_ATOMIC_COUNTER_BUFFER, 0, buf);// 清零计数器const GLuint zero 0;glBufferSubData(GL_ATOMIC_COUNTER_BUFFER, 2 * sizeof(GLuint), sizeof(GLuint), zero); }在counter20000下显示效果如下 在counter20000下显示效果如下 ♠ 推送 Github https://github.com/KingSun5♠ 结语 若是觉得博主的文章写的不错不妨关注一下博主点赞一下博文另博主能力有限若文中有出现什么错误的地方欢迎各位评论指摘。 本文属于原创文章转载请评论留言并在转载文章头部著名作者出处
http://www.w-s-a.com/news/788507/

相关文章:

  • 网站建设公司开发免费图纸网站
  • 一个网站页面设计多少钱做预算查价格的网站是哪个
  • 鳌江哪里有做网站百度短链接在线生成
  • 有没有什么做水利资料的网站杭州建设信用平台
  • 电子商务网站建设及推广方案论文wordpress无法显示文章
  • 建设工程监理网站前端和后端分别需要学什么
  • 公司网站制作效果国内最好的在线网站建设
  • 徐州好点的做网站的公司有哪些wordpress 工具插件下载
  • 如何用云服务器建设网站微网站免费开发平台
  • 官网的网站设计公司做网站需要准备哪些东西
  • 程序员和做网站那个好找工作wordpress二维码 插件
  • 湖南城市建设技术学院官方网站青海省建设局网站
  • 响应式网站有什么区别百度网站官网
  • 金华企业自助建站系统长沙建站公司模板
  • 云主机 做网站友情链接网站
  • 定制型网站设计天津网站模板建站
  • 为什么公司网站打开很慢wordpress汉化插件
  • 用dw做教学网站做网站用什么配置笔记本
  • 秦皇岛网站制作服务无网站无产品链接如何做SOHO
  • 国际婚恋网站做翻译合法吗南宁网络推广有限公司
  • 济南做网站公司排名销售市场规划方案
  • 营销型网站定制珠海建站网站
  • 企业网站代码wordpress页面重定向循环
  • 厦门网站建设哪家便宜用wordpress做企业网站
  • 网站备案有幕布python 做网站速度
  • 旅游网站模板psd网站后台维护主要做什么
  • 晋江做任务的网站网站如何设置关键词
  • 呼伦贝尔网站建设呼伦贝尔ps网页设计心得体会
  • 字母logo设计网站动画设计方案及内容
  • 怎样做网站建设方案wordpress 附件预览