// // Copyright 2014 The ANGLE Project Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // #ifndef SAMPLE_UTIL_SHADER_UTILS_H #define SAMPLE_UTIL_SHADER_UTILS_H #include #include #include #include "util/util_export.h" #include "util/util_gl.h" ANGLE_UTIL_EXPORT GLuint CheckLinkStatusAndReturnProgram(GLuint program, bool outputErrorMessages); ANGLE_UTIL_EXPORT GLuint GetProgramShader(GLuint program, GLint requestedType); ANGLE_UTIL_EXPORT GLuint CompileShader(GLenum type, const char *source); ANGLE_UTIL_EXPORT GLuint CompileShaderFromFile(GLenum type, const std::string &sourcePath); ANGLE_UTIL_EXPORT GLuint CompileProgramWithTransformFeedback(const char *vsSource, const char *fsSource, const std::vector &transformFeedbackVaryings, GLenum bufferMode); ANGLE_UTIL_EXPORT GLuint CompileProgram(const char *vsSource, const char *fsSource); ANGLE_UTIL_EXPORT GLuint CompileProgram(const char *vsSource, const char *fsSource, const std::function &preLinkCallback); ANGLE_UTIL_EXPORT GLuint CompileProgramWithGS(const char *vsSource, const char *gsSource, const char *fsSource); ANGLE_UTIL_EXPORT GLuint CompileProgramWithTESS(const char *vsSource, const char *tcsSource, const char *tesSource, const char *fsSource); ANGLE_UTIL_EXPORT GLuint CompileProgramFromFiles(const std::string &vsPath, const std::string &fsPath); ANGLE_UTIL_EXPORT GLuint CompileComputeProgram(const char *csSource, bool outputErrorMessages = true); ANGLE_UTIL_EXPORT bool LinkAttachedProgram(GLuint program); ANGLE_UTIL_EXPORT GLuint LoadBinaryProgramOES(const std::vector &binary, GLenum binaryFormat); ANGLE_UTIL_EXPORT GLuint LoadBinaryProgramES3(const std::vector &binary, GLenum binaryFormat); ANGLE_UTIL_EXPORT void EnableDebugCallback(GLDEBUGPROC callbackChain, const void *userParam); namespace angle { namespace essl1_shaders { ANGLE_UTIL_EXPORT const char *PositionAttrib(); ANGLE_UTIL_EXPORT const char *ColorUniform(); ANGLE_UTIL_EXPORT const char *Texture2DUniform(); namespace vs { // A shader that sets gl_Position to zero. ANGLE_UTIL_EXPORT const char *Zero(); // A shader that sets gl_Position to attribute a_position. ANGLE_UTIL_EXPORT const char *Simple(); // A shader that passes through attribute a_position, setting it to gl_Position and varying // v_position. ANGLE_UTIL_EXPORT const char *Passthrough(); // A shader that simply passes through attribute a_position, setting it to gl_Position and varying // texcoord. ANGLE_UTIL_EXPORT const char *Texture2D(); } // namespace vs namespace fs { // A shader that renders a simple checker pattern of different colors. X axis and Y axis separate // the different colors. Needs varying v_position. // // - X < 0 && y < 0: Red // - X < 0 && y >= 0: Green // - X >= 0 && y < 0: Blue // - X >= 0 && y >= 0: Yellow ANGLE_UTIL_EXPORT const char *Checkered(); // A shader that fills with color taken from uniform named "color". ANGLE_UTIL_EXPORT const char *UniformColor(); // A shader that fills with 100% opaque red. ANGLE_UTIL_EXPORT const char *Red(); // A shader that fills with 100% opaque green. ANGLE_UTIL_EXPORT const char *Green(); // A shader that fills with 100% opaque blue. ANGLE_UTIL_EXPORT const char *Blue(); // A shader that samples the texture ANGLE_UTIL_EXPORT const char *Texture2D(); } // namespace fs } // namespace essl1_shaders namespace essl3_shaders { ANGLE_UTIL_EXPORT const char *PositionAttrib(); ANGLE_UTIL_EXPORT const char *Texture2DUniform(); ANGLE_UTIL_EXPORT const char *LodUniform(); namespace vs { // A shader that sets gl_Position to zero. ANGLE_UTIL_EXPORT const char *Zero(); // A shader that sets gl_Position to attribute a_position. ANGLE_UTIL_EXPORT const char *Simple(); // A shader that simply passes through attribute a_position, setting it to gl_Position and varying // v_position. ANGLE_UTIL_EXPORT const char *Passthrough(); // A shader that simply passes through attribute a_position, setting it to gl_Position and varying // texcoord. ANGLE_UTIL_EXPORT const char *Texture2DLod(); } // namespace vs namespace fs { // A shader that fills with 100% opaque red. ANGLE_UTIL_EXPORT const char *Red(); // A shader that fills with 100% opaque green. ANGLE_UTIL_EXPORT const char *Green(); // A shader that fills with 100% opaque blue. ANGLE_UTIL_EXPORT const char *Blue(); // A shader that samples the texture at a given lod. ANGLE_UTIL_EXPORT const char *Texture2DLod(); } // namespace fs } // namespace essl3_shaders namespace essl31_shaders { ANGLE_UTIL_EXPORT const char *PositionAttrib(); namespace vs { // A shader that sets gl_Position to zero. ANGLE_UTIL_EXPORT const char *Zero(); // A shader that sets gl_Position to attribute a_position. ANGLE_UTIL_EXPORT const char *Simple(); // A shader that simply passes through attribute a_position, setting it to gl_Position and varying // v_position. ANGLE_UTIL_EXPORT const char *Passthrough(); } // namespace vs namespace fs { // A shader that fills with 100% opaque red. ANGLE_UTIL_EXPORT const char *Red(); // A shader that fills with 100% opaque green. ANGLE_UTIL_EXPORT const char *Green(); // A shader that renders a simple gradient of red to green. Needs varying v_position. ANGLE_UTIL_EXPORT const char *RedGreenGradient(); } // namespace fs } // namespace essl31_shaders } // namespace angle #endif // SAMPLE_UTIL_SHADER_UTILS_H