#ifndef SAMPLE_UTIL_SHADER_UTILS_H
#define SAMPLE_UTIL_SHADER_UTILS_H
#include <functional>
#include <map>
#include <string>
#include <vector>
#include "common/angleutils.h"
#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<std::string> &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<void(GLuint)> &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<uint8_t> &binary,
GLenum binaryFormat);
ANGLE_UTIL_EXPORT GLuint LoadBinaryProgramES3(const std::vector<uint8_t> &binary,
GLenum binaryFormat);
ANGLE_UTIL_EXPORT void EnableDebugCallback(GLDEBUGPROC callbackChain, const void *userParam);
CounterNameToIndexMap;
CounterNameToValueMap;
ANGLE_UTIL_EXPORT CounterNameToIndexMap BuildCounterNameToIndexMap();
ANGLE_UTIL_EXPORT angle::VulkanPerfCounters GetPerfCounters(const CounterNameToIndexMap &indexMap);
ANGLE_UTIL_EXPORT CounterNameToValueMap BuildCounterNameToValueMap();
ANGLE_UTIL_EXPORT std::vector<angle::PerfMonitorTriplet> GetPerfMonitorTriplets();
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
{
ANGLE_UTIL_EXPORT const char *Zero();
ANGLE_UTIL_EXPORT const char *Simple();
ANGLE_UTIL_EXPORT const char *SimpleForPoints();
ANGLE_UTIL_EXPORT const char *Passthrough();
ANGLE_UTIL_EXPORT const char *Texture2D();
ANGLE_UTIL_EXPORT const char *Texture2DArray();
}
namespace fs
{
ANGLE_UTIL_EXPORT const char *Checkered();
ANGLE_UTIL_EXPORT const char *UniformColor();
ANGLE_UTIL_EXPORT const char *Red();
ANGLE_UTIL_EXPORT const char *Green();
ANGLE_UTIL_EXPORT const char *Blue();
ANGLE_UTIL_EXPORT const char *Texture2D();
ANGLE_UTIL_EXPORT const char *Texture2DArray();
}
}
namespace essl3_shaders
{
ANGLE_UTIL_EXPORT const char *PositionAttrib();
ANGLE_UTIL_EXPORT const char *Texture2DUniform();
ANGLE_UTIL_EXPORT const char *LodUniform();
namespace vs
{
ANGLE_UTIL_EXPORT const char *Zero();
ANGLE_UTIL_EXPORT const char *Simple();
ANGLE_UTIL_EXPORT const char *SimpleForPoints();
ANGLE_UTIL_EXPORT const char *Passthrough();
ANGLE_UTIL_EXPORT const char *Texture2DLod();
}
namespace fs
{
ANGLE_UTIL_EXPORT const char *Red();
ANGLE_UTIL_EXPORT const char *Green();
ANGLE_UTIL_EXPORT const char *Blue();
ANGLE_UTIL_EXPORT const char *Texture2DLod();
}
}
namespace essl31_shaders
{
ANGLE_UTIL_EXPORT const char *PositionAttrib();
namespace vs
{
ANGLE_UTIL_EXPORT const char *Zero();
ANGLE_UTIL_EXPORT const char *Simple();
ANGLE_UTIL_EXPORT const char *Passthrough();
}
namespace fs
{
ANGLE_UTIL_EXPORT const char *Red();
ANGLE_UTIL_EXPORT const char *Green();
ANGLE_UTIL_EXPORT const char *RedGreenGradient();
}
}
}
#endif