Changeset View
Changeset View
Standalone View
Standalone View
source/blender/draw/engines/eevee/shaders/cubemap_lib.glsl
| Show First 20 Lines • Show All 54 Lines • ▼ Show 20 Lines | vec3 cubemap_adj_xy(float face) | ||||
| else if (face < 4.0) { | else if (face < 4.0) { | ||||
| return vec3(1.0, 0.0, 1.0); | return vec3(1.0, 0.0, 1.0); | ||||
| } | } | ||||
| else { | else { | ||||
| return vec3(1.0, 1.0, 0.0); | return vec3(1.0, 1.0, 0.0); | ||||
| } | } | ||||
| } | } | ||||
| # ifdef GPU_METAL | |||||
| template<typename T> | |||||
| vec4 cubemap_seamless(thread _mtl_combined_image_sampler_2d_array<T, access::sample> *tex, | |||||
| vec4 cubevec, | |||||
| float lod) | |||||
| # else | |||||
| vec4 cubemap_seamless(sampler2DArray tex, vec4 cubevec, float lod) | vec4 cubemap_seamless(sampler2DArray tex, vec4 cubevec, float lod) | ||||
| # endif | |||||
| { | { | ||||
| /* Manual Cube map Layer indexing. */ | /* Manual Cube map Layer indexing. */ | ||||
| float face = cubemap_face_index(cubevec.xyz); | float face = cubemap_face_index(cubevec.xyz); | ||||
| vec2 uv = cubemap_face_coord(cubevec.xyz, face); | vec2 uv = cubemap_face_coord(cubevec.xyz, face); | ||||
| vec3 coord = vec3(uv, cubevec.w * 6.0 + face); | vec3 coord = vec3(uv, cubevec.w * 6.0 + face); | ||||
| vec4 col = textureLod(tex, coord, lod); | vec4 col = textureLod(tex, coord, lod); | ||||
| Show All 39 Lines | else if (any(border)) { | ||||
| float mix_fac = saturate(max(uv_border.x, uv_border.y) * 0.5); | float mix_fac = saturate(max(uv_border.x, uv_border.y) * 0.5); | ||||
| return mix(col, textureLod(tex, coord, lod), mix_fac); | return mix(col, textureLod(tex, coord, lod), mix_fac); | ||||
| } | } | ||||
| else { | else { | ||||
| return col; | return col; | ||||
| } | } | ||||
| } | } | ||||
| # ifdef GPU_METAL | |||||
| template<typename T, access A> | |||||
| vec4 textureLod_cubemapArray(thread _mtl_combined_image_sampler_2d_array<T, A> tex, | |||||
| vec4 cubevec, | |||||
| float lod) | |||||
| # else | |||||
| vec4 textureLod_cubemapArray(sampler2DArray tex, vec4 cubevec, float lod) | vec4 textureLod_cubemapArray(sampler2DArray tex, vec4 cubevec, float lod) | ||||
| # endif | |||||
| { | { | ||||
| float lod1 = floor(lod); | float lod1 = floor(lod); | ||||
| float lod2 = ceil(lod); | float lod2 = ceil(lod); | ||||
| vec4 col_lod1 = cubemap_seamless(tex, cubevec, lod1); | vec4 col_lod1 = cubemap_seamless(tex, cubevec, lod1); | ||||
| vec4 col_lod2 = cubemap_seamless(tex, cubevec, lod2); | vec4 col_lod2 = cubemap_seamless(tex, cubevec, lod2); | ||||
| return mix(col_lod1, col_lod2, lod - lod1); | return mix(col_lod1, col_lod2, lod - lod1); | ||||
| } | } | ||||
| #endif | #endif | ||||