Commit 696baaa7 authored by hybrid's avatar hybrid

Removed signedned of colors, fixing the color flicker in software rendering.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@1475 dfc29bdd-3216-0410-991c-e03cc46cb475
parent 07fa12d0
...@@ -135,28 +135,6 @@ namespace video ...@@ -135,28 +135,6 @@ namespace video
return (color & 0x1F); return (color & 0x1F);
} }
//! Returns the red component from A1R5G5B5 color.
/** Shift left by 3 to get 8 bit value. */
inline s32 getRedSigned(u16 color)
{
return ((color >> 10)&0x1F);
}
//! Returns the green component from A1R5G5B5 color
/** Shift left by 3 to get 8 bit value. */
inline s32 getGreenSigned(u16 color)
{
return ((color >> 5)&0x1F);
}
//! Returns the blue component from A1R5G5B5 color
/** Shift left by 3 to get 8 bit value. */
inline s32 getBlueSigned(u16 color)
{
return (color & 0x1F);
}
//! Returns the average from a 16 bit A1R5G5B5 color //! Returns the average from a 16 bit A1R5G5B5 color
inline s32 getAverage(s16 color) inline s32 getAverage(s16 color)
......
...@@ -122,9 +122,9 @@ public: ...@@ -122,9 +122,9 @@ public:
leftZValue = v1->ZValue; leftZValue = v1->ZValue;
rightZValue = v1->ZValue; rightZValue = v1->ZValue;
leftR = rightR = video::getRedSigned(v1->Color)<<3; leftR = rightR = video::getRed(v1->Color)<<3;
leftG = rightG = video::getGreenSigned(v1->Color)<<3; leftG = rightG = video::getGreen(v1->Color)<<3;
leftB = rightB = video::getBlueSigned(v1->Color)<<3; leftB = rightB = video::getBlue(v1->Color)<<3;
targetSurface = lockedSurface + span * SurfaceWidth; targetSurface = lockedSurface + span * SurfaceWidth;
zTarget = lockedZBuffer + span * SurfaceWidth; zTarget = lockedZBuffer + span * SurfaceWidth;
...@@ -134,32 +134,32 @@ public: ...@@ -134,32 +134,32 @@ public:
tmpDiv = 1.0f / (f32)(v2->Pos.Y - v1->Pos.Y); tmpDiv = 1.0f / (f32)(v2->Pos.Y - v1->Pos.Y);
rightdeltaxf = (v2->Pos.X - v1->Pos.X) * tmpDiv; rightdeltaxf = (v2->Pos.X - v1->Pos.X) * tmpDiv;
rightZStep = (s32)((v2->ZValue - v1->ZValue) * tmpDiv); rightZStep = (s32)((v2->ZValue - v1->ZValue) * tmpDiv);
rightStepR = (s32)(((video::getRedSigned(v2->Color)<<3) - rightR) * tmpDiv); rightStepR = (s32)(((video::getRed(v2->Color)<<3) - rightR) * tmpDiv);
rightStepG = (s32)(((video::getGreenSigned(v2->Color)<<3) - rightG) * tmpDiv); rightStepG = (s32)(((video::getGreen(v2->Color)<<3) - rightG) * tmpDiv);
rightStepB = (s32)(((video::getBlueSigned(v2->Color)<<3) - rightB) * tmpDiv); rightStepB = (s32)(((video::getBlue(v2->Color)<<3) - rightB) * tmpDiv);
tmpDiv = 1.0f / (f32)height; tmpDiv = 1.0f / (f32)height;
leftdeltaxf = (v3->Pos.X - v1->Pos.X) * tmpDiv; leftdeltaxf = (v3->Pos.X - v1->Pos.X) * tmpDiv;
leftZStep = (s32)((v3->ZValue - v1->ZValue) * tmpDiv); leftZStep = (s32)((v3->ZValue - v1->ZValue) * tmpDiv);
leftStepR = (s32)(((video::getRedSigned(v3->Color)<<3) - leftR) * tmpDiv); leftStepR = (s32)(((video::getRed(v3->Color)<<3) - leftR) * tmpDiv);
leftStepG = (s32)(((video::getGreenSigned(v3->Color)<<3) - leftG) * tmpDiv); leftStepG = (s32)(((video::getGreen(v3->Color)<<3) - leftG) * tmpDiv);
leftStepB = (s32)(((video::getBlueSigned(v3->Color)<<3) - leftB) * tmpDiv); leftStepB = (s32)(((video::getBlue(v3->Color)<<3) - leftB) * tmpDiv);
} }
else else
{ {
tmpDiv = 1.0f / (f32)height; tmpDiv = 1.0f / (f32)height;
rightdeltaxf = (v3->Pos.X - v1->Pos.X) * tmpDiv; rightdeltaxf = (v3->Pos.X - v1->Pos.X) * tmpDiv;
rightZStep = (s32)((v3->ZValue - v1->ZValue) * tmpDiv); rightZStep = (s32)((v3->ZValue - v1->ZValue) * tmpDiv);
rightStepR = (s32)(((video::getRedSigned(v3->Color)<<3) - rightR) * tmpDiv); rightStepR = (s32)(((video::getRed(v3->Color)<<3) - rightR) * tmpDiv);
rightStepG = (s32)(((video::getGreenSigned(v3->Color)<<3) - rightG) * tmpDiv); rightStepG = (s32)(((video::getGreen(v3->Color)<<3) - rightG) * tmpDiv);
rightStepB = (s32)(((video::getBlueSigned(v3->Color)<<3) - rightB) * tmpDiv); rightStepB = (s32)(((video::getBlue(v3->Color)<<3) - rightB) * tmpDiv);
tmpDiv = 1.0f / (f32)(v2->Pos.Y - v1->Pos.Y); tmpDiv = 1.0f / (f32)(v2->Pos.Y - v1->Pos.Y);
leftdeltaxf = (v2->Pos.X - v1->Pos.X) * tmpDiv; leftdeltaxf = (v2->Pos.X - v1->Pos.X) * tmpDiv;
leftZStep = (s32)((v2->ZValue - v1->ZValue) * tmpDiv); leftZStep = (s32)((v2->ZValue - v1->ZValue) * tmpDiv);
leftStepR = (s32)(((video::getRedSigned(v2->Color)<<3) - leftR) * tmpDiv); leftStepR = (s32)(((video::getRed(v2->Color)<<3) - leftR) * tmpDiv);
leftStepG = (s32)(((video::getGreenSigned(v2->Color)<<3) - leftG) * tmpDiv); leftStepG = (s32)(((video::getGreen(v2->Color)<<3) - leftG) * tmpDiv);
leftStepB = (s32)(((video::getBlueSigned(v2->Color)<<3) - leftB) * tmpDiv); leftStepB = (s32)(((video::getBlue(v2->Color)<<3) - leftB) * tmpDiv);
} }
...@@ -295,12 +295,12 @@ public: ...@@ -295,12 +295,12 @@ public:
rightZValue = v2->ZValue; rightZValue = v2->ZValue;
rightZStep = (s32)((v3->ZValue - v2->ZValue) * tmpDiv); rightZStep = (s32)((v3->ZValue - v2->ZValue) * tmpDiv);
rightR = video::getRedSigned(v2->Color)<<3; rightR = video::getRed(v2->Color)<<3;
rightG = video::getGreenSigned(v2->Color)<<3; rightG = video::getGreen(v2->Color)<<3;
rightB = video::getBlueSigned(v2->Color)<<3; rightB = video::getBlue(v2->Color)<<3;
rightStepR = (s32)(((video::getRedSigned(v3->Color)<<3) - rightR) * tmpDiv); rightStepR = (s32)(((video::getRed(v3->Color)<<3) - rightR) * tmpDiv);
rightStepG = (s32)(((video::getGreenSigned(v3->Color)<<3) - rightG) * tmpDiv); rightStepG = (s32)(((video::getGreen(v3->Color)<<3) - rightG) * tmpDiv);
rightStepB = (s32)(((video::getBlueSigned(v3->Color)<<3) - rightB) * tmpDiv); rightStepB = (s32)(((video::getBlue(v3->Color)<<3) - rightB) * tmpDiv);
} }
else else
{ {
...@@ -312,12 +312,12 @@ public: ...@@ -312,12 +312,12 @@ public:
leftZValue = v2->ZValue; leftZValue = v2->ZValue;
leftZStep = (s32)((v3->ZValue - v2->ZValue) * tmpDiv); leftZStep = (s32)((v3->ZValue - v2->ZValue) * tmpDiv);
leftR = video::getRedSigned(v2->Color)<<3; leftR = video::getRed(v2->Color)<<3;
leftG = video::getGreenSigned(v2->Color)<<3; leftG = video::getGreen(v2->Color)<<3;
leftB = video::getBlueSigned(v2->Color)<<3; leftB = video::getBlue(v2->Color)<<3;
leftStepR = (s32)(((video::getRedSigned(v3->Color)<<3) - leftR) * tmpDiv); leftStepR = (s32)(((video::getRed(v3->Color)<<3) - leftR) * tmpDiv);
leftStepG = (s32)(((video::getGreenSigned(v3->Color)<<3) - leftG) * tmpDiv); leftStepG = (s32)(((video::getGreen(v3->Color)<<3) - leftG) * tmpDiv);
leftStepB = (s32)(((video::getBlueSigned(v3->Color)<<3) - leftB) * tmpDiv); leftStepB = (s32)(((video::getBlue(v3->Color)<<3) - leftB) * tmpDiv);
} }
......
...@@ -191,9 +191,9 @@ void CTRTextureGouraud::drawIndexedTriangleList(S2DVertex* vertices, s32 vertexC ...@@ -191,9 +191,9 @@ void CTRTextureGouraud::drawIndexedTriangleList(S2DVertex* vertices, s32 vertexC
leftZValue = v1->ZValue; leftZValue = v1->ZValue;
rightZValue = v1->ZValue; rightZValue = v1->ZValue;
leftR = rightR = video::getRedSigned(v1->Color)<<8; leftR = rightR = video::getRed(v1->Color)<<8;
leftG = rightG = video::getGreenSigned(v1->Color)<<8; leftG = rightG = video::getGreen(v1->Color)<<8;
leftB = rightB = video::getBlueSigned(v1->Color)<<8; leftB = rightB = video::getBlue(v1->Color)<<8;
leftTx = rightTx = v1->TCoords.X; leftTx = rightTx = v1->TCoords.X;
leftTy = rightTy = v1->TCoords.Y; leftTy = rightTy = v1->TCoords.Y;
...@@ -205,18 +205,18 @@ void CTRTextureGouraud::drawIndexedTriangleList(S2DVertex* vertices, s32 vertexC ...@@ -205,18 +205,18 @@ void CTRTextureGouraud::drawIndexedTriangleList(S2DVertex* vertices, s32 vertexC
tmpDiv = 1.0f / (f32)(v2->Pos.Y - v1->Pos.Y); tmpDiv = 1.0f / (f32)(v2->Pos.Y - v1->Pos.Y);
rightdeltaxf = (v2->Pos.X - v1->Pos.X) * tmpDiv; rightdeltaxf = (v2->Pos.X - v1->Pos.X) * tmpDiv;
rightZStep = (s32)((v2->ZValue - v1->ZValue) * tmpDiv); rightZStep = (s32)((v2->ZValue - v1->ZValue) * tmpDiv);
rightStepR = (s32)(((video::getRedSigned(v2->Color)<<8) - rightR) * tmpDiv); rightStepR = (s32)(((video::getRed(v2->Color)<<8) - rightR) * tmpDiv);
rightStepG = (s32)(((video::getGreenSigned(v2->Color)<<8) - rightG) * tmpDiv); rightStepG = (s32)(((video::getGreen(v2->Color)<<8) - rightG) * tmpDiv);
rightStepB = (s32)(((video::getBlueSigned(v2->Color)<<8) - rightB) * tmpDiv); rightStepB = (s32)(((video::getBlue(v2->Color)<<8) - rightB) * tmpDiv);
rightTxStep = (s32)((v2->TCoords.X - rightTx) * tmpDiv); rightTxStep = (s32)((v2->TCoords.X - rightTx) * tmpDiv);
rightTyStep = (s32)((v2->TCoords.Y - rightTy) * tmpDiv); rightTyStep = (s32)((v2->TCoords.Y - rightTy) * tmpDiv);
tmpDiv = 1.0f / (f32)height; tmpDiv = 1.0f / (f32)height;
leftdeltaxf = (v3->Pos.X - v1->Pos.X) * tmpDiv; leftdeltaxf = (v3->Pos.X - v1->Pos.X) * tmpDiv;
leftZStep = (s32)((v3->ZValue - v1->ZValue) * tmpDiv); leftZStep = (s32)((v3->ZValue - v1->ZValue) * tmpDiv);
leftStepR = (s32)(((video::getRedSigned(v3->Color)<<8) - leftR) * tmpDiv); leftStepR = (s32)(((video::getRed(v3->Color)<<8) - leftR) * tmpDiv);
leftStepG = (s32)(((video::getGreenSigned(v3->Color)<<8) - leftG) * tmpDiv); leftStepG = (s32)(((video::getGreen(v3->Color)<<8) - leftG) * tmpDiv);
leftStepB = (s32)(((video::getBlueSigned(v3->Color)<<8) - leftB) * tmpDiv); leftStepB = (s32)(((video::getBlue(v3->Color)<<8) - leftB) * tmpDiv);
leftTxStep = (s32)((v3->TCoords.X - leftTx) * tmpDiv); leftTxStep = (s32)((v3->TCoords.X - leftTx) * tmpDiv);
leftTyStep = (s32)((v3->TCoords.Y - leftTy) * tmpDiv); leftTyStep = (s32)((v3->TCoords.Y - leftTy) * tmpDiv);
} }
...@@ -225,18 +225,18 @@ void CTRTextureGouraud::drawIndexedTriangleList(S2DVertex* vertices, s32 vertexC ...@@ -225,18 +225,18 @@ void CTRTextureGouraud::drawIndexedTriangleList(S2DVertex* vertices, s32 vertexC
tmpDiv = 1.0f / (f32)height; tmpDiv = 1.0f / (f32)height;
rightdeltaxf = (v3->Pos.X - v1->Pos.X) * tmpDiv; rightdeltaxf = (v3->Pos.X - v1->Pos.X) * tmpDiv;
rightZStep = (s32)((v3->ZValue - v1->ZValue) * tmpDiv); rightZStep = (s32)((v3->ZValue - v1->ZValue) * tmpDiv);
rightStepR = (s32)(((video::getRedSigned(v3->Color)<<8) - rightR) * tmpDiv); rightStepR = (s32)(((video::getRed(v3->Color)<<8) - rightR) * tmpDiv);
rightStepG = (s32)(((video::getGreenSigned(v3->Color)<<8) - rightG) * tmpDiv); rightStepG = (s32)(((video::getGreen(v3->Color)<<8) - rightG) * tmpDiv);
rightStepB = (s32)(((video::getBlueSigned(v3->Color)<<8) - rightB) * tmpDiv); rightStepB = (s32)(((video::getBlue(v3->Color)<<8) - rightB) * tmpDiv);
rightTxStep = (s32)((v3->TCoords.X - rightTx) * tmpDiv); rightTxStep = (s32)((v3->TCoords.X - rightTx) * tmpDiv);
rightTyStep = (s32)((v3->TCoords.Y - rightTy) * tmpDiv); rightTyStep = (s32)((v3->TCoords.Y - rightTy) * tmpDiv);
tmpDiv = 1.0f / (f32)(v2->Pos.Y - v1->Pos.Y); tmpDiv = 1.0f / (f32)(v2->Pos.Y - v1->Pos.Y);
leftdeltaxf = (v2->Pos.X - v1->Pos.X) * tmpDiv; leftdeltaxf = (v2->Pos.X - v1->Pos.X) * tmpDiv;
leftZStep = (s32)((v2->ZValue - v1->ZValue) * tmpDiv); leftZStep = (s32)((v2->ZValue - v1->ZValue) * tmpDiv);
leftStepR = (s32)(((video::getRedSigned(v2->Color)<<8) - leftR) * tmpDiv); leftStepR = (s32)(((video::getRed(v2->Color)<<8) - leftR) * tmpDiv);
leftStepG = (s32)(((video::getGreenSigned(v2->Color)<<8) - leftG) * tmpDiv); leftStepG = (s32)(((video::getGreen(v2->Color)<<8) - leftG) * tmpDiv);
leftStepB = (s32)(((video::getBlueSigned(v2->Color)<<8) - leftB) * tmpDiv); leftStepB = (s32)(((video::getBlue(v2->Color)<<8) - leftB) * tmpDiv);
leftTxStep = (s32)((v2->TCoords.X - leftTx) * tmpDiv); leftTxStep = (s32)((v2->TCoords.X - leftTx) * tmpDiv);
leftTyStep = (s32)((v2->TCoords.Y - leftTy) * tmpDiv); leftTyStep = (s32)((v2->TCoords.Y - leftTy) * tmpDiv);
} }
...@@ -339,9 +339,9 @@ void CTRTextureGouraud::drawIndexedTriangleList(S2DVertex* vertices, s32 vertexC ...@@ -339,9 +339,9 @@ void CTRTextureGouraud::drawIndexedTriangleList(S2DVertex* vertices, s32 vertexC
{ {
*spanZTarget = spanZValue; *spanZTarget = spanZValue;
u16 color = lockedTexture[((spanTy>>8)&textureYMask) * lockedTextureWidth + ((spanTx>>8)&textureXMask)]; u16 color = lockedTexture[((spanTy>>8)&textureYMask) * lockedTextureWidth + ((spanTx>>8)&textureXMask)];
*hSpanBegin = video::RGB16(video::getRedSigned(color) * (spanR>>8) >>2, *hSpanBegin = video::RGB16(video::getRed(color) * (spanR>>8) >>2,
video::getGreenSigned(color) * (spanG>>8) >>2, video::getGreen(color) * (spanG>>8) >>2,
video::getBlueSigned(color) * (spanB>>8) >>2); video::getBlue(color) * (spanB>>8) >>2);
} }
spanR += spanStepR; spanR += spanStepR;
...@@ -394,12 +394,12 @@ void CTRTextureGouraud::drawIndexedTriangleList(S2DVertex* vertices, s32 vertexC ...@@ -394,12 +394,12 @@ void CTRTextureGouraud::drawIndexedTriangleList(S2DVertex* vertices, s32 vertexC
rightZValue = v2->ZValue; rightZValue = v2->ZValue;
rightZStep = (s32)((v3->ZValue - v2->ZValue) * tmpDiv); rightZStep = (s32)((v3->ZValue - v2->ZValue) * tmpDiv);
rightR = video::getRedSigned(v2->Color)<<8; rightR = video::getRed(v2->Color)<<8;
rightG = video::getGreenSigned(v2->Color)<<8; rightG = video::getGreen(v2->Color)<<8;
rightB = video::getBlueSigned(v2->Color)<<8; rightB = video::getBlue(v2->Color)<<8;
rightStepR = (s32)(((video::getRedSigned(v3->Color)<<8) - rightR) * tmpDiv); rightStepR = (s32)(((video::getRed(v3->Color)<<8) - rightR) * tmpDiv);
rightStepG = (s32)(((video::getGreenSigned(v3->Color)<<8) - rightG) * tmpDiv); rightStepG = (s32)(((video::getGreen(v3->Color)<<8) - rightG) * tmpDiv);
rightStepB = (s32)(((video::getBlueSigned(v3->Color)<<8) - rightB) * tmpDiv); rightStepB = (s32)(((video::getBlue(v3->Color)<<8) - rightB) * tmpDiv);
rightTx = v2->TCoords.X; rightTx = v2->TCoords.X;
rightTy = v2->TCoords.Y; rightTy = v2->TCoords.Y;
...@@ -416,12 +416,12 @@ void CTRTextureGouraud::drawIndexedTriangleList(S2DVertex* vertices, s32 vertexC ...@@ -416,12 +416,12 @@ void CTRTextureGouraud::drawIndexedTriangleList(S2DVertex* vertices, s32 vertexC
leftZValue = v2->ZValue; leftZValue = v2->ZValue;
leftZStep = (s32)((v3->ZValue - v2->ZValue) * tmpDiv); leftZStep = (s32)((v3->ZValue - v2->ZValue) * tmpDiv);
leftR = video::getRedSigned(v2->Color)<<8; leftR = video::getRed(v2->Color)<<8;
leftG = video::getGreenSigned(v2->Color)<<8; leftG = video::getGreen(v2->Color)<<8;
leftB = video::getBlueSigned(v2->Color)<<8; leftB = video::getBlue(v2->Color)<<8;
leftStepR = (s32)(((video::getRedSigned(v3->Color)<<8) - leftR) * tmpDiv); leftStepR = (s32)(((video::getRed(v3->Color)<<8) - leftR) * tmpDiv);
leftStepG = (s32)(((video::getGreenSigned(v3->Color)<<8) - leftG) * tmpDiv); leftStepG = (s32)(((video::getGreen(v3->Color)<<8) - leftG) * tmpDiv);
leftStepB = (s32)(((video::getBlueSigned(v3->Color)<<8) - leftB) * tmpDiv); leftStepB = (s32)(((video::getBlue(v3->Color)<<8) - leftB) * tmpDiv);
leftTx = v2->TCoords.X; leftTx = v2->TCoords.X;
leftTy = v2->TCoords.Y; leftTy = v2->TCoords.Y;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment