diff options
Diffstat (limited to 'chromium/gpu/command_buffer/service/shader_translator_cache.cc')
-rw-r--r-- | chromium/gpu/command_buffer/service/shader_translator_cache.cc | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/chromium/gpu/command_buffer/service/shader_translator_cache.cc b/chromium/gpu/command_buffer/service/shader_translator_cache.cc new file mode 100644 index 00000000000..6e888d56c98 --- /dev/null +++ b/chromium/gpu/command_buffer/service/shader_translator_cache.cc @@ -0,0 +1,62 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "gpu/command_buffer/service/shader_translator_cache.h" + +namespace gpu { +namespace gles2 { + +ShaderTranslatorCache* ShaderTranslatorCache::GetInstance() { + return Singleton<ShaderTranslatorCache>::get(); +} + +ShaderTranslatorCache::ShaderTranslatorCache() { +} + +ShaderTranslatorCache::~ShaderTranslatorCache() { +} + +void ShaderTranslatorCache::OnDestruct(ShaderTranslator* translator) { + Cache::iterator it = cache_.begin(); + while (it != cache_.end()) { + if (it->second == translator) { + cache_.erase(it); + return; + } + it++; + } +} + +scoped_refptr<ShaderTranslator> ShaderTranslatorCache::GetTranslator( + ShShaderType shader_type, + ShShaderSpec shader_spec, + const ShBuiltInResources* resources, + ShaderTranslatorInterface::GlslImplementationType + glsl_implementation_type, + ShaderTranslatorInterface::GlslBuiltInFunctionBehavior + glsl_built_in_function_behavior) { + ShaderTranslatorInitParams params(shader_type, + shader_spec, + *resources, + glsl_implementation_type, + glsl_built_in_function_behavior); + + Cache::iterator it = cache_.find(params); + if (it != cache_.end()) + return it->second; + + ShaderTranslator* translator = new ShaderTranslator(); + if (translator->Init(shader_type, shader_spec, resources, + glsl_implementation_type, + glsl_built_in_function_behavior)) { + cache_[params] = translator; + translator->AddDestructionObserver(this); + return translator; + } else { + return NULL; + } +} + +} // namespace gles2 +} // namespace gpu |