关于一个cocos3.x的优化

在cocos3.x版本

void Director::pushMatrix(MATRIX_STACK_TYPE type)和void Director::popMatrix(MATRIX_STACK_TYPE type)显得多余

修改如下:

void Director::popMatrix(MATRIX_STACK_TYPE type)
{
 return;
    //if(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW == type)
    //{
    //    _modelViewMatrixStack.pop();
    //}
    //else if(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION == type)
    //{
    //    _projectionMatrixStack.pop();
    //}
    //else if(MATRIX_STACK_TYPE::MATRIX_STACK_TEXTURE == type)
    //{
    //    _textureMatrixStack.pop();
    //}
    //else
    //{
    //    CCASSERT(false, "unknow matrix stack type");
    //}
}


void Director::pushMatrix(MATRIX_STACK_TYPE type)
{
 return;
    //if(type == MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW)
    //{
    //    _modelViewMatrixStack.push(_modelViewMatrixStack.top());
    //}
    //else if(type == MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION)
    //{
    //    _projectionMatrixStack.push(_projectionMatrixStack.top());
    //}
    //else if(type == MATRIX_STACK_TYPE::MATRIX_STACK_TEXTURE)
    //{
    //    _textureMatrixStack.push(_textureMatrixStack.top());
    //}
    //else
    //{
    //    CCASSERT(false, "unknow matrix stack type");
    //}
}

在Camera.h

添加受保护变量mutable bool _viewDirty;

并初始化, _viewDirty(true)

修改const Mat4& Camera::getViewMatrix() const

const Mat4& Camera::getViewMatrix() const
{
 /*Mat4 viewInv(getNodeToWorldTransform());
 static int count = sizeof(float) * 16;
 if (memcmp(viewInv.m, _viewInv.m, count) != 0)
 {
  _viewProjectionDirty = true;
  _frustumDirty = true;
  _viewInv = viewInv;
  _view = viewInv.getInversed();
 }
 return _view;*/
 if (_viewDirty)
 {
  Mat4 viewInv(getNodeToWorldTransform());
  static int count = sizeof(float) * 16;
  if (memcmp(viewInv.m, _viewInv.m, count) != 0)
  {
   _viewProjectionDirty = true;
   _frustumDirty = true;
   _viewInv = viewInv;
   _view = viewInv.getInversed();
  }
  _viewDirty = false;
 }
 return _view;

}

并在void Camera::lookAt(const Vec3& lookAtPos, const Vec3& up)和void Camera::setAdditionalProjection(const Mat4& mat) 和

bool Camera::initPerspective(float fieldOfView, float aspectRatio, float nearPlane, float farPlane)和

bool Camera::initOrthographic(float zoomX, float zoomY, float nearPlane, float farPlane)函数下均添加以下语句

_viewDirty = true;


此优化可减少降帧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值