谈谈cocos2d-x多线程渲染

Imagination Tech ? 2018-05-23 10:40 ? 次阅读

美高梅官网,金沙网投领导者,金沙网投网站,金沙网投开户 www.tongshi-cn.com 可行性:

游戏循环主要包括这几个部分:

硬件事件,主要就是指触屏事件,按键事件和鼠标事件;

游戏事件,主要指定时器事件和预定义事件,比如schedule;

游戏逻辑,对于胖脚本端来说,这个就指的脚本逻辑;

渲染数据的生成,在引擎里面就是指node的visit,这里计算生成所有即将发往OpenGL的数据,包括顶点纹理坐标等attribute数据,变换矩阵纹理等uniform数据,混合模式等渲染状态;

通过OpenGL接口把所有数据发往OpenGL。

这几个步骤里面,只有第五个步骤需要涉及到OpenGL操作,而前面四个步骤都是为第五个步骤做准备,而第五个步骤不用或者很少需要反馈数据给前面四个步骤。这是一个典型的生产者消费者模式,在很低线程同步开销的情况下课采用多线程处理。

必要性:

处理游戏逻辑(包括前四个步骤)承担了太多cpu运算,而发数据到OpenGL也相当耗时,尤其涉及到多次的渲染状态切换。在多核cpu上面把二者分开可以提高并行性,进而提高游戏帧率。

一些方案:

cocos2d-x3.0之后有一个很大的转变就是不是在visit里面渲染,而是在visit里面生成渲染命令,并把命令发往render类缓存,等待某个时机处理这些命令,即渲染。

这是一个典型的命令模式,只要保证这些command的执行处理的数据和主线程(游戏逻辑的执行线程)不一样或者通过加锁做好和主线程的数据互斥,就可以保证线程安全。大多数数据我们都可以在visit(其实是draw)里面生成一份拷贝,而对于较少个数但是每个都包含大量顶点数据的对象,我们可以通过加锁做好互斥,比如粒子系统。较少的线程互斥操作也不会造成太大线程通信开销。

游戏主循环也是先执行游戏逻辑相关的四个步骤,然后通过条件变量告知渲染线程数据已经准备好。我们也可以使用双缓存系统,即创建两个渲染命令缓存,在渲染线程使用一个命令缓存进行渲染的时候,主线程逻辑可以把渲染命令发往另一个缓存。

如果主线程逻辑确实需要OpenGL处理才能得到的一些数据,我们也可以采用一些较为低效的折中方案。主线程通过类似于schedule的方式把命令发往渲染线程,然后等待,渲染线程维持一个这样的命令队列,每个周期优先处理这个队列,处理完成后通知主线程。这种做法不易多用。

说个例子,同步创建纹理并生成sprite的操作,这个生成纹理的部分需要放到渲染线程,这个就可以采用这种方案。而事实上游戏逻辑根本不需要关心这个纹理到底长什么样,主线程可以不用等到渲染线程处理完成这个纹理再继续运行,渲染线程再处理完成这个纹理后,通过schedule告知主线程,主线程更新这个texture2d对象的纹理ID即可,大大提高效率。

热门推荐

原文标题:cocos2d-x多线程渲染的一些探讨

文章出处:【微信号:Imgtec,微信公众号:Imagination Tech】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
分享:

评论

相关推荐

练一练,嵌入式工程师操作系统面试题三道,答案在文末

发表于 07-13 16:09 ? 408次 阅读
练一练,嵌入式工程师操作系统面试题三道,答案在文末

基于STM32的虚拟多线程(TI_BLE协议栈_ZStack协议栈)

基于STM32的虚拟多线程,可以很好的用于裸机程序中,用于模拟小型操作系统的多线程概念。本实例参考了....

发表于 06-14 10:42 ? 247次 阅读
基于STM32的虚拟多线程(TI_BLE协议栈_ZStack协议栈)

带你深入解读:基于多线程技术的PLC与PC的通讯方式

在现代工业控制系统中,PLC以其高可靠性、适应工业过程现场、强大的联网功能等特点,被广泛应用??墒迪?...

发表于 05-25 15:41 ? 480次 阅读
带你深入解读:基于多线程技术的PLC与PC的通讯方式

渲染中的帧缓存和深度缓存

渲染涉及大量的缓存,这里缓存只是一个简单的存有像素数据的矩形内存块,最重要缓存是帧缓存和深度缓存。

的头像 Imagination Tech 发表于 05-14 11:44 ? 382次 阅读
渲染中的帧缓存和深度缓存

Google推出Seurat源代码 造福创作者

去年Google I/O大会上透露的场景简化技术Seurat在近日开放代码。这将为更多内容创作者提供....

的头像 AR酱 发表于 05-12 10:59 ? 683次 阅读
Google推出Seurat源代码 造福创作者

如何选好多线程和多进程

关于多进程和多线程,教科书上最经典的一句话是“进程是资源分配的最小单位,线程是CPU调度的最小单位”....

的头像 嵌入式ARM 发表于 05-11 16:16 ? 250次 阅读
如何选好多线程和多进程

基于GPU下AGP显卡的渲染流程

首先根据下图粗略说明一下当前普遍流行的AGP(Accelerated Graphics Port,图....

发表于 05-07 10:43 ? 133次 阅读
基于GPU下AGP显卡的渲染流程

浅谈GPU的渲染流水线实现

颜色表示了不同阶段的可配置性或可编程性:绿色表示该流水线阶段是完全可编程控制的,黄色表示该流水线阶段....

发表于 05-04 09:16 ? 252次 阅读
浅谈GPU的渲染流水线实现

浅谈x多线程渲染

游戏循环主要包括这几个部分: 1、硬件事件,主要就是指触屏事件,按键事件和鼠标事件; 2、游戏事....

发表于 04-26 16:48 ? 151次 阅读
浅谈x多线程渲染

如何在多通道系统中使用DSPBIOSIO进行多线程设计

数字信号处理器(DSP)通常用于输入大量的数据,执行。对这些数据进行数学变换,然后输出所得到的数据,....

发表于 04-25 15:12 ? 68次 阅读
如何在多通道系统中使用DSPBIOSIO进行多线程设计

关于Linux下多线程编程技术学习总结

Linux下多线程编程技术 作为一个IT人员,不断的学习和总结是我们这个职业习惯,所以我会将每个阶段....

发表于 04-22 03:12 ? 291次 阅读
关于Linux下多线程编程技术学习总结

多线程面试经典问答

线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位,可以使用多线程....

发表于 04-20 16:09 ? 182次 阅读
多线程面试经典问答

关于图像处理的多线程计算介绍

为了能让多个线程同时并行处理,那么各自处理的数据不能有交集,这很好理解。那么基本思路是将一副图像分成....

的头像 Imagination Tech 发表于 04-03 11:41 ? 483次 阅读
关于图像处理的多线程计算介绍

正向渲染和延迟渲染彼此之间有什么不同

每个几何对象被渲染,但是没有使用光照,使用多目标渲染(multiple render targets....

的头像 Imagination Tech 发表于 03-23 14:09 ? 891次 阅读
正向渲染和延迟渲染彼此之间有什么不同

多线程服务器编程模型:如何正确使用mutex 和condition variable

本文对多线程服务器的常用编程模型进行了一个详细的解读,本文中的多线程服务器是运行在 Linux 操作....

的头像 人间烟火123 发表于 02-19 08:29 ? 1226次 阅读
多线程服务器编程模型:如何正确使用mutex 和condition variable

Python多线程编程运行【python简单入门】

发表于 02-01 18:48 ? 578次 阅读
Python多线程编程运行【python简单入门】

解锁新姿势 | 如何用配置中心实现全局动态流控?

发表于 01-24 16:41 ? 401次 阅读
解锁新姿势 | 如何用配置中心实现全局动态流控?

基于同步语言模型驱动的时间可预测多线程代码生成方法

能够提供更强计算能力的多核处理器将在安全关键系统中得到广泛应用,但是由于现代处理器所使用的流水线、乱....

发表于 01-16 10:27 ? 83次 阅读
基于同步语言模型驱动的时间可预测多线程代码生成方法

基于多线程环境下值的递增操作--原子操作

因此在多线程环境中对一个变量进行读写时,我们需要有一种方法能够保证对一个值的递增操作是原子操作——即....

的头像 C语言专家集中营 发表于 01-10 11:16 ? 760次 阅读
基于多线程环境下值的递增操作--原子操作

了解多线程并深入分析CreateThread与_beginthreadex本质区别

本文将带领你与多线程作第一次亲密接触,并深入分析CreateThread与_beginthreade....

的头像 C语言专家集中营 发表于 01-09 17:08 ? 748次 阅读
了解多线程并深入分析CreateThread与_beginthreadex本质区别

从I/O的阻塞与非阻塞、I/O处理的单线程与多线程角度探讨服务器模型

这里探讨的服务器模型主要指的是服务器端对I/O的处理模型。从不同维度可以有不同的分类,这里从I/O的....

的头像 马哥Linux运维 发表于 01-08 16:13 ? 1472次 阅读
从I/O的阻塞与非阻塞、I/O处理的单线程与多线程角度探讨服务器模型

多线程的并行实例恢复方法

针对数据库实例恢复串行化执行效率低的问题,以神通数据库为基础提出一种基于多线程的并行实例恢复方法。首....

发表于 12-20 16:35 ? 130次 阅读
多线程的并行实例恢复方法

Nodejs搭建的异步非阻塞服务器与传统的阻塞多线程服务器区别

Nodejs是一个Javascript运行环境,其核心是一个独立的Javascript虚拟机,这个虚....

发表于 12-13 14:46 ? 232次 阅读
Nodejs搭建的异步非阻塞服务器与传统的阻塞多线程服务器区别

什么是多线程编程?多线程编程基础知识

摘要:多线程编程是现代软件技术中很重要的一个环节。要弄懂多线程,这就要牵涉到多进程。本文主要以多线程....

发表于 12-08 16:30 ? 1184次 阅读
什么是多线程编程?多线程编程基础知识

多线程好还是单线程好?单线程和多线程的区别 优缺点分析

摘要:如今单线程与多线程已经得到普遍运用,那么到底多线程好还是单线程好呢?单线程和多线程的区别又是什....

发表于 12-08 09:33 ? 6692次 阅读
多线程好还是单线程好?单线程和多线程的区别 优缺点分析

关于python不能真正多线程问题解析

多线程,是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同....

发表于 12-01 10:36 ? 320次 阅读
关于python不能真正多线程问题解析

Volatile与多线程的认识与理解

volatile是一个类型修饰符(type specifier),就像大家更熟悉的const一样,它....

发表于 12-01 10:31 ? 503次 阅读
Volatile与多线程的认识与理解

多核CPU、多进程、多线程之间的联系解析

多核心cpu主要分原生多核和封装多核。Windows 应用程序中消息有两种送出途径;直接和排队。Wi....

发表于 12-01 09:37 ? 953次 阅读
多核CPU、多进程、多线程之间的联系解析

Java多线程总结之Queue

在Java多线程应用中,队列的使用率很高,多数生产消费模型的首选数据结构就是队列。Java提供的线程....

发表于 11-28 16:14 ? 2234次 阅读
Java多线程总结之Queue

多线程细节问题学习笔记

这一次我们要说下关于final在多线程的作用,原子性的使用,死锁以及Java中的应对方案,线程的局部....

发表于 11-28 15:34 ? 234次 阅读
多线程细节问题学习笔记

基于OPENMP多线程技术的运控运算优化

巡天类光学载荷是空间天文观测的重要载荷,运控系统是其中的重要组成。在利用HLA分布式仿真技术对巡天观....

发表于 11-07 16:33 ? 56次 阅读
基于OPENMP多线程技术的运控运算优化

基于wince的心电图机软件系统设计方案解析

据世界卫生组织的数据,心血管病已经成为造成全球人口死亡的主要因素。由于心电图检查在诊断此病上具有准确....

发表于 10-30 11:46 ? 98次 阅读
基于wince的心电图机软件系统设计方案解析

多线程技术倍增多核系统的性能提升

采用多核技术提升CPU 马力,是一种通过硬件提供更高系统性能的日益常见的做法。即使对许多视成本和功耗....

发表于 10-26 11:29 ? 93次 阅读
多线程技术倍增多核系统的性能提升

多核与多线程技术的区别

毫无疑问的,多核、多线程此二词已快成为当今处理器架构设计中的两大显学,如同历史战国时代以儒、墨两大派....

发表于 10-19 16:26 ? 121次 阅读
多核与多线程技术的区别

关于多线程编程教程及经典应用案例的汇总分析

在一个程序中,这些独立运行的程序片段叫作线程,利用它编程的概念就叫作多线程处理。具有多线程能力的计算....

发表于 10-16 16:46 ? 99次 阅读
关于多线程编程教程及经典应用案例的汇总分析

Java Thread 总结

线程的概述(Introduction) 线程是一个程序的多个执行路径,执行调度的单位,依托于进程存在....

发表于 09-26 17:02 ? 96次 阅读
Java Thread 总结

多核架构及多线程编程

线程(thread)是进程上下文(context)中执行的代码序列,又被称为轻量级进程(light ....

发表于 09-11 16:12 ? 103次 阅读
多核架构及多线程编程

渗透测试工具开发

渗透测试工具开发

发表于 09-07 10:30 ? 118次 阅读
渗透测试工具开发

设计多线程和多核系统

如果您的微控制器应用程序需要处理数字音频,请考虑采用多线程方法。使用多线程设计方法可以使设计者以简单....

发表于 08-14 15:42 ? 377次 阅读
设计多线程和多核系统

LabVIEW编写一个数据采集和存储的程序,如何将采集显示波形和存储变为两个不同的线程单独运行?

发表于 08-11 16:52 ? 1582次 阅读
LabVIEW编写一个数据采集和存储的程序,如何将采集显示波形和存储变为两个不同的线程单独运行?

多线程与聊天室程序的创建

多线程程序的编写,多线程应用中容易出现的问题?;コ舛韵蟮慕步?,如何采用互斥对象来实现多线程的同步。如....

发表于 05-16 15:22 ? 199次 阅读
多线程与聊天室程序的创建

MIPS硬件多线程发布至今已逾10个年头

去年,我们庆祝了MIPS CPU架构发行30周年。MIPS自1986年发布以来,一直势头强劲,不过在....

发表于 04-21 11:24 ? 1022次 阅读
MIPS硬件多线程发布至今已逾10个年头

MIPS CPU多线程技术解析

对于Imagination来说,充分利用可用的硬件资源是我们的设计准则。我们的图形处理器以基于贴图的....

发表于 03-01 10:59 ? 401次 阅读
MIPS CPU多线程技术解析

MIPS架构上多线程的定义及用途

在上一篇文章中,我对计算机虚拟化的基本概念及MIPS架构如何有效地实现硬件虚拟化进行了阐述。本文将主....

发表于 02-09 14:44 ? 405次 阅读
MIPS架构上多线程的定义及用途

Linux下多线程Socket通讯的研究与应用_王枫

值得一看的文献资料,如有其它类似需要,可以在栏目下留言,以后上传。

发表于 01-12 18:22 ? 131次 阅读
Linux下多线程Socket通讯的研究与应用_王枫

同时多线程处理器的指令调度器设计

同时多线程处理器的指令调度器设计_李乐

发表于 01-08 14:55 ? 155次 阅读
同时多线程处理器的指令调度器设计

ProtoThreads下载

arduino 的多线程嵌入式操作系统,占用硬件资源少

发表于 08-22 16:18 ? 256次 阅读
ProtoThreads下载

GPU性能不够跑VR?这项技术或许能解决难题

 所谓虚拟现实,就是要欺骗人的眼睛和大脑,让虚拟世界感觉跟真实世界一样。目前好的VR产品已经在这方面....

发表于 04-29 16:22 ? 502次 阅读
GPU性能不够跑VR?这项技术或许能解决难题

用多线程实现GPS接收机与PDA在Windows CE下的串口通

本文简单介绍了 GPS 接收机串口通信的基本概念和 GPS 数据输出的格式。主要论述了 如何用 多线....

发表于 04-18 14:12 ? 149次 阅读
用多线程实现GPS接收机与PDA在Windows CE下的串口通

基于Win32 API函数和多线程技术的串行通信编程

运用Win32 API函数和多线程技术,对磁悬浮伺服装置控制系统中PC机与单片机间串行通信进行编程。....

发表于 04-18 10:46 ? 117次 阅读
基于Win32 API函数和多线程技术的串行通信编程

Windows CE中实现PDA与GPS OEM板的通信

本文介绍了 Windows CE 的特点 阐述了如何利用面向对象的思想 多线程的程序设计方法实现 P....

发表于 04-18 10:27 ? 110次 阅读
Windows CE中实现PDA与GPS OEM板的通信

基于Heritrix的主题爬虫在互联网舆情系统中应用

发表于 08-26 15:56 ? 207次 阅读
基于Heritrix的主题爬虫在互联网舆情系统中应用

Linux多线程_系统编程

发表于 06-19 14:46 ? 145次 阅读
Linux多线程_系统编程

详述C#多线程串行通信方法的应用

发表于 08-14 13:02 ? 243次 阅读
详述C#多线程串行通信方法的应用