Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Menu

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menu

Mensajes - Frodrig

#1
Código de la Semana / Reciclado de memoria - Fernando Rodríguez
12 de Diciembre de 2002, 06:37:29 PM
                                Hola chicos, perdonad por no responder antes pero ayer por la noche todo mi equipo se ha ido a hacer gargaras (machacado esta el pobre) en lo relativo a disco duro y ahora estoy con un portatil que no es mio y que tengo que devolver de inmediato.

En primer lugar, con el codigo mostrado he pretendido que fuera didactico, pequeño y, sobre todo, limpio y facil de entender. Asi pues:

1/ Estoy con la mejora apuntada por ethernet acerca de la creacion de los nodos, su propuesta esta mucho mas optimizada y no aporta ninguna dificultad de comprension.

2/ Naturalmente que los assertos no estan en version release (a no ser que te curres tu propio assert y seas tu el que decidas cuando y cuando no estan), pero su utilidad esta mas orientada a lo que es el proceso de creacion de esta clase. En un proyecto real habra que tirar de otros mecanimos de localizacion de errores, como loggers, excepciones, etc. Lo importante de los assertos, ademas de permitir cazar errores, es que nos permiten comprender mucho mejor el codigo y reafirman la logica del mismo a medida que este se va leyendo, sobre todo cuando lo hace otra persona que no es uno de nosotros (los creadores del codigo).

3/El ordenador trabajara mejor con datos de 32 bits, pero esa implementacion estaria mas orientada a crear codigo optimizado, que no es el caso de este codigo, yo he pretendido utilizando unsigned short ceñirme a la realidad; es practicamente imposible que se cubran los 16 bits con nodos en memoria, si esto fuera asi... el volumen de datos distaria de ser manejable, con lo que se contribuye a comprender el funcionamiento de la clase. De hecho, estuve tentado de poner un typedef con un tipo predefinido para utilizar con valor estandar y asi facilitar el cambio.

4/ Uso referencias con const, porque en la vida real, dentro de un motor, lo mas normal sera que se trabaje con variables y recoger estas mediante referencias es mucho mas rapido y seguro que hacerlo utilizando punteros.

5/ No utilice un vector o un array como apunte metaxas por la misma razon que he apuntado mas arriba en cuanto al volumen de nodos manejados, seria un malgasto de memoria anticiparnos a la totalidad de nodos que realmente vamos a utilizar, con el sistema actual estamos preparados para responder al peor de los casos (cuando el numero de nodos sea maximo) pero nunca iremos "mas alla". No se si me explico.
Una excelente forma de aplicar tu idea seria solicitar por template el tamaño maximo del pool y entonces crear ese vector utilizando reserve para el peor y maximo de los casos (el tamaño pasado por template). Como veis, la clase esta muy ligada a la forma en la que quereis implementar la idea en vuestros proyectos.

Saludos.                                
#2
Proyectos / 'Adventum' en Flipcode
29 de Noviembre de 2002, 05:14:58 PM
                                Felicidades por vuestro trabajo,

Sobre el tema de no soportar tarjeta con multitextura... hombre, yo creo que no estaria de mas que hubiera codigo "al rescate" para todos aquellos que tenemos una tarjeta antigua. Si ese es el unico pero para hacer funcionar el juego en equipos / tarjetas antiguas... creo que merece la pena que implementeis codigo que solucione el problema.

Como os imaginareis, no he podido ver la demo por eso (tengo una voodoo banshee), pero tiene muy buena pinta. Suerte.

Saludos.                                
#3
General Programadores / Llamada a constructor desde constructor
16 de Octubre de 2002, 02:32:56 PM
                                No se si entiendo bien tu pregunta, pero es muy sencillo:





class B : public A

{

public:

 B();

 B( int i ): A(i) { }



protected:

 int b;

};





O si lo prefieres





class B : public A

{

public:

 B();

 B( int i ) {

   A::A(i);

 }



protected:

 int b;

};





Personalmente, me gusta usar un convenio que puso Javier Arevalo (Jare) hace tiempo en flipcode (http://www.flipcode.com/cgi-bin/msg.cgi?sh...orum=totd&id=-1) a la hora de acceder a la clase base (y usar un protocolo de inicializacion y finalizacion; yo he usado estas tecnicas en CrisolEngine y son fantasticas):





class B : public A

{

private:

// Tipos

// Acceso a clase base

typedef A Inherited;



public:

 B();

 B( int i ) {

   Inherited::A(i);

 }



protected:

 int b;

};





Saludos.                                
#4
General Programadores / Re: winmain y arg
15 de Octubre de 2002, 04:08:22 PM
                               
CitarHolas, llevo toda mi vida programando en msdos consolas y mil sistemas rarisimos y ahora qe xfin me puesto con windows. Mi problema es como puedo utilizar lo qe asta ahora era main con sus dos arg? xqe ahora en winmain no vienen esos parametros.

Estoy de pasada Seryu y no me puedo entretener, echa un vistazo a este "tip of the day"

http://www.flipcode.com/cgi-bin/msg.cgi?sh...orum=cotd&id=-1

Ciao.                                
#5
General / Re: ...
07 de Octubre de 2002, 02:32:26 PM
                               
CitarGracias Fer y los demás por tantas horas invertidas en Macedonia, a muchos nos disteis algo a lo que agarrarnos para empezar a conocer este mundillo. Esa versión Offline en una Divmanía de mi hermano pequeño... que tiempos ;)

Gracias Pablo, la verdad es que si que fue una epoca muy bonita (vaya, que me pongo nostalgico y soy un peligro  :-? ).

Por cierto, ya esta subida la version OffLine de Macedonia, podeis descargarosla desde el menu de la primera epoca de la revista. Es una aplicacion grafica realizada (desde el punto de vista grafico y de programacion) por algunas personas que escriben habitualmente en estos foros. Mantiene los 8 primeros numeros de la revista. Fue escrita en Delphi sin DirectX y es necesario que cambieis la resolucion del escritorio a 800x600 en caso de ejecutarla.

Un saludo a todos.                                
#6
General / Cierre digno de Macedonia Magazine
06 de Octubre de 2002, 09:47:56 AM
                                Bueno, escribo este post para informaros que finalmente hemos cerrado Macedonia de una forma digna.

Supongo que salvo los veteranos de estos lares, poca gente conocera la autentica importancia que llego a tener este fanzine, asi que hare un pequeño resumen. Macedonia comenzo su andadura a finales del año 1997 convirtiendose mas tarde en uno de los puntos mas importantes donde conseguir informacion relativa al desarrollo de videojuegos (muy particularmente en el panorama nacional). En Macedonia podeis encontrar montones de articulos, entrevistas, firmas invitadas, tutoriales, en definitiva, recursos que cualquier persona minimamente metida en el mundillo sabra apreciar.

Los motivos de cierre de la revista son varios y complejos. A finales del 2000 ibamos a cerrar de forma oficial pero Alcachofa se ofrecio para levantar la publicacion. Desgraciadamente, poco se pudo hacer pues las condiciones que se daban antaño (un equipo de mas de 30 personas trabajando en torno a la publicacion) eran ya imposibles de conseguir.

Asi pues, hemos decidido cerrarla (o dejarla en coma indefinido, como prefirais). Es por ello que si visistais:

http://usuarios.lycos.es/macedoniamagazine/

encontrareis que tenemos las revista dividida en dos periodos o epocas.

La entrañable version offline de Macedonia la subiremos dentro de unos pocos dias.

Un saludo de parte de todos los que integrabamos la revista.

pd: Se ha respetado la estetica original con la que fue construida.                                
#7
General Programadores / Re: Organizacion de clases
03 de Octubre de 2002, 03:41:53 PM
                               
CitarBueno, tengo que organizar mi juego de alguna manera, y tengo 3 posibilidades (en este aspecto):
1º - Clases sueltas, y luego creas un objeto de cada y lo utilzas por separado en el programa principal (cVBuffer, cTexture, etc)
2º - 1 clase para cada "engine" del juego (cGraphics, cSound, etc) ke encapsula a las otras del mismo "campo". <- ahora lo tengo asi
3º - 1 Clase (cGame) que encapsule a todas las demas (ia sea en forma 2º o 1º)

cual usais vosotros? k ventajas/inconvenientes tiene cada una ?

Bueno, personalmente para hacer Crisol (puedes obtener el codigo fuente del motor en http://usuarios.lycos.es/crisolengine) cree una clase por cada subsistema. Estas clases a su vez actuan de Facade para cada uno de los demas elementos asociados a dicho subsistema. A parte, existe una clase denominada CCRISOLEngine que actua de Facade de todos los subsistemas.

La coordinacion de las diferentes clases (llamada al subsistema grafico para que haga render, al de sonido para que los reproduzca, etc) lo hago a traves de unas clases que representan los diferentes estados del juego y que son amigas de CCRISOLEngine para poder trabajar con los diferentes subsistemas pero de forma directa, pues los metodos que se ofrecen via interfaz siempre son de caracter general y no permiten, por asi decirlo, bajar a la "sala de maquinas" de la clase.

En fin, supongo que no me habras entendido muy bien, resumiendo:

Uso el metodo 2) para hacer modular el motor y poder trabajar entre subsistemas sin colision, pero acudo al 3) para mantener todas esas clases encapsuladas en un mismo sitio.

Un saludo.                                
#8
Proyectos / Pulsar LMTools 1.0 Beta 1
01 de Enero de 1970, 01:00:00 AM
                                Lord,

felicidades por las herramientas, aunque yo no pueda ser objetivo ya que no estoy en un proyecto en el que las tenga que utilizar (de hecho, no estoy ya en ningun proyecto).

Lo que si que te interesara saber es que ahora LMDX ya si que carga mapas, bueno, casi. Me carga sin problemas el archivo "map.x" con el resto "map.1.lmts" y "map.3.lmts" tengo los problemas que siempre te habia comentado. Creo que estoy puede ayudarte.

Un saludo.                                
#9
Proyectos / lmtools - tech demo :P
01 de Enero de 1970, 01:00:00 AM
                                Me pasa solo cuando cargo el modelo.
No, no he tenido problemas similares con otros programas. Es extraño y si tu tienes una Banshee como yo, tiene que ser alguna particularidad de mi equipo. No se :triste:.

Pd: Tengo las DX8.

Un saludo.                                
#10
Proyectos / lmtools - tech demo :P
01 de Enero de 1970, 01:00:00 AM
                                Hola Lord,

Desgraciadamente me sigue sin funcionar aunque todo esta completamente estabilizado ahora, es decir, no hay cuelgues ni devoluciones al escritorio. En todos los tipos de device y renders, solo consigo ver una pantalla de fondo de color azul, eso si, informacion al dispositivo grafico fijo que se envia porque los frames varian considerablemente entre modo y modo y de forma coherente (mas rapidos en hardware, unos 200 y mucho, y mas lentos en sofware (ahora no recuerdo los fps)).

Como particularidad te comento que en modo hardware no me sale la pantalla azul, sino que se ve un parpadeo multicolor, muy similar a lo que veia antes (por no decirte que igual).

Bueno, eso es todo. He intentado localizar alguna salida por logger a archivo pero no halle nada.

Saludos.                                
#11
Proyectos / Primera beta del motor 3D Merlín YA DISPONIBLE
01 de Enero de 1970, 01:00:00 AM
                                Dracula, me funciona perfectamente. Ir, no me va muy rapido entre carga y muestra (ya sabes que no poseeo un buen equipo) pero funciona correctamente, que es lo importante.

Felicidades por el trabajo! :sonriendo:


                               
#12
General / Visual Studio .NET .. opiniones?
01 de Enero de 1970, 01:00:00 AM
                                X-alien, y a ti quien coño te ha dicho que me interesa una version pirata?.

De todas formas, paso a ignoraros. No sois mas que un par de niños (no se si fisicamente, pero desde luego en mentalidad si).

No llegareis muy lejos en la vida con esa aptitud y, por su puesto, no estais preparados para trabajar en un equipo real. Ni aunque fuerais los mejores desarrolladores del mundo os querrian.

Pd: Madurad, lo necesitais.                                
#13
Proyectos / El Padrastro
01 de Enero de 1970, 01:00:00 AM
                                Si, es lo que dice Lord, la Banshee o le metes 256x256 como MAXIMO o nada. Ademas, has de tener mucho cuidado con los bits por pixel, no les pongas a 32 Bpp o los "pobres" (de ordenador :sonriendo: ) tendremos de nuevo problemas.

Un saludo.

[ Este Mensaje fue editado por: frodrig el 2002-09-13 20:13 ]                                
#14
Programación de audio / Sobre DirectSound
01 de Enero de 1970, 01:00:00 AM
                                Uhmmm, no se si te podre ayudar, porque DirectX lo toque al comienzo de creacion de Crisol para realizar la libreria propia y despues de un añico pues no lo tengo tan fresco como puedas tenerlo tu u otra persona del foro.

A ver, en Crisol yo uso un servidor de recursos de tal forma que cuando registras un sonido, este te devuelve un handle a un arbol. Ese handle sera devuelto a todos aquellos clientes que soliciten registrar el mismo sonido. En las librerias de DirectX que yo implemente, tengo dos clases para trabajar con DirectSound:

CDXDSWAVBuffer
CDXDSWAVSound

La primera lo que hace es mantener, en memoria, el sonido digitalizado mientras que la segunda es la que se encarga de actuar de cliente a ese buffer sin necesidad de tener que replicar los datos.

En otras palabras, cuando se registra un sonido en el servidor de recursos y ese sonido AUN no existe, se crea una instancia a CDXDSWAVBuffer y otra a CDXDSWAVSound. El que registra trabajara con la instancia CDXDSWAVSound creada y todos aquellos clientes que vengan despues a registrar el mismo sonido utilizaran nuevas instancias CDXDSWAVSound pues de lo que se trata es de que no se repitan los datos en memoria.

Bueno, despues de este lio marinero sobre arquitectura, que tu seguro que te sabes de sobra pero que puede ser util para alguien que lea el post, te cuento de forma mas particular.

En la clase CDXDSWAVBuffer hay un metodo llamado Create que recibe el nombre del archivo .wav. Dentro de ese metodo se crea un buffer de sonido llamando a la funcion de DirectSound:

CreateSoundBuffer

Hasta ahi bien, ¿no?. Bueno, pues despues resulta que la clase CDXDSWAVSound posee otro metodo Create en donde, entre otras cosas, se realiza una llamada a la funcion:

DuplicateSoundBuffer

Esta funcion debera de recibir, como ya te imaginaras, el puntero LPDIRECTSOUNDBUFFER (encapsulado en la clase
CDXDSWAVBuffer) para que sepa donde estan los datos que debe de utilizar para crearse y funcionar.

Te dejo el apartado de notas de mi codigo que asocie al metodo Create de la clase CDXDSWAVSound. Por cierto, lo mas gracioso viene ahora: es codigo para las DX 7 :sonriendo:, pero bueno, supongo que a alguien habre ayudado.



// Notas:

// - MUY IMPORTANTE: La llamada a este metodo no siempre tendra exito.

//   DirectX no dejara crear un buffer duplicado en software si el

//   original esta en hardware.

// - Al duplicar un buffer, realmente se crea una referencia a otro

//   buffer ya existente pero pudiendo modificar sus atributos y

//   pudiendo tocarlo o pararlo libremente. El unico problema

//   se derivara al querer cambiar el contenido del buffer.



Saludos.                                
#15
Proyectos / El Padrastro
01 de Enero de 1970, 01:00:00 AM
                                Hola!,

Bueno, he tenido oportunidad de probar la demostracion. En primer lugar felicidades por el motor; me gusta mucho el uso que haces de XML para definir contenido.

El rendimiento del engine es desigual. No me funciona con aceleracion 3D, es decir, me sale el logo de 3DFx pero luego me devuelve al escritorio. Tengo una VooDoo Banshee de 12 megas PCI. En fin, no te preocupes, en general OpenGL no se lleva muy bien con 3DFx y mi equipo no es ninguna maravilla para los tiempos que corren.

En el modo software todo me va, aunque se nota mucho la ralentizacion a la hora de mover el cursor.

El juego en si pues no he jugado mucho. La verdad es que se me ha hecho un poco lento el comienzo, pero parece divertido.

Un saludo y felicidades por tu creacion.                                





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.