IMG_Load()によってロードされたSDL_Surfaceを、OpenGLテクスチャの他のピクセルフォーマット(rgba8)に変換したいとします。どうやってやるの? 私はドキュメントのSDL_ConvertSurface()について読んだことがありますが、私はそれをどのようにまとめるかを理解できません。SDLサーフェスピクセルフォーマット変換
4
A
答えて
3
は"How To Load an OpenGL Texture from an SDL_Surface"は打撃を与える:
GLuint texture; // This is a handle to our texture object
SDL_Surface *surface; // This surface will tell us the details of the image
GLenum texture_format;
GLint nOfColors;
if((surface = SDL_LoadBMP("image.bmp")))
{
// Check that the image's width is a power of 2
if((surface->w & (surface->w - 1)) != 0)
{
printf("warning: image.bmp's width is not a power of 2\n");
}
// Also check if the height is a power of 2
if((surface->h & (surface->h - 1)) != 0)
{
printf("warning: image.bmp's height is not a power of 2\n");
}
// get the number of channels in the SDL surface
nOfColors = surface->format->BytesPerPixel;
if(nOfColors == 4) // contains an alpha channel
{
if(surface->format->Rmask == 0x000000ff)
texture_format = GL_RGBA;
else
texture_format = GL_BGRA;
}
else if(nOfColors == 3) // no alpha channel
{
if(surface->format->Rmask == 0x000000ff)
texture_format = GL_RGB;
else
texture_format = GL_BGR;
}
else
{
printf("warning: the image is not truecolor.. this will probably break\n");
// this error should not go unhandled
}
// Have OpenGL generate a texture object handle for us
glGenTextures(1, &texture);
// Bind the texture object
glBindTexture(GL_TEXTURE_2D, texture);
// Set the texture's stretching properties
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
// Edit the texture object's image data using the information SDL_Surface gives us
glTexImage2D
(
GL_TEXTURE_2D,
0,
nOfColors,
surface->w,
surface->h,
0,
texture_format,
GL_UNSIGNED_BYTE,
surface->pixels
);
}
else
{
printf("SDL could not load image.bmp: %s\n", SDL_GetError());
SDL_Quit();
return 1;
}
// Free the SDL_Surface only if it was successfully created
if(surface)
{
SDL_FreeSurface(surface);
}
関連する問題
- 1. 透明なpngを変換するSDL/OpenGLがクラッシュする
- 2. SDL OpenGLウィンドウのサイズ変更
- 3. SDLソフトウェアレンダリングVS. OpenGL:互換性とパフォーマンス
- 4. rubysdlとruby-sdl-ffi
- 5. SDLの背景を変更する
- 6. SDLのピクセル色を変更する
- 7. C++&SDL TicTacToe - ターンを変更する
- 8. 色の変更TTFテキストSDL C
- 9. SDLマルチサンプリング
- 10. C++ SDL
- 11. SDLイベントメモリリーク
- 12. SDLスモールスクリーン
- 13. SDLカラーショートカット
- 14. SDL調整ウィンドウサイズ
- 15. sdl unicode text
- 16. SDL Tridionのキーワードパス
- 17. SDL 2.0メモリリーク
- 18. SDL測定テキスト
- 19. C++のSDLミュートボリューム
- 20. SDL:ハードウェアレンダリングとソフトウェアレンダリング
- 21. SDL exit fullscreen
- 22. SDLとAquila FFT
- 23. SDL C++リンカエラー
- 24. SDLライブラリのメモリリーク
- 25. メイクファイル(SDL含む)
- 26. ゲームエンジンのSDL + Qt
- 27. SDL C++フレームレートカウンタ?
- 28. SDLテクスチャ配列?
- 29. SDL Missing x86_64 architecture
- 30. SDL 2.0 retina mac
あなたが実際にRGBAに変換、または単にテクスチャにロードする必要がありますか? – genpfault