|
|
@@ -589,6 +589,7 @@ RLAPI Texture2D GenTextureBRDF(Shader shader, int size); // Gen
|
|
|
RLAPI void BeginShaderMode(Shader shader); // Begin custom shader drawing
|
|
|
RLAPI void EndShaderMode(void); // End custom shader drawing (use default shader)
|
|
|
RLAPI void BeginBlendMode(int mode); // Begin blending mode (alpha, additive, multiplied)
|
|
|
+RLAPI void BeginBlendModeEx(int sFactor, int dFactor, int equation); // Begin blending mode (full options)
|
|
|
RLAPI void EndBlendMode(void); // End blending mode (reset to default: alpha blending)
|
|
|
|
|
|
// VR control functions
|
|
|
@@ -3608,26 +3609,40 @@ Texture2D GenTextureBRDF(Shader shader, int size)
|
|
|
return brdf;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+void BeginBlendModeEx(int sFactor, int dFactor, int equation)
|
|
|
+{
|
|
|
+ static int glSFactor = 0; // Track current blending mode
|
|
|
+ static int glDFactor = 0; // Track current blending mode
|
|
|
+ static int glEquation = 0; // Track current blending mode
|
|
|
+
|
|
|
+ if (glSFactor != sFactor || glDFactor != dFactor || glEquation != equation) {
|
|
|
+
|
|
|
+ rlglDraw();
|
|
|
+ glBlendFunc(sFactor, dFactor);
|
|
|
+ glBlendEquation(equation);
|
|
|
+
|
|
|
+ glSFactor = sFactor;
|
|
|
+ glDFactor = dFactor;
|
|
|
+ glEquation = equation;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
// Begin blending mode (alpha, additive, multiplied)
|
|
|
// NOTE: Only 3 blending modes supported, default blend mode is alpha
|
|
|
void BeginBlendMode(int mode)
|
|
|
{
|
|
|
- static int blendMode = 0; // Track current blending mode
|
|
|
-
|
|
|
- if ((blendMode != mode) && (mode < 4))
|
|
|
+ if (mode < 5)
|
|
|
{
|
|
|
- rlglDraw();
|
|
|
-
|
|
|
switch (mode)
|
|
|
{
|
|
|
- case BLEND_ALPHA: glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); break;
|
|
|
- case BLEND_ADDITIVE: glBlendFunc(GL_SRC_ALPHA, GL_ONE); break;
|
|
|
- case BLEND_MULTIPLIED: glBlendFunc(GL_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA); break;
|
|
|
- case BLEND_ADD_COLORS: glBlendFunc(GL_ONE, GL_ONE); break;
|
|
|
- default: break;
|
|
|
+ case BLEND_ALPHA: BeginBlendModeEx(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_FUNC_ADD); break;
|
|
|
+ case BLEND_ADDITIVE: BeginBlendModeEx(GL_SRC_ALPHA, GL_ONE, GL_FUNC_ADD); break;
|
|
|
+ case BLEND_MULTIPLIED: BeginBlendModeEx(GL_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA, GL_FUNC_ADD); break;
|
|
|
+ case BLEND_ADD_COLORS: BeginBlendModeEx(GL_ONE, GL_ONE, GL_FUNC_ADD); break;
|
|
|
+ case BLEND_SUBTRACT_COLORS: BeginBlendModeEx(GL_ONE, GL_ONE, GL_FUNC_SUBTRACT); break;
|
|
|
+ default: break;
|
|
|
}
|
|
|
-
|
|
|
- blendMode = mode;
|
|
|
}
|
|
|
}
|
|
|
|