私はiOSデバイスでGPGPUプログラミングをしようとしていますが、OpenGL ES 3.0環境の設定方法に関する情報はありません。私はフラグメントシェーダで計算を行う方法を理解していますが、フロート配列をフラグメントシェーダの一様なサンプラ変数に渡すことはできません。OpenGL ESで浮動小数点配列をテクスチャに渡す方法は?
この私がFBOを設定する方法で、CPUにメモリを割り当てる:ここ
float** dens = (float**) malloc(W*sizeof(float*));
for (int i = 0; i < W; i++) {
dens[i] = (float *)malloc(H*sizeof(float));
}
// input value
for (int i = 0; i < W; i++) {
for (int j = 0; j < H; j++) {
dens[i][j] = 1.0f;
}
}
GLuint FBO;
glGenFramebuffers(1, &FBO);
glBindFramebuffer(GL_FRAMEBUFFER, FBO);
GLuint dens_gl = load_texture(W, H, GL_RGBA, 0, dens);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
がload_textureための私のコードです:
GLuint load_texture(const GLsizei width, const GLsizei height, const GLenum type, int tex_number, const float** data) {
GLuint texture_object_id;
glGenTextures(1, &texture_object_id);
assert(texture_object_id != 0);
glActiveTexture(GL_TEXTURE0 + tex_number);
glBindTexture(GL_TEXTURE_2D, texture_object_id);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D, 0, type, width, height, 0, type, GL_UNSIGNED_BYTE, data);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + tex_number, GL_TEXTURE_2D, texture_object_id, 0);
if(glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE){
NSLog(@"failed to make complete framebuffer objects %x", glCheckFramebufferStatus(GL_FRAMEBUFFER));
}
glBindTexture(GL_TEXTURE_2D, 0);
return texture_object_id;
}
と私のfragmentshader.fsh:
uniform vec2 uResolution;
uniform vec2 aPosition;
uniform sampler2D dens_gl;
void main(void) {
vec2 uv = aPosition.xy/uResolution.xy;
gl_FragColor = texture2D(dens_gl, uv);
}
エラーコードはありませんが、黒い画面しか見ることができず、値を1に設定したために白い画面が表示されます。 CPUメモリに格納されます。どこで私は間違えましたか?
あなたは何をしようとしていますか?フレームバッファの設定コードを表示しますが、テクスチャをどのように動作させるかについての質問があるようです。これらの2つのことはお互いに関係ありません。 – BDL
@BDL私は、フラグメント浮動小数点データにCPU浮動小数点配列データを入力しようとしていますが、セットアップがうまくいきません。内部フォーマットをGL_R32F、フォーマットをGL_RED、タイプをGL_FLOATに変更しようとしたときにGL_INCOMPLETE_ATTACHMENTを与えてくれたので、FBOコードを示しました。上記のコードはエラーなく動作しますが、私のiOSデバイスにはまだ黒い画面が表示されます。 –