1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2015 Google Inc. 3cb93a386Sopenharmony_ci * 4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be 5cb93a386Sopenharmony_ci * found in the LICENSE file. 6cb93a386Sopenharmony_ci */ 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci#ifndef GrGLSLProgramDataManager_DEFINED 9cb93a386Sopenharmony_ci#define GrGLSLProgramDataManager_DEFINED 10cb93a386Sopenharmony_ci 11cb93a386Sopenharmony_ci#include "include/core/SkTypes.h" 12cb93a386Sopenharmony_ci#include "include/private/SkNoncopyable.h" 13cb93a386Sopenharmony_ci#include "src/gpu/GrResourceHandle.h" 14cb93a386Sopenharmony_ci 15cb93a386Sopenharmony_ciclass SkMatrix; 16cb93a386Sopenharmony_ciclass SkM44; 17cb93a386Sopenharmony_ci 18cb93a386Sopenharmony_ci/** Manages the resources used by a shader program. 19cb93a386Sopenharmony_ci * The resources are objects the program uses to communicate with the 20cb93a386Sopenharmony_ci * application code. 21cb93a386Sopenharmony_ci */ 22cb93a386Sopenharmony_ciclass GrGLSLProgramDataManager : SkNoncopyable { 23cb93a386Sopenharmony_cipublic: 24cb93a386Sopenharmony_ci GR_DEFINE_RESOURCE_HANDLE_CLASS(UniformHandle); 25cb93a386Sopenharmony_ci 26cb93a386Sopenharmony_ci virtual ~GrGLSLProgramDataManager() {} 27cb93a386Sopenharmony_ci 28cb93a386Sopenharmony_ci /** Functions for uploading uniform values. The varities ending in v can be used to upload to an 29cb93a386Sopenharmony_ci * array of uniforms. arrayCount must be <= the array count of the uniform. 30cb93a386Sopenharmony_ci */ 31cb93a386Sopenharmony_ci virtual void set1i(UniformHandle, int32_t) const = 0; 32cb93a386Sopenharmony_ci virtual void set1iv(UniformHandle, int arrayCount, const int v[]) const = 0; 33cb93a386Sopenharmony_ci virtual void set1f(UniformHandle, float v0) const = 0; 34cb93a386Sopenharmony_ci virtual void set1fv(UniformHandle, int arrayCount, const float v[]) const = 0; 35cb93a386Sopenharmony_ci virtual void set2i(UniformHandle, int32_t, int32_t) const = 0; 36cb93a386Sopenharmony_ci virtual void set2iv(UniformHandle, int arrayCount, const int v[]) const = 0; 37cb93a386Sopenharmony_ci virtual void set2f(UniformHandle, float, float) const = 0; 38cb93a386Sopenharmony_ci virtual void set2fv(UniformHandle, int arrayCount, const float v[]) const = 0; 39cb93a386Sopenharmony_ci virtual void set3i(UniformHandle, int32_t, int32_t, int32_t) const = 0; 40cb93a386Sopenharmony_ci virtual void set3iv(UniformHandle, int arrayCount, const int v[]) const = 0; 41cb93a386Sopenharmony_ci virtual void set3f(UniformHandle, float, float, float) const = 0; 42cb93a386Sopenharmony_ci virtual void set3fv(UniformHandle, int arrayCount, const float v[]) const = 0; 43cb93a386Sopenharmony_ci virtual void set4i(UniformHandle, int32_t, int32_t, int32_t, int32_t) const = 0; 44cb93a386Sopenharmony_ci virtual void set4iv(UniformHandle, int arrayCount, const int v[]) const = 0; 45cb93a386Sopenharmony_ci virtual void set4f(UniformHandle, float, float, float, float) const = 0; 46cb93a386Sopenharmony_ci virtual void set4fv(UniformHandle, int arrayCount, const float v[]) const = 0; 47cb93a386Sopenharmony_ci // matrices are column-major, the first three upload a single matrix, the latter three upload 48cb93a386Sopenharmony_ci // arrayCount matrices into a uniform array. 49cb93a386Sopenharmony_ci virtual void setMatrix2f(UniformHandle, const float matrix[]) const = 0; 50cb93a386Sopenharmony_ci virtual void setMatrix3f(UniformHandle, const float matrix[]) const = 0; 51cb93a386Sopenharmony_ci virtual void setMatrix4f(UniformHandle, const float matrix[]) const = 0; 52cb93a386Sopenharmony_ci virtual void setMatrix2fv(UniformHandle, int arrayCount, const float matrices[]) const = 0; 53cb93a386Sopenharmony_ci virtual void setMatrix3fv(UniformHandle, int arrayCount, const float matrices[]) const = 0; 54cb93a386Sopenharmony_ci virtual void setMatrix4fv(UniformHandle, int arrayCount, const float matrices[]) const = 0; 55cb93a386Sopenharmony_ci 56cb93a386Sopenharmony_ci // convenience method for uploading a SkMatrix to a 3x3 matrix uniform 57cb93a386Sopenharmony_ci void setSkMatrix(UniformHandle, const SkMatrix&) const; 58cb93a386Sopenharmony_ci // convenience method for uploading a SkMatrix to a 4x4 matrix uniform 59cb93a386Sopenharmony_ci void setSkM44(UniformHandle, const SkM44&) const; 60cb93a386Sopenharmony_ci 61cb93a386Sopenharmony_ciprotected: 62cb93a386Sopenharmony_ci GrGLSLProgramDataManager() {} 63cb93a386Sopenharmony_ci 64cb93a386Sopenharmony_ciprivate: 65cb93a386Sopenharmony_ci using INHERITED = SkNoncopyable; 66cb93a386Sopenharmony_ci}; 67cb93a386Sopenharmony_ci 68cb93a386Sopenharmony_ci#endif 69