如果使用 OpenGL ES,我一直在试图找出 UNPACK_FLIP_Y_WEBGL 的等效线。我一直无法找到解决方案。
任何人都可以帮我找到一个等价物吗?
问候
如果使用 OpenGL ES,我一直在试图找出 UNPACK_FLIP_Y_WEBGL 的等效线。我一直无法找到解决方案。
任何人都可以帮我找到一个等价物吗?
问候
它在 ES 2.0 中不存在。
解决方案从最好到最差
在编译时翻转图像。
这就是专业人士所做的。为什么要浪费内存和代码,如果不需要,为什么要让用户等待翻转图像?
将图像倒置加载,(libpng 有该选项)
加载后翻转。
假设每个通道图像的 RGBA 8 位,翻转到位的代码类似于
void flipInPlace(unsigned char* data, int width, int height) {
size_t line_size = width * 4;
unsigned char* line_buffer = new unsigned char[line_size];
int half_height = height / 2
for (int y = 0; y < halfHeight) {
void* top_line = data + y * line_size;
void* bottom_line = data + (height - y - 1) * line_size;
memcpy(line_buffer, top_line, line_size);
memcpy(top_line, bottom_line, line_size);
memcpy(bottom_line, line_buffer, line_size);
}
delete [] line_buffer;
}
OpenGL ES 中没有 UNPACK_PREMULTIPLY_ALPHA_WEBGL 和 UNPACK_FLIP_Y_WEBGL。
在实现中,WebGL调用OpenGL ES实现js WebGL调用,对于这两个参数,WebGL会在调用OpenGL ES API之前先在CPU上处理,也就是说WebGL使用memcpy来翻转图像(如果flipY为true),然后调用glTexImage2D。
概括:
js 调用 gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true)。WebGL 将其存储为 m_unpackFlipY。
js调用gl.texImage2D,WebGL检查m_unpackFlipY,如果为真,翻转内存中的图像,然后调用glTexImage2D