ilo: replace a boolean by bool
[mesa.git] / src / gallium / state_trackers / vega / api_masks.c
index 45f77d7d707c49eeb254d67983492558216021e1..0ddcdfb75c13c83167fba85b5ad258b8fcd1eb0b 100644 (file)
 
 #include "mask.h"
 #include "api.h"
+#include "handle.h"
 #include "renderer.h"
 
 #include "vg_context.h"
 #include "pipe/p_context.h"
-#include "util/u_inlines.h"
-
-#include "util/u_pack_color.h"
-#include "util/u_draw_quad.h"
-
-#define DISABLE_1_1_MASKING 1
 
 void vegaMask(VGHandle mask, VGMaskOperation operation,
               VGint x, VGint y,
@@ -62,16 +57,12 @@ void vegaMask(VGHandle mask, VGMaskOperation operation,
       mask_fill(x, y, width, height, 0.f);
    } else if (operation == VG_FILL_MASK) {
       mask_fill(x, y, width, height, 1.f);
-   } else if (vg_object_is_valid((void*)mask, VG_OBJECT_IMAGE)) {
-      struct vg_image *image = (struct vg_image *)mask;
+   } else if (vg_object_is_valid(mask, VG_OBJECT_IMAGE)) {
+      struct vg_image *image = handle_to_image(mask);
       mask_using_image(image, operation, x, y, width, height);
-   } else if (vg_object_is_valid((void*)mask, VG_OBJECT_MASK)) {
-#if DISABLE_1_1_MASKING
-      return;
-#else
-      struct vg_mask_layer *layer = (struct vg_mask_layer *)mask;
+   } else if (vg_object_is_valid(mask, VG_OBJECT_MASK)) {
+      struct vg_mask_layer *layer = handle_to_masklayer(mask);
       mask_using_layer(layer, operation, x, y, width, height);
-#endif
    } else {
       vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
    }
@@ -81,7 +72,7 @@ void vegaClear(VGint x, VGint y,
                VGint width, VGint height)
 {
    struct vg_context *ctx = vg_current_context();
-   struct pipe_framebuffer_state *fb;
+   struct st_framebuffer *stfb = ctx->draw_buffer;
 
    if (width <= 0 || height <= 0) {
       vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
@@ -98,12 +89,16 @@ void vegaClear(VGint x, VGint y,
                 ctx->state.vg.clear_color[3]);
 #endif
 
-   fb = &ctx->state.g3d.fb;
    /* check for a whole surface clear */
    if (!ctx->state.vg.scissoring &&
-       (x == 0 && y == 0 && width == fb->width && height == fb->height)) {
+       (x == 0 && y == 0 && width == stfb->width && height == stfb->height)) {
+      union pipe_color_union clear_color;
+      clear_color.f[0] = ctx->state.vg.clear_color[0];
+      clear_color.f[1] = ctx->state.vg.clear_color[1];
+      clear_color.f[2] = ctx->state.vg.clear_color[2];
+      clear_color.f[3] = ctx->state.vg.clear_color[3];
       ctx->pipe->clear(ctx->pipe, PIPE_CLEAR_COLOR | PIPE_CLEAR_DEPTHSTENCIL,
-                       ctx->state.vg.clear_color, 1., 0);
+                       &clear_color, 1., 0);
    } else if (renderer_clear_begin(ctx->renderer)) {
       /* XXX verify coord round-off */
       renderer_clear(ctx->renderer, x, y, width, height, ctx->state.vg.clear_color);
@@ -134,18 +129,14 @@ void vegaRenderToMask(VGPath path,
       vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
       return;
    }
-   if (!vg_object_is_valid((void*)path, VG_OBJECT_PATH)) {
+   if (!vg_object_is_valid(path, VG_OBJECT_PATH)) {
       vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
       return;
    }
 
-#if DISABLE_1_1_MASKING
-   return;
-#endif
-
    vg_validate_state(ctx);
 
-   mask_render_to((struct path *)path, paintModes, operation);
+   mask_render_to(handle_to_path(path), paintModes, operation);
 }
 
 VGMaskLayer vegaCreateMaskLayer(VGint width, VGint height)
@@ -153,13 +144,13 @@ VGMaskLayer vegaCreateMaskLayer(VGint width, VGint height)
    struct vg_context *ctx = vg_current_context();
 
    if (width <= 0 || height <= 0 ||
-       width > vgGeti(VG_MAX_IMAGE_WIDTH) ||
-       height > vgGeti(VG_MAX_IMAGE_HEIGHT)) {
+       width > vegaGeti(VG_MAX_IMAGE_WIDTH) ||
+       height > vegaGeti(VG_MAX_IMAGE_HEIGHT)) {
       vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
       return VG_INVALID_HANDLE;
    }
 
-   return (VGMaskLayer)mask_layer_create(width, height);
+   return masklayer_to_handle(mask_layer_create(width, height));
 }
 
 void vegaDestroyMaskLayer(VGMaskLayer maskLayer)
@@ -171,12 +162,12 @@ void vegaDestroyMaskLayer(VGMaskLayer maskLayer)
       vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
       return;
    }
-   if (!vg_object_is_valid((void*)maskLayer, VG_OBJECT_MASK)) {
+   if (!vg_object_is_valid(maskLayer, VG_OBJECT_MASK)) {
       vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
       return;
    }
 
-   mask = (struct vg_mask_layer *)maskLayer;
+   mask = handle_to_masklayer(maskLayer);
    mask_layer_destroy(mask);
 }
 
@@ -207,12 +198,12 @@ void vegaFillMaskLayer(VGMaskLayer maskLayer,
       return;
    }
 
-   if (!vg_object_is_valid((void*)maskLayer, VG_OBJECT_MASK)) {
+   if (!vg_object_is_valid(maskLayer, VG_OBJECT_MASK)) {
       vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
       return;
    }
 
-   mask = (struct vg_mask_layer*)maskLayer;
+   mask = handle_to_masklayer(maskLayer);
 
    if (x + width > mask_layer_width(mask) ||
        y + height > mask_layer_height(mask)) {
@@ -220,9 +211,8 @@ void vegaFillMaskLayer(VGMaskLayer maskLayer,
       return;
    }
 
-#if DISABLE_1_1_MASKING
-   return;
-#endif
+   vg_validate_state(ctx);
+
    mask_layer_fill(mask, x, y, width, height, value);
 }
 
@@ -242,16 +232,14 @@ void vegaCopyMask(VGMaskLayer maskLayer,
       vg_set_error(ctx, VG_ILLEGAL_ARGUMENT_ERROR);
       return;
    }
-   if (!vg_object_is_valid((void*)maskLayer, VG_OBJECT_MASK)) {
+   if (!vg_object_is_valid(maskLayer, VG_OBJECT_MASK)) {
       vg_set_error(ctx, VG_BAD_HANDLE_ERROR);
       return;
    }
 
-#if DISABLE_1_1_MASKING
-   return;
-#endif
+   vg_validate_state(ctx);
 
-   mask = (struct vg_mask_layer*)maskLayer;
+   mask = handle_to_masklayer(maskLayer);
    mask_copy(mask, sx, sy, dx, dy, width, height);
 }