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

Progater

Treue Seele

Beiträge: 119

Wohnort: BW

  • Private Nachricht senden

31

01.06.2007, 18:40

1. Danke für die Aufklärung, auch wenn ich jetzt deswegen noch mehr Fragen habe.
- Wieso wird grad' DrawText zu DrawTextW. Es gibt ja auch DrawTransformedText und überhaupt die ganze Engine :?
-Das mit "Aufheben" hab' ich nicht ganz verstanden: Wenn schon eine Funktion zu DrawTextW definiert wurde, musste doch DrawTextW und nicht DrawText aufgehoben werden.

2. Ich habe deinem Vorschlag befolgt und die tbFont.h verändert, sowie die Engine neu kompiliert. Jetzt kann ich zwar die Anwendung erstellen, die Fehlermeldung in Log

Quellcode

1
FEHLER: Der Aufruf von D3DXCreateEffect verursachte den DirectX-Fehler E_FAIL! Beschreibung: An undetermined error occurred (tbeffect.cpp, Zeile 62, Funktion tbEffect::Init) 
ist aber immer noch da.

Ich hab' dann die Erstellung der Schrift auskommentiert und versucht einfache Effekte zu erstellen. Wenn dann in meinem Effekt folgende Zeile steht:

Quellcode

1
STRING TextureFilename1 = "Daten\\Texture1.jpg";

lässt sich das Programm mit diesem Effekt nicht mehr ausführen.
Das kann ich aber nicht nachvollziehen, weil mit DirectX-SDK (Summer 2004) ging es ohne Probleme.
Jetzt habe ich April 2007 auf meiner Festplatte installiert stehen. Und mit dieser SDK lassen sich weder der tbFont-Effekt als auch Effekte mit oben genannten Inhalt erstellen :?
Vielleicht gibt es welche Neuordnungen, was die Effekte angeht, die ich nicht mitgekriegt habe. Ich hoffe eine Antwort zu kriegen ;)
To go back to the drawing board is not everyone's cup of tea! :-)

32

03.06.2007, 13:57

wegen dem drawtext musst du einfach unter projekt->eigenschaften->konfigurationseigenschaften->allgemein bei zeichensatz multi-byte-zeichensatz verwenden auswählen

Progater

Treue Seele

Beiträge: 119

Wohnort: BW

  • Private Nachricht senden

33

03.06.2007, 14:27

Schon OK, hab' das Problem behoben, indem ich wieder die Microsoft DirectX 9.0 SDK (Summer 2004) von der CD installiert habe.
Sie ist zwar schon fast 3 Jahre älter als die April 2007- Version. Dafür funkzioniert bei mir alles.
Trotzdem vielen Dank für die Hilfe.

MfG
Progater
To go back to the drawing board is not everyone's cup of tea! :-)

BlackSnake

Community-Fossil

Beiträge: 1 549

Beruf: Student

  • Private Nachricht senden

34

09.06.2007, 12:31

passt gerade hier so rein.
ich habe jetzt mal die beiden letzten versionen auch in debug hochgeladen
:arrow: Version 33
:arrow: Version 34

35

14.06.2007, 13:11

Zitat von »"herzog"«

bei allen projekten die ich selbst kompiliert habe, starten nicht mehr und es gibt den fehler "d3dx9d_28.dll nicht gefunden.".
also entweder: tribase von der cd und meine projekte laufen nicht
oder: meine tribase und dafür funktioniert z.b das rendern von texten nicht.
ich benutze visual studio 2005. weiß denn jemand was es mit der d3dx9d_28.dll auf sich hat?


Hab mir die dll einfach hier geschnappt ...
http://www.bleachkitty.com/downloads/d3d/d3dx9d_28.dll

( http://www.bleachkitty.com/downloads/ )

Reinkopiert und lief...

36

15.08.2007, 17:27

Hallo ich bin neu in der Welt der Spieleprogrammierung bzw. DirectX

Somit alles was ich nun schreibe mit Vorsicht genießen ;)

Ich benutze Microsoft Visual C++ 2005 Prof. und wollte die TriBase Engine kompilieren mit dem "uralt" SDK gibt es keine Probleme jedoch mit dem aktuellen "DirectX SDK (August 2007)" habe ich die selben Probleme wie von Anderen beschrieben:

Quellcode

1
FEHLER: Der Aufruf von D3DXCreateEffect verursachte den DirectX-Fehler E_FAIL! Beschreibung: An undetermined error occurred (tbeffect.cpp, Zeile 62, Funktion tbEffect::Init)


Das Problem tritt bei folgenden Projekten auf:
- /Beispiele/Kapitel 03/03 - Texte
- /Spiele/Buch/Breakanoid
- /Spiele/Buch/Galactica


Wie Andere schon festgestellt haben wird der Fehler durch "D3DXCreateEffect" ausgelöst.
Somit habe ich erstmal folgende Modifikation gemacht, damit die Compiler\Interpreter Fehler, bei der Debug Version,
in das Log geschrieben werden.
Ein externes Tool zum Syntax Check der FX Scripts wäre praktisch jedoch habe ich so etwas nicht im SDK gefunden.

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
// Erstellen aus einem String

tbResult tbEffect::Init(char* pcCode,
                        int iSize)
{
    HRESULT hResult;

    // Die Klasseninstanz zurücksetzen.

    // Damit wird ermöglicht, dass der Init-Aufruf mehrere Male mit

    // derselben Instanz funktioniert.

    Exit();

    // Parameter prüfen und sicherstellen, dass Direct3D initialisiert wurde

    if(!pcCode)                         TB_ERROR_NULL_POINTER("pcCode", TB_ERROR);
    if(iSize == 0 || iSize < -1)        TB_ERROR_INVALID_VALUE("iSize", TB_ERROR);
    if(!tbDirect3D::IsInitialized())    TB_ERROR("Direct3D wurde noch nicht initialisiert!", TB_ERROR);


    // Länge anpassen

    if(iSize == -1) iSize = strlen(pcCode);

    //Debug Log

    #ifdef _DEBUG
    LPD3DXBUFFER ppCompilationErrors = NULL;
    // Jetzt den Effekt erstellen

    if(FAILED(hResult = D3DXCreateEffect(tbDirect3D::Instance().GetDevice(),
        pcCode, iSize, NULL, NULL, 0,
        tb_g_pEffectPool, &m_pEffect, &ppCompilationErrors)))
    {
        // Fehler!

        TB_ERROR_MESSAGE(ppCompilationErrors->GetBufferPointer());
        TB_SAFE_RELEASE(ppCompilationErrors);
        TB_ERROR_DIRECTX("D3DXCreateEffect", hResult, TB_ERROR);
    }
    else TB_SAFE_RELEASE(ppCompilationErrors);

    //Release Log

    #else
    // Jetzt den Effekt erstellen

    if(FAILED(hResult = D3DXCreateEffect(tbDirect3D::Instance().GetDevice(),
        pcCode, iSize, NULL, NULL, 0,
        tb_g_pEffectPool, &m_pEffect, NULL)))
    {
        // Fehler!

        TB_ERROR_DIRECTX("D3DXCreateEffect", hResult, TB_ERROR);
    }
    #endif

    

    // Effektbeschreibung abfragen

    m_pEffect->GetDesc(&m_Desc);

    // Die erste gültige Technik setzen

    SetTechnique(-1);

    return TB_OK;
}



Mit dieser Modifikation findet man recht schnell heraus, dass das Problem darin liegt, dass
die Script Engine nicht damit klar kommt wenn Variablen so heißen wie ihr Typ und das ist eben der Fall
bei der "tbFont" Initialisierung (TEXTURE Texture):

tbFont.cpp:

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
if(m_pEffect->Init("TEXTURE Texture;\n"
                       "\n"
                       "TECHNIQUE T1\n"
                       "{\n"
                       "    PASS P1\n"
                       "    {\n"
                       "        Texture[0]          = <Texture>;\n"
                       "        ZEnable             = False;\n"
                       "        ZWriteEnable        = False;\n"
                       "        ColorOp[0]          = Modulate;\n"
                       "        ColorArg1[0]        = Texture;\n"
                       "        ColorArg2[0]        = Current;\n"
                       "        ColorOp[1]          = Disable;\n"
                       "        AlphaOp[0]          = Modulate;\n"
                       "        AlphaArg1[0]        = Texture;\n"
                       "        AlphaArg2[0]        = Current;\n"
                       "        AlphaOp[1]          = Disable;\n"
                       "        AlphaBlendEnable    = True;\n"
                       "        SrcBlend            = SrcAlpha;\n"
                       "        DestBlend           = InvSrcAlpha;\n"
                       "    }\n"
                       "}\n", -1))

also einfach zu folgendem ändern:

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
if(m_pEffect->Init("TEXTURE Texture1;\n"
                       "\n"
                       "TECHNIQUE T1\n"
                       "{\n"
                       "    PASS P1\n"
                       "    {\n"
                       "        Texture[0]          = <Texture1>;\n"
                       "        ZEnable             = False;\n"
                       "        ZWriteEnable        = False;\n"
                       "        ColorOp[0]          = Modulate;\n"
                       "        ColorArg1[0]        = Texture;\n"
                       "        ColorArg2[0]        = Current;\n"
                       "        ColorOp[1]          = Disable;\n"
                       "        AlphaOp[0]          = Modulate;\n"
                       "        AlphaArg1[0]        = Texture;\n"
                       "        AlphaArg2[0]        = Current;\n"
                       "        AlphaOp[1]          = Disable;\n"
                       "        AlphaBlendEnable    = True;\n"
                       "        SrcBlend            = SrcAlpha;\n"
                       "        DestBlend           = InvSrcAlpha;\n"
                       "    }\n"
                       "}\n", -1))

Zusätzlich muss man noch Folgende zwei Zeilen anpassen:

    // Textur setzen

    m_pEffect->GetEffect()->SetTexture("Texture1", m_pTexture);

    // Textur aus dem Effekt nehmen

    if(m_pEffect) m_pEffect->GetEffect()->SetTexture("Texture1", NULL);

Mit diesen Veränderungen neu kompilieren und das
"/Beispiele/Kapitel 03/03 - Texte" Projekt geht schon mal einwandfrei.
"Breakanoid" & "Galactica" starten nun immerhin spucken dann aber später bei den anderen Skripts Fehler aus und beenden sich

Bei Galactica muss man bei der Sprites.fx und Gui.fx so verfahren wie bei tbFont sprich "Texture" wird zu "Texture1"
und jeweils die beiden SetTexture() Aufrufe anpassen.

Das ist leider noch nicht alles, da in den TBM Files weitere FX Scripts sind die scheinbar zu ähnlichen Problemen führen.

Damit werde ich mich die Tage beschäftigen und sofern ich was hin bekomme ein Listing posten was man nun alles verändern muss um die TriBase Engine mit "DirectX SDK (August 2007)" zu nutzen bzw. die Spiele zu spielen.

Vielleicht hat ja noch jemand anderes Lust ein wenig zu suchen ^^
Hoffe ich konnte vielleicht dem ein oder anderen damit helfen.

Das Buch ist jedenfalls sehr sehr gut geschrieben :)


Update\Edit:
Okay wer lesen bzw. suchen kann ist klar im Vorteil :roll:
wie schon in einem anderen Thread geschrieben besteht das einzige weitere Problem darin dass aus STRING nun string wurde.
Sprich entweder alle TBM files mit dem "ModelConverter" editieren -> ca. 1 Stunde Zeitaufwand oder einfach mit einem Hex-Editor wie hex workshop Search&Replace bei allen TBM files. -> 5 min Zeitaufwand. Danach funktioniert "Breakanoid" und "Galactica" ohne Probleme auch mit dem neusten SDK.

Immerhin ist die Wahrscheinlichkeit nun doppelt so groß das jemand die Lösung für dieses problem findet ;)

Blacklotus :lol:

cebassion

Frischling

Beiträge: 1

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

37

07.11.2007, 12:41

Trotz der vorgeschlagenen Veränderungen und weiterer Nachforschungen bin ich mit diesem Problem auch noch nicht weiter...

Ob Galactica, oder ein eigenes Projekt, basierend auf der TriBase - Der Fehler ist immer der gleiche: In dem Moment wo die Textur und ihr Effekt ins Spiel kommen, hakt es.

Ich habe mal die komplette Debuggerausgabe (ab Fehler) hier...
Es scheint halt ein Problem mit der Textur bzw. deren Handle zu geben, was dann alles andere nach sich zieht (die Fehler im COLORARG1 und ALPHAARG1)

Debugger-Ausgabe:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
D3DX: Unrecognized shader version
D3DX: Unrecognized shader version
s:\studio8t88SVN\Code\Dummy\GrafikDummy\GrafikDummy\memory(11,3): ID3DXEffectCompiler: State 'COLORARG1' must be assigned a numeric scalar or a 4-float vector
s:\studio8t88SVN\Code\Dummy\GrafikDummy\GrafikDummy\memory(15,3): ID3DXEffectCompiler: State 'ALPHAARG1' must be assigned a numeric scalar or a 4-float vector
ID3DXEffectCompiler: There was an error initializing the compiler
FEHLER: Der Aufruf von D3DXCreateEffect verursachte den DirectX-Fehler E_FAIL! Beschreibung: An undetermined error occurred (tbeffect.cpp, Zeile 63, Funktion tbEffect::Init)
FEHLER: Fehler beim Erstellen des Effekts! (tbfont.cpp, Zeile 100, Funktion tbFont::Init)
FEHLER: Fehler beim Laden der Schriftart! (tbfont.cpp, Zeile 135, Funktion tbFont::Init)
FEHLER: Fehler beim Laden einer Schriftart! (grafikdummy.cpp, Zeile 86, Funktion GrafikDummy::Init)
INFO: Die Direct3D-Komponente wurde heruntergefahren. (tbdirect3d.cpp, Zeile 313, Funktion tbDirect3D::Exit)
INFO: Die DirectInput-Komponente wurde heruntergefahren. (tbdirectinput.cpp, Zeile 784, Funktion tbDirectInput::Exit)
INFO: Die DirectSound-Komponente wurde heruntergefahren. (tbdirectsound.cpp, Zeile 128, Funktion tbDirectSound::Exit)
INFO: Der Texturmanager wurde heruntergefahren. (tbtexturemanager.cpp, Zeile 59, Funktion tbTextureManager::Exit)
INFO: TriBase-Engine wird heruntergefahren... (tribase.cpp, Zeile 113, Funktion tbExit)
INFO: Alle Speicherbereiche freigegeben! (tbmemory.cpp, Zeile 116, Funktion tbMemExit)
INFO: Herunterfahren abgeschlossen! (tribase.cpp, Zeile 149, Funktion tbExit)



Als .fx-Datei habe ich die GUI.fx von Galactica verwendet. Es soll eine GUI erzeugt werden. Den Texturenamen habe ich in der GUI.fx natürlich geändert ;)

Der Aufrufcode:

C-/C++-Quelltext

1
2
3
4
  m_GUISkin.pSkinTexture = tbTextureManager::Instance().GetTexture("data\\graphics\\GUI.bmp", TRUE, D3DX_DEFAULT, D3DX_DEFAULT, 1, D3DFMT_UNKNOWN, 0, D3DPOOL_MANAGED, D3DX_DEFAULT, D3DX_DEFAULT, D3DCOLOR_XRGB(255, 0, 255));
  m_GUISkin.pEffect = new tbEffect; 
  m_GUISkin.pEffect->Init("data\\graphics\\GUI.fx");
  m_GUISkin.pEffect->GetEffect()->SetTexture("BoxTexture", m_GUISkin.pSkinTexture);


Vielleicht hilft jemanden ja die Debug-Ausgabe weiter.

Werbeanzeige