Flutter Engine
The Flutter Engine
GrGLSLProgramDataManager.h
Go to the documentation of this file.
1/*
2 * Copyright 2015 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#ifndef GrGLSLProgramDataManager_DEFINED
9#define GrGLSLProgramDataManager_DEFINED
10
11#include "include/core/SkSpan.h"
16
17#include <cstdint>
18
19class SkM44;
20class SkMatrix;
21
22/** Manages the resources used by a shader program.
23 * The resources are objects the program uses to communicate with the
24 * application code.
25 */
27public:
29
31
32 /** Functions for uploading uniform values. The varities ending in v can be used to upload to an
33 * array of uniforms. arrayCount must be <= the array count of the uniform.
34 */
35 virtual void set1i(UniformHandle, int32_t) const = 0;
36 virtual void set1iv(UniformHandle, int arrayCount, const int v[]) const = 0;
37 virtual void set1f(UniformHandle, float v0) const = 0;
38 virtual void set1fv(UniformHandle, int arrayCount, const float v[]) const = 0;
39 virtual void set2i(UniformHandle, int32_t, int32_t) const = 0;
40 virtual void set2iv(UniformHandle, int arrayCount, const int v[]) const = 0;
41 virtual void set2f(UniformHandle, float, float) const = 0;
42 virtual void set2fv(UniformHandle, int arrayCount, const float v[]) const = 0;
43 virtual void set3i(UniformHandle, int32_t, int32_t, int32_t) const = 0;
44 virtual void set3iv(UniformHandle, int arrayCount, const int v[]) const = 0;
45 virtual void set3f(UniformHandle, float, float, float) const = 0;
46 virtual void set3fv(UniformHandle, int arrayCount, const float v[]) const = 0;
47 virtual void set4i(UniformHandle, int32_t, int32_t, int32_t, int32_t) const = 0;
48 virtual void set4iv(UniformHandle, int arrayCount, const int v[]) const = 0;
49 virtual void set4f(UniformHandle, float, float, float, float) const = 0;
50 virtual void set4fv(UniformHandle, int arrayCount, const float v[]) const = 0;
51 // matrices are column-major, the first three upload a single matrix, the latter three upload
52 // arrayCount matrices into a uniform array.
53 virtual void setMatrix2f(UniformHandle, const float matrix[]) const = 0;
54 virtual void setMatrix3f(UniformHandle, const float matrix[]) const = 0;
55 virtual void setMatrix4f(UniformHandle, const float matrix[]) const = 0;
56 virtual void setMatrix2fv(UniformHandle, int arrayCount, const float matrices[]) const = 0;
57 virtual void setMatrix3fv(UniformHandle, int arrayCount, const float matrices[]) const = 0;
58 virtual void setMatrix4fv(UniformHandle, int arrayCount, const float matrices[]) const = 0;
59
60 // convenience method for uploading a SkMatrix to a 3x3 matrix uniform
61 void setSkMatrix(UniformHandle, const SkMatrix&) const;
62 // convenience method for uploading a SkMatrix to a 4x4 matrix uniform
63 void setSkM44(UniformHandle, const SkM44&) const;
64
65 enum class Specialized : bool { kNo = false, kYes = true };
66
67 /**
68 * Sets runtime effect uniform values. The Specialized span is optional. If it is non-empty
69 * then it should be the same size as the Uniform span. Uniforms for which the Specialized value
70 * is kYes will be skipped and the UniformHandle span should have an entry for each
71 * kNo value. If Specialized is empty then the Uniform and UniformHandle spans should have the
72 * same size.
73 */
77 const void* src) const;
78
81 const void* src) const {
82 this->setRuntimeEffectUniforms(uniforms, handles, {}, src);
83 }
84
85protected:
87
88private:
90 GrGLSLProgramDataManager& operator=(const GrGLSLProgramDataManager&) = delete;
91
92 using INHERITED = SkNoncopyable;
93};
94
95#endif
#define GR_DEFINE_RESOURCE_HANDLE_CLASS(name)
@ kYes
Do pre-clip the geometry before applying the (perspective) matrix.
@ kNo
Don't pre-clip the geometry before applying the (perspective) matrix.
void setRuntimeEffectUniforms(SkSpan< const SkRuntimeEffect::Uniform >, SkSpan< const UniformHandle >, SkSpan< const Specialized >, const void *src) const
virtual void set4fv(UniformHandle, int arrayCount, const float v[]) const =0
virtual void set3fv(UniformHandle, int arrayCount, const float v[]) const =0
void setSkMatrix(UniformHandle, const SkMatrix &) const
virtual void setMatrix4fv(UniformHandle, int arrayCount, const float matrices[]) const =0
virtual void set2f(UniformHandle, float, float) const =0
virtual void setMatrix3f(UniformHandle, const float matrix[]) const =0
virtual void set3i(UniformHandle, int32_t, int32_t, int32_t) const =0
virtual void set1fv(UniformHandle, int arrayCount, const float v[]) const =0
virtual void set2i(UniformHandle, int32_t, int32_t) const =0
virtual void set4iv(UniformHandle, int arrayCount, const int v[]) const =0
virtual void set1i(UniformHandle, int32_t) const =0
virtual void set1iv(UniformHandle, int arrayCount, const int v[]) const =0
virtual void set2fv(UniformHandle, int arrayCount, const float v[]) const =0
virtual void set4i(UniformHandle, int32_t, int32_t, int32_t, int32_t) const =0
virtual void setMatrix3fv(UniformHandle, int arrayCount, const float matrices[]) const =0
virtual void set3iv(UniformHandle, int arrayCount, const int v[]) const =0
virtual void setMatrix2f(UniformHandle, const float matrix[]) const =0
virtual void set4f(UniformHandle, float, float, float, float) const =0
void setSkM44(UniformHandle, const SkM44 &) const
virtual void set3f(UniformHandle, float, float, float) const =0
virtual void set2iv(UniformHandle, int arrayCount, const int v[]) const =0
virtual void setMatrix4f(UniformHandle, const float matrix[]) const =0
virtual void setMatrix2fv(UniformHandle, int arrayCount, const float matrices[]) const =0
void setRuntimeEffectUniforms(SkSpan< const SkRuntimeEffect::Uniform > uniforms, SkSpan< const UniformHandle > handles, const void *src) const
virtual void set1f(UniformHandle, float v0) const =0
Definition: SkM44.h:150
unsigned useCenter Optional< SkMatrix > matrix
Definition: SkRecords.h:258