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:
@@ -146,14 +146,15 @@ func textrWidth(at *font.Atlas, s string) int {
|
||||
}
|
||||
|
||||
// UploadImage 上传图像为纹理并返回 ID(物品图标/长文本用)。
|
||||
// 注意:UI 纹理按 1:1 像素风绘制,不使用 mipmap——
|
||||
// 非 2 次幂纹理 GenerateMipmap 在部分驱动上失败会导致纹理不完整、采样为纯白(白屏根因)。
|
||||
func (r *Renderer) UploadImage(img image.Image) uint32 {
|
||||
var tex uint32
|
||||
gl.GenTextures(1, &tex)
|
||||
gl.BindTexture(gl.TEXTURE_2D, tex)
|
||||
b := img.Bounds()
|
||||
gl.TexImage2D(gl.TEXTURE_2D, 0, gl.RGBA8, int32(b.Dx()), int32(b.Dy()), 0, gl.RGBA, gl.UNSIGNED_BYTE, gl.Ptr(imageBytesUI(img)))
|
||||
gl.GenerateMipmap(gl.TEXTURE_2D)
|
||||
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST_MIPMAP_LINEAR)
|
||||
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST)
|
||||
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST)
|
||||
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE)
|
||||
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE)
|
||||
@@ -274,7 +275,8 @@ void main() {
|
||||
}
|
||||
`
|
||||
|
||||
// uiFragSrc UI 片元着色器(纹理 × 颜色,alpha 混合)。
|
||||
// uiFragSrc UI 片元着色器:纹理色 × 颜色 tint(alpha 混合)。
|
||||
// 注意:必须输出纹理 RGB——否则彩色纹理(按钮/背景)会被丢弃成纯白(白屏根因)。
|
||||
const uiFragSrc = `
|
||||
#version 330 core
|
||||
in vec2 vUV;
|
||||
@@ -283,7 +285,7 @@ uniform sampler2D uTex;
|
||||
out vec4 fragColor;
|
||||
void main() {
|
||||
vec4 t = texture(uTex, vUV);
|
||||
fragColor = vec4(vColor.rgb, vColor.a) * vec4(1.0, 1.0, 1.0, t.a);
|
||||
fragColor = t * vColor;
|
||||
}
|
||||
`
|
||||
|
||||
|
||||
Reference in New Issue
Block a user