Buch Errata

Leider hat sich im CFXTextureManager (und allen Beispielen welche Texturen nutzen) ein kleiner Speicherfehler eingeschlichen. In der Methode
NSBitmapImageRep *LoadImage(NSString *path, int shouldFlipVertical)
wird das Objekt
bitmapimagerep
nicht wieder gelöscht, hier fehlt ein
autorelease
Richtig muss die Methode so aussehen:
NSBitmapImageRep *LoadImage(NSString *path, int shouldFlipVertical)
{
		NSBitmapImageRep *bitmapimagerep;
		NSImage *image;
		image = [[[NSImage alloc] initWithContentsOfFile: path] autorelease];
		bitmapimagerep = [[NSBitmapImageRep alloc] initWithData:[image TIFFRepresentation]];
							
		if (shouldFlipVertical)
		{
			int bytesPerRow, lowRow, highRow;
			unsigned char *pixelData, *swapRow;
	
			bytesPerRow = [bitmapimagerep bytesPerRow];
			pixelData = [bitmapimagerep bitmapData];
	
			swapRow = (unsigned char *)malloc(bytesPerRow);
			for (lowRow = 0,
						 highRow = [bitmapimagerep pixelsHigh]-1;
						 lowRow < highRow; lowRow++, highRow--)
			{
			memcpy(swapRow, &pixelData[lowRow*bytesPerRow], bytesPerRow);
			memcpy(&pixelData[lowRow*bytesPerRow], &pixelData[highRow*bytesPerRow], bytesPerRow);
			memcpy(&pixelData[highRow*bytesPerRow], swapRow, bytesPerRow);
			}
			free(swapRow);
		}
							
		return [bitmapimagerep autorelease];
}
Vielen Dank an Heiko Kautzor für den Hinweis.

Zu Kapitel 12 fehlte das Beispiel Shader_02.zip. Im Beispiel Vertex Light 02 ist im Vertex-Shader ein kleiner Fehler. Hier wurde vergessen den Wert für "Specular" zu initialisieren. Richtig muss es so aussehen
.
.
.
// Ambient Wert berechnen
ambient = gl_FrontMaterial.ambient * gl_LightSource[0].ambient;
ambient+= gl_LightModel.ambient * gl_FrontMaterial.ambient;

specular = vec4(0.0, 0.0, 0.0, 0.0);
// Wenn der Winkel zwischen Licht und Normale groesser Null, dann Glanzanteil berechnen
if (NdotL > 0.0)
{
  NdotHV = max(dot(normal, normalize(gl_LightSource[0].halfVector.xyz)),0.0);
  specular = gl_FrontMaterial.specular * gl_LightSource[0].specular * pow(NdotHV,gl_FrontMaterial.shininess);
}

// finale Farbe
gl_FrontColor = NdotL * diffuse + ambient + specular;

// Vertices trannsformieren
gl_Position = ftransform();
Vielen Dank an Romeo Giezendanner.

Im Kapitel 3 Stippiling ist ein kleiner Fehler bei der Angabe des Musters, der Wert
glLineStipple (3, 0xAAAA);
ist falsch und muss richtigerweise so aussehen:
glLineStipple (3, 0x8888);
Vielen Dank an Phillip Gesien.