123 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			GLSL
		
	
	
	
	
	
			
		
		
	
	
			123 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			GLSL
		
	
	
	
	
	
| #version 450
 | |
| 
 | |
| #extension GL_NV_shader_texture_footprint : require
 | |
| 
 | |
| 
 | |
| layout (location = 0) in vec2 P2;
 | |
| layout (location = 2) in vec3 P3;
 | |
| layout (location = 3) in flat int granularity;
 | |
| layout (location = 4) in float lodClamp;
 | |
| layout (location = 5) in float lod;
 | |
| layout (location = 6) in vec2 dx;
 | |
| layout (location = 8) in vec2 dy;
 | |
| layout (location = 9) in float bias;
 | |
| 
 | |
| uniform sampler2D sample2D;
 | |
| uniform sampler3D sample3D;
 | |
| 
 | |
| buffer result2D {
 | |
|     bool ret2D;
 | |
|     uvec2 anchor2D;
 | |
|     uvec2 offset2D;
 | |
|     uvec2 mask2D;
 | |
|     uint lod2D;
 | |
|     uint granularity2D;
 | |
| };
 | |
| 
 | |
| buffer result3D {
 | |
|     bool ret3D;
 | |
|     uvec3 anchor3D;
 | |
|     uvec3 offset3D;
 | |
|     uvec2 mask3D;
 | |
|     uint lod3D;
 | |
|     uint granularity3D;
 | |
| };
 | |
| 
 | |
| void main() {
 | |
|  gl_TextureFootprint2DNV fp2D;
 | |
|  gl_TextureFootprint3DNV fp3D;
 | |
|  
 | |
|  ret2D = textureFootprintNV(sample2D, P2, granularity, true, fp2D);
 | |
|  anchor2D = fp2D.anchor;
 | |
|  offset2D = fp2D.offset;
 | |
|  mask2D = fp2D.mask;
 | |
|  lod2D = fp2D.lod;
 | |
|  granularity2D = fp2D.granularity;
 | |
|  
 | |
|  ret2D = textureFootprintNV(sample2D, P2, granularity, true, fp2D, bias);
 | |
|  anchor2D += fp2D.anchor;
 | |
|  offset2D += fp2D.offset;
 | |
|  mask2D += fp2D.mask;
 | |
|  lod2D += fp2D.lod;
 | |
|  granularity2D += fp2D.granularity;
 | |
|  
 | |
|  ret2D = textureFootprintClampNV(sample2D, P2, lodClamp, granularity, true, fp2D);
 | |
|  anchor2D += fp2D.anchor;
 | |
|  offset2D += fp2D.offset;
 | |
|  mask2D += fp2D.mask;
 | |
|  lod2D += fp2D.lod;
 | |
|  granularity2D += fp2D.granularity;
 | |
|  
 | |
|  ret2D = textureFootprintClampNV(sample2D, P2, lodClamp, granularity, true, fp2D, bias);
 | |
|  anchor2D += fp2D.anchor;
 | |
|  offset2D += fp2D.offset;
 | |
|  mask2D += fp2D.mask;
 | |
|  lod2D += fp2D.lod;
 | |
|  granularity2D += fp2D.granularity;
 | |
|  
 | |
|  ret2D = textureFootprintLodNV(sample2D, P2, lod, granularity, true, fp2D);
 | |
|  anchor2D += fp2D.anchor;
 | |
|  offset2D += fp2D.offset;
 | |
|  mask2D += fp2D.mask;
 | |
|  lod2D += fp2D.lod;
 | |
|  granularity2D += fp2D.granularity;
 | |
|  
 | |
|  ret2D = textureFootprintGradNV(sample2D, P2, dx, dy, granularity, true, fp2D);
 | |
|  anchor2D += fp2D.anchor;
 | |
|  offset2D += fp2D.offset;
 | |
|  mask2D += fp2D.mask;
 | |
|  lod2D += fp2D.lod;
 | |
|  granularity2D += fp2D.granularity;
 | |
|  
 | |
|  ret2D = textureFootprintGradClampNV(sample2D, P2, dx, dy, lodClamp, granularity, true, fp2D);
 | |
|  anchor2D += fp2D.anchor;
 | |
|  offset2D += fp2D.offset;
 | |
|  mask2D += fp2D.mask;
 | |
|  lod2D += fp2D.lod;
 | |
|  granularity2D += fp2D.granularity;
 | |
|  
 | |
|  ret3D = textureFootprintNV(sample3D, P3, granularity, true, fp3D);
 | |
|  anchor3D = fp3D.anchor;
 | |
|  offset3D = fp3D.offset;
 | |
|  mask3D = fp3D.mask;
 | |
|  lod3D = fp3D.lod;
 | |
|  granularity3D = fp3D.granularity;
 | |
|  
 | |
|  ret3D = textureFootprintNV(sample3D, P3, granularity, true, fp3D, bias);
 | |
|  anchor3D += fp3D.anchor;
 | |
|  offset3D += fp3D.offset;
 | |
|  mask3D += fp3D.mask;
 | |
|  lod3D += fp3D.lod;
 | |
|  granularity3D += fp3D.granularity;
 | |
|  
 | |
|  ret3D = textureFootprintClampNV(sample3D, P3, lodClamp, granularity, true, fp3D);
 | |
|  anchor3D += fp3D.anchor;
 | |
|  offset3D += fp3D.offset;
 | |
|  mask3D += fp3D.mask;
 | |
|  lod3D += fp3D.lod;
 | |
|  granularity3D += fp3D.granularity;
 | |
|  
 | |
|  ret3D = textureFootprintClampNV(sample3D, P3, lodClamp, granularity, true, fp3D, bias);
 | |
|  anchor3D += fp3D.anchor;
 | |
|  offset3D += fp3D.offset;
 | |
|  mask3D += fp3D.mask;
 | |
|  lod3D += fp3D.lod;
 | |
|  granularity3D += fp3D.granularity;
 | |
|  
 | |
|  ret3D = textureFootprintLodNV(sample3D, P3, lod, granularity, true, fp3D);
 | |
|  anchor3D += fp3D.anchor;
 | |
|  offset3D += fp3D.offset;
 | |
|  mask3D += fp3D.mask;
 | |
|  lod3D += fp3D.lod;
 | |
|  granularity3D += fp3D.granularity;
 | |
| } | 
