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

1

23.08.2009, 15:07

Can't compile Shaders?

Tach Leute,

hab folgendes Problem, bei mir klappt die Funktion D3DXCompileShaderFromFile nicht, weiß wirklich nicht wo der Fehler liegt, darum poste ich mal den Code :/

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
HSHADER CALL HGE_Impl::Shader_Create(const char *filename)
{
    LPD3DXBUFFER                    code            = NULL;
    LPDIRECT3DPIXELSHADER9          pixelShader    = NULL;
    HRESULT result = D3DXCompileShaderFromFile( filename,   //filepath

                                        NULL,          //macro's            

                                        NULL,          //includes           

                                        "ps_main",     //main function      

                                        "ps_2_0",      //shader profile     

                                        0,             //flags              

                                        &code,         //compiled operations

                                        NULL,          //errors

                                        NULL);         //constants

    if(FAILED(result)) {
        _PostError("Can't create shader");
        return NULL;
    }

    pD3DDevice->CreatePixelShader((DWORD*)code->GetBufferPointer(), &pixelShader);
    code->Release();
    return (HSHADER)pixelShader;
}


shader1.psh

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
float4 ps_main( float2 Tex : TEXCOORD0 ) : COLOR0
{
    float4 Color;
    
    Color.a = 1.0f;
    Color.rgb = 0.5f;
    Color -= tex2D( g_samSrcColor, Tex.xy-0.001)*2.0f;
    Color += tex2D( g_samSrcColor, Tex.xy+0.001)*2.0f;
    Color.rgb = (Color.r+Color.g+Color.b)/3.0f;

    return Color;
}


Wenn ich

C-/C++-Quelltext

1
shad1 = hge->Shader_Create("shader1.psh");

aufrufe steht in der log Datei immer "Can't create shader" ?
shader1.psh liegt im gleichen Ordner wie die .exe.

BS: Win7

Kann es vllt daran liegen ? :?

lg
unknown

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

23.08.2009, 15:29

Ich würd dir mal empfehlen den ppErrorMsgs Parameter von D3DXCompileShaderFromFile zu benutzen um herauszufinden was der Shadercompiler an deinem Shader auszusetzen hat.

Auf den ersten Blick würd ich mal sagen dass du g_samSrcColor nirgendwo deklariert hast...

Gotbread

Alter Hase

Beiträge: 421

Beruf: Student (Etechnik) + Hiwi

  • Private Nachricht senden

3

23.08.2009, 15:41

Quellcode

1
Tex.xy-0.001


geht das überhaupt? müsste das nicht

Quellcode

1
Tex - float2(0.001f, 0.001f)


heißen?

ich arbeite nicht so viel mit swizzels kann auch richtig sein
Mfg Goti
www.gotbread.bplaced.net
viele tolle spiele kostenlos, viele hardware-basteleien :)

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

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

23.08.2009, 15:53

Das sollte afaik funktionieren...

5

23.08.2009, 16:49

Tach,

habe jetz

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
HSHADER CALL HGE_Impl::Shader_Create(const char *filename)
{
    LPD3DXBUFFER                    code            = NULL;
    LPD3DXBUFFER                    error           = NULL;
    LPDIRECT3DPIXELSHADER9          pixelShader    = NULL;
    HRESULT result = D3DXCompileShaderFromFile( filename,   //filepath

                                        NULL,          //macro's            

                                        NULL,          //includes           

                                        "ps_main",     //main function      

                                        "ps_2_0",      //shader profile     

                                        0,             //flags              

                                        &code,         //compiled operations

                                        &error,          //errors

                                        NULL);         //constants

    if(FAILED(result)) {
        _PostError("Can't create shader");
        return NULL;
    }

    pD3DDevice->CreatePixelShader((DWORD*)code->GetBufferPointer(), &pixelShader);
    code->Release();
    return (HSHADER)pixelShader;
}


Doch wie lese ich 'error' aus ? o.g. Code erstellt mir ne .dll also kann ich kein test shader einlesen und mim debugger durch :/

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

23.08.2009, 16:57

error->GetBufferPointer() gibt dir die Fehlermeldung, einfach in einen char* casten ;)

7

23.08.2009, 17:13

Tach,

und wieder was gelernt ;)
Wurde auch schlauer, bezüglich de Fehlers :)

Can't create shader
error X3506: Only 3_x and earlier targets are supported on this compiler.

Kann es sein das mein pixel shader 4.0 der Fehler is :/ ?

lg

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

23.08.2009, 17:17

Also ich seh nicht wo du da oben ps_4_0 verwendest, aber Pixel Shader 4.0 gibts jedenfalls erst ab Direct3D 10...

9

23.08.2009, 17:21

tach,

ach mist, hatte in meiner version noch ps_4_0 drinne -.-'

So, jetz der nächste Fehler:

error X3017: 'tex2D': cannot implicitly convert from 'int' to 'const sampler2D'

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

23.08.2009, 17:27

Wie ich schon sagte: Was ist g_samSrcColor?

Werbeanzeige