当我使用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;它接受并处理它,但浮动并不是正确的浮动;所以它似乎在做一些意想不到的转换。