當我使用GL_HALF_FLOAT_OES紋理時;片段着色器似乎寫入它很好,我可以觀察到它具有正確的值,當我在xCode中使用gpuTrace。但是,當我讀回用GL_HALF_FLOAT_OES和glReadPixels
glReadPixels(0, 0, self.imageSize->v[0], self.imageSize->v[1], GL_RGBA, type, pixels);
像素組件也可以浮動-0或浮動1.這是因爲浮點值越來越意外修剪?有沒有一種方法可以回讀浮動值的原始寫法?如果我使用GL_RGBA16F_EXT
或GL_RGBA32F_EXT
而不是GL_RGBA
,則會得到無效的枚舉。
意見的基礎上,從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 ] ] ];
返回的值是 「實施格式GL_RGBA,類型是GL_HALF_FLOAT_OES」。這可能意味着HALF_FLOAT是它能夠讀回的唯一值。我仍在調查是否有可能回讀GL_FLOAT,因爲儘管glGetIntegerv返回glReadPixels不會將GL_FLOAT標記爲無效的Enum;它接受並處理它,但浮動並不是正確的浮動;所以它似乎在做一些意想不到的轉換。