ZFX
ZFX Neu
Home
Community
Neueste Posts
Chat
FAQ
IOTW
Tutorials
Bücher
zfxCON
ZFXCE
Mathlib
ASSIMP
NES
Wir über uns
Impressum
Regeln
Suchen
Mitgliederliste
Membername:
Passwort:
Besucher:
4396318
Jetzt (Chat):
9 (0)
Mitglieder:
5239
Themen:
24223
Nachrichten:
234554
Neuestes Mitglied:
-insane-

ZFX
Coding-Foren
DirectX API
[gelöst] Vertex-Shader Problem
Normal
AutorThema
Positron Offline
ZFX'ler


Registriert seit:
22.08.2007

Niedersachsen
[gelöst] Vertex-Shader ProblemNach oben.
Hallo,

ich habe vor kurzem mit Shadern angefangen und habe dabei offensichtlich ein grundlegendes Problem. Der Rechner auf dem ich meinen Test erstellt habe, zeigt nichts an, auf zwei weiteren Rechnern, auf dem ich es getestet habe läuft alles super. Obwohl ich jetzt schon seit zwei Wochen an dem Problem dran bin finde ich einfach keinen Grund dafür.

Hier mal der Source:
Code:
#define sinNet_D3DFVF (D3DFVF_XYZ|D3DFVF_TEX1)
struct sinNet_Vertex { float px, py, pz, tu, tv;};



Code:
static const char VertexShaderCode[] = 
\"float4x4 matWVP;\"
\"float motion;\"
\"struct VS_OUTPUT\"
\"{\"
 \"   float4 Pos : POSITION;\"
\"    float2 tex : TEXCOORD0;\"
\"};\"
\"VS_OUTPUT vs_main(float3 Pos : POSITION,float2 tex : TEXCOORD0)\"
\"{\"
\"     VS_OUTPUT Out = (VS_OUTPUT)0;\"
\"    float4 vPos = float4(Pos.x, Pos.y, Pos.z, 1.0f);\"
\"    float angle = (Pos.y*0.5+motion)%360;\"
\"    vPos.z += sin(angle);\"
\"    Out.Pos = mul(vPos , matWVP);\" 
\"    Out.tex = tex;\"
\"    return Out;\"
\"}\";    

IDirect3DVertexShader9  *gVertexShader;        // shader
LPD3DXCONSTANTTABLE     g_pConstantTableVS  = NULL; 
D3DXHANDLE                vs_hmWorldMatrix = 0;
D3DXHANDLE                vs_hMotion = 0;


Code:
//-- Init Shader
        ID3DXBuffer *tmp, *error;        
        g_hr = D3DXCompileShader( VertexShaderCode, sizeof(VertexShaderCode)-1, NULL, NULL, \"vs_main\", 
\"vs_2_0\",D3DXSHADER_PREFER_FLOW_CONTROL, &tmp, &error, &g_pConstantTableVS);        
        
        // create the Vertex shader
        g_hr = g_d3d_dev->CreateVertexShader((DWORD*)tmp->GetBufferPointer(), &gVertexShader);
        if( FAILED(g_hr) )
        {    
            LPVOID pCompilErrors = error->GetBufferPointer();
            MessageBox(NULL, (const char*)pCompilErrors, \"Vertex Shader Compile Error\",MB_OK|MB_ICONEXCLAMATION);
        }
        tmp->Release();
        //d3d_dev->CreatePixelShader ((DWORD*)tmp->GetBufferPointer(), &gVertexShader );  
        
        vs_hmWorldMatrix = g_pConstantTableVS->GetConstantByName( NULL, \"matWVP\");    
        vs_hMotion       = g_pConstantTableVS->GetConstantByName( NULL, \"motion\");


Code:
//-- render        
    g_d3d_dev->SetTexture(0,sinNet_pTexture);            

    g_hr = g_d3d_dev->SetStreamSource(0, sinNet_pSinVB, 0, sizeof(sinNet_Vertex));
    g_hr = g_d3d_dev->SetIndices(sinNet_pSinIB);
    g_hr = g_d3d_dev->SetFVF(sinNet_D3DFVF);
    D3DXMatrixMultiply(&matWorldProj,&m_matWorld,&matProj);
    g_hr = g_pConstantTableVS->SetMatrix(g_d3d_dev, vs_hmWorldMatrix, &matWorldProj); 
    _Motion += 0.001f;
    if (_Motion > 360.0f) _Motion -= 360.f;
    g_hr = g_pConstantTableVS->SetFloat(g_d3d_dev, vs_hMotion, _Motion);
    g_d3d_dev->SetVertexShader(gVertexShader);    
    g_hr = g_d3d_dev->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 
sinNet_SinPointsX*sinNet_SinPointsY, 0, (sinNet_SinPointsX-1)*(sinNet_SinPointsY-1)*2);



Der Rechner auf dem es nicht läuft hat als Gfx-Karte eine MSI Geforce 7900 GTO eingebaut. Meine Vermutung liegt darin, dass es dem Setzen der Konstanten liegt. Ich habe auch versucht die Funktion "SetVertexShaderConstantF" zu benutzen und "g_hr = g_pConstantTableVS->SetFloat(g_d3d_dev, "motion", _Motion);". Geholfen hat es leider nicht. Hat jemand eine Idee was ich nicht berücksichtige?

1 Mal gendert, zuletzt am 25.02.2009, 17:54:34 Uhr von Positron.
23.02.2009, 08:46:15 Uhr
Stefan Zerbst Offline
Administrator


Registriert seit:
25.02.2002

Deutschland
Re: Vertex-Shader ProblemNach oben.
Hi,

1. Debug Build von DirectX verwenden
2. Debug Ausgaben von DirectX auf Maximum hochdrehen (DX Control Panel)
3. Applikation im Debugger starten
4. HRESULT Rückgabewerte auswerten
5. Ergebnisse hier wieder posten

Ciao,
Stefan
23.02.2009, 13:57:22 Uhr
ZFX - 3D Entertainment
frittentuete Offline
ZFX'ler


Registriert seit:
08.03.2005

Hamburg
Re: Vertex-Shader ProblemNach oben.
hi,

vielleicht zeigst du uns auch, was du so für renderstates gesetzt hast, ohne normalen ist das mit der beleuchtung zum beispiel schlecht, vielleicht behandeln das deine karte so, dass nichts angezeigt wird, andere nicht.

also am besten D3DRS_LIGHTING mal deaktivieren oder dem vertexshader normalen mitgeben/ pixelshader selbst schreiben.

und sonst die liste von stefan zerbst abarbeiten.

frittentuete
23.02.2009, 17:36:47 Uhr
Positron Offline
ZFX'ler


Registriert seit:
22.08.2007

Niedersachsen
Re: Vertex-Shader ProblemNach oben.
Zitat von Stefan Zerbst:
Hi,

1. Debug Build von DirectX verwenden
2. Debug Ausgaben von DirectX auf Maximum hochdrehen (DX Control Panel)
3. Applikation im Debugger starten
4. HRESULT Rückgabewerte auswerten
5. Ergebnisse hier wieder posten

Ciao,
Stefan


Hallo Stefan,
erst mal Danke!

1. und 2. noch mal überprüft.
3. erledigt.
4. alle S_OK
5. erledigt.

Ich bin jetzt nochmal nach deiner Liste vorgegangen. Ich habe es zwar vorher auch schon so gemacht, aber sicher ist sicher.

Aber genau diese S_OK machen es auch so schwierig für mich.

Grüße
Positron

1 Mal gendert, zuletzt am 23.02.2009, 19:58:33 Uhr von Positron.
23.02.2009, 19:58:04 Uhr
Positron Offline
ZFX'ler


Registriert seit:
22.08.2007

Niedersachsen
Re: Vertex-Shader ProblemNach oben.
Zitat von frittentuete:
hi,

vielleicht zeigst du uns auch, was du so für renderstates gesetzt hast, ohne normalen ist das mit der beleuchtung zum beispiel schlecht, vielleicht behandeln das deine karte so, dass nichts angezeigt wird, andere nicht.

also am besten D3DRS_LIGHTING mal deaktivieren oder dem vertexshader normalen mitgeben/ pixelshader selbst schreiben.

und sonst die liste von stefan zerbst abarbeiten.

frittentuete


Hallo Frittentuete,

D3DRS_LIGHTING ist auf "false" gesetzt. Das habe ich extra gemacht, um den Shader möglichst einfach zu halten. Den Pixel-Shader habe ich aber noch nicht selber geschrieben, das werde ich mal probieren.

Danke und Grüße

Positron

1 Mal gendert, zuletzt am 23.02.2009, 20:02:47 Uhr von Positron.
23.02.2009, 20:01:55 Uhr
Positron Offline
ZFX'ler


Registriert seit:
22.08.2007

Niedersachsen
Re: Vertex-Shader ProblemNach oben.
Es lag tatsächlich an dem nicht vorhandenen Pixel-Shader.

Danke für eure Hilfe!
25.02.2009, 17:54:03 Uhr
Normal


ZFX Community Software, Version 0.9.1
Copyright 2002-2003 by Steffen Engel