// // Copyright (c) 2015 The ANGLE Project Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // // ShCompile_test.cpp // Test the sh::Compile interface with different parameters. // #include "angle_gl.h" #include "gtest/gtest.h" #include "GLSLANG/ShaderLang.h" class ShCompileTest : public testing::Test { public: ShCompileTest() {} protected: void SetUp() override { sh::InitBuiltInResources(&mResources); mCompiler = sh::ConstructCompiler(GL_FRAGMENT_SHADER, SH_WEBGL_SPEC, SH_GLSL_COMPATIBILITY_OUTPUT, &mResources); ASSERT_TRUE(mCompiler != nullptr) << "Compiler could not be constructed."; } void TearDown() override { if (mCompiler) { sh::Destruct(mCompiler); mCompiler = nullptr; } } void testCompile(const char **shaderStrings, int stringCount, bool expectation) { bool success = sh::Compile(mCompiler, shaderStrings, stringCount, 0); const std::string &compileLog = sh::GetInfoLog(mCompiler); EXPECT_EQ(expectation, success) << compileLog; } private: ShBuiltInResources mResources; ShHandle mCompiler; }; // Test calling sh::Compile with more than one shader source string. TEST_F(ShCompileTest, MultipleShaderStrings) { const std::string &shaderString1 = "precision mediump float;\n" "void main() {\n"; const std::string &shaderString2 = " gl_FragColor = vec4(0.0);\n" "}"; const char *shaderStrings[] = {shaderString1.c_str(), shaderString2.c_str()}; testCompile(shaderStrings, 2, true); } // Test calling sh::Compile with a tokens split into different shader source strings. TEST_F(ShCompileTest, TokensSplitInShaderStrings) { const std::string &shaderString1 = "precision mediump float;\n" "void ma"; const std::string &shaderString2 = "in() {\n" "#i"; const std::string &shaderString3 = "f 1\n" " gl_FragColor = vec4(0.0);\n" "#endif\n" "}"; const char *shaderStrings[] = {shaderString1.c_str(), shaderString2.c_str(), shaderString3.c_str()}; testCompile(shaderStrings, 3, true); }