码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-10-14 15:46:28      阅读:320      评论:0      收藏:0      [点我收藏+]

标签:c++   cocos2d-x   opengl   

今天看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;
}
bubuko.com,布布扣

找最小的比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



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

标签:c++   cocos2d-x   opengl   

原文地址:http://blog.csdn.net/linyanhou/article/details/40075593

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!