fix(render): 修复白屏/黑屏——视图矩阵、UI着色器、网格构建性能与安装目录
- 相机视图矩阵按 R_cam^T·T(-pos) 正确推导(旧布局非正交,非零视角下场景塌缩为灰屏) - UI 片元着色器改为纹理×颜色(旧实现丢弃纹理 RGB,彩色纹理全白) - UI 纹理与图集 mipmap:图集补齐 2 次幂、UI 上传不生成 mipmap(NPOT 不完整纹理采样纯白) - 网格构建持一次读锁(旧实现每格邻居查询各加锁约 40 万次/区块,出生区块迟迟无网格, 玩家透过脚下的洞看到地下横截面——进游戏黑屏主因);脏区块按距离排序优先构建 - 开启背面剔除(CW 正面):区块边界面向未加载邻居的内侧面不再以暗色出现在视野里 - 出生逻辑:等区块加载后定位地表出生,相机略微俯视 - dev 截图测试:-shot 等待玩家所在 5×5 区块网格就绪再拍(48s 兜底),先测试后打包 - 安装器改为按用户安装到 LOCALAPPDATA(Program Files 无写权限导致启动即崩) - dev 截图工具独立成 devshot_gl.go
This commit is contained in:
33
cmd/client/devshot_gl.go
Normal file
33
cmd/client/devshot_gl.go
Normal file
@@ -0,0 +1,33 @@
|
||||
//go:build gl
|
||||
|
||||
// 开发测试工具:自动进游戏 + 截图(dev 测试通过后再打包)。
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"image"
|
||||
"image/png"
|
||||
"os"
|
||||
|
||||
"github.com/go-gl/gl/v3.3-core/gl"
|
||||
)
|
||||
|
||||
// saveScreenshot 从默认帧缓冲读取像素并保存为 PNG(渲染线程调用)。
|
||||
func (a *clientApp) saveScreenshot(path string) error {
|
||||
w, h := int32(a.winW), int32(a.winH)
|
||||
pix := make([]uint8, w*h*4)
|
||||
gl.ReadPixels(0, 0, w, h, gl.RGBA, gl.UNSIGNED_BYTE, gl.Ptr(pix))
|
||||
img := image.NewRGBA(image.Rect(0, 0, int(w), int(h)))
|
||||
// 垂直翻转(GL 原点在左下)
|
||||
for y := int32(0); y < h; y++ {
|
||||
srcRow := (h - 1 - y) * w * 4
|
||||
dstRow := y * w * 4
|
||||
copy(img.Pix[dstRow:dstRow+w*4], pix[srcRow:srcRow+w*4])
|
||||
}
|
||||
f, err := os.Create(path)
|
||||
if err != nil {
|
||||
return fmt.Errorf("创建截图文件: %w", err)
|
||||
}
|
||||
defer f.Close()
|
||||
return png.Encode(f, img)
|
||||
}
|
||||
Reference in New Issue
Block a user