Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[SOLVED] Weird Bug DrawPrimitiveUP
#1
ROZWIĄZANE dzięki ReconProHacker, zobacz po 4.   To jest dla dx9   Moja funkcja DrawTexturedQuad daje mi żal na kartach AMD, ale nie na kartach nVidii. Tekstury będą rysowane tylko na kartach nvidii. Przetestowałem na 7 szt., 4 amd 3 nvidia, wszystkie różne konfiguracje i modele.   Zacznę od jakiegoś kodu   to jest DrawTexturedQuad, którego używam, jFareal opublikowali to chwilę i działało dobrze dla mnie, więc nie trzeba go zmieniać.     Kod:   // DrawTexQuad z jFareal void Rysowanie :: DrawTexturedQuad (IDirect3DTexture9 * texture, int pos_x, int pos_y, int width, int height, const D3DXVECTOR4 i uv) {if (! Texture) return; struct textured_vertex {float x, y, z, rhw; // Zmieniona pozycja (obszar ekranu) dla wierzchołka. unosić tu, tv; // Współrzędne tekstury}; textured_vertex qV [4] = {{static_cast <float> (pos_x), static_cast <float> (pos_y + height), 0.0f, 0.0f, uv. x, uv. w}, {static_cast <float> (pos_x), static_cast <float> (pos_y), 0.0f, 0.0f, uv. x, uv. y}, {static_cast <float> (pos_x + width), static_cast <float> (pos_y + height), 0.0f, 0.0f, uv. z, uv. w}, {static_cast <float> (pos_x + width), static_cast <float> (pos_y), 0.0f, 0.0f, uv. z, uv. y}}; globals -> d3d_device -> SetRenderState (D3DRS_ZENABLE, false); Stan DWORD1, stan2, stan3; globals -> d3d_device -> GetRenderState (D3DRS_ALPHABLLENDENABLE, & state1); globals -> d3d_device -> GetRenderState (D3DRS_SRCBLEND, & state2); globals -> d3d_device -> GetRenderState (D3DRS_DESTBLEND, & state3); globals -> d3d_device -> SetRenderState (D3DRS_ALPHABLLENDENABLE, TRUE); globals -> d3d_device -> SetRenderState (D3DRS_SRCBLEND, D3DBLEND_SRCALPHA); globals -> d3d_device -> SetRenderState (D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA); DWORD stage1, stage2, stage3; globals -> d3d_device -> GetTextureStageState (0, D3DTSS_COLOROP i stage1); globals -> d3d_device -> GetTextureStageState (0, D3DTSS_COLORARG1 i stage2); globals -> d3d_device -> GetTextureStageState (0, D3DTSS_COLORARG2 i stage3); globals -> d3d_device -> SetTextureStageState (0, D3DTSS_COLOROP, D3DTOP_SELECTARG1); globals -> d3d_device -> SetTextureStageState (0, D3DTSS_COLORARG1, D3DTA_TEXTURE); globals -> d3d_device -> SetTextureStageState (0, D3DTSS_COLORARG2, D3DTA_DIFFUSE); // Zignorowano DWORD _fvf; globals -> d3d_device -> GetFVF (& _fvf); globals -> d3d_device -> SetFVF (D3DFVF_XYZRHW | D3DFVF_TEX1); globals -> d3d_device -> SetTexture (0, tekstura); globals -> d3d_device -> DrawPrimitiveUP (D3DPT_TRIANGLESTRIP, 2, qV, sizeof (textured_vertex)); globals -> d3d_device -> SetFVF (_fvf); globals -> d3d_device -> SetTextureStageState (0, D3DTSS_COLOROP, stage1); globals -> d3d_device -> SetTextureStageState (0, D3DTSS_COLORARG1, stage2); globals -> d3d_device -> SetTextureStageState (0, D3DTSS_COLORARG2, stage3); // Ignorowane globale -> d3d_device -> SetRenderState (D3DRS_ALPHABLLOWENCJALNE, etap 1); globals -> d3d_device -> SetRenderState (D3DRS_SRCBLEND, stage2); globals -> d3d_device -> SetRenderState (D3DRS_DESTBLEND, stage3); }   UWAGA: Jestem świadomy blokad stanu, nie chcę ich używać w tej funkcji.         Kod:   if (D3D_OK! = D3DXCreateTextureFromFileInMemory (globals -> d3d_device, GRADIENT_TEXTURE, GRADIENT_TEXTURE_LENGTH, i fill_texture)) {... rejestrowanie błędów ... // nie zgłoszono błędów} ... globals -> drawing -> DrawTexturedQuad (fill_texture, left, góra, szerokość, wysokość, D3DXVECTOR4 (0, 0, 1, 1));   sprites Narysuje teksturę, a jeśli przeciągnę powierzchnię fill_texture i D3DXSaveSurfaceToFile, tekstura zapisuje idealnie dla każdego poziomu mip, więc CreateTexture jest w porządku. Radzę w EndScene i ustawiłem D3DRS_ZFUNC na D3DCMP_ALWAYS (próbowałem nigdy .. tylko dlatego) Próbowałem także tryb cull   również rysowanie kwadratu bez tekstury działa, SetTexture (0, NULL); Ustawiłem każdy tekststagestat, o którym też mogę pomyśleć   jestem zaskoczony, ktoś ma sugestię? został wypróbowany na 4 różnych grach.
Reply
#2
Na testowanych komputerach, które wspomniałeś, były to różne konfiguracje, ale czy mają najnowszy sterownik dla swojej karty? Miałem podobny incydent z tym, że OpenGL renderował tylko do określonego GPU. Ostatecznie metoda nie była obsługiwana przez starsze chipsety i aktualizacja sterownika naprawiła to dla kilku kart, jednak nie dla 100% z nich. Poza tym będę google wokół i zobaczyć, co się pojawi.
Reply
#3
Wiem, że co najmniej dwa z każdego gpu były aktualne, nie miałem pojęcia o innych.
Reply
#4
Jedyne co mogę sobie wyobrazić to to, że dla wierzchołka transformacji, który ma x, y, z, i rhw, rw może domyślnie wynosić 0, co nie powiedzie się renderować tekstury.
Reply
#5
Miałem wiele problemów z renderowaniem / zawieszanie się z najnowszymi sterownikami AMD i wycofałem. Nie mam pojęcia, co jest związane z tym, co widzisz, czy nie. Używam krzyżówki z eyefinity'em, więc to mogło być częścią mojego problemu. Spróbuj dowiedzieć się, jaka wersja sterownika jest uruchomiona. Wersje shaderów mogą być również wybiórcze dzięki kartom AMD.
Reply
#6
Zacytować: Napisał pierwotnie ReconProHacker Jedyne co mogę sobie wyobrazić to to, że dla wierzchołka transformacji, który ma x, y, z, i rhw, rw może domyślnie wynosić 0, co nie powiedzie się renderować tekstury. Cóż, zrobiło to różnicę we właściwym kierunku - nadal problematyczne, ale znacznie lepsze. + rep teraz rysuje się przynajmniej 1 tekstura. będę trochę kopać @ Zoomgod, moje shadery wydają się rysować w porządku (używając 3.0) edit: brakowało rhw na innej funkcji. to naprawiło. dzięki Zgaduję, że nvidia upuszcza 0 rhw i ati mnoży się przez to? fajnie, mogę nawet uciec, mówiąc, że problem był spowodowany czyimś kodem. Domyślam się, że to, co dostaję za pijawki
Reply
#7
Zacytować: Napisał Lamleial Cóż, zrobiło to różnicę we właściwym kierunku - nadal problematyczne, ale znacznie lepsze. + rep teraz rysuje się przynajmniej 1 tekstura. będę trochę kopać @ Zoomgod, moje shadery wydają się rysować w porządku (używając 3.0) edit: brakowało rhw na innej funkcji. to naprawiło. dzięki Zgaduję, że nvidia upuszcza 0 rhw i ati mnoży się przez to? fajnie, mogę nawet uciec, mówiąc, że problem był spowodowany czyimś kodem. Domyślam się, że to, co dostaję za pijawki haha cieszę się, że możemy pomóc, idźcie drużyną! Uważam jednak, że ATI ignoruje fakt, że jest to 0, jednak z mojego doświadczenia wynika, że niezależnie od pogody miałeś 0 lub 1, ale byłby zdeformowany lub źle ustawiony. Naprawdę nie pomieszałem ostatnio z DX lub OpenGL, ale cieszę się, że moje złe doświadczenia z tym samym problemem jakiś czas temu były w stanie cię dzisiaj oszczędzić
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)