I'm trying to render textured quads onto WoW's window, but I'm having strange problems. My renders are only showing when I have, for example, my tooltip showing. When I stop hovering my mouse over a unit, etc. it doesn't show my quad. I'm disabling the z-buffer before I call render. Here's the code I'm using:
Code:
[StructLayout(LayoutKind.Sequential)]
public struct CustomVertex
{
public float X, Y, Z, rhw;
public float u, v;
public const VertexFormat FVF = VertexFormat.PositionRhw | VertexFormat.Texture1;
}
public void Draw(Device d, CustomVertex[] vs /* CustomVertex[4] */, float rot, Texture tex)
{
if (_buf == null)
{
createBuffer(d);
}
using (var loc = _buf.Lock(0, 4 * Marshal.SizeOf(typeof(CustomVertex)), LockFlags.Discard))
{
loc.WriteRange<CustomVertex>(vs);
}
d.SetStreamSource(0, _buf, 0, Marshal.SizeOf(typeof(CustomVertex)));
d.SetRenderState(RenderState.Lighting, false);
d.SetRenderState(RenderState.AlphaBlendEnable, true);
var zbuffType = d.GetRenderState<ZBufferType>(RenderState.ZEnable);
d.SetRenderState<ZBufferType>(RenderState.ZEnable, ZBufferType.DontUseZBuffer);
d.SetRenderState<Blend>(RenderState.SourceBlend, Blend.SourceAlpha);
d.SetRenderState<Blend>(RenderState.DestinationBlend, Blend.InverseSourceAlpha);
d.SetTextureStageState(0, TextureStage.AlphaOperation, TextureOperation.Modulate);
d.VertexFormat = CustomVertex.FVF;
d.PixelShader = null;
d.SetTexture(0, tex);
d.DrawPrimitives(PrimitiveType.TriangleFan, 0, 2);
d.SetRenderState<ZBufferType>(RenderState.ZEnable, zbuffType);
d.SetRenderState<ZBufferType>(RenderState.ZEnable, ZBufferType.UseZBuffer);
}
Code:
void createvertices()
{
_vertices = new GUI.TexQuad.CustomVertex[4];
_vertices[0].X = 100;
_vertices[0].Y = 100;
_vertices[0].Z = 0f;
_vertices[0].rhw = 1.0f;
_vertices[1].X = 300;
_vertices[1].Y = 100;
_vertices[1].Z = 0f;
_vertices[1].rhw = 1.0f;
_vertices[2].X = 300;
_vertices[2].Y = 300;
_vertices[2].Z = 0f;
_vertices[2].rhw = 1.0f;
_vertices[3].X = 100;
_vertices[3].Y = 300;
_vertices[3].Z = 0f;
_vertices[3].rhw = 1.0f;
_vertices[0].u = 0;
_vertices[0].v = 0;
_vertices[1].u = 1;
_vertices[1].v = 0;
_vertices[2].u = 1;
_vertices[2].v = 1;
_vertices[3].u = 0;
_vertices[3].v = 1;
}
This is mainly some basic C/P code I got online for basic rendering of textures.