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

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

1

20.06.2010, 19:21

Direct3D10: Probleme beim Kompilieren mit GCC

Hallo,
heute wollte ich mal mein erstes kleines GettingStarted bzw. HelloWorld Programm mit Direct3D10 starten.
Aber leider scheint Microsoft GCC zu hassen. Makros oder was auch immer wie "__in" oder "__out" machen es einem extrem schwer, mit GCC und Code::Blocks ein DX10 Programm zu kompilieren.
Kann mir jemand sagen, ob und wie es möglich ist, dieses Tutorial ohne VisualC++ zum Laufen zu bringen?

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

20.06.2010, 19:32

Hilft dir das?
@D13_Dreinig

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

3

20.06.2010, 19:42

Mh, das ist leider etwas älter, für DirectX8. Und DirectX9 geht bei mir noch wunder bar. Das mit __in, __out und der ganze Kram kahm anscheinend erst ab DirectX10 hinzu.
Deshalb weiß ich nicht, wie ich das jetzt kompiliert bekommen.

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

4

20.06.2010, 19:46

Und mal neben bei: ich glaube zwar nicht, dass dadurch das Problem verschwindet, aber wenn ich jetzt hier das neue DirectX SDK June2010 herunterlade, kann ich dann überhaupt noch unproblematisch DirectX9 Programme kompilieren? Denn wenn nicht, schaue ich ziehmlich dumm aus der Wäsche. Schließlich will ich den DX9 video driver aus meiner Engine nicht einfach entfernen.

storage

Treue Seele

Beiträge: 138

Wohnort: Bad Salzungen

  • Private Nachricht senden

5

20.06.2010, 20:06

Also nen DirectX 9 Tutorial konte ich trotz DirectX SDK June 2010 umsetzen, denke das der rest dann auch geht.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

21.06.2010, 00:32

Versuch vielleicht einfach mal

Quellcode

1
2
3
4
#define __in
#define __in_opt
#define __out
#define __out_opt


Btw: Gibt es einen bestimmten Grund warum du GCC verwenden willst? Und woher hast du eigentlich das DX SDK für den GCC? Die normalen .lib Files des offiziellen SDK werdens bei mingw ja wohl nicht tun!?

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

7

21.06.2010, 11:16

__in und __out selbst als Marko zu definieren hab ich auch schon versucht. Aber da sind viel zu viele Makros die gebraucht werden.
Im Moment verwende ich halt noch hauptsächlich GCC, ich hab's bisher noch nicht geschaft, meine 3D Engine auf VisualC++ zu übertragen - zu viele Fehler in den Systemdateiene wie "C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\GL/gl.h" :pinch:
Ich hab mal geguckt, anscheinend habe ich tatsächlich die libd3d8.a und libd3d9.a Dateien. Vermutlich waren die bei der aktuellsten GCC Version mit dabei.
Wo bekomme ich denn die für d3d10 her?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

21.06.2010, 11:25

Gute Frage^^
Es gibt afaik Tools die eine passende .a zu einer import .lib machen können aber frag mich nix genaues, für Windowsprogrammierung führt imo sowieso kein Weg an Visual Studio vorbei (ich seh zumindest keinen Grund was andres zu verwenden)...
Deine Probleme mit <GL/gl.h> kommen sicher daher dass Windows und damit die entsprechenden Header nur Opengl 1.1 unterstützt. Die Lösung ist entweder alles was über OpenGl 1.1. hinausgeht über Extensions zu laden oder z.B. GLEW zu verwenden.

9

21.06.2010, 14:58

Du musst dir das SDK ganz normal runterladen, die .lib Dateien mit reimp konvertieren, welches bei der Installation mitinstalliert sein sollte, ansonsten einfach die MinGW Utilities herunterladen. Die .a und .h Dateien kopierst du dann am Besten in das MinGW Verzeichnis und schon sollte es funktionieren.

EDIT: Ups, habe meinen Post aus Versehen auf MinGW bezogen. Jedenfalls sollte es mit reimp aber auch für GCC klappen.
Ich weiß es dauert viel zu lange, aber ich habe echt nur Pech. Habe mir heute mal eben im Zeigefinger Nerv und Sehne durchtrennt. Dennoch kann es nicht mehr all zu lange dauern mit dem Tutorial. Außerdem kamen auch noch Prüfungen und dergleichen dazwischen.
Klatscht die Hopper an die Wand, Deutschland ist ein Raverland! :D

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »-insane-« (24.06.2010, 11:07) aus folgendem Grund: MinGW mit GCC vertauscht


LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

10

23.06.2010, 14:25

Ich habe die ganzen Makros wie "__in" usw. jetzt selbst definiert. Die scheinen so wie so nichts zu machen.
Jetzt hänge ich daran fest, dass VisualC++ ein Keyword mehr hat als GCC "__uuidof". (Ich hab ein wenig den Eindruck, durch die Einführung solcher Dinge will Microsoft bewusst verhindern, dass man unter GCC mit DirectX programmieren kann).
Der Code sieht folgender Maßen aus:

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
#ifndef _MSC_VER

#define __in
#define __in_opt
#define __in_bcount(x)
#define __in_ecount(x)
#define __in_bcount_opt(x)
#define __in_ecount_opt(x)

#define __out
#define __out_opt
#define __out_bcount(x)
#define __out_ecount(x)
#define __out_bcount_opt(x)
#define __out_ecount_opt(x)
#define __out_ecount_part_opt(a, b)

#define __inout
#define __inout_opt

#define __uuidof(x) sizeof(x)

typedef char UINT8;

#endif

#include <windows.h>
#include <d3d10.h>

/* ... */

// __uuidof gibt's in GNU C++ nicht :-(
if (FAILED(pSwapChain->GetBuffer(0, __uuidof(ID3D10Texture2D), (LPVOID*)&pBackBuffer)))
    return FALSE;

/* ... */

Werbeanzeige