X-Git-Url: https://deadsoftware.ru/gitweb?p=d2df-editor.git;a=blobdiff_plain;f=src%2Feditor%2Fg_textures.pas;h=5d591577a4854b6697a6c965990363757f6860d0;hp=52c6169b807bf8cd88d4cb6db89a171f0abfb017;hb=4cd27745126226e5e57a02f4c2a44ccbab16bbac;hpb=dd6a8c0ae0c61fbd1d070e83b5d54c41edeb6df8 diff --git a/src/editor/g_textures.pas b/src/editor/g_textures.pas index 52c6169..5d59157 100644 --- a/src/editor/g_textures.pas +++ b/src/editor/g_textures.pas @@ -28,7 +28,7 @@ procedure g_DeleteAllTextures(); implementation uses - e_log, WADEDITOR, g_basic, SysUtils, g_resources; + e_log, WADEDITOR, g_basic, SysUtils; type _TTexture = record @@ -65,26 +65,32 @@ begin end; end; -function g_SimpleCreateTextureWAD (var ID: DWORD; Resource: string): Boolean; - var - TextureData: Pointer; - ResourceLength: Integer; - FileName, SectionName, ResourceName: string; +function g_SimpleCreateTextureWAD(var ID: DWORD; Resource: string): Boolean; +var + WAD: TWADEditor_1; + FileName, + SectionName, + ResourceName: string; + TextureData: Pointer; + ResourceLength: Integer; begin - Result := False; - g_ProcessResourceStr(Resource, FileName, SectionName, ResourceName); - g_ReadResource(FileName, SectionName, ResourceName, TextureData, ResourceLength); - if TextureData <> nil then - begin - if e_CreateTextureMem(TextureData, ResourceLength, ID) then - Result := True; - FreeMem(TextureData) - end + Result := False; + g_ProcessResourceStr(Resource, FileName, SectionName, ResourceName); + + WAD := TWADEditor_1.Create; + WAD.ReadFile(FileName); + + if WAD.GetResource(utf2win(SectionName), utf2win(ResourceName), TextureData, ResourceLength) then + begin + if e_CreateTextureMem(TextureData, ResourceLength, ID) then Result := True; + FreeMem(TextureData); + end else - begin - e_WriteLog(Format('Error loading texture %s', [Resource]), MSG_WARNING) - //e_WriteLog(Format('WAD Reader error: %s', [WAD.GetLastErrorStr]), MSG_WARNING); - end; + begin + e_WriteLog(Format('Error loading texture %s', [Resource]), MSG_WARNING); + e_WriteLog(Format('WAD Reader error: %s', [WAD.GetLastErrorStr]), MSG_WARNING); + end; + WAD.Destroy; end; function g_CreateTextureMemorySize(pData: Pointer; dataLen: Integer; Name: ShortString; X, Y, @@ -115,88 +121,108 @@ begin end; function g_CreateTextureWAD(TextureName: ShortString; Resource: string; flag: Byte = 0): Boolean; - var - TextureData: Pointer; - ResourceLength: Integer; - FileName, SectionName, ResourceName: string; - find_id: DWORD; +var + WAD: TWADEditor_1; + FileName, + SectionName, + ResourceName: string; + TextureData: Pointer; + find_id: DWORD; + ResourceLength: Integer; begin - find_id := FindTexture; - g_ProcessResourceStr(Resource, FileName, SectionName, ResourceName); - g_ReadResource(FileName, SectionName, ResourceName, TextureData, ResourceLength); - if TextureData <> nil then - begin - Result := e_CreateTextureMem(TextureData, ResourceLength, TexturesArray[find_id].ID); - FreeMem(TextureData); - if Result then - begin - e_GetTextureSize( - TexturesArray[find_id].ID, - @TexturesArray[find_id].Width, - @TexturesArray[find_id].Height - ); - TexturesArray[find_id].Name := TextureName; - TexturesArray[find_id].flag := flag - end - end - else - begin - e_WriteLog(Format('Error loading texture %s', [Resource]), MSG_WARNING); - //e_WriteLog(Format('WAD Reader error: %s', [WAD.GetLastErrorStr]), MSG_WARNING); - Result := False - end + g_ProcessResourceStr(Resource, FileName, SectionName, ResourceName); + + find_id := FindTexture; + + WAD := TWADEditor_1.Create; + WAD.ReadFile(FileName); + + if WAD.GetResource(utf2win(SectionName), utf2win(ResourceName), TextureData, ResourceLength) then + begin + Result := e_CreateTextureMem(TextureData, ResourceLength, TexturesArray[find_id].ID); + FreeMem(TextureData); + if Result then + begin + e_GetTextureSize(TexturesArray[find_id].ID, @TexturesArray[find_id].Width, + @TexturesArray[find_id].Height); + TexturesArray[find_id].Name := TextureName; + TexturesArray[find_id].flag := flag; + end; + end + else + begin + e_WriteLog(Format('Error loading texture %s', [Resource]), MSG_WARNING); + e_WriteLog(Format('WAD Reader error: %s', [WAD.GetLastErrorStr]), MSG_WARNING); + Result := False; + end; + WAD.Destroy; end; -function g_SimpleCreateTextureWADSize(var ID: DWORD; Resource: String; X, Y, Width, Height: Word): Boolean; - var - TextureData: Pointer; - ResourceLength: Integer; - FileName, SectionName, ResourceName: String; +function g_SimpleCreateTextureWADSize(var ID: DWORD; Resource: string; X, Y, Width, Height: Word): Boolean; +var + WAD: TWADEditor_1; + FileName, + SectionName, + ResourceName: String; + TextureData: Pointer; + ResourceLength: Integer; begin - Result := False; - g_ProcessResourceStr(Resource, FileName, SectionName, ResourceName); - g_ReadResource(FileName, SectionName, ResourceName, TextureData, ResourceLength); - if TextureData <> nil then - begin - if e_CreateTextureMemEx(TextureData, ResourceLength, ID, X, Y, Width, Height) then - Result := True; - FreeMem(TextureData) - end - else - begin - e_WriteLog(Format('Error loading texture %s', [Resource]), MSG_WARNING) - //e_WriteLog(Format('WAD Reader error: %s', [WAD.GetLastErrorStr]), MSG_WARNING) - end + Result := False; + g_ProcessResourceStr(Resource, FileName, SectionName, ResourceName); + + WAD := TWADEditor_1.Create; + WAD.ReadFile(FileName); + + if WAD.GetResource(utf2win(SectionName), utf2win(ResourceName), TextureData, ResourceLength) then + begin + if e_CreateTextureMemEx(TextureData, ResourceLength, ID, X, Y, Width, Height) then Result := True; + FreeMem(TextureData); + end + else + begin + e_WriteLog(Format('Error loading texture %s', [Resource]), MSG_WARNING); + e_WriteLog(Format('WAD Reader error: %s', [WAD.GetLastErrorStr]), MSG_WARNING); + end; + WAD.Destroy; end; -function g_CreateTextureWADSize(TextureName: ShortString; Resource: String; X, Y, Width, Height: Word; flag: Byte = 0): Boolean; - var - TextureData: Pointer; - ResourceLength: Integer; - FileName, SectionName, ResourceName: String; - find_id: DWORD; +function g_CreateTextureWADSize(TextureName: ShortString; Resource: string; + X, Y, Width, Height: Word; flag: Byte = 0): Boolean; +var + WAD: TWADEditor_1; + FileName, + SectionName, + ResourceName: String; + TextureData: Pointer; + find_id: DWORD; + ResourceLength: Integer; begin - find_id := FindTexture; - g_ProcessResourceStr(Resource, FileName, SectionName, ResourceName); - g_ReadResource(FileName, SectionName, ResourceName, TextureData, ResourceLength); - if TextureData <> nil then + g_ProcessResourceStr(Resource, FileName, SectionName, ResourceName); + + find_id := FindTexture; + + WAD := TWADEditor_1.Create; + WAD.ReadFile(FileName); + + if WAD.GetResource(utf2win(SectionName), utf2win(ResourceName), TextureData, ResourceLength) then + begin + Result := e_CreateTextureMemEx(TextureData, ResourceLength, TexturesArray[find_id].ID, X, Y, Width, Height); + FreeMem(TextureData); + if Result then begin - Result := e_CreateTextureMemEx(TextureData, ResourceLength, TexturesArray[find_id].ID, X, Y, Width, Height); - FreeMem(TextureData); - if Result then - begin - TexturesArray[find_id].Width := Width; - TexturesArray[find_id].Height := Height; - TexturesArray[find_id].Name := TextureName; - TexturesArray[find_id].flag := flag - end - end + TexturesArray[find_id].Width := Width; + TexturesArray[find_id].Height := Height; + TexturesArray[find_id].Name := TextureName; + TexturesArray[find_id].flag := flag; + end; + end else - begin - e_WriteLog(Format('Error loading texture %s', [Resource]), MSG_WARNING); - //e_WriteLog(Format('WAD Reader error: %s', [WAD.GetLastErrorStr]), MSG_WARNING); - Result := False - end + begin + e_WriteLog(Format('Error loading texture %s', [Resource]), MSG_WARNING); + e_WriteLog(Format('WAD Reader error: %s', [WAD.GetLastErrorStr]), MSG_WARNING); + Result := False; + end; + WAD.Destroy; end; function g_GetTexture(TextureName: ShortString; var ID: DWORD): Boolean;