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 - MA]Mestre

#1
Programación gráfica / GDI RGBA vs D3DTexture RGBA
20 de Junio de 2007, 10:25:02 PM
Hola marcode,

No, D3DFMT_X8R8G8B8 no funciona.

Todo y que no estoy 100% seguro de que OleDraw este trabajando bien, voy a asegurarme que pinta usando el Alpha pintando sobre otra cosa que no sea la textura de D3D.

Se me acaba de ocurrir que si pudiera hacer un 'GetBuffer' del HDC y este lo copio en la textura podia ser una solución. No se si es factible, tengo q bucear por google/msdn.

Se agradece cualquier idea.
#2
Programación gráfica / GDI RGBA vs D3DTexture RGBA
20 de Junio de 2007, 01:14:02 PM
Hola,

Usando OleDraw, que internamente llama a IViewObject::Draw()
...
hr = OleDraw(lpV, DVASPECT_TRANSPARENT, hdcDraw, &rTotal);
...
donde:

lpV – es una interfaz de IViewObject.
DVASPECT_TRANSPARENT dibuja usando alpha blenfing.
hdcDraw – offscreen HDC
rTotal – rectangulos cliente del total a pintar

El problema aparece cuando el hdcDraw lo quiero extraer de una textura de DirectX.

1.-Creo la textura vacia. (D3DFMT_A8R8G8B8)
2.-IDirect3DTexture9::GetSurfaceLevel
3.-IDirect3DSurface9::GetDC

falla el GetDC porque he creado una textura RGBA.

IDirect3DSurface9::GetDC is valid on the following formats only: D3DFMT_R5G6B5, D3DFMT_X1R5G5B5, D3DFMT_R8G8B8, and D3DFMT_X8R8G8B8. Formats that contain Alpha are not supported because the GDI implementations don't have a well-defined behavior on the alpha channel. For more information about formats, see D3DFORMAT.

Alguna idea de como puedo llegar a 'pintar' una textura con el contenido del hdcDraw con alpha ? el proceso deberia no ser muy lento, pues realizaria el proceso constantemente en el render.

Gracias.
#3
Programación de audio / Delay / Buffering
20 de Junio de 2007, 11:53:40 AM
Hola,

Al final hice un filtro retardador en DShow.
Basado en el ejemplo del SampleGrabber q trae DShow.

Dejo el codigo más relevante que he agergado, es bastante simple:

HRESULT CSampleGrabber::Receive( IMediaSample * pms )
{
   CheckPointer(pms,E_POINTER);

   HRESULT hr;
   AM_SAMPLE2_PROPERTIES * const pProps = m_pInput->SampleProps();

//BufferTime
long ldatasize=pms->GetActualDataLength();
long ldatasize100=ldatasize * m_iDelay;
long ldatasize99=ldatasize * (m_iDelay-1);

REFERENCE_TIME ini,fin;

pms->GetTime (&ini,&fin);
if (!ini)
{
if (m_Buff)
ZeroMemory (m_Buff,ldatasize100);
}

if (!m_Buff)
{
m_Buff=(BYTE *)VirtualAlloc(NULL,ldatasize100,MEM_COMMIT | MEM_RESERVE,PAGE_READWRITE);
m_Buff2=(BYTE *)VirtualAlloc(NULL,ldatasize100,MEM_COMMIT | MEM_RESERVE,PAGE_READWRITE);
ZeroMemory (m_Buff,ldatasize100);
}

BYTE *pmsBuff;
pms->GetPointer(&pmsBuff);

CopyMemory (m_Buff2, m_Buff, ldatasize99 );
CopyMemory (m_Buff + ldatasize, m_Buff2, ldatasize99 );

CopyMemory (m_Buff, pmsBuff, ldatasize );

CopyMemory (pmsBuff ,m_Buff + ldatasize99, ldatasize);
       ...
       <codigo por defecto del SampleGrabber>
#4
Programación de audio / Delay / Buffering
28 de Mayo de 2007, 10:37:12 PM
Cita de: "ethernet"Te creas un buffer, almacenas el valor del sample que te viene y lo sueltas cuando pase un tiempo. Cuanto más grande el buffer, más tiempo. Código de ejemplo:

http://www.musicdsp.org/archive.php?classid=4#153

Me aspotaría algo a que direct sound (o como pijos se llame ahora) lo lleva implementado.


ethernet, el problema no es "cual es la logica de un delay" sino como capturar la senyal Wave que he de retrasar.

he usado la opcion de delay del AC3 Filter pero me da derivas/oscilaciones el delay.
#5
Programación de audio / Delay / Buffering
28 de Mayo de 2007, 06:15:39 PM
Pogacha
No entiendo, que es un "delay del wave de la tarjeta de sonido"?

De los canales que puede controlar una tarjeta de sonido ( Line IN, Microfono, Onda ( Wave ) ), me interesa interactuar con uno de ellos. Concretamente el de Onda ( Wave )

Que me interesa hacer con el ? Pues un retraso. Por ejemplo:
Abro una carpeta i esto genera un pequeño sonido. Si tengo un retraso de 2000ms este se escuhca con ese retardo.

TrOnTxU
Como desde direct directShow puedo acceder al Wave para tratarlo ? Puedo capturar el Wave ? o tengo q sacarlo a otra tarjeta de sonido i capturarlo por el Line IN ?

Trabajo con WinX.

Saludos.
#6
Programación de audio / Delay / Buffering
28 de Mayo de 2007, 03:57:53 PM
Hola,

Desearia realizar un delay del wave de la tarjeta de sonido.

Para ello, me da igual que:

-La tarjeta de sonido traiga un soft que permita realizarlo. ( cual ? )
-Tener que implementarlo ( como ? es posible ? )

Gracias.
#7
Programación gráfica / Rendimiento bajo con ID3DXFont
28 de Mayo de 2007, 02:44:49 PM
[EX3]
Generar la textura puede resultar muy "molesto" en textos que tranquilamente pueden alcanzar 2000 caracteres.

marcode
Generar un mesh de texto convierte en sumamente más lento aun el proceso de render. Claro q en textos muy grandes podria darse el caso de que el rendimiento pasara de ser muy malo a solo malo.

Creo que no me va a quedar otra q trocear el texto. Lo que precisamente no queria hacer.

Saludos y gracias.
#8
Programación gráfica / Rendimiento bajo con ID3DXFont
23 de Mayo de 2007, 11:12:48 AM
Hola,

Estoy intentando realizar unos títulos de crédito que se desplazan ( SCROLL ) de abajo a arriba con C++/DirectX 9. Para ello uso ID3DXFont en el renderizado del texto.

El rendimiento de la aplicación disminuye propocionalmente a la cantidad de texto ( y el tamaño ) renderizada con ID3DXFont::DrawText alcanzando sutuaciones bastante pésimas de rendimiento.

Puedo llegar a formatear cadenas muy largas de hasta más de 1000 carácteres. Puedo hacer clipping con el parámetro pRect de DrawText, pero sálo por la parte del bottom. Dado que como es en movimiento ascendente necesito arrastrar el top hacia arriba aún con valores negativos...

rect.top--; // Cada vez que renderizo
               // rect.top alcanza valores negativos, pero como el texto es
              //  muy largo se sigue viendo en pantalla.

He probado usar Scissor, pero no mejora el rendimiento, por lo que supongo que el cuello de botella esta en la generación de todo el texto con la fuente seleccionada.

Cosas/dudas que tengo en mente:

*Creo que el problema radica en la 'creación del texto' cada frame y no en el renderizado. Se deberia poder guardar en 'algún sitio' para solo tener que volcarlo. DirectDraw ?¿.

*Algun otro sistema para generar texto ?¿ que admita cualqueir fuente instalad en el sistema. D3DXCreateText mejorara ?¿ Tambien he leido algo acerca de CD3DFont. Comentan que es más rápido pq no usa GDI. Deberia encontrar esa clase en \Samples\C++\Common pero en la SDK de DirectX9 de dec2006 no esta. ?¿

Estoy abierto a todas las ideas, cuanto mas ingeniosas mejor.  Pero trocear el texto en N porciones ( 10 porciones de 100 ), e irlas renderizando solo si se encuentran dentro pantalla me complicaria muchisimo la vida por la arquitectura del soft que ya esta implementado.

Un saludo, y gracias de antemano.
#9
General Programadores / Silenciar LineIn del AudioDefault
16 de Marzo de 2007, 01:06:55 PM
Bueno ya lo tengo resuelto. El hilo a partir de donde he tirado para sacarlo lo  dejo en un link.

http://www.codeproject.com/audio/mixerSetControlDetails.asp?df=100&forumid=16481&exp=0&select=959354


saludos.
#10
General Programadores / Silenciar LineIn del AudioDefault
14 de Marzo de 2007, 06:30:01 PM
Hola,

A ver si alguien me puede poner sobre la pista de como obtener el Default Audio Device y poder Silenciar el Line IN.

Gracias.
Un saludo.
#11
General Programadores / Programacion RS-232/422/48
27 de Enero de 2007, 11:05:33 AM
Me hace falta tanto en C/C++, como en .NET. El documento de _AtilA_ me va de perlas. Diferencial me haria faltaalgun ejemplo tonto en .NET, te envio un mp con la direccion de hotmail.

Un saludo y gracias.
#12
General Programadores / Programacion RS-232/422/48
23 de Enero de 2007, 03:46:55 PM
Hola,

Si alguno de vosotros tubiera experiencia en programacion con dispositivos mediante RS-232/422/485, me puediera recomendar alguna documentacion o tutorial, estaria muy agradecido.

Un saludo.
#13
Principiantes / [GIMOVJ] 00 - Configuracion de Wings3D
16 de Noviembre de 2006, 09:53:20 PM
Thanks Jove.
#14
General / localizar cadena en visual basic
08 de Noviembre de 2006, 07:10:37 PM
Cita de: "bnl"Si, creo q vale lo que te comente.

if cadena.IndexOf("luis") <> -1 then
   "OK"
end if


if cadena.IndexOf("# luis #") <> -1 then
   "OK"
end if

:wink:





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.