aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client/PS3/SPU_Tasks/ChunkUpdate/ChunkRebuildData.h
diff options
context:
space:
mode:
authordaoge_cmd <3523206925@qq.com>2026-03-01 12:16:08 +0800
committerdaoge_cmd <3523206925@qq.com>2026-03-01 12:16:08 +0800
commitb691c43c44ff180d10e7d4a9afc83b98551ff586 (patch)
tree3e9849222cbc6ba49f2f1fc6e5fe7179632c7390 /Minecraft.Client/PS3/SPU_Tasks/ChunkUpdate/ChunkRebuildData.h
parentdef8cb415354ac390b7e89052a50605285f1aca9 (diff)
Initial commit
Diffstat (limited to 'Minecraft.Client/PS3/SPU_Tasks/ChunkUpdate/ChunkRebuildData.h')
-rw-r--r--Minecraft.Client/PS3/SPU_Tasks/ChunkUpdate/ChunkRebuildData.h129
1 files changed, 129 insertions, 0 deletions
diff --git a/Minecraft.Client/PS3/SPU_Tasks/ChunkUpdate/ChunkRebuildData.h b/Minecraft.Client/PS3/SPU_Tasks/ChunkUpdate/ChunkRebuildData.h
new file mode 100644
index 00000000..c733a928
--- /dev/null
+++ b/Minecraft.Client/PS3/SPU_Tasks/ChunkUpdate/ChunkRebuildData.h
@@ -0,0 +1,129 @@
+
+#pragma once
+#ifndef SN_TARGET_PS3_SPU
+#include "..\..\..\stdafx.h"
+#include "..\..\..\..\Minecraft.World\Region.h"
+#include "..\..\..\Tesselator.h"
+#include "..\..\..\..\Minecraft.World\LightLayer.h"
+#endif // SN_TARGET_PS3_SPU
+
+#include "..\..\..\..\Minecraft.World\LightLayer.h"
+#include "Tile_SPU.h"
+#include "Tesselator_SPU.h"
+
+class TileRenderer_SPU;
+
+
+
+class ChunkRebuildData
+{
+public:
+ enum tileFlags
+ {
+ e_flag_NoRender = 0x01,
+ e_flag_SPURenderCodeMissing = 0x02
+ };
+
+ enum chunkFlags
+ {
+ e_flag_EmptyChunk = 0x01,
+ e_flag_HasCeiling = 0x02,
+ e_flag_TouchedSky = 0x04,
+ e_flag_Rendered = 0x08
+ };
+
+// private:
+ static const int sc_size = 20;
+ unsigned char m_tileIds[sc_size*sc_size*sc_size]; // byte
+ unsigned char m_brightness[sc_size*sc_size*sc_size]; // 2x 4bit
+ unsigned char m_data_flags[sc_size*sc_size*sc_size]; // 2x 4bit
+ int m_grassColor[sc_size*sc_size];
+ int m_foliageColor[sc_size*sc_size];
+ int m_waterColor[sc_size*sc_size];
+
+ TileData_SPU m_tileData;
+ Tesselator_SPU m_tesselator;
+
+#ifdef SN_TARGET_PS3_SPU
+ void* m_pRegion;
+#else
+ Region* m_pRegion;
+#endif // SN_TARGET_PS3_SPU
+ int m_x0;
+ int m_y0;
+ int m_z0;
+ float m_brightnessRamp[16];
+ int m_levelSkyDarken;
+ unsigned int m_flags;
+ unsigned int m_currentLayer;
+ int m_lastHitBlockX;
+ int m_lastHitBlockY;
+ int m_lastHitBlockZ;
+ unsigned int m_pad[3];// padding to 16 byte alignment
+
+
+ int getTileIdx(int x, int y, int z) { return (( x - m_x0 )*sc_size*sc_size) + (( y - m_y0 )*sc_size) + ( z - m_z0 ); }
+ int getTileIdx(int x, int z) { return (( x - m_x0 )*sc_size) + ( z - m_z0 ); }
+
+ void buildTile(int x, int y, int z);
+ void disableUnseenTiles();
+ void createTileData();
+public:
+
+#if 0 //def SN_TARGET_PS3_SPU
+ int getTile(int x, int y, int z);
+ int getBrightnessSky(int x, int y, int z);
+ int getBrightnessBlock(int x, int y, int z);
+ int getData(int x, int y, int z);
+ int getFlags(int x, int y, int z);
+
+ void setFlag(int x, int y, int z, int flag);
+ int getGrassColor(int x, int z);
+ int getFoliageColor(int x, int z);
+
+#else
+ int getTile( int x, int y, int z ) { return m_tileIds[getTileIdx(x,y,z)]; }
+ int getBrightnessSky(int x, int y, int z) { return m_brightness[getTileIdx(x,y,z)] & 0x0f; }
+ int getBrightnessBlock(int x, int y, int z) { return m_brightness[getTileIdx(x,y,z)] >> 4; }
+ int getData(int x, int y, int z) { return m_data_flags[getTileIdx(x,y,z)] & 0x0f; }
+ int getFlags(int x, int y, int z) { return m_data_flags[getTileIdx(x,y,z)] >> 4; }
+
+ void setFlag(int x, int y, int z, int flag) { m_data_flags[getTileIdx(x,y,z)] |= (flag<<4); }
+ int getGrassColor( int x, int z ) { return m_grassColor[getTileIdx(x,z)]; }
+ int getFoliageColor( int x, int z ) { return m_foliageColor[getTileIdx(x,z)]; }
+ int getWaterColor( int x, int z ) { return m_waterColor[getTileIdx(x,z)]; }
+#endif
+
+
+#ifndef SN_TARGET_PS3_SPU
+ void buildMaterials();
+ void buildMaterial(int matSPUIndex, Material* mat);
+ int getMaterialID(Tile* pTile);
+ void buildForChunk(Region* region, Level* level, int x0, int y0, int z0);
+ void copyFromTesselator();
+ void storeInTesselator();
+#endif
+ bool isEmptyTile(int x, int y, int z);
+ bool isEmptyChunk() { return m_flags & e_flag_EmptyChunk;}
+ bool isSolidRenderTile(int x, int y, int z);
+ bool isSolidBlockingTile(int x, int y, int z);
+ float getBrightness(int x, int y, int z, int emitt);
+ float getBrightness(int x, int y, int z);
+
+ // 4J - changes brought forward from 1.8.2
+ int getBrightness(LightLayer::variety layer, int x, int y, int z);
+ int getBrightnessPropagate(LightLayer::variety layer, int x, int y, int z);
+
+ int getLightColor(int x, int y, int z, int emitt); // 4J - change brought forward from 1.8.2
+ int getRawBrightness(int x, int y, int z);
+ int getRawBrightness(int x, int y, int z, bool propagate);
+
+ int LevelChunk_getRawBrightness(int x, int y, int z, int skyDampen);
+ Material_SPU* getMaterial(int x, int y, int z);
+
+
+ void tesselateAllTiles(TileRenderer_SPU* pTileRenderer);
+
+};
+
+