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

Patrick Egli

Treue Seele

  • »Patrick Egli« ist der Autor dieses Themas

Beiträge: 161

Wohnort: Rainstrasse 38

  • Private Nachricht senden

11

25.11.2010, 20:03

So ich habe nun den Fehler gefunden. Ich hatte mal ein Beispiel mit dem tbConfig gestartet und hatte rausgefunden, das mein Laptop, kein D3DEVTYPE_HAL unterstützt, sondern nur D3DDEVTYPE_REF.

Nun sieht mein CreateDevice-Funktionsaufruf folgendermassen aus:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
// IDirect3DDevice-Schnittstelle erzeugen
    if(FAILED(hResult = m_pD3D->CreateDevice(D3DADAPTER_DEFAULT,
                                             D3DDEVTYPE_REF,
                                             m_hwnd,
                                             D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                             &PresentParams,
                                             &m_pD3DDevice)))
    {
        MessageBox(NULL, "Fehler beim erstellen der IDirect3DDevice-Schnittstelle", "Fehler aufgetreten",
                   MB_OK | MB_ICONEXCLAMATION);

        return VE_ERROR;
    }


Durch die DirectX Debug Runtime bekomme ich keine weiteren Informationen im Debug-Fenster.

Ich sollte mir mal einen eigenen Konfigurations-Dialog schreiben, was bestimmt sehr schwierig ist/wird.

Besten Dank für eure Antworten.

Ich wünsche euch einen schönen Abend.

LG Patrick

Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

12

26.11.2010, 11:01

REF ist das Reference Device, also ein extrem langsamer Software-Renderer. Wenn Du keinen HAL-Device bekommst, brauchst Du meiner Meinung nach gar nicht erst weitermachen.

Das Problem ist auch weiterhin, dass Du irgendwelche ungültigen PresentationParams übergibst. Oder dass Du keinen sinnvollen Grafikkartentreiber installiert hast :-) Kann ja auch sein...

Welches DirectX-SDK hast Du installiert? Zeigen die Include- und Lib-Pfade da auch korrekt rein? Welche Grafikkarte hast Du? Wann hast Du deren Treiber das letzte Mal aktualisiert?
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

Patrick Egli

Treue Seele

  • »Patrick Egli« ist der Autor dieses Themas

Beiträge: 161

Wohnort: Rainstrasse 38

  • Private Nachricht senden

13

26.11.2010, 16:45

Ich habe das DirectX SDK June 2010 auf meinem Laptop installiert. Ich habe eine NVIDIA GeForce GT 330M. Ich weiss nicht genau wann ich das letzte Mal einen neuen Grafiktreiber installiert habe.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

14

26.11.2010, 16:55

Mach bitte mal ein HAL device mit Hardware Vertexprocessing. Wenn du eine Gf330M hast darf das definitiv kein Problem sein.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

15

26.11.2010, 16:56

Und installier einen aktuellen Grafiktreiber. Vielleicht war ja nur der Standard Windows VGA Treiber drauf!? Dein Grafikkarte ist jedenfalls eine D3D10.1 Karte die hat garantiert kein Problem mit D3D9...

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »dot« (26.11.2010, 17:02)


Patrick Egli

Treue Seele

  • »Patrick Egli« ist der Autor dieses Themas

Beiträge: 161

Wohnort: Rainstrasse 38

  • Private Nachricht senden

16

26.11.2010, 19:24

Ok ich versuche das mal und werde auch den aktuellen Treiber installieren.

Ich bin nun schon ein wenig weiter mit meiner Engine, doch nun will ich das man durch einen einfachen Aufruf, ein Dreieck erzeugen kann. Das habe ich auch schon alles geschrieben, doch am Schluss wird kein Dreieck gerendert, warum?

Hier ist ein Codeausschnitt:

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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
// Das Dreieck initialisieren
    veTriangleNormalInit(); // Ist in der Funktion Init, der Klass veDirect3D

veResult veDirect3D::RenderScene()
{
// -----------------------------------------------------------------------------------
// Die Render-Funktion von VisualEngine
// -----------------------------------------------------------------------------------

m_pD3DDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 100), 1.0f, 0);

m_pD3DDevice->BeginScene();

for(int iRenderObjects = 0; iRenderObjects < 10000; iRenderObjects++)
{
if(g_RenderObjects[iRenderObjects].IsRenderObject == true)
{
if(g_RenderObjects[iRenderObjects].RenderObjectType == VE_TRIANGLE)
{
// Ein Dreieck rendern
veRenderTriangle();
}
}
}

m_pD3DDevice->EndScene();

m_pD3DDevice->Present(NULL, NULL, NULL, NULL);

return VE_OK;
}

// veVertexModels.h
//
#pragma once


// Triangle FVF and Vertex
struct veTriangleVertex
{
float x, y, z, rhw;
DWORD Color;
};

#define veTriangleFVF (D3DFVF_XYZRHW | D3DFVF_DIFFUSE)

VE_API veResult veTriangleNormalInit();
VE_API veResult veRenderTriangle();
VE_API veResult veClearTriangle(veRenderObjects RenderObject);

// veVertexModels.cpp
//
#include "VisualEngine.h"

PDIRECT3DVERTEXBUFFER9vTriangle = NULL;// Globaler Zeiger von dem Dreieck-Vertex-Buffer

VE_API veResult veTriangleNormalInit()
{
// -----------------------------------------------------------------------------------
// Das normale Dreieck von der VisualEngine initialisieren
// -----------------------------------------------------------------------------------

HRESULT hResult;

// Die Vertices von dem Dreieck initialisieren
veTriangleVertex TriangleVertices[] =
{
    { 400.0f, 62.5f, 0.5f, 1.0f, D3DCOLOR_XRGB(0, 0, 255), },
    { 650.0f, 500.0f, 0.5f, 1.0f, D3DCOLOR_XRGB(0, 255, 0), },
    { 150.0f, 500.0f, 0.5f, 1.0f, D3DCOLOR_XRGB(255, 0, 0), },

};

// Vertex-Buffer erzeugen f¸r das Dreieck
if(FAILED(hResult = veDirect3D::D3DInstance()->CreateVertexBuffer(3*sizeof(veTriangleVertex),
                              0,
                              veTriangleFVF,
                              D3DPOOL_MANAGED,
                              &vTriangle,
                              NULL)))
{
MessageBox(NULL, "Fehler beim Erstellen des Dreieck-Vertex-Buffers", "Fehler aufgetreten",
   MB_OK | MB_ICONEXCLAMATION);

return VE_ERROR;
}

// Void-Zeiger
VOID * pVoid;

// Nun die Vertices auf den Buffer kopieren, deshalb zuerst den VertexBuffer schliessen.
vTriangle->Lock(0, 0, (void**)&pVoid, 0); // Hier wird der VertexBuffer geschlossen.
memcpy(pVoid, TriangleVertices, sizeof(TriangleVertices)); // Hier wird kopiert.
vTriangle->Unlock(); // Nun wird der VertexBuffer wieder aufgemacht.

return VE_OK;
}

VE_API veResult veRenderTriangle()
{
// Das FVF setzen f¸r das Dreieck
veDirect3D::D3DInstance()->SetFVF(veTriangleFVF);

// Den Vertexbuffer angeben
veDirect3D::D3DInstance()->SetStreamSource(0, vTriangle, 0, sizeof(veTriangleVertex));

// Das Dreieck rendern
veDirect3D::D3DInstance()->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1);

return VE_OK;
}


Kann mir jemand sagen, was hier nicht falsch programmiert habe?

Werbeanzeige