Commit graph

8414 commits

Author SHA1 Message Date
Benjamin Otte
5b8b1fe1cb gl: Move vertex buffer handling from setup into context
We can only emit one vertex buffer at a time anyway.
2010-05-20 11:02:49 +02:00
Benjamin Otte
0d5f2eab77 gl: Actuall do fall back to fixed function paths.
Previously we were just returning UNSUPPORTED all the time. I guess that
explains why my code got so slow...
2010-05-20 11:02:49 +02:00
Benjamin Otte
bb7ca71c1a gl: Don't store the shader in the composite_t anymore
Now that we have ctx->current_shader, there's no need to keep it in the
composite setup code.
2010-05-20 11:02:49 +02:00
Benjamin Otte
6c477b4a94 gl: Move shader checking in the TexEnv setup code
As the previously generic setup code only contains non-shader code now,
we can check in advance that no shader is in use and do all the other
stuff without checks.
2010-05-20 11:02:49 +02:00
Benjamin Otte
73262edd82 gl: Move texture setup code into its own file
This ensures textures don't need to be (re)set when doing component
alpha and running 2 shaders.
2010-05-20 11:02:49 +02:00
Benjamin Otte
970c879dd8 gl: Binding variables only works for the current shader
So make the code reflect that.
2010-05-20 11:02:49 +02:00
Benjamin Otte
065969d78f gl: Separate binding to shaders from setting operands
That way we only need to bind to shaders when creating them, but not
everytime we switch shaders on text output.
2010-05-20 11:02:49 +02:00
Benjamin Otte
c53f7778bc gl: Use the mask, not the source
Not that we'd ever have constant color component-alpha masks, but that's
an entirely different topic.
2010-05-20 11:02:49 +02:00
Benjamin Otte
26e8e506b6 gl: Add _cairo_gl_surface_is_texture()
It's more explicit then just checking surface->fb != 0
Also, it makes improving that check easier.
2010-05-20 11:02:49 +02:00
Benjamin Otte
e4cb46b500 gl: Implement texture upload to window with composite()
Instead of custom code that does basically the same thing, use
a temporary surface and _cairo_gl_surface_composite() to upload images.
2010-05-20 11:02:49 +02:00
Benjamin Otte
7c8759e279 gl: cache the current shader in the context 2010-05-20 11:02:49 +02:00
Benjamin Otte
6864ca6c25 gl: Move _cairo_gl_set_operator() to the file it's used in
Also make it a private function.
2010-05-20 11:02:48 +02:00
Benjamin Otte
0d2d4c5902 gl: Detect color-pattern clears of surfaces
... and use glClear() there.

The common case here is a solid color and OPERATOR_OVER.
2010-05-20 11:02:48 +02:00
Benjamin Otte
b70eb275c4 gl: detect image uploads and fast-path them 2010-05-20 11:02:48 +02:00
Benjamin Otte
8adbf3aa19 gl: Use _cairo_gl_surface_draw_image() when caching glyphs 2010-05-20 11:02:46 +02:00
Benjamin Otte
915aa64ef0 gl: Actually check errors for _cairo_gl_composite_begin() 2010-05-20 11:01:21 +02:00
Benjamin Otte
0222cc7d76 gl: Get rid of _cairo_gl_composite_set_mask_texture()
Now that the glyph cache contains real surfaces, there's no longer a
need to have a special function for it.
2010-05-20 11:01:19 +02:00
Benjamin Otte
208d9f2a7e gl: Make glyph cache a real surface
This has the huge advantage that we can use real surface functions on
it.
2010-05-20 11:00:50 +02:00
Benjamin Otte
0501179963 surface: Add _cairo_surface_release_device_reference() API
See the API documentation for that function about its intended purpose.
2010-05-18 13:43:27 +02:00
Benjamin Otte
c489f67d1d gl: Make a bunch of functions static
They are no longer used outside of cairo_gl_composite_t.
2010-05-18 13:43:27 +02:00
Benjamin Otte
c8008e118a gl: Don't name the union in cairo_gl_operand_t
Gets rid of ultra-long variable names.
2010-05-18 13:43:27 +02:00
Andrea Canciani
53260148ea quartz: fix repeating radial gradients on 64 bits
Quartz API uses the type CGFloat, which is double on 64 bits,
float on 32 bits architectures
2010-05-17 22:12:36 +02:00
Andrea Canciani
0104976dc8 quartz: silence compiler warnings
All the possible enum values have to be explicitly handled in switch statements.
2010-05-17 22:12:36 +02:00
Andrea Canciani
ac94a00a4d quartz: fallback for A1 images on little endian archs
Quartz uses a bit ordering that is consistent with cairo on big
endian architectures, but isn't on little endian architectures.

Fixes a1-mask and large-source-roi (on little endian)
2010-05-17 22:09:06 +02:00
Andrea Canciani
f40e3b09a1 quartz-font: Silence 0x0 CGContext warning
Silence Quartz complaints about operations on empty contexts:
<Error>: CGContextSetFont: invalid context 0x0
<Error>: CGContextSetFontSize: invalid context 0x0
<Error>: CGContextSetTextMatrix: invalid context 0x0
<Error>: CGContextSetAlpha: invalid context 0x0
<Error>: CGContextShowGlyphsAtPoint: invalid context 0x0
2010-05-17 22:01:50 +02:00
Andrea Canciani
1687e61694 quartz-font: Conform context and antialias handling to quartz-surface
A8 surfaces are now kAlphaOnly surfaces in quartz-font too.
Subpixel font smoothing can be enabled.
2010-05-17 21:34:38 +02:00
Benjamin Otte
d68bbc0fe5 gl: Add missing NULL-check in non-shader code 2010-05-17 20:57:08 +02:00
Benjamin Otte
7f22372edf gl: Get rid of src and mask argument to composite_init()
This was thought of as a way to detect self-painting, but it's better to
check that later in _begin() - when we check it.
2010-05-17 18:54:31 +02:00
Benjamin Otte
75f15babed gl: Implement fill_rectangles with composite
Tiny performance improvement, but a lot less code.
2010-05-17 18:54:31 +02:00
Benjamin Otte
e7c5b4f79f gl: make _set_mask() accept NULL
That way, it can be used to unset the mask.
2010-05-17 18:53:22 +02:00
Chris Wilson
145db7a427 gl: Check status after composite_begin
Skip the unnecessary work in _cairo_gl_surface_composite() if we fail
to setup the GL composite operation.
2010-05-17 12:38:16 +01:00
Chris Wilson
8695c41e80 gl: Throw a _cairo_error when detecting a GLerror
This allows us to easily set an breakpoint and inspect cairo's state
when we do something illegal.
2010-05-17 12:36:54 +01:00
Chris Wilson
1c18ab02c8 gl: Rename cairo_gl_shader_program_t to cairo_gl_shader_t
And complete the move of the shaders into the cairo_gl_shader namespace.
Of particular note, the bind_*_to_shader become
_cairo_gl_shader_bind_*() and have proper types.
2010-05-17 11:54:28 +01:00
Chris Wilson
2325d755b0 gl: Pretty print the error GLenum. 2010-05-17 10:33:46 +01:00
Benjamin Otte
7ef1bd22de gl: Update copyright statements
- add 2010 Red Hat copyright for my code
- include myself as author
- update contributors list
2010-05-17 01:16:16 +02:00
Benjamin Otte
0b69e51b52 gl: Assert that binding values to shaders never fails
As that would  be a programming error, we can use an assert and get rid
of return values that we weren't checking anyway.
2010-05-17 01:16:16 +02:00
Benjamin Otte
0bb11e8f5b gl: Use GL_TRIANGLES instead of GL_QUADS
It seems to increase performance by 1-2% on average and up to 30% in
some cases (on i965).
2010-05-17 01:16:16 +02:00
Benjamin Otte
2b771da47a xlib: ensure variable isn't uninitialized 2010-05-17 01:16:16 +02:00
Benjamin Otte
b768a33a60 gl: Set composite->has_component_alpha based on mask
Previously it was set when initing the composite structure, but that
doesn't allow resetting it when a new mask is used.
2010-05-17 01:16:14 +02:00
Benjamin Otte
1cde4601df gl: Replace _cairo_gl_operand_init() with setters for src/mask
Now cairo_gl_operand_t is no longer exposed outside of
cairo-gl-composite.c
2010-05-17 01:15:47 +02:00
Benjamin Otte
6575cb7a95 gl: Convert glyphs path to use cairo_gl_composite_t 2010-05-17 01:15:47 +02:00
Benjamin Otte
8937f2b4b5 gl: Require ARB_vertex_buffer_object extension unconditionally
<anholt> we shouldn't bother with non-vbo support. there's no
justification for a driver not supporting it.
2010-05-17 01:15:34 +02:00
Benjamin Otte
29dfd5b488 gl: Remove unused variables 2010-05-17 01:13:46 +02:00
Benjamin Otte
4144488f51 gl: Convert span renderer to use cairo_gl_composite_begin/end()
Adds two new APIs to the composite API:
- _cairo_gl_composite_set_mask_spans()
  Tells the composite renderer to use the color values for spans.
- _cairo_gl_composite_set_clip_region()
  Tells the composite renderer to use GL_SCISSORS_TEST to clip when
  drawing. This function is very unperformant, so if it can be avoided,
  it probably shouldn't be used.
2010-05-17 01:13:46 +02:00
Benjamin Otte
6e81d85e36 gl: Change _cairo_gl_composite_emit_rect()
Two changes:
- The function now takes x1/y1,x2/y2 instead of x,y,width,height
- The function takes a color uint32_t. This will be used by spans.
2010-05-17 01:13:46 +02:00
Benjamin Otte
f8398cc2d8 gl: remove unused variables from span renderer 2010-05-17 01:13:46 +02:00
Benjamin Otte
f5c5077def gl: Support component alpha in gl_composite_t
Use that to get rid of cairo_gl_surface_composite_component_alpha()
2010-05-17 01:13:46 +02:00
Benjamin Otte
88c118f891 gl: Implement _composite_emit_rect() and _composite_end()
And use it in cairo_gl_surface_composite()
2010-05-17 01:13:46 +02:00
Benjamin Otte
b96735f7b4 gl: Add _cairo_gl_composite_begin() function
This is the first step at adding the following function set:
_cairo_gl_composite_begin()
_cairo_gl_composite_emit_*()
_cairo_gl_composite_end()
which will take care of proiding a unified model for emitting vertexes
using vbos instead of the 5 different methods we currently have.
2010-05-17 01:13:46 +02:00
Benjamin Otte
211a8b8234 gl: make _cairo_operand_destroy private 2010-05-17 01:13:46 +02:00