Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 23:05

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



DrawIndexedPrimitive

Discussion on DrawIndexedPrimitive within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1




 
bloodx's Avatar
 
elite*gold: 55
Join Date: Mar 2006
Posts: 4,582
Received Thanks: 1,539
DrawIndexedPrimitive

Guten Abend,

ich habe mich Gestern zum ersten mal mit dem Thema D3D Hooking befasst, und nach etwas googeln auch die richtigen Ansätze gefunden und verwirklicht.

Code:
#define Jute ((NumVertices == 261) && (primCount == 232) && (uiStride == 36))
#define Ahornholz ((NumVertices == 792) && (primCount == 816) && (uiStride == 36))

HRESULT WINAPI hkDrawIndexedPrimitive(LPDIRECT3DDEVICE9 pDevice, D3DPRIMITIVETYPE PrimType, INT BaseVertexIndex, UINT MinVertexIndex, UINT NumVertices, UINT startIndex, UINT primCount)
{
	if (DIPInit)
	{
		GenerateShader(pDevice, &RedShader, 1.0f, 0.0f, 0.0f);
		GenerateShader(pDevice, &GreenShader, 0.0f, 1.0f, 0.0f);
		DIPInit = false;
	}
	LPDIRECT3DVERTEXBUFFER9 Stream_Data;
	UINT uiOffset = 0;
	UINT uiStride = 0;
	pDevice->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD);
	if (pDevice->GetStreamSource(0, &Stream_Data, &uiOffset, &uiStride) == D3D_OK)
		Stream_Data->Release();
	if (Jute)
	{
		pDevice->SetRenderState(D3DRS_ZENABLE, false);
		pDevice->SetPixelShader(RedShader);
		oDrawIndexedPrimitive(pDevice, PrimType, BaseVertexIndex, MinVertexIndex, NumVertices, startIndex, primCount);
		pDevice->SetRenderState(D3DRS_ZENABLE, true);
		pDevice->SetPixelShader(RedShader);
		
	}
	if (Ahornholz)
	{
		pDevice->SetRenderState(D3DRS_ZENABLE, false);
		pDevice->SetPixelShader(GreenShader);
		oDrawIndexedPrimitive(pDevice, PrimType, BaseVertexIndex, MinVertexIndex, NumVertices, startIndex, primCount);
		pDevice->SetRenderState(D3DRS_ZENABLE, true);
		pDevice->SetPixelShader(GreenShader);
	}
	return oDrawIndexedPrimitive(pDevice, PrimType, BaseVertexIndex, MinVertexIndex, NumVertices, startIndex, primCount);
}
Mein Problem ist wenn ich nur Ahornholz abfrage, wird in manchen Blickwinkeln Ingame Jute auch mit gefärbt.

was auch merkwürdig ist wenn ich nur
Code:
if (Ahornholz)
	{
		pDevice->SetRenderState(D3DRS_ZENABLE, false);
		pDevice->SetPixelShader(GreenShader);
		oDrawIndexedPrimitive(pDevice, PrimType, BaseVertexIndex, MinVertexIndex, NumVertices, startIndex, primCount);
}
mache ohne es auf true zu setzen wieder, wird die ganze Welt durchsichtig ( nicht spielbar also ) wenn ich in richtung von Ahornholz gucke,dass dürfe doch eigentlich nicht passieren da ich ja nicht nur die Stride abfrage sondern alle 3 Werte ?
bloodx is offline  
Old 08/08/2014, 07:14   #2


 
elite*gold: 1091
Join Date: Jun 2007
Posts: 19,836
Received Thanks: 7,180
Quote:
Originally Posted by bloodx View Post
was auch merkwürdig ist wenn ich nur
Code:
if (Ahornholz)
	{
		pDevice->SetRenderState(D3DRS_ZENABLE, false);
		pDevice->SetPixelShader(GreenShader);
		oDrawIndexedPrimitive(pDevice, PrimType, BaseVertexIndex, MinVertexIndex, NumVertices, startIndex, primCount);
}
mache ohne es auf true zu setzen wieder, wird die ganze Welt durchsichtig ( nicht spielbar also ) wenn ich in richtung von Ahornholz gucke,dass dürfe doch eigentlich nicht passieren da ich ja nicht nur die Stride abfrage sondern alle 3 Werte ?


Quote:
D3DRS_ZENABLE
Depth-buffering state as one member of the D3DZBUFFERTYPE enumerated type. Set this state to D3DZB_TRUE to enable z-buffering, D3DZB_USEW to enable w-buffering, or D3DZB_FALSE to disable depth buffering.
The default value for this render state is D3DZB_TRUE if a depth stencil was created along with the swap chain by setting the EnableAutoDepthStencil member of the D3DPRESENT_PARAMETERS structure to TRUE, and D3DZB_FALSE otherwise.
Das Problem ist vermutlich, das sich im FoV ein (oder mehrere) Ahornhölzer befinden (was auch immer das sein soll) und demnach das State auf false gesetzt wird. Da du kein else im Code verwendest um den State wieder zu restoren (= true) wird beim nächsten Renderdurchgang das State auch nicht wieder hergestellt.
Mostey is offline  
Reply




All times are GMT +1. The time now is 23:05.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.