2

演習として、GLSL シェーダーを GPU ではなく CPU 経由で実行できるプレーンな c/c++ に変換しようとしています。

c/c++ のデータがピクセルの unsigned 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....]    
......
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 に答える