Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Pixel Shaders

Iniciado por zupervaca, 27 de Septiembre de 2005, 10:02:53 PM

« anterior - próximo »

zupervaca

 estoy buscando una funcion equivalente a discard del glsl en directx, si alguien la sabe que me la diga (nooo)  

zupervaca

 bueno la unica solucion que he encontrado es activar el blend para que asi haga caso al canal alpha y ponerselo a 0 y no lo pinte, pero esto implica tener que activarlo desde el shader o a la vieja usanza cosa que no me acaba de gustar, ¿alguien sabe hacer que el canal alpha funcione sin tener que activarlo de esta manera desde el shader
AlphaBlendEnable = true;
SrcBlend = SrcAlpha;
DestBlend = InvSrcAlpha;

o esta desde el codigo?
m_pDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, true );
m_pDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA );
m_pDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA );

ademas me imagino que no es lo mismo decir que no lo pinte a que tenga que comprobar el alpha del color

la verdad es que no se si estoy explicandome bien

Pogacha

 Edit: Adivina que: habia leido cualquier cosa !  :lol:  

zupervaca

 bueno a ver si es de esta y me explico, lo que quiero hacer es que desde el shader se tenga en cuenta el canal alpha, por ahora solo funcionan el canal rojo, verde y azul, pero si no activo el blend el canal alpha lo ignora

uniform sampler2D g_Texture;

void main()
{
gl_FragColor.rgb = texture2D( g_Texture, gl_TexCoord[0] );
gl_FragColor.a = 0.5f;
}

este codigo es de un shader en opengl, si activo el blend gl_FragColor.a funciona correctamente, pero si no lo activo pasa de el, en directx ocurre lo mismo, me imagino que es por que hay definir la forma en que actua el canal alpha ¿verda? he probado a dejarlo activado sin tener que utilizarlo y la verdad es que no se nota en velocidad, no se si es por la tarjeta grafica que tengo o por que en vez de mover 24bits mueve 32bits

BeRSeRKeR

 No tiene por qué haber problemas al escribir la componente alpha sin tener activado el alpha blending. Nosotros utilizamos mucho el canal alpha para almacenar por ejemplo las distancias para el DOF o el height map para el parallax mapping. Eso sí, asegúrate de que el formato del buffer donde vas a almacenar todo soporte canal alpha. Por ejemplo A8R8G8B8 y no X8R8G8B8.

Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

zupervaca

 jeje otra vez que me explico mal, el valor de a si cambia sin problemas, pero no hace nada, pense que como el shader te deja hacer cualquier tipo de combinaciones de color en el pixelshader las operaciones con alpha serian igual sin tener que activar el blend, pero como no se tiene acceso al backbuffer desde el shader esto no es posible, bueno eso creo

Ray

 ¿Pero la comprobación alpha no se activa con D3DRS_ALPHATESTENABLE?

...o hablamos de cosas diferentes?






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.