2016-07-20 17 views
1
glGenTextures(1, &bigTex); 
glBindTexture(GL_TEXTURE_2D, bigTex); 
u32 mipmapLevel = max(0, (int)greaterOrEqualPowerOfTwoExponent(max(packing.bounds.x, packing.bounds.y)) - 4); 
glTexImage2D(GL_TEXTURE_2D, mipmapLevel, GL_ALPHA, texSpan.x, texSpan.y, 0, GL_ALPHA, GL_UNSIGNED_BYTE, dat); 
glGenerateMipmap(GL_TEXTURE_2D); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 

Dies scheint leere (und undurchsichtige) Texturen zu produzieren. Das Deaktivieren von Mipmaps durch das Setzen von MipmapLevel auf Null bewirkt, dass es als normal gerendert wird, aber natürlich gibt es kein Mipmapping.Mipmaps in gles2 kommt leer

Antwort

0

Das Mipmap-Level-Argument von glImage2d bedeutet nicht, was Sie denken, was es bedeutet. Sie gibt die Mipmap-Ebene von dat an, nicht die gewünschte niedrigste Mipmap-Ebene, die bigTex zugeordnet ist. Sie sagen also, dass Sie die fünfte Mipmap-Ebene von bigTex definieren möchten. Du siehst nie die fünfte Mipmap-Ebene von bigTex, also sieht alles nur leer aus - weil du nie die höheren Mipmap-Level definiert hast.

Da dat die detaillierteste Ebene ist (0), ist dies die Ebene, die Sie definieren. So loszuwerden mipmapLevel und tun

glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, texSpan.x, texSpan.y, 0, GL_ALPHA, GL_UNSIGNED_BYTE, dat); 

Sie haben gesehen, dass das funktioniert, aber Sie denken, es ist Mipmapping zu deaktivieren, da die Ergebnisse von Downscaling nicht gut aussehen. Mipmaps sollten zu diesem Zeitpunkt in Kraft sein. Setzen Sie Ihren GL_TEXTURE_MIN_FILTER auf GL_LINEAR_MIPMAP_NEAREST anstelle von GL_LINEAR, und werfen Sie einen glHint(GL_GENERATE_MIPMAP_HINT, GL_NICEST); für gutes Maß ein, und Sie werden das sehen.