summaryrefslogtreecommitdiffstats
path: root/services/surfaceflinger/RenderEngine/Program.h
diff options
context:
space:
mode:
authorMathias Agopian <mathias@google.com>2013-08-07 21:24:32 -0700
committerMathias Agopian <mathias@google.com>2013-08-13 16:07:45 -0700
commit3f84483382be2d528918cc1a6fbc6a7d68e0b181 (patch)
tree81de0907cd7d64eea68e50539b82dc9d70c9f793 /services/surfaceflinger/RenderEngine/Program.h
parent5ff5a84e4829bad9eb44cc9a32d8579ca089051b (diff)
downloadframeworks_native-3f84483382be2d528918cc1a6fbc6a7d68e0b181.zip
frameworks_native-3f84483382be2d528918cc1a6fbc6a7d68e0b181.tar.gz
frameworks_native-3f84483382be2d528918cc1a6fbc6a7d68e0b181.tar.bz2
SurfaceFlinger now uses GLES 2.x when available
Bug: 8679321 Change-Id: I2b152d01fb4e2de2ea9fe87f1ddbd6826d7520d7
Diffstat (limited to 'services/surfaceflinger/RenderEngine/Program.h')
-rw-r--r--services/surfaceflinger/RenderEngine/Program.h89
1 files changed, 89 insertions, 0 deletions
diff --git a/services/surfaceflinger/RenderEngine/Program.h b/services/surfaceflinger/RenderEngine/Program.h
new file mode 100644
index 0000000..91bb3db
--- /dev/null
+++ b/services/surfaceflinger/RenderEngine/Program.h
@@ -0,0 +1,89 @@
+/*
+ * Copyright 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef SF_RENDER_ENGINE_PROGRAM_H
+#define SF_RENDER_ENGINE_PROGRAM_H
+
+#include <stdint.h>
+
+#include <GLES2/gl2.h>
+
+#include "Description.h"
+#include "ProgramCache.h"
+
+namespace android {
+
+class String8;
+
+/*
+ * Abstracts a GLSL program comprising a vertex and fragment shader
+ */
+class Program {
+public:
+ // known locations for position and texture coordinates
+ enum { position=0, texCoords=1 };
+
+ Program(const ProgramCache::Key& needs, const char* vertex, const char* fragment);
+ ~Program();
+
+ /* whether this object is usable */
+ bool isValid() const;
+
+ /* Binds this program to the GLES context */
+ void use();
+
+ /* Returns the location of the specified attribute */
+ GLuint getAttrib(const char* name) const;
+
+ /* Returns the location of the specified uniform */
+ GLint getUniform(const char* name) const;
+
+ /* set-up uniforms from the description */
+ void setUniforms(const Description& desc);
+
+
+private:
+ GLuint buildShader(const char* source, GLenum type);
+ String8& dumpShader(String8& result, GLenum type);
+
+ // whether the initialization succeeded
+ bool mInitialized;
+
+ // Name of the OpenGL program and shaders
+ GLuint mProgram;
+ GLuint mVertexShader;
+ GLuint mFragmentShader;
+
+ /* location of the projection matrix uniform */
+ GLint mProjectionMatrixLoc;
+
+ /* location of the texture matrix uniform */
+ GLint mTextureMatrixLoc;
+
+ /* location of the sampler uniform */
+ GLint mSamplerLoc;
+
+ /* location of the alpha plane uniform */
+ GLint mAlphaPlaneLoc;
+
+ /* location of the color uniform */
+ GLint mColorLoc;
+};
+
+
+} /* namespace android */
+
+#endif /* SF_RENDER_ENGINE_PROGRAM_H */