Browse Source

Make use of threaded shader compilation in MeshGLTest.

pull/59/head
Vladimír Vondruš 12 years ago
parent
commit
764d2fe400
  1. 57
      src/Magnum/Test/MeshGLTest.cpp

57
src/Magnum/Test/MeshGLTest.cpp

@ -326,10 +326,13 @@ FloatShader::FloatShader(const std::string& type, const std::string& conversion)
rectangle matrices */
#ifndef MAGNUM_TARGET_GLES
Shader vert(Version::GL210, Shader::Type::Vertex);
Shader frag(Version::GL210, Shader::Type::Fragment);
#elif defined(MAGNUM_TARGET_GLES2)
Shader vert(Version::GLES200, Shader::Type::Vertex);
Shader frag(Version::GLES200, Shader::Type::Fragment);
#else
Shader vert(Version::GLES300, Shader::Type::Vertex);
Shader frag(Version::GLES300, Shader::Type::Fragment);
#endif
vert.addSource(
@ -344,16 +347,6 @@ FloatShader::FloatShader(const std::string& type, const std::string& conversion)
" valueInterpolated = value;\n"
" gl_Position = vec4(0.0, 0.0, 0.0, 1.0);\n"
"}\n");
CORRADE_INTERNAL_ASSERT_OUTPUT(vert.compile());
attachShader(vert);
#ifndef MAGNUM_TARGET_GLES
Shader frag(Version::GL210, Shader::Type::Fragment);
#elif defined(MAGNUM_TARGET_GLES2)
Shader frag(Version::GLES200, Shader::Type::Fragment);
#else
Shader frag(Version::GLES300, Shader::Type::Fragment);
#endif
#ifndef MAGNUM_TARGET_GLES3
frag.addSource("varying mediump " + type + " valueInterpolated;\n"
@ -363,7 +356,9 @@ FloatShader::FloatShader(const std::string& type, const std::string& conversion)
"out mediump vec4 result;\n"
"void main() { result = " + conversion + "; }\n");
#endif
CORRADE_INTERNAL_ASSERT_OUTPUT(frag.compile());
CORRADE_INTERNAL_ASSERT_OUTPUT(Shader::compile({vert, frag}));
attachShader(vert);
attachShader(frag);
bindAttributeLocation(0, "value");
@ -375,27 +370,24 @@ FloatShader::FloatShader(const std::string& type, const std::string& conversion)
IntegerShader::IntegerShader(const std::string& type) {
#ifndef MAGNUM_TARGET_GLES
Shader vert(Version::GL300, Shader::Type::Vertex);
Shader frag(Version::GL300, Shader::Type::Fragment);
#else
Shader vert(Version::GLES300, Shader::Type::Vertex);
Shader frag(Version::GLES300, Shader::Type::Fragment);
#endif
vert.addSource("in mediump " + type + " value;\n"
"flat out mediump " + type + " valueInterpolated;\n"
"void main() {\n"
" valueInterpolated = value;\n"
" gl_Position = vec4(0.0, 0.0, 0.0, 1.0);\n"
"}\n");
CORRADE_INTERNAL_ASSERT_OUTPUT(vert.compile());
attachShader(vert);
#ifndef MAGNUM_TARGET_GLES
Shader frag(Version::GL300, Shader::Type::Fragment);
#else
Shader frag(Version::GLES300, Shader::Type::Fragment);
#endif
frag.addSource("flat in mediump " + type + " valueInterpolated;\n"
"out mediump " + type + " result;\n"
"void main() { result = valueInterpolated; }\n");
CORRADE_INTERNAL_ASSERT_OUTPUT(frag.compile());
CORRADE_INTERNAL_ASSERT_OUTPUT(Shader::compile({vert, frag}));
attachShader(vert);
attachShader(frag);
bindAttributeLocation(0, "value");
@ -407,20 +399,20 @@ IntegerShader::IntegerShader(const std::string& type) {
#ifndef MAGNUM_TARGET_GLES
DoubleShader::DoubleShader(const std::string& type, const std::string& outputType, const std::string& conversion) {
Shader vert(Version::GL410, Shader::Type::Vertex);
Shader frag(Version::GL410, Shader::Type::Fragment);
vert.addSource("in " + type + " value;\n"
"out " + outputType + " valueInterpolated;\n"
"void main() {\n"
" valueInterpolated = " + conversion + ";\n"
" gl_Position = vec4(0.0, 0.0, 0.0, 1.0);\n"
"}\n");
CORRADE_INTERNAL_ASSERT_OUTPUT(vert.compile());
attachShader(vert);
Shader frag(Version::GL410, Shader::Type::Fragment);
frag.addSource("in " + outputType + " valueInterpolated;\n"
"out " + outputType + " result;\n"
"void main() { result = valueInterpolated; }\n");
CORRADE_INTERNAL_ASSERT_OUTPUT(frag.compile());
CORRADE_INTERNAL_ASSERT_OUTPUT(Shader::compile({vert, frag}));
attachShader(vert);
attachShader(frag);
bindAttributeLocation(0, "value");
@ -1037,8 +1029,10 @@ namespace {
MultipleShader::MultipleShader() {
#ifndef MAGNUM_TARGET_GLES
Shader vert(Version::GL210, Shader::Type::Vertex);
Shader frag(Version::GL210, Shader::Type::Fragment);
#else
Shader vert(Version::GLES200, Shader::Type::Vertex);
Shader frag(Version::GLES200, Shader::Type::Fragment);
#endif
vert.addSource("attribute mediump vec4 position;\n"
@ -1049,18 +1043,11 @@ MultipleShader::MultipleShader() {
" valueInterpolated = position + vec4(normal, 0.0) + vec4(textureCoordinates, 0.0, 0.0);\n"
" gl_Position = vec4(0.0, 0.0, 0.0, 1.0);\n"
"}\n");
CORRADE_INTERNAL_ASSERT_OUTPUT(vert.compile());
attachShader(vert);
#ifndef MAGNUM_TARGET_GLES
Shader frag(Version::GL210, Shader::Type::Fragment);
#else
Shader frag(Version::GLES200, Shader::Type::Fragment);
#endif
frag.addSource("varying mediump vec4 valueInterpolated;\n"
"void main() { gl_FragColor = valueInterpolated; }\n");
CORRADE_INTERNAL_ASSERT_OUTPUT(frag.compile());
CORRADE_INTERNAL_ASSERT_OUTPUT(Shader::compile({vert, frag}));
attachShader(vert);
attachShader(frag);
bindAttributeLocation(Position::Location, "position");

Loading…
Cancel
Save