• Overview
  • How to run
  • 改动点
    • Director
    • Renderer
  • Shader 及 Program
    • Texture2D
  • TO be continue…

    Overview

    在 WWDC 2014 上,Apple 为游戏开发者推出了新的图形技术 Metal。Metal 是一种用 C++ 编写的 low-level API。 它代表了 Apple 最新的图形 API 设计。与 OpenGL 不同的是,Metal 不像 OpenGL 那样是跨平台的,它是根据 Apple 最新硬件架构专门设计的 API,因此它能够为 3D 图形提高最多10倍的渲染性能。由于 Apple 声称将弃用 OpenGL,为此 V4 对 Renderer 做了适配,对于 Apple 平台,使用 Metal api 进行渲染,否则,沿用原 OpenGL ES API 渲染。

    How to run

    • mac: use cocos command or CMake
    • iOS: use CMake to generate Xcode project, then run
    • Android: use cocos command or Android Studio
    • windows: use cocos command or CMake
    • linux: use cocos command or CMakeCMake的使用教程可以参考CMake 指南。

    改动点

    更详细的接口变化,请参考API 改动。

    Director

    • 移除了以下接口
    1. CC_DEPRECATED_ATTRIBUTE static Director* sharedDirector();
    2. void setAlphaBlending(bool on);
    3. void setDepthTest(bool on);
    4. void pushProjectionMatrix(size_t index);
    5. void popProjectionMatrix(size_t index);
    6. void loadProjectionIdentityMatrix(size_t index);
    7. void loadProjectionMatrix(const Mat4& mat, size_t index);
    8. void multiplyProjectionMatrix(const Mat4& mat, size_t index);
    9. const Mat4& getProjectionMatrix(size_t index) const;
    10. void initProjectionMatrixStack(size_t stackCount);
    11. size_t getProjectionMatrixStackSize();
    • 移除了 void setDepthTest(bool on) 接口,通过 Director::getInstance()->getRenderer()->setDepthTest(true) 设置。

    Renderer

    在 Renderer 下添加了 backend 层,其中与 Metal 相关的适配文件统统放在了 metal 文件夹下,与 OpenGL ES 渲染相关的文件都放在 opengl 文件夹。原则上,除了 metal 和 opengl 这两个文件夹下的源码之外,不允许直接使用任何平台下的图形 API。

    1. renderer
    2. CCxxx.h
    3. CCxxx.cpp
    4. | ...
    5. └───backend
    6. file011.h
    7. file011.cpp
    8. ...
    9. └───metal
    10. filexxxMTL.h
    11. filexxxMTL.mm
    12. ...
    13. └───opengl
    14. filexxxGL.h
    15. filexxxGL.cpp
    16. ...
    17. └───shaders
    18. xxx.vert
    19. xxx.frag
    20. ...
    21. CMakeLists.txt

    Shader 及 Program

    移除了 GLProgramState 和 GLProgram,新增了 backend::ProgramState。范例1,范例2 演示了如何创建和使用 backend::ProgramState。

    Metal 使用 MSL 作为 shader 开发语言。为了支持 OpenGL ES shader 运行在 Metal 框架上,V4 采用 glsl-optimizer 将 OpenGL ES shader 转换成 Metal MSL shader。

    V4 将原来存放在 renderer/路径下以 "ccShader" 开头的 shader 文件移到 renderer/shaders/ 路径下,除了将shader 文件名稍作修改外(删除了ccShader),在 shader 文件中显式声明 uniform 和 texture,不在使用 GLProgram 中预定义的 attribute,uniform 及 texutre 名。

    Texture2D

    • 移除 Texture2D::PixelFormat,统一使用 Types.h 下的 backend::PixelFormat

    • 移除源码中使用 OpenGL ES API 情况。

    • 移除了 convertXXX,统一使用 CCTextureUtils.h 下的 convertXXX 接口。

    • 移除了以下接口

    1. CC_DEPRECATED_ATTRIBUTE const char* stringForFormat() const;
    2. CC_DEPRECATED_ATTRIBUTE unsigned int bitsPerPixelForFormat() const;
    3. CC_DEPRECATED_ATTRIBUTE unsigned int bitsPerPixelForFormat(Texture2D::PixelFormat format) const;
    4. GLuint getName() const;
    5. void setGLProgram(GLProgram* program);
    6. GLProgram* getGLProgram() const;
    • 新增了如下接口,用于设置 render texture。
    1. bool initWithBackendTexture(backend::TextureBackend* texture);
    2. void setRenderTarget(bool renderTarget);
    3. inline bool isRenderTarget() const;
    • 移除了 opengl texture object(GLuint _name ),改用 backend::Texture2DBackend* _texture 作为纹理对象。

    TO be continue…