🎉 Added files
This commit is contained in:
125
raydium/fog.c
Normal file
125
raydium/fog.c
Normal file
@@ -0,0 +1,125 @@
|
||||
/*
|
||||
Raydium - CQFD Corp.
|
||||
http://raydium.org/
|
||||
License: GPL - GNU General Public License, see "gpl.txt" file.
|
||||
*/
|
||||
|
||||
#ifndef DONT_INCLUDE_HEADERS
|
||||
#include "index.h"
|
||||
#else
|
||||
#include "headers/fog.h"
|
||||
|
||||
#endif
|
||||
|
||||
void raydium_fog_enable(void)
|
||||
{
|
||||
raydium_fog_enabled_tag=1;
|
||||
raydium_fog_apply();
|
||||
}
|
||||
|
||||
void raydium_fog_disable(void)
|
||||
{
|
||||
raydium_fog_enabled_tag=0;
|
||||
raydium_fog_apply();
|
||||
}
|
||||
|
||||
void raydium_fog_color_update(void)
|
||||
{
|
||||
glFogfv(GL_FOG_COLOR,raydium_background_color);
|
||||
}
|
||||
|
||||
void raydium_fog_mode(GLuint mode)
|
||||
{
|
||||
raydium_fog_mode_value=mode;
|
||||
}
|
||||
|
||||
void raydium_fog_density(GLfloat density)
|
||||
{
|
||||
raydium_fog_density_value=density;
|
||||
}
|
||||
|
||||
void raydium_fog_near(GLfloat fnear)
|
||||
{
|
||||
raydium_fog_near_value=fnear;
|
||||
}
|
||||
|
||||
void raydium_fog_far(GLfloat ffar)
|
||||
{
|
||||
raydium_fog_far_value=ffar;
|
||||
}
|
||||
|
||||
void raydium_fog_apply(void)
|
||||
{
|
||||
|
||||
if(raydium_fog_enabled_tag)
|
||||
{
|
||||
glEnable(GL_FOG);
|
||||
glFogi(GL_FOG_MODE,raydium_fog_mode_value);
|
||||
raydium_fog_color_update();
|
||||
glFogf(GL_FOG_DENSITY, raydium_fog_density_value);
|
||||
glHint(GL_FOG_HINT, GL_FASTEST);
|
||||
|
||||
if(raydium_fog_far_value==0)
|
||||
{
|
||||
raydium_fog_far_value=raydium_projection_far;
|
||||
raydium_fog_near_value=raydium_projection_far/4.f;
|
||||
}
|
||||
|
||||
glFogf(GL_FOG_START,raydium_fog_near_value);
|
||||
glFogf(GL_FOG_END,raydium_fog_far_value);
|
||||
}
|
||||
else
|
||||
{
|
||||
glDisable(GL_FOG);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void raydium_fog_wait(void)
|
||||
{
|
||||
glDisable(GL_FOG);
|
||||
}
|
||||
|
||||
void raydium_fog_init(void)
|
||||
{
|
||||
raydium_fog_far_value=0;
|
||||
raydium_fog_near_value=0;
|
||||
raydium_fog_density_value=0;
|
||||
raydium_fog_mode_value=RAYDIUM_FOG_MODE_LINEAR;
|
||||
raydium_fog_volumetric_enabled_tag=0;
|
||||
|
||||
switch(RENDER_VOLUMETRIC_FOG_AXIS)
|
||||
{
|
||||
case 0:
|
||||
raydium_fog_volumetric_array=raydium_vertex_x;
|
||||
break;
|
||||
case 1:
|
||||
raydium_fog_volumetric_array=raydium_vertex_y;
|
||||
break;
|
||||
case 2:
|
||||
raydium_fog_volumetric_array=raydium_vertex_z;
|
||||
break;
|
||||
default:
|
||||
raydium_log("fog: FAILED: RENDER_VOLUMETRIC_FOG_AXIS is broken !");
|
||||
exit(100);
|
||||
}
|
||||
|
||||
raydium_fog_enable();
|
||||
raydium_log("fog: OK");
|
||||
}
|
||||
|
||||
void raydium_fog_volumetric_support(void)
|
||||
{
|
||||
raydium_fog_volumetric_enabled_tag=1;
|
||||
}
|
||||
|
||||
void raydium_fog_volumetric_enable(void)
|
||||
{
|
||||
glFogi(GL_FOG_COORDINATE_SOURCE_EXT, GL_FOG_COORDINATE_EXT);
|
||||
}
|
||||
|
||||
void raydium_fog_volumetric_disable(void)
|
||||
{
|
||||
glFogi(GL_FOG_COORDINATE_SOURCE_EXT, GL_FRAGMENT_DEPTH_EXT);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user