El primer paso para portar LooverLib a otras plataformas es eliminar todas las dependencias con win32 (después vendrá el tema de pasar de D3d a ogl). Looverlib utiliza win32 para crear la ventana, para el input con el ratón y el teclado y para los temporizadores (GetTickCount).
Así que busco algo que me permita crear una ventana, temporizadores e input y sea multiplataforma. He pensado en SDL.
Lo que me da pena es que voy a usar SDL únicamente para esas cosas, no para dibujar (LooverLib ya se encarga de eso).
¿Cómo lo veis vosotros?
Umm, wxwidgets a lo mejor podría servirte, cierto que en parte es una locura, pero podría tener mas cosas que te interesen.
Por aqui otra persona de este foro estaba haciendo una libreria básica, BGL creo k se llamaba. Como SDL pero sin necesidad de usar tanto. Buscando por los foros seguro q encuentras algo
sés es el creador de BGL:
Basic Game LibrarySalu2
Por lo que leo, igual he leído un post muy viejo, BGL solo rula para windows de momento. Y no he encontrado en ningún sitio documentación o información.
wxWidgets la conozco, pero me parece demasiado para lo que yo busco.
Sés, ¿como va ese librería y en que consistirá exactamente?
yo creo que con SDL o con GLUT tienes suficiente. Quizás glut se quede un poco corta.
saludos
Cita de: "Loover"Sés, ¿como va ese librería y en que consistirá exactamente?
Pos mira, hoy quería subir la nueva versión, pero al final no he tenido tiempo.
BGL ha cambiado bastante. Ahora está en C++ y he corregido bastantes errores de la anterior versión... pero sigue siendo solo para Windows. A ver si pillo ya ese portátil y me pongo con la versión para Linux.
Espero subir mañana una versión en condiciones, de todas formas dejo un enlace a una demo de lo que subiré y te resumo lo que tiene:
BGL- System: Clase principal que representa el SO (Windows, Linux...).
- VideoDriver: Pos eso, se encarga (de momento) de poner el modo de video, lock/unlock, flip...
- PixelFormat: Convierte de RBG a valor de pixel y viceversa.
- Event: Clase evento (que lee System).
- Mouse: Clase de control del ratón.
- Keyboard: Lo mismo para el teclado.
BGL Video (funciona sobre BGL)
- Image: Clase para las imágenes (las típicas "surfaces").
- Painter: Se encarga de dibujar. De momento líneas horizontales y verticales, rectángulos con o sin relleno e imágenes con soporte de inversión horizontal y/o vertical.
BGL ImageSolo tiene una clase PCX que carga imágenes PCX de 256 colores. Este módulo está de prueba y aun no he pensado cómo lo haré. Funciona sobre BGL Video, aunque me gustaría que no fuese obligatorio... ya veremos.
A ver si mañana puedo subir una versión explicando mejor cómo funciona. Supongo que a ti te vendría bien la base... cuando funcione en más sistemas ^_^
Güeno, aquí está el enlace:
http://perso.wanadoo.es/sesses/bgl/bgl-demo.zipIncluye un ejemplo que comenta lo que hace cada línea.
Aun tengo que decidir si cambio los nombres de algunas clases o métodos y algunas formas de hacer las cosas. Además hay cosas sin optimizar (como las funciones gráficas en C), pero ya habrá tiempo.
Tiene buena pinta Sés. Quizás cuando funcione para Linux y Mac...
Me parece que al final si voy a usar SDL.
aqui teneis lo que buscais y ademas es 100% libre
http://glfw.sourceforge.net/
He estado mirando GLFW y es genial. Pero me parece que no me va a servir. ¿Por qué? Pues porque la ventana que crea es directamente una de opengl, sin posibilidad de cambiar el render o de que cree una ventana sin inicializar ningún render.
A mi entender es un fallo gordo, ¿porque que pasa si como en mi caso me gustaría utilizar GLFW tanto para D3D como para OGL? Pues que tengo que fastidiarme.
Lástima.
env.h
#include <gl/gl.h>
#include <gl/glu.h>
#include <sdl/sdl.h>
class env
{
public:
env(int width, int height, int bpp, bool fullscreen);
};
env.cpp
#include "env.h"
#include <stdlib.h>
env::env(int width, int height, int bpp, bool fullscreen)
{
SDL_Init(SDL_INIT_VIDEO);
Uint32 flags = SDL_OPENGL;
if(fullscreen) { flags += SDL_FULLSCREEN; }
SDL_SetVideoMode(width, height, bpp, flags);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(90.0f, (GLfloat)width / (GLfloat)height, 0.1f, 100.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
atexit(SDL_Quit);
}
La clase env tiene opciones que quizás no te interesen o quieras cambiar.
Un ejemplo:
#include "env.h"
#include <gl/gl.h>
#include <gl/glu.h>
void render()
{
glColor3f(1.0f, 0.0f, 0.0f);
glBegin(GL_TRIANGLES);
glVertex3f(0.0f, 1.0f, -3.0f);
glVertex3f(-1.0f, -1.0f, -3.0f);
glVertex3f(1.0f, -1.0f, -3.0f);
glEnd();
glFlush();
}
int main(int argc, char *argv[])
{
env enviroment(800, 600, 32, false);
SDL_WM_SetCaption("SSE viewer", NULL);
SDL_Event e;
int done = 0;
while (done < 1)
{
if (SDL_PollEvent(&e))
{
if ( e.type == SDL_QUIT )
{
done++;
}
if ( e.type == SDL_KEYDOWN )
{
if ( e.key.keysym.sym == SDLK_ESCAPE )
{
done++;
}
}
}
else
{
render();
SDL_GL_SwapBuffers();
}
}
}
Muestra un triangulo rojo en pantalla.
Ale, es parte de mis prueba para un motorcillo pero te servirá. Saludos
Cita de: "Loover"He estado mirando GLFW y es genial. Pero me parece que no me va a servir. ¿Por qué? Pues porque la ventana que crea es directamente una de opengl, sin posibilidad de cambiar el render o de que cree una ventana sin inicializar ningún render.
A mi entender es un fallo gordo, ¿porque que pasa si como en mi caso me gustaría utilizar GLFW tanto para D3D como para OGL? Pues que tengo que fastidiarme.
Lástima.
es open source puedes cambiar lo que quieres, compilarlo y no dar cuentas a nadie
tendras que usar un sistema de GUI que trata los menus mediante clases y deja a tu responsabilidad la visualizacion grafica, hay bastantes.
http://www.cegui.org.uk/modules/news/Yo usaria SDL para input y demas tonterias multiplataforma, porque? porque con SDL inicias solo el subsistema que necesites. Ademas puedes hacerte una version de la libreria con lo necesario y punto.
Otra alternativa es allegro, que tiene muchas mas cosas que SDL, como un sistema de GUI, y es mucho mas coñazo de compilar, dicho sea de paso.
Este sistema GUI no lo conocía. Mola.
De todos modos había pensando en diseñar yo mismo un sistema GUI. No tan complejo como este, pero lo suficiente como para poder hacer editores, menús, etc.
Me he puesto a hacer pruebas con SDL y me ha gustado bastante. Es más tocha en tamaño que GLFW pero me convence más.
si quieres mas ejemplos GUI puedes ver la demo basica de directx que tiene todo tipo de controles y realmente esta muy bien, si usas opengl para el render no te valdra, pero para hacerte una idea de como organizar el proyecto y como administrar controles y bla bla :D te valdra
y si usas glut???
Glut crea una ventana de OpenGL. Yo quiero una libreria que cree una ventana, sin inicializar ningún render.