C++ 将GLSL转换为C或C++;

C++ 将GLSL转换为C或C++;,c++,c,glsl,shader,C++,C,Glsl,Shader,作为一个练习,我尝试将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 我只能做到这一点

作为一个练习,我尝试将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....]    
......

你要问的是一个内存映射函数。下面的公式可以做到这一点:

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;

嗨,马吕斯,你能再给我解释一下它是怎么工作的吗?这样我就能理解了?关于“vec2_-coord_-y*256”,为什么要乘以256?我想这是您编写
short vec2_-coord_-x=127;//相当于0.5