[cairo] Aliased corner with rounded rectangle
Lorenzo
gatti88 at libero.it
Fri Aug 10 09:24:53 UTC 2018
You can see the image with black pixel at this url:
https://ibb.co/gbuXrU
This is done using glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
Instead, using GL_ONE the image is showing perfectly!
Thank you very much for your help.
Lorenzo
On 08/09/2018 05:55 PM, Bill Spitzak wrote:
> Though I would not expect it to look as bad as described, you want the
> first argument to be GL_ONE, not GL_SRC_ALPHA.
>
>
> On Thu, Aug 9, 2018 at 6:07 AM, Lorenzo <gatti88 at libero.it
> <mailto:gatti88 at libero.it>> wrote:
>
> Sorry, by i already have the BlendFunc method.
>
> I initialize my opengl system with this code:
>
> glViewport(0, 0, drm->rect()->w, drm->rect()->h);
> glDisable(GL_CULL_FACE);
> glEnable(GL_LESS);
> glEnable(GL_BLEND);
> glEnable(GL_TEXTURE_2D);
> glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
>
>
> Lorenzo.
>
>
> On 08/08/2018 08:00 PM, Bill Spitzak wrote:
>> glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
>>
>> Sorry, I managed to cut & paste the one example I had that did
>> not say "ALPHA"
>>
>> On Wed, Aug 8, 2018 at 10:59 AM, Bill Spitzak <spitzak at gmail.com
>> <mailto:spitzak at gmail.com>> wrote:
>>
>> You have to change the OpenGL compositing to over the
>> premultiplied image. I think glBlendFunc(GL_ONE,
>> GL_ONE_MINUS_SRC_COLOR) is what you need.
>>
>> On Wed, Aug 8, 2018 at 8:16 AM, Lorenzo <gatti88 at libero.it
>> <mailto:gatti88 at libero.it>> wrote:
>>
>> Hi,
>>
>> i have a problem with the creation of a rounded rectangle
>> with cairo.
>>
>> Environment info:
>>
>> cairo version: 1.14.8-1
>>
>> OS: linux
>>
>>
>> A linux client creates a rounded rectangle with the
>> following code:
>>
>> let x = 0.0
>> let y = 0.0
>> let w = Double(size.w)
>> let h = Double(size.h)
>> let r = 20.0
>>
>> logger.verbose("rounded rectangle
>> x=\(x),y=\(y),w=\(w),h=\(h),r=\(r)")
>>
>> cairo_move_to(context, x, y + r)
>> cairo_arc(context, x + r, y + r, r, Double.pi,
>> -Double.pi / 2.0)
>> cairo_line_to(context, x + w - r, y)
>> cairo_arc(context, x + w - r, y + r, r,
>> -Double.pi / 2.0, 0.0)
>> cairo_line_to(context, x + w, y + h - r)
>> cairo_arc(context, x + w - r, y + h - r, r, 0.0,
>> Double.pi / 2.0)
>> cairo_line_to(context, x + r, y + h)
>> cairo_arc(context, x + r, y + h - r, r, Double.pi
>> / 2.0, Double.pi)
>> cairo_close_path(context)
>>
>>
>> cairo_set_source_rgba(context, cl.red, cl.green, cl.blue,
>> cl.alpha);
>> cairo_fill(context)
>>
>>
>> After the surface fill i have 2 different operations to
>> be performed:
>>
>> - write the png on the disk using
>> "cairo_surface_write_to_png(surface, "testcairo.png")"
>>
>> - display the png with opengl es 3.0 as a texture
>> (done by copy the surface raw bytes with
>> cairo_image_surface_get_data(surface)
>>
>> in a shared memory used by the opengl server program)
>>
>>
>> Save the image on disk is ok, the image is good.
>>
>> Display the image as a texture with opengl results in an
>> ugly image: corners have some black pixels around them.
>>
>> Why this difference?
>>
>>
>> I have done some checks:
>>
>> - data obtained with cairo_image_surface_get_data are the
>> same that the graphics server loads from the shared
>> memory (checked PixelxPixel) so the data transfer don't
>> is the problem (checked also any signed/unsigned byte
>> conversion)
>>
>> - loading the disk png as a texture instead of loading
>> data from the shared memory results in a good image with
>> no problems.
>>
>>
>> My opinion is that the cairo_surface_write_to_png
>> performs an antialiasing algorithm and accessing raw data
>> bypass it taking the original image.
>>
>>
>> Is my opinion correct? If yes, any advice to solve the
>> problem?
>>
>>
>> Regards,
>>
>> Lorenzo.
>>
>>
>>
>>
>>
>> --
>> cairo mailing list
>> cairo at cairographics.org <mailto:cairo at cairographics.org>
>> https://lists.cairographics.org/mailman/listinfo/cairo
>> <https://lists.cairographics.org/mailman/listinfo/cairo>
>>
>>
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.cairographics.org/archives/cairo/attachments/20180810/54041d51/attachment.html>
More information about the cairo
mailing list