Repository navigation
fix(ui): 修复新 ClickGUI 的键盘输入、调色板渐变与饰品滚动裁剪 - #190
Merged
Merged
Conversation
HUD 覆盖层(通知)每帧都会 EdgeUi.beginOverlay/end 一次,而它在 updateCameraAndRender 里排在 drawScreen 前面:end() 里无脑调 fallback.endFrame() 就把玩家这一帧敲的键、打的字在 ClickGUI 读到之前冲掉了。表现是绑定按钮和文本框 双双点不动,而纯鼠标的开关、滑条照常。 只有喂过 EdgeUi.keyTyped 的宿主屏幕那一帧才有资格清这份共享缓冲。
饰品缩略图是 3D 渲染,攒到 2D 通道结束之后才上屏,那时 clip 栈已经弹空, 滚动时缩略图会横穿列表边界画到面板外面。在收集回调那一刻把当前的 GL 裁剪框 抄下来,绘制时自己套上。
TargetDisplay 画完 ESP 圈、GradientUtils 画完渐变,都把 shade model 还原成 GL_FLAT, 而原版 GUI/世界渲染从不碰它,基线一直是 GL 默认的 GL_SMOOTH。FLAT 一旦留在状态里, 之后所有逐顶点着色的渐变都被拍成一块纯色:ClickGUI 调色板的 SV 方块整个变成最后一个 顶点的颜色(黑),色相条变成六段纯色,而单选色的色块不受影响——看起来就是「色板全是 同一个颜色,右边选中的颜色却是对的」。
review 出两处: - glGetInteger 要求 buffer 剩余 >=16(checkBuffer),4 会在饰品列表 开裁时直接抛异常崩渲染循环;给 16,同 vanilla 的 GLAllocation 用法。 - handleInput 先鼠标后键盘:屏幕在 handleMouseInput 里关掉后,同批 Keyboard.next() 的按键仍派发到死实例。缓冲现在只由宿主屏幕帧清, 死屏喂的键会攒到下一个 ScaledGuiScreen 打开才冒出来;不是当前屏 就不喂。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
现象
新 ClickGUI(共享 Prism 版)三个问题:
...捕获态,按键也写不进去;文本框打不进字。开关、滑条这类纯鼠标的控件却一切正常。
原因
typedChars/原始键码存在共享的EdgeUi.fallback里,而EdgeUi.end()无条件调fallback.endFrame()。HUD 覆盖层每帧都会beginOverlay/end一次,且在updateCameraAndRender里排在drawScreen前面(反编译确认:renderGameOverlay在 672、ForgeHooksClient.drawScreen在764)。于是玩家这一帧敲的键、打的字在 ClickGUI 读到之前就被冲掉了。鼠标走的是屏幕自己的
GuiInputState,所以不受影响。GL_FLAT:TargetDisplay.drawCircle的finally和GradientUtils.drawGradientVertical结尾都把 shade model 还原成GL_FLAT,而原版GUI/世界渲染从不碰它,基线一直是 GL 默认的
GL_SMOOTH。FLAT一旦留在状态里,之后所有逐顶点着色的渐变都被拍成最后一个顶点的颜色:SV
方块整个变黑,色相条变成六段纯色。单选色的色块(右侧圆点)不受 shade model 影响,所以它一直是对的。
已经失效;列表滚动时卡片被裁掉一半,缩略图却照画不误。
修复
EdgeUi增加screenFrame标志,只有宿主屏幕(ScaledGuiScreen)那一帧才有资格清共享键鼠缓冲;覆盖层begin/end 不再动它。
GL_SMOOTH(原版基线)。CosmeticsScreen在收集回调(paintItemPreview)那一刻抄下当前的 GL 裁剪框,绘制缩略图时自己glScissor套上,画完还原