diff options
author | gspencer@google.com <gspencer@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-05-27 23:15:42 +0000 |
---|---|---|
committer | gspencer@google.com <gspencer@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-05-27 23:15:42 +0000 |
commit | 05b47f7a8c5451f858dc220df0e3a97542edace6 (patch) | |
tree | a2273d619f0625c9d44d40842845ccce2eac1045 /o3d/converter/cross | |
parent | 5cdc8bdb4c847cefe7f4542bd10c9880c2c557a0 (diff) | |
download | chromium_src-05b47f7a8c5451f858dc220df0e3a97542edace6.zip chromium_src-05b47f7a8c5451f858dc220df0e3a97542edace6.tar.gz chromium_src-05b47f7a8c5451f858dc220df0e3a97542edace6.tar.bz2 |
This is the O3D source tree's initial commit to the Chromium tree. It
is not built or referenced at all by the chrome build yet, and doesn't
yet build in it's new home. We'll change that shortly.
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@17035 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'o3d/converter/cross')
-rw-r--r-- | o3d/converter/cross/buffer_stub.cc | 87 | ||||
-rw-r--r-- | o3d/converter/cross/buffer_stub.h | 112 | ||||
-rw-r--r-- | o3d/converter/cross/converter.cc | 312 | ||||
-rw-r--r-- | o3d/converter/cross/converter.h | 92 | ||||
-rw-r--r-- | o3d/converter/cross/converter_main.cc | 126 | ||||
-rw-r--r-- | o3d/converter/cross/draw_element_stub.h | 58 | ||||
-rw-r--r-- | o3d/converter/cross/effect_stub.h | 73 | ||||
-rw-r--r-- | o3d/converter/cross/param_cache_stub.h | 69 | ||||
-rw-r--r-- | o3d/converter/cross/primitive_stub.h | 71 | ||||
-rw-r--r-- | o3d/converter/cross/render_surface_stub.h | 75 | ||||
-rw-r--r-- | o3d/converter/cross/renderer_stub.cc | 223 | ||||
-rw-r--r-- | o3d/converter/cross/renderer_stub.h | 126 | ||||
-rw-r--r-- | o3d/converter/cross/sampler_stub.h | 53 | ||||
-rw-r--r-- | o3d/converter/cross/stream_bank_stub.h | 51 | ||||
-rw-r--r-- | o3d/converter/cross/texture_stub.cc | 51 | ||||
-rw-r--r-- | o3d/converter/cross/texture_stub.h | 152 | ||||
-rw-r--r-- | o3d/converter/cross/verifier_main.cc | 106 |
17 files changed, 1837 insertions, 0 deletions
diff --git a/o3d/converter/cross/buffer_stub.cc b/o3d/converter/cross/buffer_stub.cc new file mode 100644 index 0000000..d400ff2 --- /dev/null +++ b/o3d/converter/cross/buffer_stub.cc @@ -0,0 +1,87 @@ +/* + * Copyright 2009, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +// This file contains the definition of the VertexBufferStub and +// IndexBufferStub classes. + +#include "converter/cross/buffer_stub.h" + +namespace o3d { + +bool VertexBufferStub::ConcreteAllocate(size_t size_in_bytes) { + buffer_.reset(new int8[size_in_bytes]); + return true; +} + +void VertexBufferStub::ConcreteFree() { + buffer_.reset(); +} + +bool VertexBufferStub::ConcreteLock(AccessMode access_mode, + void** buffer_data) { + *buffer_data = buffer_.get(); + DCHECK(locked_ == false); + locked_ = true; + return (buffer_.get() != NULL); +} + +bool VertexBufferStub::ConcreteUnlock() { + bool status = locked_; + DCHECK(locked_ == true); + locked_ = false; + return status; +} + +bool IndexBufferStub::ConcreteAllocate(size_t size_in_bytes) { + buffer_.reset(new int8[size_in_bytes]); + return true; +} + +void IndexBufferStub::ConcreteFree() { + buffer_.reset(); +} + +bool IndexBufferStub::ConcreteLock(AccessMode access_mode, void** buffer_data) { + *buffer_data = buffer_.get(); + DCHECK(locked_ == false); + locked_ = true; + return (buffer_.get() != NULL); +} + +bool IndexBufferStub::ConcreteUnlock() { + bool status = locked_; + DCHECK(locked_ == true); + locked_ = false; + return status; +} + +} // end namespace o3d diff --git a/o3d/converter/cross/buffer_stub.h b/o3d/converter/cross/buffer_stub.h new file mode 100644 index 0000000..26c0aad --- /dev/null +++ b/o3d/converter/cross/buffer_stub.h @@ -0,0 +1,112 @@ +/* + * Copyright 2009, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +// This file contains the declaration of the platform specific +// VertexBufferStub and IndexBufferStub objects used by O3D + +#ifndef O3D_CONVERTER_CROSS_BUFFER_STUB_H_ +#define O3D_CONVERTER_CROSS_BUFFER_STUB_H_ + +#include "base/basictypes.h" +#include "base/scoped_ptr.h" +#include "core/cross/buffer.h" + +namespace o3d { + +// VertexBufferStub is a wrapper around an Stub Vertex Buffer Object (VBO). +// The buffer starts out empty. Calling Allocate() will reserve video memory +// for the buffer. Buffer contents are are updated by calling Lock() to get a +// pointer to the memory allocated for the buffer, updating that data in place +// and calling Unlock() to notify Stub that the edits are done. + +class VertexBufferStub : public VertexBuffer { + public: + explicit VertexBufferStub(ServiceLocator* service_locator) + : VertexBuffer(service_locator), locked_(false) {} + ~VertexBufferStub() {} + + protected: + // Creates a Stub vertex buffer object of the specified size. + virtual bool ConcreteAllocate(size_t size_in_bytes); + + // Frees the buffer. + virtual void ConcreteFree(); + + // Returns a pointer to the current contents of the buffer. A matching + // call to Unlock is necessary to update the contents of the buffer. + virtual bool ConcreteLock(AccessMode access_mode, void** buffer_data); + + // Notifies Stub that the buffer data has been updated. Unlock is only + // valid if it follows a Lock operation. + virtual bool ConcreteUnlock(); + private: + scoped_array<int8> buffer_; + bool locked_; + + DISALLOW_COPY_AND_ASSIGN(VertexBufferStub); +}; + +// IndexBufferStub is a wrapper around a Stub Index Buffer Object. +// The buffer starts out empty. A call to Allocate() will create a stub +// index buffer of the requested size. Updates the to the contents of the +// buffer are done via the Lock/Unlock calls. +class IndexBufferStub : public IndexBuffer { + public: + explicit IndexBufferStub(ServiceLocator* service_locator) + : IndexBuffer(service_locator), locked_(false) {} + ~IndexBufferStub() {} + + protected: + // Creates a OpenGL index buffer of the specified size. + virtual bool ConcreteAllocate(size_t size_in_bytes); + + // Frees the buffer. + virtual void ConcreteFree(); + + // Returns a pointer to the current contents of the buffer. After calling + // Lock, the contents of the buffer can be updated in place. + virtual bool ConcreteLock(AccessMode access_mode, void** buffer_data); + + // Notifies OpenGL that the buffer data has been updated. Unlock is only + // valid if it follows a Lock operation. + virtual bool ConcreteUnlock(); + private: + scoped_array<int8> buffer_; + bool locked_; + + DISALLOW_COPY_AND_ASSIGN(IndexBufferStub); +}; + +} // namespace o3d + + +#endif // O3D_CONVERTER_CROSS_BUFFER_STUB_H_ diff --git a/o3d/converter/cross/converter.cc b/o3d/converter/cross/converter.cc new file mode 100644 index 0000000..511b69f --- /dev/null +++ b/o3d/converter/cross/converter.cc @@ -0,0 +1,312 @@ +/* + * Copyright 2009, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +// This file contains the logic for converting the scene graph to a +// JSON-encoded file that is stored in a zip archive. +#include "converter/cross/converter.h" + +#include "base/file_path.h" +#include "base/file_util.h" +#include "base/scoped_ptr.h" +#include "core/cross/class_manager.h" +#include "core/cross/client.h" +#include "core/cross/effect.h" +#include "core/cross/error.h" +#include "core/cross/features.h" +#include "core/cross/object_manager.h" +#include "core/cross/pack.h" +#include "core/cross/renderer.h" +#include "core/cross/service_locator.h" +#include "core/cross/transform.h" +#include "core/cross/tree_traversal.h" +#include "core/cross/types.h" +#include "import/cross/collada.h" +#include "import/cross/collada_conditioner.h" +#include "import/cross/file_output_stream_processor.h" +#include "import/cross/targz_generator.h" +#include "import/cross/archive_request.h" +#include "serializer/cross/serializer.h" +#include "utils/cross/file_path_utils.h" +#include "utils/cross/json_writer.h" +#include "utils/cross/string_writer.h" +#include "utils/cross/temporary_file.h" + +namespace o3d { + +namespace { +void AddBinaryElements(const Collada& collada, + TarGzGenerator* archive_generator) { + std::vector<FilePath> paths = collada.GetOriginalDataFilenames(); + for (std::vector<FilePath>::const_iterator iter = paths.begin(); + iter != paths.end(); + ++iter) { + const std::string& data = collada.GetOriginalData(*iter); + + archive_generator->AddFile(FilePathToUTF8(*iter), data.size()); + archive_generator->AddFileBytes( + reinterpret_cast<const uint8*>(data.c_str()), + data.length()); + } +} +} // end anonymous namespace + +namespace converter { +// Loads the Collada input file and writes it to the zipped JSON output file. +bool Convert(const FilePath& in_filename, + const FilePath& out_filename, + const Options& options, + String *error_messages) { + // Create a service locator and renderer. + ServiceLocator service_locator; + EvaluationCounter evaluation_counter(&service_locator); + ClassManager class_manager(&service_locator); + ObjectManager object_manager(&service_locator); + Profiler profiler(&service_locator); + ErrorStatus error_status(&service_locator); + Features features(&service_locator); + + features.Init("MaxCapabilities"); + + // Collect error messages. + ErrorCollector error_collector(&service_locator); + + scoped_ptr<Renderer> renderer( + Renderer::CreateDefaultRenderer(&service_locator)); + renderer->InitCommon(); + + Pack::Ref pack(object_manager.CreatePack()); + Transform* root = pack->Create<Transform>(); + root->set_name(String(Serializer::ROOT_PREFIX) + String("root")); + + // Setup a ParamFloat to be the source to all animations in this file. + ParamObject* param_object = pack->Create<ParamObject>(); + // This is some arbitrary name + param_object->set_name(O3D_STRING_CONSTANT("animSourceOwner")); + ParamFloat* param_float = param_object->CreateParam<ParamFloat>("animSource"); + + Collada::Options collada_options; + collada_options.condition_document = options.condition; + collada_options.keep_original_data = true; + collada_options.base_path = options.base_path; + collada_options.up_axis = options.up_axis; + Collada collada(pack.Get(), collada_options); + if (!collada.ImportFile(in_filename, root, param_float)) { + if (error_messages) { + *error_messages += error_collector.errors(); + } + return false; + } + + // Remove the animation param_object (and indirectly the param_float) + // if there is no animation. + if (param_float->output_connections().empty()) { + pack->RemoveObject(param_object); + } + + // Attempt to open the output file. + FILE* out_file = file_util::OpenFile(out_filename, "wb"); + if (out_file == NULL) { + O3D_ERROR(&service_locator) << "Could not open output file \"" + << FilePathToUTF8(out_filename).c_str() + << "\""; + if (error_messages) { + *error_messages += error_collector.errors(); + } + return false; + } + + // Create an archive file and serialize the JSON scene graph and assets to it. + FileOutputStreamProcessor stream_processor(out_file); + TarGzGenerator archive_generator(&stream_processor); + + archive_generator.AddFile(ArchiveRequest::O3D_MARKER, + ArchiveRequest::O3D_MARKER_CONTENT_LENGTH); + archive_generator.AddFileBytes( + reinterpret_cast<const uint8*>(ArchiveRequest::O3D_MARKER_CONTENT), + ArchiveRequest::O3D_MARKER_CONTENT_LENGTH); + + // Serialize the created O3D scene graph to JSON. + StringWriter out_writer(StringWriter::LF); + JsonWriter json_writer(&out_writer, 2); + if (!options.pretty_print) { + json_writer.BeginCompacting(); + } + Serializer serializer(&service_locator, &json_writer, &archive_generator); + serializer.SerializePack(pack.Get()); + json_writer.Close(); + out_writer.Close(); + if (!options.pretty_print) { + json_writer.EndCompacting(); + } + + String json = out_writer.ToString(); + + archive_generator.AddFile("scene.json", json.length()); + archive_generator.AddFileBytes(reinterpret_cast<const uint8*>(json.c_str()), + json.length()); + + // Now add original data (e.g. compressed textures) collected during + // the loading process. + AddBinaryElements(collada, &archive_generator); + + archive_generator.Finalize(); + + file_util::CloseFile(out_file); + + pack->Destroy(); + if (error_messages) { + *error_messages = error_collector.errors(); + } + return true; +} + +// Loads the input shader file and validates it. +bool Verify(const FilePath& in_filename, + const FilePath& out_filename, + const Options& options, + String* error_messages) { + FilePath source_filename(in_filename); + // Create a service locator and renderer. + ServiceLocator service_locator; + EvaluationCounter evaluation_counter(&service_locator); + ClassManager class_manager(&service_locator); + ObjectManager object_manager(&service_locator); + Profiler profiler(&service_locator); + ErrorStatus error_status(&service_locator); + + // Collect error messages. + ErrorCollector error_collector(&service_locator); + + scoped_ptr<Renderer> renderer( + Renderer::CreateDefaultRenderer(&service_locator)); + renderer->InitCommon(); + + Pack::Ref pack(object_manager.CreatePack()); + Transform* root = pack->Create<Transform>(); + root->set_name(O3D_STRING_CONSTANT("root")); + + Collada::Options collada_options; + collada_options.condition_document = options.condition; + collada_options.keep_original_data = false; + Collada collada(pack.Get(), collada_options); + + ColladaConditioner conditioner(&service_locator); + String vertex_shader_entry_point; + String fragment_shader_entry_point; + TemporaryFile temp_file; + if (options.condition) { + if (!TemporaryFile::Create(&temp_file)) { + O3D_ERROR(&service_locator) << "Could not create temporary file"; + if (error_messages) { + *error_messages = error_collector.errors(); + } + return false; + } + SamplerStateList state_list; + if (!conditioner.RewriteShaderFile(NULL, + in_filename, + temp_file.path(), + &state_list, + &vertex_shader_entry_point, + &fragment_shader_entry_point)) { + O3D_ERROR(&service_locator) << "Could not rewrite shader file"; + if (error_messages) { + *error_messages = error_collector.errors(); + } + return false; + } + source_filename = temp_file.path(); + } else { + source_filename = in_filename; + } + + std::string shader_source_in; + // Load file into memory + if (!file_util::ReadFileToString(source_filename, &shader_source_in)) { + O3D_ERROR(&service_locator) << "Could not read shader file " + << FilePathToUTF8(source_filename).c_str(); + if (error_messages) { + *error_messages = error_collector.errors(); + } + return false; + } + + Effect::MatrixLoadOrder matrix_load_order; + scoped_ptr<Effect> effect(pack->Create<Effect>()); + if (!effect->ValidateFX(shader_source_in, + &vertex_shader_entry_point, + &fragment_shader_entry_point, + &matrix_load_order)) { + O3D_ERROR(&service_locator) << "Could not validate shader file"; + if (error_messages) { + *error_messages = error_collector.errors(); + } + return false; + } + + if (!conditioner.CompileHLSL(shader_source_in, + vertex_shader_entry_point, + fragment_shader_entry_point)) { + O3D_ERROR(&service_locator) << "Could not HLSL compile shader file"; + if (error_messages) { + *error_messages = error_collector.errors(); + } + return false; + } + + if (!conditioner.CompileCg(in_filename, + shader_source_in, + vertex_shader_entry_point, + fragment_shader_entry_point)) { + O3D_ERROR(&service_locator) << "Could not Cg compile shader file"; + if (error_messages) { + *error_messages = error_collector.errors(); + } + return false; + } + + // If we've validated the file, then we write out the conditioned + // shader to the given output file, if there is one. + if (options.condition && !out_filename.empty()) { + if (file_util::WriteFile(out_filename, shader_source_in.c_str(), + shader_source_in.size()) == -1) { + O3D_ERROR(&service_locator) << "Warning: Could not write to output file '" + << FilePathToUTF8(in_filename).c_str() << "'"; + } + } + if (error_messages) { + *error_messages = error_collector.errors(); + } + return true; +} +} // end namespace converter +} // end namespace o3d diff --git a/o3d/converter/cross/converter.h b/o3d/converter/cross/converter.h new file mode 100644 index 0000000..1524493 --- /dev/null +++ b/o3d/converter/cross/converter.h @@ -0,0 +1,92 @@ +/* + * Copyright 2009, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +// This file contains the declarations for the functions in the +// O3D converter namespace. These functions do most of the actual +// work of conditioning and packagaging a JSON file for use in +// O3D. + +#ifndef O3D_CONVERTER_CROSS_CONVERTER_H_ +#define O3D_CONVERTER_CROSS_CONVERTER_H_ + +#include "base/file_path.h" +#include "core/cross/types.h" + +namespace o3d { +namespace converter { + +// Options struct for passing to the converter. +struct Options { + Options() + : base_path(FilePath::kCurrentDirectory), + condition(true), + up_axis(0, 0, 0), + pretty_print(false) {} + + // The path to the "base" of the model path, from which all paths + // are made relative. Defaults to the current directory. + FilePath base_path; + + // Indicates if the converter should condition the input shaders or + // not. + bool condition; + + // The up axis of the output. The input will be converted to a new coordinate + // system if it indicates a different up axis. Zero means no conversion. + Vector3 up_axis; + + // This indicates whether or not the serialized JSON code should be + // pretty-printed (formatted with spaces and newlines) or just + // emitted as one huge one-line string. Defaults to false. + bool pretty_print; +}; + +// Converts the given file for use in O3D. This is done by +// loading the input file, traversing the scene graph and serializing +// what is found there. +bool Convert(const FilePath& in_filename, + const FilePath& out_filename, + const Options& options, + String* error_messages); + +// Verifies the given shader file as "valid". Returns true if input +// shader file contains valid code (code that can be compiled +// successfully). +bool Verify(const FilePath& in_filename, + const FilePath& out_filename, + const Options& options, + String* error_messages); + +} // namespace converter +} // namespace o3d + +#endif // O3D_CONVERTER_CROSS_CONVERTER_H_ diff --git a/o3d/converter/cross/converter_main.cc b/o3d/converter/cross/converter_main.cc new file mode 100644 index 0000000..85cc594 --- /dev/null +++ b/o3d/converter/cross/converter_main.cc @@ -0,0 +1,126 @@ +/* + * Copyright 2009, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +// This file contains the main routine for the converter that writes +// out a scene graph as a JSON file. + +#include <string> +#include <iostream> +#include <vector> + +#include "base/at_exit.h" +#include "base/command_line.h" +#include "base/file_path.h" +#include "converter/cross/converter.h" +#include "utils/cross/file_path_utils.h" + +using std::string; +using std::wstring; + +#if defined(OS_WIN) +int wmain(int argc, wchar_t **argv) { + // On Windows, CommandLine::Init ignores its arguments and uses + // GetCommandLineW. + CommandLine::Init(0, NULL); +#endif +#if defined(OS_LINUX) +int main(int argc, char **argv) { + CommandLine::Init(argc, argv); +#endif +#if defined(OS_MACOSX) +// The "real" main on Mac is in mac/converter_main.mm, so we can get +// memory pool initialization for Cocoa. +int CrossMain(int argc, char**argv) { + CommandLine::Init(argc, argv); +#endif + // Create an at_exit_manager so that base singletons will get + // deleted properly. + base::AtExitManager at_exit_manager; + const CommandLine* command_line = CommandLine::ForCurrentProcess(); + + FilePath in_filename, out_filename; + + std::vector<std::wstring> values = command_line->GetLooseValues(); + if (values.size() == 1) { + // If we're only given one argument, then construct the output + // filename by substituting the extension on the filename (if any) + // with .o3dtgz. + in_filename = o3d::WideToFilePath(values[0]); + out_filename = in_filename.ReplaceExtension(FILE_PATH_LITERAL(".o3dtgz")); + } else if (values.size()== 2) { + in_filename = o3d::WideToFilePath(values[0]); + out_filename = o3d::WideToFilePath(values[1]); + } else { + std::cerr << "Usage: " << argv[0] + << " [--no-condition] [--base-path=<path>] [--up-axis=x,y,z]" + << " [--pretty-print] <infile.dae> [ <outfile> ]\n"; + return EXIT_FAILURE; + } + + o3d::converter::Options options; + options.condition = !command_line->HasSwitch(L"no-condition"); + options.pretty_print = command_line->HasSwitch(L"pretty-print"); + if (command_line->HasSwitch(L"base-path")) { + options.base_path = o3d::WideToFilePath( + command_line->GetSwitchValue(L"base-path")); + } + if (command_line->HasSwitch(L"up-axis")) { + wstring up_axis_string = command_line->GetSwitchValue(L"up-axis"); + int x, y, z; + if (swscanf(up_axis_string.c_str(), L"%d,%d,%d", &x, &y, &z) != 3) { + std::cerr << "Invalid --up-axis value. Should be --up-axis=x,y,z\n"; + return EXIT_FAILURE; + } + options.up_axis = o3d::Vector3(static_cast<float>(x), + static_cast<float>(y), + static_cast<float>(z)); + } + + o3d::String error_messages; + bool result = o3d::converter::Convert(in_filename, + out_filename, + options, + &error_messages); + if (result) { + std::cerr << "Converted '" << o3d::FilePathToUTF8(in_filename).c_str() + << "' to '" << o3d::FilePathToUTF8(out_filename).c_str() + << "'." << std::endl; + return EXIT_SUCCESS; + } else { + std::cerr << error_messages.c_str() << std::endl; + std::cerr << "FAILED to convert '" + << o3d::FilePathToUTF8(in_filename).c_str() + << "' to '" << o3d::FilePathToUTF8(out_filename).c_str() + << "'." << std::endl; + return EXIT_FAILURE; + } +} diff --git a/o3d/converter/cross/draw_element_stub.h b/o3d/converter/cross/draw_element_stub.h new file mode 100644 index 0000000..6d92ebc --- /dev/null +++ b/o3d/converter/cross/draw_element_stub.h @@ -0,0 +1,58 @@ +/* + * Copyright 2009, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +// This file contains the declaration of the DrawElementGL class. + +#ifndef O3D_CONVERTER_CROSS_DRAW_ELEMENT_STUB_H_ +#define O3D_CONVERTER_CROSS_DRAW_ELEMENT_STUB_H_ + +#include "core/cross/draw_element.h" + +namespace o3d { + +class ServiceLocator; + +// DrawElementStub is the Stub implementation of the DrawElement. It +// provides a place for the renderer to store platform specific cache +// information. +class DrawElementStub : public DrawElement { + public: + explicit DrawElementStub(ServiceLocator* service_locator) + : DrawElement(service_locator) {} + ~DrawElementStub() {} + + private: + DISALLOW_COPY_AND_ASSIGN(DrawElementStub); +}; +} // o3d + +#endif // O3D_CONVERTER_CROSS_DRAW_ELEMENT_STUB_H_ diff --git a/o3d/converter/cross/effect_stub.h b/o3d/converter/cross/effect_stub.h new file mode 100644 index 0000000..7a54a9b --- /dev/null +++ b/o3d/converter/cross/effect_stub.h @@ -0,0 +1,73 @@ +/* + * Copyright 2009, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +// This file contains the declaration of the EffectGL class. + +#ifndef O3D_CONVERTER_CROSS_EFFECT_STUB_H_ +#define O3D_CONVERTER_CROSS_EFFECT_STUB_H_ + +#include "core/cross/effect.h" + +namespace o3d { + +class ServiceLocator; + +// EffectStub is an implementation of the Effect object for the +// converter. It provides the API for setting the vertex and fragment +// shaders for the Effect using the Cg Runtime. +class EffectStub : public Effect { + public: + explicit EffectStub(ServiceLocator* service_locator) + : Effect(service_locator) {} + virtual ~EffectStub() {} + + // Reads the vertex and fragment shaders from string in the FX format. + // It returns true if the shaders were successfully compiled. + virtual bool LoadFromFXString(const String& effect) { return true; } + + // Gets info about the parameters this effect needs. + // Overriden from Effect. + virtual void GetParameterInfo(EffectParameterInfoArray* info_array) {} + + // Gets info about the varying parameters this effects vertex shader needs. + // Parameters: + // info_array: EffectParameterInfoArray to receive info. + virtual void GetStreamInfo( + EffectStreamInfoArray* info_array) { + } + + private: + DISALLOW_COPY_AND_ASSIGN(EffectStub); +}; +} // namespace o3d + +#endif // O3D_CONVERTER_CROSS_EFFECT_STUB_H_ diff --git a/o3d/converter/cross/param_cache_stub.h b/o3d/converter/cross/param_cache_stub.h new file mode 100644 index 0000000..5ae89ee --- /dev/null +++ b/o3d/converter/cross/param_cache_stub.h @@ -0,0 +1,69 @@ +/* + * Copyright 2009, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +// This file contains the declaration of the ParamCacheStub class. + +#ifndef O3D_CONVERTER_CROSS_PARAM_CACHE_STUB_H_ +#define O3D_CONVERTER_CROSS_PARAM_CACHE_STUB_H_ + +#include "core/cross/param_cache.h" + +namespace o3d { + +class Effect; +class DrawElement; +class Element; +class Material; +class ParamObject; + +class ParamCacheStub : public ParamCache { + public: + ParamCacheStub() : ParamCache() {} + + // Overridden from ParamCache. + virtual void UpdateCache(Effect* effect, + DrawElement* draw_element, + Element* element, + Material* material, + ParamObject* override) {} + + protected: + // Overridden from ParamCache + // Validates platform specific information about the effect. + virtual bool ValidateEffect(Effect* effect) { return true; } + + private: + DISALLOW_COPY_AND_ASSIGN(ParamCacheStub); +}; +} // o3d + +#endif // O3D_CONVERTER_CROSS_PARAM_CACHE_STUB_H_ diff --git a/o3d/converter/cross/primitive_stub.h b/o3d/converter/cross/primitive_stub.h new file mode 100644 index 0000000..81b4808 --- /dev/null +++ b/o3d/converter/cross/primitive_stub.h @@ -0,0 +1,71 @@ +/* + * Copyright 2009, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +// This file contains the declaration of the PrimitiveStub class. + +#ifndef O3D_CONVERTER_CROSS_PRIMITIVE_STUB_H_ +#define O3D_CONVERTER_CROSS_PRIMITIVE_STUB_H_ + +#include "core/cross/primitive.h" + +namespace o3d { + +class DrawElement; +class Material; +class ParamCache; +class ParamObject; +class Renderer; +class ServiceLocator; + +// PrimitiveStub is the Stub implementation of the Primitive. It provides the +// necessary interfaces for setting the geometry streams on the Primitive. +class PrimitiveStub : public Primitive { + public: + explicit PrimitiveStub(ServiceLocator* service_locator) + : Primitive(service_locator) {} + virtual ~PrimitiveStub() {} + + // Overridden from Element + // Renders this Element using the parameters from override first, followed by + // the draw_element, followed by params on this Primitive and material. + virtual void Render(Renderer* renderer, + DrawElement* draw_element, + Material* material, + ParamObject* override, + ParamCache* param_cache) {} + + private: + DISALLOW_COPY_AND_ASSIGN(PrimitiveStub); +}; +} // o3d + +#endif // O3D_CONVERTER_CROSS_PRIMITIVE_STUB_H_ diff --git a/o3d/converter/cross/render_surface_stub.h b/o3d/converter/cross/render_surface_stub.h new file mode 100644 index 0000000..4e68677 --- /dev/null +++ b/o3d/converter/cross/render_surface_stub.h @@ -0,0 +1,75 @@ +/* + * Copyright 2009, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +// This file contains the declarations for RenderSurfaceGL and +// RenderDepthStencilSurfaceGL. + +#ifndef O3D_CONVERTER_CROSS_RENDER_SURFACE_STUB_H_ +#define O3D_CONVERTER_CROSS_RENDER_SURFACE_STUB_H_ + +#include "core/cross/render_surface.h" +#include "core/cross/texture.h" + +namespace o3d { + +class RenderSurfaceStub : public RenderSurface { + public: + typedef SmartPointer<RenderSurfaceStub> Ref; + + // Constructs a RenderSurfaceStub instance. + // Parameters: + // service_locator: Service locator for the instance. + RenderSurfaceStub(ServiceLocator *service_locator, + int width, + int height) + : RenderSurface(service_locator, width, height, NULL) {} + virtual ~RenderSurfaceStub() {} + private: + DISALLOW_COPY_AND_ASSIGN(RenderSurfaceStub); +}; + +class RenderDepthStencilSurfaceStub : public RenderDepthStencilSurface { + public: + typedef SmartPointer<RenderDepthStencilSurfaceStub> Ref; + + RenderDepthStencilSurfaceStub(ServiceLocator *service_locator, + int width, + int height) + : RenderDepthStencilSurface(service_locator, width, height) {} + virtual ~RenderDepthStencilSurfaceStub() {} + private: + DISALLOW_COPY_AND_ASSIGN(RenderDepthStencilSurfaceStub); +}; + +} // namespace o3d + +#endif // O3D_CONVERTER_CROSS_RENDER_SURFACE_STUB_H_ diff --git a/o3d/converter/cross/renderer_stub.cc b/o3d/converter/cross/renderer_stub.cc new file mode 100644 index 0000000..c53d2d5 --- /dev/null +++ b/o3d/converter/cross/renderer_stub.cc @@ -0,0 +1,223 @@ +/* + * Copyright 2009, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +// This file contains the definition of abstract functions in the +// cross platform API so that we can use it for serialization of the +// scene graph on all systems without needing graphics. + +#include "converter/cross/renderer_stub.h" +#include "core/cross/object_manager.h" +#include "core/cross/service_locator.h" +#include "converter/cross/buffer_stub.h" +#include "converter/cross/draw_element_stub.h" +#include "converter/cross/effect_stub.h" +#include "converter/cross/param_cache_stub.h" +#include "converter/cross/primitive_stub.h" +#include "converter/cross/render_surface_stub.h" +#include "converter/cross/sampler_stub.h" +#include "converter/cross/stream_bank_stub.h" +#include "converter/cross/texture_stub.h" + +namespace o3d { + +Renderer* RendererStub::CreateDefault(ServiceLocator* service_locator) { + return new RendererStub(service_locator); +} + +RendererStub::RendererStub(ServiceLocator* service_locator) + : Renderer(service_locator) { +} + +Renderer::InitStatus RendererStub::InitPlatformSpecific( + const DisplayWindow&, bool) { + DCHECK(false); + return SUCCESS; +} + +void RendererStub::InitCommon() { +} + +void RendererStub::UninitCommon() { +} + +void RendererStub::Destroy(void) { + DCHECK(false); +} + +bool RendererStub::BeginDraw(void) { + DCHECK(false); + return true; +} + +void RendererStub::EndDraw(void) { + DCHECK(false); +} + +bool RendererStub::StartRendering(void) { + DCHECK(false); + return true; +} + +void RendererStub::FinishRendering(void) { + DCHECK(false); +} + +void RendererStub::Resize(int, int) { + DCHECK(false); +} + +void RendererStub::Clear(const Float4 &, bool, float, bool, int, bool) { + DCHECK(false); +} + +void RendererStub::RenderElement(Element *, + DrawElement *, + Material *, + ParamObject *, + ParamCache *) { + DCHECK(false); +} + +void RendererStub::SetRenderSurfacesPlatformSpecific( + RenderSurface* surface, + RenderDepthStencilSurface* surface_depth) { + DCHECK(false); +} + +void RendererStub::SetBackBufferPlatformSpecific() { + DCHECK(false); +} + +Primitive::Ref RendererStub::CreatePrimitive(void) { + return Primitive::Ref(new PrimitiveStub(service_locator())); +} + +DrawElement::Ref RendererStub::CreateDrawElement(void) { + return DrawElement::Ref(new DrawElementStub(service_locator())); +} + +VertexBuffer::Ref RendererStub::CreateVertexBuffer(void) { + return VertexBuffer::Ref(new VertexBufferStub(service_locator())); +} + +IndexBuffer::Ref RendererStub::CreateIndexBuffer(void) { + return IndexBuffer::Ref(new IndexBufferStub(service_locator())); +} + +Effect::Ref RendererStub::CreateEffect(void) { + return Effect::Ref(new EffectStub(service_locator())); +} + +Sampler::Ref RendererStub::CreateSampler(void) { + return Sampler::Ref(new SamplerStub(service_locator())); +} + +Texture::Ref RendererStub::CreatePlatformSpecificTextureFromBitmap( + Bitmap *bitmap) { + if (bitmap->is_cubemap()) { + return Texture::Ref(new TextureCUBEStub(service_locator(), + bitmap->width(), + bitmap->format(), + bitmap->num_mipmaps(), + false)); + } else { + return Texture::Ref(new Texture2DStub(service_locator(), + bitmap->width(), + bitmap->height(), + bitmap->format(), + bitmap->num_mipmaps(), + false)); + } +} + +Texture2D::Ref RendererStub::CreatePlatformSpecificTexture2D( + int width, + int height, + Texture::Format format, + int levels, + bool enable_render_surfaces) { + return Texture2D::Ref(new Texture2DStub(service_locator(), + width, + height, + format, + levels, + enable_render_surfaces)); +} + +TextureCUBE::Ref RendererStub::CreatePlatformSpecificTextureCUBE( + int edge_length, + Texture::Format format, + int levels, + bool enable_render_surfaces) { + return TextureCUBE::Ref(new TextureCUBEStub(service_locator(), + edge_length, + format, + levels, + enable_render_surfaces)); +} + +RenderDepthStencilSurface::Ref RendererStub::CreateDepthStencilSurface( + int width, + int height) { + return RenderDepthStencilSurface::Ref( + new RenderDepthStencilSurfaceStub(service_locator(), width, height)); +} + +StreamBank::Ref RendererStub::CreateStreamBank() { + return StreamBank::Ref(new StreamBankStub(service_locator())); +} + +bool RendererStub::SaveScreen(const String &) { + DCHECK(false); + return true; +} + +ParamCache *RendererStub::CreatePlatformSpecificParamCache(void) { + return new ParamCacheStub; +} + +void RendererStub::SetViewportInPixels(int, int, int, int, float, float) { + DCHECK(false); +} + +const int* RendererStub::GetRGBAUByteNSwizzleTable() { + static int swizzle_table[] = { 0, 1, 2, 3, }; + return swizzle_table; +} + +// This is a factory function for creating Renderer objects. Since +// we're implementing a stub renderer, we only ever return a stub renderer. +Renderer* Renderer::CreateDefaultRenderer(ServiceLocator* service_locator) { + return RendererStub::CreateDefault(service_locator); +} + +} // namespace o3d diff --git a/o3d/converter/cross/renderer_stub.h b/o3d/converter/cross/renderer_stub.h new file mode 100644 index 0000000..afd5d41 --- /dev/null +++ b/o3d/converter/cross/renderer_stub.h @@ -0,0 +1,126 @@ +/* + * Copyright 2009, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +// This file contains the declaration of functions needed to +// instantiate a renderer from the core cross-platform API so that we +// can use it for serialization of the scene graph on all systems +// without needing graphics. + +#ifndef O3D_CONVERTER_CROSS_RENDERER_STUB_H__ +#define O3D_CONVERTER_CROSS_RENDERER_STUB_H__ + +#include "core/cross/renderer.h" + +namespace o3d { + +// Please see core/cross/renderer.h for documentation of these +// functions. With the exception of the "Create..." methods, these +// are mostly just stubbed out here, and don't do anything. + +class RendererStub : public Renderer { + public: + static Renderer* CreateDefault(ServiceLocator* service_locator); + virtual InitStatus InitPlatformSpecific(const DisplayWindow& display, + bool off_screen); + virtual void InitCommon(); + virtual void UninitCommon(); + virtual void Destroy(); + virtual bool BeginDraw(); + virtual void EndDraw(); + virtual bool StartRendering(); + virtual void FinishRendering(); + virtual void Resize(int width, int height); + virtual void Clear(const Float4 &color, + bool color_flag, + float depth, + bool depth_flag, + int stencil, + bool stencil_flag); + virtual void RenderElement(Element* element, + DrawElement* draw_element, + Material* material, + ParamObject* override, + ParamCache* param_cache); + virtual Primitive::Ref CreatePrimitive(); + virtual DrawElement::Ref CreateDrawElement(); + virtual VertexBuffer::Ref CreateVertexBuffer(); + virtual IndexBuffer::Ref CreateIndexBuffer(); + virtual Effect::Ref CreateEffect(); + virtual Sampler::Ref CreateSampler(); + virtual RenderDepthStencilSurface::Ref CreateDepthStencilSurface(int width, + int height); + virtual StreamBank::Ref CreateStreamBank(); + virtual bool SaveScreen(const String& file_name); + ParamCache *CreatePlatformSpecificParamCache(); + virtual void SetViewportInPixels(int left, + int top, + int width, + int height, + float min_z, + float max_z); + + // Overridden from Renderer. + virtual const int* GetRGBAUByteNSwizzleTable(); + + protected: + explicit RendererStub(ServiceLocator* service_locator); + + // Overridden from Renderer. + virtual Texture::Ref CreatePlatformSpecificTextureFromBitmap(Bitmap* bitmap); + + // Overridden from Renderer. + virtual void SetBackBufferPlatformSpecific(); + + // Overridden from Renderer. + virtual void SetRenderSurfacesPlatformSpecific( + RenderSurface* surface, + RenderDepthStencilSurface* depth_surface); + + // Overridden from Renderer. + virtual Texture2D::Ref CreatePlatformSpecificTexture2D( + int width, + int height, + Texture::Format format, + int levels, + bool enable_render_surfaces); + + // Overridden from Renderer. + virtual TextureCUBE::Ref CreatePlatformSpecificTextureCUBE( + int edge_length, + Texture::Format format, + int levels, + bool enable_render_surfaces); +}; + +} // namespace o3d + +#endif // O3D_CONVERTER_CROSS_RENDERER_STUB_H__ diff --git a/o3d/converter/cross/sampler_stub.h b/o3d/converter/cross/sampler_stub.h new file mode 100644 index 0000000..61da44b --- /dev/null +++ b/o3d/converter/cross/sampler_stub.h @@ -0,0 +1,53 @@ +/* + * Copyright 2009, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +// This file contains the class declaration for SamplerStub. + +#ifndef O3D_CONVERTER_CROSS_SAMPLER_STUB_H_ +#define O3D_CONVERTER_CROSS_SAMPLER_STUB_H_ + +#include "core/cross/sampler.h" + +namespace o3d { + +// SamplerStub is an implementation of the Sampler object for the converter. +class SamplerStub : public Sampler { + public: + explicit SamplerStub(ServiceLocator* service_locator) + : Sampler(service_locator) {} + virtual ~SamplerStub() {} + private: + DISALLOW_COPY_AND_ASSIGN(SamplerStub); +}; +} // namespace o3d + +#endif // O3D_CONVERTER_CROSS_SAMPLER_STUB_H_ diff --git a/o3d/converter/cross/stream_bank_stub.h b/o3d/converter/cross/stream_bank_stub.h new file mode 100644 index 0000000..b137519 --- /dev/null +++ b/o3d/converter/cross/stream_bank_stub.h @@ -0,0 +1,51 @@ +/* + * Copyright 2009, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +// This file contains the declaration of the StreamBankGL class. + +#ifndef O3D_CONVERTER_CROSS_STREAM_BANK_STUB_H_ +#define O3D_CONVERTER_CROSS_STREAM_BANK_STUB_H_ + +#include "core/cross/stream_bank.h" + +namespace o3d { + +// StreamBankStub is the Stub implementation of the StreamBank. +class StreamBankStub : public StreamBank { + public: + explicit StreamBankStub(ServiceLocator* service_locator) + : StreamBank(service_locator) {} + virtual ~StreamBankStub() {} +}; +} // o3d + +#endif // O3D_CONVERTER_CROSS_STREAM_BANK_STUB_H_ diff --git a/o3d/converter/cross/texture_stub.cc b/o3d/converter/cross/texture_stub.cc new file mode 100644 index 0000000..4c91fb5 --- /dev/null +++ b/o3d/converter/cross/texture_stub.cc @@ -0,0 +1,51 @@ +/* + * Copyright 2009, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +#include "converter/cross/texture_stub.h" + +namespace o3d { + +namespace { + +Texture::RGBASwizzleIndices g_stub_abgr32f_swizzle_indices = {0, 1, 2, 3}; + +} // anonymous namespace. + +const Texture::RGBASwizzleIndices& Texture2DStub::GetABGR32FSwizzleIndices() { + return g_stub_abgr32f_swizzle_indices; +} + +const Texture::RGBASwizzleIndices& TextureCUBEStub::GetABGR32FSwizzleIndices() { + return g_stub_abgr32f_swizzle_indices; +} + +} // namespace o3d diff --git a/o3d/converter/cross/texture_stub.h b/o3d/converter/cross/texture_stub.h new file mode 100644 index 0000000..78e971c --- /dev/null +++ b/o3d/converter/cross/texture_stub.h @@ -0,0 +1,152 @@ +/* + * Copyright 2009, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +// This file contains the declarations for Texture2DStub and TextureCUBEStub. + +#ifndef O3D_CONVERTER_CROSS_TEXTURE_STUB_H__ +#define O3D_CONVERTER_CROSS_TEXTURE_STUB_H__ + +#include "core/cross/bitmap.h" +#include "core/cross/texture.h" +#include "core/cross/types.h" + +namespace o3d { + +// Texture2DStub implements the stub Texture2D interface for the converter. +class Texture2DStub : public Texture2D { + public: + typedef SmartPointer<Texture2DStub> Ref; + + Texture2DStub(ServiceLocator* service_locator, + int width, + int height, + Texture::Format format, + int levels, + bool enable_render_surfaces) + : Texture2D(service_locator, + width, + height, + format, + levels, + false, + false, + enable_render_surfaces) {} + virtual ~Texture2DStub() {} + + // Locks the image buffer of a given mipmap level for writing from main + // memory. + virtual bool Lock(int level, void** texture_data) { return true; } + + // Unlocks this texture and returns it to Stub control. + virtual bool Unlock(int level) { return true; } + + // Returns a RenderSurface object associated with a mip_level of a texture. + // Parameters: + // mip_level: [in] The mip-level of the surface to be returned. + // pack: [in] The pack in which the surface will reside. + // Returns: + // Reference to the RenderSurface object. + virtual RenderSurface::Ref GetRenderSurface(int mip_level, Pack *pack) { + return RenderSurface::Ref(NULL); + } + + // Returns the implementation-specific texture handle for this texture. + void* GetTextureHandle() const { + return NULL; + } + + // Gets a RGBASwizzleIndices that contains a mapping from + // RGBA to the internal format used by the rendering API. + virtual const RGBASwizzleIndices& GetABGR32FSwizzleIndices(); + + private: + DISALLOW_COPY_AND_ASSIGN(Texture2DStub); +}; + + +// TextureCUBEStub implements the TextureCUBE interface for the converter stub. +class TextureCUBEStub : public TextureCUBE { + public: + typedef SmartPointer<TextureCUBEStub> Ref; + TextureCUBEStub(ServiceLocator* service_locator, + int edge_length, + Texture::Format format, + int levels, + bool enable_render_surfaces) + : TextureCUBE(service_locator, + edge_length, + format, + levels, + false, + false, + enable_render_surfaces) {} + virtual ~TextureCUBEStub() {} + + // Locks the image buffer of a given face and mipmap level for loading + // from main memory. + virtual bool Lock(CubeFace face, int level, void** texture_data) { + return true; + } + + // Unlocks the image buffer of a given face and mipmap level. + virtual bool Unlock(CubeFace face, int level) { return true; } + + // Returns a RenderSurface object associated with a given cube face and + // mip_level of a texture. + // Parameters: + // face: [in] The cube face from which to extract the surface. + // mip_level: [in] The mip-level of the surface to be returned. + // pack: [in] The pack in which the surface will reside. + // Returns: + // Reference to the RenderSurface object. + virtual RenderSurface::Ref GetRenderSurface(CubeFace face, + int level, + Pack* pack) { + return RenderSurface::Ref(NULL); + } + + // Returns the implementation-specific texture handle for this texture. + void* GetTextureHandle() const { + return NULL; + } + + // Gets a RGBASwizzleIndices that contains a mapping from + // RGBA to the internal format used by the rendering API. + virtual const RGBASwizzleIndices& GetABGR32FSwizzleIndices(); + + private: + DISALLOW_COPY_AND_ASSIGN(TextureCUBEStub); +}; + +} // namespace o3d + +#endif // O3D_CONVERTER_CROSS_TEXTURE_STUB_H__ diff --git a/o3d/converter/cross/verifier_main.cc b/o3d/converter/cross/verifier_main.cc new file mode 100644 index 0000000..4ffde5b --- /dev/null +++ b/o3d/converter/cross/verifier_main.cc @@ -0,0 +1,106 @@ +/* + * Copyright 2009, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +// This file contains the main routine for the converter that writes +// out a scene graph as a JSON file. + +#include <string> +#include <iostream> +#include <vector> + +#include "base/at_exit.h" +#include "base/file_path.h" +#include "base/command_line.h" +#include "converter/cross/converter.h" +#include "utils/cross/file_path_utils.h" + +using std::string; +using std::wstring; + +#if defined(OS_WIN) +int wmain(int argc, wchar_t **argv) { + // On Windows, CommandLine::Init ignores its arguments and uses + // GetCommandLineW. + CommandLine::Init(0, NULL); +#endif +#if defined(OS_LINUX) +int main(int argc, char **argv) { + CommandLine::Init(argc, argv); +#endif +#if defined(OS_MACOSX) +// The "real" main on Mac is in mac/converter_main.mm, so we can get +// memory pool initialization for Cocoa. +int CrossMain(int argc, char**argv) { + CommandLine::Init(argc, argv); +#endif + // Create an at_exit_manager so that base singletons will get + // deleted properly. + base::AtExitManager at_exit_manager; + const CommandLine* command_line = CommandLine::ForCurrentProcess(); + + FilePath in_filename, out_filename; + + std::vector<std::wstring> values = command_line->GetLooseValues(); + if (values.size() == 1) { + in_filename = o3d::WideToFilePath(values[0]); + } else if (values.size()== 2) { + in_filename = o3d::WideToFilePath(values[0]); + out_filename = o3d::WideToFilePath(values[1]); + } else { + std::cerr << "Usage: " << FilePath(argv[0]).BaseName().value() + << " [--no-condition] <infile.fx> [<outfile.fx>]\n"; + return EXIT_FAILURE; + } + + o3d::converter::Options options; + options.condition = !command_line->HasSwitch(L"no-condition"); + + if (!options.condition && !out_filename.empty()) { + std::cerr << "Warning: Ignoring output filename because conditioning " + << "has been turned off.\n"; + out_filename = FilePath(); + } + + o3d::String errors; + bool result = o3d::converter::Verify(in_filename, out_filename, options, + &errors); + if (result) { + std::cerr << "Shader in '" << o3d::FilePathToUTF8(in_filename).c_str() + << "' has been validated." << std::endl; + return EXIT_SUCCESS; + } else { + std::cerr << errors.c_str() << std::endl; + std::cerr << "Shader in '" << o3d::FilePathToUTF8(in_filename).c_str() + << "' FAILED to be validated." << std::endl; + return EXIT_FAILURE; + } +} |