CCEGLViewProtocol类中,把代码改了部分验证了下GLView全屏拉伸来铺满整个Opengl的视口。
void CCEGLViewProtocol::setViewPortInPoints(float x , float y , float w , float h)
{
if (m_eResolutionPolicy == kResolutionShowAll)
{
glViewport((GLint)(0),
(GLint)(0),
(GLsizei)(w * m_fOldScaleX),
(GLsizei)(h * m_fOldScaleY));//m_fOldScaleX和m_fOldScaleY是winSize和frameSize的对应长宽比例,计算后就等于framesize,即屏幕的实际分辨率
}else
{
glViewport((GLint)(x * m_fScaleX + m_obViewPortRect.origin.x),
(GLint)(y * m_fScaleY + m_obViewPortRect.origin.y),
(GLsizei)(w * m_fScaleX),
(GLsizei)(h * m_fScaleY));
}
}
原来的函数中仅else部分代码。改了后。在showAll的模式下,我直接把视口设置成framesize的大小,起点为(0,0)(就是屏幕的左下角)。也就是现在视口大小正好是屏幕的大小。
因为是showAll的模式,在setDesignResolutionSize这个函数里最终有这个 m_fScaleX = m_fScaleY = MIN(m_fScaleX, m_fScaleY);也就是按原来的猜想,如果在绘制的时候单独缩放每个精灵,或者最后缩放GLView 都应该使用这个缩放值(即MIN(m_fScaleX, m_fScaleY))。
可是运行结果,背景图占满了整个屏幕,并且被拉伸了。所以我觉得MIN(m_fScaleX, m_fScaleY)得到的缩放值 并没有用于缩放精灵或者说缩放GLView。有缩放的效果 仅仅因为是把GLView平铺在视口中,而这个视口是按等比例来算的。所以铺出来不会变形。
其实代码这么改了后设置视口就和kResolutionExactFit这个适配模式一样 设置为屏幕实际分辨率的大小,仅仅因为是ShowAll多计算了一个缩放比,可这个缩放比除了用在计算视口 并没有用在其他地方。
现在基本确定是GLView平铺在视口中来缩放的。不知道这么说对不。
如果有大神来解释下这个GLView拉伸平铺在视口中的过程就好了。。。Opengl了解的不是很多。希望有大牛指点指点。。。