Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Problema con D3D9, renderizado de basura

Iniciado por fiero, 15 de Enero de 2007, 02:58:07 PM

« anterior - próximo »

fiero

Hola,

Un usuario me ha informado de un problema con mi programa y una de sus tarjetas de video. Parece ser que el programa renderiza líneas sin sentido, esta es una captura:

http://www.devalvr.com/fiero/screenshot_holger.jpg

También tengo los datos de su estructura D3DCAPS9. Estos datos son muy similares a los de mi tarjeta GeforceMX4 64MB, las diferencias que veo son características que yo no utilizo:

DX version: 900
Local VRAM: 67108864
Total mem AGP + VRAM: 61667328
Free mem AGP + VRAM: 61667328
Free video memory: 61667328
Required video memory: 34669181
Bpp: 32
Hardware copy to VRAM: 1
Hardware copy to SYSTEMMEM: 1
Max Vertex Index: 65535
Max Primitive Count: 65535
Max Simultaneous Textures: 2
Max Streams: 16
Max Stream Stride: 256
3D caps:
DeviceType 00000001
AdapterOrdinal 00000000
Caps 00020000
Caps2 00020000
Caps3 00000300
PresentationIntervals 80000001
CursorCaps 00000000
DevCaps 001bbef0
PrimitiveMiscCaps 00000cf2
RasterCaps 00b76181
ZCmpCaps 000000ff
SrcBlendCaps 00001fff
DestBlendCaps 00001fff
AlphaCmpCaps 000000ff
ShadeCaps 00084208
TextureCaps 00034c87
TextureFilterCaps 07030700
CubeTextureFilterCaps 07030700
VolumeTextureFilterCaps 00000000
TextureAddressCaps 00000017
VolumeTextureAddressCaps 00000000
LineCaps 0000001f
MaxTextureWidth 00000800
MaxTextureHeight 00000800
MaxVolumeExtent 00000000
MaxTextureRepeat 00002000
MaxTextureAspectRatio 00000000
MaxAnisotropy 00000002
MaxVertexW 501502f9
GuardBandLeft ccbebc20
GuardBandTop ccbebc20
GuardBandRight 4cbebc20
GuardBandBottom 4cbebc20
ExtentsAdjust 00000000
StencilCaps 000000ff
FVFCaps 00080008
TextureOpCaps 039fffff
MaxTextureBlendStages 00000008
MaxSimultaneousTextures 00000002
VertexProcessingCaps 00000039
MaxActiveLights 00000008
MaxUserClipPlanes 00000000
MaxVertexBlendMatrices 00000002
MaxVertexBlendMatrixIndex 00000000
MaxPointSize 42800000
MaxPrimitiveCount 0000ffff
MaxVertexIndex 0000ffff
MaxStreams 00000010
MaxStreamStride 00000100
VertexShaderVersion fffe0000
MaxVertexShaderConst 00000000
PixelShaderVersion ffff0000
PixelShader1xMaxValue 00000000
DevCaps2 00000000
MaxNpatchTesselationLevel 00000000
Reserved5 00000000
MasterAdapterOrdinal 00000000
AdapterOrdinalInGroup 00000000
DeclTypes 00000001
NumberOfAdaptersInGroup 00000001
NumSimultaneousRTs 00000001
StretchRectFilterCaps 00000000


Estos son los datos de una tarjeta similar a la suya, pero en la que sí funciona mi programa, es una Geforce MX4 64MB:

DX version: 900
Local VRAM: 67108864
Total mem AGP + VRAM: 63766528
Free mem AGP + VRAM: 63724288
Free video memory: 63724288
Required video memory: 34964122
Bpp: 32
Hardware copy to VRAM: 1
Hardware copy to SYSTEMMEM: 1
Max Vertex Index: 65535
Max Primitive Count: 65535
Max Simultaneous Textures: 2
Max Streams: 16
Max Stream Stride: 255
3D caps:
DeviceType 00000001
AdapterOrdinal 00000000
Caps 00020000
Caps2 60020000
Caps3 00000320
PresentationIntervals 8000000f
CursorCaps 00000001
DevCaps 001bbef0
PrimitiveMiscCaps 00000ef2
RasterCaps 05772181
ZCmpCaps 000000ff
SrcBlendCaps 00003fff
DestBlendCaps 00003fff
AlphaCmpCaps 000000ff
ShadeCaps 00084208
TextureCaps 00034d87
TextureFilterCaps 03030700
CubeTextureFilterCaps 03030300
VolumeTextureFilterCaps 00000000
TextureAddressCaps 00000017
VolumeTextureAddressCaps 00000000
LineCaps 0000001f
MaxTextureWidth 00000800
MaxTextureHeight 00000800
MaxVolumeExtent 00000000
MaxTextureRepeat 00002000
MaxTextureAspectRatio 00000800
MaxAnisotropy 00000002
MaxVertexW 501502f9
GuardBandLeft ccbebc20
GuardBandTop ccbebc20
GuardBandRight 4cbebc20
GuardBandBottom 4cbebc20
ExtentsAdjust 00000000
StencilCaps 000000ff
FVFCaps 00080008
TextureOpCaps 039effff
MaxTextureBlendStages 00000008
MaxSimultaneousTextures 00000002
VertexProcessingCaps 00000239
MaxActiveLights 00000008
MaxUserClipPlanes 00000000
MaxVertexBlendMatrices 00000002
MaxVertexBlendMatrixIndex 00000000
MaxPointSize 42800000
MaxPrimitiveCount 0000ffff
MaxVertexIndex 0000ffff
MaxStreams 00000010
MaxStreamStride 000000ff
VertexShaderVersion fffe0000
MaxVertexShaderConst 00000000
PixelShaderVersion ffff0000
PixelShader1xMaxValue 00000000
DevCaps2 00000011
MaxNpatchTesselationLevel 00000000
Reserved5 00000000
MasterAdapterOrdinal 00000000
AdapterOrdinalInGroup 00000000
NumberOfAdaptersInGroup 00000001
DeclTypes 00000000
NumSimultaneousRTs 00000001
StretchRectFilterCaps 03000300


Utilizo una simple renderización de texturas, sin efectos, sin shaders. Esto es lo que hago para el render (a groso modo):

m_pd3dDevice->BeginScene();
m_pd3dDevice->SetFVF(D3DFVF_VERTEXDEVAL);
m_pd3dDevice->SetStreamSource(0, m_pVertexBuffer, 0, sizeof(punto3D));
m_pd3dDevice->SetIndices(m_pIndexBuffer);
m_pd3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,numvertex,0,numtriangulos);
m_pd3dDevice->EndScene();

¿Alguien ha visto este problema alguna vez? Help! Help!

Gracias!
un saludo
www.videopanoramas.com Videopanoramas 3D player

Pogacha

Parece que son overlapaciones del buffereo donde se dibujan faces casí perpendiculares a la camara ...
O sea, no se esta dibujando todo o no se esta dibujando lo que es debido (error de matrices o lados de las caras).
Me iria de cabeza a ver si el lado de la cara a dibujar es la correcta.
Luego revisaria si todos los parametros de iniciación son correctos (matrices y estados)
No me fije pero también miraría si tiene la cap de renderización por indices.
Luego de esto ni idea ...

Saludos y suerte

senior wapo

Mi primera reaccion seria pedirle una captura en modo wireframe y si hace falta enviarle un build con la opcion de renderizar poligonos solidos sin textura (colores de quads alternados en plan casillas de ajedrez).

Asi descartas si es un problema de geometría o de texturas (voto texturas/estados).

Mira a ver si no limpia bien el zbuffer entre frames (si lo usas).

ethernet

Yo valoraría la posibilidad de que la gráfica estuviera rota :P

Kain

Si estuviera rota, tendria fallos al dibujar cualquier juego o prograama que ocupe el video.
b]"La Unica Iglesia Que Ilumina Es La Que Arde"[/b]

fiero

Acerca de los lados de las caras y las matrices, a veces he cometido algún error de este tipo y lo que solía pasar es que se pintaban solo algunos triángulos, o del lado incorrecto. De todas formas si en todas las tarjetas se ve bien es que la geometría y las matrices están bien ¿no?

Me he olvidado poner tres lineas que tambien ejecuto en cada frame (por si veis que me falta algo):

m_pd3dDevice->BeginScene();
m_pd3dDevice->SetFVF(D3DFVF_VERTEXDEVAL);
m_pd3dDevice->SetTransform(D3DTS_VIEW,&matCamara);
m_pd3dDevice->SetTransform(D3DTS_WORLD,&matObjeto);
m_pd3dDevice->SetTexture(0,pTexture);

m_pd3dDevice->SetStreamSource(0, m_pVertexBuffer, 0, sizeof(punto3D));
m_pd3dDevice->SetIndices(m_pIndexBuffer);
m_pd3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,numvertex,0,numtriangulos);
m_pd3dDevice->EndScene();

La matriz de proyección se asigna al crear las superficies de render.

No uso ZBuffer, así que eso queda descartado.
Le voy a mandar una versión con wireframe y texturas cuadriculadas a ver lo que se vé.

Lo de la tarjeta rota era otra opción, le envié al tio un mail preguntando si le funciona otro programa similar al mio, me ha respondido que sí le funciona. También puede ser que el otro programa use OpenGL. ¿Podria ser un problema con los drivers DX?

La verdad es que viendo la captura no se me ocurre que puede estar fallando. El plugin se lo descargan 30000 personas al mes y solo he recibido este problema (no quiere decir que no le falle a mas gente), así que no sé si es una tarjeta rota o qué.

Gracias por las respuestas! ¿alguna idea más?
www.videopanoramas.com Videopanoramas 3D player

BeRSeRKeR

Yo recuerdo que un día mi tarjeta gráfica empezó a mostrar franjas y pixels negros por todas partes (algo así como lo de la imagen) y a veces también como si los triángulos volaran de un lado a otro y era que estaba rota.

Lo más curioso es que sólo me pasaba con juegos Direct3D. Que recuerde no llegó a pasarme con juegos OpenGL.

Aunque bien es cierto que por aquel entonces, a juegos OpenGL sólo jugaba al Quake3 y me imagino que Quake3 no calienta tanto la tarjeta como el Need for Speed Underground, por poner un ejemplo. :lol:

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

fiero

Me acaban de pasar el modelo de tarjeta:

ELSA Gladiac 511
Graphics processor: nVidia GeForce 2MX/MX400
Bus Type: AGP
BIOS version: 3.11.01.30.83
On-Board-Memory: 64 MB
TV-Encoder Type: Conexant Bt 869

Voy a buscar unos drivers actualizados a ver si es ese el problema.

Parece ser que todas las llamadas de DX han tenido éxito, si al final está rota tendré que buscar una forma de detectarla. Creo que pintaré unos triángulos de un color plano en la pantalla y después chequearé el backbuffer, si aparece algo de diferente color desactivaré el modo DirectX (no se me ocurre otra cosa).

Gracias!
www.videopanoramas.com Videopanoramas 3D player

ethernet

Cita de: "Kain"Si estuviera rota, tendria fallos al dibujar cualquier juego o prograama que ocupe el video.

No tiene porque, el hardware cuando falla es tan mágico como el sw :).

Kain

Cita de: "ethernet"
Cita de: "Kain"Si estuviera rota, tendria fallos al dibujar cualquier juego o programa que ocupe el video.

No tiene porque, el hardware cuando falla es tan mágico como el sw :).

Disculpa mi ignorancia pero que es el Sw, Shadow Warrior??

Si estubiera rota, y  si tiene problemas al dibujar eso, tambien tendira al dibujar otras cosas, aunque conociendo el hadware como dices dan cada sorpresa, como cuando le puse mas meoria RAM, en el Slot 1 no funcionaba en el 4 si, en el 2 parecia que al estar cerca de tarjetas de video, se invierte la polaridad y no al reconoce la BIOS, pero para mi es un cuento eso, me lo dijo un tecnico de Windows caundo conversavamos asi que no le creo.

Saludos
b]"La Unica Iglesia Que Ilumina Es La Que Arde"[/b]

vincent

Desarrollo en .Net y metodologías http://devnettips.blogspot.com

fiero

Solución final: Había un problema con los drivers, descargando la ultima versión todo solucionado.

Creo que voy a hacer la función esa de pintar todo el fondo de un color y detectar si hay negro después. Eso me podría servir para mostrar un mensaje si se detecta este error: "Se detectó un problema con su tarjeta de video, por favor, instale los últimos drivers disponibles."

saludos!
www.videopanoramas.com Videopanoramas 3D player






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.