Merge lp:~unity-team/clutk/clutk.no-effects into lp:clutk

Proposed by David Barth
Status: Merged
Approved by: David Barth
Approved revision: 275
Merge reported by: David Barth
Merged at revision: not available
Proposed branch: lp:~unity-team/clutk/clutk.no-effects
Merge into: lp:clutk
Diff against target: 281 lines (+88/-38)
8 files modified
clutk/ctk-effect-blur.c (+2/-1)
clutk/ctk-effect-cache.c (+33/-29)
clutk/ctk-effect-drop-shadow.c (+3/-1)
clutk/ctk-effect-glow.c (+3/-1)
clutk/ctk-effect.c (+10/-2)
clutk/ctk-main.c (+32/-3)
clutk/ctk-main.h (+1/-0)
clutk/ctk-menu-expandable.c (+4/-1)
To merge this branch: bzr merge lp:~unity-team/clutk/clutk.no-effects
Reviewer Review Type Date Requested Status
Mirco Müller (community) Approve
Review via email: mp+37613@code.launchpad.net

Description of the change

I tested Neil's branch on my ATI and this allowed it to run Unity without crashing on effects triggers. You'll need to disable the cache in unity as well (see other proposed branch) as well as set the appropriate env. variables to disable both caches and effects:

/etc/X11/Xsession.d/10unity-quirks:
export CLUTK_DISABLE_EFFECTS=1
export UNITY_DISABLE_CACHE=1

Note: there is still an issue with QL not being rendered properly.

To post a comment you must log in.
Revision history for this message
Mikkel Kamstrup Erlandsen (kamstrup) wrote :

For reference: The mentioned unity branch is lp:~dbarth/unity/disable-cache

Revision history for this message
Mirco Müller (macslow) wrote :

Approved.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'clutk/ctk-effect-blur.c'
2--- clutk/ctk-effect-blur.c 2010-07-23 15:10:41 +0000
3+++ clutk/ctk-effect-blur.c 2010-10-05 14:53:44 +0000
4@@ -45,6 +45,7 @@
5 #include "ctk-effect-blur.h"
6 #include "ctk-private.h"
7
8+gboolean ctk_get_effects_enabled ();
9
10 G_DEFINE_TYPE (CtkEffectBlur, ctk_effect_blur, CTK_TYPE_EFFECT);
11
12@@ -112,7 +113,7 @@
13
14 if (ctk_has_capability (CTK_CAPABILITY_VERTEX_PROGRAM)
15 && ctk_has_capability (CTK_CAPABILITY_FRAGMENT_PROGRAM)
16- && ctk_asm_shaders_compiled_and_ready ())
17+ && ctk_asm_shaders_compiled_and_ready () && ctk_get_effects_enabled ())
18 eff_class->paint = ctk_effect_blur_paint;
19 else
20 {
21
22=== modified file 'clutk/ctk-effect-cache.c'
23--- clutk/ctk-effect-cache.c 2010-09-16 20:18:58 +0000
24+++ clutk/ctk-effect-cache.c 2010-10-05 14:53:44 +0000
25@@ -77,9 +77,9 @@
26 CtkEffectPaintFunc func,
27 gboolean is_last_effect);
28
29-static void ctk_effect_cache_paint_dummy (CtkEffect *effect,
30- CtkEffectPaintFunc func,
31- gboolean is_last_effect);
32+// static void ctk_effect_cache_paint_dummy (CtkEffect *effect,
33+// CtkEffectPaintFunc func,
34+// gboolean is_last_effect);
35
36 static void ctk_effect_cache_set_property (GObject* gobject,
37 guint prop,
38@@ -118,24 +118,28 @@
39
40 GObjectClass* obj_class = G_OBJECT_CLASS (klass);
41
42- if (ctk_has_capability (CTK_CAPABILITY_VERTEX_PROGRAM)
43- && ctk_has_capability (CTK_CAPABILITY_FRAGMENT_PROGRAM)
44- && ctk_asm_shaders_compiled_and_ready ())
45- eff_class->paint = ctk_effect_cache_paint;
46- else
47- {
48- if (!ctk_has_capability (CTK_CAPABILITY_FBO) || !ctk_has_capability (CTK_CAPABILITY_VERTEX_PROGRAM) || !ctk_has_capability (CTK_CAPABILITY_FRAGMENT_PROGRAM))
49- {
50- g_message ("WARNING: CtkEffectCache cannot work without FBO and assembly shader program capabiltities");
51- }
52- else
53- {
54- if (!ctk_asm_shaders_compiled_and_ready ())
55- g_message ("WARNING: Shaders programs are not ready");
56- }
57- eff_class->paint = ctk_effect_cache_paint_dummy;
58- }
59+ // Effect cache does not depend of hardware capability
60+
61+// if (ctk_has_capability (CTK_CAPABILITY_VERTEX_PROGRAM)
62+// && ctk_has_capability (CTK_CAPABILITY_FRAGMENT_PROGRAM)
63+// && ctk_asm_shaders_compiled_and_ready ())
64+// eff_class->paint = ctk_effect_cache_paint;
65+// else
66+// {
67+// if (!ctk_has_capability (CTK_CAPABILITY_FBO) || !ctk_has_capability (CTK_CAPABILITY_VERTEX_PROGRAM) || !ctk_has_capability (CTK_CAPABILITY_FRAGMENT_PROGRAM))
68+// {
69+// g_message ("WARNING: CtkEffectCache cannot work without FBO and assembly shader program capabiltities");
70+// }
71+// else
72+// {
73+// if (!ctk_asm_shaders_compiled_and_ready ())
74+// g_message ("WARNING: Shaders programs are not ready");
75+// }
76+// eff_class->paint = ctk_effect_cache_paint_dummy;
77+// }
78
79+ eff_class->paint = ctk_effect_cache_paint;
80+
81 obj_class->finalize = ctk_effect_cache_finalize;
82 obj_class->set_property = ctk_effect_cache_set_property;
83 obj_class->get_property = ctk_effect_cache_get_property;
84@@ -206,15 +210,15 @@
85 /*
86 * Private Methods
87 */
88-static void
89-ctk_effect_cache_paint_dummy (CtkEffect *effect,
90- CtkEffectPaintFunc paint_func,
91- gboolean is_last_effect)
92-{
93- ClutterActor *actor = ctk_effect_get_actor (effect);
94-
95- paint_func (actor);
96-}
97+// static void
98+// ctk_effect_cache_paint_dummy (CtkEffect *effect,
99+// CtkEffectPaintFunc paint_func,
100+// gboolean is_last_effect)
101+// {
102+// ClutterActor *actor = ctk_effect_get_actor (effect);
103+//
104+// paint_func (actor);
105+// }
106
107 static void
108 ctk_effect_cache_paint (CtkEffect *effect,
109
110=== modified file 'clutk/ctk-effect-drop-shadow.c'
111--- clutk/ctk-effect-drop-shadow.c 2010-07-23 15:10:41 +0000
112+++ clutk/ctk-effect-drop-shadow.c 2010-10-05 14:53:44 +0000
113@@ -45,6 +45,8 @@
114 #include "ctk-effect-drop-shadow.h"
115 #include "ctk-private.h"
116
117+gboolean ctk_get_effects_enabled ();
118+
119 G_DEFINE_TYPE (CtkEffectDropShadow, ctk_effect_drop_shadow, CTK_TYPE_EFFECT);
120
121 enum
122@@ -114,7 +116,7 @@
123
124 if (ctk_has_capability (CTK_CAPABILITY_VERTEX_PROGRAM)
125 && ctk_has_capability (CTK_CAPABILITY_FRAGMENT_PROGRAM)
126- && ctk_asm_shaders_compiled_and_ready ())
127+ && ctk_asm_shaders_compiled_and_ready () && ctk_get_effects_enabled ())
128 eff_class->paint = ctk_effect_drop_shadow_paint;
129 else
130 {
131
132=== modified file 'clutk/ctk-effect-glow.c'
133--- clutk/ctk-effect-glow.c 2010-07-27 21:04:51 +0000
134+++ clutk/ctk-effect-glow.c 2010-10-05 14:53:44 +0000
135@@ -46,6 +46,8 @@
136 #include "ctk-private.h"
137 #include "ctk-actor.h"
138
139+gboolean ctk_get_effects_enabled ();
140+
141 G_DEFINE_TYPE (CtkEffectGlow, ctk_effect_glow, CTK_TYPE_EFFECT);
142
143 enum
144@@ -130,7 +132,7 @@
145
146 if (ctk_has_capability (CTK_CAPABILITY_VERTEX_PROGRAM)
147 && ctk_has_capability (CTK_CAPABILITY_FRAGMENT_PROGRAM)
148- && ctk_asm_shaders_compiled_and_ready ())
149+ && ctk_asm_shaders_compiled_and_ready () && ctk_get_effects_enabled ())
150 eff_class->paint = ctk_effect_glow_paint;
151 else
152 {
153
154=== modified file 'clutk/ctk-effect.c'
155--- clutk/ctk-effect.c 2010-05-28 09:31:10 +0000
156+++ clutk/ctk-effect.c 2010-10-05 14:53:44 +0000
157@@ -34,6 +34,7 @@
158 #endif
159
160 #include "ctk-effect.h"
161+#include "ctk-main.h"
162
163 #include <memory.h>
164 #include <gobject/gvaluecollector.h>
165@@ -476,8 +477,15 @@
166 g_return_if_fail (CTK_IS_EFFECT (self));
167 klass = CTK_EFFECT_GET_CLASS (self);
168
169- if (klass->paint)
170- klass->paint (self, func, is_last_effect);
171+ if (ctk_get_effects_enabled ())
172+ {
173+ if (klass->paint)
174+ klass->paint (self, func, is_last_effect);
175+ }
176+ else
177+ {
178+ (func) (self->_actor);
179+ }
180 }
181
182 /**
183
184=== modified file 'clutk/ctk-main.c'
185--- clutk/ctk-main.c 2010-08-23 16:04:09 +0000
186+++ clutk/ctk-main.c 2010-10-05 14:53:44 +0000
187@@ -76,6 +76,8 @@
188
189 static gdouble pixel_per_em = 10.0f;
190
191+static gboolean effects_enabled = TRUE;
192+
193 /* Private Methods */
194 static void
195 get_capabilities ()
196@@ -253,6 +255,12 @@
197 has_glsl_1_40 = TRUE;
198 }
199 }
200+
201+// if (ctk_get_effects_enabled () == FALSE)
202+// {
203+// has_vertex_program = 0;
204+// has_fragment_program = 0;
205+// }
206 }
207
208 static void
209@@ -426,14 +434,29 @@
210 g_warning ("CluTK has already been intialised");
211 return;
212 }
213- get_capabilities ();
214-
215- create_asm_shader_programs ();
216
217 calculate_pixel_per_em ();
218
219 set_font_options ();
220
221+ if (g_strcmp0 (g_getenv ("CLUTK_DISABLE_EFFECTS"), "1") == 0)
222+ {
223+ //g_message ("CLUTK_DISABLE_EFFECTS=1 : Disabling effects");
224+ effects_enabled = FALSE;
225+ get_capabilities ();
226+ create_asm_shader_programs ();
227+ }
228+ else
229+ {
230+ get_capabilities ();
231+ create_asm_shader_programs ();
232+ }
233+
234+ if (!effects_enabled)
235+ {
236+ //g_message ("Effects disabled! Some GL-extension support missing or forcefully turned off.");
237+ }
238+
239 ctk_inited = TRUE;
240 }
241
242@@ -864,3 +887,9 @@
243 cairo_surface_mark_dirty (surface);
244 }
245
246+gboolean
247+ctk_get_effects_enabled ()
248+{
249+ return effects_enabled;
250+}
251+
252
253=== modified file 'clutk/ctk-main.h'
254--- clutk/ctk-main.h 2010-02-23 11:11:51 +0000
255+++ clutk/ctk-main.h 2010-10-05 14:53:44 +0000
256@@ -38,6 +38,7 @@
257 gdouble ctk_pixel_to_em (gint pixel_value);
258 gdouble ctk_em_to_pixel (gdouble em_value);
259 void ctk_surface_blur (cairo_surface_t* surface, guint radius);
260+gboolean ctk_get_effects_enabled ();
261
262 G_END_DECLS
263
264
265=== modified file 'clutk/ctk-menu-expandable.c'
266--- clutk/ctk-menu-expandable.c 2010-09-16 00:12:23 +0000
267+++ clutk/ctk-menu-expandable.c 2010-10-05 14:53:44 +0000
268@@ -385,9 +385,12 @@
269
270 gint Threshold = CTK_MENU_EXPANDABLE_TRANSITION_STEPS;
271
272- ctk_menu_expandable_blurred_bkg (menu, x, y,
273+ if (ctk_get_effects_enabled ())
274+ {
275+ ctk_menu_expandable_blurred_bkg (menu, x, y,
276 actor_w + 2*ctk_menu_expandable_get_padding (menu),
277 actor_h + 2*ctk_menu_expandable_get_corner_radius (menu) + 2*ctk_menu_expandable_get_padding (menu));
278+ }
279
280 //////////////////////////////////////////////////////////////////////////////////////
281 // Top Part

Subscribers

People subscribed via source and target branches