@ -9,12 +9,12 @@  
			
		 
		
	
		
			
			 
			 
			
			 
			
			*  
			
		 
		
	
		
			
			 
			 
			
			 
			
			*    Example  originally  created  with  raylib  2.5 ,  last  time  updated  with  raylib  4.0  
			
		 
		
	
		
			
			 
			 
			
			 
			
			*  
			
		 
		
	
		
			
			 
			 
			
			 
			
			*    Example  contributed  by  eggmund  ( @ eggmund )  and  reviewed  by  Ramon  Santamaria  ( @ raysan5 )  
			
		 
		
	
		
			
			 
			 
			
			 
			
			*    Example  contributed  by  Josh  Colclough  ( @ joshcol9232 )  and  reviewed  by  Ramon  Santamaria  ( @ raysan5 )  
			
		 
		
	
		
			
			 
			 
			
			 
			
			*  
			
		 
		
	
		
			
			 
			 
			
			 
			
			*    Example  licensed  under  an  unmodified  zlib / libpng  license ,  which  is  an  OSI - certified ,  
			
		 
		
	
		
			
			 
			 
			
			 
			
			*    BSD - like  license  that  allows  static  linking  with  closed  source  software  
			
		 
		
	
		
			
			 
			 
			
			 
			
			*  
			
		 
		
	
		
			
			 
			 
			
			 
			
			*    Copyright  ( c )  2019 - 2023  eggmund  ( @ eggmund )  and  Ramon  Santamaria  ( @ raysan5 )  
			
		 
		
	
		
			
			 
			 
			
			 
			
			*    Copyright  ( c )  2019 - 2023  Josh  Colclough  ( @ joshcol9232 )  and  Ramon  Santamaria  ( @ raysan5 )  
			
		 
		
	
		
			
			 
			 
			
			 
			
			*  
			
		 
		
	
		
			
			 
			 
			
			 
			
			* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */  
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
	
		
			
				
				
				
				
					
						 
					 
				
				 
			
			 
			
			@ -37,6 +37,13 @@ const float pointsOfInterest[6][2] =  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    {  - 0.70176f ,  - 0.3842f  } ,   
			
		 
		
	
		
			
			 
			 
			
			 
			
			} ;  
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			const  int  screenWidth  =  800 ;  
			
		 
		
	
		
			
			 
			 
			
			 
			
			const  int  screenHeight  =  450 ;  
			
		 
		
	
		
			
			 
			 
			
			 
			
			const  float  zoomSpeed  =  1.01f ;  
			
		 
		
	
		
			
			 
			 
			
			 
			
			const  float  offsetSpeedMul  =  2.0f ;  
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			const  float  startingZoom  =  0.75f ;  
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  
			
		 
		
	
		
			
			 
			 
			
			 
			
			/ /  Program  main  entry  point  
			
		 
		
	
		
			
			 
			 
			
			 
			
			/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  
			
		 
		
	
	
		
			
				
				
				
				
					
						 
					 
				
				 
			
			 
			
			@ -44,10 +51,6 @@ int main(void)  
			
		 
		
	
		
			
			 
			 
			
			 
			
			{  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    / /  Initialization   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    / / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    const  int  screenWidth  =  800 ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    const  int  screenHeight  =  450 ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    / / SetConfigFlags ( FLAG_WINDOW_HIGHDPI ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    InitWindow ( screenWidth ,  screenHeight ,  " raylib [shaders] example - julia sets " ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    / /  Load  julia  set  shader   
			
		 
		
	
	
		
			
				
				
				
				
					
						 
					 
				
				 
			
			 
			
			@ -61,10 +64,8 @@ int main(void)  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    float  c [ 2 ]  =  {  pointsOfInterest [ 0 ] [ 0 ] ,  pointsOfInterest [ 0 ] [ 1 ]  } ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    / /  Offset  and  zoom  to  draw  the  julia  set  at .  ( centered  on  screen  and  default  size )   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    float  offset [ 2 ]  =  {  - ( float ) GetScreenWidth ( ) / 2 ,  - ( float ) GetScreenHeight ( ) / 2  } ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    float  zoom  =  1.0f ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    Vector2  offsetSpeed  =  {  0.0f ,  0.0f  } ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    float  offset [ 2 ]  =  {  0.0f ,  0.0f  } ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    float  zoom  =  startingZoom ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    / /  Get  variable  ( uniform )  locations  on  the  shader  to  connect  with  the  program   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    / /  NOTE :  If  uniform  variable  could  not  be  found  in  the  shader ,  function  returns  - 1   
			
		 
		
	
	
		
			
				
				
				
				
					
						 
					 
				
				 
			
			 
			
			@ -72,17 +73,13 @@ int main(void)  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    int  zoomLoc  =  GetShaderLocation ( shader ,  " zoom " ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    int  offsetLoc  =  GetShaderLocation ( shader ,  " offset " ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    / /  Tell  the  shader  what  the  screen  dimensions ,  zoom ,  offset  and  c  are   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    float  screenDims [ 2 ]  =  {  ( float ) GetScreenWidth ( ) ,  ( float ) GetScreenHeight ( )  } ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    SetShaderValue ( shader ,  GetShaderLocation ( shader ,  " screenDims " ) ,  screenDims ,  SHADER_UNIFORM_VEC2 ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    / /  Upload  the  shader  uniform  values !   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    SetShaderValue ( shader ,  cLoc ,  c ,  SHADER_UNIFORM_VEC2 ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    SetShaderValue ( shader ,  zoomLoc ,  & zoom ,  SHADER_UNIFORM_FLOAT ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    SetShaderValue ( shader ,  offsetLoc ,  offset ,  SHADER_UNIFORM_VEC2 ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    int  incrementSpeed  =  0 ;              / /  Multiplier  of  speed  to  change  c  value   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    bool  showControls  =  true ;            / /  Show  controls   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    bool  pause  =  false ;                  / /  Pause  animation   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			    SetTargetFPS ( 60 ) ;                    / /  Set  our  game  to  run  at  60  frames - per - second   
			
		 
		
	
		
			
			 
			 
			
			 
			
			    / / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   
			
		 
		
	
	
		
			
				
				
					
						 
					 
				
				
					
						 
					 
				
				
				 
			
			 
			
			@ -110,42 +107,50 @@ int main(void)  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            SetShaderValue ( shader ,  cLoc ,  c ,  SHADER_UNIFORM_VEC2 ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        }   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			        if  ( IsKeyPressed ( KEY_SPACE ) )  pause  =  ! pause ;                  / /  Pause  animation  ( c  change )   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        if  ( IsKeyPressed ( KEY_F1 ) )  showControls  =  ! showControls ;   / /  Toggle  whether  or  not  to  show  controls   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			        if  ( ! pause )   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        / /  If  " R "  is  pressed ,  reset  zoom  and  offset .   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        if  ( IsKeyPressed ( KEY_R ) )   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        {   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            if  ( IsKeyPressed ( KEY_RIGHT ) )  incrementSpeed + + ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            else  if  ( IsKeyPressed ( KEY_LEFT ) )  incrementSpeed - - ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            / /  TODO :  The  idea  is  to  zoom  and  move  around  with  mouse   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            / /  Probably  offset  movement  should  be  proportional  to  zoom  level   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            if  ( IsMouseButtonDown ( MOUSE_BUTTON_LEFT )  | |  IsMouseButtonDown ( MOUSE_BUTTON_RIGHT ) )   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            {   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                if  ( IsMouseButtonDown ( MOUSE_BUTTON_LEFT ) )  zoom  + =  zoom * 0.003f ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                if  ( IsMouseButtonDown ( MOUSE_BUTTON_RIGHT ) )  zoom  - =  zoom * 0.003f ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			                Vector2  mousePos  =  GetMousePosition ( ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            zoom  =  startingZoom ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            offset [ 0 ]  =  0.0f ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            offset [ 1 ]  =  0.0f ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            SetShaderValue ( shader ,  zoomLoc ,  & zoom ,  SHADER_UNIFORM_FLOAT ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            SetShaderValue ( shader ,  offsetLoc ,  offset ,  SHADER_UNIFORM_VEC2 ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        }   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			                offsetSpeed . x  =  mousePos . x  - ( float ) screenWidth / 2 ;    
			
		 
		
	
		
			
			 
			 
			
			 
			
			                offsetSpeed . y  =  mousePos . y  - ( float ) screenHeight / 2 ;    
			
		 
		
	
		
			
			 
			 
			
			 
			
			        if  ( IsKeyPressed ( KEY_SPACE ) )  incrementSpeed  =  0 ;          / /  Pause  animation  ( c  change )   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        if  ( IsKeyPressed ( KEY_F1 ) )  showControls  =  ! showControls ;   / /  Toggle  whether  or  not  to  show  controls   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			                / /  Slowly  move  camera  to  targetOffset   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                offset [ 0 ]  + =  GetFrameTime ( ) * offsetSpeed . x * 0.8f ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                offset [ 1 ]  + =  GetFrameTime ( ) * offsetSpeed . y * 0.8f ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            }   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            else  offsetSpeed  =  ( Vector2 ) {  0.0f ,  0.0f  } ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        if  ( IsKeyPressed ( KEY_RIGHT ) )  incrementSpeed + + ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        else  if  ( IsKeyPressed ( KEY_LEFT ) )  incrementSpeed - - ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			        / /  If  either  left  or  right  button  is  pressed ,  zoom  in / out .   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        if  ( IsMouseButtonDown ( MOUSE_BUTTON_LEFT )  | |  IsMouseButtonDown ( MOUSE_BUTTON_RIGHT ) )   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        {   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            / /  Change  zoom .  If  Mouse  left  - >  zoom  in .  Mouse  right  - >  zoom  out .   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            zoom  * =  IsMouseButtonDown ( MOUSE_BUTTON_LEFT ) ?  zoomSpeed  :  1.0f / zoomSpeed ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            const  Vector2  mousePos  =  GetMousePosition ( ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            Vector2  offsetVelocity ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            / /  Find  the  velocity  at  which  to  change  the  camera .  Take  the  distance  of  the  mouse   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            / /  from  the  center  of  the  screen  as  the  direction ,  and  adjust  magnitude  based  on   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            / /  the  current  zoom .   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            offsetVelocity . x  =  ( mousePos . x / ( float ) screenWidth  -  0.5f ) * offsetSpeedMul / zoom ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            offsetVelocity . y  =  ( mousePos . y / ( float ) screenHeight  -  0.5f ) * offsetSpeedMul / zoom ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            / /  Apply  move  velocity  to  camera   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            offset [ 0 ]  + =  GetFrameTime ( ) * offsetVelocity . x ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            offset [ 1 ]  + =  GetFrameTime ( ) * offsetVelocity . y ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            / /  Update  the  shader  uniform  values !   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            SetShaderValue ( shader ,  zoomLoc ,  & zoom ,  SHADER_UNIFORM_FLOAT ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            SetShaderValue ( shader ,  offsetLoc ,  offset ,  SHADER_UNIFORM_VEC2 ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            / /  Increment  c  value  with  time   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            float  amount  =  GetFrameTime ( ) * incrementSpeed * 0.0005f ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            c [ 0 ]  + =  amount ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            c [ 1 ]  + =  amount ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			            SetShaderValue ( shader ,  cLoc ,  c ,  SHADER_UNIFORM_VEC2 ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        }   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			        / /  Increment  c  value  with  time   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        const  float  dc  =  GetFrameTime ( ) * ( float ) incrementSpeed * 0.0005f ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        c [ 0 ]  + =  dc ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        c [ 1 ]  + =  dc ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        SetShaderValue ( shader ,  cLoc ,  c ,  SHADER_UNIFORM_VEC2 ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        / / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   
			
		 
		
	
		
			
			 
			 
			
			 
			
			
  
			
		 
		
	
		
			
			 
			 
			
			 
			
			        / /  Draw   
			
		 
		
	
	
		
			
				
				
					
						 
					 
				
				
					
						 
					 
				
				
				 
			
			 
			
			@ -178,7 +183,8 @@ int main(void)  
			
		 
		
	
		
			
			 
			 
			
			 
			
			                DrawText ( " Press KEY_F1 to toggle these controls " ,  10 ,  30 ,  10 ,  RAYWHITE ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                DrawText ( " Press KEYS [1 - 6] to change point of interest " ,  10 ,  45 ,  10 ,  RAYWHITE ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                DrawText ( " Press KEY_LEFT | KEY_RIGHT to change speed " ,  10 ,  60 ,  10 ,  RAYWHITE ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                DrawText ( " Press KEY_SPACE to pause movement animation " ,  10 ,  75 ,  10 ,  RAYWHITE ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                DrawText ( " Press KEY_SPACE to stop movement animation " ,  10 ,  75 ,  10 ,  RAYWHITE ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			                DrawText ( " Press KEY_R to recenter the camera " ,  10 ,  90 ,  10 ,  RAYWHITE ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			            }   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        EndDrawing ( ) ;   
			
		 
		
	
		
			
			 
			 
			
			 
			
			        / / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -