70 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			GLSL
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			GLSL
		
	
	
	
	
	
| #version 450
 | |
| #extension GL_ARB_sparse_texture_clamp: enable
 | |
| 
 | |
| uniform sampler2D               s2D;
 | |
| uniform sampler3D               s3D;
 | |
| uniform sampler2DShadow         s2DShadow;
 | |
| uniform samplerCubeShadow       sCubeShadow;
 | |
| uniform sampler2DArrayShadow    s2DArrayShadow;
 | |
| uniform sampler2DRectShadow     s2DRectShadow;
 | |
| uniform samplerCubeArrayShadow  sCubeArrayShadow;
 | |
| 
 | |
| uniform isamplerCube            isCube;
 | |
| uniform isampler2DArray         is2DArray;
 | |
| 
 | |
| uniform usamplerCubeArray       usCubeArray;
 | |
| uniform usampler2DRect          us2DRect;
 | |
| 
 | |
| in vec2 c2;
 | |
| in vec3 c3;
 | |
| in vec4 c4;
 | |
| 
 | |
| in float lodClamp;
 | |
| 
 | |
| out vec4 outColor;
 | |
| 
 | |
| void main()
 | |
| {
 | |
|     int   resident = 0;
 | |
|     vec4  texel  = vec4(0.0);
 | |
|     ivec4 itexel = ivec4(0);
 | |
|     uvec4 utexel = uvec4(0);
 | |
| 
 | |
|     resident |= sparseTextureClampARB(s2D, c2, lodClamp, texel);
 | |
|     resident |= sparseTextureClampARB(s3D, c3, lodClamp, texel, 2.0);
 | |
|     resident |= sparseTextureClampARB(isCube, c3, lodClamp, itexel);
 | |
|     resident |= sparseTextureClampARB(s2DShadow, c3, lodClamp, texel.x);
 | |
|     resident |= sparseTextureClampARB(sCubeArrayShadow, c4, 1.0, lodClamp, texel.x);
 | |
| 
 | |
|     texel   += textureClampARB(s2D, c2, lodClamp);
 | |
|     texel   += textureClampARB(s3D, c3, lodClamp, 2.0);
 | |
|     itexel  += textureClampARB(isCube, c3, lodClamp);
 | |
|     texel.x += textureClampARB(s2DShadow, c3, lodClamp);
 | |
|     texel.x += textureClampARB(sCubeArrayShadow, c4, 1.0, lodClamp);
 | |
| 
 | |
|     resident |= sparseTextureOffsetClampARB(s3D, c3, ivec3(2), lodClamp, texel, 2.0);
 | |
|     resident |= sparseTextureOffsetClampARB(us2DRect, c2, ivec2(3), lodClamp, utexel);
 | |
|     resident |= sparseTextureOffsetClampARB(s2DArrayShadow, c4, ivec2(5), lodClamp, texel.z);
 | |
| 
 | |
|     texel   += textureOffsetClampARB(s3D, c3, ivec3(2), lodClamp, 2.0);
 | |
|     utexel  += textureOffsetClampARB(us2DRect, c2, ivec2(3), lodClamp);
 | |
|     texel.z += textureOffsetClampARB(s2DArrayShadow, c4, ivec2(5), lodClamp);
 | |
| 
 | |
|     resident |= sparseTextureGradClampARB(s3D, c3, c3, c3, lodClamp, texel);
 | |
|     resident |= sparseTextureGradClampARB(sCubeShadow, c4, c3, c3, lodClamp, texel.y);
 | |
|     resident |= sparseTextureGradClampARB(usCubeArray, c4, c3, c3, lodClamp, utexel);
 | |
| 
 | |
|     texel   += textureGradClampARB(s3D, c3, c3, c3, lodClamp);
 | |
|     texel.y += textureGradClampARB(sCubeShadow, c4, c3, c3, lodClamp);
 | |
|     utexel  += textureGradClampARB(usCubeArray, c4, c3, c3, lodClamp);
 | |
| 
 | |
|     resident |= sparseTextureGradOffsetClampARB(s2D, c2, c2, c2, ivec2(5), lodClamp, texel);
 | |
|     resident |= sparseTextureGradOffsetClampARB(s2DRectShadow, c3, c2, c2, ivec2(6), lodClamp, texel.w);
 | |
|     resident |= sparseTextureGradOffsetClampARB(is2DArray, c3, c2, c2, ivec2(2), lodClamp, itexel);
 | |
| 
 | |
|     texel   += textureGradOffsetClampARB(s2D, c2, c2, c2, ivec2(5), lodClamp);
 | |
|     texel.w += textureGradOffsetClampARB(s2DRectShadow, c3, c2, c2, ivec2(6), lodClamp);
 | |
|     itexel  += textureGradOffsetClampARB(is2DArray, c3, c2, c2, ivec2(2), lodClamp);
 | |
| 
 | |
|     outColor = sparseTexelsResidentARB(resident) ? texel : vec4(itexel) + vec4(utexel);
 | |
| } | 
