Browse Source

Migrate `Cl2Light` to accept a buffer

pull/1116/head
Gleb Mazovetskiy 5 years ago committed by Anders Jenbo
parent
commit
07f4dbbd2e
  1. 8
      Source/engine.cpp
  2. 7
      Source/engine.h
  3. 19
      Source/scrollrt.cpp

8
Source/engine.cpp

@ -1115,21 +1115,21 @@ void Cl2DrawLightTbl(int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth, char
Cl2BlitLightSafe(GlobalBackBuffer(), sx, sy, pRLEBytes, nDataSize, nWidth, &pLightTbl[idx]);
}
void Cl2DrawLight(int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth)
void Cl2DrawLight(CelOutputBuffer out, int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth)
{
int nDataSize;
BYTE *pRLEBytes;
assert(gpBuffer != NULL);
assert(out.begin != NULL);
assert(pCelBuff != NULL);
assert(nCel > 0);
pRLEBytes = CelGetFrameClipped(pCelBuff, nCel, &nDataSize);
if (light_table_index)
Cl2BlitLightSafe(GlobalBackBuffer(), sx, sy, pRLEBytes, nDataSize, nWidth, &pLightTbl[light_table_index * 256]);
Cl2BlitLightSafe(out, sx, sy, pRLEBytes, nDataSize, nWidth, &pLightTbl[light_table_index * 256]);
else
Cl2BlitSafe(GlobalBackBuffer(), sx, sy, pRLEBytes, nDataSize, nWidth);
Cl2BlitSafe(out, sx, sy, pRLEBytes, nDataSize, nWidth);
}
/**

7
Source/engine.h

@ -277,13 +277,14 @@ void Cl2DrawLightTbl(int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth, char
/**
* @brief Blit CL2 sprite, and apply lighting, to the back buffer at the given coordinates
* @param sx Back buffer coordinate
* @param sy Back buffer coordinate
* @param out Output buffer
* @param sx Output buffer coordinate
* @param sy Output buffer coordinate
* @param pCelBuff CL2 buffer
* @param nCel CL2 frame number
* @param nWidth Width of sprite
*/
void Cl2DrawLight(int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth);
void Cl2DrawLight(CelOutputBuffer out, int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth);
/**
* @brief Draw a line in the target buffer

19
Source/scrollrt.cpp

@ -262,7 +262,7 @@ void DrawMissilePrivate(CelOutputBuffer out, MissileStruct *m, int sx, int sy, B
if (m->_miUniqTrans)
Cl2DrawLightTbl(mx, my, m->_miAnimData, m->_miAnimFrame, m->_miAnimWidth, m->_miUniqTrans + 3);
else if (m->_miLightFlag)
Cl2DrawLight(mx, my, m->_miAnimData, m->_miAnimFrame, m->_miAnimWidth);
Cl2DrawLight(out, mx, my, m->_miAnimData, m->_miAnimFrame, m->_miAnimWidth);
else
Cl2Draw(out, mx, my, m->_miAnimData, m->_miAnimFrame, m->_miAnimWidth);
}
@ -301,13 +301,14 @@ void DrawMissile(CelOutputBuffer out, int x, int y, int sx, int sy, BOOL pre)
/**
* @brief Render a monster sprite
* @param out Output buffer
* @param x dPiece coordinate
* @param y dPiece coordinate
* @param mx Back buffer coordinate
* @param my Back buffer coordinate
* @param mx Output buffer coordinate
* @param my Output buffer coordinate
* @param m Id of monster
*/
static void DrawMonster(int x, int y, int mx, int my, int m)
static void DrawMonster(CelOutputBuffer out, int x, int y, int mx, int my, int m)
{
int nCel, frames;
char trans;
@ -353,7 +354,7 @@ static void DrawMonster(int x, int y, int mx, int my, int m)
if (trans)
Cl2DrawLightTbl(mx, my, monster[m]._mAnimData, monster[m]._mAnimFrame, monster[m].MType->width, trans);
else
Cl2DrawLight(mx, my, monster[m]._mAnimData, monster[m]._mAnimFrame, monster[m].MType->width);
Cl2DrawLight(out, mx, my, monster[m]._mAnimData, monster[m]._mAnimFrame, monster[m].MType->width);
}
}
@ -385,7 +386,7 @@ static void DrawManaShield(CelOutputBuffer out, int pnum, int x, int y, bool lig
return;
}
Cl2DrawLight(x, y, pCelBuff, 1, width);
Cl2DrawLight(out, x, y, pCelBuff, 1, width);
}
/**
@ -450,7 +451,7 @@ static void DrawPlayer(CelOutputBuffer out, int pnum, int x, int y, int px, int
else
light_table_index -= 5;
Cl2DrawLight(px, py, pCelBuff, nCel, nWidth);
Cl2DrawLight(out, px, py, pCelBuff, nCel, nWidth);
DrawManaShield(out, pnum, px, py, false);
light_table_index = l;
@ -696,7 +697,7 @@ static void DrawMonsterHelper(CelOutputBuffer out, int x, int y, int oy, int sx,
if (mi == pcursmonst) {
Cl2DrawOutline(233, px, py, pMonster->_mAnimData, pMonster->_mAnimFrame, pMonster->MType->width);
}
DrawMonster(x, y, px, py, mi);
DrawMonster(out, x, y, px, py, mi);
}
/**
@ -787,7 +788,7 @@ static void scrollrt_draw_dungeon(CelOutputBuffer out, int sx, int sy, int dx, i
if (pDeadGuy->_deadtrans != 0) {
Cl2DrawLightTbl(px, dy, pCelBuff, nCel, pDeadGuy->_deadWidth, pDeadGuy->_deadtrans);
} else {
Cl2DrawLight(px, dy, pCelBuff, nCel, pDeadGuy->_deadWidth);
Cl2DrawLight(out, px, dy, pCelBuff, nCel, pDeadGuy->_deadWidth);
}
} while (0);
}

Loading…
Cancel
Save