summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorKotzaBoss <[email protected]>2024-04-23 14:24:37 +0200
committerGitHub <[email protected]>2024-04-23 14:24:37 +0200
commit4b0e25d3af79ce4c5cd94e8279473764d969cca3 (patch)
treedc577f402c9f8bd04f201d47243ea6794cf2dd71
parentd80febde7de940d74a37a47729a15ad29b40cafb (diff)
downloadraylib-4b0e25d3af79ce4c5cd94e8279473764d969cca3.tar.gz
raylib-4b0e25d3af79ce4c5cd94e8279473764d969cca3.zip
Add rlCullDistance variables/getters and rlSetClipPlanes function (#3912)
The `RL_CULL_DISTANCE_` definition remains as the initial value of the variables. Basic usage can be: ```c #include <raylib.h> #include <rlgl.h> rlSetClipPlanes(RL_CULL_DISTANCE_NEAR, MY_CULL_DISTANCE_FAR); if (must_reset_clip_planes) rlSetClipPlanes(RL_CULL_DISTANCE_NEAR, RL_CULL_DISTANCE_FAR); ```
-rw-r--r--examples/models/models_skybox.c2
-rw-r--r--src/rcore.c14
-rw-r--r--src/rlgl.h24
3 files changed, 32 insertions, 8 deletions
diff --git a/examples/models/models_skybox.c b/examples/models/models_skybox.c
index 1b8aad9a..e0e08f3a 100644
--- a/examples/models/models_skybox.c
+++ b/examples/models/models_skybox.c
@@ -208,7 +208,7 @@ static TextureCubemap GenTextureCubemap(Shader shader, Texture2D panorama, int s
rlEnableShader(shader.id);
// Define projection matrix and send it to shader
- Matrix matFboProjection = MatrixPerspective(90.0*DEG2RAD, 1.0, RL_CULL_DISTANCE_NEAR, RL_CULL_DISTANCE_FAR);
+ Matrix matFboProjection = MatrixPerspective(90.0*DEG2RAD, 1.0, rlGetCullDistanceNear(), rlGetCullDistanceFar());
rlSetUniformMatrix(shader.locs[SHADER_LOC_MATRIX_PROJECTION], matFboProjection);
// Define view matrix for every side of the cubemap
diff --git a/src/rcore.c b/src/rcore.c
index a68067fe..29885c39 100644
--- a/src/rcore.c
+++ b/src/rcore.c
@@ -992,10 +992,10 @@ void BeginMode3D(Camera camera)
if (camera.projection == CAMERA_PERSPECTIVE)
{
// Setup perspective projection
- double top = RL_CULL_DISTANCE_NEAR*tan(camera.fovy*0.5*DEG2RAD);
+ double top = rlGetCullDistanceNear()*tan(camera.fovy*0.5*DEG2RAD);
double right = top*aspect;
- rlFrustum(-right, right, -top, top, RL_CULL_DISTANCE_NEAR, RL_CULL_DISTANCE_FAR);
+ rlFrustum(-right, right, -top, top, rlGetCullDistanceNear(), rlGetCullDistanceFar());
}
else if (camera.projection == CAMERA_ORTHOGRAPHIC)
{
@@ -1003,7 +1003,7 @@ void BeginMode3D(Camera camera)
double top = camera.fovy/2.0;
double right = top*aspect;
- rlOrtho(-right, right, -top,top, RL_CULL_DISTANCE_NEAR, RL_CULL_DISTANCE_FAR);
+ rlOrtho(-right, right, -top,top, rlGetCullDistanceNear(), rlGetCullDistanceFar());
}
rlMatrixMode(RL_MODELVIEW); // Switch back to modelview matrix
@@ -1207,7 +1207,7 @@ VrStereoConfig LoadVrStereoConfig(VrDeviceInfo device)
// Compute camera projection matrices
float projOffset = 4.0f*lensShift; // Scaled to projection space coordinates [-1..1]
- Matrix proj = MatrixPerspective(fovy, aspect, RL_CULL_DISTANCE_NEAR, RL_CULL_DISTANCE_FAR);
+ Matrix proj = MatrixPerspective(fovy, aspect, rlGetCullDistanceNear(), rlGetCullDistanceFar());
config.projection[0] = MatrixMultiply(proj, MatrixTranslate(projOffset, 0.0f, 0.0f));
config.projection[1] = MatrixMultiply(proj, MatrixTranslate(-projOffset, 0.0f, 0.0f));
@@ -1446,7 +1446,7 @@ Ray GetScreenToWorldRayEx(Vector2 position, Camera camera, int width, int height
if (camera.projection == CAMERA_PERSPECTIVE)
{
// Calculate projection matrix from perspective
- matProj = MatrixPerspective(camera.fovy*DEG2RAD, ((double)width/(double)height), RL_CULL_DISTANCE_NEAR, RL_CULL_DISTANCE_FAR);
+ matProj = MatrixPerspective(camera.fovy*DEG2RAD, ((double)width/(double)height), rlGetCullDistanceNear(), rlGetCullDistanceFar());
}
else if (camera.projection == CAMERA_ORTHOGRAPHIC)
{
@@ -1533,7 +1533,7 @@ Vector2 GetWorldToScreenEx(Vector3 position, Camera camera, int width, int heigh
if (camera.projection == CAMERA_PERSPECTIVE)
{
// Calculate projection matrix from perspective
- matProj = MatrixPerspective(camera.fovy*DEG2RAD, ((double)width/(double)height), RL_CULL_DISTANCE_NEAR, RL_CULL_DISTANCE_FAR);
+ matProj = MatrixPerspective(camera.fovy*DEG2RAD, ((double)width/(double)height), rlGetCullDistanceNear(), rlGetCullDistanceFar());
}
else if (camera.projection == CAMERA_ORTHOGRAPHIC)
{
@@ -1542,7 +1542,7 @@ Vector2 GetWorldToScreenEx(Vector3 position, Camera camera, int width, int heigh
double right = top*aspect;
// Calculate projection matrix from orthographic
- matProj = MatrixOrtho(-right, right, -top, top, RL_CULL_DISTANCE_NEAR, RL_CULL_DISTANCE_FAR);
+ matProj = MatrixOrtho(-right, right, -top, top, rlGetCullDistanceNear(), rlGetCullDistanceFar());
}
// Calculate view matrix from camera look at (and transpose it)
diff --git a/src/rlgl.h b/src/rlgl.h
index 1787d97a..137dcd20 100644
--- a/src/rlgl.h
+++ b/src/rlgl.h
@@ -559,6 +559,10 @@ typedef enum {
extern "C" { // Prevents name mangling of functions
#endif
+RLAPI void rlSetClipPlanes(double near, double far);
+RLAPI double rlGetCullDistanceNear();
+RLAPI double rlGetCullDistanceFar();
+
RLAPI void rlMatrixMode(int mode); // Choose the current matrix to be transformed
RLAPI void rlPushMatrix(void); // Push the current matrix to stack
RLAPI void rlPopMatrix(void); // Pop latest inserted matrix from stack
@@ -1083,6 +1087,10 @@ typedef void *(*rlglLoadProc)(const char *name); // OpenGL extension functions
//----------------------------------------------------------------------------------
// Global Variables Definition
//----------------------------------------------------------------------------------
+
+static double rlCullDistanceNear = RL_CULL_DISTANCE_NEAR;
+static double rlCullDistanceFar = RL_CULL_DISTANCE_FAR;
+
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
static rlglData RLGL = { 0 };
#endif // GRAPHICS_API_OPENGL_33 || GRAPHICS_API_OPENGL_ES2
@@ -1127,6 +1135,22 @@ static Matrix rlMatrixInvert(Matrix mat); // Invert provided m
// Module Functions Definition - Matrix operations
//----------------------------------------------------------------------------------
+void rlSetClipPlanes(double near, double far)
+{
+ rlCullDistanceNear = near;
+ rlCullDistanceFar = far;
+}
+
+double rlGetCullDistanceFar()
+{
+ return rlCullDistanceFar;
+}
+
+double rlGetCullDistanceNear()
+{
+ return rlCullDistanceNear;
+}
+
#if defined(GRAPHICS_API_OPENGL_11)
// Fallback to OpenGL 1.1 function calls
//---------------------------------------