Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Ventana E Input ¿sdl?

Iniciado por Loover, 20 de Febrero de 2005, 08:17:38 PM

« anterior - próximo »

Loover

 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?
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

Sacrifai

 Umm, wxwidgets a lo mejor podría servirte, cierto que en parte es una locura, pero podría tener mas cosas que te interesen.

Minos

 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

Bob


Loover

 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?
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

ethernet

 yo creo que con SDL o con GLUT tienes suficiente. Quizás glut se quede un poco corta.

saludos

sés

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 Image
Solo 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.zip
Incluye 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.
Soy indeciso... ¿o no?

Loover

 Tiene buena pinta Sés. Quizás cuando funcione para Linux y Mac...

Me parece que al final si voy a usar SDL.
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!


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.

IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

StraT

 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
quot;Solo hay dos cosas infinitas, el universo y la estupidez humana, aunque de lo primero no estoy muy seguro\\\" Einstein

zupervaca

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

raistlin

 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.
Intento que los novatos entiendan como funciona el mundo.

Loover

 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.

IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

zupervaca

 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






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.