Wenn ich die Textur GL_HALF_FLOAT_OES verwende; Der Fragment-Shader scheint gut zu schreiben und ich kann beobachten, dass er die richtigen Werte hat, wenn ich gpuTrace in xCode verwende. Aber als ich es lasGL_HALF_FLOAT_OES und glReadPixels
glReadPixels(0, 0, self.imageSize->v[0], self.imageSize->v[1], GL_RGBA, type, pixels);
Die Pixel-Komponenten entweder schwimmend verwenden zurück -0 oder 1. Floating Ist dies, weil die Float-Werte unerwartet abgeschnitten zu werden? Gibt es eine Möglichkeit, die Float-Werte so zu lesen, wie sie ursprünglich geschrieben wurden? Wenn ich GL_RGBA16F_EXT
oder GL_RGBA32F_EXT
anstelle von GL_RGBA
benutze, bekomme ich ungültige enum.
Basierend auf dem Feedback von Rabbid76
int formatExt, typeExt;
glGetIntegerv(GL_IMPLEMENTATION_COLOR_READ_FORMAT, &formatExt);
glGetIntegerv(GL_IMPLEMENTATION_COLOR_READ_TYPE, &typeExt);
[ self traceLog:[ NSString stringWithFormat:@"Implementation format is %@, type is %@", [ TextureImage strForFormat:formatExt ], [ TextureImage strForType:typeExt ] ] ];
Die zurückgegebenen Werte sind "Implementation Format GL_RGBA ist, Typ GL_HALF_FLOAT_OES". Was wahrscheinlich bedeutet, dass HALF_FLOAT der einzige Wert ist, den es zurücklesen kann. Ich untersuche noch, ob es möglich wäre, GL_FLOAT zurückzulesen, weil glReadPixels ungeachtet dessen, was glGetIntegerv zurückgibt, GL_FLOAT nicht mit ungültiger Enum kennzeichnet; es akzeptiert und verarbeitet es, aber die Schwimmer sind nicht etwas, das scheint, die richtigen Schwimmer zu sein; Es scheint also einige unerwartete Konvertierungen zu geben.