D3D Hook - ARGB

02/23/2014 21:24 Chriko2502#1
Hi guys,

I am coding a ingame overlay for a d3d game in c++, everything is working fine so far... but with the colors i have troubles :(

PHP Code:
const D3DCOLOR colorBlack D3DCOLOR_ARGB(255000);
const 
D3DCOLOR colorGrey D3DCOLOR_ARGB(255115115115); 
The alpha value doesnt take any effect. If i set the 255 to 100 eg. Nothing happens... perhpas u have some ideas why? thx!
02/23/2014 22:19 MrSm!th#2
How do you draw it?
02/23/2014 22:40 Chriko2502#3
Quote:
Originally Posted by MrSm!th View Post
How do you draw it?

PHP Code:
int rectMenuX1 10;
int rectMenuY1 10;
int rectMenuX2 250;
int rectMenuY2 400;
D3DRECT rectMenu = { rectMenuX1rectMenuY1rectMenuX2rectMenuY2 };
pDevice->Clear(1, &rectMenuD3DCLEAR_TARGETcolorBlack00); 
02/24/2014 01:18 Dr. Coxxy#4
clear ignoriert den alpha wert, benutz drawprimitive mit trianglestrip/list um rechtecke zu zeichnen.
02/24/2014 06:09 Chriko2502#5
Quote:
Originally Posted by Dr. Coxxy View Post
clear ignoriert den alpha wert, benutz drawprimitive mit trianglestrip/list um rechtecke zu zeichnen.
Herzlichen Dank. Perfekt :)

Wo wir gerade beim Thema sind. Gibt es eine Möglichkeit Bilder (.png, etc...) Anzeigen zu lassen? Wenn ja wie?
02/24/2014 12:09 Dr. Coxxy#6
d3dxloadtexturefromfile
settexture
drawprimitive
02/24/2014 14:51 Master674b#7
Quote:
Originally Posted by Dr. Coxxy View Post
d3dxloadtexturefromfile
settexture
drawprimitive
D3DX ist deprecated und sollte nicht benutzt werden. Alternative wäre hier stb_image.
02/25/2014 16:53 buFFy!#8
Quote:
Originally Posted by Chriko2502 View Post
Herzlichen Dank. Perfekt :)

Wo wir gerade beim Thema sind. Gibt es eine Möglichkeit Bilder (.png, etc...) Anzeigen zu lassen? Wenn ja wie?
Code:
	void loadImg(const wchar_t* szFile, LPDIRECT3DTEXTURE9* pTex, int w, int h)
	{
		D3DXCreateTextureFromFileEx(m_pDevice, szFile, w, h, 0, D3DPOOL_DEFAULT, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_DEFAULT, D3DX_DEFAULT, D3DCOLOR_RGBA(255,255,255, 0), NULL, NULL, pTex);
	}

	void drawImg(int X, int Y, LPDIRECT3DTEXTURE9 pTex)
	{
		D3DXVECTOR3 Pos(X, Y, 0);

		m_pSprite->Begin(D3DXSPRITE_ALPHABLEND);
		m_pSprite->Draw(pTex, NULL, NULL, &Pos, 0xFFFFFFFF);
		m_pSprite->End();
	}
Quote:
Originally Posted by Master674b View Post
D3DX ist deprecated und sollte nicht benutzt werden. Alternative wäre hier stb_image.
So ein Quatsch. Funktioniert einwandfrei bis hin zu Win 8.1.
Zumal das unter DX9 sowieso kein Schwein mehr kümmert.
02/25/2014 17:23 Dr. Coxxy#9
Quote:
Originally Posted by buFFy! View Post
So ein Quatsch. Funktioniert einwandfrei bis hin zu Win 8.1.
Zumal das unter DX9 sowieso kein Schwein mehr kümmert.
ne, stimmt schon wurd von m$ deprecated:

Quote:
Originally Posted by msdn
Note The D3DX (D3DX 9, D3DX 10, and D3DX 11) utility library is deprecated for Windows 8 and is not supported for Windows Store apps.
sollte man also net mehr benutzen und kannst es net @ windows store apps benutzen, sollte also auf andere libs umsteigen.
DirectXTK soll afaik ganz gut sein.
02/26/2014 00:39 buFFy!#10
Quote:
Originally Posted by Dr. Coxxy View Post
ne, stimmt schon wurd von m$ deprecated:



sollte man also net mehr benutzen und kannst es net @ windows store apps benutzen, sollte also auf andere libs umsteigen.
DirectXTK soll afaik ganz gut sein.
Ja sicher, aber das hier ist ein d3d (hook?) für ein Spiel, da ist das so Banane wie nur irgendwas.
Kein Grund die Dinge für einen offensichtlichen Neueinsteiger komplizierter zu gestalten, als sie eigentlich sind.
Der Grund für das 'deprecated' ist hier halt total irrelevant, habe mich oben vielleicht etwas blöd ausgedrückt.
02/26/2014 07:49 MrSm!th#11
Wobei die Sprite-Klasse relativ beschnitten ist. Nicht mal die Größe kann man frei wählen.
Lieber gleich SetTexture und DrawPrimitive
02/26/2014 22:31 Chriko2502#12
Danke euch! Funktioniert alles so wie es soll! Nette und kompetente Hilfe!

Hi,

bin grade dabei mir text anzeigen zu lassen, funktioniert soweit auch ganz gut.


PHP Code:
void initFont(IDirect3DDevice9pDevice) {
    if (!
fontInitialized) {
        
D3DXCreateFont(pDevice150FW_BOLD0FALSEDEFAULT_CHARSETOUT_TT_ONLY_PRECISDEFAULT_QUALITYDEFAULT_PITCH FF_DONTCARE"Arial", &m_pFont);
        
fontInitialized true;
    }

PHP Code:
initFont(pDevice);
drawText(8015255255255255"~~ D3D9 Hook ~~");
drawText(2033255255255255"Press [INSERT] To Show/Hide Menu!"); 


Geht soweit alles wunderbar. Jetzt ist jedoch das Problem, das beim resizen des Windows und schließen der Applikation der folgende Fehler auftritt (aber nur bei den SDK Sampels von DirectX).

"The D3D device has a non-zero reference count, meaning some objects were not released"

Jetzt ist die Frage, wo geb ich mein Font am besten wieder frei!?

Danke schon einmal
02/27/2014 07:29 Mostey#13
Mittels der Release() Methode die du auf das Objekt anwendest.

Du musst bei DirectX viele benutzte Ressourcen wieder freigeben, das Device zählt übrigens auch dazu.
02/27/2014 07:43 MrSm!th#14
Den Font solltest du einmalig vor erster Verwendung erzeugen und ihn erst wieder freigeben, wenn deine Dll entladen wird bzw. du ihn nicht mehr benötigst.

Er sollte keine lokale Variable deiner EndScene sein und erst recht nicht in jeder Scene neu erzeugt und zerstört werden.

Am besten eine Wrapperklasse schreiben und im Zuweisungsoperator AddRef sowieso im Destruktor Release aufrufen. Dann brauchst du dich darum nicht wirklich kümmern.

Dass es beim Resizen passiert ist seltsam. Wenn es aber nur bei den Samples so ist, klingt es so, als wäre das eine Eigenart von denen (setzen die das Device beim Window Resize zurück oder so?).
Quote:
Originally Posted by Mostey View Post

Du musst bei DirectX viele benutzte Ressourcen wieder freigeben, das Device zählt übrigens auch dazu.
Wäre bei nem hook ne dumme Idee.
02/27/2014 07:51 Mostey#15
Quote:
Originally Posted by MrSm!th View Post
Wäre bei nem hook ne dumme Idee.
Das war nicht konkret auf einen Hook bezogen sondern viel mehr auf die allgemeine Nutzung von DirectX.

Das Game räumt vermutlich alles wieder selbst auf, was der TE nicht produziert hat. Den Rest muss er schon selber freigeben.