将GLSL转换为C或C++

Convert GLSL to C or C++

本文关键字:C++ GLSL 转换      更新时间:2023-10-16

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

假设c/c++中的数据将存储在一个无符号的int像素数组中,我如何将下一行转换为在纯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;