Fix SEGV when top part of the map is empty
This commit is contained in:
parent
f36a8b61fb
commit
3df8be20bb
@ -50,7 +50,7 @@ public:
|
|||||||
void scroll(int keepY);
|
void scroll(int keepY);
|
||||||
PixelAttribute &attribute(int y, int x);
|
PixelAttribute &attribute(int y, int x);
|
||||||
void renderShading(bool drawAlpha);
|
void renderShading(bool drawAlpha);
|
||||||
void setLastY(int y) { m_lastY = y; }
|
void setLastY(int y);
|
||||||
int getLastY(void) { return m_lastY; }
|
int getLastY(void) { return m_lastY; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -70,6 +70,17 @@ private:
|
|||||||
int m_firstUnshadedY;
|
int m_firstUnshadedY;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
inline void PixelAttributes::setLastY(int y)
|
||||||
|
{
|
||||||
|
#ifdef DEBUG
|
||||||
|
assert(y - m_firstY <= m_lastLine - m_firstLine);
|
||||||
|
#else
|
||||||
|
if (y - m_firstY > m_lastLine - m_firstLine)
|
||||||
|
// Not sure whether this will actually avoid a crash...
|
||||||
|
y = m_firstY + (m_lastLine - m_firstLine);
|
||||||
|
#endif
|
||||||
|
m_lastY = y;
|
||||||
|
}
|
||||||
|
|
||||||
inline PixelAttribute &PixelAttributes::attribute(int y, int x)
|
inline PixelAttribute &PixelAttributes::attribute(int y, int x)
|
||||||
{
|
{
|
||||||
|
@ -645,10 +645,8 @@ void TileGenerator::pushPixelRows(int zPosLimit) {
|
|||||||
m_image->tpixels[mapY2ImageY(mapY)][mapX2ImageX(mapX)] = pixel.color().to_libgd();
|
m_image->tpixels[mapY2ImageY(mapY)][mapX2ImageX(mapX)] = pixel.color().to_libgd();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m_nextStoredYCoord = y;
|
|
||||||
m_blockPixelAttributes.scroll(y);
|
|
||||||
int yLimit = worldBlockZ2StoredY(zPosLimit);
|
int yLimit = worldBlockZ2StoredY(zPosLimit);
|
||||||
if (y < yLimit) {
|
if (y <= yLimit) {
|
||||||
m_blockPixelAttributes.scroll(yLimit);
|
m_blockPixelAttributes.scroll(yLimit);
|
||||||
m_nextStoredYCoord = yLimit;
|
m_nextStoredYCoord = yLimit;
|
||||||
}
|
}
|
||||||
@ -843,8 +841,7 @@ void TileGenerator::renderMap()
|
|||||||
if (currentPos.x != pos.x || currentPos.z != pos.z) {
|
if (currentPos.x != pos.x || currentPos.z != pos.z) {
|
||||||
area_rendered++;
|
area_rendered++;
|
||||||
if (currentPos.z != pos.z) {
|
if (currentPos.z != pos.z) {
|
||||||
if (currentPos.z != INT_MIN)
|
pushPixelRows(pos.z);
|
||||||
pushPixelRows(pos.z);
|
|
||||||
m_blockPixelAttributes.setLastY((m_zMax - pos.z) * 16 + 15);
|
m_blockPixelAttributes.setLastY((m_zMax - pos.z) * 16 + 15);
|
||||||
if (progressIndicator)
|
if (progressIndicator)
|
||||||
cout << "Processing Z-coordinate: " << std::setw(5) << pos.z*16 << "\r" << std::flush;
|
cout << "Processing Z-coordinate: " << std::setw(5) << pos.z*16 << "\r" << std::flush;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user