FWGS / xash3d-fwgs

Xash3D FWGS engine.
1.47k stars 224 forks source link

[Android] [VBO] [GL4ES] Чёрный фон вместо прозрачного отображается на текстурах #1620

Open Vladislav4KZ opened 5 months ago

Vladislav4KZ commented 5 months ago

Screenshot_20240221_222257_Xash3D FWGS (Test).png

С выключенным VBO на GL4ES, прозрачный фон на текстурах работает.

Проверял на: Xash3D FWGS v49/0.20 Номер сборки: 3248 Тип сборки: android-arm64 Коммит: https://github.com/FWGS/xash3d-fwgs/commit/119926805fe2cd7d2a92454bf577717376cb2624 Ветка: master

Устройство: Samsung Galaxy A52 (SM-A525F) ОС: Android 13 (OneUI 5.1)

mittorn commented 5 months ago

Попробуй отключить овербрайты. Не знаю пока как это связано, но на ребейзнутом new-dlights2 (я пока только на него ориентируюсь) проблема с выключеннымии овербрайтами не проявляется

mittorn commented 5 months ago

gl4es сгенерировал такой фрагментный шейдер при включённом овербрайте. Альфа берётся из второго сэмплера (лайтмапы)

Наиболее вероятно, что это баг не движка, а реализации в gl4es

version 100

precision mediump float; precision mediump int; // FPE_Shader generated varying vec4 Color; varying vec4 _gl4es_TexCoord_0; uniform sampler2D _gl4es_TexSampler_0; varying vec4 _gl4es_TexCoord_1; uniform sampler2D _gl4es_TexSampler_1; uniform float _gl4es_TexEnvRGBScale_1; void main() { vec4 fColor = Color; vec4 texColor0 = texture2DProj(_gl4es_TexSampler_0, _gl4es_TexCoord_0); vec4 texColor1 = texture2DProj(_gl4es_TexSampler_1, _gl4es_TexCoord_1); vec4 Arg0, Arg1, Arg2; fColor = texColor0; Arg0.rgb = fColor.rgb; Arg0.a = texColor1.a; Arg1.rgb = texColor1.rgb; fColor.rgb = Arg0.rgb Arg1.rgb; fColor.a = Arg0.a; fColor.rgb = _gl4es_TexEnvRGBScale_1; fColor = clamp(fColor, 0., 1.); gl_FragColor = fColor; }

mittorn commented 5 months ago

Для сравнения, с выключенными овербрайтами. Здесь берётся альфа от сэмплера текстуры

version 100

precision mediump float; precision mediump int; // FPE_Shader generated varying vec4 Color; varying vec4 _gl4es_TexCoord_0; uniform sampler2D _gl4es_TexSampler_0; varying vec4 _gl4es_TexCoord_1; uniform sampler2D _gl4es_TexSampler_1; void main() { vec4 fColor = Color; vec4 texColor0 = texture2DProj(_gl4es_TexSampler_0, _gl4es_TexCoord_0); vec4 texColor1 = texture2DProj(_gl4es_TexSampler_1, _gl4es_TexCoord_1); fColor = texColor0; fColor.rgb *= texColor1.rgb; gl_FragColor = fColor;

}

mittorn commented 5 months ago

https://github.com/FWGS/xash3d-fwgs/commit/63330b295f5c38f990c55fc5e6020b3654ba951b

Не знаю как это починить со стороны gl4es, он берёт текущий tmu как источник для альфы, что вроде бы правильно, но если сделать так - то вместо свизла будет перемножаться вся текстура, что в принципе корректно пока нет альфы в лайтмапе