現在OpenGLで,動的確保を行い画素情報を格納した多次元配列をOpenGL側の"glTexImage2D"という関数に引き渡そうとしています.
静的に多次元配列を確保していた時は問題なく引き渡すことが出来ていました.
C++
1static char pictureData[HEIGHT][WIDTH][4]; 2 -------- 3glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, pictureWidth, pictureHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, pictureData); 4 -------
しかし,毎回画像のサイズが一定ではないことから配列を動的確保したほうがよいと思いプログラムを書き換えました.その結果画面にデータが正常に表示されなくなりました.
C++
1static GLubyte***pictureData; 2pictureData= new GLubyte**[HEIGHT]; 3for (int i = 0; i < HEIGHT; i++){ 4 pictureData[i] = new GLubyte*[WIDTH]; 5 for (int j = 0; j < WIDTH; j++){ 6 pictureData[i][j] = new GLubyte[4]; 7 } 8} 9 -------- 10glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, pictureWidth, pictureHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, pictureData); 11 -------
glTexImage2Dの引数が下のようになっているので,1重(?)ポインタに3重ポインタを渡しているのでそれが原因かなと思っています.
GLAPI void GLAPIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels);
しかし,どのように解決すればいいかよくわかりませんでした.
今まで多次元配列を静的確保した場合も,動的確保した場合も違いがないと思っていたので・・・・.
C++
1//静的確保 2static char staticArray[HEIGHT][WIDTH][4]; 3//動的確保 4static char dynamicArray; 5dynamicArray= new char **[HEIGHT]; 6for (int i = 0; i < HEIGHT; i++){ 7 dynamicArray[i] = new char*[WIDTH]; 8 for (int j = 0; j < WIDTH; j++){ 9 dynamicArray[i][j] = new char[4]; 10 } 11}
解決策やアドバイスを頂けると幸いです.
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。