| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
| |
Surface creation now specifies the exact format, not only the bit depth
of each surface which is used for rendering.
Additionally we now actually store the surfaces in that format, instead
of converting everything to 32bpp when drawing or e.g. handling palettes.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
In order to be able to support 16bit canvases on 32bit screens and 32bit
canvases on 16bit screens we need to handle format conversion when drawing
RedPixmaps.
The way this works now for X11 is that we only have one PIXELS_SOURCE_TYPE
for pixmaps, which always has a pixman_image_t for the data, but additionally
it has an XImage (shared mem or not) if the screen the pixmap was created
for (i.e. an explicit one or the default screen) has the same format as
the pixmap.
When we draw a pixmap on a drawable we have two variants. If the pixmap
has a XImage and it matches the format of the target drawable then we
just X(Shm)PutImage it to the drawable. If the formats differ, then we
create a temporary XImage and convert into that before drawing it to
the screen.
Right now this is a bit inefficient, because we always allocate a new
temporary image when converting. We want to add some caching here, but
at least this lets things work again.
|
| |
|
| |
|
|
|
|
|
| |
This way we don't have to convert when drawing to it, or drawing it to
the dc.
|
|
|
|
|
| |
Being copy compatible means the format are identical except
that some bits in the source may be ignored in the destination.
|
|
|
|
|
| |
This is useful because we can e.g. create pixmaps in the same format as
a window.
|
| |
|
|
|
|
|
|
|
|
| |
We need to know the format for other drawables too (like for instance
the native format of a window), so we're pushing this down.
This changes a bunch of references to be RedDrawable::, but not all.
The the old RedPixmap:: references still work, but will be phased out.
|
|
|
|
|
|
|
|
|
|
|
| |
We now support 16bit format pixmaps as well as the old ones. Including
both 555 and 565 modes.
We drop the palette argument for pixmap construction as it was only
used for black/white anyway.
Canvas creation is simplified so that there is no separate set_mode
state. Canvases are already created in the right mode and never change.
|
|
|
|
|
| |
Ideally we should just read this from the pixman image, but
there is no API to do so in stable pixman, so we store it.
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
| |
The current glx code is looking for a rgb32 visual and always failing
if there is none. This means not even software rendering starts up
on e.g. 16bit visuals. This commit makes it pick software fallbacks
on 16bit visuals.
Long term we need to fix the gl implementation to do 16bpp too.
|
| |
|
|
|
|
|
|
| |
The previous way XShm detection worked failed at least for me, and is
not the standard way. We now just use XShmQueryExtension and
XShmQueryVersion.
|
| |
|
| |
|
|\ |
|
| | |
|
|/
|
|
|
|
|
|
| |
The new command return dirty area to be used
by users that want spice to render localy or
into some framebuffer (sdl / vnc)
Signed-off-by: Izik Eidus <ieidus@redhat.com>
|
| |
|
|
|
|
|
| |
The previous code was just busted, as apparent on e.g. the cursor
in MS Paint.
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
Signed-off-by: Izik Eidus <ieidus@redhat.com>
|
|
|
|
| |
Signed-off-by: Izik Eidus <ieidus@redhat.com>
|
|
|
|
|
| |
When blitting we don't really care about alpha mismatches, we just copy bits
anyway.
|
|
|
|
|
|
| |
this was noticed by Yonit.
Signed-off-by: Izik Eidus <ieidus@redhat.com>
|
|
|
|
|
| |
This is required so that we can have code in other files that does address
validation.
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
While the fix could have been more effective,
it seems like this patch stream better with the coding
logic that was there..., maybe later we will want to change
the locking into more effective way.
(There is just the primary surface to protect in reiality)
Signed-off-by: Izik Eidus <ieidus@redhat.com>
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is pretty straightforward, although there are two weird issues.
The current encoder has two bugs in the yuv conversion. First of all
it switches red and blue, due to something of an endianness issue. We
keep this behavior by switching red and blue. Maybe we want to
change this in the new protocol version since switching this may
cause jpeg compression to be worse.
Secondly, the old coder/decoder did rgb to/from yuv420 wrongly for
jpeg, not using the "full scale" version of Y that is used in jpeg,
but the other one where y goes from 16 to 235. (See jpeg/jfif
reference on http://en.wikipedia.org/wiki/YCbCr for details.)
The new decoder uses the full range in order to get better quality,
which means old encoders will show slightly darker images.
This completely removes all ffmpeg usage in the client
|
| |
|
|
|
|
| |
Signed-off-by: Izik Eidus <ieidus@redhat.com>
|
| |
|
|
|
|
|
| |
By default it is disabled. To enable: configure --enable-tunnel.
When active, requires libslirp.
|
|
|
|
| |
disconnecting from the current host and connecting to the target host.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
The idea is that we can try to defer some stuff to be later
send in the pipe if the pipe is not fulled yet, moreover
we will then walk on the pipe using:
red_clear_surface_drawables_from_pipe() and will try to
remove the uneeded objects of this surface
Still some room to improvment but later...
Signed-off-by: Izik Eidus <ieidus@redhat.com>
|
|
|
|
|
|
|
|
|
| |
Validate the surface_ids just once and keep them in safe
memory area
Make things simpler
Signed-off-by: Izik Eidus <ieidus@redhat.com>
|
|
|
|
|
|
|
|
|
|
|
| |
BitmapMask was used by the draw_text function as well
therefore we need to mark from_surface = 0 if we want
it to release the boject...
(Was evil, took me few hours to understand from where
the leak come...)
Signed-off-by: Izik Eidus <ieidus@redhat.com>
|