Converted sky colors from floats to GLubytes to try to work around Linux
nVidia bug, with no success. :-(
This commit is contained in:
+50
-41
@@ -72,9 +72,9 @@ static float middle_vertex[12][3];
|
|||||||
static float outer_vertex[12][3];
|
static float outer_vertex[12][3];
|
||||||
static float bottom_vertex[12][3];
|
static float bottom_vertex[12][3];
|
||||||
|
|
||||||
static float inner_color[12][4];
|
static GLubyte inner_color[12][4];
|
||||||
static float middle_color[12][4];
|
static GLubyte middle_color[12][4];
|
||||||
static float outer_color[12][4];
|
static GLubyte outer_color[12][4];
|
||||||
|
|
||||||
|
|
||||||
// Calculate the sky structure vertices
|
// Calculate the sky structure vertices
|
||||||
@@ -168,19 +168,21 @@ void fgSkyColorsInit( void ) {
|
|||||||
// printf("sky = %.2f fog = %.2f diff = %.2f\n",
|
// printf("sky = %.2f fog = %.2f diff = %.2f\n",
|
||||||
// l->sky_color[j], l->fog_color[j], diff);
|
// l->sky_color[j], l->fog_color[j], diff);
|
||||||
|
|
||||||
inner_color[i][j] = l->sky_color[j] - diff * 0.3;
|
inner_color[i][j] = (GLubyte)((l->sky_color[j] - diff * 0.3) * 255);
|
||||||
middle_color[i][j] = l->sky_color[j] - diff * 0.9 + middle_amt[j];
|
middle_color[i][j] = (GLubyte)((l->sky_color[j] - diff * 0.9
|
||||||
outer_color[i][j] = l->fog_color[j] + outer_amt[j];
|
+ middle_amt[j]) * 255);
|
||||||
|
outer_color[i][j] = (GLubyte)((l->fog_color[j] + outer_amt[j])
|
||||||
|
* 255);
|
||||||
|
|
||||||
if ( inner_color[i][j] > 1.00 ) { inner_color[i][j] = 1.00; }
|
if ( inner_color[i][j] > 255 ) { inner_color[i][j] = 255; }
|
||||||
if ( inner_color[i][j] < 0.10 ) { inner_color[i][j] = 0.10; }
|
if ( inner_color[i][j] < 25 ) { inner_color[i][j] = 25; }
|
||||||
if ( middle_color[i][j] > 1.00 ) { middle_color[i][j] = 1.00; }
|
if ( middle_color[i][j] > 255 ) { middle_color[i][j] = 255; }
|
||||||
if ( middle_color[i][j] < 0.10 ) { middle_color[i][j] = 0.10; }
|
if ( middle_color[i][j] < 25 ) { middle_color[i][j] = 25; }
|
||||||
if ( outer_color[i][j] > 1.00 ) { outer_color[i][j] = 1.00; }
|
if ( outer_color[i][j] > 255 ) { outer_color[i][j] = 255; }
|
||||||
if ( outer_color[i][j] < 0.10 ) { outer_color[i][j] = 0.10; }
|
if ( outer_color[i][j] < 25 ) { outer_color[i][j] = 25; }
|
||||||
}
|
}
|
||||||
inner_color[i][3] = middle_color[i][3] = outer_color[i][3] =
|
inner_color[i][3] = middle_color[i][3] = outer_color[i][3] =
|
||||||
l->sky_color[3];
|
(GLubyte)(l->sky_color[3] * 255);
|
||||||
|
|
||||||
for ( j = 0; j < 3; j++ ) {
|
for ( j = 0; j < 3; j++ ) {
|
||||||
outer_amt[j] -= outer_diff[j];
|
outer_amt[j] -= outer_diff[j];
|
||||||
@@ -212,19 +214,21 @@ void fgSkyColorsInit( void ) {
|
|||||||
// printf("sky = %.2f fog = %.2f diff = %.2f\n",
|
// printf("sky = %.2f fog = %.2f diff = %.2f\n",
|
||||||
// l->sky_color[j], l->fog_color[j], diff);
|
// l->sky_color[j], l->fog_color[j], diff);
|
||||||
|
|
||||||
inner_color[i][j] = l->sky_color[j] - diff * 0.3;
|
inner_color[i][j] = (GLubyte)((l->sky_color[j] - diff * 0.3) * 255);
|
||||||
middle_color[i][j] = l->sky_color[j] - diff * 0.9 + middle_amt[j];
|
middle_color[i][j] = (GLubyte)((l->sky_color[j] - diff * 0.9
|
||||||
outer_color[i][j] = l->fog_color[j] + outer_amt[j];
|
+ middle_amt[j]) * 255);
|
||||||
|
outer_color[i][j] = (GLubyte)((l->fog_color[j] + outer_amt[j])
|
||||||
|
* 255);
|
||||||
|
|
||||||
if ( inner_color[i][j] > 1.00 ) { inner_color[i][j] = 1.00; }
|
if ( inner_color[i][j] > 255 ) { inner_color[i][j] = 255; }
|
||||||
if ( inner_color[i][j] < 0.10 ) { inner_color[i][j] = 0.10; }
|
if ( inner_color[i][j] < 25 ) { inner_color[i][j] = 25; }
|
||||||
if ( middle_color[i][j] > 1.00 ) { middle_color[i][j] = 1.00; }
|
if ( middle_color[i][j] > 255 ) { middle_color[i][j] = 255; }
|
||||||
if ( middle_color[i][j] < 0.10 ) { middle_color[i][j] = 0.10; }
|
if ( middle_color[i][j] < 25 ) { middle_color[i][j] = 25; }
|
||||||
if ( outer_color[i][j] > 1.00 ) { outer_color[i][j] = 1.00; }
|
if ( outer_color[i][j] > 255 ) { outer_color[i][j] = 255; }
|
||||||
if ( outer_color[i][j] < 0.15 ) { outer_color[i][j] = 0.15; }
|
if ( outer_color[i][j] < 35 ) { outer_color[i][j] = 35; }
|
||||||
}
|
}
|
||||||
inner_color[i][3] = middle_color[i][3] = outer_color[i][3] =
|
inner_color[i][3] = middle_color[i][3] = outer_color[i][3] =
|
||||||
l->sky_color[3];
|
(GLubyte)(l->sky_color[3] * 255);
|
||||||
|
|
||||||
for ( j = 0; j < 3; j++ ) {
|
for ( j = 0; j < 3; j++ ) {
|
||||||
outer_amt[j] += outer_diff[j];
|
outer_amt[j] += outer_diff[j];
|
||||||
@@ -261,9 +265,10 @@ void fgSkyInit( void ) {
|
|||||||
void fgSkyRender( void ) {
|
void fgSkyRender( void ) {
|
||||||
FGInterface *f;
|
FGInterface *f;
|
||||||
fgLIGHT *l;
|
fgLIGHT *l;
|
||||||
float inner_color[4];
|
GLubyte sky_color[4];
|
||||||
float middle_color[4];
|
GLubyte inner_color[4];
|
||||||
float outer_color[4];
|
GLubyte middle_color[4];
|
||||||
|
GLubyte outer_color[4];
|
||||||
double diff;
|
double diff;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@@ -279,11 +284,12 @@ void fgSkyRender( void ) {
|
|||||||
// printf("sky = %.2f fog = %.2f diff = %.2f\n",
|
// printf("sky = %.2f fog = %.2f diff = %.2f\n",
|
||||||
// l->sky_color[j], l->adj_fog_color[j], diff);
|
// l->sky_color[j], l->adj_fog_color[j], diff);
|
||||||
|
|
||||||
inner_color[i] = l->sky_color[i] - diff * 0.3;
|
inner_color[i] = (GLubyte)((l->sky_color[i] - diff * 0.3) * 255);
|
||||||
middle_color[i] = l->sky_color[i] - diff * 0.9;
|
middle_color[i] = (GLubyte)((l->sky_color[i] - diff * 0.9) * 255);
|
||||||
outer_color[i] = l->adj_fog_color[i];
|
outer_color[i] = (GLubyte)(l->adj_fog_color[i] * 255);
|
||||||
}
|
}
|
||||||
inner_color[3] = middle_color[3] = outer_color[3] = l->adj_fog_color[3];
|
inner_color[3] = middle_color[3] = outer_color[3] =
|
||||||
|
(GLubyte)(l->adj_fog_color[3] * 255);
|
||||||
|
|
||||||
xglPushMatrix();
|
xglPushMatrix();
|
||||||
|
|
||||||
@@ -302,36 +308,39 @@ void fgSkyRender( void ) {
|
|||||||
|
|
||||||
// Draw inner/center section of sky*/
|
// Draw inner/center section of sky*/
|
||||||
xglBegin( GL_TRIANGLE_FAN );
|
xglBegin( GL_TRIANGLE_FAN );
|
||||||
|
for ( i = 0; i < 4; i++ ) {
|
||||||
|
sky_color[i] = (GLubyte)(l->sky_color[i] * 255);
|
||||||
|
}
|
||||||
xglColor4fv(l->sky_color);
|
xglColor4fv(l->sky_color);
|
||||||
xglVertex3f(0.0, 0.0, CENTER_ELEV);
|
xglVertex3f(0.0, 0.0, CENTER_ELEV);
|
||||||
for ( i = 11; i >= 0; i-- ) {
|
for ( i = 11; i >= 0; i-- ) {
|
||||||
xglColor4fv( inner_color );
|
xglColor4ubv( inner_color );
|
||||||
xglVertex3fv( inner_vertex[i] );
|
xglVertex3fv( inner_vertex[i] );
|
||||||
}
|
}
|
||||||
xglColor4fv( inner_color );
|
xglColor4ubv( inner_color );
|
||||||
xglVertex3fv( inner_vertex[11] );
|
xglVertex3fv( inner_vertex[11] );
|
||||||
xglEnd();
|
xglEnd();
|
||||||
|
|
||||||
// Draw the middle ring
|
// Draw the middle ring
|
||||||
xglBegin( GL_TRIANGLE_STRIP );
|
xglBegin( GL_TRIANGLE_STRIP );
|
||||||
for ( i = 0; i < 12; i++ ) {
|
for ( i = 0; i < 12; i++ ) {
|
||||||
xglColor4fv( middle_color );
|
xglColor4ubv( middle_color );
|
||||||
// printf("middle_color[%d] = %.2f %.2f %.2f %.2f\n", i,
|
// printf("middle_color[%d] = %.2f %.2f %.2f %.2f\n", i,
|
||||||
// middle_color[i][0], middle_color[i][1], middle_color[i][2],
|
// middle_color[i][0], middle_color[i][1], middle_color[i][2],
|
||||||
// middle_color[i][3]);
|
// middle_color[i][3]);
|
||||||
// xglColor4f(1.0, 0.0, 0.0, 1.0);
|
// xglColor4f(1.0, 0.0, 0.0, 1.0);
|
||||||
xglVertex3fv( middle_vertex[i] );
|
xglVertex3fv( middle_vertex[i] );
|
||||||
xglColor4fv( inner_color );
|
xglColor4ubv( inner_color );
|
||||||
// printf("inner_color[%d] = %.2f %.2f %.2f %.2f\n", i,
|
// printf("inner_color[%d] = %.2f %.2f %.2f %.2f\n", i,
|
||||||
// inner_color[i][0], inner_color[i][1], inner_color[i][2],
|
// inner_color[i][0], inner_color[i][1], inner_color[i][2],
|
||||||
// inner_color[i][3]);
|
// inner_color[i][3]);
|
||||||
// xglColor4f(0.0, 0.0, 1.0, 1.0);
|
// xglColor4f(0.0, 0.0, 1.0, 1.0);
|
||||||
xglVertex3fv( inner_vertex[i] );
|
xglVertex3fv( inner_vertex[i] );
|
||||||
}
|
}
|
||||||
xglColor4fv( middle_color );
|
xglColor4ubv( middle_color );
|
||||||
// xglColor4f(1.0, 0.0, 0.0, 1.0);
|
// xglColor4f(1.0, 0.0, 0.0, 1.0);
|
||||||
xglVertex3fv( middle_vertex[0] );
|
xglVertex3fv( middle_vertex[0] );
|
||||||
xglColor4fv( inner_color );
|
xglColor4ubv( inner_color );
|
||||||
// xglColor4f(0.0, 0.0, 1.0, 1.0);
|
// xglColor4f(0.0, 0.0, 1.0, 1.0);
|
||||||
xglVertex3fv( inner_vertex[0] );
|
xglVertex3fv( inner_vertex[0] );
|
||||||
xglEnd();
|
xglEnd();
|
||||||
@@ -339,20 +348,20 @@ void fgSkyRender( void ) {
|
|||||||
// Draw the outer ring
|
// Draw the outer ring
|
||||||
xglBegin( GL_TRIANGLE_STRIP );
|
xglBegin( GL_TRIANGLE_STRIP );
|
||||||
for ( i = 0; i < 12; i++ ) {
|
for ( i = 0; i < 12; i++ ) {
|
||||||
xglColor4fv( outer_color );
|
xglColor4ubv( outer_color );
|
||||||
xglVertex3fv( outer_vertex[i] );
|
xglVertex3fv( outer_vertex[i] );
|
||||||
xglColor4fv( middle_color );
|
xglColor4ubv( middle_color );
|
||||||
xglVertex3fv( middle_vertex[i] );
|
xglVertex3fv( middle_vertex[i] );
|
||||||
}
|
}
|
||||||
xglColor4fv( outer_color );
|
xglColor4ubv( outer_color );
|
||||||
xglVertex3fv( outer_vertex[0] );
|
xglVertex3fv( outer_vertex[0] );
|
||||||
xglColor4fv( middle_color );
|
xglColor4ubv( middle_color );
|
||||||
xglVertex3fv( middle_vertex[0] );
|
xglVertex3fv( middle_vertex[0] );
|
||||||
xglEnd();
|
xglEnd();
|
||||||
|
|
||||||
// Draw the bottom skirt
|
// Draw the bottom skirt
|
||||||
xglBegin( GL_TRIANGLE_STRIP );
|
xglBegin( GL_TRIANGLE_STRIP );
|
||||||
xglColor4fv( outer_color );
|
xglColor4ubv( outer_color );
|
||||||
for ( i = 0; i < 12; i++ ) {
|
for ( i = 0; i < 12; i++ ) {
|
||||||
xglVertex3fv( bottom_vertex[i] );
|
xglVertex3fv( bottom_vertex[i] );
|
||||||
xglVertex3fv( outer_vertex[i] );
|
xglVertex3fv( outer_vertex[i] );
|
||||||
|
|||||||
Reference in New Issue
Block a user