2

作为一个练习,我试图将 GLSL 着色器转换为普通的 c/c++,而不是通过 CPU 而不是 GPU 执行,不管这是否效率低得多和速度慢得多。

鉴于 c/c++ 中的数据将存储到一个无符号整数像素数组中,我如何将下一行转换为将在纯 c 中执行相同操作的内容?

// GLSL

vec2 test = vec2(0.5, 0.2);
vec2 coord = vec2(0.5, 0.5);
vec3 output_color = texture2D(u_texture, coord - test).rgb

我只能做到这一点

// C/C++

short vec2_test_x = 127; // Equivalent to 0.5
short vec2_test_y = 51;  // Equivalent to 0.2

short vec2_coord_x = 127; // Equivalent to 0.5
short vec2_coord_y = 127; // Equivalent to 0.5

short color_r, color_g, color_b;
int output_color = pixels[.... No idea how to continue....]    
......
4

1 回答 1

0

您要问的是内存映射功能。以下公式可以解决问题:

int output_color = pixels[vec2_coord_y * 256 + vec2_coord_x];

//assuming output_color is stored in format XXBBGGRR:
color_r = (output_color & 0x000000FF);
color_g = (output_color & 0x0000FF00) >> 8;
color_b = (output_color & 0x00FF0000) >> 16;
于 2013-06-26T14:19:11.783 回答