为什么重构 Simple2D


  开始的时候打算使用几周的时间来实现 Simple2D 的,主要是实现一些简单的 2D 渲染功能。但是编写的过程中不满于它只能实现简单的功能,后来添加了诸如Alpha测试、深度测试、裁剪测试、模板测试、混合等功能,为了实现这些实现了一个 Pass 类。

  除了这些,我还希望能够在 Simple2D 中使用 Shader,于是又实现了 Shader 类。对于顶点数据,使用时分配内存,结束后释放内存,为了减小开销而使用了内存分配器 BlockAllocator。

  最终的渲染操作在 Renderer 中完成,所采用的方法是:把所有渲染数据都添加到 Renderer 中,在帧结束后渲染所有数据。这要求在渲染前对渲染数据进行排序(Pass 排序),然后根据 Pass 设置 OpenGL 的渲染状态,最后 Draw 顶点数据。

  做完这些后,觉得可以使用 Simple2D 来开发一个小游戏了,开发小游戏的同时又可以改进 Simple2D。但是要做游戏还需要声频播放和 GUI,ImGui 库和 Bass 库是不错的选择,你可以很轻松的嵌入到 Simple2D 中,然后搞出来了一个 MusicPlayer。

  使用 Simple2D 开发游戏,不得不要面对一个问题:批量的纹理渲染,主要就是合并相同纹理的顶点数据。我原先打算通过 Pass 来进行合并的(一个 Pass 对应一张纹理,Renderer 会将同一个 Pass 对应的顶点数据合并在一起渲染)。但是这样实现起来比较困难,所以考虑再重写一遍 Simple2D 的渲染部分代码。抛弃以前 Simple2D 复杂的功能,实现一个更为简洁的 Simple2D,能够高效地渲染批量纹理反走样的几何图形

  接下来的文章分为三个部分:

  1、Simple2D 重构(纹理池、反走样 Painter、Shader)

  2、简易的游戏开发框架(精灵树、精灵动画、精灵控件)

  3、2048 游戏开发


  由于 Simple2D 只提供了渲染功能,如果要开发游戏还需要精灵渲染树:

  通过精灵树可以实现复杂的渲染,除此之外还需要炫酷的动画效果,Tween 动画是必须的:

  最后的部分就是基于 Simple2D 的开发的游戏——2048

  如果对 Simple2D 的实现感兴趣的话,可以关注接下来的文章。下面给出 Simple2D 项目的源码。

  源码下载:Simple2D-20.rar

Simple2D-20(重构)的更多相关文章

  1. 《iOS开发指南》正式出版-源码-样章-目录,欢迎大家提出宝贵意见

    智捷iOS课堂-关东升老师最新作品:<iOS开发指南-从0基础到AppStore上线>正式出版了 iOS架构设计.iOS性能优化.iOS测试驱动.iOS调试.iOS团队协作版本控制.... ...

  2. IntelliJ IDEA神器使用技巧

    说明:详情请参考慕课网课程:IntelliJ IDEA神器使用技巧:http://www.imooc.com/learn/924(感谢课程作者:闪电侠) 推荐: 1. 课程老师(闪电侠)IDEA快捷键 ...

  3. SpringCloud 源码系列(4)—— 负载均衡 Ribbon

    一.负载均衡 1.RestTemplate 在研究 eureka 源码上篇中,我们在 demo-consumer 消费者服务中定义了用 @LoadBalanced 标记的 RestTemplate,然 ...

  4. 重构、插件化、性能提升 20 倍,Apache DolphinScheduler 2.0 alpha 发布亮点太多!

    点击上方 蓝字关注我们 社区的小伙伴们,好消息!经过 100 多位社区贡献者近 10 个月的共同努力,我们很高兴地宣布 Apache DolphinScheduler 2.0 alpha 发布.这是 ...

  5. 重构第20天 提取子类(Extact SubClass)

    理解:提取子类就是把基类中,不是所有子类或者只有少数子类用到的方法,提取出来,调整到子类中去. 详解:下面的代码中我们用到一个单一的类Registration,来处理学生选课信息. public cl ...

  6. 原生JS实现全屏切换以及导航栏滑动隐藏及显示——重构前

    思路分析: 向后滚动鼠标滚轮,页面向下全屏切换:向前滚动滚轮,页面向上全屏切换.切换过程为动画效果. 第一屏时,导航栏固定在页面顶部,切换到第二屏时,导航条向左滑动隐藏.切换回第一屏时,导航栏向右滑动 ...

  7. [bzoj3123][sdoi2013森林] (树上主席树+lca+并查集启发式合并+暴力重构森林)

    Description Input 第一行包含一个正整数testcase,表示当前测试数据的测试点编号.保证1≤testcase≤20. 第二行包含三个整数N,M,T,分别表示节点数.初始边数.操作数 ...

  8. Rafy 领域实体框架设计 - 重构 ORM 中的 Sql 生成

    前言 Rafy 领域实体框架作为一个使用领域驱动设计作为指导思想的开发框架,必然要处理领域实体到数据库表之间的映射,即包含了 ORM 的功能.由于在 09 年最初设计时,ORM 部分的设计并不是最重要 ...

  9. 重构alert,confirm

    最近写了一个重构的alert,confirm控件,调用时直接使用alert,confirm即可 //调用方法 alert("提示语") window.confirm('你确定要删除 ...

  10. 重构MVC多条件+分页解决方案

    为支持MVC的验证,无刷新查询,EF,以及让代码可读性更强一点,所以就重构了下原来的解决方案. 这里就简单讲下使用方法吧: Model: 继承PagerBase: 1 public class Sea ...

随机推荐

  1. curl 知识点

    curl :command line tool and library for transferring data with URLs curl 命令,常用缩写: curl 命令 缩写 说明 curl ...

  2. Jenkins进阶-Gitlab使用Webhook实现Push代码自动部署(3)

    1.Jenkins 安装完成以后,首先我们在Jenkins中需要安装一下,Gitlab Hook Plugin 插件: 2.插件安装完成我们创建任务,在任务重构建触发器下获取回调URL: 注意: 注意 ...

  3. js去除运营商或者路由器添加的广告脚本

    是不是偶尔发现在家里看网页的时候回插入一个广告,很烦人.开发的网站,上传到了阿里云 oss,设置了域名解析,但是在家里晚上访问的时候,总会在页面添加一个广告,导致页面卡主,一开始以为是路由器的问题,以 ...

  4. asp.net Repeater使用例子,包括分页

    <style type="text/css">    .tab{border-collapse:collapse; margin:0 auto;}    .tab th ...

  5. MVC 自定义 以表达式树为参数的htmlhelper

    public static MvcHtmlString Try<TModel, TProperty>( this HtmlHelper<TModel> htmlHelper, ...

  6. MFC的组合框(ComboBox)控件切换下拉样式

    由于课题的需求需要做MFC串口程序,看了百度下载的串口助手的界面风格,发现这个设计很好 波特率的组合框只给出了5个可选数值,然后第6个选项是Custom,即手动输入. 实际上DCB结构的BaudRat ...

  7. 在VS2013平台下如何快速解决c++代码内存泄漏问题

    在学习FPS3000人脸关键点定位算法时,发现github上的源码,存在大量的内存泄漏问题,在训练的时发现内存一直在增长,测试的时候也存在内存无法彻底释放的问题. 一直以为是存放模型参数vector& ...

  8. Makefile | Linux嵌入式编程 使用详细图解

    针对的是对Makefile一点都不会的小白哦! 练习之前我们要做好准备: (1):第一步创建一个目录,因为实验过程中生成的文件会很多,不要把你系统里的文件搞得乱七八糟. [cjj@bogon ~]$ ...

  9. 1092 To Buy or Not to Buy (20 分)

    1092 To Buy or Not to Buy (20 分) Eva would like to make a string of beads with her favorite colors s ...

  10. sqoop操作之ORACLE导入到HIVE

    导入表的所有字段 sqoop import --connect jdbc:oracle:thin:@192.168.1.107:1521:ORCL \ --username SCOTT --passw ...