/[svn]/libgig/trunk/src/gig.cpp
ViewVC logotype

Diff of /libgig/trunk/src/gig.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 3623 by schoenebeck, Wed Oct 2 16:30:29 2019 UTC revision 3657 by schoenebeck, Sat Dec 14 17:10:57 2019 UTC
# Line 3412  namespace { Line 3412  namespace {
3412          }          }
3413    
3414          File* pFile = (File*) GetParent()->GetParent();          File* pFile = (File*) GetParent()->GetParent();
3415          bool versiongt2 = pFile->pVersion && pFile->pVersion->major > 2;          const bool versiongt2 = pFile->pVersion && pFile->pVersion->major > 2;
3416          const int iMaxDimensions =  versiongt2 ? 8 : 5;          const int iMaxDimensions =  versiongt2 ? 8 : 5;
3417          const int iMaxDimensionRegions = versiongt2 ? 256 : 32;          const int iMaxDimensionRegions = versiongt2 ? 256 : 32;
3418    
# Line 3459  namespace { Line 3459  namespace {
3459              }              }
3460              store32(&pData[iWavePoolOffset + i * 4], iWaveIndex);              store32(&pData[iWavePoolOffset + i * 4], iWaveIndex);
3461          }          }
3462    
3463            if (versiongt2) {
3464                // add 3dnm list which always seems to be empty
3465                RIFF::List* _3dnm = pCkRegion->GetSubList(LIST_TYPE_3DNM);
3466                if (!_3dnm) _3dnm = pCkRegion->AddSubList(LIST_TYPE_3DNM);
3467    
3468                // add 3ddp chunk which always seems to have 16 bytes of 0xFF
3469                RIFF::Chunk* _3ddp = pCkRegion->GetSubChunk(CHUNK_ID_3DDP);
3470                if (!_3ddp) _3ddp =  pCkRegion->AddSubChunk(CHUNK_ID_3DDP, 16);
3471                uint8_t* pData = (uint8_t*) _3ddp->LoadChunkData();
3472                for (int i = 0; i < 16; i += 4) {
3473                    store32(&pData[i], 0xFFFFFFFF);
3474                }
3475    
3476                // move 3dnm and 3ddp to the end of the region list
3477                pCkRegion->MoveSubChunk(pCkRegion->GetSubList(LIST_TYPE_3DNM), (RIFF::Chunk*)NULL);
3478                pCkRegion->MoveSubChunk(pCkRegion->GetSubChunk(CHUNK_ID_3DDP), (RIFF::Chunk*)NULL);
3479            } else {
3480                // this is intended for the user switching from GSt >= 3 version
3481                // back to an older format version, delete GSt3 chunks ...
3482                RIFF::List* _3dnm = pCkRegion->GetSubList(LIST_TYPE_3DNM);
3483                if (_3dnm) pCkRegion->DeleteSubChunk(_3dnm);
3484    
3485                RIFF::Chunk* _3ddp = pCkRegion->GetSubChunk(CHUNK_ID_3DDP);
3486                if (_3ddp) pCkRegion->DeleteSubChunk(_3ddp);
3487            }
3488      }      }
3489    
3490      void Region::LoadDimensionRegions(RIFF::List* rgn) {      void Region::LoadDimensionRegions(RIFF::List* rgn) {
# Line 6625  namespace { Line 6651  namespace {
6651              if (pVersion && pVersion->major > 2) {              if (pVersion && pVersion->major > 2) {
6652                  RIFF::Chunk* _3gnm = _3gnl->GetFirstSubChunk();                  RIFF::Chunk* _3gnm = _3gnl->GetFirstSubChunk();
6653                  for (int i = 0 ; i < 128 ; i++) {                  for (int i = 0 ; i < 128 ; i++) {
6654                      if (i >= pGroups->size()) ::SaveString(CHUNK_ID_3GNM, _3gnm, _3gnl, "", "", true, 64);                      // create 128 empty placeholder strings which will either
6655                        // be filled by Group::UpdateChunks below or left empty.
6656                        ::SaveString(CHUNK_ID_3GNM, _3gnm, _3gnl, "", "", true, 64);
6657                      if (_3gnm) _3gnm = _3gnl->GetNextSubChunk();                      if (_3gnm) _3gnm = _3gnl->GetNextSubChunk();
6658                  }                  }
6659              }              }

Legend:
Removed from v.3623  
changed lines
  Added in v.3657

  ViewVC Help
Powered by ViewVC