|
|
|
@ -384,8 +384,20 @@ FloatShader::FloatShader(const std::string& type, const std::string& conversion) |
|
|
|
/* We need special version for ES3, because GLSL in ES2 doesn't support
|
|
|
|
/* We need special version for ES3, because GLSL in ES2 doesn't support
|
|
|
|
rectangle matrices */ |
|
|
|
rectangle matrices */ |
|
|
|
#ifndef MAGNUM_TARGET_GLES |
|
|
|
#ifndef MAGNUM_TARGET_GLES |
|
|
|
Shader vert(Version::GL210, Shader::Type::Vertex); |
|
|
|
Shader vert( |
|
|
|
Shader frag(Version::GL210, Shader::Type::Fragment); |
|
|
|
#ifndef CORRADE_TARGET_APPLE |
|
|
|
|
|
|
|
Version::GL210 |
|
|
|
|
|
|
|
#else |
|
|
|
|
|
|
|
Version::GL310 |
|
|
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
, Shader::Type::Vertex); |
|
|
|
|
|
|
|
Shader frag( |
|
|
|
|
|
|
|
#ifndef CORRADE_TARGET_APPLE |
|
|
|
|
|
|
|
Version::GL210 |
|
|
|
|
|
|
|
#else |
|
|
|
|
|
|
|
Version::GL310 |
|
|
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
, Shader::Type::Fragment); |
|
|
|
#elif defined(MAGNUM_TARGET_GLES2) |
|
|
|
#elif defined(MAGNUM_TARGET_GLES2) |
|
|
|
Shader vert(Version::GLES200, Shader::Type::Vertex); |
|
|
|
Shader vert(Version::GLES200, Shader::Type::Vertex); |
|
|
|
Shader frag(Version::GLES200, Shader::Type::Fragment); |
|
|
|
Shader frag(Version::GLES200, Shader::Type::Fragment); |
|
|
|
@ -395,32 +407,32 @@ FloatShader::FloatShader(const std::string& type, const std::string& conversion) |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
vert.addSource( |
|
|
|
vert.addSource( |
|
|
|
#if !defined(MAGNUM_TARGET_GLES) || defined(MAGNUM_TARGET_GLES2) |
|
|
|
|
|
|
|
"#if !defined(GL_ES) && __VERSION__ == 120\n" |
|
|
|
"#if !defined(GL_ES) && __VERSION__ == 120\n" |
|
|
|
"#define mediump\n" |
|
|
|
"#define mediump\n" |
|
|
|
"#endif\n" |
|
|
|
"#endif\n" |
|
|
|
"attribute mediump " + type + " value;\n" |
|
|
|
"#if defined(GL_ES) || __VERSION__ == 120\n" |
|
|
|
"varying mediump " + type + " valueInterpolated;\n" |
|
|
|
"#define in attribute\n" |
|
|
|
#else |
|
|
|
"#define out varying\n" |
|
|
|
|
|
|
|
"#endif\n" |
|
|
|
"in mediump " + type + " value;\n" |
|
|
|
"in mediump " + type + " value;\n" |
|
|
|
"out mediump " + type + " valueInterpolated;\n" |
|
|
|
"out mediump " + type + " valueInterpolated;\n" |
|
|
|
#endif |
|
|
|
|
|
|
|
"void main() {\n" |
|
|
|
"void main() {\n" |
|
|
|
" valueInterpolated = value;\n" |
|
|
|
" valueInterpolated = value;\n" |
|
|
|
" gl_Position = vec4(0.0, 0.0, 0.0, 1.0);\n" |
|
|
|
" gl_Position = vec4(0.0, 0.0, 0.0, 1.0);\n" |
|
|
|
"}\n"); |
|
|
|
"}\n"); |
|
|
|
|
|
|
|
frag.addSource( |
|
|
|
#if !defined(MAGNUM_TARGET_GLES) || defined(MAGNUM_TARGET_GLES2) |
|
|
|
"#if !defined(GL_ES) && __VERSION__ == 120\n" |
|
|
|
frag.addSource("#if !defined(GL_ES) && __VERSION__ == 120\n" |
|
|
|
"#define mediump\n" |
|
|
|
"#define mediump\n" |
|
|
|
"#endif\n" |
|
|
|
"#endif\n" |
|
|
|
"#if defined(GL_ES) || __VERSION__ == 120\n" |
|
|
|
"varying mediump " + type + " valueInterpolated;\n" |
|
|
|
"#define in varying\n" |
|
|
|
"void main() { gl_FragColor = " + conversion + "; }\n"); |
|
|
|
"#define result gl_FragColor\n" |
|
|
|
#else |
|
|
|
"#endif\n" |
|
|
|
frag.addSource("in mediump " + type + " valueInterpolated;\n" |
|
|
|
"in mediump " + type + " valueInterpolated;\n" |
|
|
|
"out mediump vec4 result;\n" |
|
|
|
"#if !defined(GL_ES) && __VERSION__ >= 130\n" |
|
|
|
"void main() { result = " + conversion + "; }\n"); |
|
|
|
"out mediump vec4 result;\n" |
|
|
|
#endif |
|
|
|
"#endif\n" |
|
|
|
|
|
|
|
"void main() { result = " + conversion + "; }\n"); |
|
|
|
|
|
|
|
|
|
|
|
CORRADE_INTERNAL_ASSERT_OUTPUT(Shader::compile({vert, frag})); |
|
|
|
CORRADE_INTERNAL_ASSERT_OUTPUT(Shader::compile({vert, frag})); |
|
|
|
|
|
|
|
|
|
|
|
@ -434,8 +446,20 @@ FloatShader::FloatShader(const std::string& type, const std::string& conversion) |
|
|
|
#ifndef MAGNUM_TARGET_GLES2 |
|
|
|
#ifndef MAGNUM_TARGET_GLES2 |
|
|
|
IntegerShader::IntegerShader(const std::string& type) { |
|
|
|
IntegerShader::IntegerShader(const std::string& type) { |
|
|
|
#ifndef MAGNUM_TARGET_GLES |
|
|
|
#ifndef MAGNUM_TARGET_GLES |
|
|
|
Shader vert(Version::GL300, Shader::Type::Vertex); |
|
|
|
Shader vert( |
|
|
|
Shader frag(Version::GL300, Shader::Type::Fragment); |
|
|
|
#ifndef CORRADE_TARGET_APPLE |
|
|
|
|
|
|
|
Version::GL300 |
|
|
|
|
|
|
|
#else |
|
|
|
|
|
|
|
Version::GL310 |
|
|
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
, Shader::Type::Vertex); |
|
|
|
|
|
|
|
Shader frag( |
|
|
|
|
|
|
|
#ifndef CORRADE_TARGET_APPLE |
|
|
|
|
|
|
|
Version::GL300 |
|
|
|
|
|
|
|
#else |
|
|
|
|
|
|
|
Version::GL310 |
|
|
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
, Shader::Type::Fragment); |
|
|
|
#else |
|
|
|
#else |
|
|
|
Shader vert(Version::GLES300, Shader::Type::Vertex); |
|
|
|
Shader vert(Version::GLES300, Shader::Type::Vertex); |
|
|
|
Shader frag(Version::GLES300, Shader::Type::Fragment); |
|
|
|
Shader frag(Version::GLES300, Shader::Type::Fragment); |
|
|
|
@ -1144,29 +1168,54 @@ namespace { |
|
|
|
#ifndef DOXYGEN_GENERATING_OUTPUT |
|
|
|
#ifndef DOXYGEN_GENERATING_OUTPUT |
|
|
|
MultipleShader::MultipleShader() { |
|
|
|
MultipleShader::MultipleShader() { |
|
|
|
#ifndef MAGNUM_TARGET_GLES |
|
|
|
#ifndef MAGNUM_TARGET_GLES |
|
|
|
Shader vert(Version::GL210, Shader::Type::Vertex); |
|
|
|
Shader vert( |
|
|
|
Shader frag(Version::GL210, Shader::Type::Fragment); |
|
|
|
#ifndef CORRADE_TARGET_APPLE |
|
|
|
|
|
|
|
Version::GL210 |
|
|
|
|
|
|
|
#else |
|
|
|
|
|
|
|
Version::GL310 |
|
|
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
, Shader::Type::Vertex); |
|
|
|
|
|
|
|
Shader frag( |
|
|
|
|
|
|
|
#ifndef CORRADE_TARGET_APPLE |
|
|
|
|
|
|
|
Version::GL210 |
|
|
|
|
|
|
|
#else |
|
|
|
|
|
|
|
Version::GL310 |
|
|
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
, Shader::Type::Fragment); |
|
|
|
#else |
|
|
|
#else |
|
|
|
Shader vert(Version::GLES200, Shader::Type::Vertex); |
|
|
|
Shader vert(Version::GLES200, Shader::Type::Vertex); |
|
|
|
Shader frag(Version::GLES200, Shader::Type::Fragment); |
|
|
|
Shader frag(Version::GLES200, Shader::Type::Fragment); |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
vert.addSource("#if !defined(GL_ES) && __VERSION__ == 120\n" |
|
|
|
vert.addSource( |
|
|
|
"#define mediump\n" |
|
|
|
"#if !defined(GL_ES) && __VERSION__ == 120\n" |
|
|
|
"#endif\n" |
|
|
|
"#define mediump\n" |
|
|
|
"attribute mediump vec4 position;\n" |
|
|
|
"#endif\n" |
|
|
|
"attribute mediump vec3 normal;\n" |
|
|
|
"#if defined(GL_ES) || __VERSION__ == 120\n" |
|
|
|
"attribute mediump vec2 textureCoordinates;\n" |
|
|
|
"#define in attribute\n" |
|
|
|
"varying mediump vec4 valueInterpolated;\n" |
|
|
|
"#define out varying\n" |
|
|
|
"void main() {\n" |
|
|
|
"#endif\n" |
|
|
|
" valueInterpolated = position + vec4(normal, 0.0) + vec4(textureCoordinates, 0.0, 0.0);\n" |
|
|
|
"in mediump vec4 position;\n" |
|
|
|
" gl_Position = vec4(0.0, 0.0, 0.0, 1.0);\n" |
|
|
|
"in mediump vec3 normal;\n" |
|
|
|
"}\n"); |
|
|
|
"in mediump vec2 textureCoordinates;\n" |
|
|
|
frag.addSource("#if !defined(GL_ES) && __VERSION__ == 120\n" |
|
|
|
"out mediump vec4 valueInterpolated;\n" |
|
|
|
"#define mediump\n" |
|
|
|
"void main() {\n" |
|
|
|
"#endif\n" |
|
|
|
" valueInterpolated = position + vec4(normal, 0.0) + vec4(textureCoordinates, 0.0, 0.0);\n" |
|
|
|
"varying mediump vec4 valueInterpolated;\n" |
|
|
|
" gl_Position = vec4(0.0, 0.0, 0.0, 1.0);\n" |
|
|
|
"void main() { gl_FragColor = valueInterpolated; }\n"); |
|
|
|
"}\n"); |
|
|
|
|
|
|
|
frag.addSource( |
|
|
|
|
|
|
|
"#if !defined(GL_ES) && __VERSION__ == 120\n" |
|
|
|
|
|
|
|
"#define mediump\n" |
|
|
|
|
|
|
|
"#endif\n" |
|
|
|
|
|
|
|
"#if defined(GL_ES) || __VERSION__ == 120\n" |
|
|
|
|
|
|
|
"#define in varying\n" |
|
|
|
|
|
|
|
"#define result gl_FragColor\n" |
|
|
|
|
|
|
|
"#endif\n" |
|
|
|
|
|
|
|
"in mediump vec4 valueInterpolated;\n" |
|
|
|
|
|
|
|
"#if !defined(GL_ES) && __VERSION__ >= 130\n" |
|
|
|
|
|
|
|
"out mediump vec4 result;\n" |
|
|
|
|
|
|
|
"#endif\n" |
|
|
|
|
|
|
|
"void main() { result = valueInterpolated; }\n"); |
|
|
|
|
|
|
|
|
|
|
|
CORRADE_INTERNAL_ASSERT_OUTPUT(Shader::compile({vert, frag})); |
|
|
|
CORRADE_INTERNAL_ASSERT_OUTPUT(Shader::compile({vert, frag})); |
|
|
|
|
|
|
|
|
|
|
|
|