Index: experimental/TerrainTest/imageconversion.txt
===================================================================
--- experimental/TerrainTest/imageconversion.txt	(revision 172)
+++ experimental/TerrainTest/imageconversion.txt	(revision 172)
@@ -0,0 +1,36 @@
+
+
+
+Vorgehen zum modifizieren von Geländekacheln:
+a) Implementieren einer eigen TerrainTechnique und Modifikation zur Laufzeit 	-> Flexibel aber evtl langsam
+b) Dauerhaftes Patchen der Orginaldatenbank 					-> Keine Verzögerung, Patching nicht reversibel, unflexibel
+c) Erzeugen von sub-datenbanken mit gepatchen bereichen, Verzweigen auf die 
+	alternative Sub-datenbank zur Laufzeit
+	(im loadingcallback lediglich ein lookup Table)				-> Implementierung aufwändig, rel. schnell, Prefetching notwendig zum Erstellen der gepatchten Subdatenbanken
+d) Pseudoloaders welcher die Datenbank modifikationen beim Laden macht,
+	so dass der gesamte Compilevorgang noch im Pagerthread stattfindet.	-> Implementierung aufwändig, flexibel, langsam aber keine Framedrops
+
+Vorgehen bei Nutzung einer eigenen GeometryTechnique:
+a) TilesLoadedCallback: Muss bei VPB Datenbanken < 2.9.10 verwendet werden, da hier die DB die geometryTechnique enthält und daher terrain->terrainTechniquePrototype ignoriert.
+b) CustonGeometryTechniquePrototype: Kann bei VPB Datenbanken >= 2.9.10 verwendet werden, da hier in die DB keine geometryTechnique enthältund daher terrain->terrainTEchniquePrototype verwendet.
+
+
+Grundsätzliche Optionen für Heightfieldmodifikationen:
+a) vor dem init() Call das Heightfield modifizieren
+b) init() überladen und in init die modifikationen durchführen, bevor generateGeometry() aufgerufen wird.
+
+Vorgehen für das ermitteln der korrekten Heightwerte:
+1. checken ob Tile betroffen ( xmin < x < xmax && ymin < y < ymax ) oder ( latmin < lat < latmax && lonmin < lon < lonmax )
+2. Wenn Betroffen, je vertex reihe/spalte checken ob sie im bereich liegt
+3. Wenn im Bereich: modifizieren der Werte
+ 	I) Bei Verwendung eines Patch-Bildes: Auslesen des images je spalte, interpolieren der Werte auf Tile-Bereich und Vertexanzahl und addieren/ersetzen der ursprünglichen Werte.
+	II) Bei Verwendung einer Mathematischen funktion: Berechnen des Additions-/Zielwertes je vertex und addieren/ersetzen des ursprünglichen Wertes.
+		Eingabewert in Algorithmus: Lat/Lon der 4 Tile-Ecken. Algorithmus kan für lat lon in der Tile linear interpolieren zu den Ecken.
+
+
+
+
+grundsätzliche Optionen für Löcher:
+a) generateGeometry umbauen, so dass es keine Oberfläche und keinen Skirt an den Stellen bildet.
+b) einene weiteren layer einbauen der pro vertex entscheided ob der Vertex gerendert wird oder nicht (todo: switchlayer ansehen, evtl ist dass ja schon sowas)
+c) alpha in der textur aktuivieren für stellen die Löcher haben sollen und blenden lassen ( todo: wird zFightfing vermieden wenn einer der partner transparent ist?)
Index: experimental/TerrainTest/myTerrainTechnique.cpp
===================================================================
--- experimental/TerrainTest/myTerrainTechnique.cpp	(revision 171)
+++ experimental/TerrainTest/myTerrainTechnique.cpp	(revision 172)
@@ -34,10 +34,78 @@
 	 ImageLayer* il = dynamic_cast<ImageLayer*>( getTerrainTile()->getColorLayer(0) );
 	 osg::Image* img = il->getImage();
-	 img->setInternalTextureFormat( GL_RGBA );
+	 //img->setInternalTextureFormat( GL_RGBA );
 
-	 osg::ref_ptr<osg::Image> img2 = new osg::Image();
-	 img2->setInternalTextureFormat( GL_RGBA );
-	 img2->alloc
+	 if( img->getPixelFormat() == GL_RGBA )
+		 OSG_ALWAYS << "Format ist RGBA" << std::endl;
+	 if( img->getPixelFormat() == GL_RGB )
+		 OSG_ALWAYS << "Format ist RGB" << std::endl;
+	  if( img->getPixelFormat() == GL_COMPRESSED_RGB_S3TC_DXT1_EXT )
+		 OSG_ALWAYS << "Format ist GL_COMPRESSED_RGB_S3TC_DXT1_EXT" << std::endl;
+
+	 
+
+	 //osg::ref_ptr<osg::Image> img2 = new osg::Image();
+	 //img2->setInternalTextureFormat( GL_RGBA );
+	 //OSG_ALWAYS << "test: " << std::hex << img->getPixelFormat() << std::endl;
 
     GeometryTechnique::init(dirtyMask, assumeMultiThreaded);
 }
+
+void myTerrainTechnique::ConvertImage(osg::ref_ptr<osg::Image> a_toImage, osg::ref_ptr<osg::Image> a_fromImage, GLenum a_pixelFormat, GLenum a_dataType)
+{
+	GLenum dataType = a_fromImage -> getDataType();
+
+	//setInternalTextureFormat( 0); // tmp
+	a_toImage -> allocateImage(
+		a_fromImage -> s(),
+		a_fromImage -> t(),
+		a_fromImage -> r(),
+		a_pixelFormat, a_dataType, a_fromImage -> getPacking());
+
+	//// Wenn Quelle und Ziel RGBA sind
+	//if( a_toImage -> getPixelFormat() == GL_RGBA && a_fromImage -> getPixelFormat() == GL_RGBA)
+	//{
+	//	unsigned nr = a_fromImage->t();
+	//	unsigned nc = a_fromImage->s();
+	//	for (unsigned r = 0; r < nr; ++r)
+	//	{
+	//		for (unsigned c = 0; c < nc; ++c)
+	//		{
+	//			unsigned char * fromPixelData = a_fromImage -> data(c, nr-r-1);
+	//			unsigned char *   toPixelData =   a_toImage -> data(c, nr-r-1);
+
+	//			// Copy r, g, b, a.
+	//			for( int component = 0; component < 4; ++ component)
+	//			{
+	//				My_OSG_Library::OSG_PixelComponent pixelComponent( a_fromImage -> getDataType(), fromPixelData, component /* r, g, b, a */);
+	//				pixelComponent.Store( a_toImage -> getDataType(), toPixelData, component);
+	//			}
+	//		}
+	//	}
+	//}
+	//else
+	// Wenn Quelle RGB ist und Ziel RGBA
+	//if( a_toImage -> getPixelFormat() == GL_RGBA && a_fromImage -> getPixelFormat() == GL_RGB)
+	//{
+	//	unsigned nr = a_fromImage -> t();
+	//	unsigned nc = a_fromImage -> s();
+	//	for (unsigned r = 0; r < nr; ++r)
+	//	{
+	//		for (unsigned c = 0; c < nc; ++c)
+	//		{
+	//			unsigned char * fromPixelData = a_fromImage -> data(c, nr-r-1);
+	//			unsigned char *   toPixelData =   a_toImage -> data(c, nr-r-1);
+
+	//			// Copy r, g, b.
+	//			for( int component = 0; component < 3; ++ component)
+	//			{
+	//				My_OSG_Library::OSG_PixelComponent pixelComponent( a_fromImage -> getDataType(), fromPixelData, component /* r, g, b */);
+	//				pixelComponent.Store( a_toImage -> getDataType(), toPixelData, component);
+	//			}
+
+	//			// Initialize alpha to opaque.
+	//			My_OSG_Library::OSG_PixelComponent::One().Store( a_toImage -> getDataType(), toPixelData, 3);
+	//		}
+	//	}
+	//}
+}
Index: experimental/TerrainTest/myTerrainTechnique.h
===================================================================
--- experimental/TerrainTest/myTerrainTechnique.h	(revision 171)
+++ experimental/TerrainTest/myTerrainTechnique.h	(revision 172)
@@ -3,4 +3,5 @@
 #include <osgTerrain/GeometryTechnique>
 #include <osg/Image>
+
 
 namespace osgTerrain {
@@ -19,4 +20,6 @@
 
 	virtual void init(int dirtyMask, bool assumeMultiThreaded);
+
+	void ConvertImage(osg::ref_ptr<osg::Image> a_toImage, osg::ref_ptr<osg::Image> a_fromImage, GLenum a_pixelFormat, GLenum a_dataType);
 };
 
