MCPcopy Create free account
hub / github.com/OpenFodder/openfodder / MapTiles_Draw

Method MapTiles_Draw

Source/Amiga/Graphics_Amiga.cpp:725–806  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

723}
724
725void cGraphics_Amiga::MapTiles_Draw() {
726 mSurface->clearBuffer();
727 uint8* Target = mSurface->GetSurfaceBuffer();
728
729 uint8* CurrentMapPtr = mFodder->mMap->data() + mFodder->mMapTile_Ptr;
730
731 // Y
732 for (uint16 cx = 0; cx <= g_Fodder->getWindowRows() + 1; ++cx) {
733
734 uint8* TargetRow = Target;
735
736 uint16 StartY = 0;
737
738 if (cx == 0)
739 StartY = mFodder->mMapTile_RowOffset;
740
741 if (CurrentMapPtr >= mFodder->mMap->data()) {
742
743 uint8* MapRowPtr = CurrentMapPtr;
744
745 // X
746 for (uint16 cx2 = 0; cx2 <= g_Fodder->getWindowColumns() + 1; ++cx2) {
747 uint8* TargetTmp = TargetRow;
748
749 if (MapRowPtr >= mFodder->mMap->data() + mFodder->mMap->size())
750 break;
751
752 uint16 Tile = readLE<uint16>(MapRowPtr) & 0x1FF;
753 if (Tile > 0x1C0)
754 Tile = 0;
755
756 Tile <<= 7;
757
758 uint8* TilePtr = mBlkData->data() + Tile;
759 uint16 StartX = 0;
760
761 TilePtr += StartY * 2;
762
763 if (cx2 == 0)
764 StartX = mFodder->mMapTile_ColumnOffset;
765
766 // Each bitfield
767 for (uint16 BitField = 0; BitField < 4; ++BitField) {
768
769 // Each Tile Row
770 for (uint16 i = StartY; i < 16; ++i) {
771
772 if (TilePtr > mBlkData->data() + mBlkData->size())
773 continue;
774
775 uint16 RowData = readBEWord(TilePtr);
776 TilePtr += 2;
777 RowData <<= StartX;
778
779 // Each pixel of a Tile Row
780 for (uint16 x = StartX; x < 16; ++x) {
781 uint8 Bit = (RowData & 0x8000) ? 1 : 0;
782 RowData <<= 1;

Callers

nothing calls this directly

Calls 9

readBEWordFunction · 0.85
clearBufferMethod · 0.80
GetSurfaceBufferMethod · 0.80
getWindowRowsMethod · 0.80
getWindowColumnsMethod · 0.80
GetWidthMethod · 0.80
SaveMethod · 0.80
sizeMethod · 0.45
getWidthMethod · 0.45

Tested by

no test coverage detected