
    e>                         d dl  d dl mZ 	 d dlmZ d dlZd dlZd Z	i Z
d Z G d de      Z G d	 d
e      Z G d de      Z G d de      Z G d de      Z e	        y# e$ r	 d dlmZ Y \w xY w)    )*)shaders)NullFunctionErrorNc                     t        d g       t        dt        d      t        d      g      t        dt        d      t        d      g      t        dt        d      t        d      g      t        dt        d      t        d	      g      t        d
t        d      t        d      g      t        dt        d      t        d      gdg di      t        dt        d      g      gay )Nballoonaq  
                varying vec3 normal;
                void main() {
                    // compute here for use in fragment shader
                    normal = normalize(gl_NormalMatrix * gl_Normal);
                    gl_FrontColor = gl_Color;
                    gl_BackColor = gl_Color;
                    gl_Position = ftransform();
                }
            a*  
                varying vec3 normal;
                void main() {
                    vec4 color = gl_Color;
                    color.w = min(color.w + 2.0 * color.w * pow(normal.x*normal.x + normal.y*normal.y, 5.0), 1.0);
                    gl_FragColor = color;
                }
            viewNormalColoraY  
                varying vec3 normal;
                void main() {
                    vec4 color = gl_Color;
                    color.x = (normal.x + 1.0) * 0.5;
                    color.y = (normal.y + 1.0) * 0.5;
                    color.z = (normal.z + 1.0) * 0.5;
                    gl_FragColor = color;
                }
            normalColora_  
                varying vec3 normal;
                void main() {
                    // compute here for use in fragment shader
                    normal = normalize(gl_Normal);
                    gl_FrontColor = gl_Color;
                    gl_BackColor = gl_Color;
                    gl_Position = ftransform();
                }
            shadeda  
                varying vec3 normal;
                void main() {
                    float p = dot(normal, normalize(vec3(1.0, -1.0, -1.0)));
                    p = p < 0. ? 0. : p * 0.8;
                    vec4 color = gl_Color;
                    color.x = color.x * (0.2 + p);
                    color.y = color.y * (0.2 + p);
                    color.z = color.z * (0.2 + p);
                    gl_FragColor = color;
                }
            edgeHilighta  
                varying vec3 normal;
                void main() {
                    vec4 color = gl_Color;
                    float s = pow(normal.x*normal.x + normal.y*normal.y, 2.0);
                    color.x = color.x + s * (1.0-color.x);
                    color.y = color.y + s * (1.0-color.y);
                    color.z = color.z + s * (1.0-color.z);
                    gl_FragColor = color;
                }
            heightColora  
                varying vec4 pos;
                void main() {
                    gl_FrontColor = gl_Color;
                    gl_BackColor = gl_Color;
                    pos = gl_Vertex;
                    gl_Position = ftransform();
                }
            a  
                uniform float colorMap[9];
                varying vec4 pos;
                //out vec4 gl_FragColor;   // only needed for later glsl versions
                //in vec4 gl_Color;
                void main() {
                    vec4 color = gl_Color;
                    color.x = colorMap[0] * (pos.z + colorMap[1]);
                    if (colorMap[2] != 1.0)
                        color.x = pow(color.x, colorMap[2]);
                    color.x = color.x < 0. ? 0. : (color.x > 1. ? 1. : color.x);
                    
                    color.y = colorMap[3] * (pos.z + colorMap[4]);
                    if (colorMap[5] != 1.0)
                        color.y = pow(color.y, colorMap[5]);
                    color.y = color.y < 0. ? 0. : (color.y > 1. ? 1. : color.y);
                    
                    color.z = colorMap[6] * (pos.z + colorMap[7]);
                    if (colorMap[8] != 1.0)
                        color.z = pow(color.z, colorMap[8]);
                    color.z = color.z < 0. ? 0. : (color.z > 1. ? 1. : color.z);
                    
                    color.w = 1.0;
                    gl_FragColor = color;
                }
            colorMap)	   r   r   r   g      ?r   r   r   r   )uniformspointSpritez
                void main() {
                    gl_FrontColor=gl_Color;
                    gl_PointSize = gl_Normal.x;
                    gl_Position = ftransform();
                } 
            )ShaderProgramVertexShaderFragmentShaderShaders     :/usr/lib/python3/dist-packages/pyqtgraph/opengl/shaders.pyinitShadersr      sU    	dB 	i 	 	   "
 	. 	' 	 	  	 	*
 	0 	m 	 	  	 	&
 	2 	h 	 	   !
 	4 	m 	 	  
 
&
 	> 	m     $&
H  !>?I$	AJ 	m   &
 	WBGr   c                 (    t         j                  |    S N)r   names)names    r   getShaderProgramr      s    t$$r   c                       e Zd Zd Zd Zy)Shaderc                 .    || _         || _        d | _        y r   )
shaderTypecodecompiled)selfr!   r"   s      r   __init__zShader.__init__   s    $	r   c                    | j                   <	 t        j                  | j                  | j                        | _         | j                   S | j                   S # t
        $ r t        d      t        $ r}t        |j                        dk(  r|j                  \  }}}|j                  d      s |d   j                  d      j                  d      }|j                  d      \  }}}|dz   }t        j                  dd	|      }t        j                  d
d	|      }t        j                  dd|      }|j                  d      }dgt        |      z  }t!        |      D ]z  \  }}	|	j#                         }	|	d	k(  rt        j$                  d|	      }
|
:t'        |
j)                         d         }||dz
     t+        |dz         fz   ||dz
  <   |d|dz   |	fz  z   }| |D cg c]  }dj-                  |       nc c}w }}t/        t1        t        |            }t!        |      D cg c]"  \  }}||   d|t        ||         z
  z  z   |z   $ nc c}}w }}}|dj-                  |      z   }t        |       d }~ww xY w)NzmThis OpenGL implementation does not support shader programs; many OpenGL features in pyqtgraph will not work.   zShader compile failurer   utf_8
:zb' z'$z\\nr   z(\d+\:)?\d+\((\d+)\)r   z%d %s
, )r#   r   compileShaderr"   r!   r   	ExceptionRuntimeErrorlenargs
startswithdecodesplit	partitionresub	enumeratestripmatchintgroupsstrjoinmaxmap)r$   excerrr"   typcmsgserrNumsimsgmlinenmaxlens                 r   shaderzShader.shader   sU   == " ' 5 5dii QD }}t}}C % Q  !P  Q  Q sxx=A%%(XXNCs>>*BC7>>'288>D#&==#5LCD*C66%40D66%40D66'$t4D::d+D!dSY.G"+D/ 	;3!iik"9$HH%<cB=#&qxxz!}#5D.5d1foQqS.KGDFO!I1c
$::	; 5<<qsxx{<<G< S'!23F\efj\klQXQRTXGAJfS_.D)EELllDl		$/C#C.(=s0   /A I82E)I3G43/I3"'I
	*I33I8N)__name__
__module____qualname__r%   rN   r   r   r   r   r      s    
%r   r   c                       e Zd Zd Zy)r   c                 :    t         j                  | t        |       y r   )r   r%   GL_VERTEX_SHADERr$   r"   s     r   r%   zVertexShader.__init__  s    .5r   NrO   rP   rQ   r%   r   r   r   r   r     s    6r   r   c                       e Zd Zd Zy)r   c                 :    t         j                  | t        |       y r   )r   r%   GL_FRAGMENT_SHADERrU   s     r   r%   zFragmentShader.__init__
  s    0$7r   NrV   r   r   r   r   r   	  s    8r   r   c                   H    e Zd Zi ZddZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)r   Nc                     || _         | t        j                  |<   || _        d | _        i | _        i | _        ||j                         D ]
  \  }}|| |<    y y r   )r   r   r   r   prog	blockDatauniformDataitems)r$   r   r   r   kvs         r   r%   zShaderProgram.__init__  sf    	$(D!	 ~~' !Q  r   c                 B    || j                   |= y || j                   |<   y r   )r]   )r$   	blockNamedatas      r   setBlockDatazShaderProgram.setBlockData   s!    <y)(,DNN9%r   c                 B    || j                   |= y || j                   |<   y r   )r^   )r$   uniformNamerd   s      r   setUniformDatazShaderProgram.setUniformData&  s%    <  -,0D[)r   c                 (    | j                  ||       y r   rh   )r$   itemvals      r   __setitem__zShaderProgram.__setitem__,  s    D#&r   c                 (    | j                  |d        y r   rj   )r$   rk   s     r   __delitem__zShaderProgram.__delitem__/  s    D$'r   c                     | j                   K	 | j                  D cg c]  }|j                          }}t        j                  | | _         | j                   S | j                   S c c}w #  d| _          xY w)N)r\   r   rN   compileProgram)r$   sr#   s      r   programzShaderProgram.program2  sk    9904=1AHHJ==#22H=	 yytyy >	s   A) A$A) $A) )
A3c           	         t        | j                        dkD  r| j                         dk7  rt        | j                                	 | j                  j                         D ]b  \  }}| j                  |      }|dk(  rt        d|z        t        |t        |      t        j                  |t        j                               d y y y #  t        d        xY w)Nr   rq   z$Could not find uniform variable "%s")dtype)r1   r   rt   glUseProgramr^   r_   uniformr/   glUniform1fvnparrayfloat32)r$   rg   rd   locs       r   	__enter__zShaderProgram.__enter__<  s    t||q T\\^r%9(%)-)9)9)?)?)A S%K,,{3Cby'(NQ\(\]] c$i$bjj1QR	S &: LQs   A?C Cc                 L    t        | j                        dkD  rt        d       y y )Nr   )r1   r   rw   )r$   r2   s     r   __exit__zShaderProgram.__exit__i  s    t||q O !r   c                 T    t        | j                         |j                  d            S )zBReturn the location integer for a uniform variable in this programr(   )glGetUniformLocationrt   encode)r$   r   s     r   rx   zShaderProgram.uniformm  s    #DLLNDKK4HIIr   r   )rO   rP   rQ   r   r%   re   rh   rm   ro   rt   r~   r   rx   r   r   r   r   r     s6    E-1'()ZJr   r   c                       e Zd Zd Zy)HeightColorShaderc                    d}t        | j                         d      }t        | j                         ||       t        d      }t	        t
        |       t        t
        t        t        t               t        t
        ||       y )Nr   rc   )glGetUniformBlockIndexrt   glUniformBlockBindingglGenBuffersglBindBufferGL_UNIFORM_BUFFERglBufferDatasizerd   GL_DYNAMIC_DRAWglBindBufferBase)r$   	bindPoint
blockIndexbufs       r   r~   zHeightColorShader.__enter__y  se     	 ,DLLNKH
 	dllnj)D 1o&,&dOD 	*Is;r   N)rO   rP   rQ   r~   r   r   r   r   r   x  s    <r   r   )	OpenGL.GLr   OpenGLr   ImportErrorOpenGL.errornumpyrz   r7   r   CompiledShaderProgramsr   objectr   r   r   r   r   r   r   r   <module>r      s     /(  	DN  %+V +Z66 68V 8_JF _JP< <6 ]  /./s   A" "A0/A0