2017-01-10 9 views
1

私はコンポジターを使用してテクスチャをHTC Viveに提出しようとしていました。私は "TextureUsesUnsupportedFormat"である105のエラーを取得し続けます。テクスチャはbmp画像の24ビットの奥行きです。私はhellovrのサンプルを見てきましたが、少し混乱しました。また、ViveはRGBA8形式でテクスチャを必要としますが、実際にどのように作成するかはわかりません。私は各アイポートを埋めるためにテクスチャを取得しようとしています。テクスチャをHTC Viveに提出するには?

私は間違っていますか? Viveのコードに提出

Loading_Surf = SDL_LoadBMP("Test.bmp"); 
Background_Tx = SDL_CreateTextureFromSurface(renderer, Loading_Surf); 


if (!Loading_Surf) { 

    return 0; 
} 

glGenTextures(1, &textureid); 

glBindTexture(GL_TEXTURE_2D, textureid); 

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, Loading_Surf->w, Loading_Surf->h, 0, mode, GL_UNSIGNED_BYTE, Loading_Surf->pixels); 

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 

SDL_FreeSurface(Loading_Surf); 

SDL_RenderCopy(renderer, Background_Tx, NULL, NULL); 
SDL_RenderPresent(renderer); 
return textureid; 

はここでテクスチャとテクスチャIDを取得するために私のコードです

vr::Texture_t l_Eye = { (void*)frameID, vr::API_OpenGL, vr::ColorSpace_Gamma }; 
std::cout << vr::VRCompositor()->WaitGetPoses(ViveTracked, vr::k_unMaxTrackedDeviceCount, NULL, 0); 
error = vr::VRCompositor()->Submit(vr::Eye_Left, &l_Eye); 

答えて

1

を支援します。https://gamedev.stackexchange.com/a/109067/6920

は、正確なイメージで、一時的な表面(SDL_CreateRGBSurface)を作成します フォーマットを使用して、その一時的な表面にLoading_Surfをコピーしてください。 (SDL_BlitSurface)

0

RGBA8は32ビットを必要とします。あなたのビットマップは24ビットしかありません。 alphaチャンネルが欠落しているようです。

4x8-bit = 32ビット/ピクセル(C++ではcharを使用するか、イメージライブラリを使用することができます)の大きな容器にコピーしてみてください。

または、そのようなものが存在する場合は、RGB8テクスチャでデバイスをフィードすることができます(OpenGLで遊んでください)。

これは、この回答で述べたようにあなたは、まず正しいRGBA8形式で表面を作成する必要がありますあなたhttps://www.khronos.org/opengl/wiki/Texture

関連する問題