public void DrawDecalQuad(DecalInstance decal) { Gl.BindTexture(TextureTarget.Texture2d, (uint)decal.decal.id); Gl.Begin(PrimitiveType.Quads); Gl.Color4(decal.tint.r, decal.tint.g, decal.tint.b, decal.tint.a); Gl.TexCoord4(decal.uv[0].x, decal.uv[0].y, 0.0f, decal.w[0]); Gl.Vertex2(decal.pos[0].x, decal.pos[0].y); Gl.TexCoord4(decal.uv[1].x, decal.uv[1].y, 0.0f, decal.w[1]); Gl.Vertex2(decal.pos[1].x, decal.pos[1].y); Gl.TexCoord4(decal.uv[2].x, decal.uv[2].y, 0.0f, decal.w[2]); Gl.Vertex2(decal.pos[2].x, decal.pos[2].y); Gl.TexCoord4(decal.uv[3].x, decal.uv[3].y, 0.0f, decal.w[3]); Gl.Vertex2(decal.pos[3].x, decal.pos[3].y); Gl.End(); }
public void DrawDistortedSprite(SegaSaturnDistortedSprite sprite) { if (sprite.TextureId.HasValue) { Gl.Enable(EnableCap.Texture2d); Gl.BindTexture(TextureTarget.Texture2d, sprite.TextureId.Value); } Gl.Color4(1.0f, 1.0f, 1.0f, sprite.UseHalfTransparency ? 0.5f : 1.0f); Gl.Begin(PrimitiveType.Quads); if (sprite.TextureId.HasValue) { Gl.TexCoord2(0.0, 0.0); } else { Gl.Color3(1.0f, 0.0f, 0.0f); } Gl.Vertex3(sprite.A.FloatX, sprite.A.FloatY, sprite.A.FloatZ); if (sprite.TextureId.HasValue) { Gl.TexCoord2(1.0, 0.0); } else { Gl.Color3(0.0f, 1.0f, 0.0f); } Gl.Vertex3(sprite.B.FloatX, sprite.B.FloatY, sprite.B.FloatZ); if (sprite.TextureId.HasValue) { Gl.TexCoord2(1.0, 1.0); } else { Gl.Color3(0.0f, 0.0f, 1.0f); } Gl.Vertex3(sprite.C.FloatX, sprite.C.FloatY, sprite.C.FloatZ); if (sprite.TextureId.HasValue) { Gl.TexCoord2(0.0, 1.0); } else { Gl.Color3(1.0f, 0.0f, 1.0f); } Gl.Vertex3(sprite.D.FloatX, sprite.D.FloatY, sprite.D.FloatZ); Gl.End(); if (sprite.TextureId.HasValue) { Gl.Disable(EnableCap.Texture2d); } }
public void DrawLayerQuad(VectorF2d offset, VectorF2d scale, Pixel tint) { Gl.Begin(PrimitiveType.Quads); Gl.Color4(tint.r, tint.g, tint.b, tint.a); Gl.TexCoord2(0.0f * scale.x + offset.x, 1.0f * scale.y + offset.y); Gl.Vertex3(-1.0f /*+ vSubPixelOffset.x*/, -1.0f /*+ vSubPixelOffset.y*/, 0.0f); Gl.TexCoord2(0.0f * scale.x + offset.x, 0.0f * scale.y + offset.y); Gl.Vertex3(-1.0f /*+ vSubPixelOffset.x*/, 1.0f /*+ vSubPixelOffset.y*/, 0.0f); Gl.TexCoord2(1.0f * scale.x + offset.x, 0.0f * scale.y + offset.y); Gl.Vertex3(1.0f /*+ vSubPixelOffset.x*/, 1.0f /*+ vSubPixelOffset.y*/, 0.0f); Gl.TexCoord2(1.0f * scale.x + offset.x, 1.0f * scale.y + offset.y); Gl.Vertex3(1.0f /*+ vSubPixelOffset.x*/, -1.0f /*+ vSubPixelOffset.y*/, 0.0f); Gl.End(); }
/// <summary> /// Apply this depth test render state. /// </summary> /// <param name="ctx"> /// A <see cref="GraphicsContext"/> which has defined the shader program <paramref name="shaderProgram"/>. /// </param> /// <param name="shaderProgram"> /// The <see cref="ShaderProgram"/> which has the state set. /// </param> public override void ApplyState(GraphicsContext ctx, ShaderProgram shaderProgram) { CheckCurrentContext(ctx); if (shaderProgram == null) { // Fixed pipeline rendering requires server state Gl.Color4((float[])UniformColor); } else { // Base implementation base.ApplyState(ctx, shaderProgram); } }
private void RenderQuad(RectangleF texels, Rectangle area, Color4 color) { Gl.Color4(color.R, color.G, color.B, color.A); Gl.TexCoord2(texels.X, texels.Y); Gl.Vertex2(area.X, area.Y); Gl.TexCoord2(texels.Width, texels.Y); Gl.Vertex2(area.Right, area.Y); Gl.TexCoord2(texels.Width, texels.Height); Gl.Vertex2(area.Right, area.Bottom); Gl.TexCoord2(texels.Width, texels.Height); Gl.Vertex2(area.Right, area.Bottom); Gl.TexCoord2(texels.X, texels.Height); Gl.Vertex2(area.X, area.Bottom); Gl.TexCoord2(texels.X, texels.Y); Gl.Vertex2(area.X, area.Y); }