Acabo de añadir soporte para OpenGL a BGL.
Para seleccionar el controlador de video, basta con indicarlo al obtenerlo la primera vez:
getSystem()->getVideoDriver( VideoDriver::OPENGL )
Los controladores actuales son:
DEFAULT: Controlador por defecto del sistema.
SOFTWARE: Controlador sorftare por defecto del sistema.
OPENGL: OpenGL.
Aun estoy probando el nuevo controlador para OpenGL (seguramente haga una nueva versión de Escape :P).
Cuando suba la nueva versión espero sugerencias de los que tengan experiencia con Open GL. Seguramente a mí se me pasen muuuchos detalles -.- (además lo he hecho en un par de horas).
A ver si este finde la subo.
¿Te refieres a que has portado tus funciones de dibujo (las que ya tenias) a OpenGL? pq si has hecho todo eso en un par de horas...eres una bestia humana!!! :)
XD
No, solo he añadido soporte para OpenGL. Vamos, que puedes inicializar la ventana con OpenGL y luego... el resto es cosa tuya.
Aun tengo que pensar si pasar lo que tengo a OpenGL o hacer un módulo aparte específico para OpenGL, ya que las imágenes se dibujarían de forma diferente... en fin, ya lo pensaré. Estoy muy verde en esto y todavía no sé muy bien por dónde cogerlo.
¿pero quieres que BGL sea 2D,3D o para ambos?
desde luego por portabilidad(como querias portarlo a linux).....yo me olvidaria de directX y usaria OpenGL :)
por cierto, aunq estes verde...y lo q estas y vas a aprender que eh?? anda q no mola :) jajaja
a mi me pasa como a ti, voy abordando temas y aprendiendo mas y mas..... :rolleyes:
Cita de: "TheAzazel"¿pero quieres que BGL sea 2D,3D o para ambos?
En un principio para 2D, pero no me cuesta nada dar la posibilidad de utilizar OpenGL.
BGL es un base (más los módulos opcionales). Esa base ahora mismo da la posibilidad de inicializar el modo de video, recoger eventos, etc. vamos, lo básico.
Lo único que he añadido es que la ventana se puede inicilizar con OpenGL. O sea, que ahora, que te ahorras el código de inicialización dependiente del sistema.
Evidentemente, si trabajas con OpenGL, el lock/unlock (no sé si simularlo algún día) no hace mucho (más bien nada :P). Solo funciona el método flip().
Que cada uno haga sobre esto lo que mejor le venga. Yo solo tengo idea (de momento) de hacer cosas para 2D, ya sea haciendo que BGL Video también funcione con OpenGL o con otro módulo aparte.
Aunque sea un poco latazo, yo te recomendaría que hicieses dos librerías dinámicas con las definiciones de las funciones de dibujo para Opengl y Direct X. Así en caso de querer usar uno u otro solo habría que llamar a cierta función que llamase a esas DLL. Además podrías ir actualizando el render sin tener que bajarse todo.
Ha dicho esa... esa palabra... O_O
D...L.... *argh*
Cita de: "sés"Ha dicho esa... esa palabra... O_O
D...L.... *argh*
¿¿?? :blink:
creo que el mayor problema de las dlls es que la mayoria no sabemos como hacer que exportes las clases directamente sin hacer funciones globales
saludos
pd: estaria bien si alguien sabe hacerlo que lo dijera ya que yo estuve una temporada buscando info sobre ello y la unica manera es siempre con funciones globales
Cita de: "zupervaca"creo que el mayor problema de las dlls es que la mayoria no sabemos como hacer que exportes las clases directamente sin hacer funciones globales
saludos
pd: estaria bien si alguien sabe hacerlo que lo dijera ya que yo estuve una temporada buscando info sobre ello y la unica manera es siempre con funciones globales
Uhmm.... pueden pasar dos cosas... q no nos refiramos a lo mismo o que si, y sea lo mismo q ya he hecho... veras, mi libreria CRM32Pro...es un conjunto de clases e interfaces(son clases tambien pero autoiniciadas y unicas), estan en una DLL y exporto todo lo q quiero... echale si quieres un vistazo o pregunta lo que sea pq me he pegado bastante con ese tema.
Para mi entender, la unica pega q tienen las DLL es que si usas clases... no te queda otra que crear DLL/lib de importacion dependientes del compilador que has usado por el temita de las funciones decoradas. Yo no encontre solucion a esto y le dedique tiempo.... aunq no me creo q no exista esa posibilidad...lance la cuestion de que... directx son tambien clases (utilizan funciones decoradas por tanto) y tu puedes utilizar las dll/lib de directx con visual C, borland, mingw, etc... ahora, como lo hacen? I don't know.
Pos eso, si quieres saber algo...pregunta pregunta y si sabes como resolver ese problemon...o alguien tiene idea q lo comente please.
thanks
TheAzazel: Creo que deberías echarle un vistazo a las COM y las assembly.
Cita de: "gdl"TheAzazel: Creo que deberías echarle un vistazo a las COM y las assembly.
Podrias dar mas informacion???? gracias por adelantado
Pues aprobecho y me meto!
Si metes clases que NO funciones en una DLL, la unica manera de recuperarlas seria con funciones que creasen la clase y retornaran un puntero a esta??????
Y si tienes una clase de X (supongamos una de render o algo asi) que tanto funciona con DX como con OpenG, al ser 2 clases distintas, pero con la misma "definicion", habria que usar clases abstractas, es decir una clase con metodos virtual=0 como inteface(que seria algo asi como las COM) ??????
Saludos.
en efecto el problema que tuve yo es que cada compilador lo hace a su manera y al final me encerre en el visual c++ con lo que cada vez que me encuentro que necesito hacer dlls me dan escalofrios :D
otro de los problemas gordos es derivar una clase dentro de una dll, como no tienes el codigo fuente al intentar llamar a la funcion de la clase base te dara un error tocho diciendo que no encuentra es funcion, me parece que para esto no hay solucion y lo que se suele hacer es crear un metodo virtual puro, pero claro, el programador de esa dll tiene que dejarlo preparado para ello y si no, pues la hemos liado ;)
saludos
pd: tamos liando un offtopic de lo que era el hilo :)
En mi opinión el único problema que tienen las dll es que no vale todo.
Con respecto a C++ el único problema que me he encontrado yo ha sido a la hora de usar ciertos tipos (templatizados), lo demás, sin problemas, incluso la compatibilidad entre compiladores (al menos los más usados).
Como bien decía TheAzazel es perfectamente posible exportar clases y no es necesario a recurrir a artefactos como COM u otros si no es necesaria la compatibilidad binaria. Al hilo de esto hay un artículo de DrGUI sobre COM en la página de MS que estaba bastante bien para empezar con COM aunque quizás es algo tarde teniendo .NET ya.
saludos
Cita de: "ethernet"Con respecto a C++ el único problema que me he encontrado yo ha sido a la hora de usar ciertos tipos (templatizados), lo demás, sin problemas, incluso la compatibilidad entre compiladores (al menos los más usados).
Ethernet, como has conseguido la compatibilidad de una DLL en C++ (con clases) entre varios compiladores?? al utilizar distintos decorated names.... lo unico que se me ocurrio fue manipular a mano el .DEF haciendo la conversion entre uno y otro... y asi obtener un .lib para cada compilador que linke con la misma DLL pero como era muxo curro... y no sabia si iba a funcionar...lo abandone.... si sabes algo de este tema.... te invito a lo q kieras (ole)
Cita de: "TheAzazel"Ethernet, como has conseguido la compatibilidad de una DLL en C++ (con clases) entre varios compiladores?? al utilizar distintos decorated names.... lo unico que se me ocurrio fue manipular a mano el .DEF haciendo la conversion entre uno y otro... y asi obtener un .lib para cada compilador que linke con la misma DLL pero como era muxo curro... y no sabia si iba a funcionar...lo abandone.... si sabes algo de este tema.... te invito a lo q kieras (ole)
Quizás, añadiendo especificadores de declaración puedas forzar a que el compilador use nombres no decorados... eso sí, perdiendo algunas de las virtudes del C++ como la sobrecarga de funciones miembro. Repito: échale un vistazo al COM que, aunque no lo uses, te dará muchas ideas.
CitarAun tengo que pensar si pasar lo que tengo a OpenGL o hacer un módulo aparte específico para OpenGL, ya que las imágenes se dibujarían de forma diferente... en fin, ya lo pensaré. Estoy muy verde en esto y todavía no sé muy bien por dónde cogerlo.
Te recomiendo separarlo en clases VentanaDIB, VentanaDDraw y VentanaOGL, y cada una con sus virtudes y metodos por separados, yo almenos perdi unas dos semanas y no pude hacer algo que encapsule ambos caminos (software y opengl) con un rendimiento aceptable en cada una, ejemplo tamaño de los sprites, alpha blending versus color keyng.
Saludos.
Sí, seguramente deje BGL Video como estáy haga otro módulo equivalente para OpenGL... pero aun tengo que darle algunas vueltas.
el problema que le veo al opengl para hacer una clase base fue lo que pregunte yo el otro dia y nadie supo contestar (o no quisieron :) ) es que en directx puedes recuperar la textura de la memoria de video con lock pero en opengl no hay funcion para ello con lo que en opengl tendras que memorizar las texturas en la memoria de ram del ordenador y copiar trozos a mano cada vez que sea copien unas sobre otras, no se si me explico bien (nooo)
saludos
Yo la verdad no sé otro método que el que explicas tú, quizás ithaqua sepa un método parecido. Lo que me pregunto es si DX no usa ese método para hacerlo, aunque de forma transparente. Para ver un ejemplo que puede servir de ayuda:
http://cone3d.gamedev.net/cgi-bin/index.pl...age=code/shotta