/
redgpu
/
ezEngine
Обзор
Документация
Войти
/
redgpu
/
ezEngine
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
dev
Data/Base/Shaders/Editor/TexturePreview.ezShader
109 строк
2 KB
Jan Krassnigg
Added support for 2D array textures (#1905)
15 апр 2026, 13:03
Не верифицирован
15 апр 2026, 13:03
a17042f
Код
Авторство
О чём код?
[PLATFORMS] ALL [PERMUTATIONS] CAMERA_MODE = CAMERA_MODE_PERSPECTIVE [MATERIALPARAMETER] int ShowChannelMode; float AlphaThreshold; float LodLevel; bool IsLinear; int ArrayIndex; [RENDERSTATE] CullMode = CullMode_None [SHADER] #define USE_TEXCOORD0 #define USE_WORLDPOS [MATERIALCONSTANTS] INT1(ShowChannelMode); FLOAT1(AlphaThreshold); FLOAT1(LodLevel); BOOL1(IsLinear); INT1(ArrayIndex); [VERTEXSHADER] #include <Shaders/Materials/MaterialVertexShader.h> VS_OUT main(VS_IN Input) { return FillVertexData(Input); } [PIXELSHADER] #include <Shaders/Materials/MaterialInterpolator.h> Texture2DArray BaseTexture BIND_GROUP(BG_MATERIAL); SamplerState BaseTexture_AutoSampler BIND_GROUP(BG_MATERIAL); float4 SampleTexture(PS_IN Input) { float3 uvw = float3(Input.TexCoord0.xy, (float)GetMaterialData(ArrayIndex)); if (GetMaterialData(LodLevel) < 0) return BaseTexture.Sample(BaseTexture_AutoSampler, uvw); return BaseTexture.SampleLevel(BaseTexture_AutoSampler, uvw, GetMaterialData(LodLevel)); } float4 main(PS_IN Input) : SV_Target { float3 color = float3(1, 1, 1); float4 texel = SampleTexture(Input).rgba; if (GetMaterialData(ShowChannelMode) == 0) { float3 background[2]; background[0] = float3(0.66, 0.66, 0.66); background[1] = float3(0.82, 0.82, 0.82); int bgIdx = (int) (floor(Input.TexCoord0.x * 16.0) + floor(Input.TexCoord0.y * 16.0)) & 1; color = lerp(background[bgIdx], texel.rgb, texel.a); } else if (GetMaterialData(ShowChannelMode) == 1) { color = texel.rgb; } else if (GetMaterialData(ShowChannelMode) == 2) { color = texel.r; } else if (GetMaterialData(ShowChannelMode) == 3) { color = texel.g; } else if (GetMaterialData(ShowChannelMode) == 4) { color = texel.b; } else if (GetMaterialData(ShowChannelMode) == 5) { color = SrgbToLinear(texel.a); // alpha is always linear } else if (GetMaterialData(ShowChannelMode) == 6) { color = texel.r >= GetMaterialData(AlphaThreshold); } else if (GetMaterialData(ShowChannelMode) == 7) { color = texel.a >= GetMaterialData(AlphaThreshold); } if (GetMaterialData(IsLinear) && GetMaterialData(ShowChannelMode) < 5) { color = SrgbToLinear(color); } return float4(color, 1); }