Hi,

Mathijs is right; because your images are so large you are probably
exceeding your GPUs maximum texture size and so Clutter *tries* to
handle that by automatically splitting your texture into smaller
"slices" which your GPU can handle. The problem you are seeing is that
sliced textures have some limitations compared to regular, unsliced
textures because we have to make multiple draw calls per primitive to
draw each of the slices and one of the things we don't currently support
with sliced textures is multi-texturing.

Multi-texturing is where you try to combine multiple textures when you
draw some primitive and this is done by added multiple layers to the
CoglMaterial being used to draw.

It's very likely that you don't really need the full resolution of such
images and so you may be wasting a lot of memory by loading the full
images and also not using your GPU texture cache efficiently.

If possible I would recommend that you load your images using the
gdk_pixbuf_loader API and in a "size-prepared" signal handler check the
image size and then if necessary call gdk_pixbuf_loader_set_size to
ensure that you don't load images larger than the largest size you plan
to display at. Once the image is loaded you can then give the data to
Clutter using clutter_texture_set_from_data (). Hopefully this way you
can avoid using sliced textures at all.

At some point I think it would be good for Clutter to provide an
integrated image loading API that would simplify this kind of problem
since it does come up quite often.

kind regards,
- Robert

Excerpts from Mathijs Dumon's message of Sat Feb 12 11:11:22 +0000 2011:
> I think the error is related to the size of your jpg. Graphic cards can only
> store textures up to a certain maximum size (e.g. 256x256 px). If your
> texture/image is larger, it will be sliced into smaller subsets that fit
> into that maximum size (effectively making multiple textures in memory)
> 
> I'm assuming the cogl back-end takes care of rendering these slices
> correctly one next to another. However due to the nature of the operation it
> is rather hard to do multi-texturing (because the other textures will be
> sliced differently if they have different sizes, and will only partly
> overlap with the other layers etc. etc.).
> 
> So as long as you have defined just one texture for your actor (which
> usually is the case) there's no problem, when you'd like an actor to have
> one texture overlain by another it won't work with bigger textures. The
> exact size would be hardware-dependent.
> 
> Again, this is what I think the error is about, please correct me if I'm
> wrong.
> 
> best regards,
> Mathijs
-- 
Robert Bragg, Intel Open Source Technology Center
_______________________________________________
clutter-app-devel-list mailing list
[email protected]
http://lists.clutter-project.org/listinfo/clutter-app-devel-list

Reply via email to