jsr184 real-time shadow test..

本文记录了作者在游戏开发中优化阴影渲染的过程,包括调整光源方向、修复代码错误等,并分享了在索爱Z530C上的性能统计数据。

加了个shadow....
不过细节还有问题.............
光源的方向等等



---------------------------------------------------------------------------------------------------------
下午用TK的shadow代码搞了一下, 可就似乎不对, 索性继续优化 上午采用的那套代码, 突然发现自己某个重要的地方搞错了, 汗...修改过来之后, 尝试了很多light的位置, 终于看上去可以接受了
还是放图吧!




 

---------------------------------------------------------------------------------

在索爱Z530C上跑了下, 统计了下时间

g3d.clear(background); // 6ms

drawTerrain: 60~80ms --> to render 30~40 meshes, each mesh is a Quad with textures..

drawShadow: 8~10ms -- the same model without texture&material
drawReadModel: 18~22ms

gamelogic update: 2~6ms

🎯 **确认了!问题根源找到了:** > ❌ 缺失关键 JAR 文件:`jsr311-api-*.jar` 这个文件是 JAX-RS 1.1 规范的 API 定义包,包含了 `javax.ws.rs.*` 接口和 SPI(Service Provider Interface)机制所需的核心内容。 特别是: ``` META-INF/services/javax.ws.rs.ext.RuntimeDelegate ``` 👉 它告诉 JVM:“当我调用 `RuntimeDelegate.getInstance()` 时,请使用 `com.sun.ws.rs.ext.RuntimeDelegateImpl` 实现”。 没有它 → Jersey 初始化失败 → 所有依赖 REST 的插件无法加载 → 类加载器创建失败 → `pluginClassLoader == null` → `NullPointerException` at `PluginManager.java:582` --- ## ✅ 解决方案:手动安装 `jsr311-api-1.1.1.jar` ### 步骤 1:下载 `jsr311-api-1.1.1.jar` 你可以从以下任一方式获取: #### ✅ 方法一:从 Maven 中央仓库下载(推荐) ```bash cd /opt/openfire/lib # 下载 jsr311-api-1.1.1.jar wget https://repo1.maven.org/maven2/javax/ws/rs/jsr311-api/1.1.1/jsr311-api-1.1.1.jar ``` #### ✅ 方法二:从 Openfire 官方发行包提取 ```bash cd /tmp wget https://www.igniterealtime.org/projects/openfire/releases/openfire_4_9_2.tar.gz tar -xzf openfire_4_9_2.tar.gz cp openfire/lib/jsr311-api-1.1.1.jar /opt/openfire/lib/ ``` --- ### 步骤 2:验证文件完整性 ```bash ls -l /opt/openfire/lib/jsr311-api-1.1.1.jar ``` 输出应类似: ```bash -rw-r--r-- 1 root root 11234 Jan 1 00:00 /opt/openfire/lib/jsr311-api-1.1.1.jar ``` --- ### 步骤 3:检查 SPI 文件是否存在 ```bash jar -tf /opt/openfire/lib/jsr311-api-1.1.1.jar | grep "RuntimeDelegate" ``` ✅ 正确输出: ``` META-INF/services/javax.ws.rs.ext.RuntimeDelegate ``` 查看其内容: ```bash mkdir /tmp/jsr311 && cd /tmp/jsr311 jar -xf /opt/openfire/lib/jsr311-api-1.1.1.jar META-INF/services/javax.ws.rs.ext.RuntimeDelegate cat META-INF/services/javax.ws.rs.ext.RuntimeDelegate ``` ✅ 应该输出: ``` com.sun.ws.rs.ext.RuntimeDelegateImpl ``` --- ### 步骤 4:重启 Openfire ```bash systemctl restart openfire ``` --- ### 步骤 5:观察日志是否成功加载插件 ```bash tail -f /opt/openfire/logs/openfire.log ``` 你应该会看到: ``` INFO ... Successfully loaded plugin 'restapi-plugin' ``` 并且不再出现: - `ClassNotFoundException: com.sun.ws.rs.ext.RuntimeDelegateImpl` - `NullPointerException at PluginManager.java:582` --- ## 🛠️ 补充建议:确保其他 Jersey 相关 JAR 存在 运行以下命令检查必要依赖: ```bash ls -l /opt/openfire/lib/*jersey* | grep -E "(core|server|servlet)" ``` 你需要至少有: | 文件名 | 说明 | |--------|------| | `jersey-core-1.19.jar` | Jersey 核心库 | | `jersey-server-1.19.jar` | 支持 @Path, @GET 等注解 | | `jersey-servlet-1.19.jar` | Servlet 集成 | | `jsr311-api-1.1.1.jar` | ✅ 刚才我们补上的 | 如果缺少这些,请从 Openfire 发行包中一并补全。 --- ## 📦 示例:完整依赖列表(Openfire 4.9.2) ```bash /opt/openfire/lib/jsr311-api-1.1.1.jar /opt/openfire/lib/jersey-core-1.19.jar /opt/openfire/lib/jersey-server-1.19.jar /opt/openfire/lib/jersey-servlet-1.19.jar /opt/openfire/lib/jersey-json-1.19.jar # 可选,用于 JSON 支持 ``` --- ## ✅ 总结 | 问题 | 解决方案 | |------|----------| | `ClassNotFoundException: com.sun.ws.rs.ext.RuntimeDelegateImpl` | 缺少 `jsr311-api-1.1.1.jar` | | Jersey 初始化失败 | 补上 SPI 配置文件 | | REST 插件无法加载 | 修复底层依赖链 | | `NullPointerException` at `PluginManager.java:582` | 实际是类加载器初始化失败的“症状”,不是“病因” | --- 🎯 **你现在要做的就是一句话:** ```bash cd /opt/openfire/lib && wget https://repo1.maven.org/maven2/javax/ws/rs/jsr311-api/1.1.1/jsr311-api-1.1.1.jar systemctl restart openfire ``` 然后看日志 —— 我打赌你的 `restapi-plugin` 能成功加载! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值