Line data Source code
1 : /****************************************************************************** 2 : * 3 : * Project: OpenGIS Simple Features Reference Implementation 4 : * Purpose: Implements Basis Universal / KTX2 driver. 5 : * Author: Even Rouault, <even dot rouault at spatialys.com> 6 : * 7 : ****************************************************************************** 8 : * Copyright (c) 2022, Even Rouault <even dot rouault at spatialys.com> 9 : * 10 : * SPDX-License-Identifier: MIT 11 : ****************************************************************************/ 12 : 13 : #include "gdal_frmts.h" 14 : #include "gdalplugindriverproxy.h" 15 : 16 : #include "ktx2drivercore.h" 17 : #include "commoncore.h" 18 : 19 : /************************************************************************/ 20 : /* KTX2DriverIdentify() */ 21 : /************************************************************************/ 22 : 23 57928 : int KTX2DriverIdentify(GDALOpenInfo *poOpenInfo) 24 : 25 : { 26 57928 : constexpr GByte KTX2Signature[] = {0xAB, 0x4B, 0x54, 0x58, 0x20, 0x32, 27 : 0x30, 0xBB, 0x0D, 0x0A, 0x1A, 0x0A}; 28 57928 : if (STARTS_WITH(poOpenInfo->pszFilename, "KTX2:")) 29 16 : return true; 30 61010 : return poOpenInfo->fpL != nullptr && 31 3098 : poOpenInfo->nHeaderBytes >= 32 61010 : static_cast<int>(sizeof(KTX2Signature)) && 33 2881 : memcmp(poOpenInfo->pabyHeader, KTX2Signature, 34 57912 : sizeof(KTX2Signature)) == 0; 35 : } 36 : 37 : /************************************************************************/ 38 : /* KTX2DriverSetCommonMetadata() */ 39 : /************************************************************************/ 40 : 41 1761 : void KTX2DriverSetCommonMetadata(GDALDriver *poDriver) 42 : { 43 1761 : poDriver->SetDescription(KTX2_DRIVER_NAME); 44 1761 : poDriver->SetMetadataItem(GDAL_DCAP_RASTER, "YES"); 45 1761 : poDriver->SetMetadataItem(GDAL_DMD_LONGNAME, "KTX2 texture format"); 46 1761 : poDriver->SetMetadataItem(GDAL_DMD_HELPTOPIC, "drivers/raster/ktx2.html"); 47 1761 : poDriver->SetMetadataItem(GDAL_DMD_EXTENSION, "ktx2"); 48 1761 : poDriver->SetMetadataItem(GDAL_DMD_CREATIONDATATYPES, "Byte"); 49 : 50 1761 : poDriver->SetMetadataItem(GDAL_DCAP_VIRTUALIO, "YES"); 51 : 52 1761 : poDriver->SetMetadataItem( 53 : GDAL_DMD_CREATIONOPTIONLIST, 54 3522 : GDAL_KTX2_BASISU_GetCreationOptions(/* bIsKTX2 = */ true).c_str()); 55 : 56 1761 : poDriver->pfnIdentify = KTX2DriverIdentify; 57 1761 : poDriver->SetMetadataItem(GDAL_DCAP_OPEN, "YES"); 58 1761 : poDriver->SetMetadataItem(GDAL_DCAP_CREATECOPY, "YES"); 59 1761 : } 60 : 61 : /************************************************************************/ 62 : /* DeclareDeferredKTX2Plugin() */ 63 : /************************************************************************/ 64 : 65 : #ifdef PLUGIN_FILENAME 66 2033 : void DeclareDeferredKTX2Plugin() 67 : { 68 2033 : if (GDALGetDriverByName(KTX2_DRIVER_NAME) != nullptr) 69 : { 70 283 : return; 71 : } 72 1750 : auto poDriver = new GDALPluginDriverProxy(PLUGIN_FILENAME); 73 : #ifdef PLUGIN_INSTALLATION_MESSAGE 74 : poDriver->SetMetadataItem(GDAL_DMD_PLUGIN_INSTALLATION_MESSAGE, 75 : PLUGIN_INSTALLATION_MESSAGE); 76 : #endif 77 1750 : KTX2DriverSetCommonMetadata(poDriver); 78 1750 : GetGDALDriverManager()->DeclareDeferredPluginDriver(poDriver); 79 : } 80 : #endif