Ich hab sowas mal gemacht:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
void SaveTextureToPNG(GLuint Texture, std::string Filename)
{
glBindTexture(GL_TEXTURE_2D, Texture);
Vector2i TexSize;
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &TexSize.y);
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &TexSize.x);
std::vector<unsigned char> TexData, PngData;
int Pack;
glGetIntegerv(GL_PACK_ALIGNMENT, &Pack);
TexData.resize(TexSize.x*TexSize.y*4);
glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, &TexData[0]);
LodePNG::Encoder encoder;
encoder.encode(PngData, TexData, TexSize.x, TexSize.y);
LodePNG::saveFile(PngData, Filename);
}
|
Um die Textur zu erzeugen hab ich picopng benutzt, dazu findet man
hier was.
Das betrifft aber nur die 3 letzten Zeilen, der kram davor ist dafür da, um die Textur in ein Byte Array (hier ein std::vector) zu kriegen.Man kann dann auch z.B. DevIL benutzen, um die Daten als beleibige Bilddatei zu speichern.
Was die einzelnen glFunktionen machen dürftest du recht schnell ergoogeln können.