87 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| // Copyright 2021 Michael Fabian Dirks <info@xaymar.com>
 | |
| //
 | |
| // Redistribution and use in source and binary forms, with or without
 | |
| // modification, are permitted provided that the following conditions are met:
 | |
| //
 | |
| // 1. Redistributions of source code must retain the above copyright notice,
 | |
| //    this list of conditions and the following disclaimer.
 | |
| // 2. Redistributions in binary form must reproduce the above copyright notice,
 | |
| //    this list of conditions and the following disclaimer in the documentation
 | |
| //    and/or other materials provided with the distribution.
 | |
| // 3. Neither the name of the copyright holder nor the names of its contributors
 | |
| //    may be used to endorse or promote products derived from this software
 | |
| //    without specific prior written permission.
 | |
| //
 | |
| // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | |
| // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | |
| // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | |
| // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 | |
| // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | |
| // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 | |
| // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | |
| // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | |
| // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | |
| // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 | |
| // POSSIBILITY OF SUCH DAMAGE.
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Defines
 | |
| //------------------------------------------------------------------------------
 | |
| // Kernel size as sequential float4's.
 | |
| #define KERNEL_SIZE 32
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Uniforms
 | |
| //------------------------------------------------------------------------------
 | |
| uniform float4x4 ViewProj;
 | |
| uniform texture2d pImage;
 | |
| uniform float2 pImageSize;
 | |
| uniform float2 pImageTexel;
 | |
| uniform float2 pImageHalfTexel;
 | |
| uniform float pSize;
 | |
| uniform float pSizeInverseMul;
 | |
| uniform float pAngle; 
 | |
| uniform float2 pCenter;
 | |
| uniform float2 pStepScale;
 | |
| uniform float4 pKernel[KERNEL_SIZE];
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Structures
 | |
| //------------------------------------------------------------------------------
 | |
| struct VertexInformation {
 | |
| 	float4 pos : POSITION;
 | |
| 	float2 uv  : TEXCOORD0;
 | |
| };
 | |
| 
 | |
| sampler_state LinearClampSampler {
 | |
| 	Filter    = Linear;
 | |
| 	AddressU  = Clamp;
 | |
| 	AddressV  = Clamp;
 | |
| 	MinLOD    = 0;
 | |
| 	MaxLOD    = 0;
 | |
| };
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // Functions
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
| VertexInformation VSDefault(VertexInformation vtx) {
 | |
| 	vtx.pos = mul(float4(vtx.pos.xyz, 1.0), ViewProj);
 | |
| 	return vtx;
 | |
| }
 | |
| 
 | |
| float2 rotate(float2 pt, float angle) {
 | |
| 	float cp = cos(angle);
 | |
| 	float sp = sin(angle);
 | |
| 	float sn = -sp;
 | |
| 	return float2((pt.x * cp) + (pt.y * sn), (pt.x * sp) + (pt.y * cp));
 | |
| }
 | |
| 
 | |
| float2 rotateAround(float2 pt, float2 cpt, float angle) {
 | |
| 	return rotate(pt - cpt, angle) + cpt;
 | |
| }
 | |
| 
 | |
| float kernelAt(uint i) {
 | |
| 	return ((float[4])(pKernel[floor(i/4)]))[i%4];
 | |
| }
 |