зеркало из https://github.com/mozilla/gecko-dev.git
116 строки
2.7 KiB
GLSL
116 строки
2.7 KiB
GLSL
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
|
|
#ifdef WR_VERTEX_SHADER
|
|
#define VECS_PER_RENDER_TASK 2
|
|
|
|
uniform HIGHP_SAMPLER_FLOAT sampler2D sRenderTasks;
|
|
|
|
struct RenderTaskCommonData {
|
|
RectWithSize task_rect;
|
|
float texture_layer_index;
|
|
};
|
|
|
|
struct RenderTaskData {
|
|
RenderTaskCommonData common_data;
|
|
vec3 data1;
|
|
};
|
|
|
|
RenderTaskData fetch_render_task_data(int index) {
|
|
ivec2 uv = get_fetch_uv(index, VECS_PER_RENDER_TASK);
|
|
|
|
vec4 texel0 = TEXEL_FETCH(sRenderTasks, uv, 0, ivec2(0, 0));
|
|
vec4 texel1 = TEXEL_FETCH(sRenderTasks, uv, 0, ivec2(1, 0));
|
|
|
|
RectWithSize task_rect = RectWithSize(
|
|
texel0.xy,
|
|
texel0.zw
|
|
);
|
|
|
|
RenderTaskCommonData common_data = RenderTaskCommonData(
|
|
task_rect,
|
|
texel1.x
|
|
);
|
|
|
|
RenderTaskData data = RenderTaskData(
|
|
common_data,
|
|
texel1.yzw
|
|
);
|
|
|
|
return data;
|
|
}
|
|
|
|
RenderTaskCommonData fetch_render_task_common_data(int index) {
|
|
ivec2 uv = get_fetch_uv(index, VECS_PER_RENDER_TASK);
|
|
|
|
vec4 texel0 = TEXEL_FETCH(sRenderTasks, uv, 0, ivec2(0, 0));
|
|
vec4 texel1 = TEXEL_FETCH(sRenderTasks, uv, 0, ivec2(1, 0));
|
|
|
|
RectWithSize task_rect = RectWithSize(
|
|
texel0.xy,
|
|
texel0.zw
|
|
);
|
|
|
|
RenderTaskCommonData data = RenderTaskCommonData(
|
|
task_rect,
|
|
texel1.x
|
|
);
|
|
|
|
return data;
|
|
}
|
|
|
|
#define PIC_TYPE_IMAGE 1
|
|
#define PIC_TYPE_TEXT_SHADOW 2
|
|
|
|
/*
|
|
The dynamic picture that this brush exists on. Right now, it
|
|
contains minimal information. In the future, it will describe
|
|
the transform mode of primitives on this picture, among other things.
|
|
*/
|
|
struct PictureTask {
|
|
RenderTaskCommonData common_data;
|
|
vec2 content_origin;
|
|
};
|
|
|
|
PictureTask fetch_picture_task(int address) {
|
|
RenderTaskData task_data = fetch_render_task_data(address);
|
|
|
|
PictureTask task = PictureTask(
|
|
task_data.common_data,
|
|
task_data.data1.xy
|
|
);
|
|
|
|
return task;
|
|
}
|
|
|
|
struct ClipArea {
|
|
RenderTaskCommonData common_data;
|
|
vec2 screen_origin;
|
|
bool local_space;
|
|
};
|
|
|
|
ClipArea fetch_clip_area(int index) {
|
|
ClipArea area;
|
|
|
|
if (index == 0x7FFF) { //special sentinel task index
|
|
area.common_data = RenderTaskCommonData(
|
|
RectWithSize(vec2(0.0), vec2(0.0)),
|
|
0.0
|
|
);
|
|
area.screen_origin = vec2(0.0);
|
|
area.local_space = false;
|
|
} else {
|
|
RenderTaskData task_data = fetch_render_task_data(index);
|
|
|
|
area.common_data = task_data.common_data;
|
|
area.screen_origin = task_data.data1.xy;
|
|
area.local_space = task_data.data1.z == 0.0;
|
|
}
|
|
|
|
return area;
|
|
}
|
|
|
|
#endif //WR_VERTEX_SHADER
|