[Cogl] [clutter-announce] Release Cogl 1.9.4 (snapshot)
Roland Peffer
gdevel at clixxun.com
Tue Jan 24 03:00:53 PST 2012
Hi Robert,
>> I just tested the new Version on OSX 1.6.8 64Bit and found the folowing
>> issues:
>>
>> 1.) CLUTTER 1.9.2 with COGL 1.9.4
>> - clutter 1.9.2 compiled with cogl 1.9.2 , just updated to cogl 1.9.4:
>> Clutter Text shows no text rendering anymore.
>>
> Can you please try running with CLUTTER_DISABLE_MIPMAPPED_TEXT=1 there
> seems to be a recurring problem on OSX with mipmapped text which we
> haven't yet managed to get to the bottom of.
Well that worked!. Before I used clutter_set_font_flags (CLUTTER_FONT_HINTING),
but it seems to have not the desired effect anymore!
>
>> - Then I tried to recompile clutter 1.9.2 and got:
>>
>> In file included from ./osx/clutter-backend-osx.c:34:
>> ./clutter-private.h:252: error: expected specifier-qualifier-list before
>> 'CoglVector3'
>> make[3]: *** [clutter-backend-osx.lo] Error 1
>> make[2]: *** [all] Error 2
>> make[1]: *** [all-recursive] Error 1
>> make: *** [all] Error 2
>
> You need to build with Clutter master until clutter next makes a release.
> Clutter internally uses Cogl's experimental APIs which are subject to change
> during a development cycle and we recently removed the CoglVector3 type from
> Cogl. Alternatively I've also attached a patch that was used to update Clutter
> that you might be able to apply against 1.9.2 if you don't want to use clutter
> master.
I did not try the last version yet. Will give you an update if it causes problems.
>
>>
>> 2.) Also I noticed that the quartz image option in cogl configure seems not
>> to have any effect.
>
> Have you explicitly disabled the gdk-pixbuf backend, using --disable-gdk-pixbuf
> I wonder? Taking a look at the configure.ac code I think the gdk-pixbuf backend
> will take precedence if that's found. Maybe we should change that so the
> quartz backend has higher precedence if enabled.
You are right, if I disable gtk-pixbuf, quartz image gets active!
>>
>> 3.) Would it be possible to add an update function like
>> cogl_texture_update_from_buffer smilar to cogl_texture_new_from_buffer ?
>> I would like to have it because like this I think I could update a video
>> stream
>> through Buffer map/unmap to a texture with not so much overhead.
>
> If you're using the buffer to replace the whole texture then I would recommend
> simply creating a new texture object for each update. The cost of allocating
> the CoglTexture struct that describes the texture should be trivial compared to
> the cost of uploading the data so I don't think we'd see a measurable
> performance benefit from a cogl_texture_update_from_buffer(). If you have
> some profiling data though that suggests it really would be worthwhile then
> I'd be happy to take a look at that.
>
> I think one of the bigger challenges with optimizing video streaming is avoiding
> buffer copies and that's sometimes tricky to do without knowing exactly what the
> driver is doing under the hood. If you're not lucky then the driver will end
> up making copies behind the scenes. Modifying textures mid-scene is one thing
> in particular that can upset some drivers which is another reason I'd be weary of
> adding an _update_from_buffer() function if it might lead developers unwittingly
> into bad performance.
>
> If you aren't updating the whole buffer for each update, then something else to
> be weary of is modifying a PixelBuffer that you created a texture from. If the
> driver managed to make your texture without copying the pixel buffer then the
> driver might not later allow you to modify that buffer (via map/unmap) without
> first forcing an internal copy-on-write. For this reason it can be worth
> experimenting with double/tripple buffering your pixel buffers and deleting old
> textures so you can avoid modifying a buffer that is currently tied to a
> texture.
>
> Maybe a bit more of a brain dump than you were asking for, but my feeling is
> that you may have much more significant issues with regards to avoiding buffer
> copies that can impact performance than needing to worry about avoiding
> allocating CoglTexture objects.
>
I played around with various streaming methods:
1.) The most simple is to use cogl_texture_set_region .
Performance is average.
2.) Then I tried a sequence of
cogl_buffer_set_data ,
cogl_bitmap_new_from_buffer
cogl_texture_set_region_from_bitmap
Performance is average as well.
3.) Finally I used
cogl_buffer_map/unmap (to get the data from user space into the graphics memory)
cogl_bitmap_new_from_buffer
cogl_texture_set_region_from_bitmap
Performance is the best so far. I just wonder if replacing the last 2 calls
by a new cogl_texture_update_from_buffer function even could increase performance.
4.) Your advise to use
cogl_buffer_map/unmap
cogl_texture_new_from_buffer
showed the worst performance off all.
I have also another question: In cogl_pop_framebuffer (void) I found the comment:
....
{
/* XXX: eventually we want to remove this implicit journal flush
* so we can log into the journal beyond framebuffer changes to
* support batching scenes that depend on the results of
* mid-scene renders to textures. */
_cogl_framebuffer_flush_journal (to_pop->draw_buffer);
_cogl_framebuffer_flush_journal (to_pop->read_buffer);
notify_buffers_changed (to_pop->draw_buffer,
to_restore->draw_buffer,
to_pop->read_buffer,
to_restore->read_buffer);
}
......
Do you have any idea if and when this batching scenes support could be realized?
Thx,
Roland
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/cogl/attachments/20120124/81ae59eb/attachment.htm>
More information about the Cogl
mailing list