【cocos creator】platform平台对应代码 2.x / 3.x

cocos creator获取当前平台信息,2.4版本使用cc.sys.dump()可以打印所有平台信息:

cc.sys.dump();

打印结果:

isMobile : false
language : zh
browserType : chrome
browserVersion : 92.0.4515.159
capabilities : {"canvas":true,"opengl":true,"webp":true,"imageBitmap":true,"mouse":true,"keyboard":true,"accelerometer":true}
os : Windows
osVersion : 
platform : 101
Using WEBGL renderer.

参考:cocos论坛问答

对应“platform”参数的代码:101代表是什么,翻查资料:

let platformArr = {
    "WIN32": 0,
    "LINUX": 1,
    "MACOS": 2,
    "android": 3,
    "IPHONE": 4,
    "IPAD": 5,
    "BLACKBERRY": 6,
    "NACL": 7,
    "EMSCRIPTEN": 8,
    "TIZEN": 9,
    "WINRT": 10,
    "WP8": 11,

    "MOBILE_BROWSER": 100,
    "DESKTOP_BROWSER": 101,
    "EDITOR_PAGE": 102,
    "EDITOR_CORE": 103,
    "WECHAT_GAME": 104,
    "QQ_PLAY": 105,
    "FB_PLAYABLE_ADS": 106,
    "BAIDU_GAME": 107,
    "VIVO_GAME": 108,
    "OPPO_GAME": 109,
    "HUAWEI_GAME": 110,
    "XIAOMI_GAME": 111,
    "WECHAT_OPEN_DATA": 114,
}

以及3.x也可以用的接口:

        console.log("clic>>>>>>>>>>>>>>>>>>>>>", sys.os, sys.dump())
        //安卓
        if (sys.os == sys.OS.ANDROID) {
        }
        //ios
        else if (sys.os == sys.OS.IOS) {
        }

<think>好的,用户现在遇到了Cocos Creator 3.8.5中BloomEffect着色器的两个编译错误:EFX2403(找不到&#39;vert&#39;入口函数)和EFX2401(精度声明缺失)。我需要结合之前的回答和用户提供的新信息来给出解决方案。 首先,回顾之前的解决方案,用户已经知道EFX2401是由于顶点着色器缺少精度声明。现在又多了EFX2403,即找不到&#39;vert&#39;入口函数。这可能是因为顶点着色器中主函数没有正确命名为vert,或者入口函数配置错误。 接下来,我需要确认Cocos Creator的着色器结构。在用户提供的代码中,顶点着色器CCProgram bloom-vs的主函数是void main(),而Cocos可能默认使用vert作为入口函数。因此,需要将主函数名改为vert。 另外,用户之前已经添加了precision highp float;,但可能位置不正确,或者片段着色器也存在同样的问题。需要检查两个着色器的精度声明是否正确放置。 此外,检查CCEffect中的pass配置,确保顶点着色器指定的是bloom-vs,并且入口函数正确。如果入口函数名称不匹配,就会导致EFX2403错误。 用户可能还忽略了片段着色器的精度声明,虽然问题出现在顶点着色器,但需要确保两者都正确。同时,检查是否有拼写错误或语法错误,比如分号缺失、变量名错误等。 最后,建议用户清除缓存并重新编译,确保所有修改生效。如果还有其他依赖问题,比如模块缺失,可能需要安装相关依赖,但根据当前问题,主要关注着色器代码本身。</think>在Cocos Creator 3.8.5中解决BloomEffect着色器的`EFX2403 entry function &#39;vert&#39; not found`和`EFX2401 precision declaration missing`错误,需要从GLSL语法规则和Cocos引擎特性两方面处理。以下是结构化解决方案: --- ### **问题根源分析** 1. **EFX2403** 顶点着色器未按规范定义入口函数`vert()`,而错误地使用`main()`作为入口函数 ```glsl // 错误写法 void main() { ... } // Cocos要求顶点着色器入口函数必须命名为vert ``` [^1] 2. **EFX2401** 未在着色器开头声明默认浮点精度(违反GLSL ES 3.0规范) --- ### **完整修复步骤** #### **1. 修正顶点着色器入口函数** 修改`CCProgram bloom-vs`代码: ```glsl CCProgram bloom-vs %{ precision highp float; // 必须放在第一行 #include <builtin/uniforms/cc-global> in vec3 a_position; in vec2 a_texCoord; out vec2 uv0; // 关键修改:将main()重命名为vert() void vert() { // 原错误代码使用void main() vec4 pos = cc_matViewProj * vec4(a_position, 1.0); gl_Position = pos; uv0 = a_texCoord; } }% ``` #### **2. 同步修正片段着色器** ```glsl CCProgram bloom-fs %{ precision highp float; // 添加精度声明 #include <builtin/internal/alpha-test> // 原代码保持不变... void frag() { // 注意:片段着色器入口函数仍为frag() // 着色逻辑 } }% ``` #### **3. 验证CCEffect配置** 确保pass定义正确关联着色器: ```yaml passes: - vert: bloom-vs # 对应CCProgram名称 frag: bloom-fs # 对应CCProgram名称 # 其他参数保持不变... ``` --- ### **技术原理说明** 1. **入口函数命名规则** Cocos Creator的渲染管线要求: - 顶点着色器入口函数必须命名为`vert()` - 片段着色器入口函数必须命名为`frag()` (参考Cocos官方着色器规范[^1]) 2. **精度声明必要性** GLSL ES 3.0强制要求: ```glsl precision qualifier type; // 如:precision highp float; ``` - `highp`:高精度(桌面端推荐) - `mediump`:中等精度(移动端推荐) - `lowp`:低精度(颜色计算可用) --- ### **验证流程** 1. **清除编译器缓存** ```bash rm -rf ./library ./temp ./build ``` 2. **强制重新编译** 在Cocos Creator编辑器中执行: - 菜单栏 -> 项目 -> 刷新项目 (Ctrl/Cmd + R) - 菜单栏 -> 面板 -> 控制台 -> 点击"清除日志" --- ### **扩展优化建议** 1. **统一精度管理方案** 创建`common.chunk`文件: ```glsl #define CC_USE_HIGHP_FLOAT 1 // 根据平台动态切换 #if CC_USE_HIGHP_FLOAT precision highp float; #else precision mediump float; #endif ``` 在着色器中引入: ```glsl #include <common.chunk> ``` 2. **跨平台兼容性处理** 在`effect`文件添加特性标记: ```yaml techniques: - name: opaque passes: - vert: bloom-vs frag: bloom-fs embeddedMacros: CC_PLATFORM_MOBILE: true # 自动切换移动端配置 # 其他参数... ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值