OldSchoolHack

Register / Login English

String-Drawing funktioniert nicht


icon String-Drawing funktioniert nicht #1

Join Date: Jul 2014

Posts: 12

User-Rating:

3 positive
0 negative
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.

Last edited by Jules19 (Sun 24. Jan 2016, 01:05)

Reason: Info hinzugefügt.

icon #2

Join Date: Aug 2007

Posts: 8643

User-Rating:

199 positive
33 negative
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

Join Date: Jul 2014

Posts: 12

User-Rating:

3 positive
0 negative
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!
Last edited by Jules19 (Sun 24. Jan 2016, 15:38)

Reason: no reason given

icon #4

Join Date: Aug 2007

Posts: 8643

User-Rating:

199 positive
33 negative
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 positive
0 negative
This post has been rated by:
Jules19 (Sun 24. Jan 2016, 16:12)
icon #5

Join Date: Jul 2014

Posts: 12

User-Rating:

3 positive
0 negative
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!
Last edited by Jules19 (Sun 24. Jan 2016, 16:12)

Reason: no reason given

icon #6

Join Date: Aug 2007

Posts: 8643

User-Rating:

199 positive
33 negative
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