public bool Equals(Primitive prim)
 {
     if (prim == null)
         return false;
     if (prim.NumVertices == this.numVertices && prim.primCount == this.primCount)
         return true;
     return false;
 }
Example #2
0
        int DrawIndexedPrimitivesHook(IntPtr devicePtr, SlimDX.Direct3D9.PrimitiveType primitiveType,
                                        int baseVertexIndex, int minimumVertexIndex,
                                        int numVertices, int startIndex, int primCount)
        {
            using (SlimDX.Direct3D9.Device device = SlimDX.Direct3D9.Device.FromPointer(devicePtr))
            {
                Primitive prim = new Primitive(primCount, numVertices);
                int hRet = 0;
                try
                {
                    if(Interface.CaptureFrame)
                        RipModel(device, primitiveType, baseVertexIndex, startIndex, primCount);

                    //if new primitive being rendered, add it to our list
                    if (!prims.Contains(prim))
                    {
                        prims.Add(prim);
                    }

                    Primitive selectedPrim = prims.GetSelectedPrimitive();

                    if (selectedPrim != null)
                    {
                        if (selectedPrim.Equals(prim))
                        {

                            if (RedTexture == null)
                                RedTexture = SlimDX.Direct3D9.Texture.FromMemory(device, red);

                            if (Interface.chamed == true)
                            {
                                selectedPrim.Chamed = true;
                                Interface.Togglecham();
                            }

                            device.SetRenderState(SlimDX.Direct3D9.RenderState.FillMode, SlimDX.Direct3D9.FillMode.Solid);
                            device.SetTexture(0, RedTexture);

                            if (selectedPrim.Chamed)
                            {
                                //device.Clear(ClearFlags.ZBuffer, Color.Red, 1.0f, 0);
                                device.SetRenderState(SlimDX.Direct3D9.RenderState.ZEnable, false);
                                hRet = device.DrawIndexedPrimitives(primitiveType, baseVertexIndex, minimumVertexIndex,
                                                             numVertices, startIndex, primCount).Code;
                                device.SetRenderState(SlimDX.Direct3D9.RenderState.ZEnable, true);
                            }

                            if (Interface.rip)
                            {
                                if (!Interface.CaptureFrame)
                                {
                                    RipModel(device, primitiveType, baseVertexIndex, startIndex, primCount);
                                    Interface.ToggleRip();
                                }
                            }

                            hRet = device.DrawIndexedPrimitives(primitiveType, baseVertexIndex, minimumVertexIndex,
                                                             numVertices, startIndex, primCount).Code;
                        }
                    }
                    //if not to display, don't render
                    if(prims.IndexOf(prim) != -1)
                        if (prims[prims.IndexOf(prim)].Displayed == false)
                            return 0;
                }
                catch (Exception e)
                {
                    Interface.ReportException(e);
                    return hRet;
                }

                if (hRet == 0)
                {
                    if (prims[prims.IndexOf(prim)].Chamed == false)
                    {
                        hRet = device.DrawIndexedPrimitives(primitiveType, baseVertexIndex, minimumVertexIndex,
                                                            numVertices, startIndex, primCount).Code;
                    }
                    else
                    {
                        PixelShader previous = device.PixelShader;
                        if(chamPixelShader == null)
                            chamPixelShader = new PixelShader(device, ShaderBytecode.Compile("float4 PShader(float4 position : SV_POSITION) : SV_Target\n" +
                                                                    "{\nreturn float4(1.0f, 1.0f, 0.0f, 1.0f);\n}", "PShader", "ps_3_0", ShaderFlags.None));

                        device.PixelShader = chamPixelShader;

                        hRet = device.DrawIndexedPrimitives(primitiveType, baseVertexIndex, minimumVertexIndex,
                                    numVertices, startIndex, primCount).Code;

                        device.SetRenderState(SlimDX.Direct3D9.RenderState.ZEnable, false);
                        hRet = device.DrawIndexedPrimitives(primitiveType, baseVertexIndex, minimumVertexIndex,
                                                            numVertices, startIndex, primCount).Code;
                        device.SetRenderState(RenderState.ZEnable, true);

                        device.PixelShader = previous;
                    }
                }
                return hRet;
            }
        }