1 /*
2 * Copyright (C) 2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "shader_pass_program.h"
17
18 namespace OHOS {
19 namespace Media {
ShaderPassProgram(RenderContext * context,const std::string & vertex,const std::string & fragment)20 ShaderPassProgram::ShaderPassProgram(RenderContext* context, const std::string& vertex, const std::string& fragment)
21 {
22 context_ = context;
23 shader_ = std::make_shared<RenderGeneralProgram>(context, vertex.c_str(), fragment.c_str());
24 shader_->Init();
25 vertexShaderCode_ = vertex;
26 fragmentShaderCode_ = fragment;
27 }
28
~ShaderPassProgram()29 ShaderPassProgram::~ShaderPassProgram()
30 {
31 if (shader_) {
32 shader_->Release();
33 shader_ = nullptr;
34 }
35 }
36
Bind()37 void ShaderPassProgram::Bind()
38 {
39 shader_->Bind();
40 }
41
Unbind()42 void ShaderPassProgram::Unbind()
43 {
44 shader_->Unbind();
45 }
46
GetAttributeLocation(std::string attributeName)47 int ShaderPassProgram::GetAttributeLocation(std::string attributeName)
48 {
49 return shader_->GetAttributeLocation(attributeName.c_str());
50 }
51
GetUniformLocation(std::string uniformName)52 int ShaderPassProgram::GetUniformLocation(std::string uniformName)
53 {
54 return shader_->GetUniformLocation(uniformName.c_str());
55 }
56
SetInt(std::string name,int value)57 void ShaderPassProgram::SetInt(std::string name, int value)
58 {
59 shader_->SetUniform(name.c_str(), value);
60 }
61
SetFloat(std::string name,float value)62 void ShaderPassProgram::SetFloat(std::string name, float value)
63 {
64 shader_->SetUniform(name.c_str(), value);
65 }
66
SetVec2(std::string name,Vec2 value)67 void ShaderPassProgram::SetVec2(std::string name, Vec2 value)
68 {
69 shader_->SetUniform(name.c_str(), value);
70 }
71
SetVec3(std::string name,Vec3 value)72 void ShaderPassProgram::SetVec3(std::string name, Vec3 value)
73 {
74 shader_->SetUniform(name.c_str(), value);
75 }
76
SetVec4(std::string name,Vec4 value)77 void ShaderPassProgram::SetVec4(std::string name, Vec4 value)
78 {
79 shader_->SetUniform(name.c_str(), value);
80 }
81
SetMat2(std::string name,Mat2x2 value)82 void ShaderPassProgram::SetMat2(std::string name, Mat2x2 value)
83 {
84 shader_->SetUniform(name.c_str(), value);
85 }
86
SetMat3(std::string name,Mat3x3 value)87 void ShaderPassProgram::SetMat3(std::string name, Mat3x3 value)
88 {
89 shader_->SetUniform(name.c_str(), value);
90 }
91
SetMat4(std::string name,Mat4x4 value)92 void ShaderPassProgram::SetMat4(std::string name, Mat4x4 value)
93 {
94 shader_->SetUniform(name.c_str(), value);
95 }
96
BindTexture(std::string name,int unitId,int textureId,GLenum target)97 void ShaderPassProgram::BindTexture(std::string name, int unitId, int textureId, GLenum target)
98 {
99 glActiveTexture(GL_TEXTURE0 + unitId);
100 glBindTexture(target, textureId);
101 glUniform1i(GetUniformLocation(name), unitId);
102 }
103
UnBindTexture(int unitId)104 void ShaderPassProgram::UnBindTexture(int unitId)
105 {
106 glActiveTexture(GL_TEXTURE0 + unitId);
107 glBindTexture(GL_TEXTURE_2D, GL_NONE);
108 }
109
GetShader()110 std::shared_ptr<RenderGeneralProgram> ShaderPassProgram::GetShader()
111 {
112 return shader_;
113 }
114 }
115 }