void WebGLShader::CompileShader() { mValidator = nullptr; mTranslationSuccessful = false; mCompilationSuccessful = false; gl::GLContext* gl = mContext->gl; mValidator.reset(mContext->CreateShaderValidator(mType)); bool success; if (mValidator) { success = Translate(mCleanSource, mValidator.get(), &mValidationLog, &mTranslatedSource); } else { success = TranslateWithoutValidation(mCleanSource, mContext->IsWebGL2(), &mValidationLog, &mTranslatedSource); } if (!success) return; mTranslationSuccessful = true; const char* const parts[] = { mTranslatedSource.BeginReading() }; gl->fShaderSource(mGLName, ArrayLength(parts), parts, nullptr); gl->fCompileShader(mGLName); GetCompilationStatusAndLog(gl, mGLName, &mCompilationSuccessful, &mCompilationLog); }
void WebGLShader::CompileShader() { mValidator = nullptr; mTranslationSuccessful = false; mCompilationSuccessful = false; gl::GLContext* gl = mContext->gl; mValidator.reset(mContext->CreateShaderValidator(mType)); static const bool kDumpShaders = PR_GetEnv("MOZ_WEBGL_DUMP_SHADERS"); if (MOZ_UNLIKELY(kDumpShaders)) { printf_stderr("==== begin MOZ_WEBGL_DUMP_SHADERS ====\n"); PrintLongString(mCleanSource.BeginReading(), mCleanSource.Length()); } bool success; if (mValidator) { success = Translate(mCleanSource, mValidator.get(), &mValidationLog, &mTranslatedSource); } else { success = TranslateWithoutValidation(mCleanSource, mContext->IsWebGL2(), &mValidationLog, &mTranslatedSource); } if (MOZ_UNLIKELY(kDumpShaders)) { printf_stderr("\n==== \\/ \\/ \\/ ====\n"); if (success) { PrintLongString(mTranslatedSource.BeginReading(), mTranslatedSource.Length()); } else { printf_stderr("Validation failed:\n%s", mValidationLog.BeginReading()); } printf_stderr("\n==== end ====\n"); } if (!success) return; mTranslationSuccessful = true; const char* const parts[] = { mTranslatedSource.BeginReading() }; gl->fShaderSource(mGLName, ArrayLength(parts), parts, nullptr); gl->fCompileShader(mGLName); GetCompilationStatusAndLog(gl, mGLName, &mCompilationSuccessful, &mCompilationLog); }