c / opengl에서 정수 배열에서 비트 맵을 만드는 방법
문제
코드를 Java에서 C로 옮기려고 노력하고 있으며 C에서 int 배열을 가져 와서 OpenGL에 대해 비트 맵을 만들 수있는 C에서 함수를 찾으려고 시도하면서 문제가 발생했습니다. Java에서는 사용했습니다
bitmap = Bitmap.createBitmap( {int array name} , w, h, Config.RGB_565);
C에서 사용할 수있는 비슷한 기능이나 사용할 수있는 해결 방법이 있습니까?
또한 중요하다면 Android를위한 프로그래밍입니다.
감사!
해결책
나는 Android에 대해 구체적으로 익숙하지 않지만 OpenGL C 바인딩으로 제대로 기억하면 비트 맵 구조가 없습니다. 대신 다양한 비트 맵 함수 (즉 glBindTexture()
) Gluint Pointers를 가져 가십시오 (배열과 동일).
Java에서는 모든 것이 클래스이므로 비트 맵에는 클래스와 관련된 클래스가 있지만 비트 맵 클래스는 대부분 이미지를 포함하는 int 배열의 래퍼 (및 일부 기능) 일뿐입니다.
구체적으로 OpenGL에서 우리는 종종 배열을 glbindtexture 기능, 그리고 다른 텍스처 함수는 OpenGL의 올바른 '상태'를 참조하도록 바인딩 된 이름을 취합니다.
반면 에이 회로를 단락 시키려고한다면이 프로세스는 언제든지 사용할 수 있습니다. glteximage2d
다른 팁
나는 얼마 전에 BMP 형식의 문서를 작성하여 작곡했습니다. 이 파이썬 구현. 문제가 거의없이 이것을 C로 포트 할 수 있어야합니다.
당신이 찾고있는 기능은 간단합니다 gltextimage2d ()
. 배열에서 OpenGL로 데이터를 업로드합니다. 당신은 당신이 가지고 있고 원하는 소스 및 대상 형식을 지정하고 나머지는 수행합니다.
함께 사용하십시오 glbindtexture ()
저장된 재사용 가능한 텍스처 객체를 만들려면 모든 프레임을 사용하기 전에 텍스처 데이터를 업로드 할 필요가 없습니다.
필요한 것은 다음과 같습니다.
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA , x_size, y_size, 0, GL_RGBA , GL_UNSIGNED_BYTE, (GLvoid *)your_data );
x_size 및 y_size는 2의 전력이어야합니다.이 코드의 경우 x_size 배열이 필요합니다.y_size 4-byte ints (또는 x_sizey_size*4 바이트). 테스트를 위해서는 다음과 같이 시도합니다.
unsigned char data[32*32*4];
for( int i=0; i< sizeof(data); ++i) data[i]=rand();
// Don't forget to #include <stdlib.h>
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA , 32, 32, 0, GL_RGBA , GL_UNSIGNED_BYTE, (GLvoid *)data );
다른 가능한 형식 : GL_BGRA (다른 바이트 순서), GL_RGB (알파가없는 경우). 나중에 사용하기 위해 텍스처 설정을 기억하려면 glgentextures / glbindtexture를 사용하십시오.