| 
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -413,7 +413,8 @@ typedef enum { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    RL_BLEND_ADD_COLORS,                // Blend textures adding colors (alternative) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    RL_BLEND_SUBTRACT_COLORS,           // Blend textures subtracting colors (alternative) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    RL_BLEND_ALPHA_PREMULTIPLY,         // Blend premultiplied textures considering alpha | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    RL_BLEND_CUSTOM                     // Blend textures using custom src/dst factors (use rlSetBlendFactors()) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    RL_BLEND_CUSTOM,                    // Blend textures using custom src/dst factors (use rlSetBlendFactors()) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    RL_BLEND_CUSTOM_SEPARATE            // Blend textures using custom src/dst factors (use rlSetBlendFactorsSeparate()) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} rlBlendMode; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Shader location point type | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -595,6 +596,7 @@ RLAPI void rlClearScreenBuffers(void);                  // Clear used screen buf | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			RLAPI void rlCheckErrors(void);                         // Check and log OpenGL error codes | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			RLAPI void rlSetBlendMode(int mode);                    // Set blending mode | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			RLAPI void rlSetBlendFactors(int glSrcFactor, int glDstFactor, int glEquation); // Set blending mode factor and equation (using OpenGL factors) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			RLAPI void rlSetBlendFactorsSeparate(int srgb, int drgb, int salpha, int dalpha, int ergb, int ealpha); // Set blending mode factors and equations separately (using OpenGL factors) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			//------------------------------------------------------------------------------------ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Functions Declaration - rlgl functionality | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -930,6 +932,13 @@ typedef struct rlglData { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        int glBlendSrcFactor;               // Blending source factor | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        int glBlendDstFactor;               // Blending destination factor | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        int glBlendEquation;                // Blending equation | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        int glBlendSrcFactorRGB;            // Blending source RGB factor | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        int glBlendDestFactorRGB;           // Blending destination RGB factor | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        int glBlendSrcFactorAlpha;          // Blending source alpha factor | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        int glBlendDestFactorAlpha;         // Blending destination alpha factor | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        int glBlendEquationRGB;             // Blending equation for RGB | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        int glBlendEquationAlpha;           // Blending equation for alpha | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        bool glCustomBlendModeModified;     // Custom blending factor and equation modification status | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        int framebufferWidth;               // Current framebuffer width | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        int framebufferHeight;              // Current framebuffer height | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -1788,7 +1797,7 @@ void rlCheckErrors() | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			void rlSetBlendMode(int mode) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (RLGL.State.currentBlendMode != mode) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (RLGL.State.currentBlendMode != mode || ((mode == RL_BLEND_CUSTOM || mode == RL_BLEND_CUSTOM_SEPARATE) && RLGL.State.glCustomBlendModeModified)) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        rlDrawRenderBatch(RLGL.currentBatch); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -1805,21 +1814,52 @@ void rlSetBlendMode(int mode) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                // NOTE: Using GL blend src/dst factors and GL equation configured with rlSetBlendFactors() | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                glBlendFunc(RLGL.State.glBlendSrcFactor, RLGL.State.glBlendDstFactor); glBlendEquation(RLGL.State.glBlendEquation); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            } break; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            case RL_BLEND_CUSTOM_SEPARATE: | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                // NOTE: Using GL blend src/dst factors and GL equation configured with rlSetBlendFactorsSeparate() | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                glBlendFuncSeparate(RLGL.State.glBlendSrcFactorRGB, RLGL.State.glBlendDestFactorRGB, RLGL.State.glBlendSrcFactorAlpha, RLGL.State.glBlendDestFactorAlpha); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                glBlendEquationSeparate(RLGL.State.glBlendEquationRGB, RLGL.State.glBlendEquationAlpha); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                break; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            default: break; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        RLGL.State.currentBlendMode = mode; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        RLGL.State.glCustomBlendModeModified = false; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Set blending mode factor and equation used by glBlendFuncSeparate and glBlendEquationSeparate | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			void rlSetBlendFactorsSeparate(int srcRGB, int dstRGB, int srcAlpha, int dstAlpha, int modeRGB, int modeAlpha) { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (RLGL.State.glBlendSrcFactorRGB == srcRGB | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        && RLGL.State.glBlendDestFactorRGB == dstRGB | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        && RLGL.State.glBlendSrcFactorAlpha == srcAlpha | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        && RLGL.State.glBlendDestFactorAlpha == destAlpha | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        && RLGL.State.glBlendEquationRGB == modeRGB | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        && RLGL.State.glBlendEquationAlpha == modeAlpha) return; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    RLGL.State.glBlendSrcFactorRGB = srcRGB; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    RLGL.State.glBlendDestFactorRGB = destRGB; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    RLGL.State.glBlendSrcFactorAlpha = srcAlpha; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    RLGL.State.glBlendDestFactorAlpha = dstAlpha; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    RLGL.State.glBlendEquationRGB = modeRGB; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    RLGL.State.glBlendEquationAlpha = modeAlpha; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    RLGL.State.glCustomBlendModeModified = true; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Set blending mode factor and equation | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			void rlSetBlendFactors(int glSrcFactor, int glDstFactor, int glEquation) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (RLGL.State.glBlendSrcFactor == glSrcFactor | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        && RLGL.State.glBlendDstFactor == glDstFactor | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        && RLGL.State.glBlendEquation == glEquation) return; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    RLGL.State.glBlendSrcFactor = glSrcFactor; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    RLGL.State.glBlendDstFactor = glDstFactor; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    RLGL.State.glBlendEquation = glEquation; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    RLGL.State.glCustomBlendModeModified = true; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -1969,6 +2009,9 @@ void rlglInit(int width, int height) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    //---------------------------------------------------------- | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Init state: custom blend factor and equation modification flag | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    RLGL.State.glCustomBlendModeModified = false; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Init state: Color/Depth buffers clear | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);                   // Set clear color (black) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glClearDepth(1.0f);                                     // Set clear depth value (default) | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
				
				 | 
			
			 | 
			
			
 |