Cocos2d-x   发布时间:2022-05-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了【cocos2d-x-3.1.1系列3】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

大佬总结

以上是大佬教程为你收集整理的【cocos2d-x-3.1.1系列3】cocos2d渲染时候有的显卡要图片是2次幂的 ccNextPOT全部内容,希望文章能够帮你解决【cocos2d-x-3.1.1系列3】cocos2d渲染时候有的显卡要图片是2次幂的 ccNextPOT所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。