5

如果使用 OpenGL ES,我一直在试图找出 UNPACK_FLIP_Y_WEBGL 的等效线。我一直无法找到解决方案。

任何人都可以帮我找到一个等价物吗?

问候

4

2 回答 2

11

它在 ES 2.0 中不存在。

解决方案从最好到最差

  1. 在编译时翻转图像。

    这就是专业人士所做的。为什么要浪费内存和代码,如果不需要,为什么要让用户等待翻转图像?

  2. 将图像倒置加载,(libpng 有该选项)

  3. 加载后翻转。

    假设每个通道图像的 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;
     }
    
于 2013-03-15T05:54:31.653 回答
1

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。

概括:

  1. js 调用 gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true)。WebGL 将其存储为 m_unpackFlipY。

  2. js调用gl.texImage2D,WebGL检查m_unpackFlipY,如果为真,翻转内存中的图像,然后调用glTexImage2D

于 2016-09-23T16:19:51.703 回答