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

13.03.2010, 17:56

Problem mit dem laden und zeichnen eines Fonts

hi,

ich hab folgendes Problem. Ich lade einen Font aus einer .tga Datei aber es kommt nur ein Laufzeitfehler und die MessageBox unten
Font.h

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <d3d9.h>
#include <d3dx9.h>
#include <dxerr9.h>

#pragma once
class GameFontRoutines{

public:
    //>= Version 1.0

    ID3DXFont *ArialNormal12;

    HRESULT InitFonts(LPDIRECT3DDEVICE9 Device);
    int DrawText(LPCSTR text,DWORD color, int x, int y, int width, int height,ID3DXFont *font);

    
};


Font.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
23
24
25
26
27
28
29
30
31
32
33
34
#include "Font.h"
#include "Framework.h"

int GameFontRoutines::DrawText(LPCSTR text,DWORD color, int x, int y, int width, int height,ID3DXFont *font )
{
    RECT font_rect;
    int font_height;

    SetRect(&font_rect,x,y,width,height);
    font_height=font->DrawText(NULL,text,-1,&font_rect,DT_LEFT|DT_NOCLIP,color);
    return font_height;
};

HRESULT GameFontRoutines::InitFonts(LPDIRECT3DDEVICE9 Device)
{
    HRESULT hr;

    hr=D3DXCreateFont(id3d.pd3dDevice,                  //D3D Device

                     12,                        //Font height

                     0,                         //Font width

                     FW_NORMAL,                 //Font Weight

                     1,                         //MipLevels

                     false,                     //Italic

                     DEFAULT_CHARSET,           //CharSet

                     OUT_DEFAULT_PRECIS,        //OutputPrecision

                     ANTIALIASED_QUALITY,       //Quality

                     DEFAULT_PITCH|FF_DONTCARE, //PitchAndFamily

                     "Arial.tga",                   //pFacename,

                     &ArialNormal12);           //ppFont


    if (FAILED(hr)) MessageBox(NULL,"Fehler beim laden des Fonts","fehler",MB_OK);

    return 0;
};


Aufruf zwischen "BeginScene" und "EndScene":

C-/C++-Quelltext

1
2
3
4
5
GameFontRoutines* gff = NULL;
gff->InitFonts(id3d.pd3dDevice);//Das ist in InitScene nicht in der Rendermethode

...
DWORD color = 0x00ff0000;
gff->DrawTextA("Hallo",color,8,8,19,19,gff->ArialNormal12);


Die Datei ist auch im richtigen Verzeichnis.

Danke schonmal im voraus

mfg
Fabian
Metal ist keine Musik sondern eine Religion.

2

13.03.2010, 18:41

Ändere Arial.tga zu Arial, dann sollte es hinhauen...

3

13.03.2010, 20:10

Nein leider nicht :(
Metal ist keine Musik sondern eine Religion.

BlazeX

Alter Hase

Beiträge: 478

Wohnort: DD

Beruf: Maschinenbau-Student

  • Private Nachricht senden

4

13.03.2010, 21:56

Fang mal die Rückgabewerte ab. Die sagen meist eine ganze Menge.
Dazu könntest du noch das DirectX Debug Level erhöhen, um mehr Infos zum Fehler zu bekommen.


Da wir gerade beim Thema sind: D3DX11 hat kein Font-Interface mehr. Kennt einer Alternativen? Außer ein D3D10-Device parallel zu benutzen und den BackBuffer zu sharen.

5

13.03.2010, 22:26

Beim Debuggen sagt er mir das ArialNormal12=??? ist. Und eben die MessageBox? Das Device ist gültig also verstehe ich nicht was schiefgehen sollte?
Metal ist keine Musik sondern eine Religion.

CBenni::O

1x Contest-Sieger

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

6

13.03.2010, 22:29

...dann konnte er ArialNormal12 nicht laden, bzw. es wurde noch gar nicht erstellt ;)

mfg CBenni::O
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

7

13.03.2010, 22:33

tga ist aber schon das richtige Format oder?XD Ne ich hab die datei doch schon im Projektordner. Ist vllt an der D3DXCREATEFON Funktion bei mir falsch?
Metal ist keine Musik sondern eine Religion.

8

13.03.2010, 22:38

Nee, TGA ist ein Grafikformat. Ok zum Beispiel für Bitmap-/Rasterfonts.

Mit D3DXCreateFont lädst du einen stinknormalen auf dem System installiertem Font (ttf, otf...)

9

13.03.2010, 22:55

Warum geht es dann nicht? Naja ich geh mal davon aus das win7 Arial besitzt
Metal ist keine Musik sondern eine Religion.

10

13.03.2010, 23:07

Ist dein Device (id3d.pd3dDevice) zu diesem Zeitpunkt gültig bzw. erstellt?
Für MipLevels würde ich D3DX_DEFAULT angeben.
Ansonsten ist mir nichts besonderes aufgefallen.
Abgesehen von Parametern, die du nicht nutzt.

Ansonsten - wie von BlazeX angeregt - den Rückgabewert von D3DXCreateFont prüfen.

Werbeanzeige