Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

  • »Wümpftlbrümpftl« ist der Autor dieses Themas

Beiträge: 774

Beruf: Student

  • Private Nachricht senden

1

21.06.2009, 19:13

Mystische Löcher im 2D [Direct3D] [gelöst]

Hi,
seid sehr langer Zeit steh ich vor einem höchst seltsamen Problem: Löcher im 2D Interface. Plötzlich auf unerklärte Weise aufgetaucht...
Ich erwart nicht, dass jemand bei spärlichen Beschreibung wirklich die Lösung des Problems findet. Aber vielleicht kennt ja jemand das Problem.
Hier ein paar Beispiele:

(Link)


Ein paar Informationen zum Rendern der Oberfläche noch:
Vertexformat:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
struct GVE_API GUIVertex
{
    Vector3         vPosition;  
    float           fRHW;       
    D3DCOLOR        Diffuse;    
    Vector2         vTexture;
    const static DWORD  dwFVF;  
};
const DWORD GUIVertex::dwFVF = D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1;

Einstellt noch über altmodisches FVF wie man lesen kann. Vertices liegen in einem dynamischen Vertexbuffer. Über einen einen DrawPrimitive Aufruf landet das ganze dann schließlich am Bildschirm.
Gerendert wird außerdem über einen sehr simpel gehalten Shader:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
//--------------------------------------------------------------

// VertexShader

//--------------------------------------------------------------

struct VS_OUTPUT
{
   float4 Pos       : POSITION;
   float4 VertexColor   : COLOR;
   float2 Tex0      : TEXCOORD0;
};
VS_OUTPUT VS(VS_OUTPUT In)  // Output == Input

{ return In; }  

//--------------------------------------------------------------

// PixelShader

//--------------------------------------------------------------

float4 PS(float2 Tex0   : TEXCOORD0,
              float4 VertexColor : COLOR) : COLOR0
{ return tex2D(sampTextureWrap, Tex0) * VertexColor * Colorize; }

//--------------------------------------------------------------

// Techniquesection

//--------------------------------------------------------------

TECHNIQUE T1
{
    PASS P1
    {
        ZEnable     = false;
        ZWriteEnable     = false;
        AlphaBlendEnable = true;
        AlphaTestEnable  = false;
        SrcBlend         = SrcAlpha;
        DestBlend        = InvSrcAlpha;
        CullMode         = None;
        VertexShader = compile vs_2_0 VS();
        PixelShader = compile ps_2_0 PS();
    }
}

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

21.06.2009, 19:20

Wie sieht denn die Geometrie dieser Elemente aus? - Sind das einfache Sprites (also 4 Vertex) und Textur drüber?
Renderst du die Texturen ev. in eine andere rein?

  • »Wümpftlbrümpftl« ist der Autor dieses Themas

Beiträge: 774

Beruf: Student

  • Private Nachricht senden

3

21.06.2009, 19:26

Sind einfache "Sprites": 4 Vertices, 2 doppelt, weil es sich um eine D3DPT_TRIANGLELIST handelt.
Textur ist gibts nur eine komplett statische, die auch nirgendwo anders verwendet wird.

Gotbread

Alter Hase

Beiträge: 421

Beruf: Student (Etechnik) + Hiwi

  • Private Nachricht senden

4

21.06.2009, 21:17

was passiert wenn du das control dynamisch vergrößerst? bewegen sich
die löcher mit oder nicht? das wäre schon mal ein wichtiger anhaltepunkt

in welchem format liegen die texturen vor und wie werden sie geladen?
da könnte sich ein alphachannel eingeschlichen haben.

schon mal den stencilbuffer zurückgesetzt?
Mfg Goti
www.gotbread.bplaced.net
viele tolle spiele kostenlos, viele hardware-basteleien :)

"Es ist nicht undicht, es läuft über" - Homer Simpson

  • »Wümpftlbrümpftl« ist der Autor dieses Themas

Beiträge: 774

Beruf: Student

  • Private Nachricht senden

5

21.06.2009, 22:14

Was meinst du mit "das control"?

Ob die Löcher sich direkt bewegen weiß ich nicht; hab aber mal ausgetestet, ob sie sich mit den befallenen Elementen verschieben lassen - also betreffendes Element einfach wo anders hingeschoben --> Loch war am selben Fleck im Element (also ist nicht eine Stelle am Bildschirm).

Die Texturen sind mit Alphakanal, werden als A8R8G8B8 im Speicher mit einstellung Default gehalten. Geladen wird per D3DX aus einem TGA.
Ein Texturproblem ist es aber höchstwahrscheinlich nicht, da die selben Stellen manchmal mit und manchmal ohne Löcher (häufiger) auftreten.

Stencilbuffer benutz ich nicht, der Depthbuffer wird von vorne herein ohne erstellt.

EDIT: Hier noch ein typisches Beispiel wo es mal in einem Button mal auftritt, und im nächsten wieder nicht (nimmt den selben Texturbereich ein):

(Link)

Gotbread

Alter Hase

Beiträge: 421

Beruf: Student (Etechnik) + Hiwi

  • Private Nachricht senden

6

22.06.2009, 00:13

ich vermute, dass an der stelle der alphawert einfach 0 (oder sehr klein ist)

2 möglichkeiten:

1. fehler / outofmemory im treiber -> systemneustart
(hatte ich schonmal das die textur absolut falsch war)

2. debugversion + softwarevertexprocessing einschalten. wenns besser
wird -> fehler im treiber :D

oder mal ohne shader und stattdessen mit fixedfunction
Mfg Goti
www.gotbread.bplaced.net
viele tolle spiele kostenlos, viele hardware-basteleien :)

"Es ist nicht undicht, es läuft über" - Homer Simpson

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

7

22.06.2009, 01:28

Installier mal aktuellen Grafiktreiber ... oder hast du deine Grafikkarte übertaktet? Dann kann sowas auch vorkommen.

  • »Wümpftlbrümpftl« ist der Autor dieses Themas

Beiträge: 774

Beruf: Student

  • Private Nachricht senden

8

22.06.2009, 20:51

Danke für die Tipps. Hab alles soweit durchgegangen/ausprobiert allerdings ohne Ergebnis :(
Ein Treiberproblem scheint es nicht zu sein, da auf anderen Rechnern (komplett andere Hardware!) das selbe Problem auftritt: Die Löcher sind sogar an den selben stellen.
Ein Alphaproblem kann ich auch weitgehend auschließen, da das ganze auch noch bei deaktivierten Alphablending auftritt.
Auch die Textur zu deaktivieren ändert nichts.

9

22.06.2009, 21:04

Hast du das Ganze mal ohne Shader (normal über FFP) gerendert?
fka tm

  • »Wümpftlbrümpftl« ist der Autor dieses Themas

Beiträge: 774

Beruf: Student

  • Private Nachricht senden

10

22.06.2009, 22:45

Hab ich, hat auch nix geändert =(

Werbeanzeige