2017-03-06 18 views
0

glReadPixels()でバッファから浮動小数点数を読み取ることに関する多くの疑問があることは知っています。しかし、私はまだ私の問題に対する答えを見つけられません。 私のiPhoneにこのプログラムを実行したい。私はQTを使って作業していて、まずコンピュータ上でアプリケーションをテストしました。そこでは、バッファから浮動小数点値を読み取るのに問題はありませんでした。しかし、今ではOpenGL ESを使用することはできません。私の結果は任意です。glReadPixels()で浮動小数点値を読み取るOpenGL ES

私が変更したいのは、 glReadPixels()でバッファからGLubyteを読み込み、これらの結果をfloatにキャストします。 私の質問に、なぜ私はまだ恣意的な結果を得ているのですか?私は何とかバッファを間違って読み込んでいる場合や、GLubyteを浮動小数点にキャストすることができない場合には手がかりがありません。

私はGLubyteが単純な符号なしcharであることを理解しています。実際に浮動小数点型への型変換には問題はありません。

glViewport(0, 0, _frameSize, _frameSize); 
    glBindFramebuffer(GL_FRAMEBUFFER, _fbo); 
    glClearColor(1.0,0.0,0.0, 1.0f); 
    glClear(GL_COLOR_BUFFER_BIT); 

    program.bind(); 

    glBindBuffer(GL_ARRAY_BUFFER, _vbo); 
    glEnableVertexAttribArray(0); 
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(GLfloat)*3, (GLvoid*)0); 

    glActiveTexture(GL_TEXTURE0); 
    glBindTexture(GL_TEXTURE_2D, texture); 
    glUniform1i(glGetUniformLocation(program.programId(), "texture"), 0); 

    //glDrawArrays(GL_TRIANGLES, 0, 6); 
    glDisableVertexAttribArray(0); 

これは、フレームバッファ '_fbo'への私の描画呼び出しです。私が見て分かるように、私は実際のドローコールを賞賛しました。バッファーをクリアし、値(1,0,0)だけを読みたいと思っています。

GLubyte* pixels = new GLubyte[_frameSize* _frameSize*3]; 
    float* pixels_f = new float[_frameSize* _frameSize*3]; 
    glReadPixels(0, 0, _frameSize, _frameSize, GL_RGB, GL_UNSIGNED_BYTE, pixels); 

私はストレージを割り当てていますが、バッファに格納されているピクセル値を今読んでみたいと思います。 その後、私は 'pixels'に格納された値をfloatにキャストすることによって 'pixels_f'にコピーしたいだけです。

私の結果は本当に恣意的です。もしGLubyteからfloatへのキャストが機能しないか、バッファを読み込んで何か間違っているのであれば、私はそれを知りません。私はコンピュータ上でOpenGLを使って作業し、バッファを読み込むためにGL_Floatを使用していたので、問題はありませんでした。私が見つけたいくつかのより多くのデバッグ後


、そのglReadPixels()trowsエラー:1280がしかし、唯一のOpenGL ESにしていないのOpenGLを使用して実行することによって。

私は、OpenGLを使用してプログラムを実行すると、私はバージョンがあります:GL_SHADING_LANGUAGE_VERSION:1.20

とOpenGL ESと: GL_SHADING_LANGUAGE_VERSION:OpenGL ESのGLSL ES 3.00

私はなぜ知らない、実際に両方があるべきを1.2。私はバージョンがそれに何らかの問題を抱えているかどうかは今はわかりません。

答えて

0

私はこの問題を解決しました。私はGL_RGBAでタイプGL_UNSIGNED_BYTEをロードすることのみが許可されています。したがって:

glReadPixels(0, 0, _frameSize, _frameSize, GL_RGBA, GL_UNSIGNED_BYTE, pixels); 

が現在機能します。

関連する問題