cocos2d渲染时候有的显卡要图片是2次幂的 ccNextPOT

今天看cocos2d渲染的机制看到一个神一样的东西ccNextPOT

前言:

cocos2d是基于opengl的,opengl在npot上有的显卡是支持的有的是不支持的,npot意思是是否是2次幂  是否是2的倍数 因为在渲染的时候,好像跟底层要用到傅里叶变换要2次幂【这个没有去探究考证】

源码:cocos2d-x 3.1.1

CRenderTexture类

if (Configuration ::getInstance()->supportsNPOT())

{

powW = w;

powH = h;

}

else

{

powW = ccNextPOT( w);

powH = ccNextPOT( h);

}

int ccNextPOT(int x )

{

x = x -
1;

x = x |
( x >> 1);

x = x |
( x >> 2);

x = x |
( x >> 4);

x = x |
( x >> 8);

x = x |
( x >>16);

return x +
1;

}

找最小的比x大的2次幂数,也就是要可以等于  把最高位后面的位变成1  之后+1

例如:1011 0011  先变成1111 1111   只会+1等于1
0000 0000

解析源码:[对于32位整数]   图片也没有那么大的

x = x -
1;//32答案是32所以这里要减1  是大于等于的2次幂

x = x |
( x >> 1);   把第2高位变成1

x = x |
( x >> 2);   把第3,4高位变成1

x = x |
( x >> 4);   把第5,6,7,8高位变成1

x = x |
( x >> 8);   把第9,10,11,12,13,14,15,16高位变成1

x = x |
( x >>16);   把第17,18,19........32高位变成1

时间: 2024-10-12 03:28:38

cocos2d渲染时候有的显卡要图片是2次幂的 ccNextPOT的相关文章

浏览器渲染的工作流程和图片加载与渲染规则

1 浏览器渲染的工作流程 浏览器的工作原理.以Webkit引擎的工作流程为例,浏览器加载一个HTML页面后进行如下操作 解析HTML[遇到<img>标签加载图片] -> 构建DOM树 加载样式 -> 解析样式[遇到背景图片链接不加载] -> 构建样式规则树 加载javascript -> 执行javascript代码 把DOM树和样式规则树匹配构建渲染树[加载渲染树上的背景图片] 计算元素位置进行布局 绘制[开始渲染图片] 2 图片加载与渲染规则  页面中不是所有的&l

vue.js中如何渲染本地数据库中的图片

// 带参数传值 <router-link :to="{'name':'foot',params:{'id':scene_list.id}}">本地美食</router-link> <template> <div> <h1>美食</h1> <table border="1"> <tr> <td>美食</td> <td>美食图片</

通过渲染改变tabBarItem的背景图片

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #703daa } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo } p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #3d1d81 } span.s1 { } span.s2 { color: #00000

图片的解压缩、渲染

一.图像从文件到屏幕过程 首先明确两个概念:水平同步信号.垂直同步信号. CRT 的电子枪按照上图中的方式,从上到下一行一行的扫描,扫描完成后显示器就呈现一帧画面,随后电子枪回到初始位置继续下一次的扫描.当电子枪切换到新的一行准备扫描时,显示器会发送一个水平同步信号(Horizonal Synchronization),简称HSync:完成一帧画面绘制后,电子枪会回到原位,显示器会发送一个垂直同步信号(Vertical Synchronization),简称VSync. CPU/GPU 等在这样

cocos2d-x ios游戏开发初认识(六) 渲染的优化

做程序开发肯定要考虑到内存的优化,毕竟iphone本身的内存就不是非常大.这一节主要说这个cocos2d开发对内存的优化,详细表如今,既能够对同样的精灵(图片)仅仅渲染一次,也能够对不能的精灵仅仅渲染一次. 以下是程序的做法,先屏蔽前面的代码. 先简介一下 CCSpriteBatchNode类,它是用来优化游戏渲染效率的.CCSpriteBatchNode 中的全部CCSprite仅仅会被渲染1次,因此能够提高游戏的FPS.限制:增加到CCSpriteBatchNode 中的CCSprite必须

[转]浏览器渲染机制——一定要放在body底部的js引用

转自:http://blog.csdn.net/u012251421/article/details/50536265 说明: 本文提到的浏览器均是指Chrome. “script标签“指的都是普通的不带其他属性的外联javascript. web性能优化的手段并不是非黑即白的,有些手段过头了反而降低性能,所以在讨论条件和结论的时候,虽然很多条件本身会带来其他细微的负面或正面影响,为了不使论述失去重点,不会扩展太开. 一.从一个面试题说起 面试前端的时候我喜欢问一些看上去是常识的问题.比如:为什

转---JS 一定要放在 Body 的最底部么?聊聊浏览器的渲染机制

作者:德来 segmentfault.com/a/1190000004292479 如有好文章投稿,请点击 → 这里了解详情 一.从一个面试题说起 面试前端的时候我喜欢问一些看上去是常识的问题.比如:为什么大家普遍把<script src=""></script>这样的代码放在body最底部?(为了沟通效率,我会提前和对方约定所有的讨论都以chrome为例) 应聘者一般会回答:因为浏览器生成Dom树的时候是一行一行读HTML代码的,script标签放在最后面就不

cocos2dx的图片加载

//data: 图片文件数据 dataLen: 文件长度 bool Image::initWithImageData(const unsigned char * data, ssize_t dataLen) { bool ret = false; do { CC_BREAK_IF(! data || dataLen <= 0); unsigned char* unpackedData = nullptr; ssize_t unpackedLen = 0; //解压缩pvr.ccz格式的图片 //

第1部分: 游戏引擎介绍, 渲染和构造3D世界

原文作者:Jake Simpson译者: 向海Email:[email protected] ------------------------------------------------------------第1部分: 游戏引擎介绍, 渲染和构造3D世界 介绍 自Doom游戏时代以来我们已经走了很远. DOOM不只是一款伟大的游戏,它同时也开创了一种新的游戏编程模式: 游戏 "引擎". 这种模块化,可伸缩和扩展的设计观念可以让游戏玩家和程序设计者深入到游戏核心,用新的模型,场景和