OldSchoolHack

Registrieren / Anmelden Deutsch

String-Drawing funktioniert nicht


icon String-Drawing funktioniert nicht #1

Anmeldungsdatum: Jul 2014

Beiträge: 12

Benutzer-Bewertung:

3 positiv
0 negativ
Hi,

zuletzt habe ich OSHGui 2014 verwendet. Dort ging das String-Drawing noch. Ich habe nun die neueste trunk-Version geladen.
Seitdem crasht es bei Strings. Ich vermutete erstmal, dass die Font nicht geladen werden konnte, aber...


TEXT Code:
  1. font = shared_ptr {lineSpacing=0.000000000 pointSize=8.00000000 antiAliased=false ...} [1 strong ref, 1 weak ref] [make_shared]


Ist also alles wie gewollt (Arial, 8.0f, false - genau wie im Sample). Code zum rendern:

TEXT Code:
  1. g.DrawString("bla", Application::Instance().GetDefaultFont(), Drawing::Color::Green(), Drawing::PointF(500, 500));

Hier ist der Call-Stack:
TEXT Code:
  1. meinHack.dll!OSHGui::Drawing::Direct3D9Texture::CreateDirect3D9Texture(const OSHGui::Drawing::Size<float> & size, _D3DFORMAT format) Zeile 269
  2. meinHack.dll!OSHGui::Drawing::Direct3D9Texture::Direct3D9Texture(OSHGui::Drawing::Direct3D9Renderer & _owner, const OSHGui::Drawing::Size<float> & _size) Zeile 173
  3. meinHack.dll!OSHGui::Drawing::Direct3D9Renderer::CreateTexture(const OSHGui::Drawing::Size<float> & size) Zeile 148
  4. meinHack.dll!OSHGui::Drawing::FreeTypeFont::Rasterise(unsigned int startCodepoint, unsigned int endCodepoint) Zeile 193
  5. meinHack.dll!OSHGui::Drawing::Font::GetGlyphData(unsigned int codepoint) Zeile 65
  6. meinHack.dll!OSHGui::Drawing::Font::DrawText(OSHGui::Drawing::GeometryBuffer & buffer, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & text, const OSHGui::Drawing::Point<float> & position, const OSHGui::Drawing::Rectangle<float> * clip, const OSHGui::Drawing::ColorRectangle & colors, const float spaceExtra, const float scaleX, const float scaleY) Zeile 160
  7. meinHack.dll!OSHGui::Drawing::Graphics::DrawString(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & text, const std::shared_ptr<OSHGui::Drawing::Font> & font, const OSHGui::Drawing::Color & color, const OSHGui::Drawing::Point<float> & origin) Zeile 268
  8. meinHack.dll!DirectXHooks::EndScene(IDirect3DDevice9 * pDevice) Zeile 108

Diese Zeile (264) hier failed wohl und schmeißt die Exception: (Direct3d9Texture.cpp)
TEXT Code:
  1. if (FAILED(D3DXCreateTexture(owner.GetDevice(), static_cast<UINT>(textureSize.Width), static_cast<UINT>(textureSize.Height), 1, 0, format, D3DPOOL_MANAGED, &texture)))
  2. {
  3. throw Misc::Exception();
  4. }



Wie kann ich das beheben?
Die Initialisierungsroutinen sind genau wie im Sample-Projekt (wie damals eben auch schon).

Edit: Gerade noch mal eine Custom-Form erstellt. Wenn ich einen Button adde (ohne Text), geht alles. Sobald ich den Text für den Button setze, crasht es.

Zuletzt geändert von Jules19 (So 24. Jan 2016, 01:05)

Grund: Info hinzugefügt.

icon #2

Anmeldungsdatum: Aug 2007

Beiträge: 8643

Benutzer-Bewertung:

199 positiv
33 negativ
Das Sample aus dem Projects Ordner funktioniert aber sicherlich oder?
Den Fehler bekommst du nur wenn du die DLL in ein Spiel lädst? Handelt es sich bei dem Spiel zufällig um eins, das die alte Source Engine verwendet? Das ist zumindest die einzige von der ich das Problem kenne.

__________________

Hallo
icon #3

Anmeldungsdatum: Jul 2014

Beiträge: 12

Benutzer-Bewertung:

3 positiv
0 negativ
Hi,

habe ich natürlich nicht probiert. Aber ja, Sample geht. Und ja, ist CS:S... (Threaded Rendering Mode, Windowed Mode)
Ist ein Fix in Aussicht oder ist das was schlimmeres™? Kann ich irgendwie beim debuggen helfen?

Damals (26.07.2014) ging es noch (mit dem neuen Renderer war das auch schon).

Danke!
Zuletzt geändert von Jules19 (So 24. Jan 2016, 15:38)

Grund: kein Grund angegeben

icon #4

Anmeldungsdatum: Aug 2007

Beiträge: 8643

Benutzer-Bewertung:

199 positiv
33 negativ
Eigentlich hätte es nie gehen sollen...zumindest bei mir ging es nie. Auch andere Programme wie XFire haben für die Source Engine einen Fallback eingebaut. Ich habe für die Source Engine auch eine Erweiterung geschrieben, allerdings bisher nicht ins SVN hochgeladen.

Du findest jetzt 4 neue Dateien unter /Drawing/Direct3D9Ex. Die zwei cpp Dateien musst du zusätzlich zu den normalen Direct3D9*.cpp ins Projekt einbinden und anschließend in deinem Code den Direct3D9ExRenderer erzeugen, statt dem normalen.

Falls dann immernoch was nicht funktioniert, musst du dich nochmal melden.

__________________

Hallo
1 positiv
0 negativ
Dieser Beitrag wurde bewertet von:
Jules19 (So 24. Jan 2016, 16:12)
icon #5

Anmeldungsdatum: Jul 2014

Beiträge: 12

Benutzer-Bewertung:

3 positiv
0 negativ
Komisch, dass es damals ging... wtf?!
Mit der neuen Aktualisierung geht es nun. In Direct3D9ExRenderer.cpp musst du noch die Pfade anpassen (Zeile 3 bis 6):

TEXT Code:
  1. #include "../Direct3D9/Direct3D9GeometryBuffer.hpp"
  2. #include "../Direct3D9/Direct3D9RenderTarget.hpp"
  3. #include "../Direct3D9/Direct3D9ViewportTarget.hpp"
  4. #include "../Direct3D9/Direct3D9TextureTarget.hpp"

Interessante Änderung, die da nötig ist. Ist ja an sich nicht viel. Mit meinem nicht wirklich vorhandenen Wissen über DirectX hätte ich den Fehler nie gefunden.

Danke!
Zuletzt geändert von Jules19 (So 24. Jan 2016, 16:12)

Grund: kein Grund angegeben

icon #6

Anmeldungsdatum: Aug 2007

Beiträge: 8643

Benutzer-Bewertung:

199 positiv
33 negativ
Freut mich, dass es jetzt klappt.

Stimmt, die Pfade muss man noch anpassen. Bei meinem Projekt war der D3D9 Ordner schon als Include Pfad eingetragen. Fixe ich gleich, danke für den Hinweis.

__________________

Hallo