private void RasterizeBox(vec4[] vertices) { CounterTriangules++; ShaderProgram.VaryingIn = VaryingIn; float minX = float.PositiveInfinity; float minY = float.PositiveInfinity; float maxX = float.NegativeInfinity; float maxY = float.NegativeInfinity; for (int v = 0; v < 3; v++) { minX = Util.Min(minX, vertices[v].x); minY = Util.Min(minY, vertices[v].y); maxX = Util.Max(maxX, vertices[v].x); maxY = Util.Max(maxY, vertices[v].y); } minX = Util.Clamp(minX, 0, Viewport.Width - 1); minY = Util.Clamp(minY, 0, Viewport.Height - 1); maxX = Util.Clamp(maxX, 0, Viewport.Width - 1); maxY = Util.Clamp(maxY, 0, Viewport.Height - 1); for (int y = (int)minY; y <= maxY; y++) { for (int x = (int)minX; x <= maxX; x++) { float dpz = vertices[0].z; if (dpz < DepthBuffer.GetPoint(x, y)) { VaryingIn[0].x = ((float)x - minX) / (maxX - minX); VaryingIn[0].y = ((float)y - minY) / (maxY - minY); if (ShaderProgram.PixelShader()) { CounterFragments++; BackBuffer.SetPixel(x, y, ShaderProgram.gl_FragColor); DepthBuffer.SetPoint(x, y, dpz); } } } } }
private void DrawPoint(int x, int y, int color) { BackBuffer.SetPixel(x, y, color); }