mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-26 21:51:08 +00:00
a031011e5e
The shader can only deal with up to 7 color stops - but that's good enough for the real world. Plus, we have the uber shader. And if that fails, we can still fall back to Cairo. The code also doesn't handle repeating linear gradients yet.
78 lines
3.2 KiB
C
78 lines
3.2 KiB
C
#pragma once
|
|
|
|
#include "gskgpuopprivate.h"
|
|
|
|
#include "gskgputypesprivate.h"
|
|
|
|
G_BEGIN_DECLS
|
|
|
|
struct _GskGpuShaderOp
|
|
{
|
|
GskGpuOp parent_op;
|
|
|
|
GskGpuDescriptors *desc;
|
|
GskGpuShaderClip clip;
|
|
gsize vertex_offset;
|
|
};
|
|
|
|
struct _GskGpuShaderOpClass
|
|
{
|
|
GskGpuOpClass parent_class;
|
|
|
|
const char * shader_name;
|
|
gsize vertex_size;
|
|
#ifdef GDK_RENDERING_VULKAN
|
|
const VkPipelineVertexInputStateCreateInfo *vertex_input_state;
|
|
#endif
|
|
void (* setup_vao) (gsize offset);
|
|
};
|
|
|
|
GskGpuShaderOp * gsk_gpu_shader_op_alloc (GskGpuFrame *frame,
|
|
const GskGpuShaderOpClass *op_class,
|
|
GskGpuShaderClip clip,
|
|
GskGpuDescriptors *desc,
|
|
gpointer out_vertex_data);
|
|
|
|
void gsk_gpu_shader_op_finish (GskGpuOp *op);
|
|
|
|
#ifdef GDK_RENDERING_VULKAN
|
|
GskGpuOp * gsk_gpu_shader_op_vk_command_n (GskGpuOp *op,
|
|
GskGpuFrame *frame,
|
|
GskVulkanCommandState *state,
|
|
gsize instance_scale);
|
|
GskGpuOp * gsk_gpu_shader_op_vk_command (GskGpuOp *op,
|
|
GskGpuFrame *frame,
|
|
GskVulkanCommandState *state);
|
|
#endif
|
|
GskGpuOp * gsk_gpu_shader_op_gl_command_n (GskGpuOp *op,
|
|
GskGpuFrame *frame,
|
|
GskGLCommandState *state,
|
|
gsize instance_scale);
|
|
GskGpuOp * gsk_gpu_shader_op_gl_command (GskGpuOp *op,
|
|
GskGpuFrame *frame,
|
|
GskGLCommandState *state);
|
|
|
|
static inline void
|
|
gsk_gpu_rgba_to_float (const GdkRGBA *rgba,
|
|
float values[4])
|
|
{
|
|
values[0] = rgba->red;
|
|
values[1] = rgba->green;
|
|
values[2] = rgba->blue;
|
|
values[3] = rgba->alpha;
|
|
}
|
|
|
|
#include <graphene.h>
|
|
|
|
static inline void
|
|
gsk_gpu_point_to_float (const graphene_point_t *point,
|
|
const graphene_point_t *offset,
|
|
float values[2])
|
|
{
|
|
values[0] = point->x + offset->x;
|
|
values[1] = point->y + offset->y;
|
|
}
|
|
|
|
G_END_DECLS
|
|
|