Android Bug - 魅族三Shader问题

这几天编写Opengl项目,通过shader进行绘制,在做渐变的时候出问题了。

首先在魅族或者其他手机或者均为正常渐变,而偏偏在魅族3(MX3)手机上渐变有问题。

核心代码如下:

float scale = getScaleByPoints(m_nForeGradientBeginPos, m_nForeGradientEndPos, vec2(v_texCoord[0], v_texCoord[1]));

int index = 0;
index += getIndex(0, m_nForeColorNums, scale, m_nForeScales[0]);
index += getIndex(1, m_nForeColorNums, scale, m_nForeScales[1]);
index += getIndex(2, m_nForeColorNums, scale, m_nForeScales[2]);
index += getIndex(3, m_nForeColorNums, scale, m_nForeScales[3]);
index += getIndex(4, m_nForeColorNums, scale, m_nForeScales[4]);
index += getIndex(5, m_nForeColorNums, scale, m_nForeScales[5]);
index += getIndex(6, m_nForeColorNums, scale, m_nForeScales[6]);
index += getIndex(7, m_nForeColorNums, scale, m_nForeScales[7]);
index += getIndex(8, m_nForeColorNums, scale, m_nForeScales[8]);
index += getIndex(9, m_nForeColorNums, scale, m_nForeScales[9]);

if(index == 0)
{
	outColor = m_ForeColors[0];
	return outColor;
}
float inScale = (scale - m_nForeScales[index - 1]) / (m_nForeScales[index] - m_nForeScales[index - 1]);
outColor = mix(m_ForeColors[index - 1], m_ForeColors[index], inScale);

焦头烂额的找问题,从代码上看没问题,在其他甚至低端手机上代码也没有问题,就在mx3上有问题。

所有变量都单独测试过没有问题,哪问题究竟出在哪里?

此时需要程序员的奇思幻想了,不要太相信编译器的处理逻辑。

那么问题出在哪里了,于是经过效果多次查看,经对比在mx3手机上如果(index-1)反过来等于(index+1)效果就解释通了,那么问题来了,如果我把代码改成如下:

float scale = getScaleByPoints(m_nForeGradientBeginPos, m_nForeGradientEndPos, vec2(v_texCoord[0], v_texCoord[1]));

int index = -1;
index += getIndex(0, m_nForeColorNums, scale, m_nForeScales[0]);
index += getIndex(1, m_nForeColorNums, scale, m_nForeScales[1]);
index += getIndex(2, m_nForeColorNums, scale, m_nForeScales[2]);
index += getIndex(3, m_nForeColorNums, scale, m_nForeScales[3]);
index += getIndex(4, m_nForeColorNums, scale, m_nForeScales[4]);
index += getIndex(5, m_nForeColorNums, scale, m_nForeScales[5]);
index += getIndex(6, m_nForeColorNums, scale, m_nForeScales[6]);
index += getIndex(7, m_nForeColorNums, scale, m_nForeScales[7]);
index += getIndex(8, m_nForeColorNums, scale, m_nForeScales[8]);
index += getIndex(9, m_nForeColorNums, scale, m_nForeScales[9]);

if(index < 0)
{
	outColor = m_ForeColors[0];
	return outColor;
}
float inScale = (scale - m_nForeScales[index]) / (m_nForeScales[index + 1] - m_nForeScales[index]);
outColor = mix(m_ForeColors[index], m_ForeColors[index + 1], inScale);

测试结果正常了,mx3上也没问题了,md真坑啊!

结果可显而知,在mx3手机上写shader会有以下问题。

int index = 1;
index = index - 1;

结果index的值为2。

index = index + 1;

结果index的值为2。

简不简单,惊不惊喜,意不意外,就这么一个问题谁能想到。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值