2017-10-21 20:14:35 +00:00
|
|
|
#include "graphics/shaders.h"
|
|
|
|
|
2017-10-21 21:32:41 +00:00
|
|
|
const char* lovrShaderColorUniforms[] = {
|
|
|
|
"lovrDiffuseColor"
|
|
|
|
};
|
|
|
|
|
|
|
|
const char* lovrShaderTextureUniforms[] = {
|
2017-10-21 21:59:34 +00:00
|
|
|
"lovrDiffuseTexture",
|
|
|
|
"lovrEnvironmentTexture"
|
2017-10-21 21:32:41 +00:00
|
|
|
};
|
|
|
|
|
2017-10-21 20:14:35 +00:00
|
|
|
const char* lovrShaderVertexPrefix = ""
|
|
|
|
#ifdef EMSCRIPTEN
|
|
|
|
"#version 300 es \n"
|
|
|
|
"precision mediump float; \n"
|
|
|
|
#else
|
|
|
|
"#version 150 \n"
|
|
|
|
#endif
|
|
|
|
"in vec3 lovrPosition; \n"
|
|
|
|
"in vec3 lovrNormal; \n"
|
|
|
|
"in vec2 lovrTexCoord; \n"
|
2017-10-23 08:33:49 +00:00
|
|
|
"in vec4 lovrVertexColor; \n"
|
2017-10-21 20:14:35 +00:00
|
|
|
"out vec2 texCoord; \n"
|
2017-10-23 08:33:49 +00:00
|
|
|
"out vec4 vertexColor; \n"
|
2017-10-21 20:14:35 +00:00
|
|
|
"uniform mat4 lovrModel; \n"
|
|
|
|
"uniform mat4 lovrView; \n"
|
|
|
|
"uniform mat4 lovrProjection; \n"
|
|
|
|
"uniform mat4 lovrTransform; \n"
|
2017-10-22 22:39:21 +00:00
|
|
|
"uniform mat3 lovrNormalMatrix; \n"
|
2017-10-22 23:14:53 +00:00
|
|
|
"uniform float lovrPointSize; \n"
|
2017-10-22 22:39:21 +00:00
|
|
|
"#line 0 \n";
|
2017-10-21 20:14:35 +00:00
|
|
|
|
|
|
|
const char* lovrShaderFragmentPrefix = ""
|
|
|
|
#ifdef EMSCRIPTEN
|
|
|
|
"#version 300 es \n"
|
|
|
|
"precision mediump float; \n"
|
|
|
|
#else
|
|
|
|
"#version 150 \n"
|
|
|
|
"in vec4 gl_FragCoord; \n"
|
|
|
|
#endif
|
|
|
|
"in vec2 texCoord; \n"
|
2017-10-23 08:33:49 +00:00
|
|
|
"in vec4 vertexColor; \n"
|
2017-10-21 20:14:35 +00:00
|
|
|
"out vec4 lovrFragColor; \n"
|
|
|
|
"uniform vec4 lovrColor; \n"
|
2017-10-21 21:32:41 +00:00
|
|
|
"uniform vec4 lovrDiffuseColor; \n"
|
2017-10-21 21:59:34 +00:00
|
|
|
"uniform sampler2D lovrDiffuseTexture; \n"
|
2017-10-22 22:39:21 +00:00
|
|
|
"uniform samplerCube lovrEnvironmentTexture; \n"
|
|
|
|
"#line 0 \n";
|
2017-10-21 20:14:35 +00:00
|
|
|
|
|
|
|
const char* lovrShaderVertexSuffix = ""
|
|
|
|
"void main() { \n"
|
|
|
|
" texCoord = lovrTexCoord; \n"
|
2017-10-23 08:33:49 +00:00
|
|
|
" vertexColor = lovrVertexColor; \n"
|
2017-10-22 23:14:53 +00:00
|
|
|
" gl_PointSize = lovrPointSize; \n"
|
2017-10-21 20:14:35 +00:00
|
|
|
" gl_Position = position(lovrProjection, lovrTransform, vec4(lovrPosition, 1.0)); \n"
|
|
|
|
"}";
|
|
|
|
|
|
|
|
const char* lovrShaderFragmentSuffix = ""
|
|
|
|
"void main() { \n"
|
2017-10-21 21:32:41 +00:00
|
|
|
" lovrFragColor = color(lovrColor, lovrDiffuseTexture, texCoord); \n"
|
2017-10-21 20:14:35 +00:00
|
|
|
"}";
|
|
|
|
|
|
|
|
const char* lovrDefaultVertexShader = ""
|
|
|
|
"vec4 position(mat4 projection, mat4 transform, vec4 vertex) { \n"
|
|
|
|
" return projection * transform * vertex; \n"
|
|
|
|
"}";
|
|
|
|
|
|
|
|
const char* lovrDefaultFragmentShader = ""
|
|
|
|
"vec4 color(vec4 graphicsColor, sampler2D image, vec2 uv) { \n"
|
2017-10-23 08:33:49 +00:00
|
|
|
" return graphicsColor * lovrDiffuseColor * vertexColor * texture(image, uv); \n"
|
2017-10-21 20:14:35 +00:00
|
|
|
"}";
|
|
|
|
|
|
|
|
const char* lovrSkyboxVertexShader = ""
|
|
|
|
"out vec3 texturePosition; \n"
|
|
|
|
"vec4 position(mat4 projection, mat4 transform, vec4 vertex) { \n"
|
|
|
|
" texturePosition = vertex.xyz; \n"
|
|
|
|
" return projection * transform * vertex; \n"
|
|
|
|
"}";
|
|
|
|
|
|
|
|
const char* lovrSkyboxFragmentShader = ""
|
|
|
|
"in vec3 texturePosition; \n"
|
|
|
|
"vec4 color(vec4 graphicsColor, sampler2D image, vec2 uv) { \n"
|
2017-10-21 21:59:34 +00:00
|
|
|
" return graphicsColor * texture(lovrEnvironmentTexture, texturePosition); \n"
|
2017-10-21 20:14:35 +00:00
|
|
|
"}";
|
|
|
|
|
|
|
|
const char* lovrFontFragmentShader = ""
|
|
|
|
"float median(float r, float g, float b) { \n"
|
|
|
|
" return max(min(r, g), min(max(r, g), b)); \n"
|
|
|
|
"} \n"
|
|
|
|
"vec4 color(vec4 graphicsColor, sampler2D image, vec2 uv) { \n"
|
|
|
|
" vec3 col = texture(image, uv).rgb; \n"
|
|
|
|
" float sdf = median(col.r, col.g, col.b); \n"
|
|
|
|
" float w = fwidth(sdf); \n"
|
|
|
|
" float alpha = smoothstep(.5 - w, .5 + w, sdf); \n"
|
|
|
|
" return vec4(graphicsColor.rgb, graphicsColor.a * alpha); \n"
|
|
|
|
"}";
|
|
|
|
|
|
|
|
const char* lovrNoopVertexShader = ""
|
|
|
|
"vec4 position(mat4 projection, mat4 transform, vec4 vertex) { \n"
|
|
|
|
" return vertex; \n"
|
|
|
|
"}";
|