Example #1
0
        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);
                        }
                    }
                }
            }
        }
Example #2
0
 private void DrawPoint(int x, int y, int color)
 {
     BackBuffer.SetPixel(x, y, color);
 }