Estoy escribiendo una aplicación SDL/OpenGL que se ejecuta bajo OSX. Tengo que usar el código existente que usa la biblioteca DevIL para cargar texturas JPG y PNG. Lamentablemente, esto funciona muy mal en OS X, por lo que decidí no utilizar DevIL en absoluto y reescribir las partes respectivas de la aplicación utilizando otra biblioteca. Quiero mantenerlo flexible (DevIL puede manejar una gran cantidad de formatos de imagen) y fácil de usar. ¿Hay un buen reemplazo para DevIL que puedas recomendar? La aplicación está escrita completamente en C++.Cómo cargar texturas JPG/PNG en una aplicación SDL/OpenGL bajo OSX
Respuesta
Eche un vistazo a la biblioteca SDL_image. Ofrece funciones como IMG_LoadPNG
que cargan su imagen "como" SDL_Surface. Dado que ya trabaja con SDL, esto debería encajar bastante bien en su programa.
muestra tomada del SDL_image documentation:
// Load sample.png into image
SDL_Surface* image = IMG_Load("sample.png");
if (image == nullptr) {
std::cout << "IMG_Load: " << IMG_GetError() << "\n";
}
gracias, SDL_image hace lo correcto! –
Si tiene Mac OS de todos modos, ¿por qué no utiliza CGImageSource para realizar la carga? OS X admite de forma nativa la carga de muchos formatos de archivo, incluidos PNG y JPEG.
Tome un vistazo a freeimage. Es compatible con todos los formatos principales y se construye fácilmente con macports. Es bueno trabajar con ellos también. Detecta automáticamente el formato de imagen, etc.
FREE_IMAGE_FORMAT format = FreeImage_GetFileType(filename.c_str(), 0);
FIBITMAP *bitmap = FreeImage_Load(format, filename.c_str());
if (!bitmap)
{
LOG_ERROR("Unable to load texture: " + filename);
return false;
}
mlWidth = FreeImage_GetWidth(bitmap);
mlHeight = FreeImage_GetHeight(bitmap);
glGenTextures(1, &mpTextures[0]);
glBindTexture(GL_TEXTURE_2D, mpTextures[0]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, mlWidth, mlHeight, 0, GL_BGRA, GL_UNSIGNED_BYTE,
(GLvoid*)FreeImage_GetBits(bitmap));
FreeImage_Unload(bitmap);
Ejecutable SDL 2 ejemplo
#include <stdlib.h>
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
int main(void) {
SDL_Event event;
SDL_Renderer *renderer = NULL;
SDL_Texture *texture = NULL;
SDL_Window *window = NULL;
SDL_Init(SDL_INIT_TIMER | SDL_INIT_VIDEO);
SDL_CreateWindowAndRenderer(
COMMON_WINDOW_WIDTH, COMMON_WINDOW_WIDTH,
0, &window, &renderer
);
IMG_Init(IMG_INIT_PNG);
texture = IMG_LoadTexture(renderer, "flower.png");
common_fps_init();
while (1) {
SDL_RenderCopy(renderer, texture, NULL, NULL);
SDL_RenderPresent(renderer);
common_fps_update_and_print();
if (SDL_PollEvent(&event) && event.type == SDL_QUIT)
break;
}
SDL_DestroyTexture(texture);
IMG_Quit();
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
return EXIT_SUCCESS;
}
Compilado con:
sudo apt-get install libsdl2-dev libsdl2-image-dev
gcc -std=c99 main.c -lSDL2 -lSDL2_image
en Ubuntu 16.10, SDL 2.0.4.
Downvoters por favor explique ;-) –
- 1. Cargando texturas en una aplicación para Android OpenGL ES
- 2. Cómo cargar texturas en OpenGL ES de manera eficiente
- 3. TDD para una aplicación OSX
- 4. Cómo cargar texturas correctamente utilizando el assetManager libgdx
- 5. cómo instalar una aplicación para php en mac osx mamp?
- 6. Portar una Aplicación GTK + a Mac OSX
- 7. Paquete de una aplicación Node.js como una aplicación osx
- 8. Encuadernación a teclas multimedia en teclados Apple bajo OSX 10.5
- 9. Cómo cargar una aplicación de winforms rápidamente
- 10. ¿Cómo implementar una aplicación FireMonkey para Mac OSX?
- 11. ¿Cuál es una buena manera de cargar texturas dinámicamente en OpenGL?
- 12. LWJGL Texturas y cadenas
- 13. Cargando texturas PNG en OpenGL
- 14. Posibilidad de cargar/ejecutar archivos ELF en OSX
- 15. Mecanografía con declaraciones printf bajo Mac OSX y Linux
- 16. ¿Cómo cargar una aplicación web en Amazon EC2?
- 17. Asignación de texturas C++ OpenGL
- 18. ¿Cómo usar múltiples texturas en WebGL?
- 19. Ejecución de una aplicación JNI en Sun VM bajo Valgrind
- 20. ABCpdf no representa imágenes en una aplicación web bajo IIS6
- 21. Sin potencia de dos texturas en iOS
- 22. ¿Cómo cargar automáticamente la configuración en R en OSX? ¿Cómo encontrar R_HOME, configurar Rprofile.site, etc.?
- 23. Cómo instalar y ejecutar wkhtmltopdf en Mac OsX 10.7.3 para usar en una aplicación PHP
- 24. portando la aplicación iPhone openGLES para OSX?
- 25. Google Analytics para Mac Aplicación OSx
- 26. Asignación de texturas OpenGL
- 27. Pasos para cargar una aplicación de iPhone en la AppStore
- 28. Actualizando dinámicamente el ícono de la aplicación en OSX
- 29. OSX aplicación de fondo atajo de teclado, cómo
- 30. Liberar texturas (objetos GLKTextureInfo) asignados por GLKTextureLoader
¿Por qué crees que usar JPEG, PNG, es una buena idea para almacenar texturas? –
n0rd
Como n0rd alude, solo necesita soporte para formatos de imagen estándar en tiempo de compilación. El proceso de compilación debe convertir todos sus recursos gráficos a un formato común. Esto también reduce el trabajo que su aplicación necesita hacer al inicio, por lo que se cargará más rápido. –
¡buen punto! probablemente me quedo con solo imágenes PNG. –