11 #define M_PI 3.14159265358979323846264338328
14 void GFXUploadLightState(
int max_light_location,
int active_light_array,
int apparent_light_size_array,
bool shader, vector<int>::const_iterator begin, vector<int>::const_iterator end )
29 for (vector<int>::const_iterator lightit = begin; lightit != end; ++i, ++lightit) {
30 const gfx_light &light = (*_llights)[*lightit];
52 double lightDistance = lightPos.Magnitude();
53 double lightSize = light.
getSize() * 0.5;
55 double lightSolidAngle;
56 if (lightSize <= 0.0) {
59 lightSolidAngle = 0.0;
64 if (lightDistance > lightSize) {
69 lightCosAngle = lightDistance /
sqrt( lightDistance*lightDistance + lightSize*lightSize );
70 lightSolidAngle = 2.0 *
M_PI * ( 1.0 - lightCosAngle );
85 lightSolidAngle = 2.0 *
M_PI;
88 lightSizes[i*4+0] =
float(lightSize);
89 lightSizes[i*4+1] =
float(lightCosAngle);
90 lightSizes[i*4+2] =
float(lightSolidAngle);
91 lightSizes[i*4+3] = 0.f;
96 lightSizes[i*4+0] = 0.f;
97 lightSizes[i*4+1] = 0.f;
98 lightSizes[i*4+2] = 0.f;
99 lightSizes[i*4+3] = 0.f;
105 lightSizes[i*4+0] = 0.f;
106 lightSizes[i*4+1] = 0.f;
107 lightSizes[i*4+2] = 0.f;
108 lightSizes[i*4+3] = 0.f;
114 int isenabled = glIsEnabled( GL_LIGHT0+i );
115 if (isenabled && !lightData[i])
116 glDisable( GL_LIGHT0+i );
117 else if (lightData[i] && !isenabled)
118 glEnable( GL_LIGHT0+i );
123 for (
size_t i = 0; i <= maxval; ++i) {
125 const gfx_light &light = (*_llights)[*(begin+i)];
130 if (active_light_array >= 0)
132 if (max_light_location >= 0)
134 if (apparent_light_size_array >= 0)
139 #define GFX_HARDWARE_LIGHTING
155 int tmp = (
this-&
_llights->front() );
156 assert( tmp >= 0 && tmp < (
int)
_llights->size() );
163 int clobberdisabled = -1;
170 return clobberdisabled;
176 int clobberdisabled = -1;
177 int clobberlocal = -1;
184 if (clobberlocal ==
i || clobberdisabled == -1)
187 return (clobberdisabled == -1) ? clobberlocal : clobberdisabled;
192 int foundclobberable = 0;
203 if (foundclobberable != -1) {
208 return (foundclobberable != -1) || ( !
enabled() );
227 float v[4] = {
vect[0],
vect[1], vect[2], 1};
228 glLightfv( target, GL_POSITION, v );
238 glLightfv( gltarg, GL_DIFFUSE,
diffuse );
239 glLightfv( gltarg, GL_SPECULAR,
specular );
240 glLightfv( gltarg, GL_AMBIENT,
ambient );
241 if (original != -1) {
269 glLightfv( gltarg, GL_DIFFUSE,
diffuse );
272 glLightfv( gltarg, GL_SPECULAR,
specular );
275 glLightfv( gltarg, GL_AMBIENT,
ambient );
285 glEnable( GL_LIGHT0+target );
289 glDisable( GL_LIGHT0+target );
293 #ifdef GFX_HARDWARE_LIGHTING
297 #ifdef GFX_HARDWARE_LIGHTING
396 lighttable.
Put( coltarg, tmp );
418 if ( lighttable.
Remove( &coltarg, tmp ) ) {
441 glEnable( GL_LIGHT0+this->
target );
456 glDisable( GL_LIGHT0+this->
target );
480 double ffastmathreallysucksd;
481 double ffastmathreallysucksq;
487 if (ffastmathreallysucksq == 0 || ffastmathreallysucksd <= 0)
489 ffastmathreallysucksd /= ffastmathreallysucksq;
491 QVector st(
vect[0]-ffastmathreallysucksd,
vect[1]-ffastmathreallysucksd,
vect[2]-ffastmathreallysucksd );
492 QVector end(
vect[0]+ffastmathreallysucksd,
vect[1]+ffastmathreallysucksd,
vect[2]+ffastmathreallysucksd );
509 (*_llights)[li].ClobberGLLight(
i );
511 glDisable( GL_LIGHT0+
i );
516 glDisable( GL_LIGHT0+
i );