DXTn текстурируют поддержку, никакую опцию “Enable S3TC …”

У меня есть та же проблема, как описано здесь.

Я ищу поддержку структур DXTn. Я работал worldwind в терминале и получил следующее сообщение об ошибке:

Aug 22, 2012 5:28:12 PM gov.nasa.worldwind.layers.TextureTile initializeTexture
SEVERE: Exception attempting to read texture file
javax.media.opengl.GLException: DXTn compressed textures not supported by this graphics card

Я попробовал предложенное решение отсюда

sudo apt-get install driconf
driconf

Под изменением "Качества изображения" "Включают S3TC..." к Да.Сохранить.


driconf решение не решило проблему. На вкладке Image Quality не было никакой опции "Enable S3TC...".

Я думаю, что использую драйвер Nouveau и интересно, должен ли я переключиться на драйвер Nvidia?

  • Компьютер: Dell Precision M6400
  • Процессор: Intel® Core™2 Duo CPU T9550 Ubuntu 2.66 ГГц × 2: 12.0.4 LTS
  • Видеокарта: NVIDIA QUADRо FX 2700M
  • Графика: галлий 0.4 на NV94

Какие-либо идеи?

5
задан 28 August 2012 в 20:00

3 ответа

Взгляните: http://en.wikipedia.org/wiki/S3_Texture_Compression

, В то время как S3 Graphics больше не является конкурентом на рынке графического акселератора, лицензионные сборы все еще наложены и собраны для использования технологии S3TC, например, в игровых приставках и видеокартах. Обремененное патентом состояние S3TC и его широкого использования в программном обеспечении, несмотря на необремененные альтернативы, привело к фактическому требованию для драйверов OpenGL для поддержки, это и представляет главное препятствие реализациям с открытым исходным кодом .

, Который объясняет, почему драйвер Nouveau не поддерживает его. Я предполагаю, что необходимо переключиться на двоичные драйверы Nvidia.

3
ответ дан 21 October 2019 в 12:14

Иначе:

.. и скажите WorldWind для не использования S3 текстурируют сжатие (.dds формат), а скорее формат текстур значения по умолчанию PNG.

Можно загрузить источники (SDK 2.0 теперь):

wget http://builds.worldwind.arc.nasa.gov/worldwind-releases/2.0/builds/worldwind-2.0.0.zip
unzip worldwind-2.0.0.zip -d worldwind-2.0.0

Затем примените изменения в исходных файлах, перечисленных здесь и здесь.

Так как те ссылки немного устарели, существует еще несколько изменений, которые необходимо применить, чтобы заставить вещи работать над выпуском WW 2.0 (см. приложение).

Впоследствии, можно восстановить новое worldwind.jar:

cd worldwind-2.0.0/
ant worldwind.jarfile # or simply `ant'

Я лично проверил его путем выполнения SDK от Netbeans.

$ sudo lshw -C video | egrep "product|driver"
   product: RV635/M86 [Mobility Radeon HD 3670]
   configuration: driver=radeon latency=0

HTH

Приложение: патч для SDK 2.0

diff --git a/src/config/Earth/BMNGWMSLayer.xml b/src/config/Earth/BMNGWMSLayer.xml
--- a/src/config/Earth/BMNGWMSLayer.xml
+++ b/src/config/Earth/BMNGWMSLayer.xml
@@ -19,12 +19,12 @@
     <!-- day month year hours:minutes:seconds timezone -->
     <LastUpdate>26 03 2009 00:00:00 GMT</LastUpdate>
     <DataCacheName>Earth/BMNGWMS/BMNG(Shaded + Bathymetry) Tiled - Version 1.1 - 5.2004</DataCacheName>
-    <ImageFormat>image/dds</ImageFormat>
+    <ImageFormat>image/png</ImageFormat>
     <AvailableImageFormats>
         <ImageFormat>image/png</ImageFormat>
         <ImageFormat>image/dds</ImageFormat>
     </AvailableImageFormats>
-    <FormatSuffix>.dds</FormatSuffix>
+    <FormatSuffix>.png</FormatSuffix>
     <NumLevels count="5" numEmpty="0"/>
     <TileOrigin>
         <LatLon units="degrees" latitude="-90" longitude="-180"/>
diff --git a/src/config/Earth/BMNGWMSLayer2.xml b/src/config/Earth/BMNGWMSLayer2.xml
--- a/src/config/Earth/BMNGWMSLayer2.xml
+++ b/src/config/Earth/BMNGWMSLayer2.xml
@@ -22,7 +22,7 @@
         <ImageFormat>image/jpeg</ImageFormat>
         <ImageFormat>image/png</ImageFormat>
     </AvailableImageFormats>
-    <FormatSuffix>.dds</FormatSuffix>
+    <FormatSuffix>.png</FormatSuffix>
     <NumLevels count="5" numEmpty="0"/>
     <TileOrigin>
         <LatLon units="degrees" latitude="-90" longitude="-180"/>
diff --git a/src/config/Earth/CountryBoundariesLayer.xml b/src/config/Earth/CountryBoundariesLayer.xml
--- a/src/config/Earth/CountryBoundariesLayer.xml
+++ b/src/config/Earth/CountryBoundariesLayer.xml
@@ -21,7 +21,7 @@
     <AvailableImageFormats>
diff --git a/src/config/Earth/MSVirtualEarthHybridLayer.xml b/src/config/Earth/MSVirtualEarthHybridLayer.xml
--- a/src/config/Earth/MSVirtualEarthHybridLayer.xml
+++ b/src/config/Earth/MSVirtualEarthHybridLayer.xml
@@ -19,7 +19,7 @@
     <AvailableImageFormats>
         <ImageFormat>image/jpg</ImageFormat>
     </AvailableImageFormats>
-    <FormatSuffix>.dds</FormatSuffix>
+    <FormatSuffix>.jpg</FormatSuffix>
     <NumLevels count="16" numEmpty="4"/>
     <TileOrigin>
         <LatLon units="degrees" latitude="-90" longitude="-180"/>
@@ -40,4 +40,4 @@
     </Sector>
     <ActiveAltitudes max="1000e3"/>
     <UseTransparentTextures>true</UseTransparentTextures>
diff --git a/src/config/Earth/MSVirtualEarthRoadsLayer.xml b/src/config/Earth/MSVirtualEarthRoadsLayer.xml
--- a/src/config/Earth/MSVirtualEarthRoadsLayer.xml
+++ b/src/config/Earth/MSVirtualEarthRoadsLayer.xml
@@ -19,7 +19,7 @@
     <AvailableImageFormats>
         <ImageFormat>image/jpg</ImageFormat>
     </AvailableImageFormats>
-    <FormatSuffix>.dds</FormatSuffix>
+    <FormatSuffix>.jpg</FormatSuffix>
     <NumLevels count="16" numEmpty="4"/>
     <TileOrigin>
         <LatLon units="degrees" latitude="-90" longitude="-180"/>
@@ -40,4 +40,4 @@
     </Sector>
     <ActiveAltitudes max="1000e3"/>
     <UseTransparentTextures>true</UseTransparentTextures>
diff --git a/src/config/Earth/ScankortDenmarkImageLayer.xml b/src/config/Earth/ScankortDenmarkImageLayer.xml
--- a/src/config/Earth/ScankortDenmarkImageLayer.xml
+++ b/src/config/Earth/ScankortDenmarkImageLayer.xml
@@ -16,12 +16,12 @@
     <!-- day month year hours:minutes:seconds timezone -->
     <LastUpdate>25 06 2009 22:45:32 GMT</LastUpdate>
     <DataCacheName>Earth/Scankort Denmark</DataCacheName>
-    <ImageFormat>image/dds</ImageFormat>
+    <ImageFormat>image/png</ImageFormat>
     <AvailableImageFormats>
         <ImageFormat>image/png</ImageFormat>
         <ImageFormat>image/dds</ImageFormat>
     </AvailableImageFormats>
-    <FormatSuffix>.dds</FormatSuffix>
+    <FormatSuffix>.png</FormatSuffix>
     <NumLevels count="16" numEmpty="0"/>
     <TileOrigin>
         <LatLon units="degrees" latitude="-90" longitude="-180"/>
@@ -46,4 +46,4 @@
             <Time units="milliseconds" value="30000"/>
         </ReadTimeout>
     </RetrievalTimeouts>
diff --git a/src/config/Earth/USDANAIPWMSImageLayer.xml b/src/config/Earth/USDANAIPWMSImageLayer.xml
--- a/src/config/Earth/USDANAIPWMSImageLayer.xml
+++ b/src/config/Earth/USDANAIPWMSImageLayer.xml
@@ -17,12 +17,12 @@
     <!-- day month year hours:minutes:seconds timezone -->
     <LastUpdate>23 04 2009 17:55:00 GMT</LastUpdate>
     <DataCacheName>Earth/USDA NAIP</DataCacheName>
-    <ImageFormat>image/dds</ImageFormat>
+    <ImageFormat>image/png</ImageFormat>
     <AvailableImageFormats>
         <ImageFormat>image/png</ImageFormat>
         <ImageFormat>image/dds</ImageFormat>
     </AvailableImageFormats>
-    <FormatSuffix>.dds</FormatSuffix>
+    <FormatSuffix>.png</FormatSuffix>
     <NumLevels count="15" numEmpty="6"/>
     <TileOrigin>
         <LatLon units="degrees" latitude="-90" longitude="-180"/>
@@ -51,4 +51,4 @@
             <Time units="milliseconds" value="30000"/>
         </ReadTimeout>
     </RetrievalTimeouts>
diff --git a/src/gov/nasa/worldwind/layers/BasicTiledImageLayer.java b/src/gov/nasa/worldwind/layers/BasicTiledImageLayer.java
--- a/src/gov/nasa/worldwind/layers/BasicTiledImageLayer.java
+++ b/src/gov/nasa/worldwind/layers/BasicTiledImageLayer.java
@@ -190,7 +190,7 @@ public class BasicTiledImageLayer extends TiledImageLayer implements BulkRetriev
             params.setValue(AVKey.TILE_HEIGHT, 512);

         if (params.getValue(AVKey.FORMAT_SUFFIX) == null)
-            params.setValue(AVKey.FORMAT_SUFFIX, ".dds");
+            params.setValue(AVKey.FORMAT_SUFFIX, ".png");

         if (params.getValue(AVKey.NUM_LEVELS) == null)
             params.setValue(AVKey.NUM_LEVELS, 19); // approximately 0.1 meters per pixel
diff --git a/src/gov/nasa/worldwind/layers/rpf/RPFTiledImageLayer.java b/src/gov/nasa/worldwind/layers/rpf/RPFTiledImageLayer.java
--- a/src/gov/nasa/worldwind/layers/rpf/RPFTiledImageLayer.java
+++ b/src/gov/nasa/worldwind/layers/rpf/RPFTiledImageLayer.java
@@ -265,7 +265,7 @@ public class RPFTiledImageLayer extends TiledImageLayer
         if (params.getValue(AVKey.TILE_HEIGHT) == null)
             params.setValue(AVKey.TILE_HEIGHT, 512);
         if (params.getValue(AVKey.FORMAT_SUFFIX) == null)
-            params.setValue(AVKey.FORMAT_SUFFIX, ".dds");
+            params.setValue(AVKey.FORMAT_SUFFIX, ".png");
         if (params.getValue(AVKey.NUM_LEVELS) == null)      
             params.setValue(AVKey.NUM_LEVELS, 14); // approximately 0.5 meters per pixel
         if (params.getValue(AVKey.NUM_EMPTY_LEVELS) == null)
2
ответ дан 21 October 2019 в 12:14

После того, как модель WorldWind создается, и прежде чем окно будет отображено, можно циклично выполниться через все слои и вынудить их не использовать DDS для хранения структур мозаики:

// Before the WorldWind window displays (which triggers the data retrievers)
// loop through the levels for each tiled image layer and mutate any level
// constructed to use DDS to instead use JPG (best compression) or PNG (best
// quality, but much larger files).
String cacheFormat = "jpg"; // could load this via configuration file
for (Layer layer : model.getLayers()) {
    if (layer instanceof BasicTiledImageLayer && ((BasicTiledImageLayer)layer).getTextureFormat() == null) {
        ((BasicTiledImageLayer)layer).setTextureFormat("image/" + cacheFormat);
        ((BasicTiledImageLayer)layer).setValue(AVKey.FORMAT_SUFFIX, "." + cacheFormat);
        ArrayList<Level> levels = ((BasicTiledImageLayer) layer).getLevels().getLevels();
        for (int i = 0; i < levels.size(); i++) {
            Level level = levels.get(i);
            if (level.getFormatSuffix().equals(".dds")) {
                AVList params = level.getParams();
                params.setValue(AVKey.FORMAT_SUFFIX, "." + cacheFormat);
                levels.set(i, new Level(params));
            }
        }
    }
}
0
ответ дан 21 October 2019 в 12:14

Другие вопросы по тегам:

Похожие вопросы: