blob: fca921bcc8590dcaba740ea8c7d4c40e73ab04d0 [file] [log] [blame]
Geoff Lang49be2ad2014-02-28 13:05:51 -05001//
2// Copyright (c) 2014 The ANGLE Project Authors. All rights reserved.
3// Use of this source code is governed by a BSD-style license that can be
4// found in the LICENSE file.
5//
6
7#ifndef SAMPLE_UTIL_SHADER_UTILS_H
8#define SAMPLE_UTIL_SHADER_UTILS_H
9
Yuly Novikove3352f92016-08-12 20:40:14 -040010#include <export.h>
Martin Radev4c4c8e72016-08-04 12:25:34 +030011#include <GLES3/gl31.h>
Geoff Lang49be2ad2014-02-28 13:05:51 -050012#include <GLES3/gl3.h>
Geoff Lang49be2ad2014-02-28 13:05:51 -050013#include <GLES2/gl2.h>
14#include <GLES2/gl2ext.h>
15#include <EGL/egl.h>
16#include <EGL/eglext.h>
17
18#include <string>
Jamie Madillca03b352015-09-02 12:38:13 -040019#include <vector>
Geoff Lang49be2ad2014-02-28 13:05:51 -050020
Yuly Novikove3352f92016-08-12 20:40:14 -040021ANGLE_EXPORT GLuint CompileShader(GLenum type, const std::string &source);
22ANGLE_EXPORT GLuint CompileShaderFromFile(GLenum type, const std::string &sourcePath);
Geoff Lang712e3f42014-03-03 11:14:15 -050023
Yuly Novikove3352f92016-08-12 20:40:14 -040024ANGLE_EXPORT GLuint
25CompileProgramWithTransformFeedback(const std::string &vsSource,
26 const std::string &fsSource,
27 const std::vector<std::string> &transformFeedbackVaryings,
28 GLenum bufferMode);
Jiawei Shao4ed05da2018-02-02 14:26:15 +080029ANGLE_EXPORT GLuint
30CompileProgramWithGSAndTransformFeedback(const std::string &vsSource,
31 const std::string &gsSource,
32 const std::string &fsSource,
33 const std::vector<std::string> &transformFeedbackVaryings,
34 GLenum bufferMode);
Yuly Novikove3352f92016-08-12 20:40:14 -040035ANGLE_EXPORT GLuint CompileProgram(const std::string &vsSource, const std::string &fsSource);
Jiawei Shao4ed05da2018-02-02 14:26:15 +080036ANGLE_EXPORT GLuint CompileProgramWithGS(const std::string &vsSource,
37 const std::string &gsSource,
38 const std::string &fsSource);
Yuly Novikove3352f92016-08-12 20:40:14 -040039ANGLE_EXPORT GLuint CompileProgramFromFiles(const std::string &vsPath, const std::string &fsPath);
40ANGLE_EXPORT GLuint CompileComputeProgram(const std::string &csSource,
41 bool outputErrorMessages = true);
Jamie Madill401345e2017-08-21 10:52:40 -040042ANGLE_EXPORT bool LinkAttachedProgram(GLuint program);
Yuly Novikove3352f92016-08-12 20:40:14 -040043
Jamie Madilla7d12dc2016-12-13 15:08:19 -050044ANGLE_EXPORT GLuint LoadBinaryProgramOES(const std::vector<uint8_t> &binary, GLenum binaryFormat);
45ANGLE_EXPORT GLuint LoadBinaryProgramES3(const std::vector<uint8_t> &binary, GLenum binaryFormat);
46
Olli Etuaho5804dc82018-04-13 14:11:46 +030047namespace angle
48{
49
50namespace essl1_shaders
51{
52
53ANGLE_EXPORT const char *PositionAttrib();
54ANGLE_EXPORT const char *ColorUniform();
55
56namespace vs
57{
58
59// A shader that sets gl_Position to zero.
60ANGLE_EXPORT const char *Zero();
61
62// A shader that sets gl_Position to attribute a_position.
63ANGLE_EXPORT const char *Simple();
64
65// A shader that passes through attribute a_position, setting it to gl_Position and varying
66// v_position.
67ANGLE_EXPORT const char *Passthrough();
68
69} // namespace vs
70
71namespace fs
72{
73
74// A shader that renders a simple checker pattern of red and green. X axis and y axis separate the
75// different colors. Needs varying v_position.
76ANGLE_EXPORT const char *Checkered();
77
78// A shader that fills with color taken from uniform named "color".
79ANGLE_EXPORT const char *UniformColor();
80
81// A shader that fills with 100% opaque red.
82ANGLE_EXPORT const char *Red();
83
84// A shader that fills with 100% opaque blue.
85ANGLE_EXPORT const char *Blue();
86
87} // namespace fs
88} // namespace essl1_shaders
89
90namespace essl3_shaders
91{
92
93ANGLE_EXPORT const char *PositionAttrib();
94
95namespace vs
96{
97
98// A shader that sets gl_Position to zero.
99ANGLE_EXPORT const char *Zero();
100
101// A shader that sets gl_Position to attribute a_position.
102ANGLE_EXPORT const char *Simple();
103
104} // namespace vs
105
106namespace fs
107{
108
109// A shader that fills with 100% opaque red.
110ANGLE_EXPORT const char *Red();
111
112} // namespace fs
113} // namespace essl3_shaders
114
115namespace essl31_shaders
116{
117
118ANGLE_EXPORT const char *PositionAttrib();
119
120namespace vs
121{
122
123// A shader that sets gl_Position to zero.
124ANGLE_EXPORT const char *Zero();
125
126// A shader that sets gl_Position to attribute a_position.
127ANGLE_EXPORT const char *Simple();
128
129} // namespace vs
130
131namespace fs
132{
133
134// A shader that fills with 100% opaque red.
135ANGLE_EXPORT const char *Red();
136
137} // namespace fs
138} // namespace essl31_shaders
139} // namespace angle
140
Geoff Lang49be2ad2014-02-28 13:05:51 -0500141#endif // SAMPLE_UTIL_SHADER_UTILS_H