diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000000..e69de29bb2 diff --git a/bc_s.png b/bc_s.png new file mode 100644 index 0000000000..224b29aa98 Binary files /dev/null and b/bc_s.png differ diff --git a/bc_sd.png b/bc_sd.png new file mode 100644 index 0000000000..31ca888dc7 Binary files /dev/null and b/bc_sd.png differ diff --git a/classtz_1_1handle-members.html b/classtz_1_1handle-members.html new file mode 100644 index 0000000000..17dd6ae3a2 --- /dev/null +++ b/classtz_1_1handle-members.html @@ -0,0 +1,112 @@ + + + + + + + +Topaz: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Topaz 5.0 +
+
Topaz Game Engine
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
tz::handle< T > Member List
+
+
+ +

This is the complete list of members for tz::handle< T >, including all inherited members.

+ + + + + +
operator!=(nullhand_t) consttz::handle< T >inline
operator=(hanval value)tz::handle< T >inline
operator==(nullhand_t) consttz::handle< T >inline
peek() consttz::handle< T >inline
+ + +
+ + diff --git a/classtz_1_1handle.html b/classtz_1_1handle.html new file mode 100644 index 0000000000..1f9d65b735 --- /dev/null +++ b/classtz_1_1handle.html @@ -0,0 +1,247 @@ + + + + + + + +Topaz: tz::handle< T > Class Template Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Topaz 5.0 +
+
Topaz Game Engine
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+ +
tz::handle< T > Class Template Reference
+
+
+

Description

+
template<typename T>
+class tz::handle< T >

Represents a generic opaque handle.

+

To create your own opaque handle types, simply create a type alias for a handle<T> where T is any unique type identifier.

+
+

#include "handle.hpp"

+ + + + + + + + + + + + + + +

+Public Member Functions

std::underlying_type_t< hanval > peek () const
 Disregard the concept of "opaqueness" of an opaque handle by peeking at the underlying value. You should avoid the use of this outside of debug tools.
 
handleoperator= (hanval value)
 Assign a handle to the null handle, meaning it is now invalid.
 
bool operator== (nullhand_t) const
 Compare a handle to the null handle. This comparison will return false if the handle is valid.
 
bool operator!= (nullhand_t) const
 Compare a handle to the null handle. This comparison will return true if the handle is valid.
 
+

Member Function Documentation

+ +

◆ peek()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
std::underlying_type_t< hanval > tz::handle< T >::peek () const
+
+inline
+
+ +

Disregard the concept of "opaqueness" of an opaque handle by peeking at the underlying value. You should avoid the use of this outside of debug tools.

+ +
+
+ +

◆ operator=()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
handle & tz::handle< T >::operator= (hanval value)
+
+inline
+
+ +

Assign a handle to the null handle, meaning it is now invalid.

+ +
+
+ +

◆ operator==()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
bool tz::handle< T >::operator== (nullhand_t ) const
+
+inline
+
+ +

Compare a handle to the null handle. This comparison will return false if the handle is valid.

+ +
+
+ +

◆ operator!=()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
bool tz::handle< T >::operator!= (nullhand_t ) const
+
+inline
+
+ +

Compare a handle to the null handle. This comparison will return true if the handle is valid.

+ +
+
+
+ + +
+ + diff --git a/clipboard.js b/clipboard.js new file mode 100644 index 0000000000..42c1fb0e02 --- /dev/null +++ b/clipboard.js @@ -0,0 +1,61 @@ +/** + +The code below is based on the Doxygen Awesome project, see +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2022 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +let clipboard_title = "Copy to clipboard" +let clipboard_icon = `` +let clipboard_successIcon = `` +let clipboard_successDuration = 1000 + +$(function() { + if(navigator.clipboard) { + const fragments = document.getElementsByClassName("fragment") + for(const fragment of fragments) { + const clipboard_div = document.createElement("div") + clipboard_div.classList.add("clipboard") + clipboard_div.innerHTML = clipboard_icon + clipboard_div.title = clipboard_title + $(clipboard_div).click(function() { + const content = this.parentNode.cloneNode(true) + // filter out line number and folded fragments from file listings + content.querySelectorAll(".lineno, .ttc, .foldclosed").forEach((node) => { node.remove() }) + let text = content.textContent + // remove trailing newlines and trailing spaces from empty lines + text = text.replace(/^\s*\n/gm,'\n').replace(/\n*$/,'') + navigator.clipboard.writeText(text); + this.classList.add("success") + this.innerHTML = clipboard_successIcon + window.setTimeout(() => { // switch back to normal icon after timeout + this.classList.remove("success") + this.innerHTML = clipboard_icon + }, clipboard_successDuration); + }) + fragment.insertBefore(clipboard_div, fragment.firstChild) + } + } +}) diff --git a/closed.png b/closed.png new file mode 100644 index 0000000000..98cc2c909d Binary files /dev/null and b/closed.png differ diff --git a/cookie.js b/cookie.js new file mode 100644 index 0000000000..53ad21d981 --- /dev/null +++ b/cookie.js @@ -0,0 +1,58 @@ +/*! + Cookie helper functions + Copyright (c) 2023 Dimitri van Heesch + Released under MIT license. +*/ +let Cookie = { + cookie_namespace: 'doxygen_', + + readSetting(cookie,defVal) { + if (window.chrome) { + const val = localStorage.getItem(this.cookie_namespace+cookie) || + sessionStorage.getItem(this.cookie_namespace+cookie); + if (val) return val; + } else { + let myCookie = this.cookie_namespace+cookie+"="; + if (document.cookie) { + const index = document.cookie.indexOf(myCookie); + if (index != -1) { + const valStart = index + myCookie.length; + let valEnd = document.cookie.indexOf(";", valStart); + if (valEnd == -1) { + valEnd = document.cookie.length; + } + return document.cookie.substring(valStart, valEnd); + } + } + } + return defVal; + }, + + writeSetting(cookie,val,days=10*365) { // default days='forever', 0=session cookie, -1=delete + if (window.chrome) { + if (days==0) { + sessionStorage.setItem(this.cookie_namespace+cookie,val); + } else { + localStorage.setItem(this.cookie_namespace+cookie,val); + } + } else { + let date = new Date(); + date.setTime(date.getTime()+(days*24*60*60*1000)); + const expiration = days!=0 ? "expires="+date.toGMTString()+";" : ""; + document.cookie = this.cookie_namespace + cookie + "=" + + val + "; SameSite=Lax;" + expiration + "path=/"; + } + }, + + eraseSetting(cookie) { + if (window.chrome) { + if (localStorage.getItem(this.cookie_namespace+cookie)) { + localStorage.removeItem(this.cookie_namespace+cookie); + } else if (sessionStorage.getItem(this.cookie_namespace+cookie)) { + sessionStorage.removeItem(this.cookie_namespace+cookie); + } + } else { + this.writeSetting(cookie,'',-1); + } + }, +} diff --git a/debug_8hpp_source.html b/debug_8hpp_source.html new file mode 100644 index 0000000000..6a075c3b64 --- /dev/null +++ b/debug_8hpp_source.html @@ -0,0 +1,144 @@ + + + + + + + +Topaz: /github/workspace/include/tz/detail/debug.hpp Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Topaz 5.0 +
+
Topaz Game Engine
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
debug.hpp
+
+
+
1#ifndef TOPAZ_DEBUG_HPP
+
2#define TOPAZ_DEBUG_HPP
+
3#include <source_location>
+
4#include <cstdio>
+
5#include <utility>
+
6#include <format>
+
7#include <string>
+
8
+
9namespace tz::detail
+
10{
+
11 template<typename... Args>
+
12 inline void error_internal(const char* preamble, std::format_string<Args...> fmt, const std::source_location& loc, Args&&... args)
+
13 {
+
14 std::fprintf(stderr, "%s", preamble);
+
15 std::fprintf(stderr, "%s", std::format(fmt, std::forward<Args>(args)...).c_str());
+
16
+
17 std::string diag_info = std::format("\n\tIn file {}({},{})\n\t>\t{}", loc.file_name(), loc.line(), loc.column(), loc.function_name());
+
18
+
19 std::fprintf(stderr, "%s", diag_info.c_str());
+
20
+
21 // debug break: int3
+
22 asm("int3");
+
23 }
+
24}
+
25
+
34#define tz_assert(cond, fmt, ...) if(!(cond)){tz::detail::error_internal("[Assertion Fail]: ", fmt, std::source_location::current(), __VA_ARGS__);}
+
35
+
43#define tz_error(fmt, ...) tz::detail::error_internal("[Error]: ", fmt, std::source_location::current(), __VA_ARGS__)
+
44
+
45
+
46#define tz_seterror(errcode, msg) set_last_error(std::format("({}): {}", error_code_name(errcode), msg))
+
47
+
66#define tz_must(fnret) [sl = std::source_location::current()](auto ret){if constexpr(std::is_same_v<std::decay_t<decltype(ret)>, tz::error_code>){if(ret != tz::error_code::success){tz::detail::error_internal("[Must Failure]: ", "error {} {}", sl, static_cast<int>(ret), tz::last_error());}} else{if(!ret.has_value()){tz::detail::error_internal("[Must Failure]: ", "error {} {}", sl, static_cast<int>(ret.error()), tz::last_error());} return ret.value();}}(fnret)
+
67
+
68
+
69#define UNERR(errcode, preamble, ...) {auto msg = std::format(preamble, __VA_ARGS__); tz_seterror(errcode, msg); return std::unexpected(errcode);}
+
70#define RETERR(errcode, preamble, ...){auto msg = std::format(preamble, __VA_ARGS__); tz_seterror(errcode, msg); return errcode;}
+
71
+
72#endif // TOPAZ_DEBUG_HPP
+
+ + +
+ + diff --git a/dir_1c51fded61dc0bfc3a67c427872082c5.html b/dir_1c51fded61dc0bfc3a67c427872082c5.html new file mode 100644 index 0000000000..15749912b8 --- /dev/null +++ b/dir_1c51fded61dc0bfc3a67c427872082c5.html @@ -0,0 +1,121 @@ + + + + + + + +Topaz: /github/workspace/include/tz/gpu Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Topaz 5.0 +
+
Topaz Game Engine
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
gpu Directory Reference
+
+
+ + + + + + + + + + + + + + +

+Files

 graph.hpp
 
 hardware.hpp
 
 pass.hpp
 
 resource.hpp
 
 settings.hpp
 
 shader.hpp
 
+
+ + +
+ + diff --git a/dir_2d4b4845373118f8f18ff44b0c125575.html b/dir_2d4b4845373118f8f18ff44b0c125575.html new file mode 100644 index 0000000000..971155f56f --- /dev/null +++ b/dir_2d4b4845373118f8f18ff44b0c125575.html @@ -0,0 +1,111 @@ + + + + + + + +Topaz: /github/workspace/include/tz/detail Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Topaz 5.0 +
+
Topaz Game Engine
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
detail Directory Reference
+
+
+ + + + +

+Files

 debug.hpp
 
+
+ + +
+ + diff --git a/dir_3c27893881a828d2f56847321c12ddee.html b/dir_3c27893881a828d2f56847321c12ddee.html new file mode 100644 index 0000000000..5f3e2baa75 --- /dev/null +++ b/dir_3c27893881a828d2f56847321c12ddee.html @@ -0,0 +1,115 @@ + + + + + + + +Topaz: /github/workspace/include/tz/os Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Topaz 5.0 +
+
Topaz Game Engine
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
os Directory Reference
+
+
+ + + + + + + + +

+Files

 file.hpp
 
 input.hpp
 
 window.hpp
 
+
+ + +
+ + diff --git a/dir_7a46e11b413280d6e79fcc77345eb200.html b/dir_7a46e11b413280d6e79fcc77345eb200.html new file mode 100644 index 0000000000..f55153bcaa --- /dev/null +++ b/dir_7a46e11b413280d6e79fcc77345eb200.html @@ -0,0 +1,111 @@ + + + + + + + +Topaz: /github/workspace/include/tz/io Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Topaz 5.0 +
+
Topaz Game Engine
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
io Directory Reference
+
+
+ + + + +

+Files

 image.hpp
 
+
+ + +
+ + diff --git a/dir_9506c1c2651d353b3f6ed84ab570b7c0.html b/dir_9506c1c2651d353b3f6ed84ab570b7c0.html new file mode 100644 index 0000000000..25a10857c7 --- /dev/null +++ b/dir_9506c1c2651d353b3f6ed84ab570b7c0.html @@ -0,0 +1,128 @@ + + + + + + + +Topaz: /github/workspace/include/tz Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Topaz 5.0 +
+
Topaz Game Engine
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
tz Directory Reference
+
+
+ + + + + + + + + + + + + + +

+Directories

 core
 
 detail
 
 gpu
 
 io
 
 os
 
 ren
 
+ + + + + +

+Files

 main.hpp
 
 topaz.hpp
 
+
+ + +
+ + diff --git a/dir_987076663052214ec7c470a7623166a1.html b/dir_987076663052214ec7c470a7623166a1.html new file mode 100644 index 0000000000..2cbebc717a --- /dev/null +++ b/dir_987076663052214ec7c470a7623166a1.html @@ -0,0 +1,129 @@ + + + + + + + +Topaz: /github/workspace/include/tz/core Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Topaz 5.0 +
+
Topaz Game Engine
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
core Directory Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + +

+Files

 error.hpp
 
 handle.hpp
 
 job.hpp
 
 lua.hpp
 
 matrix.hpp
 
 memory.hpp
 
 quaternion.hpp
 
 time.hpp
 
 trs.hpp
 
 vector.hpp
 
+
+ + +
+ + diff --git a/dir_cb78ce028b4a9ec0b14f4440ccaf7873.html b/dir_cb78ce028b4a9ec0b14f4440ccaf7873.html new file mode 100644 index 0000000000..ec3859a4ff --- /dev/null +++ b/dir_cb78ce028b4a9ec0b14f4440ccaf7873.html @@ -0,0 +1,111 @@ + + + + + + + +Topaz: /github/workspace/include/tz/ren Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Topaz 5.0 +
+
Topaz Game Engine
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
ren Directory Reference
+
+
+ + + + +

+Files

 quad.hpp
 
+
+ + +
+ + diff --git a/dir_d44c64559bbebec7f509842c48db8b23.html b/dir_d44c64559bbebec7f509842c48db8b23.html new file mode 100644 index 0000000000..fc06cbddf3 --- /dev/null +++ b/dir_d44c64559bbebec7f509842c48db8b23.html @@ -0,0 +1,111 @@ + + + + + + + +Topaz: /github/workspace/include Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Topaz 5.0 +
+
Topaz Game Engine
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
include Directory Reference
+
+
+ + + + +

+Directories

 tz
 
+
+ + +
+ + diff --git a/doc.svg b/doc.svg new file mode 100644 index 0000000000..0b928a5317 --- /dev/null +++ b/doc.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/docd.svg b/docd.svg new file mode 100644 index 0000000000..ac18b27552 --- /dev/null +++ b/docd.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/doxygen-awesome.css b/doxygen-awesome.css new file mode 100644 index 0000000000..415de70758 --- /dev/null +++ b/doxygen-awesome.css @@ -0,0 +1,2681 @@ +/** + +Doxygen Awesome +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2023 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +html { + /* primary theme color. This will affect the entire websites color scheme: links, arrows, labels, ... */ + --primary-color: #1779c4; + --primary-dark-color: #335c80; + --primary-light-color: #70b1e9; + + /* page base colors */ + --page-background-color: #ffffff; + --page-foreground-color: #2f4153; + --page-secondary-foreground-color: #6f7e8e; + + /* color for all separators on the website: hr, borders, ... */ + --separator-color: #dedede; + + /* border radius for all rounded components. Will affect many components, like dropdowns, memitems, codeblocks, ... */ + --border-radius-large: 8px; + --border-radius-small: 4px; + --border-radius-medium: 6px; + + /* default spacings. Most components reference these values for spacing, to provide uniform spacing on the page. */ + --spacing-small: 5px; + --spacing-medium: 10px; + --spacing-large: 16px; + + /* default box shadow used for raising an element above the normal content. Used in dropdowns, search result, ... */ + --box-shadow: 0 2px 8px 0 rgba(0,0,0,.075); + + --odd-color: rgba(0,0,0,.028); + + /* font-families. will affect all text on the website + * font-family: the normal font for text, headlines, menus + * font-family-monospace: used for preformatted text in memtitle, code, fragments + */ + --font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif; + --font-family-monospace: ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; + + /* font sizes */ + --page-font-size: 15.6px; + --navigation-font-size: 14.4px; + --toc-font-size: 13.4px; + --code-font-size: 14px; /* affects code, fragment */ + --title-font-size: 22px; + + /* content text properties. These only affect the page content, not the navigation or any other ui elements */ + --content-line-height: 27px; + /* The content is centered and constraint in it's width. To make the content fill the whole page, set the variable to auto.*/ + --content-maxwidth: auto; + --table-line-height: 24px; + --toc-sticky-top: var(--spacing-medium); + --toc-width: 200px; + --toc-max-height: calc(100vh - 2 * var(--spacing-medium) - 85px); + + /* colors for various content boxes: @warning, @note, @deprecated @bug */ + --warning-color: #faf3d8; + --warning-color-dark: #f3a600; + --warning-color-darker: #5f4204; + --note-color: #e4f3ff; + --note-color-dark: #1879C4; + --note-color-darker: #274a5c; + --todo-color: #e4dafd; + --todo-color-dark: #5b2bdd; + --todo-color-darker: #2a0d72; + --deprecated-color: #ecf0f3; + --deprecated-color-dark: #5b6269; + --deprecated-color-darker: #43454a; + --bug-color: #f8d1cc; + --bug-color-dark: #b61825; + --bug-color-darker: #75070f; + --invariant-color: #d8f1e3; + --invariant-color-dark: #44b86f; + --invariant-color-darker: #265532; + + /* blockquote colors */ + --blockquote-background: #f8f9fa; + --blockquote-foreground: #636568; + + /* table colors */ + --tablehead-background: #f1f1f1; + --tablehead-foreground: var(--page-foreground-color); + + /* menu-display: block | none + * Visibility of the top navigation on screens >= 768px. On smaller screen the menu is always visible. + * `GENERATE_TREEVIEW` MUST be enabled! + */ + --menu-display: block; + + --menu-focus-foreground: var(--page-background-color); + --menu-focus-background: var(--primary-color); + --menu-selected-background: rgba(0,0,0,.05); + + + --header-background: var(--page-background-color); + --header-foreground: var(--page-foreground-color); + + /* searchbar colors */ + --searchbar-background: var(--side-nav-background); + --searchbar-foreground: var(--page-foreground-color); + + /* searchbar size + * (`searchbar-width` is only applied on screens >= 768px. + * on smaller screens the searchbar will always fill the entire screen width) */ + --searchbar-height: 33px; + --searchbar-width: 210px; + --searchbar-border-radius: var(--searchbar-height); + + /* code block colors */ + --code-background: #f5f5f5; + --code-foreground: var(--page-foreground-color); + + /* fragment colors */ + --fragment-background: #F8F9FA; + --fragment-foreground: #37474F; + --fragment-keyword: #bb6bb2; + --fragment-keywordtype: #8258b3; + --fragment-keywordflow: #d67c3b; + --fragment-token: #438a59; + --fragment-comment: #969696; + --fragment-link: #5383d6; + --fragment-preprocessor: #46aaa5; + --fragment-linenumber-color: #797979; + --fragment-linenumber-background: #f4f4f5; + --fragment-linenumber-border: #e3e5e7; + --fragment-lineheight: 20px; + + /* sidebar navigation (treeview) colors */ + --side-nav-background: #fbfbfb; + --side-nav-foreground: var(--page-foreground-color); + --side-nav-arrow-opacity: 0; + --side-nav-arrow-hover-opacity: 0.9; + + --toc-background: var(--side-nav-background); + --toc-foreground: var(--side-nav-foreground); + + /* height of an item in any tree / collapsible table */ + --tree-item-height: 30px; + + --memname-font-size: var(--code-font-size); + --memtitle-font-size: 18px; + + --webkit-scrollbar-size: 7px; + --webkit-scrollbar-padding: 4px; + --webkit-scrollbar-color: var(--separator-color); + + --animation-duration: .12s +} + +@media screen and (max-width: 767px) { + html { + --page-font-size: 16px; + --navigation-font-size: 16px; + --toc-font-size: 15px; + --code-font-size: 15px; /* affects code, fragment */ + --title-font-size: 22px; + } +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) { + color-scheme: dark; + + --primary-color: #1982d2; + --primary-dark-color: #86a9c4; + --primary-light-color: #4779ac; + + --box-shadow: 0 2px 8px 0 rgba(0,0,0,.35); + + --odd-color: rgba(100,100,100,.06); + + --menu-selected-background: rgba(0,0,0,.4); + + --page-background-color: #1C1D1F; + --page-foreground-color: #d2dbde; + --page-secondary-foreground-color: #859399; + --separator-color: #38393b; + --side-nav-background: #252628; + + --code-background: #2a2c2f; + + --tablehead-background: #2a2c2f; + + --blockquote-background: #222325; + --blockquote-foreground: #7e8c92; + + --warning-color: #3b2e04; + --warning-color-dark: #f1b602; + --warning-color-darker: #ceb670; + --note-color: #163750; + --note-color-dark: #1982D2; + --note-color-darker: #dcf0fa; + --todo-color: #2a2536; + --todo-color-dark: #7661b3; + --todo-color-darker: #ae9ed6; + --deprecated-color: #2e323b; + --deprecated-color-dark: #738396; + --deprecated-color-darker: #abb0bd; + --bug-color: #2e1917; + --bug-color-dark: #ad2617; + --bug-color-darker: #f5b1aa; + --invariant-color: #303a35; + --invariant-color-dark: #76ce96; + --invariant-color-darker: #cceed5; + + --fragment-background: #282c34; + --fragment-foreground: #dbe4eb; + --fragment-keyword: #cc99cd; + --fragment-keywordtype: #ab99cd; + --fragment-keywordflow: #e08000; + --fragment-token: #7ec699; + --fragment-comment: #999999; + --fragment-link: #98c0e3; + --fragment-preprocessor: #65cabe; + --fragment-linenumber-color: #cccccc; + --fragment-linenumber-background: #35393c; + --fragment-linenumber-border: #1f1f1f; + } +} + +/* dark mode variables are defined twice, to support both the dark-mode without and with doxygen-awesome-darkmode-toggle.js */ +html.dark-mode { + color-scheme: dark; + + --primary-color: #1982d2; + --primary-dark-color: #86a9c4; + --primary-light-color: #4779ac; + + --box-shadow: 0 2px 8px 0 rgba(0,0,0,.30); + + --odd-color: rgba(100,100,100,.06); + + --menu-selected-background: rgba(0,0,0,.4); + + --page-background-color: #1C1D1F; + --page-foreground-color: #d2dbde; + --page-secondary-foreground-color: #859399; + --separator-color: #38393b; + --side-nav-background: #252628; + + --code-background: #2a2c2f; + + --tablehead-background: #2a2c2f; + + --blockquote-background: #222325; + --blockquote-foreground: #7e8c92; + + --warning-color: #3b2e04; + --warning-color-dark: #f1b602; + --warning-color-darker: #ceb670; + --note-color: #163750; + --note-color-dark: #1982D2; + --note-color-darker: #dcf0fa; + --todo-color: #2a2536; + --todo-color-dark: #7661b3; + --todo-color-darker: #ae9ed6; + --deprecated-color: #2e323b; + --deprecated-color-dark: #738396; + --deprecated-color-darker: #abb0bd; + --bug-color: #2e1917; + --bug-color-dark: #ad2617; + --bug-color-darker: #f5b1aa; + --invariant-color: #303a35; + --invariant-color-dark: #76ce96; + --invariant-color-darker: #cceed5; + + --fragment-background: #282c34; + --fragment-foreground: #dbe4eb; + --fragment-keyword: #cc99cd; + --fragment-keywordtype: #ab99cd; + --fragment-keywordflow: #e08000; + --fragment-token: #7ec699; + --fragment-comment: #999999; + --fragment-link: #98c0e3; + --fragment-preprocessor: #65cabe; + --fragment-linenumber-color: #cccccc; + --fragment-linenumber-background: #35393c; + --fragment-linenumber-border: #1f1f1f; +} + +body { + color: var(--page-foreground-color); + background-color: var(--page-background-color); + font-size: var(--page-font-size); +} + +body, table, div, p, dl, #nav-tree .label, .title, +.sm-dox a, .sm-dox a:hover, .sm-dox a:focus, #projectname, +.SelectItem, #MSearchField, .navpath li.navelem a, +.navpath li.navelem a:hover, p.reference, p.definition, div.toc li, div.toc h3 { + font-family: var(--font-family); +} + +h1, h2, h3, h4, h5 { + margin-top: 1em; + font-weight: 600; + line-height: initial; +} + +p, div, table, dl, p.reference, p.definition { + font-size: var(--page-font-size); +} + +p.reference, p.definition { + color: var(--page-secondary-foreground-color); +} + +a:link, a:visited, a:hover, a:focus, a:active { + color: var(--primary-color) !important; + font-weight: 500; + background: none; +} + +a.anchor { + scroll-margin-top: var(--spacing-large); + display: block; +} + +/* + Title and top navigation + */ + +#top { + background: var(--header-background); + border-bottom: 1px solid var(--separator-color); +} + +@media screen and (min-width: 768px) { + #top { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + align-items: center; + } +} + +#main-nav { + flex-grow: 5; + padding: var(--spacing-small) var(--spacing-medium); +} + +#titlearea { + width: auto; + padding: var(--spacing-medium) var(--spacing-large); + background: none; + color: var(--header-foreground); + border-bottom: none; +} + +@media screen and (max-width: 767px) { + #titlearea { + padding-bottom: var(--spacing-small); + } +} + +#titlearea table tbody tr { + height: auto !important; +} + +#projectname { + font-size: var(--title-font-size); + font-weight: 600; +} + +#projectnumber { + font-family: inherit; + font-size: 60%; +} + +#projectbrief { + font-family: inherit; + font-size: 80%; +} + +#projectlogo { + vertical-align: middle; +} + +#projectlogo img { + max-height: calc(var(--title-font-size) * 2); + margin-right: var(--spacing-small); +} + +.sm-dox, .tabs, .tabs2, .tabs3 { + background: none; + padding: 0; +} + +.tabs, .tabs2, .tabs3 { + border-bottom: 1px solid var(--separator-color); + margin-bottom: -1px; +} + +.main-menu-btn-icon, .main-menu-btn-icon:before, .main-menu-btn-icon:after { + background: var(--page-secondary-foreground-color); +} + +@media screen and (max-width: 767px) { + .sm-dox a span.sub-arrow { + background: var(--code-background); + } + + #main-menu a.has-submenu span.sub-arrow { + color: var(--page-secondary-foreground-color); + border-radius: var(--border-radius-medium); + } + + #main-menu a.has-submenu:hover span.sub-arrow { + color: var(--page-foreground-color); + } +} + +@media screen and (min-width: 768px) { + .sm-dox li, .tablist li { + display: var(--menu-display); + } + + .sm-dox a span.sub-arrow { + border-color: var(--header-foreground) transparent transparent transparent; + } + + .sm-dox a:hover span.sub-arrow { + border-color: var(--menu-focus-foreground) transparent transparent transparent; + } + + .sm-dox ul a span.sub-arrow { + border-color: transparent transparent transparent var(--page-foreground-color); + } + + .sm-dox ul a:hover span.sub-arrow { + border-color: transparent transparent transparent var(--menu-focus-foreground); + } +} + +.sm-dox ul { + background: var(--page-background-color); + box-shadow: var(--box-shadow); + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium) !important; + padding: var(--spacing-small); + animation: ease-out 150ms slideInMenu; +} + +@keyframes slideInMenu { + from { + opacity: 0; + transform: translate(0px, -2px); + } + + to { + opacity: 1; + transform: translate(0px, 0px); + } +} + +.sm-dox ul a { + color: var(--page-foreground-color) !important; + background: var(--page-background-color); + font-size: var(--navigation-font-size); +} + +.sm-dox>li>ul:after { + border-bottom-color: var(--page-background-color) !important; +} + +.sm-dox>li>ul:before { + border-bottom-color: var(--separator-color) !important; +} + +.sm-dox ul a:hover, .sm-dox ul a:active, .sm-dox ul a:focus { + font-size: var(--navigation-font-size) !important; + color: var(--menu-focus-foreground) !important; + text-shadow: none; + background-color: var(--menu-focus-background); + border-radius: var(--border-radius-small) !important; +} + +.sm-dox a, .sm-dox a:focus, .tablist li, .tablist li a, .tablist li.current a { + text-shadow: none; + background: transparent; + background-image: none !important; + color: var(--header-foreground) !important; + font-weight: normal; + font-size: var(--navigation-font-size); + border-radius: var(--border-radius-small) !important; +} + +.sm-dox a:focus { + outline: auto; +} + +.sm-dox a:hover, .sm-dox a:active, .tablist li a:hover { + text-shadow: none; + font-weight: normal; + background: var(--menu-focus-background); + color: var(--menu-focus-foreground) !important; + border-radius: var(--border-radius-small) !important; + font-size: var(--navigation-font-size); +} + +.tablist li.current { + border-radius: var(--border-radius-small); + background: var(--menu-selected-background); +} + +.tablist li { + margin: var(--spacing-small) 0 var(--spacing-small) var(--spacing-small); +} + +.tablist a { + padding: 0 var(--spacing-large); +} + + +/* + Search box + */ + +#MSearchBox { + height: var(--searchbar-height); + background: var(--searchbar-background); + border-radius: var(--searchbar-border-radius); + border: 1px solid var(--separator-color); + overflow: hidden; + width: var(--searchbar-width); + position: relative; + box-shadow: none; + display: block; + margin-top: 0; +} + +/* until Doxygen 1.9.4 */ +.left img#MSearchSelect { + left: 0; + user-select: none; + padding-left: 8px; +} + +/* Doxygen 1.9.5 */ +.left span#MSearchSelect { + left: 0; + user-select: none; + margin-left: 8px; + padding: 0; +} + +.left #MSearchSelect[src$=".png"] { + padding-left: 0 +} + +.SelectionMark { + user-select: none; +} + +.tabs .left #MSearchSelect { + padding-left: 0; +} + +.tabs #MSearchBox { + position: absolute; + right: var(--spacing-medium); +} + +@media screen and (max-width: 767px) { + .tabs #MSearchBox { + position: relative; + right: 0; + margin-left: var(--spacing-medium); + margin-top: 0; + } +} + +#MSearchSelectWindow, #MSearchResultsWindow { + z-index: 9999; +} + +#MSearchBox.MSearchBoxActive { + border-color: var(--primary-color); + box-shadow: inset 0 0 0 1px var(--primary-color); +} + +#main-menu > li:last-child { + margin-right: 0; +} + +@media screen and (max-width: 767px) { + #main-menu > li:last-child { + height: 50px; + } +} + +#MSearchField { + font-size: var(--navigation-font-size); + height: calc(var(--searchbar-height) - 2px); + background: transparent; + width: calc(var(--searchbar-width) - 64px); +} + +.MSearchBoxActive #MSearchField { + color: var(--searchbar-foreground); +} + +#MSearchSelect { + top: calc(calc(var(--searchbar-height) / 2) - 11px); +} + +#MSearchBox span.left, #MSearchBox span.right { + background: none; + background-image: none; +} + +#MSearchBox span.right { + padding-top: calc(calc(var(--searchbar-height) / 2) - 12px); + position: absolute; + right: var(--spacing-small); +} + +.tabs #MSearchBox span.right { + top: calc(calc(var(--searchbar-height) / 2) - 12px); +} + +@keyframes slideInSearchResults { + from { + opacity: 0; + transform: translate(0, 15px); + } + + to { + opacity: 1; + transform: translate(0, 20px); + } +} + +#MSearchResultsWindow { + left: auto !important; + right: var(--spacing-medium); + border-radius: var(--border-radius-large); + border: 1px solid var(--separator-color); + transform: translate(0, 20px); + box-shadow: var(--box-shadow); + animation: ease-out 280ms slideInSearchResults; + background: var(--page-background-color); +} + +iframe#MSearchResults { + margin: 4px; +} + +iframe { + color-scheme: normal; +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) iframe#MSearchResults { + filter: invert() hue-rotate(180deg); + } +} + +html.dark-mode iframe#MSearchResults { + filter: invert() hue-rotate(180deg); +} + +#MSearchResults .SRPage { + background-color: transparent; +} + +#MSearchResults .SRPage .SREntry { + font-size: 10pt; + padding: var(--spacing-small) var(--spacing-medium); +} + +#MSearchSelectWindow { + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium); + box-shadow: var(--box-shadow); + background: var(--page-background-color); + padding-top: var(--spacing-small); + padding-bottom: var(--spacing-small); +} + +#MSearchSelectWindow a.SelectItem { + font-size: var(--navigation-font-size); + line-height: var(--content-line-height); + margin: 0 var(--spacing-small); + border-radius: var(--border-radius-small); + color: var(--page-foreground-color) !important; + font-weight: normal; +} + +#MSearchSelectWindow a.SelectItem:hover { + background: var(--menu-focus-background); + color: var(--menu-focus-foreground) !important; +} + +@media screen and (max-width: 767px) { + #MSearchBox { + margin-top: var(--spacing-medium); + margin-bottom: var(--spacing-medium); + width: calc(100vw - 30px); + } + + #main-menu > li:last-child { + float: none !important; + } + + #MSearchField { + width: calc(100vw - 110px); + } + + @keyframes slideInSearchResultsMobile { + from { + opacity: 0; + transform: translate(0, 15px); + } + + to { + opacity: 1; + transform: translate(0, 20px); + } + } + + #MSearchResultsWindow { + left: var(--spacing-medium) !important; + right: var(--spacing-medium); + overflow: auto; + transform: translate(0, 20px); + animation: ease-out 280ms slideInSearchResultsMobile; + width: auto !important; + } + + /* + * Overwrites for fixing the searchbox on mobile in doxygen 1.9.2 + */ + label.main-menu-btn ~ #searchBoxPos1 { + top: 3px !important; + right: 6px !important; + left: 45px; + display: flex; + } + + label.main-menu-btn ~ #searchBoxPos1 > #MSearchBox { + margin-top: 0; + margin-bottom: 0; + flex-grow: 2; + float: left; + } +} + +/* + Tree view + */ + +#side-nav { + padding: 0 !important; + background: var(--side-nav-background); + min-width: 8px; + max-width: 50vw; +} + +@media screen and (max-width: 767px) { + #side-nav { + display: none; + } + + #doc-content { + margin-left: 0 !important; + } +} + +#nav-tree { + background: transparent; + margin-right: 1px; +} + +#nav-tree .label { + font-size: var(--navigation-font-size); +} + +#nav-tree .item { + height: var(--tree-item-height); + line-height: var(--tree-item-height); + overflow: hidden; + text-overflow: ellipsis; +} + +#nav-tree .item > a:focus { + outline: none; +} + +#nav-sync { + bottom: 12px; + right: 12px; + top: auto !important; + user-select: none; +} + +#nav-tree .selected { + text-shadow: none; + background-image: none; + background-color: transparent; + position: relative; + color: var(--primary-color) !important; + font-weight: 500; +} + +#nav-tree .selected::after { + content: ""; + position: absolute; + top: 1px; + bottom: 1px; + left: 0; + width: 4px; + border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0; + background: var(--primary-color); +} + + +#nav-tree a { + color: var(--side-nav-foreground) !important; + font-weight: normal; +} + +#nav-tree a:focus { + outline-style: auto; +} + +#nav-tree .arrow { + opacity: var(--side-nav-arrow-opacity); + background: none; +} + +.arrow { + color: inherit; + cursor: pointer; + font-size: 45%; + vertical-align: middle; + margin-right: 2px; + font-family: serif; + height: auto; + text-align: right; +} + +#nav-tree div.item:hover .arrow, #nav-tree a:focus .arrow { + opacity: var(--side-nav-arrow-hover-opacity); +} + +#nav-tree .selected a { + color: var(--primary-color) !important; + font-weight: bolder; + font-weight: 600; +} + +.ui-resizable-e { + width: 4px; + background: transparent; + box-shadow: inset -1px 0 0 0 var(--separator-color); +} + +/* + Contents + */ + +div.header { + border-bottom: 1px solid var(--separator-color); + background-color: var(--page-background-color); + background-image: none; +} + +@media screen and (min-width: 1000px) { + #doc-content > div > div.contents, + .PageDoc > div.contents { + display: flex; + flex-direction: row-reverse; + flex-wrap: nowrap; + align-items: flex-start; + } + + div.contents .textblock { + min-width: 200px; + flex-grow: 1; + } +} + +div.contents, div.header .title, div.header .summary { + max-width: var(--content-maxwidth); +} + +div.contents, div.header .title { + line-height: initial; + margin: calc(var(--spacing-medium) + .2em) auto var(--spacing-medium) auto; +} + +div.header .summary { + margin: var(--spacing-medium) auto 0 auto; +} + +div.headertitle { + padding: 0; +} + +div.header .title { + font-weight: 600; + font-size: 225%; + padding: var(--spacing-medium) var(--spacing-large); + word-break: break-word; +} + +div.header .summary { + width: auto; + display: block; + float: none; + padding: 0 var(--spacing-large); +} + +td.memSeparator { + border-color: var(--separator-color); +} + +span.mlabel { + background: var(--primary-color); + border: none; + padding: 4px 9px; + border-radius: 12px; + margin-right: var(--spacing-medium); +} + +span.mlabel:last-of-type { + margin-right: 2px; +} + +div.contents { + padding: 0 var(--spacing-large); +} + +div.contents p, div.contents li { + line-height: var(--content-line-height); +} + +div.contents div.dyncontent { + margin: var(--spacing-medium) 0; +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) div.contents div.dyncontent img, + html:not(.light-mode) div.contents center img, + html:not(.light-mode) div.contents > table img, + html:not(.light-mode) div.contents div.dyncontent iframe, + html:not(.light-mode) div.contents center iframe, + html:not(.light-mode) div.contents table iframe, + html:not(.light-mode) div.contents .dotgraph iframe { + filter: brightness(89%) hue-rotate(180deg) invert(); + } +} + +html.dark-mode div.contents div.dyncontent img, +html.dark-mode div.contents center img, +html.dark-mode div.contents > table img, +html.dark-mode div.contents div.dyncontent iframe, +html.dark-mode div.contents center iframe, +html.dark-mode div.contents table iframe, +html.dark-mode div.contents .dotgraph iframe + { + filter: brightness(89%) hue-rotate(180deg) invert(); +} + +h2.groupheader { + border-bottom: 0px; + color: var(--page-foreground-color); + box-shadow: + 100px 0 var(--page-background-color), + -100px 0 var(--page-background-color), + 100px 0.75px var(--separator-color), + -100px 0.75px var(--separator-color), + 500px 0 var(--page-background-color), + -500px 0 var(--page-background-color), + 500px 0.75px var(--separator-color), + -500px 0.75px var(--separator-color), + 900px 0 var(--page-background-color), + -900px 0 var(--page-background-color), + 900px 0.75px var(--separator-color), + -900px 0.75px var(--separator-color), + 1400px 0 var(--page-background-color), + -1400px 0 var(--page-background-color), + 1400px 0.75px var(--separator-color), + -1400px 0.75px var(--separator-color), + 1900px 0 var(--page-background-color), + -1900px 0 var(--page-background-color), + 1900px 0.75px var(--separator-color), + -1900px 0.75px var(--separator-color); +} + +blockquote { + margin: 0 var(--spacing-medium) 0 var(--spacing-medium); + padding: var(--spacing-small) var(--spacing-large); + background: var(--blockquote-background); + color: var(--blockquote-foreground); + border-left: 0; + overflow: visible; + border-radius: var(--border-radius-medium); + overflow: visible; + position: relative; +} + +blockquote::before, blockquote::after { + font-weight: bold; + font-family: serif; + font-size: 360%; + opacity: .15; + position: absolute; +} + +blockquote::before { + content: "“"; + left: -10px; + top: 4px; +} + +blockquote::after { + content: "”"; + right: -8px; + bottom: -25px; +} + +blockquote p { + margin: var(--spacing-small) 0 var(--spacing-medium) 0; +} +.paramname, .paramname em { + font-weight: 600; + color: var(--primary-dark-color); +} + +.paramname > code { + border: 0; +} + +table.params .paramname { + font-weight: 600; + font-family: var(--font-family-monospace); + font-size: var(--code-font-size); + padding-right: var(--spacing-small); + line-height: var(--table-line-height); +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px var(--primary-light-color); +} + +.alphachar a { + color: var(--page-foreground-color); +} + +.dotgraph { + max-width: 100%; + overflow-x: scroll; +} + +.dotgraph .caption { + position: sticky; + left: 0; +} + +/* Wrap Graphviz graphs with the `interactive_dotgraph` class if `INTERACTIVE_SVG = YES` */ +.interactive_dotgraph .dotgraph iframe { + max-width: 100%; +} + +/* + Table of Contents + */ + +div.contents .toc { + max-height: var(--toc-max-height); + min-width: var(--toc-width); + border: 0; + border-left: 1px solid var(--separator-color); + border-radius: 0; + background-color: var(--page-background-color); + box-shadow: none; + position: sticky; + top: var(--toc-sticky-top); + padding: 0 var(--spacing-large); + margin: var(--spacing-small) 0 var(--spacing-large) var(--spacing-large); +} + +div.toc h3 { + color: var(--toc-foreground); + font-size: var(--navigation-font-size); + margin: var(--spacing-large) 0 var(--spacing-medium) 0; +} + +div.toc li { + padding: 0; + background: none; + line-height: var(--toc-font-size); + margin: var(--toc-font-size) 0 0 0; +} + +div.toc li::before { + display: none; +} + +div.toc ul { + margin-top: 0 +} + +div.toc li a { + font-size: var(--toc-font-size); + color: var(--page-foreground-color) !important; + text-decoration: none; +} + +div.toc li a:hover, div.toc li a.active { + color: var(--primary-color) !important; +} + +div.toc li a.aboveActive { + color: var(--page-secondary-foreground-color) !important; +} + + +@media screen and (max-width: 999px) { + div.contents .toc { + max-height: 45vh; + float: none; + width: auto; + margin: 0 0 var(--spacing-medium) 0; + position: relative; + top: 0; + position: relative; + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium); + background-color: var(--toc-background); + box-shadow: var(--box-shadow); + } + + div.contents .toc.interactive { + max-height: calc(var(--navigation-font-size) + 2 * var(--spacing-large)); + overflow: hidden; + } + + div.contents .toc > h3 { + -webkit-tap-highlight-color: transparent; + cursor: pointer; + position: sticky; + top: 0; + background-color: var(--toc-background); + margin: 0; + padding: var(--spacing-large) 0; + display: block; + } + + div.contents .toc.interactive > h3::before { + content: ""; + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 5px solid var(--primary-color); + display: inline-block; + margin-right: var(--spacing-small); + margin-bottom: calc(var(--navigation-font-size) / 4); + transform: rotate(-90deg); + transition: transform var(--animation-duration) ease-out; + } + + div.contents .toc.interactive.open > h3::before { + transform: rotate(0deg); + } + + div.contents .toc.interactive.open { + max-height: 45vh; + overflow: auto; + transition: max-height 0.2s ease-in-out; + } + + div.contents .toc a, div.contents .toc a.active { + color: var(--primary-color) !important; + } + + div.contents .toc a:hover { + text-decoration: underline; + } +} + +/* + Code & Fragments + */ + +code, div.fragment, pre.fragment { + border-radius: var(--border-radius-small); + border: 1px solid var(--separator-color); + overflow: hidden; +} + +code { + display: inline; + background: var(--code-background); + color: var(--code-foreground); + padding: 2px 6px; +} + +div.fragment, pre.fragment { + margin: var(--spacing-medium) 0; + padding: calc(var(--spacing-large) - (var(--spacing-large) / 6)) var(--spacing-large); + background: var(--fragment-background); + color: var(--fragment-foreground); + overflow-x: auto; +} + +@media screen and (max-width: 767px) { + div.fragment, pre.fragment { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-right: 0; + } + + .contents > div.fragment, + .textblock > div.fragment, + .textblock > pre.fragment, + .textblock > .tabbed > ul > li > div.fragment, + .textblock > .tabbed > ul > li > pre.fragment, + .contents > .doxygen-awesome-fragment-wrapper > div.fragment, + .textblock > .doxygen-awesome-fragment-wrapper > div.fragment, + .textblock > .doxygen-awesome-fragment-wrapper > pre.fragment, + .textblock > .tabbed > ul > li > .doxygen-awesome-fragment-wrapper > div.fragment, + .textblock > .tabbed > ul > li > .doxygen-awesome-fragment-wrapper > pre.fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-large)); + border-radius: 0; + border-left: 0; + } + + .textblock li > .fragment, + .textblock li > .doxygen-awesome-fragment-wrapper > .fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-large)); + } + + .memdoc li > .fragment, + .memdoc li > .doxygen-awesome-fragment-wrapper > .fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-medium)); + } + + .textblock ul, .memdoc ul { + overflow: initial; + } + + .memdoc > div.fragment, + .memdoc > pre.fragment, + dl dd > div.fragment, + dl dd pre.fragment, + .memdoc > .doxygen-awesome-fragment-wrapper > div.fragment, + .memdoc > .doxygen-awesome-fragment-wrapper > pre.fragment, + dl dd > .doxygen-awesome-fragment-wrapper > div.fragment, + dl dd .doxygen-awesome-fragment-wrapper > pre.fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-medium)); + border-radius: 0; + border-left: 0; + } +} + +code, code a, pre.fragment, div.fragment, div.fragment .line, div.fragment span, div.fragment .line a, div.fragment .line span { + font-family: var(--font-family-monospace); + font-size: var(--code-font-size) !important; +} + +div.line:after { + margin-right: var(--spacing-medium); +} + +div.fragment .line, pre.fragment { + white-space: pre; + word-wrap: initial; + line-height: var(--fragment-lineheight); +} + +div.fragment span.keyword { + color: var(--fragment-keyword); +} + +div.fragment span.keywordtype { + color: var(--fragment-keywordtype); +} + +div.fragment span.keywordflow { + color: var(--fragment-keywordflow); +} + +div.fragment span.stringliteral { + color: var(--fragment-token) +} + +div.fragment span.comment { + color: var(--fragment-comment); +} + +div.fragment a.code { + color: var(--fragment-link) !important; +} + +div.fragment span.preprocessor { + color: var(--fragment-preprocessor); +} + +div.fragment span.lineno { + display: inline-block; + width: 27px; + border-right: none; + background: var(--fragment-linenumber-background); + color: var(--fragment-linenumber-color); +} + +div.fragment span.lineno a { + background: none; + color: var(--fragment-link) !important; +} + +div.fragment > .line:first-child .lineno { + box-shadow: -999999px 0px 0 999999px var(--fragment-linenumber-background), -999998px 0px 0 999999px var(--fragment-linenumber-border); + background-color: var(--fragment-linenumber-background) !important; +} + +div.line { + border-radius: var(--border-radius-small); +} + +div.line.glow { + background-color: var(--primary-light-color); + box-shadow: none; +} + +/* + dl warning, attention, note, deprecated, bug, ... + */ + +dl.bug dt a, dl.deprecated dt a, dl.todo dt a { + font-weight: bold !important; +} + +dl.warning, dl.attention, dl.note, dl.deprecated, dl.bug, dl.invariant, dl.pre, dl.post, dl.todo, dl.remark { + padding: var(--spacing-medium); + margin: var(--spacing-medium) 0; + color: var(--page-background-color); + overflow: hidden; + margin-left: 0; + border-radius: var(--border-radius-small); +} + +dl.section dd { + margin-bottom: 2px; +} + +dl.warning, dl.attention { + background: var(--warning-color); + border-left: 8px solid var(--warning-color-dark); + color: var(--warning-color-darker); +} + +dl.warning dt, dl.attention dt { + color: var(--warning-color-dark); +} + +dl.note, dl.remark { + background: var(--note-color); + border-left: 8px solid var(--note-color-dark); + color: var(--note-color-darker); +} + +dl.note dt, dl.remark dt { + color: var(--note-color-dark); +} + +dl.todo { + background: var(--todo-color); + border-left: 8px solid var(--todo-color-dark); + color: var(--todo-color-darker); +} + +dl.todo dt a { + color: var(--todo-color-dark) !important; +} + +dl.bug dt a { + color: var(--todo-color-dark) !important; +} + +dl.bug { + background: var(--bug-color); + border-left: 8px solid var(--bug-color-dark); + color: var(--bug-color-darker); +} + +dl.bug dt a { + color: var(--bug-color-dark) !important; +} + +dl.deprecated { + background: var(--deprecated-color); + border-left: 8px solid var(--deprecated-color-dark); + color: var(--deprecated-color-darker); +} + +dl.deprecated dt a { + color: var(--deprecated-color-dark) !important; +} + +dl.section dd, dl.bug dd, dl.deprecated dd, dl.todo dd { + margin-inline-start: 0px; +} + +dl.invariant, dl.pre, dl.post { + background: var(--invariant-color); + border-left: 8px solid var(--invariant-color-dark); + color: var(--invariant-color-darker); +} + +dl.invariant dt, dl.pre dt, dl.post dt { + color: var(--invariant-color-dark); +} + +/* + memitem + */ + +div.memdoc, div.memproto, h2.memtitle { + box-shadow: none; + background-image: none; + border: none; +} + +div.memdoc { + padding: 0 var(--spacing-medium); + background: var(--page-background-color); +} + +h2.memtitle, div.memitem { + border: 1px solid var(--separator-color); + box-shadow: var(--box-shadow); +} + +h2.memtitle { + box-shadow: 0px var(--spacing-medium) 0 -1px var(--fragment-background), var(--box-shadow); +} + +div.memitem { + transition: none; +} + +div.memproto, h2.memtitle { + background: var(--fragment-background); +} + +h2.memtitle { + font-weight: 500; + font-size: var(--memtitle-font-size); + font-family: var(--font-family-monospace); + border-bottom: none; + border-top-left-radius: var(--border-radius-medium); + border-top-right-radius: var(--border-radius-medium); + word-break: break-all; + position: relative; +} + +h2.memtitle:after { + content: ""; + display: block; + background: var(--fragment-background); + height: var(--spacing-medium); + bottom: calc(0px - var(--spacing-medium)); + left: 0; + right: -14px; + position: absolute; + border-top-right-radius: var(--border-radius-medium); +} + +h2.memtitle > span.permalink { + font-size: inherit; +} + +h2.memtitle > span.permalink > a { + text-decoration: none; + padding-left: 3px; + margin-right: -4px; + user-select: none; + display: inline-block; + margin-top: -6px; +} + +h2.memtitle > span.permalink > a:hover { + color: var(--primary-dark-color) !important; +} + +a:target + h2.memtitle, a:target + h2.memtitle + div.memitem { + border-color: var(--primary-light-color); +} + +div.memitem { + border-top-right-radius: var(--border-radius-medium); + border-bottom-right-radius: var(--border-radius-medium); + border-bottom-left-radius: var(--border-radius-medium); + overflow: hidden; + display: block !important; +} + +div.memdoc { + border-radius: 0; +} + +div.memproto { + border-radius: 0 var(--border-radius-small) 0 0; + overflow: auto; + border-bottom: 1px solid var(--separator-color); + padding: var(--spacing-medium); + margin-bottom: -1px; +} + +div.memtitle { + border-top-right-radius: var(--border-radius-medium); + border-top-left-radius: var(--border-radius-medium); +} + +div.memproto table.memname { + font-family: var(--font-family-monospace); + color: var(--page-foreground-color); + font-size: var(--memname-font-size); + text-shadow: none; +} + +div.memproto div.memtemplate { + font-family: var(--font-family-monospace); + color: var(--primary-dark-color); + font-size: var(--memname-font-size); + margin-left: 2px; + text-shadow: none; +} + +table.mlabels, table.mlabels > tbody { + display: block; +} + +td.mlabels-left { + width: auto; +} + +td.mlabels-right { + margin-top: 3px; + position: sticky; + left: 0; +} + +table.mlabels > tbody > tr:first-child { + display: flex; + justify-content: space-between; + flex-wrap: wrap; +} + +.memname, .memitem span.mlabels { + margin: 0 +} + +/* + reflist + */ + +dl.reflist { + box-shadow: var(--box-shadow); + border-radius: var(--border-radius-medium); + border: 1px solid var(--separator-color); + overflow: hidden; + padding: 0; +} + + +dl.reflist dt, dl.reflist dd { + box-shadow: none; + text-shadow: none; + background-image: none; + border: none; + padding: 12px; +} + + +dl.reflist dt { + font-weight: 500; + border-radius: 0; + background: var(--code-background); + border-bottom: 1px solid var(--separator-color); + color: var(--page-foreground-color) +} + + +dl.reflist dd { + background: none; +} + +/* + Table + */ + +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname), +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody { + display: inline-block; + max-width: 100%; +} + +.contents > table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname):not(.classindex) { + margin-left: calc(0px - var(--spacing-large)); + margin-right: calc(0px - var(--spacing-large)); + max-width: calc(100% + 2 * var(--spacing-large)); +} + +table.fieldtable, +table.markdownTable tbody, +table.doxtable tbody { + border: none; + margin: var(--spacing-medium) 0; + box-shadow: 0 0 0 1px var(--separator-color); + border-radius: var(--border-radius-small); +} + +table.markdownTable, table.doxtable, table.fieldtable { + padding: 1px; +} + +table.doxtable caption { + display: block; +} + +table.fieldtable { + border-collapse: collapse; + width: 100%; +} + +th.markdownTableHeadLeft, +th.markdownTableHeadRight, +th.markdownTableHeadCenter, +th.markdownTableHeadNone, +table.doxtable th { + background: var(--tablehead-background); + color: var(--tablehead-foreground); + font-weight: 600; + font-size: var(--page-font-size); +} + +th.markdownTableHeadLeft:first-child, +th.markdownTableHeadRight:first-child, +th.markdownTableHeadCenter:first-child, +th.markdownTableHeadNone:first-child, +table.doxtable tr th:first-child { + border-top-left-radius: var(--border-radius-small); +} + +th.markdownTableHeadLeft:last-child, +th.markdownTableHeadRight:last-child, +th.markdownTableHeadCenter:last-child, +th.markdownTableHeadNone:last-child, +table.doxtable tr th:last-child { + border-top-right-radius: var(--border-radius-small); +} + +table.markdownTable td, +table.markdownTable th, +table.fieldtable td, +table.fieldtable th, +table.doxtable td, +table.doxtable th { + border: 1px solid var(--separator-color); + padding: var(--spacing-small) var(--spacing-medium); +} + +table.markdownTable td:last-child, +table.markdownTable th:last-child, +table.fieldtable td:last-child, +table.fieldtable th:last-child, +table.doxtable td:last-child, +table.doxtable th:last-child { + border-right: none; +} + +table.markdownTable td:first-child, +table.markdownTable th:first-child, +table.fieldtable td:first-child, +table.fieldtable th:first-child, +table.doxtable td:first-child, +table.doxtable th:first-child { + border-left: none; +} + +table.markdownTable tr:first-child td, +table.markdownTable tr:first-child th, +table.fieldtable tr:first-child td, +table.fieldtable tr:first-child th, +table.doxtable tr:first-child td, +table.doxtable tr:first-child th { + border-top: none; +} + +table.markdownTable tr:last-child td, +table.markdownTable tr:last-child th, +table.fieldtable tr:last-child td, +table.fieldtable tr:last-child th, +table.doxtable tr:last-child td, +table.doxtable tr:last-child th { + border-bottom: none; +} + +table.markdownTable tr, table.doxtable tr { + border-bottom: 1px solid var(--separator-color); +} + +table.markdownTable tr:last-child, table.doxtable tr:last-child { + border-bottom: none; +} + +.full_width_table table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) { + display: block; +} + +.full_width_table table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody { + display: table; + width: 100%; +} + +table.fieldtable th { + font-size: var(--page-font-size); + font-weight: 600; + background-image: none; + background-color: var(--tablehead-background); + color: var(--tablehead-foreground); +} + +table.fieldtable td.fieldtype, .fieldtable td.fieldname, .fieldtable td.fielddoc, .fieldtable th { + border-bottom: 1px solid var(--separator-color); + border-right: 1px solid var(--separator-color); +} + +table.fieldtable tr:last-child td:first-child { + border-bottom-left-radius: var(--border-radius-small); +} + +table.fieldtable tr:last-child td:last-child { + border-bottom-right-radius: var(--border-radius-small); +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: var(--primary-light-color); + box-shadow: none; +} + +table.memberdecls { + display: block; + -webkit-tap-highlight-color: transparent; +} + +table.memberdecls tr[class^='memitem'] { + font-family: var(--font-family-monospace); + font-size: var(--code-font-size); +} + +table.memberdecls tr[class^='memitem'] .memTemplParams { + font-family: var(--font-family-monospace); + font-size: var(--code-font-size); + color: var(--primary-dark-color); + white-space: normal; +} + +table.memberdecls .memItemLeft, +table.memberdecls .memItemRight, +table.memberdecls .memTemplItemLeft, +table.memberdecls .memTemplItemRight, +table.memberdecls .memTemplParams { + transition: none; + padding-top: var(--spacing-small); + padding-bottom: var(--spacing-small); + border-top: 1px solid var(--separator-color); + border-bottom: 1px solid var(--separator-color); + background-color: var(--fragment-background); +} + +table.memberdecls .memTemplItemLeft, +table.memberdecls .memTemplItemRight { + padding-top: 2px; +} + +table.memberdecls .memTemplParams { + border-bottom: 0; + border-left: 1px solid var(--separator-color); + border-right: 1px solid var(--separator-color); + border-radius: var(--border-radius-small) var(--border-radius-small) 0 0; + padding-bottom: var(--spacing-small); +} + +table.memberdecls .memTemplItemLeft { + border-radius: 0 0 0 var(--border-radius-small); + border-left: 1px solid var(--separator-color); + border-top: 0; +} + +table.memberdecls .memTemplItemRight { + border-radius: 0 0 var(--border-radius-small) 0; + border-right: 1px solid var(--separator-color); + padding-left: 0; + border-top: 0; +} + +table.memberdecls .memItemLeft { + border-radius: var(--border-radius-small) 0 0 var(--border-radius-small); + border-left: 1px solid var(--separator-color); + padding-left: var(--spacing-medium); + padding-right: 0; +} + +table.memberdecls .memItemRight { + border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0; + border-right: 1px solid var(--separator-color); + padding-right: var(--spacing-medium); + padding-left: 0; + +} + +table.memberdecls .mdescLeft, table.memberdecls .mdescRight { + background: none; + color: var(--page-foreground-color); + padding: var(--spacing-small) 0; +} + +table.memberdecls .memItemLeft, +table.memberdecls .memTemplItemLeft { + padding-right: var(--spacing-medium); +} + +table.memberdecls .memSeparator { + background: var(--page-background-color); + height: var(--spacing-large); + border: 0; + transition: none; +} + +table.memberdecls .groupheader { + margin-bottom: var(--spacing-large); +} + +table.memberdecls .inherit_header td { + padding: 0 0 var(--spacing-medium) 0; + text-indent: -12px; + color: var(--page-secondary-foreground-color); +} + +table.memberdecls img[src="closed.png"], +table.memberdecls img[src="open.png"], +div.dynheader img[src="open.png"], +div.dynheader img[src="closed.png"] { + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 5px solid var(--primary-color); + margin-top: 8px; + display: block; + float: left; + margin-left: -10px; + transition: transform var(--animation-duration) ease-out; +} + +table.memberdecls img { + margin-right: 10px; +} + +table.memberdecls img[src="closed.png"], +div.dynheader img[src="closed.png"] { + transform: rotate(-90deg); + +} + +.compoundTemplParams { + font-family: var(--font-family-monospace); + color: var(--primary-dark-color); + font-size: var(--code-font-size); +} + +@media screen and (max-width: 767px) { + + table.memberdecls .memItemLeft, + table.memberdecls .memItemRight, + table.memberdecls .mdescLeft, + table.memberdecls .mdescRight, + table.memberdecls .memTemplItemLeft, + table.memberdecls .memTemplItemRight, + table.memberdecls .memTemplParams { + display: block; + text-align: left; + padding-left: var(--spacing-large); + margin: 0 calc(0px - var(--spacing-large)) 0 calc(0px - var(--spacing-large)); + border-right: none; + border-left: none; + border-radius: 0; + white-space: normal; + } + + table.memberdecls .memItemLeft, + table.memberdecls .mdescLeft, + table.memberdecls .memTemplItemLeft { + border-bottom: 0; + padding-bottom: 0; + } + + table.memberdecls .memTemplItemLeft { + padding-top: 0; + } + + table.memberdecls .mdescLeft { + margin-bottom: calc(0px - var(--page-font-size)); + } + + table.memberdecls .memItemRight, + table.memberdecls .mdescRight, + table.memberdecls .memTemplItemRight { + border-top: 0; + padding-top: 0; + padding-right: var(--spacing-large); + overflow-x: auto; + } + + table.memberdecls tr[class^='memitem']:not(.inherit) { + display: block; + width: calc(100vw - 2 * var(--spacing-large)); + } + + table.memberdecls .mdescRight { + color: var(--page-foreground-color); + } + + table.memberdecls tr.inherit { + visibility: hidden; + } + + table.memberdecls tr[style="display: table-row;"] { + display: block !important; + visibility: visible; + width: calc(100vw - 2 * var(--spacing-large)); + animation: fade .5s; + } + + @keyframes fade { + 0% { + opacity: 0; + max-height: 0; + } + + 100% { + opacity: 1; + max-height: 200px; + } + } +} + + +/* + Horizontal Rule + */ + +hr { + margin-top: var(--spacing-large); + margin-bottom: var(--spacing-large); + height: 1px; + background-color: var(--separator-color); + border: 0; +} + +.contents hr { + box-shadow: 100px 0 var(--separator-color), + -100px 0 var(--separator-color), + 500px 0 var(--separator-color), + -500px 0 var(--separator-color), + 900px 0 var(--separator-color), + -900px 0 var(--separator-color), + 1400px 0 var(--separator-color), + -1400px 0 var(--separator-color), + 1900px 0 var(--separator-color), + -1900px 0 var(--separator-color); +} + +.contents img, .contents .center, .contents center, .contents div.image object { + max-width: 100%; + overflow: auto; +} + +@media screen and (max-width: 767px) { + .contents .dyncontent > .center, .contents > center { + margin-left: calc(0px - var(--spacing-large)); + margin-right: calc(0px - var(--spacing-large)); + max-width: calc(100% + 2 * var(--spacing-large)); + } +} + +/* + Directories + */ +div.directory { + border-top: 1px solid var(--separator-color); + border-bottom: 1px solid var(--separator-color); + width: auto; +} + +table.directory { + font-family: var(--font-family); + font-size: var(--page-font-size); + font-weight: normal; + width: 100%; +} + +table.directory td.entry, table.directory td.desc { + padding: calc(var(--spacing-small) / 2) var(--spacing-small); + line-height: var(--table-line-height); +} + +table.directory tr.even td:last-child { + border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0; +} + +table.directory tr.even td:first-child { + border-radius: var(--border-radius-small) 0 0 var(--border-radius-small); +} + +table.directory tr.even:last-child td:last-child { + border-radius: 0 var(--border-radius-small) 0 0; +} + +table.directory tr.even:last-child td:first-child { + border-radius: var(--border-radius-small) 0 0 0; +} + +table.directory td.desc { + min-width: 250px; +} + +table.directory tr.even { + background-color: var(--odd-color); +} + +table.directory tr.odd { + background-color: transparent; +} + +.icona { + width: auto; + height: auto; + margin: 0 var(--spacing-small); +} + +.icon { + background: var(--primary-color); + border-radius: var(--border-radius-small); + font-size: var(--page-font-size); + padding: calc(var(--page-font-size) / 5); + line-height: var(--page-font-size); + transform: scale(0.8); + height: auto; + width: var(--page-font-size); + user-select: none; +} + +.iconfopen, .icondoc, .iconfclosed { + background-position: center; + margin-bottom: 0; + height: var(--table-line-height); +} + +.icondoc { + filter: saturate(0.2); +} + +@media screen and (max-width: 767px) { + div.directory { + margin-left: calc(0px - var(--spacing-large)); + margin-right: calc(0px - var(--spacing-large)); + } +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) .iconfopen, html:not(.light-mode) .iconfclosed { + filter: hue-rotate(180deg) invert(); + } +} + +html.dark-mode .iconfopen, html.dark-mode .iconfclosed { + filter: hue-rotate(180deg) invert(); +} + +/* + Class list + */ + +.classindex dl.odd { + background: var(--odd-color); + border-radius: var(--border-radius-small); +} + +.classindex dl.even { + background-color: transparent; +} + +/* + Class Index Doxygen 1.8 +*/ + +table.classindex { + margin-left: 0; + margin-right: 0; + width: 100%; +} + +table.classindex table div.ah { + background-image: none; + background-color: initial; + border-color: var(--separator-color); + color: var(--page-foreground-color); + box-shadow: var(--box-shadow); + border-radius: var(--border-radius-large); + padding: var(--spacing-small); +} + +div.qindex { + background-color: var(--odd-color); + border-radius: var(--border-radius-small); + border: 1px solid var(--separator-color); + padding: var(--spacing-small) 0; +} + +/* + Footer and nav-path + */ + +#nav-path { + width: 100%; +} + +#nav-path ul { + background-image: none; + background: var(--page-background-color); + border: none; + border-top: 1px solid var(--separator-color); + border-bottom: 1px solid var(--separator-color); + border-bottom: 0; + box-shadow: 0 0.75px 0 var(--separator-color); + font-size: var(--navigation-font-size); +} + +img.footer { + width: 60px; +} + +.navpath li.footer { + color: var(--page-secondary-foreground-color); +} + +address.footer { + color: var(--page-secondary-foreground-color); + margin-bottom: var(--spacing-large); +} + +#nav-path li.navelem { + background-image: none; + display: flex; + align-items: center; +} + +.navpath li.navelem a { + text-shadow: none; + display: inline-block; + color: var(--primary-color) !important; +} + +.navpath li.navelem b { + color: var(--primary-dark-color); + font-weight: 500; +} + +li.navelem { + padding: 0; + margin-left: -8px; +} + +li.navelem:first-child { + margin-left: var(--spacing-large); +} + +li.navelem:first-child:before { + display: none; +} + +#nav-path li.navelem:after { + content: ''; + border: 5px solid var(--page-background-color); + border-bottom-color: transparent; + border-right-color: transparent; + border-top-color: transparent; + transform: translateY(-1px) scaleY(4.2); + z-index: 10; + margin-left: 6px; +} + +#nav-path li.navelem:before { + content: ''; + border: 5px solid var(--separator-color); + border-bottom-color: transparent; + border-right-color: transparent; + border-top-color: transparent; + transform: translateY(-1px) scaleY(3.2); + margin-right: var(--spacing-small); +} + +.navpath li.navelem a:hover { + color: var(--primary-color); +} + +/* + Scrollbars for Webkit +*/ + +#nav-tree::-webkit-scrollbar, +div.fragment::-webkit-scrollbar, +pre.fragment::-webkit-scrollbar, +div.memproto::-webkit-scrollbar, +.contents center::-webkit-scrollbar, +.contents .center::-webkit-scrollbar, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar, +div.contents .toc::-webkit-scrollbar, +.contents .dotgraph::-webkit-scrollbar, +.contents .tabs-overview-container::-webkit-scrollbar { + background: transparent; + width: calc(var(--webkit-scrollbar-size) + var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding)); + height: calc(var(--webkit-scrollbar-size) + var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding)); +} + +#nav-tree::-webkit-scrollbar-thumb, +div.fragment::-webkit-scrollbar-thumb, +pre.fragment::-webkit-scrollbar-thumb, +div.memproto::-webkit-scrollbar-thumb, +.contents center::-webkit-scrollbar-thumb, +.contents .center::-webkit-scrollbar-thumb, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar-thumb, +div.contents .toc::-webkit-scrollbar-thumb, +.contents .dotgraph::-webkit-scrollbar-thumb, +.contents .tabs-overview-container::-webkit-scrollbar-thumb { + background-color: transparent; + border: var(--webkit-scrollbar-padding) solid transparent; + border-radius: calc(var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding)); + background-clip: padding-box; +} + +#nav-tree:hover::-webkit-scrollbar-thumb, +div.fragment:hover::-webkit-scrollbar-thumb, +pre.fragment:hover::-webkit-scrollbar-thumb, +div.memproto:hover::-webkit-scrollbar-thumb, +.contents center:hover::-webkit-scrollbar-thumb, +.contents .center:hover::-webkit-scrollbar-thumb, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody:hover::-webkit-scrollbar-thumb, +div.contents .toc:hover::-webkit-scrollbar-thumb, +.contents .dotgraph:hover::-webkit-scrollbar-thumb, +.contents .tabs-overview-container:hover::-webkit-scrollbar-thumb { + background-color: var(--webkit-scrollbar-color); +} + +#nav-tree::-webkit-scrollbar-track, +div.fragment::-webkit-scrollbar-track, +pre.fragment::-webkit-scrollbar-track, +div.memproto::-webkit-scrollbar-track, +.contents center::-webkit-scrollbar-track, +.contents .center::-webkit-scrollbar-track, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar-track, +div.contents .toc::-webkit-scrollbar-track, +.contents .dotgraph::-webkit-scrollbar-track, +.contents .tabs-overview-container::-webkit-scrollbar-track { + background: transparent; +} + +#nav-tree::-webkit-scrollbar-corner { + background-color: var(--side-nav-background); +} + +#nav-tree, +div.fragment, +pre.fragment, +div.memproto, +.contents center, +.contents .center, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody, +div.contents .toc { + overflow-x: auto; + overflow-x: overlay; +} + +#nav-tree { + overflow-x: auto; + overflow-y: auto; + overflow-y: overlay; +} + +/* + Scrollbars for Firefox +*/ + +#nav-tree, +div.fragment, +pre.fragment, +div.memproto, +.contents center, +.contents .center, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody, +div.contents .toc, +.contents .dotgraph, +.contents .tabs-overview-container { + scrollbar-width: thin; +} + +/* + Optional Dark mode toggle button +*/ + +doxygen-awesome-dark-mode-toggle { + display: inline-block; + margin: 0 0 0 var(--spacing-small); + padding: 0; + width: var(--searchbar-height); + height: var(--searchbar-height); + background: none; + border: none; + border-radius: var(--searchbar-height); + vertical-align: middle; + text-align: center; + line-height: var(--searchbar-height); + font-size: 22px; + display: flex; + align-items: center; + justify-content: center; + user-select: none; + cursor: pointer; +} + +doxygen-awesome-dark-mode-toggle > svg { + transition: transform var(--animation-duration) ease-in-out; +} + +doxygen-awesome-dark-mode-toggle:active > svg { + transform: scale(.5); +} + +doxygen-awesome-dark-mode-toggle:hover { + background-color: rgba(0,0,0,.03); +} + +html.dark-mode doxygen-awesome-dark-mode-toggle:hover { + background-color: rgba(0,0,0,.18); +} + +/* + Optional fragment copy button +*/ +.doxygen-awesome-fragment-wrapper { + position: relative; +} + +doxygen-awesome-fragment-copy-button { + opacity: 0; + background: var(--fragment-background); + width: 28px; + height: 28px; + position: absolute; + right: calc(var(--spacing-large) - (var(--spacing-large) / 2.5)); + top: calc(var(--spacing-large) - (var(--spacing-large) / 2.5)); + border: 1px solid var(--fragment-foreground); + cursor: pointer; + border-radius: var(--border-radius-small); + display: flex; + justify-content: center; + align-items: center; +} + +.doxygen-awesome-fragment-wrapper:hover doxygen-awesome-fragment-copy-button, doxygen-awesome-fragment-copy-button.success { + opacity: .28; +} + +doxygen-awesome-fragment-copy-button:hover, doxygen-awesome-fragment-copy-button.success { + opacity: 1 !important; +} + +doxygen-awesome-fragment-copy-button:active:not([class~=success]) svg { + transform: scale(.91); +} + +doxygen-awesome-fragment-copy-button svg { + fill: var(--fragment-foreground); + width: 18px; + height: 18px; +} + +doxygen-awesome-fragment-copy-button.success svg { + fill: rgb(14, 168, 14); +} + +doxygen-awesome-fragment-copy-button.success { + border-color: rgb(14, 168, 14); +} + +@media screen and (max-width: 767px) { + .textblock > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + .textblock li > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + .memdoc li > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + .memdoc > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + dl dd > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button { + right: 0; + } +} + +/* + Optional paragraph link button +*/ + +a.anchorlink { + font-size: 90%; + margin-left: var(--spacing-small); + color: var(--page-foreground-color) !important; + text-decoration: none; + opacity: .15; + display: none; + transition: opacity var(--animation-duration) ease-in-out, color var(--animation-duration) ease-in-out; +} + +a.anchorlink svg { + fill: var(--page-foreground-color); +} + +h3 a.anchorlink svg, h4 a.anchorlink svg { + margin-bottom: -3px; + margin-top: -4px; +} + +a.anchorlink:hover { + opacity: .45; +} + +h2:hover a.anchorlink, h1:hover a.anchorlink, h3:hover a.anchorlink, h4:hover a.anchorlink { + display: inline-block; +} + +/* + Optional tab feature +*/ + +.tabbed > ul { + padding-inline-start: 0px; + margin: 0; + padding: var(--spacing-small) 0; +} + +.tabbed > ul > li { + display: none; +} + +.tabbed > ul > li.selected { + display: block; +} + +.tabs-overview-container { + overflow-x: auto; + display: block; + overflow-y: visible; +} + +.tabs-overview { + border-bottom: 1px solid var(--separator-color); + display: flex; + flex-direction: row; +} + +@media screen and (max-width: 767px) { + .tabs-overview-container { + margin: 0 calc(0px - var(--spacing-large)); + } + .tabs-overview { + padding: 0 var(--spacing-large) + } +} + +.tabs-overview button.tab-button { + color: var(--page-foreground-color); + margin: 0; + border: none; + background: transparent; + padding: calc(var(--spacing-large) / 2) 0; + display: inline-block; + font-size: var(--page-font-size); + cursor: pointer; + box-shadow: 0 1px 0 0 var(--separator-color); + position: relative; + + -webkit-tap-highlight-color: transparent; +} + +.tabs-overview button.tab-button .tab-title::before { + display: block; + content: attr(title); + font-weight: 600; + height: 0; + overflow: hidden; + visibility: hidden; +} + +.tabs-overview button.tab-button .tab-title { + float: left; + white-space: nowrap; + font-weight: normal; + padding: calc(var(--spacing-large) / 2) var(--spacing-large); + border-radius: var(--border-radius-medium); + transition: background-color var(--animation-duration) ease-in-out, font-weight var(--animation-duration) ease-in-out; +} + +.tabs-overview button.tab-button:not(:last-child) .tab-title { + box-shadow: 8px 0 0 -7px var(--separator-color); +} + +.tabs-overview button.tab-button:hover .tab-title { + background: var(--separator-color); + box-shadow: none; +} + +.tabs-overview button.tab-button.active .tab-title { + font-weight: 600; +} + +.tabs-overview button.tab-button::after { + content: ''; + display: block; + position: absolute; + left: 0; + bottom: 0; + right: 0; + height: 0; + width: 0%; + margin: 0 auto; + border-radius: var(--border-radius-small) var(--border-radius-small) 0 0; + background-color: var(--primary-color); + transition: width var(--animation-duration) ease-in-out, height var(--animation-duration) ease-in-out; +} + +.tabs-overview button.tab-button.active::after { + width: 100%; + box-sizing: border-box; + height: 3px; +} + + +/* + Navigation Buttons +*/ + +.section_buttons:not(:empty) { + margin-top: calc(var(--spacing-large) * 3); +} + +.section_buttons table.markdownTable { + display: block; + width: 100%; +} + +.section_buttons table.markdownTable tbody { + display: table !important; + width: 100%; + box-shadow: none; + border-spacing: 10px; +} + +.section_buttons table.markdownTable td { + padding: 0; +} + +.section_buttons table.markdownTable th { + display: none; +} + +.section_buttons table.markdownTable tr.markdownTableHead { + border: none; +} + +.section_buttons tr th, .section_buttons tr td { + background: none; + border: none; + padding: var(--spacing-large) 0 var(--spacing-small); +} + +.section_buttons a { + display: inline-block; + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium); + color: var(--page-secondary-foreground-color) !important; + text-decoration: none; + transition: color var(--animation-duration) ease-in-out, background-color var(--animation-duration) ease-in-out; +} + +.section_buttons a:hover { + color: var(--page-foreground-color) !important; + background-color: var(--odd-color); +} + +.section_buttons tr td.markdownTableBodyLeft a { + padding: var(--spacing-medium) var(--spacing-large) var(--spacing-medium) calc(var(--spacing-large) / 2); +} + +.section_buttons tr td.markdownTableBodyRight a { + padding: var(--spacing-medium) calc(var(--spacing-large) / 2) var(--spacing-medium) var(--spacing-large); +} + +.section_buttons tr td.markdownTableBodyLeft a::before, +.section_buttons tr td.markdownTableBodyRight a::after { + color: var(--page-secondary-foreground-color) !important; + display: inline-block; + transition: color .08s ease-in-out, transform .09s ease-in-out; +} + +.section_buttons tr td.markdownTableBodyLeft a::before { + content: '〈'; + padding-right: var(--spacing-large); +} + + +.section_buttons tr td.markdownTableBodyRight a::after { + content: '〉'; + padding-left: var(--spacing-large); +} + + +.section_buttons tr td.markdownTableBodyLeft a:hover::before { + color: var(--page-foreground-color) !important; + transform: translateX(-3px); +} + +.section_buttons tr td.markdownTableBodyRight a:hover::after { + color: var(--page-foreground-color) !important; + transform: translateX(3px); +} + +@media screen and (max-width: 450px) { + .section_buttons a { + width: 100%; + box-sizing: border-box; + } + + .section_buttons tr td:nth-of-type(1).markdownTableBodyLeft a { + border-radius: var(--border-radius-medium) 0 0 var(--border-radius-medium); + border-right: none; + } + + .section_buttons tr td:nth-of-type(2).markdownTableBodyRight a { + border-radius: 0 var(--border-radius-medium) var(--border-radius-medium) 0; + } +} \ No newline at end of file diff --git a/doxygen.css b/doxygen.css new file mode 100644 index 0000000000..74be539254 --- /dev/null +++ b/doxygen.css @@ -0,0 +1,1841 @@ +/* The standard CSS for doxygen 1.12.0*/ + +body { + background-color: black; + color: #C9D1D9; +} + +body, table, div, p, dl { + font-weight: 400; + font-size: 14px; + font-family: Roboto,sans-serif; + line-height: 22px; +} + +/* @group Heading Levels */ + +.title { + font-family: Roboto,sans-serif; + line-height: 28px; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h1.groupheader { + font-size: 150%; +} + +h2.groupheader { + border-bottom: 1px solid #283A5D; + color: #90A5CE; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, th p.intertd, th p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.navtab { + padding-right: 15px; + text-align: right; + line-height: 110%; +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL { + background-image: url('tab_ad.png'); + background-repeat:repeat-x; + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL a, td.navtabHL a:visited { + color: #DCE2EF; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +a.navtab { + font-weight: bold; +} + +div.qindex{ + text-align: center; + width: 100%; + line-height: 140%; + font-size: 130%; + color: #334975; +} + +#main-menu a:focus { + outline: auto; + z-index: 10; + position: relative; +} + +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: #C4CFE5; +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.even { + background-color: black; +} + +.classindex dl.odd { + background-color: #0B101A; +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } +} + + +/* @group Link Styling */ + +a { + color: #90A5CE; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #A3B4D7; +} + +a:hover { + text-decoration: none; + background: linear-gradient(to bottom, transparent 0,transparent calc(100% - 1px), currentColor 100%); +} + +a:hover > span.arrow { + text-decoration: none; + background : #101826; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #79C0FF; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #79C0FF; +} + +a.code.hl_class { /* style for links to class names in code snippets */ } +a.code.hl_struct { /* style for links to struct names in code snippets */ } +a.code.hl_union { /* style for links to union names in code snippets */ } +a.code.hl_interface { /* style for links to interface names in code snippets */ } +a.code.hl_protocol { /* style for links to protocol names in code snippets */ } +a.code.hl_category { /* style for links to category names in code snippets */ } +a.code.hl_exception { /* style for links to exception names in code snippets */ } +a.code.hl_service { /* style for links to service names in code snippets */ } +a.code.hl_singleton { /* style for links to singleton names in code snippets */ } +a.code.hl_concept { /* style for links to concept names in code snippets */ } +a.code.hl_namespace { /* style for links to namespace names in code snippets */ } +a.code.hl_package { /* style for links to package names in code snippets */ } +a.code.hl_define { /* style for links to macro names in code snippets */ } +a.code.hl_function { /* style for links to function names in code snippets */ } +a.code.hl_variable { /* style for links to variable names in code snippets */ } +a.code.hl_typedef { /* style for links to typedef names in code snippets */ } +a.code.hl_enumvalue { /* style for links to enum value names in code snippets */ } +a.code.hl_enumeration { /* style for links to enumeration names in code snippets */ } +a.code.hl_signal { /* style for links to Qt signal names in code snippets */ } +a.code.hl_slot { /* style for links to Qt slot names in code snippets */ } +a.code.hl_friend { /* style for links to friend names in code snippets */ } +a.code.hl_dcop { /* style for links to KDE3 DCOP names in code snippets */ } +a.code.hl_property { /* style for links to property names in code snippets */ } +a.code.hl_event { /* style for links to event names in code snippets */ } +a.code.hl_sequence { /* style for links to sequence names in code snippets */ } +a.code.hl_dictionary { /* style for links to dictionary names in code snippets */ } + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul.check { + list-style:none; + text-indent: -16px; + padding-left: 38px; +} +li.unchecked:before { + content: "\2610\A0"; +} +li.checked:before { + content: "\2611\A0"; +} + +ol { + text-indent: 0px; +} + +ul { + text-indent: 0px; + overflow: visible; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; + list-style-type: none; +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; + overflow-y: hidden; + position: relative; + min-height: 12px; + margin: 10px 0px; + padding: 10px 10px; + border: 1px solid #30363D; + border-radius: 4px; + background-color: #090D16; + color: #C9D1D9; +} + +pre.fragment { + word-wrap: break-word; + font-size: 10pt; + line-height: 125%; + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +} + +.clipboard { + width: 24px; + height: 24px; + right: 5px; + top: 5px; + opacity: 0; + position: absolute; + display: inline; + overflow: auto; + fill: #C9D1D9; + justify-content: center; + align-items: center; + cursor: pointer; +} + +.clipboard.success { + border: 1px solid #C9D1D9; + border-radius: 4px; +} + +.fragment:hover .clipboard, .clipboard.success { + opacity: .28; +} + +.clipboard:hover, .clipboard.success { + opacity: 1 !important; +} + +.clipboard:active:not([class~=success]) svg { + transform: scale(.91); +} + +.clipboard.success svg { + fill: #0EA80E; +} + +.clipboard.success { + border-color: #0EA80E; +} + +div.line { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.2; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + +span.fold { + margin-left: 5px; + margin-right: 1px; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; + display: inline-block; + width: 12px; + height: 12px; + background-repeat:no-repeat; + background-position:center; +} + +span.lineno { + padding-right: 4px; + margin-right: 9px; + text-align: right; + border-right: 2px solid #30363D; + color: #6E7681; + background-color: black; + white-space: pre; +} +span.lineno a, span.lineno a:visited { + color: #6E7681; + background-color: #303030; +} + +span.lineno a:hover { + color: #8E96A1; + background-color: #505050; +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + color: #C9D1D9; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +p.formulaDsp { + text-align: center; +} + +img.dark-mode-visible { + display: none; +} +img.light-mode-visible { + display: none; +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; + width: 60px; +} + +.compoundTemplParams { + color: #7C95C6; + font-size: 80%; + line-height: 120%; +} + +/* @group Code Colorization */ + +span.keyword { + color: #CC99CD; +} + +span.keywordtype { + color: #AB99CD; +} + +span.keywordflow { + color: #E08000; +} + +span.comment { + color: #717790; +} + +span.preprocessor { + color: #65CABE; +} + +span.stringliteral { + color: #7EC699; +} + +span.charliteral { + color: #00E0F0; +} + +span.xmlcdata { + color: #C9D1D9; +} + +span.vhdldigit { + color: #FF00FF; +} + +span.vhdlchar { + color: #C0C0C0; +} + +span.vhdlkeyword { + color: #CF53C9; +} + +span.vhdllogic { + color: #FF0000; +} + +blockquote { + background-color: #101826; + border-left: 2px solid #283A5D; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #283A5D; +} + +th.dirtab { + background-color: #283A5D; + color: #C4CFE5; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #283A5D; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #0B101A; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #BBB; +} + +.memSeparator { + border-bottom: 1px solid #2C3F65; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight, .memTemplItemRight { + width: 100%; +} + +.memTemplParams { + color: #7C95C6; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid #233250; + border-left: 1px solid #233250; + border-right: 1px solid #233250; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: url('nav_fd.png'); + background-repeat: repeat-x; + background-color: #1B2840; + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: #7C95C6; + font-weight: normal; + margin-left: 9px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #233250; + border-left: 1px solid #233250; + border-right: 1px solid #233250; + padding: 6px 0px 6px 0px; + color: #9DB0D4; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.9); + background-color: #19243A; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; +} + +.overload { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #233250; + border-left: 1px solid #233250; + border-right: 1px solid #233250; + padding: 6px 10px 2px 10px; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: black; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; + padding: 0px; + padding-bottom: 1px; +} + +.paramname { + white-space: nowrap; + padding: 0px; + padding-bottom: 1px; + margin-left: 2px; +} + +.paramname em { + color: #D28757; + font-style: normal; + margin-right: 1px; +} + +.paramname .paramdefval { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #354C7B; + border-top:1px solid #4665A2; + border-left:1px solid #4665A2; + border-right:1px solid #283A5D; + border-bottom:1px solid #283A5D; + text-shadow: none; + color: #CCCCCC; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #283A5D; + border-bottom: 1px solid #283A5D; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.odd { + padding-left: 6px; + background-color: #0B101A; +} + +.directory tr.even { + padding-left: 6px; + background-color: black; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #90A5CE; +} + +.arrow { + color: #334975; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: Arial,Helvetica; + line-height: normal; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: #334975; + color: #C4CFE5; + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderopend.svg'); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderclosedd.svg'); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('docd.svg'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #5B7AB7; +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #283A5D; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #283A5D; + color: #C4CFE5; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + margin-bottom: 10px; + border: 1px solid #233250; + border-spacing: 0px; + border-radius: 4px; + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname, .fieldtable td.fieldinit { + white-space: nowrap; + border-right: 1px solid #233250; + border-bottom: 1px solid #233250; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fieldinit { + padding-top: 3px; + text-align: right; +} + + +.fieldtable td.fielddoc { + border-bottom: 1px solid #233250; +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image: url('nav_fd.png'); + background-repeat:repeat-x; + background-color: #1B2840; + font-size: 90%; + color: #9DB0D4; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #233250; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_bd.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image: url('tab_bd.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#B6C4DF; + border:solid 1px #2A3D61; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_sd.png'); + background-repeat:no-repeat; + background-position:right; + color: #364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + outline: none; + color: #B6C4DF; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px black; + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color: #DCE2EF; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color: #5B7AB7; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image: url('nav_hd.png'); + background-repeat:repeat-x; + background-color: #070B11; + margin: 0px; + border-bottom: 1px solid #141C2E; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + +/* + +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention, dl.important { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +*/ + +dl.bug dt a, dl.deprecated dt a, dl.todo dt a, dl.test a { + font-weight: bold !important; +} + +dl.warning, dl.attention, dl.important, dl.note, dl.deprecated, dl.bug, +dl.invariant, dl.pre, dl.post, dl.todo, dl.test, dl.remark { + padding: 10px; + margin: 10px 0px; + overflow: hidden; + margin-left: 0; + border-radius: 4px; +} + +dl.section dd { + margin-bottom: 2px; +} + +dl.warning, dl.attention, dl.important { + background: #2e1917; + border-left: 8px solid #ad2617; + color: #f5b1aa; +} + +dl.warning dt, dl.attention dt, dl.important dt { + color: #ad2617; +} + +dl.note, dl.remark { + background: #3b2e04; + border-left: 8px solid #f1b602; + color: #ceb670; +} + +dl.note dt, dl.remark dt { + color: #f1b602; +} + +dl.todo { + background: #163750; + border-left: 8px solid #1982D2; + color: #dcf0fa; +} + +dl.todo dt { + color: #1982D2; +} + +dl.test { + background: #121258; + border-left: 8px solid #4242cf; + color: #c0c0da; +} + +dl.test dt { + color: #4242cf; +} + +dl.bug dt a { + color: #7661b3 !important; +} + +dl.bug { + background: #2a2536; + border-left: 8px solid #7661b3; + color: #ae9ed6; +} + +dl.bug dt a { + color: #7661b3 !important; +} + +dl.deprecated { + background: #2e323b; + border-left: 8px solid #738396; + color: #abb0bd; +} + +dl.deprecated dt a { + color: #738396 !important; +} + +dl.note dd, dl.warning dd, dl.pre dd, dl.post dd, +dl.remark dd, dl.attention dd, dl.important dd, dl.invariant dd, +dl.bug dd, dl.deprecated dd, dl.todo dd, dl.test dd { + margin-inline-start: 0px; +} + +dl.invariant, dl.pre, dl.post { + background: #303a35; + border-left: 8px solid #76ce96; + color: #cceed5; +} + +dl.invariant dt, dl.pre dt, dl.post dt { + color: #76ce96; +} + + +#projectrow +{ + height: 56px; +} + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; + padding-left: 0.5em; +} + +#projectname +{ + font-size: 200%; + font-family: Tahoma,Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font-size: 90%; + font-family: Tahoma,Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font-size: 50%; + font-family: 50% Tahoma,Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #354C79; + background-color: #090D16; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#90A5CE; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; + text-align:right; + width:52px; +} + +dl.citelist dd { + margin:2px 0 2px 72px; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #151E30; + border: 1px solid #202E4A; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +div.toc li { + background: url("data:image/svg+xml;utf8,&%238595;") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,'DejaVu Sans',Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 Verdana,'DejaVu Sans',Geneva,sans-serif; + color: #A3B4D7; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li[class^='level'] { + margin-left: 15px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.empty { + background-image: none; + margin-top: 0px; +} + +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + +span.obfuscator { + display: none; +} + +.inherit_header { + font-weight: bold; + color: #A0A0A0; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + /*white-space: nowrap;*/ + color: #C9D1D9; + background-color: #202020; + border: 1px solid #C9D1D9; + border-radius: 4px 4px 4px 4px; + box-shadow: none; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: #D9E1E9; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip a { + color: #79C0FF; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #20C348; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font-size: 12px; + font-family: Roboto,sans-serif; + line-height: 16px; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: #202020; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before, #powerTip.ne:before, #powerTip.nw:before { + border-top-color: #C9D1D9; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: #202020; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: #C9D1D9; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: #C9D1D9; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: #C9D1D9; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: #C9D1D9; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: #C9D1D9; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #283A5D; + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: #283A5D; + color: #C4CFE5; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +tt, code, kbd, samp +{ + display: inline-block; +} +/* @end */ + +u { + text-decoration: underline; +} + +details>summary { + list-style-type: none; +} + +details > summary::-webkit-details-marker { + display: none; +} + +details>summary::before { + content: "\25ba"; + padding-right:4px; + font-size: 80%; +} + +details[open]>summary::before { + content: "\25bc"; + padding-right:4px; + font-size: 80%; +} + diff --git a/doxygen.svg b/doxygen.svg new file mode 100644 index 0000000000..79a7635407 --- /dev/null +++ b/doxygen.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doxygen_crawl.html b/doxygen_crawl.html new file mode 100644 index 0000000000..9f137d2cc4 --- /dev/null +++ b/doxygen_crawl.html @@ -0,0 +1,537 @@ + + + +Validator / crawler helper + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dynsections.js b/dynsections.js new file mode 100644 index 0000000000..4ce856812c --- /dev/null +++ b/dynsections.js @@ -0,0 +1,198 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +function toggleVisibility(linkObj) { + return dynsection.toggleVisibility(linkObj); +} + +let dynsection = { + + // helper function + updateStripes : function() { + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); + $('table.directory tr'). + removeClass('odd').filter(':visible:odd').addClass('odd'); + }, + + toggleVisibility : function(linkObj) { + const base = $(linkObj).attr('id'); + const summary = $('#'+base+'-summary'); + const content = $('#'+base+'-content'); + const trigger = $('#'+base+'-trigger'); + const src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; + }, + + toggleLevel : function(level) { + $('table.directory tr').each(function() { + const l = this.id.split('_').length-1; + const i = $('#img'+this.id.substring(3)); + const a = $('#arr'+this.id.substring(3)); + if (l'); + // add vertical lines to other rows + $('span[class=lineno]').not(':eq(0)').append(''); + // add toggle controls to lines with fold divs + $('div[class=foldopen]').each(function() { + // extract specific id to use + const id = $(this).attr('id').replace('foldopen',''); + // extract start and end foldable fragment attributes + const start = $(this).attr('data-start'); + const end = $(this).attr('data-end'); + // replace normal fold span with controls for the first line of a foldable fragment + $(this).find('span[class=fold]:first').replaceWith(''); + // append div for folded (closed) representation + $(this).after(''); + // extract the first line from the "open" section to represent closed content + const line = $(this).children().first().clone(); + // remove any glow that might still be active on the original line + $(line).removeClass('glow'); + if (start) { + // if line already ends with a start marker (e.g. trailing {), remove it + $(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),'')); + } + // replace minus with plus symbol + $(line).find('span[class=fold]').css('background-image',codefold.plusImg[relPath]); + // append ellipsis + $(line).append(' '+start+''+end); + // insert constructed line into closed div + $('#foldclosed'+id).html(line); + }); + }, +}; +/* @license-end */ diff --git a/error_8hpp_source.html b/error_8hpp_source.html new file mode 100644 index 0000000000..b3f5c5d7ae --- /dev/null +++ b/error_8hpp_source.html @@ -0,0 +1,171 @@ + + + + + + + +Topaz: /github/workspace/include/tz/core/error.hpp Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Topaz 5.0 +
+
Topaz Game Engine
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
error.hpp
+
+
+
1#ifndef TOPAZ_CORE_ERROR_HPP
+
2#define TOPAZ_CORE_ERROR_HPP
+
3#include <string_view>
+
4#include <array>
+
5
+
6namespace tz
+
7{
+
+
12 enum class error_code
+
13 {
+
15 success,
+ + + + + + + +
31 oom,
+
33 voom,
+ +
36 _count
+
37 };
+
+
38
+
39 namespace detail
+
40 {
+
41 constexpr std::array<const char*, static_cast<int>(error_code::_count)> error_code_strings
+
42 {
+
43 "success",
+
44 "partial success",
+
45 "precondition failure error",
+
46 "invalid value error",
+
47 "machine unsuitability error",
+
48 "engine bug error",
+
49 "driver hazard error",
+
50 "unknown error",
+
51 "out of CPU memory error",
+
52 "out of GPU memory error",
+
53 "concurrent usage error"
+
54 };
+
55 }
+
56
+
57 constexpr const char* error_code_name(error_code ec)
+
58 {
+
59 return detail::error_code_strings[static_cast<int>(ec)];
+
60 }
+
61
+
62 std::string_view last_error();
+
63 void set_last_error(std::string errmsg);
+
64
+
65}
+
66
+
67#endif // TOPAZ_CORE_ERROR_HPP
+
error_code
Error codes for Topaz.
Definition error.hpp:13
+
@ machine_unsuitable
An error has occurred because the currently running machine does not support the given operation.
+
@ invalid_value
An error has occurred because an illegal/incorrect value has been detected.
+
@ success
Correct behaviour has occurred. No need to do any sanity checking.
+
@ engine_bug
An error has occurred due to an engine-side logic error, and you should submit a bug report.
+
@ voom
An error has occurred due to lack of GPU memory.
+
@ unknown_error
An error has occurred, but it's not clear why.
+
@ driver_hazard
An error has occurred due to a serious hazard relating to the driver/hardware. This most likely means...
+
@ precondition_failure
An error has occurred because some previously-required setup has not been complete....
+
@ concurrent_usage
An error has occurred due to an operation being invalid while a given resource is in use by something...
+
@ oom
An error has occurred due to lack of CPU memory.
+
@ partial_success
Nothing erroneous happened, but the process did not complete fully or otherwise provide an ideal resu...
+
+ + +
+ + diff --git a/file_8hpp_source.html b/file_8hpp_source.html new file mode 100644 index 0000000000..0dd1384be4 --- /dev/null +++ b/file_8hpp_source.html @@ -0,0 +1,120 @@ + + + + + + + +Topaz: /github/workspace/include/tz/os/file.hpp Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Topaz 5.0 +
+
Topaz Game Engine
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
file.hpp
+
+
+
1#ifndef TOPAZ_OS_FILE_HPP
+
2#define TOPAZ_OS_FILE_HPP
+
3#include "tz/core/error.hpp"
+
4#include <string>
+
5#include <filesystem>
+
6#include <expected>
+
7
+
8namespace tz::os
+
9{
+
10 std::expected<std::string, tz::error_code> read_file(std::filesystem::path path);
+
11 tz::error_code write_file(std::filesystem::path path, std::string_view data);
+
12}
+
13
+
14#endif // TOPAZ_OS_FILE_HPP
+
error_code
Error codes for Topaz.
Definition error.hpp:13
+
+ + +
+ + diff --git a/folderclosed.svg b/folderclosed.svg new file mode 100644 index 0000000000..b04bed2e72 --- /dev/null +++ b/folderclosed.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/folderclosedd.svg b/folderclosedd.svg new file mode 100644 index 0000000000..52f0166a23 --- /dev/null +++ b/folderclosedd.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/folderopen.svg b/folderopen.svg new file mode 100644 index 0000000000..f6896dd254 --- /dev/null +++ b/folderopen.svg @@ -0,0 +1,17 @@ + + + + + + + + + + diff --git a/folderopend.svg b/folderopend.svg new file mode 100644 index 0000000000..2d1f06e7bc --- /dev/null +++ b/folderopend.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/graph_8hpp_source.html b/graph_8hpp_source.html new file mode 100644 index 0000000000..bceb6ee5a9 --- /dev/null +++ b/graph_8hpp_source.html @@ -0,0 +1,213 @@ + + + + + + + +Topaz: /github/workspace/include/tz/gpu/graph.hpp Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Topaz 5.0 +
+
Topaz Game Engine
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
graph.hpp
+
+
+
1#ifndef TOPAZ_GPU_GRAPH_HPP
+
2#define TOPAZ_GPU_GRAPH_HPP
+
3#include "tz/gpu/pass.hpp"
+
4#include <vector>
+
5
+
6namespace tz::gpu
+
7{
+
+ +
19 {
+
20 };
+
+
21
+
22 constexpr graph_flag operator|(graph_flag lhs, graph_flag rhs)
+
23 {
+
24 return static_cast<graph_flag>(static_cast<int>(lhs) | static_cast<int>(rhs));
+
25 }
+
26
+
27 constexpr bool operator&(graph_flag lhs, graph_flag& rhs)
+
28 {
+
29 return static_cast<int>(lhs) & static_cast<int>(rhs);
+
30 }
+
31
+
32
+
+ +
41 {
+
43 std::span<const pass_handle> timeline = {};
+
45 std::span<std::span<const pass_handle>> dependencies = {};
+
47 graph_flag flags = static_cast<graph_flag>(0);
+
48 };
+
+
49
+ +
+ +
59 {
+
60 std::vector<pass_handle> passes;
+
61 std::vector<std::vector<pass_handle>> dependencies{};
+
62 graph_flag flags = static_cast<graph_flag>(0);
+
63
+
+ +
66 {
+
67 this->passes.push_back(pass);
+
68 this->dependencies.push_back({});
+
69 return *this;
+
70 }
+
+
71
+
+ +
74 {
+
75 auto iter = std::find(this->passes.begin(), this->passes.end(), pass);
+
76 if(iter != this->passes.end())
+
77 {
+
78 auto id = std::distance(this->passes.begin(), iter);
+
79 dependencies[id].push_back(dependency);
+
80 }
+
81 return *this;
+
82 }
+
+
83
+
84 graph_builder& set_flags(graph_flag flags)
+
85 {
+
86 this->flags = flags;
+
87 return *this;
+
88 }
+
90 inline std::expected<graph_handle, tz::error_code> build();
+
91 };
+
+
92
+
98 std::expected<graph_handle, tz::error_code> create_graph(graph_info graph);
+ +
104
+
105
+
+
106 std::expected<graph_handle, tz::error_code> graph_builder::build()
+
107 {
+
108 graph_info i
+
109 {
+
110 .timeline = this->passes,
+
111 .flags = this->flags
+
112 };
+
113 std::vector<std::span<const pass_handle>> dependency_pointers;
+
114 for(const auto& dep_list : dependencies)
+
115 {
+
116 dependency_pointers.push_back(dep_list);
+
117 }
+
118 i.dependencies = dependency_pointers;
+
119 return tz::gpu::create_graph(i);
+
120 }
+
+
121}
+
122
+
123#endif // TOPAZ_GPU_GRAPH_HPP
+
Represents a generic opaque handle.
Definition handle.hpp:32
+
graph_flag
Specifies optional, extra functionality for a graph.
Definition graph.hpp:19
+
std::expected< graph_handle, tz::error_code > create_graph(graph_info graph)
Create a new graph, which can be used for rendering a frame.
+
void execute(graph_handle)
Execute the graph - invoking all passes contained a single time.
+
Helper struct for creating a new graph. Follows the builder pattern.
Definition graph.hpp:59
+
std::expected< graph_handle, tz::error_code > build()
Attempt to create the graph based on all previous calls and return the result. This will call create_...
Definition graph.hpp:106
+
graph_builder & add_pass(pass_handle pass)
Add a new pass to the end of the timeline.
Definition graph.hpp:65
+
graph_builder & add_dependency(pass_handle pass, pass_handle dependency)
Add a new dependency to an existing pass in the timeline. Make sure the pass has already been added v...
Definition graph.hpp:73
+
Specifies creation flags for a new graph.
Definition graph.hpp:41
+
std::span< std::span< const pass_handle > > dependencies
List of dependencies for each pass in the timeline. The n'th index of dependencies corresponds to the...
Definition graph.hpp:45
+
std::span< const pass_handle > timeline
Contains all the passes that will be executed during a single frame - in chronological order.
Definition graph.hpp:43
+
graph_flag flags
Specifies extra optional behaviour for the graph.
Definition graph.hpp:47
+
+ + +
+ + diff --git a/group__tz.html b/group__tz.html new file mode 100644 index 0000000000..dec72efc8d --- /dev/null +++ b/group__tz.html @@ -0,0 +1,272 @@ + + + + + + + +Topaz: API Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Topaz 5.0 +
+
Topaz Game Engine
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
API Reference
+
+
+

Description

+

C++ API for the Topaz Engine.

+ + + + + + + + + + + + + + + + + +

+Topics

 Core Libraries
 Lowest-level libraries, structs and functionality. Everything is expected to depend on this.
 
 OS Libraries
 Cross-platform API to interact with operating-system level components, such as windowing, hardware input, and machine non-GPU hardware.
 
 GPU Library
 Abstract rendering API for low-level, high-performance 3D desktop graphics.
 
 Rendering Library
 High-level declarative rendering API built upon the GPU Library.
 
 IO Library
 High-level library for wrangling files of various formats.
 
+ + + + +

+Classes

struct  tz::appinfo
 Contains information about the application being initialised. More...
 
+

Function Documentation

+ +

◆ initialise()

+ +
+
+ + + + + + + +
void tz::initialise (appinfo info = {})
+
+ +

Initialise the engine.

+
Parameters
+ + +
infoSome basic information about your application. If you don't provide this, some placeholder values will be provided for you.
+
+
+

This function must be the first Topaz API call you make, ideally at the start of your program's runtime.

+

You should expect this function to take a significantly long time.

+ +
+
+ +

◆ terminate()

+ +
+
+ + + + + + + +
void tz::terminate ()
+
+ +

Terminate the engine, cleaning up all resources.

+

This function should be the last Topaz API call you make before the end of your program's runtime.

+

You should expect this function to take a significantly long time.

+ +
+
+

Macro Definition Documentation

+ +

◆ tz_assert

+ +
+
+ + + + + + + + + + + + + + + + +
#define tz_assert( cond,
fmt,
... )
+
+ +

Assert that the given condition must be true. Cause a tz_error if not.

+
Parameters
+ + + + +
condCondition which must evaluate to true.
fmtFormat string, following the fmtlib convention (i.e the n'th instance of {} in the string will be replaced with the n'th variadic parameter).
...Additional arguments (size should correspond to the number of occurrences of {} in fmt) that shall be substituted into the format string.
+
+
+ +
+
+ +

◆ tz_error

+ +
+
+ + + + + + + + + + + +
#define tz_error( fmt,
... )
+
+ +

Cause a runtime error. If a debugger is present, a breakpoint will occur at the call-site. Otherwise, the program will terminate.

+
Parameters
+ + + +
fmtFormat string, following the fmtlib convention (i.e the n'th instance of {} in the string will be replaced with the n'th variadic parameter).
...Additional arguments (size should correspond to the number of occurrences of {} in fmt) that shall be substituted into the format string.
+
+
+ +
+
+ +

◆ tz_must

+ +
+
+ + + + + + + +
#define tz_must( fnret)
+
+ +

Cause a runtime error if the expected value is erroneous. If not, the unwrapped expected value is returned.

+

Many API functions in Topaz return some variant of std::expected. Handling them on an individual basis can be verbose and unnecessary. Surround the call with this macro to instead yield the expected value directly, and emit a runtime error if an error code was returned instead.

+
Note
You should only use this macro on a return value if you are happy to crash if the value is erroneous. Treat it as a glorified tz_assert.
+

Example before:

+

std::expected<tz::gpu::resource_handle, tz::error_code> img = tz::gpu::create_image({...});

+

Example after:

+

tz::gpu::resource_handle img = tz_must(tz::gpu::create_image({...}));

+ +
+
+
+ + +
+ + diff --git a/group__tz__core.html b/group__tz__core.html new file mode 100644 index 0000000000..847d097393 --- /dev/null +++ b/group__tz__core.html @@ -0,0 +1,198 @@ + + + + + + + +Topaz: Core Libraries + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Topaz 5.0 +
+
Topaz Game Engine
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Core Libraries
+
+
+

Description

+

Lowest-level libraries, structs and functionality. Everything is expected to depend on this.

+ + + + + + + + + + + +

+Topics

 Job System
 Submit async jobs to an internal threadpool.
 
 Lua Scripting
 Execute lightweight lua code within the engine.
 
 Mathematics
 Basic mathematical geometric types.
 
+ + + + +

+Classes

class  tz::handle< T >
 Represents a generic opaque handle. More...
 
+

Enumeration Type Documentation

+ +

◆ error_code

+ +
+
+ + + + + +
+ + + + +
enum class tz::error_code
+
+strong
+
+ +

Error codes for Topaz.

+ + + + + + + + + + + + +
Enumerator
success 

Correct behaviour has occurred. No need to do any sanity checking.

+
partial_success 

Nothing erroneous happened, but the process did not complete fully or otherwise provide an ideal result.

+
precondition_failure 

An error has occurred because some previously-required setup has not been complete. The most common cause of this is not initialising the engine via tz::initialise.

+
invalid_value 

An error has occurred because an illegal/incorrect value has been detected.

+
machine_unsuitable 

An error has occurred because the currently running machine does not support the given operation.

+
engine_bug 

An error has occurred due to an engine-side logic error, and you should submit a bug report.

+
driver_hazard 

An error has occurred due to a serious hazard relating to the driver/hardware. This most likely means a graphics driver crash/hardware-lost.

+
unknown_error 

An error has occurred, but it's not clear why.

+
oom 

An error has occurred due to lack of CPU memory.

+
voom 

An error has occurred due to lack of GPU memory.

+
concurrent_usage 

An error has occurred due to an operation being invalid while a given resource is in use by something else.

+
+ +
+
+

Variable Documentation

+ +

◆ nullhand

+ +
+
+ + + + + +
+ + + + +
nullhand_t tz::nullhand
+
+constexpr
+
+

Represents the null handle. You can assign any tz::handle<T> to the null handle, meaning it no longer corresponds to something valid. You can also compare any handle to the null handle.

+ +
+
+
+ + +
+ + diff --git a/group__tz__core__job.html b/group__tz__core__job.html new file mode 100644 index 0000000000..16d31f099d --- /dev/null +++ b/group__tz__core__job.html @@ -0,0 +1,263 @@ + + + + + + + +Topaz: Job System + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Topaz 5.0 +
+
Topaz Game Engine
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ + +
+
+

Description

+

Submit async jobs to an internal threadpool.

+ + + + + +

+Typedefs

using tz::job_function = std::function<void()>
 Represents a function that will be executed on a job worker via job_execute.
 
+

Function Documentation

+ +

◆ job_execute()

+ +
+
+ + + + + + + +
job_handle tz::job_execute (job_function fn)
+
+ +

Execute a function as a new job.

+

This creates a new job which will be picked up by any worker thread as soon as possible. You can query the job's progress via job_complete, or block the wait for it to finish via job_wait.

+

There is no guarantee or hint as to which worker thread ultimately picks up your work. If you need that, consider job_execute_on. There is also no safety mechanism in place for avoiding deadlocks – there is nothing stopping you from writing race conditions, nor does some hidden feature exist to protect you from them.

+
    +
  • It is safe to execute new jobs within another running job.
  • +
  • There is no way to cancel a job, you can only wait for it to finish.
  • +
+ +
+
+ +

◆ job_execute_on()

+ +
+
+ + + + + + + + + + + +
job_handle tz::job_execute_on (job_function fn,
job_worker worker )
+
+ +

Execute a function as a new job - but can only be picked up by a specific worker.

+
Note
As a rule-of-thumb, prefer job_execute in all situations unless you must run work on a specific thread.
+

At any given time, there are a set of worker threads available for use (number of worker threads is equal to job_worker_count). Unlike job_execute, the job created by this function is tailored to only a single worker thread. Aside from this, the behaviour of this function exactly matches that of job_execute.

+

You might want to do this for a couple of reasons:

    +
  • You know a specific worker thread has a certain state, which the job needs access to.
  • +
  • You wish to execute exactly one job on every worker thread, for whatever reason.
  • +
  • You are delusional and think you can do a better job than your OS's scheduler.
  • +
+ +
+
+ +

◆ job_wait()

+ +
+
+ + + + + + + +
void tz::job_wait (job_handle job)
+
+ +

Block the current thread until the job specified has been fully completed.

+ +
+
+ +

◆ job_complete()

+ +
+
+ + + + + + + +
bool tz::job_complete (job_handle job)
+
+ +

Query as to whether the specific job has been fully completed or not.

+ +
+
+ +

◆ job_count()

+ +
+
+ + + + + + + +
std::size_t tz::job_count ()
+
+ +

Estimate the total number of jobs that have been created but not yet completed.

+

You should assume the returned value to be an estimate – a lower bound on the real number. It is also absolutely possible that many jobs are completed between the time of you calling this function and inspecting the result.

+ +
+
+ +

◆ job_worker_count()

+ +
+
+ + + + + + + +
std::size_t tz::job_worker_count ()
+
+ +

Retrieve the number of worker threads.

+

The returned value is unaffected by whether these worker threads are currently carrying out work/are idle. You can assume this number will never change throughout your application's runtime.

+ +
+
+

Typedef Documentation

+ +

◆ job_function

+ +
+
+ + + + +
using tz::job_function = std::function<void()>
+
+ +

Represents a function that will be executed on a job worker via job_execute.

+ +
+
+
+ + +
+ + diff --git a/group__tz__core__lua.html b/group__tz__core__lua.html new file mode 100644 index 0000000000..04b5c61098 --- /dev/null +++ b/group__tz__core__lua.html @@ -0,0 +1,793 @@ + + + + + + + +Topaz: Lua Scripting + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Topaz 5.0 +
+
Topaz Game Engine
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ + +
+
+

Description

+

Execute lightweight lua code within the engine.

+ + + + + +

+Typedefs

using tz::lua_fn = int(*)()
 Represents the signature for a function that can be called from lua.
 
+

Function Documentation

+ +

◆ lua_execute_file()

+ +
+
+ + + + + + + +
tz::error_code tz::lua_execute_file (std::filesystem::path path)
+
+ +

Attempt to execute a local lua file on the current thread.

+
Parameters
+ + +
pathPath to a local file containing lua code.
+
+
+
Returns
tz::error_code::precondition_failure If the provided path was invalid.
+
+tz::error_code::unknown_error If the executed code caused an error.
+ +
+
+ +

◆ lua_execute()

+ +
+
+ + + + + + + +
tz::error_code tz::lua_execute (std::string_view lua_src)
+
+ +

Attempt to execute some lua code on the current thread.

+
Parameters
+ + +
lua_srcString containing lua code to execute.
+
+
+
Returns
tz::error_code::unknown_error If the executed code caused an error.
+ +
+
+ +

◆ lua_set_nil()

+ +
+
+ + + + + + + +
tz::error_code tz::lua_set_nil (std::string_view varname)
+
+ +

Set a variable in lua to be nil.

+
Parameters
+ + +
varnameName of the variable to set.
+
+
+
Returns
tz::error_code::unknown_error If an error occurred.
+ +
+
+ +

◆ lua_set_emptytable()

+ +
+
+ + + + + + + +
tz::error_code tz::lua_set_emptytable (std::string_view varname)
+
+ +

Set a variable in lua to be the empty table "{}".

+
Parameters
+ + +
varnameName of the variable to set.
+
+
+
Returns
tz::error_code::unknown_error If an error occurred.
+ +
+
+ +

◆ lua_set_bool()

+ +
+
+ + + + + + + + + + + +
tz::error_code tz::lua_set_bool (std::string_view varname,
bool v )
+
+ +

Set a variable in lua to a new bool value.

+
Parameters
+ + + +
varnameName of the variable to set.
vValue to set
+
+
+
Returns
tz::error_code::unknown_error If an error occurred.
+ +
+
+ +

◆ lua_set_int()

+ +
+
+ + + + + + + + + + + +
tz::error_code tz::lua_set_int (std::string_view varname,
std::int64_t v )
+
+ +

Set a variable in lua to a new int value.

+
Parameters
+ + + +
varnameName of the variable to set.
vValue to set
+
+
+
Returns
tz::error_code::unknown_error If an error occurred.
+ +
+
+ +

◆ lua_set_number()

+ +
+
+ + + + + + + + + + + +
tz::error_code tz::lua_set_number (std::string_view varname,
double v )
+
+ +

Set a variable in lua to a new number value.

+
Parameters
+ + + +
varnameName of the variable to set.
vValue to set
+
+
+
Returns
tz::error_code::unknown_error If an error occurred.
+ +
+
+ +

◆ lua_set_string()

+ +
+
+ + + + + + + + + + + +
tz::error_code tz::lua_set_string (std::string_view varname,
std::string str )
+
+ +

Set a variable in lua to a new string value.

+
Parameters
+ + + +
varnameName of the variable to set.
strValue to set
+
+
+
Returns
tz::error_code::unknown_error If an error occurred.
+ +
+
+ +

◆ lua_define_function()

+ +
+
+ + + + + + + + + + + +
tz::error_code tz::lua_define_function (std::string_view varname,
lua_fn fn )
+
+ +

Define a new function in lua.

+
Parameters
+ + + +
varnameName of the function when called in lua code.
fnPointer to an existing function to expose to lua.
+
+
+
Returns
tz::error_code::unknown_error If an error occurred.
+ +
+
+ +

◆ lua_get_bool()

+ +
+
+ + + + + + + +
std::expected< bool, tz::error_code > tz::lua_get_bool (std::string_view varname)
+
+ +

Retrieve the value of a bool variable.

+
Parameters
+ + +
varnameName of the variable to retrieve.
+
+
+
Returns
tz::error_code::precondition_failure If such a variable does not exist, or does not match the type you requested.
+ +
+
+ +

◆ lua_get_int()

+ +
+
+ + + + + + + +
std::expected< std::int64_t, tz::error_code > tz::lua_get_int (std::string_view varname)
+
+ +

Retrieve the value of a int variable.

+
Parameters
+ + +
varnameName of the variable to retrieve.
+
+
+
Returns
tz::error_code::precondition_failure If such a variable does not exist, or does not match the type you requested.
+ +
+
+ +

◆ lua_get_number()

+ +
+
+ + + + + + + +
std::expected< double, tz::error_code > tz::lua_get_number (std::string_view varname)
+
+ +

Retrieve the value of a number variable.

+
Parameters
+ + +
varnameName of the variable to retrieve.
+
+
+
Returns
tz::error_code::precondition_failure If such a variable does not exist, or does not match the type you requested.
+ +
+
+ +

◆ lua_get_string()

+ +
+
+ + + + + + + +
std::expected< std::string, tz::error_code > tz::lua_get_string (std::string_view varname)
+
+ +

Retrieve the value of a string variable.

+
Parameters
+ + +
varnameName of the variable to retrieve.
+
+
+
Returns
tz::error_code::precondition_failure If such a variable does not exist, or does not match the type you requested.
+ +
+
+ +

◆ lua_stack_get_bool()

+ +
+
+ + + + + + + +
std::expected< bool, tz::error_code > tz::lua_stack_get_bool (std::size_t id)
+
+ +

Retrieve a bool from the stack at the given index.

+
Parameters
+ + +
idPosition on the stack to retrieve.
+
+
+
Returns
tz::error_code::precondition_failure If the stack is too small, or the value at the position you specifies does not match the type you asked for.
+ +
+
+ +

◆ lua_stack_get_int()

+ +
+
+ + + + + + + +
std::expected< std::int64_t, tz::error_code > tz::lua_stack_get_int (std::size_t id)
+
+ +

Retrieve a int from the stack at the given index.

+
Parameters
+ + +
idPosition on the stack to retrieve.
+
+
+
Returns
tz::error_code::precondition_failure If the stack is too small, or the value at the position you specifies does not match the type you asked for.
+ +
+
+ +

◆ lua_stack_get_number()

+ +
+
+ + + + + + + +
std::expected< double, tz::error_code > tz::lua_stack_get_number (std::size_t id)
+
+ +

Retrieve a number from the stack at the given index.

+
Parameters
+ + +
idPosition on the stack to retrieve.
+
+
+
Returns
tz::error_code::precondition_failure If the stack is too small, or the value at the position you specifies does not match the type you asked for.
+ +
+
+ +

◆ lua_stack_get_string()

+ +
+
+ + + + + + + +
std::expected< std::string, tz::error_code > tz::lua_stack_get_string (std::size_t id)
+
+ +

Retrieve a string from the stack at the given index.

+
Parameters
+ + +
idPosition on the stack to retrieve.
+
+
+
Returns
tz::error_code::precondition_failure If the stack is too small, or the value at the position you specifies does not match the type you asked for.
+ +
+
+ +

◆ lua_push_nil()

+ +
+
+ + + + + + + +
void tz::lua_push_nil ()
+
+ +

Push a nil value onto the stack.

+ +
+
+ +

◆ lua_push_bool()

+ +
+
+ + + + + + + +
void tz::lua_push_bool (bool v)
+
+ +

Push a bool value onto the stack.

+ +
+
+ +

◆ lua_push_int()

+ +
+
+ + + + + + + +
void tz::lua_push_int (std::int64_t v)
+
+ +

Push an int value onto the stack.

+ +
+
+ +

◆ lua_push_number()

+ +
+
+ + + + + + + +
void tz::lua_push_number (double v)
+
+ +

Push a number value onto the stack.

+ +
+
+ +

◆ lua_push_string()

+ +
+
+ + + + + + + +
void tz::lua_push_string (std::string v)
+
+ +

Push a string value onto the stack.

+ +
+
+ +

◆ lua_stack_size()

+ +
+
+ + + + + + + +
std::size_t tz::lua_stack_size ()
+
+ +

Retrieve the number of values on the stack currently.

+ +
+
+ +

◆ lua_debug_callstack()

+ +
+
+ + + + + + + +
std::string tz::lua_debug_callstack ()
+
+ +

Retreieve a string describing the lua callstack right now.

+

This might be useful for debugging purposes.

+ +
+
+ +

◆ lua_debug_stack()

+ +
+
+ + + + + + + +
std::string tz::lua_debug_stack ()
+
+ +

Retreieve a string describing the entire lua stack right now.

+

This might be useful for debugging purposes.

+ +
+
+ +

◆ lua_parse_args()

+ +
+
+
+template<typename... Ts>
+ + + + + + + +
std::tuple< Ts... > tz::lua_parse_args ()
+
+ +

Retreve a set of arguments from the stack.

+
Precondition
The values on the top of the stack must perfectly correspond to the type parameters you pass in, otherwise a runtime error will occur. You are recommended to use this in your own lua_fn functions that you expose to lua via lua_define_function.
+ +
+
+

Typedef Documentation

+ +

◆ lua_fn

+ +
+
+ + + + +
using tz::lua_fn = int(*)()
+
+ +

Represents the signature for a function that can be called from lua.

+

You might be expecting int(lua_State*) if you're used to using Lua directly. However, lua headers are not available to you, so this is the only signature you will worry about. Like in default lua, the return value of any lua function represents how many values you have returned (put onto the stack). To retrieve an argument in a lua function, you can either:

    +
  • Call lua_stack_get_bool or similar. This is useful if you conditionally need only a particular argument.
  • +
  • Call lua_parse_args to retrieve all the arguments of your function at once. This is recommended for most use-cases.
  • +
+

Example: C function callable in lua:

int fnimpl()
+
{
+
auto [arg1, arg2] = tz::lua_parse_args<int, std::string>();
+
lua_push_int(arg1 * 2);
+
lua_push_string(arg2 + " is cool");
+
return 2;
+
}
+
// In your application initialisation code:
+
tz::lua_define_function("my_cool_function", fnimpl);
+
void lua_push_string(std::string v)
Push a string value onto the stack.
+
tz::error_code lua_define_function(std::string_view varname, lua_fn fn)
Define a new function in lua.
+
std::tuple< Ts... > lua_parse_args()
Retreve a set of arguments from the stack.
Definition lua.hpp:259
+
void lua_push_int(std::int64_t v)
Push an int value onto the stack.
+

In your lua code:

ret1, ret2 = my_cool_function(123, "Bob" .. " Marley")
+
+
+
+
+ + +
+ + diff --git a/group__tz__core__math.html b/group__tz__core__math.html new file mode 100644 index 0000000000..bc4477e95b --- /dev/null +++ b/group__tz__core__math.html @@ -0,0 +1,345 @@ + + + + + + + +Topaz: Mathematics + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Topaz 5.0 +
+
Topaz Game Engine
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ + +
+
+

Description

+

Basic mathematical geometric types.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Typedefs

using tz::v2i = vector<int, 2>
 2d integer vector.
 
using tz::v3i = vector<int, 3>
 3d integer vector.
 
using tz::v4i = vector<int, 4>
 4d integer vector.
 
using tz::v2u = vector<unsigned int, 2>
 2d unsigned integer vector.
 
using tz::v3u = vector<unsigned int, 3>
 3d unsigned integer vector.
 
using tz::v4u = vector<unsigned int, 4>
 4d unsigned integer vector.
 
using tz::v2f = vector<float, 2>
 2d single-precision floating-point vector.
 
using tz::v3f = vector<float, 3>
 3d single-precision floating-point vector.
 
using tz::v4f = vector<float, 4>
 4d single-precision floating-point vector.
 
using tz::v2d = vector<double, 2>
 2d double-precision floating-point vector.
 
using tz::v3d = vector<double, 3>
 3d double-precision floating-point vector.
 
using tz::v4d = vector<double, 4>
 4d double-precision floating-point vector.
 
+ + + + +

+Classes

struct  tz::vector< T, N >
 Represents the generic vector. More...
 
+

Typedef Documentation

+ +

◆ v2i

+ +
+
+ + + + +
using tz::v2i = vector<int, 2>
+
+ +

2d integer vector.

+ +
+
+ +

◆ v3i

+ +
+
+ + + + +
using tz::v3i = vector<int, 3>
+
+ +

3d integer vector.

+ +
+
+ +

◆ v4i

+ +
+
+ + + + +
using tz::v4i = vector<int, 4>
+
+ +

4d integer vector.

+ +
+
+ +

◆ v2u

+ +
+
+ + + + +
using tz::v2u = vector<unsigned int, 2>
+
+ +

2d unsigned integer vector.

+ +
+
+ +

◆ v3u

+ +
+
+ + + + +
using tz::v3u = vector<unsigned int, 3>
+
+ +

3d unsigned integer vector.

+ +
+
+ +

◆ v4u

+ +
+
+ + + + +
using tz::v4u = vector<unsigned int, 4>
+
+ +

4d unsigned integer vector.

+ +
+
+ +

◆ v2f

+ +
+
+ + + + +
using tz::v2f = vector<float, 2>
+
+ +

2d single-precision floating-point vector.

+ +
+
+ +

◆ v3f

+ +
+
+ + + + +
using tz::v3f = vector<float, 3>
+
+ +

3d single-precision floating-point vector.

+ +
+
+ +

◆ v4f

+ +
+
+ + + + +
using tz::v4f = vector<float, 4>
+
+ +

4d single-precision floating-point vector.

+ +
+
+ +

◆ v2d

+ +
+
+ + + + +
using tz::v2d = vector<double, 2>
+
+ +

2d double-precision floating-point vector.

+ +
+
+ +

◆ v3d

+ +
+
+ + + + +
using tz::v3d = vector<double, 3>
+
+ +

3d double-precision floating-point vector.

+ +
+
+ +

◆ v4d

+ +
+
+ + + + +
using tz::v4d = vector<double, 4>
+
+ +

4d double-precision floating-point vector.

+ +
+
+
+ + +
+ + diff --git a/group__tz__gpu.html b/group__tz__gpu.html new file mode 100644 index 0000000000..549b9955a1 --- /dev/null +++ b/group__tz__gpu.html @@ -0,0 +1,190 @@ + + + + + + + +Topaz: GPU Library + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Topaz 5.0 +
+
Topaz Game Engine
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
GPU Library
+
+
+

Description

+

Abstract rendering API for low-level, high-performance 3D desktop graphics.

+

This library provides a API to interact with a single desktop GPU, agnostic of whichever graphics API runs under-the-hood (e.g Vulkan/OpenGL/D3D12). When you use this library, the implementation will use one of these graphics APIs (which one is used depends on your platform and is configurable at compile-time) automatically with minimal overhead.

+

If you intend to do 3D graphics in Topaz, you should first consult the Rendering Library incase a high-level implementation of what you want to achieve already exists. It is unlikely that the Rendering Library contains all the rendering components you need for a modern game, especially if your game has some more bespoke graphical features or its own unique style. In which case, you should use this library to build your feature from the ground-up.

+

The GPU Library works as follows:

+

An example graph could be comprised of:

+

The timeline of GPU execution of this graph could look as follows:

+ + + + + + + + + + + + + + + + + + + + +

+Topics

 Graphs
 Documentation for render graphs - describes the execution of Passes.
 
 Hardware
 Documentation specialised for iterating over rendering hardware and selecting one to be used for rendering.
 
 Passes
 Documentation for render/compute passes - each a single node within Graphs.
 
 Resources
 Create/edit/destroy resources (images and buffers).
 
 Settings
 Global settings that affect all passes and graphs. The kind of stuff you'd expect to see in a game's video options.
 
 Shaders
 Create shaders to carry out programmable GPU work.
 
+ + + + +

+Typedefs

using tz::gpu::index_t = std::uint32_t
 Represents a single index. Indices are always 32-bit unsigned integers.
 
+ + + + + + + +

+Classes

struct  tz::gpu::draw_t
 Represents a single unindexed draw-call. More...
 
struct  tz::gpu::draw_indexed_t
 Represents a single indexed draw-call. More...
 
+

Typedef Documentation

+ +

◆ index_t

+ +
+
+ + + + +
using tz::gpu::index_t = std::uint32_t
+
+ +

Represents a single index. Indices are always 32-bit unsigned integers.

+ +
+
+
+ + +
+ + diff --git a/group__tz__gpu__graph.html b/group__tz__gpu__graph.html new file mode 100644 index 0000000000..9ce9c4f64f --- /dev/null +++ b/group__tz__gpu__graph.html @@ -0,0 +1,172 @@ + + + + + + + +Topaz: Graphs + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Topaz 5.0 +
+
Topaz Game Engine
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ + +
+
+

Description

+

Documentation for render graphs - describes the execution of Passes.

+ + + + + + + + +

+Classes

struct  tz::gpu::graph_info
 Specifies creation flags for a new graph. More...
 
struct  tz::gpu::graph_builder
 Helper struct for creating a new graph. Follows the builder pattern. More...
 
+

Function Documentation

+ +

◆ create_graph()

+ +
+
+ + + + + + + +
std::expected< graph_handle, tz::error_code > tz::gpu::create_graph (graph_info graph)
+
+ +

Create a new graph, which can be used for rendering a frame.

+
Returns
tz::error_code::invalid_value If you define a number of sets of dependencies that is greater than the timeline size. That is - the number of sets of dependencies should be less than or equal to the total number of passes in the graph.
+ +
+
+ +

◆ execute()

+ +
+
+ + + + + + + +
void tz::gpu::execute (graph_handle )
+
+ +

Execute the graph - invoking all passes contained a single time.

+ +
+
+

Enumeration Type Documentation

+ +

◆ graph_flag

+ +
+
+ + + + +
enum tz::gpu::graph_flag
+
+ +

Specifies optional, extra functionality for a graph.

+ +
+
+
+ + +
+ + diff --git a/group__tz__gpu__hardware.html b/group__tz__gpu__hardware.html new file mode 100644 index 0000000000..66e9925b08 --- /dev/null +++ b/group__tz__gpu__hardware.html @@ -0,0 +1,325 @@ + + + + + + + +Topaz: Hardware + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Topaz 5.0 +
+
Topaz Game Engine
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ + +
+
+

Description

+

Documentation specialised for iterating over rendering hardware and selecting one to be used for rendering.

+ + + + + +

+Classes

struct  tz::gpu::hardware
 Contains some basic information about a particular piece of hardware on the machine that the driver thinks could do GPU work. More...
 
+

Function Documentation

+ +

◆ iterate_hardware()

+ +
+
+ + + + + + + + + + + +
error_code tz::gpu::iterate_hardware (std::span< hardware > hardwares,
std::size_t * hardware_count = nullptr )
+
+ +

Retrieve information about all detected rendering hardware currently available on the machine.

+
Parameters
+ + + +
hardwaresA region of memory through which hardware information shall be written to. As many hardware components as possible will be written, until all hardware has been listed or the region does not have enough available space.
hardware_countA pointer to a value which (if not-null) will be updated with the total number of rendering hardware components available on the machine.
+
+
+
Returns
- error_code::partial_success If the span of hardwares provides is not large enough to store all hardwares on the machine.
+
+- error_code::precondition_failure If Topaz has not yet been initialised via tz::initialise.
+
+- error_code::unknown_error If some other error occurs.
+

If you aren't interested in choosing a hardware yourself, and are happy to let Topaz figure out the best for you, use find_best_hardware instead of this.

+

You should use this function if you:

    +
  • Want to examine all hardware available on the machine.
  • +
  • Know what you're doing and have a very specific set of requirements for your application, so much so that you cannot trust Topaz to give you the ideal result via find_best_hardware.
  • +
+ +
+
+ +

◆ find_best_hardware()

+ +
+
+ + + + + + + +
hardware tz::gpu::find_best_hardware ()
+
+ +

Retrieve the "best" hardware hardware on your machine.

+

This function prefers desktop GPUs that handle compute/graphics/transfer on the same queue.

+

If you want more control over which hardware is used, or you don't trust Topaz's opinion, consider calling iterate_hardware and choosing one yourself.

+

Unlike iterate_hardware, any error that the driver reports is considered fatal and will emit a tz_error.

+ +
+
+ +

◆ use_hardware()

+ +
+
+ + + + + + + +
error_code tz::gpu::use_hardware (hardware hw)
+
+ +

Select a piece of hardware to use for future graphical operations.

+
Parameters
+ + +
hwA hardware component of your choice that you wish to use to perform some GPU work.
+
+
+

You must select a piece of hardware using this API call before attempting to submit any GPU work. There is no default hardware selection.

+
Note
All previous tz::gpu state will be invalidated if you use a new piece of hardware. It is recommended to select your hardware once after tz::initialise, use it with this function and never attempt to use other hardware.
+ +
+
+ +

◆ get_used_hardware()

+ +
+
+ + + + + + + +
hardware tz::gpu::get_used_hardware ()
+
+ +

Retrieve the hardware that's currently being used.

+


+

+

This will return the hardware selected in a previous call to use_hardware. If you have never selected a hardware component by calling this previous function, this function will emit a tz_error.

+ +
+
+

Enumeration Type Documentation

+ +

◆ hardware_type

+ +
+
+ + + + + +
+ + + + +
enum class tz::gpu::hardware_type
+
+strong
+
+ +

Describes a specific type of rendering hardware.

+ + + + + +
Enumerator
gpu 

A discrete GPU, the most ideal hardware for graphics/compute. Typically seen on desktop PCs.

+
integrated_gpu 

An integrated GPU, typically seen on laptops.

+
cpu 

A CPU. One should expect subpar performance, but there may be reasons to use a CPU.

+
unknown 

Your graphics driver failed to identify the hardware, or Topaz does not support whatever it is. You should not attempt to create a hardware using this hardware.

+
+ +
+
+ +

◆ hardware_capabilities

+ +
+
+ + + + + +
+ + + + +
enum class tz::gpu::hardware_capabilities
+
+strong
+
+ +

Describes what kind of GPU operations a rendering hardware can carry out when used.

+ + + + + +
Enumerator
graphics_compute 

Both graphics and compute. These are always preferred.

+
graphics_only 

Graphics only. Attempting to carry out compute work on this hardware will fail.

+
compute_only 

Compute only. Attempting to carry out graphics work (rasterisation) on this hardware will fail.

+
neither 

The hardware is useless for Topaz. You should not attempt to create a hardware using this hardware.

+
+ +
+
+ +

◆ hardware_feature_coverage

+ +
+
+ + + + + +
+ + + + +
enum class tz::gpu::hardware_feature_coverage
+
+strong
+
+ +

Describes to what extent the rendering hardware supports all the features that Topaz requires.

+ + + + +
Enumerator
ideal 

The hardware supports everything Topaz needs to do to support all GPU Library features.

+
insufficient 

The hardware does not support all features, and as such could crash.

+
poor 

The hardware does not come close to supporting all required features, and as such should not be attempted to be used.

+
+ +
+
+
+ + +
+ + diff --git a/group__tz__gpu__pass.html b/group__tz__gpu__pass.html new file mode 100644 index 0000000000..1ae137985b --- /dev/null +++ b/group__tz__gpu__pass.html @@ -0,0 +1,442 @@ + + + + + + + +Topaz: Passes + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Topaz 5.0 +
+
Topaz Game Engine
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ + +
+
+

Description

+

Documentation for render/compute passes - each a single node within Graphs.

+ + + + + +

+Typedefs

using tz::gpu::pass_handle = tz::handle<pass_info>
 Corresponds to a previously-created pass.
 
+ + + + + + + + + + +

+Classes

struct  tz::gpu::pass_graphics_state
 Specifies creation flags for a new graphics pass. More...
 
struct  tz::gpu::pass_compute_state
 Specifies creation flags for a new compute pass. More...
 
struct  tz::gpu::pass_info
 Specifies creation flags for a new pass. More...
 
+

Function Documentation

+ +

◆ create_pass()

+ +
+
+ + + + + + + +
std::expected< pass_handle, tz::error_code > tz::gpu::create_pass (pass_info )
+
+ +

Create a new pass.

+
Returns
On success: A pass_handle corresponding to the newly created pass.
+
+tz::error_code::invalid_value If you fail to provide a valid shader program.
+
+tz::error_code::invalid_value If you provide a malformed shader program. A shader program is only well-formed if it consists of only a compute shader, OR it consists of a single vertex and fragment shader.
+
+tz::error_code::invalid_value For a graphics pass if you fail to provide at least one colour target.
+
+tz::error_code::invalid_value For a graphics pass if you provide a colour target that is invalid. A valid colour target is either a.) the window resource (and you have opened a window), b.) an image resource created with tz::gpu::image_flag::colour_target
+
+tz::error_code::precondition_failure For a graphics pass if any colour target provided does not exactly match the dimensions of all other provided colour targets. All colour targets must be images with the same dimensions. This does mean that if you provide the window resource as a colour target, all other colour targets must have the same dimensions as the window.
+
+tz::error_code::machine_unsuitable If the currently-used hardware does not support the pass you're attempting to create, for example if you attempt to create a graphics pass but your hardware has hardware_capabilities::compute_only.
+
+tz::error_code::oom If CPU memory is exhausted while trying to create the pass.
+
+tz::error_code::voom If GPU memory is exhausted while trying to create the pass.
+

Once you successfully create a pass, you can add it to a TODO: write docs on timelines

+

Once you're done with a pass, you can manually destroy it using destroy_pass.

Note
If you never destroy a pass manually, it will automatically be destroyed for you when you call tz::terminate.
+ +
+
+ +

◆ pass_set_triangle_count()

+ +
+
+ + + + + + + + + + + +
void tz::gpu::pass_set_triangle_count (pass_handle graphics_pass,
std::size_t triangle_count )
+
+ +

Set the triangle count of an existing graphics pass.

+
Parameters
+ + + +
graphics_passGraphics pass to target. If you provide a compute pass, nothing interesting happens.
triangle_countNew number of triangles to render every frame.
+
+
+

When you created a graphics pass, you set an initial triangle count via pass_graphics_state::triangle_count. This function will override that count, meaning the next time a pass submits GPU work, the new number of triangles will be rendered.

+

There are no GPU-sync considerations involved when calling this function.

Warning
If you fail to pass a valid pass_handle to this function, the behaviour is undefined.
+ +
+
+ +

◆ pass_set_kernel()

+ +
+
+ + + + + + + + + + + +
void tz::gpu::pass_set_kernel (pass_handle compute_pass,
tz::v3u kernel )
+
+ +

Set the compute kernel of an existing compute pass.

+
Parameters
+ + + +
compute_passCompute pass to target. If you provide a graphics pass, nothing interesting happens.
kernelNew workgroup dimensions to be dispatched every frame.
+
+
+

When you created a compute pass, you set an initial kernel size via pass_compute_state::kernel. This function will override those dimensions, meaning the next time a pass submits GPU work, the new workgroup dimensions will be dispatched.

+

There are no GPU-sync considerations involved when calling this function.

Warning
If you fail to pass a valid pass_handle to this function, the behaviour is undefined.
+ +
+
+ +

◆ pass_set_scissor()

+ +
+
+ + + + + + + + + + + +
void tz::gpu::pass_set_scissor (pass_handle graphics_pass,
tz::v4u scissor )
+
+ +

Set the scissor rectangle of an existing graphics pass.

+
Parameters
+ + + +
graphics_passGraphics pass to target. If you provide a graphics pass, nothing interesting happens.
scissorScissor rectangle, see pass_graphics_state::scissor for further details.
+
+
+

When you created a graphics pass, you may or may not have explicitly set an initial scissor rectangle via pass_graphics_state::scissor. This function will override those dimensions, meaning the next time a pass submits GPU work, the new scissor rectangle will be used.

+

There are no GPU-sync considerations involved when calling this function.

Warning
If you fail to pass a valid pass_handle to this function, the behaviour is undefined.
+ +
+
+ +

◆ pass_add_image_resource()

+ +
+
+ + + + + + + + + + + +
tz::error_code tz::gpu::pass_add_image_resource (pass_handle pass,
resource_handle res )
+
+ +

Add a new image resource to be used in the pass.

+
Returns
tz::error_code::invalid_value If you fail to provide a valid image resource. Note that this excludes buffer resources, the window resource, and the null resource.
+
+tz::error_code::driver_hazard If there are too many images used by the pass already. Passes have an implementation-defined maximum image count that is guaranteed to be at least 4096.
+

This will permanently increase the number of resources used in the pass. It is not possible to change the shader used by a pass, so the shader associated with the pass is expected to conditionally use the new image id anyway.

+

All other resources used by the pass are unchanged. The index of this new image to be used in the shader will be equal to the previous number of images.

+ +
+
+ +

◆ destroy_pass()

+ +
+
+ + + + + + + +
void tz::gpu::destroy_pass (pass_handle )
+
+ +

Manually destroy a pass.

+

Passes can be quite heavy in the context of both CPU and GPU memory. This is due to internal components such as recorded command buffers, synchronisation primitives and compiled shader code.

+

Because of this, it might sometimes be necessary to manually destroy a pass once you are certain you have no further use of it. This will free up a bunch of CPU/GPU memory.

+
Warning
If you fail to pass a valid pass_handle to this function, the behaviour is undefined.
+ +
+
+

Typedef Documentation

+ +

◆ pass_handle

+ +
+
+ +

Corresponds to a previously-created pass.

+ +
+
+

Enumeration Type Documentation

+ +

◆ pass_type

+ +
+
+ + + + + +
+ + + + +
enum class tz::gpu::pass_type
+
+strong
+
+ +

Describes what kind of GPU work a pass will involve.

+ + + +
Enumerator
render 

Render Pass - involves rendering some kind of geometry via a vertex and fragment shader.

+
compute 

Compute Pass - involves bespoke GPU-side processing via a compute shader.

+
+ +
+
+ +

◆ graphics_flag

+ +
+
+ + + + +
enum tz::gpu::graphics_flag
+
+ +

Specifies optional behaviours for a graphics pass.

+ + + + +
Enumerator
dont_clear 

Do not clear the colour target images prior to rendering - whatever data they held previously will be loaded prior to rendering.

+
no_depth_test 

Disable depth testing - i.e fragments that are behind another may still draw over it.

+
no_depth_write 

Disable depth writes - i.e when a depth test is passed by a fragment, the old depth value is not overwritten, but stays as it was before.

+
Note
Depth writes are always disabled if depth testing is disabled (see graphics_flag::no_depth_test).
+
+ +
+
+ +

◆ cull

+ +
+
+ + + + + +
+ + + + +
enum class tz::gpu::cull
+
+strong
+
+ +

Specifies face culling behaviour of a graphics pass.

+ + + + + +
Enumerator
both 

Cull front and back faces.

+
front 

Cull the front face.

+
back 

Cull the back face.

+
none 

Do not perform any face culling.

+
+ +
+
+

Variable Documentation

+ +

◆ present_pass

+ +
+
+ + + + + +
+ + + + +
auto tz::gpu::present_pass = static_cast<tz::hanval>(std::numeric_limits<std::underlying_type_t<tz::hanval>>::max() - 1)
+
+constexpr
+
+ +

Meta-pass that acts as an action to present the system image to the screen.

+ +
+
+
+ + +
+ + diff --git a/group__tz__gpu__resource.html b/group__tz__gpu__resource.html new file mode 100644 index 0000000000..c6dba76e84 --- /dev/null +++ b/group__tz__gpu__resource.html @@ -0,0 +1,603 @@ + + + + + + + +Topaz: Resources + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Topaz 5.0 +
+
Topaz Game Engine
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ + +
+
+

Description

+

Create/edit/destroy resources (images and buffers).

+ + + + + +

+Typedefs

using tz::gpu::resource_handle = tz::handle<buffer_info>
 Corresponds to a previously-created resource (buffer or image).
 
+ + + + + + + +

+Classes

struct  tz::gpu::buffer_info
 Specifies creation flags for a buffer. More...
 
struct  tz::gpu::image_info
 Specifies creation flags for an image. More...
 
+

Function Documentation

+ +

◆ create_buffer()

+ +
+
+ + + + + + + +
std::expected< resource_handle, tz::error_code > tz::gpu::create_buffer (buffer_info )
+
+ +

Create a new buffer.

+
Returns
On success: A resource_handle corresponding to the newly-created buffer.
+
+tz::error_code::precondition_failure If the buffer info you provided was malformed (99% you are trying to use a zero-sized buffer which isn't supported).
+
+tz::error_code::oom If CPU memory is exhausted whilst trying to create the buffer.
+
+tz::error_code::voom If GPU memory is exhausted whilst trying to create the buffer.
+
+tz::error_code::unknown_error If some other undocumented error occurs.
+

Once you successfully create a resource, you can use the returned resource_handle to create a new renderer that uses that resource.

+

Once you're done with a resource, you can destroy it using destroy_resource.

Note
If you never destroy a resource manually, it will automatically be destroyed for you when you call tz::terminate.
+ +
+
+ +

◆ create_image()

+ +
+
+ + + + + + + +
std::expected< resource_handle, tz::error_code > tz::gpu::create_image (image_info )
+
+ +

Create a new image.

+
Returns
On success: A resource_handle corresponding to the newly-created image.
+
+tz::error_code::oom If CPU memory is exhausted whilst trying to create the image.
+
+tz::error_code::voom If GPU memory is exhausted whilst trying to create the image.
+
+tz::error_code::unknown_error If some other undocumented error occurs.
+

Once you successfully create a resource, you can use the returned resource_handle to create a new renderer that uses that resource.

+

Once you're done with a resource, you can destroy it using destroy_resource.

Note
If you never destroy a resource manually, it will automatically be destroyed for you when you call tz::terminate.
+ +
+
+ +

◆ destroy_resource()

+ +
+
+ + + + + + + +
tz::error_code tz::gpu::destroy_resource (resource_handle res)
+
+ +

Manually destroy a resource.

+
Returns
tz::error_code::invalid_value If you attempt to delete the null resource tz::nullhand.
+
+tz::error_code::invalid_value If you attempt to delete the window resource tz::gpu::window_resource.
+
+tz::error_code::invalid_value If the resource handle provided is invalid. This usually happens due to memory corruption or an accidental double-delete.
+
+tz::error_code::concurrent_usage If the resource is being used by at least one pass.
+

If you know a resource uses alot of memory, or you're sure you're not going to use it anymore, you can destroy it here, causing all of its memory to be available for reuse.

+
Note
If you never destroy a resource manually, it will automatically be destroyed for you when you call tz::terminate.
+
Warning
You must not delete a resource that has been registered for use by an existing pass, until you delete all such passes first.
+ +
+
+ +

◆ resource_write()

+ +
+
+ + + + + + + + + + + + + + + + +
tz::error_code tz::gpu::resource_write (resource_handle res,
std::span< const std::byte > new_data,
std::size_t offset = 0 )
+
+ +

Write some new data to a resource. The thread will block until the changes are resident GPU-side.

+
Parameters
+ + + +
resResource whose data should be changed.
new_dataRegion containing new memory for the provided resource.
+
+
+
Returns
tz::error_code::invalid_value If the write is too large. The size of the new data + offset must be less than or equal to the resource's size.
+

If the region of new data is smaller than the total size of the resource's underlying data, then all bytes beyond the new data region will be unchanged and keep their previous state.

+

Regarding buffer resources:

    +
  • If the buffer is dynamic_access, the cost of the transfer should be in the same ballpark as a memcpy. In all other cases, a resource write is much slower. Regarding image resources:
  • +
  • The data should be in the format of a tightly-packed array containing rows of pixels.
      +
    • If the image was created with image_type::rgba, then each pixel should be 4 bytes - one for each component (0-255).
    • +
    • If the image was created with image_type::depth or image_type::floats, then each pixel should be 4 bytes - a single signed 32-bit float.
    • +
    +
  • +
+ +
+
+ +

◆ resource_size()

+ +
+
+ + + + + + + +
std::size_t tz::gpu::resource_size (resource_handle res)
+
+ +

Retrieve the size of a resource's data, in bytes.

+ +
+
+ +

◆ image_get_width()

+ +
+
+ + + + + + + +
unsigned int tz::gpu::image_get_width (resource_handle res)
+
+ +

Retrieve the width of an image resource.

+
    +
  • It is valid to pass tz::gpu::window_resource, in which case the width of the window image will be returned.
  • +
  • If you do not pass a valid image resource (e.g a buffer resource, or the null handle), then 0 is returned.
  • +
+ +
+
+ +

◆ image_get_height()

+ +
+
+ + + + + + + +
unsigned int tz::gpu::image_get_height (resource_handle res)
+
+ +

Retrieve the height of an image resource.

+
    +
  • It is valid to pass tz::gpu::window_resource, in which case the height of the window image will be returned.
  • +
  • If you do not pass a valid image resource (e.g a buffer resource, or the null handle), then 0 is returned.
  • +
+ +
+
+ +

◆ resource_read()

+ +
+
+ + + + + + + +
std::span< const std::byte > tz::gpu::resource_read (resource_handle res)
+
+ +

Retrieves the current data within a resource.

+

You aren't allowed to read from tz::gpu::window_resource.

+ +
+
+ +

◆ buffer_resize()

+ +
+
+ + + + + + + + + + + +
void tz::gpu::buffer_resize (resource_handle bufh,
std::size_t new_size_bytes )
+
+ +

Resize a buffer resource.

+
    +
  • If the size of the buffer increases, the new memory at the end will be of unspecified value.
  • +
  • Any data within the buffer that you have previously written to will be preserved.
  • +
+ +
+
+ +

◆ image_resize()

+ +
+
+ + + + + + + + + + + + + + + + +
void tz::gpu::image_resize (resource_handle imgh,
unsigned int new_width,
unsigned int new_height )
+
+ +

Resize an image resource.

+
    +
  • If the size of the image increases, the new rows/columns of the image will be of unspecified value.
  • +
  • Any data within the image that you have previously written to will be preserved.
  • +
+ +
+
+ +

◆ index_buffer_write()

+ +
+
+ + + + + + + + + + + +
tz::error_code tz::gpu::index_buffer_write (resource_handle index_buffer,
std::span< const index_t > indices )
+
+ +

Write indices into a buffer resource.

+

This is a helper function which will call resource_write under-the-hood.

+ +
+
+ +

◆ draw_buffer_write()

+ +
+
+ + + + + + + + + + + + + + + + +
tz::error_code tz::gpu::draw_buffer_write (resource_handle draw_buffer,
std::uint32_t count,
std::span< const draw_t > draws )
+
+ +

Write draw-indirect-count + commands into a buffer resource.

+

This is a helper function which will call resource_write under-the-hood.

+ +
+
+ +

◆ draw_buffer_indexed_write()

+ +
+
+ + + + + + + + + + + + + + + + +
tz::error_code tz::gpu::draw_buffer_indexed_write (resource_handle draw_buffer,
std::uint32_t count,
std::span< const draw_indexed_t > draws )
+
+ +

Write draw-indirect-count + indexed commands into a buffer resource.

+

This is a helper function which will call resource_write under-the-hood.

+ +
+
+

Typedef Documentation

+ +

◆ resource_handle

+ +
+
+ +

Corresponds to a previously-created resource (buffer or image).

+ +
+
+

Enumeration Type Documentation

+ +

◆ buffer_flag

+ +
+
+ + + + +
enum tz::gpu::buffer_flag
+
+ +

Specifies optional behaviours for a buffer.

+ + + + +
Enumerator
index 

Buffer can be used as an index buffer by a graphics pass.

+
draw 

Buffer can be used as a draw buffer by a graphics pass.

+
dynamic_access 

Buffer data will be writable directly from the CPU. Resource writes targetting buffers that are dynamic_access will be extremely fast. On some hardware, dynamic_access buffers will be slower to read/write from a shader.

+
+ +
+
+ +

◆ image_type

+ +
+
+ + + + + +
+ + + + +
enum class tz::gpu::image_type
+
+strong
+
+ +

Describes the internal format of an image's data.

+

You are not able to choose a specific sized format.

+ + + + +
Enumerator
rgba 

Image data is in a 32-bit RGBA unsigned normalised format.

+
depth 

Image is comprised of 32-bit floats per pixel, but is only used as a depth image.

+
floats 

Image is comprised of 32-bit floats per pixel, but cannot be used as a depth image. Useful for normal maps.

+
+ +
+
+ +

◆ image_flag

+ +
+
+ + + + +
enum tz::gpu::image_flag
+
+ +

Specifies optional behaviours for a buffer.

+ + + +
Enumerator
colour_target 

Image can be used as a colour target by a graphics pass.

+
depth_target 

Image can be used as a depth target by a graphics pass.

+
+ +
+
+

Variable Documentation

+ +

◆ window_resource

+ +
+
+ + + + + +
+ + + + +
auto tz::gpu::window_resource = static_cast<tz::hanval>(std::numeric_limits<std::underlying_type_t<tz::hanval>>::max() - 1)
+
+constexpr
+
+ +

Corresponds to either the window image (as a colour target) or the system depth image (as a depth target). Note that it is invalid to use this value for anything other than pass_graphics_state::colour_targets or pass_graphics_state::depth_target.

+ +
+
+
+ + +
+ + diff --git a/group__tz__gpu__settings.html b/group__tz__gpu__settings.html new file mode 100644 index 0000000000..e55bc8d711 --- /dev/null +++ b/group__tz__gpu__settings.html @@ -0,0 +1,144 @@ + + + + + + + +Topaz: Settings + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Topaz 5.0 +
+
Topaz Game Engine
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
+
+

Description

+

Global settings that affect all passes and graphs. The kind of stuff you'd expect to see in a game's video options.

+

Function Documentation

+ +

◆ settings_get_vsync()

+ +
+
+ + + + + + + +
bool tz::gpu::settings_get_vsync ()
+
+ +

Query as to whether vsync is enabled.

+

By default, vsync is disabled.

+ +
+
+ +

◆ settings_set_vsync()

+ +
+
+ + + + + + + +
void tz::gpu::settings_set_vsync (bool enabled)
+
+ +

Enable/disable vsync.

+

By default, vsync is disabled. You should assume that this function will take a significantly long time.

+ +
+
+
+ + +
+ + diff --git a/group__tz__gpu__shader.html b/group__tz__gpu__shader.html new file mode 100644 index 0000000000..1aa5fd7701 --- /dev/null +++ b/group__tz__gpu__shader.html @@ -0,0 +1,266 @@ + + + + + + + +Topaz: Shaders + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Topaz 5.0 +
+
Topaz Game Engine
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ + +
+
+

Description

+

Create shaders to carry out programmable GPU work.

+ + + + + +

+Typedefs

using tz::gpu::shader_handle = tz::handle<shader_tag_t>
 Corresponds to a previously-created shader program (for graphics or compute).
 
+

Function Documentation

+ +

◆ create_graphics_shader()

+ +
+
+ + + + + + + + + + + +
std::expected< shader_handle, tz::error_code > tz::gpu::create_graphics_shader (std::string_view vertex_source,
std::string_view fragment_source )
+
+ +

Create a new shader intended for graphics GPU work, comprised of a vertex and fragment shader.

+
Parameters
+ + + +
vertex_sourceCode for the vertex shader, in SPIRV.
fragment_sourceCode for the fragment shader, in SPIRV.
+
+
+
Returns
On success: A shader_handle corresponding to the newly-created shader program.
+
+tz::error_code::oom If CPU memory is exhausted whilst trying to create the shader program.
+
+tz::error_code::voom If GPU memory is exhausted whilst trying to create the shader program.
+
+tz::error_code::unknown_error If some other undocumented error occurs.
+ +
+
+ +

◆ create_compute_shader()

+ +
+
+ + + + + + + +
std::expected< shader_handle, tz::error_code > tz::gpu::create_compute_shader (std::string_view compute_source)
+
+ +

Create a new shader intended for compute GPU work, comprised of a single compute shader.

+
Parameters
+ + +
compute_sourceCode for the compute shader, in SPIRV.
+
+
+
Returns
On success: A shader_handle corresponding to the newly-created shader program.
+
+tz::error_code::oom If CPU memory is exhausted whilst trying to create the shader program.
+
+tz::error_code::voom If GPU memory is exhausted whilst trying to create the shader program.
+
+tz::error_code::unknown_error If some other undocumented error occurs.
+ +
+
+ +

◆ destroy_shader()

+ +
+
+ + + + + + + +
void tz::gpu::destroy_shader (shader_handle )
+
+ +

Manually destroy a previously-created shader.

+

If you are certain that you are done with a shader program, you can destroy it here, causing all of its memory to be available for reuse.

+
Note
If you never destroy a shader manually, it will automatically be destroyed for you when you call tz::terminate.
+
Warning
Be aware of GPU synchronisation! Ensure that you do not destroy a shader that is currently in-use by ongoing GPU work. Take care to ensure that renderers using the resource have finished their work before tearing it down.
+ +
+
+

Macro Definition Documentation

+ +

◆ ImportedShaderHeader

+ +
+
+ + + + + + + + + + + +
#define ImportedShaderHeader( shader_name,
shader_type )
+
+

Retrieves a file path which is intended to be #included in a application's main source file. Once included, the imported shader's source code can be retrieved as a constexpr string_view via ImportedShaderSource

+ +
+
+ +

◆ ImportedShaderSource

+ +
+
+ + + + + + + + + + + +
#define ImportedShaderSource( shader_name,
shader_type )
+
+

Retrieves a token representing a std::string_view which contains the shader's compiled results. On Vulkan, this will be SPIRV, and GLSL source code for OpenGL. You can only retrieve an imported shader's source if the imported header has been included via ImportedShaderHeader

+ +
+
+

Typedef Documentation

+ +

◆ shader_handle

+ +
+
+ + + + +
using tz::gpu::shader_handle = tz::handle<shader_tag_t>
+
+ +

Corresponds to a previously-created shader program (for graphics or compute).

+ +
+
+
+ + +
+ + diff --git a/group__tz__io.html b/group__tz__io.html new file mode 100644 index 0000000000..4bb23251d4 --- /dev/null +++ b/group__tz__io.html @@ -0,0 +1,181 @@ + + + + + + + +Topaz: IO Library + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Topaz 5.0 +
+
Topaz Game Engine
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
IO Library
+
+
+

Description

+

High-level library for wrangling files of various formats.

+

This library contains support for a handful of common file formats, allowing you to import them without having to implement a parser yourself.

+ + + + + +

+Classes

struct  tz::io::image_header
 Describes basic information about an image. More...
 
+

Function Documentation

+ +

◆ image_info()

+ +
+
+ + + + + + + +
std::expected< image_header, tz::error_code > tz::io::image_info (std::span< const std::byte > img_file_data)
+
+ +

Retrieve info about an image loaded in memory.

+
Parameters
+ + +
img_file_dataData read directly from an image file. See below for the list of supported image file formats.
+
+
+
Returns
A image_header containing basic information about the image, or some tz::error_code if the image data could not be parsed.
+

The image file formats guaranteed are:

    +
  • jpg
  • +
  • png
  • +
  • bmp
  • +
+

Other file formats that aren't listed here might still work, but you should consider anything not on this list an implementation detail that could lose support suddenly in a new release.

+ +
+
+ +

◆ parse_image()

+ +
+
+ + + + + + + + + + + +
tz::error_code tz::io::parse_image (std::span< const std::byte > img_file_data,
std::span< std::byte > buffer )
+
+ +

Load an image from file data resident in memory.

+
Parameters
+ + + +
img_file_dataData read directly from an image file. See the detailsof image_info for a list of supported image file formats.
bufferA buffer of memory into which decoded image data will be written. It is your responsibility to provide a buffer that is of sufficient size. To decipher the size needed, see image_info.
+
+
+
Returns
tz::error_code::success If the image data was successfully decoded.
+
+tz::error_code::oom If the buffer you provided was not of sufficient size.
+
+tz::error_code::unknown_error If image decoding failed for some other reason.
+ +
+
+
+ + +
+ + diff --git a/group__tz__os.html b/group__tz__os.html new file mode 100644 index 0000000000..4bcd27cab2 --- /dev/null +++ b/group__tz__os.html @@ -0,0 +1,115 @@ + + + + + + + +Topaz: OS Libraries + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Topaz 5.0 +
+
Topaz Game Engine
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
OS Libraries
+
+
+

Description

+

Cross-platform API to interact with operating-system level components, such as windowing, hardware input, and machine non-GPU hardware.

+ + + + + + + + +

+Topics

 Input System
 Retrieve keyboard/mouse input.
 
 Window System
 Creating, modifying and destroying OS windows.
 
+
+ + +
+ + diff --git a/group__tz__os__input.html b/group__tz__os__input.html new file mode 100644 index 0000000000..2fff09e57f --- /dev/null +++ b/group__tz__os__input.html @@ -0,0 +1,203 @@ + + + + + + + +Topaz: Input System + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Topaz 5.0 +
+
Topaz Game Engine
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
+
+

Description

+

Retrieve keyboard/mouse input.

+

Function Documentation

+ +

◆ install_char_typed_callback()

+ +
+
+ + + + + + + +
tz::error_code tz::os::install_char_typed_callback (char_type_callback callback)
+
+ +

Install a callback which will be invoked whenever the user types a character on the keyboard.

+
Parameters
+ + +
callbackPointer to a function which will be called whenever a character is typed. If you pass nullptr, the callback will safely be ignored.
+
+
+
Returns
- error_code::precondition_failure if a window has not yet been opened.
+ +
+
+ +

◆ is_key_pressed()

+ +
+
+ + + + + + + +
bool tz::os::is_key_pressed (key k)
+
+ +

Query as to whether a specific key is pressed right now.

+
Parameters
+ + +
kKeyboard key to query
+
+
+
Returns
True if the given key is currently pressed, otherwise false.
+ +
+
+ +

◆ get_mouse_position()

+ +
+
+ + + + + + + +
std::pair< unsigned int, unsigned int > tz::os::get_mouse_position ()
+
+ +

Retrieve the mouse cursor's current position, in pixels, relative to the top-left of the window.

+

If for whatever reason the cursor pos cannot be retrieved, {-1, -1} is returned. Some reasons could include:

    +
  • You haven't opened a window via open_window.
  • +
  • The mouse currently lies outside of the window.
  • +
+ +
+
+

Enumeration Type Documentation

+ +

◆ key

+ +
+
+ + + + + +
+ + + + +
enum class tz::os::key
+
+strong
+
+

Represents a key on your keyboard.

+ +
+
+
+ + +
+ + diff --git a/group__tz__os__window.html b/group__tz__os__window.html new file mode 100644 index 0000000000..ae8a462e0a --- /dev/null +++ b/group__tz__os__window.html @@ -0,0 +1,440 @@ + + + + + + + +Topaz: Window System + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Topaz 5.0 +
+
Topaz Game Engine
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Window System
+
+
+

Description

+

Creating, modifying and destroying OS windows.

+ + + + + +

+Classes

struct  tz::os::window_info
 Basic customisation of a newly-opened window. More...
 
+

Function Documentation

+ +

◆ open_window()

+ +
+
+ + + + + + + +
tz::error_code tz::os::open_window (window_info winfo)
+
+ +

Open a new window.

+
Returns
- error_code::precondition_failure if you have not yet initialised the engine via tz::initialise.
+
+- error_code::unknown_error if window creation fails for some other reason.
+
+- error_code::partial_success if you opted into window_flags::transparent but your platform/machine does not support it.
+

Only one window can be open at a time - If you have called this function before but have not since closed the previous window, it will automatically be closed.

+ +
+
+ +

◆ close_window()

+ +
+
+ + + + + + + +
tz::error_code tz::os::close_window ()
+
+ +

Close a previously-opened window.

+
Returns
- error_code::precondition_failure if you have not yet initialised the engine via tz::initialise.
+
+- error_code::precondition_failure if you have not previously opened a window via open_window.
+
+- error_code::unknown_error if window destruction fails for some other reason.
+

Only one window can be open at a time - If you have called this function before but have not since closed the previous window, it will automatically be closed.

+ +
+
+ +

◆ window_is_open()

+ +
+
+ + + + + + + +
bool tz::os::window_is_open ()
+
+ +

Query as to whether a window has been opened that has not yet been closed.

+
Returns
True if an open window is available, false otherwise.
+ +
+
+ +

◆ window_update()

+ +
+
+ + + + + + + +
void tz::os::window_update ()
+
+ +

Poll updates for a window, advancing input events etc.

+

If an open window does not exist, this function safely does nothing.

+ +
+
+ +

◆ get_window_handle()

+ +
+
+ + + + + + + +
window_handle tz::os::get_window_handle ()
+
+ +

Retrieve a opaque handle corresponding to the underlying window native.

+
    +
  • If you have not previously opened a window, i.e window_is_open() returns false - then this will return nullhand.
  • +
  • If you are on windows, you can convert this to a HWND via (HWND)(uintptr_t)handle.peek()
  • +
  • TODO: what do on linux?
  • +
+ +
+
+ +

◆ window_get_width()

+ +
+
+ + + + + + + +
unsigned int tz::os::window_get_width ()
+
+ +

Retrieve the width of the window, in pixels.

+
Note
If a window is not open, nothing happens.
+

See window_set_dimensions to programatically resize the window.

+ +
+
+ +

◆ window_get_height()

+ +
+
+ + + + + + + +
unsigned int tz::os::window_get_height ()
+
+ +

Retrieve the height of the window, in pixels.

+
Note
If a window is not open, nothing happens.
+

See window_set_dimensions to programatically resize the window.

+ +
+
+ +

◆ window_set_dimensions()

+ +
+
+ + + + + + + + + + + +
void tz::os::window_set_dimensions (unsigned int width,
unsigned int height )
+
+ +

Set a new width and height for the open window.

+
Note
If a window is not open, nothing happens.
+ +
+
+ +

◆ window_get_title()

+ +
+
+ + + + + + + +
std::string tz::os::window_get_title ()
+
+ +

Retrieve the title of the window.

+
Note
If a window is not open, an empty string is returned.
+ +
+
+ +

◆ window_set_title()

+ +
+
+ + + + + + + +
void tz::os::window_set_title (std::string_view title)
+
+ +

Set a new title for the open window.

+
Note
If a window is not open, nothing happens.
+ +
+
+ +

◆ window_maximise()

+ +
+
+ + + + + + + +
void tz::os::window_maximise ()
+
+ +

Maximise the window, causing it to cover the whole screen.

+
Note
If a window is not open, nothing happens.
+ +
+
+ +

◆ window_minimise()

+ +
+
+ + + + + + + +
void tz::os::window_minimise ()
+
+ +

Minimise the window, causing it to no longer be visible until maximised/shown.

+
Note
If a window is not open, nothing happens.
+ +
+
+ +

◆ window_show()

+ +
+
+ + + + + + + +
void tz::os::window_show ()
+
+ +

Show the window as normal, even if it is currently maximised/minimised/fullscreen.

+
Note
If a window is not open, nothing happens.
+ +
+
+ +

◆ window_fullscreen()

+ +
+
+ + + + + + + +
void tz::os::window_fullscreen ()
+
+ +

Display the window in proper fullscreen.

+
Note
If a window is not open, nothing happens.
+ +
+
+

Enumeration Type Documentation

+ +

◆ window_flags

+ +
+
+ + + + +
enum tz::os::window_flags
+
+ +

Optional behaviours/attributes when opening windows.

+ + + + + +
Enumerator
centered_window 

Ignore the x and y coordinates provided within window_info and position the window approximately in the middle of the screen instead.

+
maximised 

Ignore the width and height provided within window_info and set set the window as maximised instead.

+
transparent 

When a pixel of the window's framebuffer is never drawn to, instead of being a clamped colour it is instead fully transparent. Your mileage may vary, depending on your platform.

+
invisible 

When the window is "opened", it is completely invisible to the user. They won't see the window, nor will it be visible in the OS' taskbar.

+
+ +
+
+
+ + +
+ + diff --git a/group__tz__ren.html b/group__tz__ren.html new file mode 100644 index 0000000000..079458f40b --- /dev/null +++ b/group__tz__ren.html @@ -0,0 +1,113 @@ + + + + + + + +Topaz: Rendering Library + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Topaz 5.0 +
+
Topaz Game Engine
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Rendering Library
+
+
+

Description

+

High-level declarative rendering API built upon the GPU Library.

+

This library contains some pre-created high-level rendering systems used for common tasks, such as rendering 3D models, or user interface. These components are intended to be used in most Topaz games, with the goal of not needing to reinvent the wheel in every single game using the Rendering Library.

+ + + + + +

+Topics

 Quad Renderer
 Efficiently render a large number of 2D quads.
 
+
+ + +
+ + diff --git a/group__tz__ren__quad.html b/group__tz__ren__quad.html new file mode 100644 index 0000000000..8ee1bf8c86 --- /dev/null +++ b/group__tz__ren__quad.html @@ -0,0 +1,536 @@ + + + + + + + +Topaz: Quad Renderer + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Topaz 5.0 +
+
Topaz Game Engine
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ + +
+
+

Description

+

Efficiently render a large number of 2D quads.

+
    +
  1. Create a quad renderer via create_quad_renderer.
  2. +
  3. Create a bunch of quads using repeated calls to quad_renderer_create_quad.
  4. +
  5. Every frame, retrieve the graph via quad_renderer_graph and pass that to tz::gpu::execute to render all the quads.
  6. +
+ + + + + + + + +

+Typedefs

using tz::ren::quad_handle = tz::handle<detail::quad_t>
 Represents a single quad. Owned by a quad_renderer_handle.
 
using tz::ren::quad_renderer_handle = tz::handle<detail::quadren_t>
 Represents a single quad renderer instance.
 
+ + + + + + + +

+Classes

struct  tz::ren::quad_renderer_info
 Specifies creation flags for a quad renderer. More...
 
struct  tz::ren::quad_info
 Specifies initial data for a single quad. More...
 
+

Function Documentation

+ +

◆ create_quad_renderer()

+ +
+
+ + + + + + + +
std::expected< quad_renderer_handle, tz::error_code > tz::ren::create_quad_renderer (quad_renderer_info info)
+
+ +

Create a new quad renderer.

+
Returns
On success: A quad_renderer_handle corresponding to the newly-created quad renderer.
+
+On failure: Any error returned by the automatic call to create_pass.
+ +
+
+ +

◆ destroy_quad_renderer()

+ +
+
+ + + + + + + +
tz::error_code tz::ren::destroy_quad_renderer (quad_renderer_handle renh)
+
+ +

Manually destroy a quad renderer.

+
Returns
On failure: Any error returned by the automatic calls to destroy_resource.
+ +
+
+ +

◆ quad_renderer_create_quad()

+ +
+
+ + + + + + + + + + + +
std::expected< quad_handle, tz::error_code > tz::ren::quad_renderer_create_quad (quad_renderer_handle renh,
quad_info info )
+
+ +

Create a new quad to be rendered by an existing quad renderer.

+
Returns
On success, a handle corresponding to the newly created quad.
+
+tz::error_code::invalid_value If you provide an invalid texture-id.
+

Next time the quad renderer executes, this new quad will be visible with the info provided.

+ +
+
+ +

◆ quad_renderer_add_texture()

+ +
+
+ + + + + + + + + + + +
std::expected< std::uint32_t, tz::error_code > tz::ren::quad_renderer_add_texture (quad_renderer_handle renh,
tz::gpu::resource_handle image )
+
+ +

Associate an existing image resource with the provided quad renderer, allowing quads to use it as a texture.

+
Returns
On success, a integer representing the texture-id corresponding to the image. You can cause a quad to use this texture via set_quad_texture.
+
+On failure: Any error returned by the automatic call to pass_add_image_resource.
+ +
+
+ +

◆ get_quad_position()

+ +
+
+ + + + + + + + + + + +
tz::v2f tz::ren::get_quad_position (quad_renderer_handle renh,
quad_handle quad )
+
+ +

Retrieve the position of a quad, in world-space.

+ +
+
+ +

◆ set_quad_position()

+ +
+
+ + + + + + + + + + + + + + + + +
void tz::ren::set_quad_position (quad_renderer_handle renh,
quad_handle quad,
tz::v2f position )
+
+ +

Set a new position of a quad, in world-space.

+ +
+
+ +

◆ get_quad_scale()

+ +
+
+ + + + + + + + + + + +
tz::v2f tz::ren::get_quad_scale (quad_renderer_handle renh,
quad_handle quad )
+
+ +

Retrieve the scale factor of a quad, in both dimensions.

+ +
+
+ +

◆ set_quad_scale()

+ +
+
+ + + + + + + + + + + + + + + + +
void tz::ren::set_quad_scale (quad_renderer_handle renh,
quad_handle quad,
tz::v2f scale )
+
+ +

Set a new scale factor of a quad, in both dimensions.

+ +
+
+ +

◆ get_quad_colour()

+ +
+
+ + + + + + + + + + + +
tz::v3f tz::ren::get_quad_colour (quad_renderer_handle renh,
quad_handle quad )
+
+ +

Retrieve the colour of a quad.

+

See quad_info::colour for more details.

+ +
+
+ +

◆ set_quad_colour()

+ +
+
+ + + + + + + + + + + + + + + + +
void tz::ren::set_quad_colour (quad_renderer_handle renh,
quad_handle quad,
tz::v3f colour )
+
+ +

Set a new colour of a quad.

+

See quad_info::colour for more details.

+ +
+
+ +

◆ get_quad_texture()

+ +
+
+ + + + + + + + + + + +
std::uint32_t tz::ren::get_quad_texture (quad_renderer_handle renh,
quad_handle quad )
+
+ +

Retrieve the texture-id currently being used by a quad.

+
Returns
(-1) If the quad was not using a texture.
+ +
+
+ +

◆ set_quad_texture()

+ +
+
+ + + + + + + + + + + + + + + + +
void tz::ren::set_quad_texture (quad_renderer_handle renh,
quad_handle quad,
std::uint32_t texture_id )
+
+ +

Set a new texture-id to be used by a quad.

+

Note: Passing -1 as the texture-id will cause the quad to no longer sample from a texture.

+ +
+
+ +

◆ quad_renderer_graph()

+ +
+
+ + + + + + + +
tz::gpu::graph_handle tz::ren::quad_renderer_graph (quad_renderer_handle renh)
+
+ +

Retrieve a graph representing the quad renderer.

+

To actually execute a quad renderer, you must retrieve it's graph and pass it to tz::gpu::execute. See Graphs for more info.

+ +
+
+ +

◆ quad_renderer_update()

+ +
+
+ + + + + + + +
void tz::ren::quad_renderer_update (quad_renderer_handle renh)
+
+ +

Update internal state for a quad renderer.

+
    +
  • This does not render anything.
  • +
  • You should call this every frame, before rendering.
  • +
+ +
+
+

Typedef Documentation

+ +

◆ quad_handle

+ +
+
+ + + + +
using tz::ren::quad_handle = tz::handle<detail::quad_t>
+
+ +

Represents a single quad. Owned by a quad_renderer_handle.

+ +
+
+ +

◆ quad_renderer_handle

+ +
+
+ + + + +
using tz::ren::quad_renderer_handle = tz::handle<detail::quadren_t>
+
+ +

Represents a single quad renderer instance.

+

You can have multiple quad renderers at the same time. Any quad_handle retrieved from creating a quad will be owned solely by whichever quad renderer you used to create it.

+ +
+
+

Enumeration Type Documentation

+ +

◆ quad_renderer_flag

+ +
+
+ + + + +
enum tz::ren::quad_renderer_flag
+
+ +

Specifies optional, extra functionality for a quad renderer.

+ + + + +
Enumerator
alpha_clipping 

If the alpha-component of any fragment in a quad (after texture sampling) is very low (<0.05f), then that fragment will be discarded.

+
graph_present_after 

Sets tz::gpu::graph_flag::present_after on the graph representing the quad renderer.

+
allow_negative_scale 

Normally if a quad has a negative scale in any dimension, the triangles are no longer in the correct winding order and will thus be invisible. Setting this flags disables face culling, meaning triangles scaled negatively (and thus in the wrong winding order) will still display as normal.

+
+ +
+
+
+ + +
+ + diff --git a/handle_8hpp_source.html b/handle_8hpp_source.html new file mode 100644 index 0000000000..e3d56c8113 --- /dev/null +++ b/handle_8hpp_source.html @@ -0,0 +1,183 @@ + + + + + + + +Topaz: /github/workspace/include/tz/core/handle.hpp Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Topaz 5.0 +
+
Topaz Game Engine
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
handle.hpp
+
+
+
1#ifndef TZ_DATA_HANDLE_HPP
+
2#define TZ_DATA_HANDLE_HPP
+
3#include <cstdint>
+
4#include <utility>
+
5#include <limits>
+
6
+
7namespace tz
+
8{
+
9 enum class hanval : std::uint64_t{};
+
10
+
11 struct nullhand_t
+
12 {
+
13 bool operator==(std::integral auto num) const
+
14 {
+
15 return std::cmp_equal(num, std::numeric_limits<std::underlying_type_t<hanval>>::max());
+
16 }
+
17 };
+
22 constexpr nullhand_t nullhand;
+
23
+
30 template<typename T>
+
+
31 class handle
+
32 {
+
33 public:
+
34 handle(hanval v):
+
35 value(v){}
+
36
+
37 handle([[maybe_unused]] nullhand_t nh = {}):
+
38 value(static_cast<hanval>(std::numeric_limits<std::underlying_type_t<hanval>>::max())){}
+
39
+
40 explicit operator hanval() const
+
41 {
+
42 return this->value;
+
43 }
+
44
+
+
46 std::underlying_type_t<hanval> peek() const
+
47 {
+
48 return static_cast<std::underlying_type_t<hanval>>(this->value);
+
49 }
+
+
50
+
+
52 handle& operator=(hanval value)
+
53 {
+
54 this->value = value;
+
55 return *this;
+
56 }
+
+
57
+
+
59 bool operator==(nullhand_t) const
+
60 {
+
61 return handle<T>{nullhand}.value == this->value;
+
62 }
+
+
+
64 bool operator!=(nullhand_t) const
+
65 {
+
66 return handle<T>{nullhand}.value != this->value;
+
67 }
+
+
68
+
69 bool operator==(const handle<T>& rhs) const = default;
+
70 bool operator!=(const handle<T>& rhs) const = default;
+
71 private:
+
72 hanval value;
+
73 };
+
+
74}
+
75
+
76#endif // TZ_DATA_HANDLE_HPP
+
Represents a generic opaque handle.
Definition handle.hpp:32
+
handle & operator=(hanval value)
Assign a handle to the null handle, meaning it is now invalid.
Definition handle.hpp:52
+
std::underlying_type_t< hanval > peek() const
Disregard the concept of "opaqueness" of an opaque handle by peeking at the underlying value....
Definition handle.hpp:46
+
bool operator!=(nullhand_t) const
Compare a handle to the null handle. This comparison will return true if the handle is valid.
Definition handle.hpp:64
+
bool operator==(nullhand_t) const
Compare a handle to the null handle. This comparison will return false if the handle is valid.
Definition handle.hpp:59
+
constexpr nullhand_t nullhand
Definition handle.hpp:22
+
+ + +
+ + diff --git a/hardware_8hpp_source.html b/hardware_8hpp_source.html new file mode 100644 index 0000000000..6c7653c17a --- /dev/null +++ b/hardware_8hpp_source.html @@ -0,0 +1,207 @@ + + + + + + + +Topaz: /github/workspace/include/tz/gpu/hardware.hpp Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Topaz 5.0 +
+
Topaz Game Engine
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
hardware.hpp
+
+
+
1#ifndef TZ_GPU_HARDWARE_HPP
+
2#define TZ_GPU_HARDWARE_HPP
+
3#include "tz/core/handle.hpp"
+
4#include "tz/core/error.hpp"
+
5#include <string>
+
6#include <span>
+
7#include <cstddef>
+
8
+
9namespace tz::gpu
+
10{
+
+
21 enum class hardware_type
+
22 {
+
24 gpu,
+ +
28 cpu,
+ +
31 };
+
+
32
+
+ +
38 {
+ + + + +
47 };
+
+
48
+
+ +
54 {
+
56 ideal,
+ +
60 poor,
+
61 _count
+
62 };
+
+
63
+
64 using hardware_handle = tz::handle<hardware_type>;
+
65
+
+
72 struct hardware
+
73 {
+
75 std::string name;
+
77 std::uint64_t vram_size_mib;
+ + + +
84
+
85 struct internals_t
+
86 {
+ +
88 std::uint32_t i1;
+
89 } internals;
+
90
+
91 bool operator==(const hardware& rhs) const
+
92 {
+
93 return this->internals.i0 == rhs.internals.i0;
+
94 }
+
95
+
96 bool operator!=(const hardware& rhs) const
+
97 {
+
98 return this->internals.i0 != rhs.internals.i0;
+
99 }
+
100 };
+
+
101
+
117 error_code iterate_hardware(std::span<hardware> hardwares, std::size_t* hardware_count = nullptr);
+ + + +
146}
+
147
+
148#endif // TZ_GPU_HARDWARE_HPP
+
Represents a generic opaque handle.
Definition handle.hpp:32
+
error_code
Error codes for Topaz.
Definition error.hpp:13
+
hardware get_used_hardware()
Retrieve the hardware that's currently being used.
+
error_code iterate_hardware(std::span< hardware > hardwares, std::size_t *hardware_count=nullptr)
Retrieve information about all detected rendering hardware currently available on the machine.
+
hardware_feature_coverage
Describes to what extent the rendering hardware supports all the features that Topaz requires.
Definition hardware.hpp:54
+
hardware_type
Describes a specific type of rendering hardware.
Definition hardware.hpp:22
+
hardware_capabilities
Describes what kind of GPU operations a rendering hardware can carry out when used.
Definition hardware.hpp:38
+
hardware find_best_hardware()
Retrieve the "best" hardware hardware on your machine.
+
error_code use_hardware(hardware hw)
Select a piece of hardware to use for future graphical operations.
+
@ insufficient
The hardware does not support all features, and as such could crash.
+
@ poor
The hardware does not come close to supporting all required features, and as such should not be attem...
+
@ ideal
The hardware supports everything Topaz needs to do to support all GPU Library features.
+
@ gpu
A discrete GPU, the most ideal hardware for graphics/compute. Typically seen on desktop PCs.
+
@ integrated_gpu
An integrated GPU, typically seen on laptops.
+
@ unknown
Your graphics driver failed to identify the hardware, or Topaz does not support whatever it is....
+
@ cpu
A CPU. One should expect subpar performance, but there may be reasons to use a CPU.
+
@ graphics_only
Graphics only. Attempting to carry out compute work on this hardware will fail.
+
@ compute_only
Compute only. Attempting to carry out graphics work (rasterisation) on this hardware will fail.
+
@ graphics_compute
Both graphics and compute. These are always preferred.
+
@ neither
The hardware is useless for Topaz. You should not attempt to create a hardware using this hardware.
+
Contains some basic information about a particular piece of hardware on the machine that the driver t...
Definition hardware.hpp:73
+
std::string name
User-facing name of the hardware. In most cases this should be the name of your graphics card....
Definition hardware.hpp:75
+
hardware_capabilities caps
Describes which sort of GPU operations this hardware is capable of doing.
Definition hardware.hpp:83
+
hardware_type type
Describes which type of hardware this is (e.g a discrete GPU, or a CPU).
Definition hardware.hpp:79
+
hardware_feature_coverage features
Describes whether this hardware is suited to Topaz rendering based upon the GPU features it supports.
Definition hardware.hpp:81
+
std::uint64_t vram_size_mib
Estimated size of the biggest heap, in MiB. If the hardware is not a discrete GPU,...
Definition hardware.hpp:77
+
+ + +
+ + diff --git a/image_8hpp_source.html b/image_8hpp_source.html new file mode 100644 index 0000000000..f4ae5a451a --- /dev/null +++ b/image_8hpp_source.html @@ -0,0 +1,135 @@ + + + + + + + +Topaz: /github/workspace/include/tz/io/image.hpp Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Topaz 5.0 +
+
Topaz Game Engine
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
image.hpp
+
+
+
1#ifndef TOPAZ_IO_IMAGE_HPP
+
2#define TOPAZ_IO_IMAGE_HPP
+
3#include "tz/core/error.hpp"
+
4#include <cstddef>
+
5#include <span>
+
6#include <expected>
+
7
+
8namespace tz::io
+
9{
+
+ +
17 {
+
19 unsigned int width = 0u;
+
21 unsigned int height = 0u;
+
23 std::size_t data_size_bytes = 0u;
+
24 };
+
+
25
+
39 std::expected<image_header, tz::error_code> image_info(std::span<const std::byte> img_file_data);
+
49 tz::error_code parse_image(std::span<const std::byte> img_file_data, std::span<std::byte> buffer);
+
50}
+
51
+
52#endif // TOPAZ_IO_IMAGE_HPP
+
error_code
Error codes for Topaz.
Definition error.hpp:13
+
std::expected< image_header, tz::error_code > image_info(std::span< const std::byte > img_file_data)
Retrieve info about an image loaded in memory.
+
tz::error_code parse_image(std::span< const std::byte > img_file_data, std::span< std::byte > buffer)
Load an image from file data resident in memory.
+
Describes basic information about an image.
Definition image.hpp:17
+
std::size_t data_size_bytes
Size of the total image data, in bytes.
Definition image.hpp:23
+
unsigned int height
Height of the image, in pixels.
Definition image.hpp:21
+
unsigned int width
Width of the image, in pixels.
Definition image.hpp:19
+
+ + +
+ + diff --git a/index.html b/index.html new file mode 100644 index 0000000000..3da9a3d565 --- /dev/null +++ b/index.html @@ -0,0 +1,235 @@ + + + + + + + +Topaz: Topaz Engine + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Topaz 5.0 +
+
Topaz Game Engine
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Topaz Engine
+
+
+

+

OGL Debug OGL Release VK Debug VK Release

+

Documentation

+

+About

+

Topaz is a 3D graphics engine.

    +
  • C++23 (no modules)
  • +
  • Very low-level declarative graphics API.
  • +
  • Supports Windows/Linux and Clang/GCC/MSVC (See requirements section below for required versions)
  • +
+

Topaz 4.2.0 is the most recent release of the Topaz Engine. The next version is Topaz 5.0, currently in early development on the master branch.

+

The Topaz project has been ongoing since it began as a school project in 2015.

+

+Notable Features

+
    +
  • Low-level GPU rendering API.
  • +
+

+Version History

+

Each major version is a total rewrite and thus completely different from the previous. Each minor version typically consists of API-breaking feature changes. Patch versions are not formally shipped unless they contain emergency bugfixes for a flawed release.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Topaz Version Release Date Branch Documentation
5.0 TBD master harrand.github.io
4.2.0 Apr 23, 2024 Topaz4.2 Branch: gh-pages-tz4.2
4.1.0 Dec 1, 2023 Topaz4.1 Branch: gh-pages-tz4.1
4.0.0 July 9, 2023 Topaz4.0 Branch: gh-pages-tz4.0
3.6.1 Dec 10, 2022 Topaz3.6 Branch: gh-pages-tz3.6
3.6.0 Dec 8, 2022 Topaz3.6 Branch: gh-pages-tz3.6
3.5.0 Sep 22, 2022 Topaz3.5 Branch: gh-pages-tz3.5
3.4.0 Aug 3, 2022 Topaz3.4 Branch: gh-pages-tz3.4
3.3.0 Jun 12, 2022 Topaz3.3 Branch: gh-pages-tz3.3
3.2.0 Apr 23, 2022 Topaz3.2 Branch: gh-pages-tz3.2
3.1.0 Feb 13, 2022 Topaz3.1 Branch: gh-pages-tz3.1
3.0.0 Sep 17, 2021 Topaz3.0 Branch: gh-pages-tz3
2.0.0 May 9, 2021 Topaz2.0 Branch: gh-pages-tz2
1.0.0 Sep 25, 2020 Topaz1.0 Branch: gh-pages-tz1
+
+ +More Releases +

+

+
+

+Note: I do not recommend any of these. These are listed just for completeness.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Topaz Version Release Date Release
0.7.0 Apr 10, 2019 Raycasts, Octrees & Improved Utility
0.6.0 Jul 18, 2018 Shadow Mapping & Physics
0.5.1 Dec 12, 2017 Refactoring 1
0.5.0 Oct 8, 2017 Physics & Collision
0.4.0 Sep 25, 2017 Displacement Maps & Skyboxes
0.3.0 Sep 21, 2017 GUI & Flexible
0.2.0 Jun 5, 2017 Prettier, faster and more features
0.1.6 Apr 16, 2017 Skybox & Audio
0.1.5 Apr 11, 2017 Dynamic Lighting
0.1.4 Apr 9, 2017 Audio
0.1.3 Mar 29, 2017 World Construction
0.1.2 Mar 25, 2017 Hightail House Construction
0.1.1 Mar 24, 2017 Parallax Displacement Mapping
0.1.0 Mar 21, 2017 Dev Test
+

+Build Instructions

+
    +
  1. Checkout the repository resursively.
  2. +
  3. Configure CMake. It is recommended you use a preset.

    +

    Example: cmake --preset host_vulkan_debug

    +
  4. +
  5. Build the topaz target to build the engine. Run the tztest target to build and run all unit-tests.
  6. +
+

+Dependencies

+

The table below shows all the engine's dependencies.

+ + + + + +
Dependency Render API Build Config Dependency Type
Vulkan SDK Vulkan All Needs pre-installation
+

+Requirements

+

The following requirements apply for all possible build configurations:

    +
  • A C++23-compliant compiler. GCC, MSVC and Clang are all tested so you can be confident using these. If you're not using any of these compilers, your mileage may vary.
  • +
  • CMake 3.21 or later is required to build.
  • +
+

+Vulkan Build

+
    +
  • Windows or Linux.
      +
    • macOS may be theoretically possible down-the-line via MoltenVK, but no work at all has been done or planned to provide support for it.
    • +
    +
  • +
  • Vulkan SDK 1.3 or later must be installed.
  • +
  • Your graphics card must support Vulkan 1.3. Check your graphics card here.
      +
    • It must also support the following vulkan extension(s):
        +
      • VK_KHR_swapchain
      • +
      • VK_KHR_shader_non_semantic_info (debug builds only)
      • +
      +
    • +
    +
  • +
+
+ +
+ + +
+ + diff --git a/input_8hpp_source.html b/input_8hpp_source.html new file mode 100644 index 0000000000..017cad3a01 --- /dev/null +++ b/input_8hpp_source.html @@ -0,0 +1,200 @@ + + + + + + + +Topaz: /github/workspace/include/tz/os/input.hpp Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Topaz 5.0 +
+
Topaz Game Engine
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
input.hpp
+
+
+
1#ifndef TOPAZ_OS_INPUT_HPP
+
2#define TOPAZ_OS_INPUT_HPP
+
3#include "tz/core/error.hpp"
+
4#include <utility>
+
5
+
6namespace tz::os
+
7{
+
+
18 enum class key
+
19 {
+
20 backspace,
+
21 tab,
+
22 enter,
+
23
+
24 left_shift,
+
25 left_control,
+
26 left_alt,
+
27
+
28 pause,
+
29 caps_lock,
+
30 escape,
+
31
+
32 spacebar,
+
33 page_down,
+
34 page_up,
+
35
+
36 end,
+
37 home,
+
38
+
39 left_arrow,
+
40 up_arrow,
+
41 right_arrow,
+
42 down_arrow,
+
43
+
44 select,
+
45 print,
+
46 printsc,
+
47 ins,
+
48 del,
+
49 n0,n1,n2,n3,n4,n5,n6,n7,n8,n9,
+
50 a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,
+
51
+
52 left_winkey,
+
53 right_winkey,
+
54 apps,
+
55 sleep,
+
56
+
57 np0,np1,np2,np3,np4,np5,np6,np7,np8,np9,
+
58 npmul,npadd,npsep,npsub,npdec,npdiv,
+
59 f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24,
+
60 num_lock,
+
61 scroll_lock,
+
62
+
63 right_shift,
+
64 right_control,
+
65 right_alt,
+
66 semicol,
+
67 period,
+
68 plus,
+
69 minus,
+
70
+
71 obrack,
+
72 cbrack,
+
73 forward_slash,
+
74 back_slash,
+
75 apostrophe,
+
76 grave,
+
77 _count
+
78 };
+
+
79
+
80 using char_type_callback = void(*)(char);
+
87 tz::error_code install_char_typed_callback(char_type_callback callback);
+ +
95 constexpr std::pair<unsigned int, unsigned int> invalid_mouse_position{-1u, -1u};
+
104 std::pair<unsigned int, unsigned int> get_mouse_position();
+
105
+
106 enum class mouse_button
+
107 {
+
108 left,
+
109 right,
+
110 middle,
+
111 _count
+
112 };
+
113
+
114 bool is_mouse_clicked(mouse_button b);
+
115 std::pair<unsigned int, unsigned int> get_mouse_click_position(mouse_button b);
+
116}
+
117
+
118#endif // TOPAZ_OS_INPUT_HPP
+
error_code
Error codes for Topaz.
Definition error.hpp:13
+
key
Definition input.hpp:19
+
std::pair< unsigned int, unsigned int > get_mouse_position()
Retrieve the mouse cursor's current position, in pixels, relative to the top-left of the window.
+
bool is_key_pressed(key k)
Query as to whether a specific key is pressed right now.
+
tz::error_code install_char_typed_callback(char_type_callback callback)
Install a callback which will be invoked whenever the user types a character on the keyboard.
+
+ + +
+ + diff --git a/job_8hpp_source.html b/job_8hpp_source.html new file mode 100644 index 0000000000..2bfd1d0f99 --- /dev/null +++ b/job_8hpp_source.html @@ -0,0 +1,137 @@ + + + + + + + +Topaz: /github/workspace/include/tz/core/job.hpp Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Topaz 5.0 +
+
Topaz Game Engine
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
job.hpp
+
+
+
1#ifndef TOPAZ_CORE_JOB_HPP
+
2#define TOPAZ_CORE_JOB_HPP
+
3#include "tz/core/handle.hpp"
+
4#include <functional>
+
5
+
6namespace tz
+
7{
+
13 namespace detail
+
14 {
+
15 struct job_tag_t{};
+
16 }
+
17 using job_handle = tz::handle<detail::job_tag_t>;
+
22 using job_function = std::function<void()>;
+
23 using job_worker = std::size_t;
+
24
+ +
50 job_handle job_execute_on(job_function fn, job_worker worker);
+ + +
67 std::size_t job_count();
+
74 std::size_t job_worker_count();
+
75}
+
76
+
77#endif // TOPAZ_CORE_JOB_HPP
+
Represents a generic opaque handle.
Definition handle.hpp:32
+
std::size_t job_count()
Estimate the total number of jobs that have been created but not yet completed.
+
std::function< void()> job_function
Represents a function that will be executed on a job worker via job_execute.
Definition job.hpp:22
+
job_handle job_execute(job_function fn)
Execute a function as a new job.
+
job_handle job_execute_on(job_function fn, job_worker worker)
Execute a function as a new job - but can only be picked up by a specific worker.
+
std::size_t job_worker_count()
Retrieve the number of worker threads.
+
void job_wait(job_handle job)
Block the current thread until the job specified has been fully completed.
+
bool job_complete(job_handle job)
Query as to whether the specific job has been fully completed or not.
+
+ + +
+ + diff --git a/jquery.js b/jquery.js new file mode 100644 index 0000000000..875ada738f --- /dev/null +++ b/jquery.js @@ -0,0 +1,204 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e} +var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp( +"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType +}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c +)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){ +return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll( +":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id") +)&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push( +"\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test( +a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null, +null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne +).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for( +var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n; +return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0, +r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r] +,C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each( +function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r, +"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})} +),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each( +"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=y(e||this.defaultElement||this)[0],this.element=y(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=y(),this.hoverable=y(),this.focusable=y(),this.classesElementLookup={},e!==this&&(y.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t +){t.target===e&&this.destroy()}}),this.document=y(e.style?e.ownerDocument:e.document||e),this.window=y(this.document[0].defaultView||this.document[0].parentWindow)),this.options=y.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:y.noop,_create:y.noop,_init:y.noop,destroy:function(){var i=this;this._destroy(),y.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:y.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return y.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t +]=y.widget.extend({},this.options[t]),n=0;n
"),i=e.children()[0];return y("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i}, +getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(D(s),D(n))?o.important="horizontal":o.important="vertical",p.using.call(this,t,o)}),h.offset(y.extend(l,{using:t}))})},y.ui.position={fit:{left:function(t,e){var i=e.within, +s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,h=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),y.ui.plugin={add:function(t,e,i){var s,n=y.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})), +this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){y(t +).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,h=this;if(this.handles=o.handles||(y(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=y(),this._addedHandles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split( +","),this.handles={},e=0;e"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:h._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add( +this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){h.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),h.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=y(this.handles[e])[0])!==t.target&&!y.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{ +width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(), +!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(y.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){ +this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),st.width,h=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,r=this.originalPosition.top+this.originalSize.height +,l=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),h&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),h&&i&&(t.top=r-e.minHeight),n&&i&&(t.top=r-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e, +i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,h=n?0:i.sizeDiff.width,n={width:i.size.width-h,height:i.size.height-o},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left +)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(n,o&&h?{top:o,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&y(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=y(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,h=o instanceof y?o.get(0):/parent/.test(o)?e.parent().get(0):o;h&&(n.containerElement=y(h),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(h),s=[],y(["Top","Right","Left","Bottom"]).each(function(t,e +){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(h,"left")?h.scrollWidth:o,e=n._hasScroll(h)?h.scrollHeight:e,n.parentData={element:h,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=y(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,h={top:0,left:0},a=e.containerElement,t=!0;a[0]!==document&&/static/.test(a.css("position"))&&(h=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-h.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0), +i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-h.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-h.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=y(t.helper),h=o.offset(),a=o.outerWidth( +)-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,h={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(s.alsoResize).each(function(){var t=y(this),s=y(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e, +function(t,e){var i=(s[e]||0)+(h[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,h=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,r=a[0 +]||1,l=a[1]||1,u=Math.round((s.width-n.width)/r)*r,p=Math.round((s.height-n.height)/l)*l,d=n.width+u,c=n.height+p,f=i.maxWidth&&i.maxWidthd,s=i.minHeight&&i.minHeight>c;i.grid=a,m&&(d+=r),s&&(c+=l),f&&(d-=r),g&&(c-=l),/^(se|s|e)$/.test(h)?(e.size.width=d,e.size.height=c):/^(ne)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.top=o.top-p):/^(sw)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.left=o.left-u):((c-l<=0||d-r<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0=f[g]?0:Math.min(f[g],n));!a&&1-1){ +targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se", +"n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if( +session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)} +closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if( +session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE, +function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset); +tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList, +finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight())); +return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")} +function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(), +elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight, +viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b, +"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery); +/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)), +mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend( +$.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy( +this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData( +"smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id" +).indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?( +this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for( +var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){ +return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if(( +!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&( +this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0 +]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass( +"highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){ +t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]" +)||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){ +t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"), +a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i, +downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2) +)&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t +)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0), +canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}}, +rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})} +return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1, +bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); diff --git a/lua_8hpp_source.html b/lua_8hpp_source.html new file mode 100644 index 0000000000..b080f5cd3f --- /dev/null +++ b/lua_8hpp_source.html @@ -0,0 +1,246 @@ + + + + + + + +Topaz: /github/workspace/include/tz/core/lua.hpp Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Topaz 5.0 +
+
Topaz Game Engine
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
lua.hpp
+
+
+
1#ifndef TOPAZ_LUA_HPP
+
2#define TOPAZ_LUA_HPP
+
3#include "tz/topaz.hpp"
+
4#include "tz/core/error.hpp"
+
5#include <filesystem>
+
6#include <expected>
+
7
+
8namespace tz
+
9{
+
43 using lua_fn = int(*)();
+
44 struct lua_nil{};
+
53 tz::error_code lua_execute_file(std::filesystem::path path);
+
61 tz::error_code lua_execute(std::string_view lua_src);
+
68 tz::error_code lua_set_nil(std::string_view varname);
+
75 tz::error_code lua_set_emptytable(std::string_view varname);
+
83 tz::error_code lua_set_bool(std::string_view varname, bool v);
+
91 tz::error_code lua_set_int(std::string_view varname, std::int64_t v);
+
99 tz::error_code lua_set_number(std::string_view varname, double v);
+
107 tz::error_code lua_set_string(std::string_view varname, std::string str);
+
115 tz::error_code lua_define_function(std::string_view varname, lua_fn fn);
+
116
+
123 std::expected<bool, tz::error_code> lua_get_bool(std::string_view varname);
+
130 std::expected<std::int64_t, tz::error_code> lua_get_int(std::string_view varname);
+
137 std::expected<double, tz::error_code> lua_get_number(std::string_view varname);
+
144 std::expected<std::string, tz::error_code> lua_get_string(std::string_view varname);
+
145
+
152 std::expected<bool, tz::error_code> lua_stack_get_bool(std::size_t id);
+
159 std::expected<std::int64_t, tz::error_code> lua_stack_get_int(std::size_t id);
+
166 std::expected<double, tz::error_code> lua_stack_get_number(std::size_t id);
+
173 std::expected<std::string, tz::error_code> lua_stack_get_string(std::size_t id);
+
174
+ +
184 void lua_push_bool(bool v);
+
189 void lua_push_int(std::int64_t v);
+
194 void lua_push_number(double v);
+
199 void lua_push_string(std::string v);
+
200
+
205 std::size_t lua_stack_size();
+
206
+
213 std::string lua_debug_callstack();
+
220 std::string lua_debug_stack();
+
221
+
222 template<int F, int L>
+
223 struct static_for_t
+
224 {
+
225 template<typename Functor>
+
226 static inline constexpr void apply(const Functor& f)
+
227 {
+
228 if(F < L)
+
229 {
+
230 f(std::integral_constant<int, F>{});
+
231 static_for_t<F + 1, L>::apply(f);
+
232 }
+
233 }
+
234
+
235 template<typename Functor>
+
236 inline constexpr void operator()(const Functor& f) const
+
237 {
+
238 apply(f);
+
239 }
+
240 };
+
241
+
242 template<int N>
+
243 struct static_for_t<N, N>
+
244 {
+
245 template<typename Functor>
+
246 static inline constexpr void apply([[maybe_unused]] const Functor& f){}
+
247 };
+
248
+
249 template<int F, int L>
+
250 inline constexpr static_for_t<F, L> static_for = {};
+
251
+
258 template<typename... Ts>
+
+
259 std::tuple<Ts...> lua_parse_args()
+
260 {
+
261 std::tuple<Ts...> ret;
+
262 static_for<0, sizeof...(Ts)>([&ret]([[maybe_unused]] auto i) constexpr
+
263 {
+
264 using T = std::decay_t<decltype(std::get<i.value>(std::declval<std::tuple<Ts...>>()))>;
+
265 auto& v = std::get<i.value>(ret);
+
266 if constexpr(std::is_same_v<T, bool>)
+
267 {
+
268 v = tz_must(lua_stack_get_bool(i.value + 1));
+
269 }
+
270 else if constexpr(std::is_same_v<T, float>)
+
271 {
+
272 v = tz_must(lua_stack_get_number(i.value + 1));
+
273 }
+
274 else if constexpr(std::is_same_v<T, std::int64_t> || std::is_same_v<T, int>)
+
275 {
+
276 v = tz_must(lua_stack_get_int(i.value + 1));
+
277 }
+
278 else if constexpr(std::is_same_v<T, std::string>)
+
279 {
+
280 v = tz_must(lua_stack_get_string(i.value + 1));
+
281 }
+
282 else if constexpr(std::is_same_v<T, lua_nil>)
+
283 {
+
284 // do nothing! its whatever
+
285 }
+
286 else
+
287 {
+
288 static_assert(std::is_void_v<T>, "Unrecognised lua argument type. Is it a supported type?");
+
289 }
+
290 });
+
291 return ret;
+
292 }
+
+
293}
+
294
+
295#endif // TOPAZ_LUA_HPP
+
std::expected< std::string, tz::error_code > lua_stack_get_string(std::size_t id)
Retrieve a string from the stack at the given index.
+
int(*)() lua_fn
Represents the signature for a function that can be called from lua.
Definition lua.hpp:43
+
void lua_push_number(double v)
Push a number value onto the stack.
+
void lua_push_nil()
Push a nil value onto the stack.
+
std::string lua_debug_stack()
Retreieve a string describing the entire lua stack right now.
+
std::expected< bool, tz::error_code > lua_stack_get_bool(std::size_t id)
Retrieve a bool from the stack at the given index.
+
std::expected< std::string, tz::error_code > lua_get_string(std::string_view varname)
Retrieve the value of a string variable.
+
std::expected< std::int64_t, tz::error_code > lua_stack_get_int(std::size_t id)
Retrieve a int from the stack at the given index.
+
tz::error_code lua_execute_file(std::filesystem::path path)
Attempt to execute a local lua file on the current thread.
+
void lua_push_string(std::string v)
Push a string value onto the stack.
+
tz::error_code lua_set_emptytable(std::string_view varname)
Set a variable in lua to be the empty table "{}".
+
void lua_push_bool(bool v)
Push a bool value onto the stack.
+
tz::error_code lua_define_function(std::string_view varname, lua_fn fn)
Define a new function in lua.
+
tz::error_code lua_set_number(std::string_view varname, double v)
Set a variable in lua to a new number value.
+
std::expected< double, tz::error_code > lua_stack_get_number(std::size_t id)
Retrieve a number from the stack at the given index.
+
std::expected< bool, tz::error_code > lua_get_bool(std::string_view varname)
Retrieve the value of a bool variable.
+
tz::error_code lua_set_string(std::string_view varname, std::string str)
Set a variable in lua to a new string value.
+
std::expected< double, tz::error_code > lua_get_number(std::string_view varname)
Retrieve the value of a number variable.
+
std::size_t lua_stack_size()
Retrieve the number of values on the stack currently.
+
std::tuple< Ts... > lua_parse_args()
Retreve a set of arguments from the stack.
Definition lua.hpp:259
+
tz::error_code lua_execute(std::string_view lua_src)
Attempt to execute some lua code on the current thread.
+
std::expected< std::int64_t, tz::error_code > lua_get_int(std::string_view varname)
Retrieve the value of a int variable.
+
tz::error_code lua_set_bool(std::string_view varname, bool v)
Set a variable in lua to a new bool value.
+
tz::error_code lua_set_int(std::string_view varname, std::int64_t v)
Set a variable in lua to a new int value.
+
std::string lua_debug_callstack()
Retreieve a string describing the lua callstack right now.
+
tz::error_code lua_set_nil(std::string_view varname)
Set a variable in lua to be nil.
+
void lua_push_int(std::int64_t v)
Push an int value onto the stack.
+
error_code
Error codes for Topaz.
Definition error.hpp:13
+
#define tz_must(fnret)
Cause a runtime error if the expected value is erroneous. If not, the unwrapped expected value is ret...
Definition debug.hpp:66
+
+ + +
+ + diff --git a/main_8hpp_source.html b/main_8hpp_source.html new file mode 100644 index 0000000000..eed8fc4d56 --- /dev/null +++ b/main_8hpp_source.html @@ -0,0 +1,116 @@ + + + + + + + +Topaz: /github/workspace/include/tz/main.hpp Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Topaz 5.0 +
+
Topaz Game Engine
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
main.hpp
+
+
+
1#ifndef TZMAIN_HPP
+
2#ifdef _WIN32
+
3#if TOPAZ_SHIPPING
+
4 #define NOMINMAX
+
5 #include <Windows.h>
+
6 #define tz_main() WINAPI wWinMain([[maybe_unused]] HINSTANCE, [[maybe_unused]] HINSTANCE,[[maybe_unused]] LPWSTR, [[maybe_unused]] _In_ int)
+
7#else
+
8 #define tz_main() main()
+
9#endif
+
10#endif
+
11#endif // TZMAIN_HPP
+
+ + +
+ + diff --git a/matrix_8hpp_source.html b/matrix_8hpp_source.html new file mode 100644 index 0000000000..4e7f5e4ce8 --- /dev/null +++ b/matrix_8hpp_source.html @@ -0,0 +1,188 @@ + + + + + + + +Topaz: /github/workspace/include/tz/core/matrix.hpp Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Topaz 5.0 +
+
Topaz Game Engine
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
matrix.hpp
+
+
+
1#ifndef TOPAZ_CORE_MATRIX_HPP
+
2#define TOPAZ_CORE_MATRIX_HPP
+
3#include <array>
+
4#include <concepts>
+
5
+
6namespace tz
+
7{
+
8 template<typename T, int N>
+
9 requires std::integral<T> || std::floating_point<T>
+
10 struct matrix
+
11 {
+
12 static constexpr matrix<T, N> zero()
+
13 {
+
14 return matrix<T, N>::filled(T{0});
+
15 }
+
16
+
17 static constexpr matrix<T, N> iden()
+
18 {
+
19 auto ret = matrix<T, N>::zero();
+
20 for(std::size_t i = 0; i < N; i++)
+
21 {
+
22 ret.mat[i * N + i] = T{1};
+
23 }
+
24 return ret;
+
25 }
+
26
+
27 static constexpr matrix<T, N> filled(T t)
+
28 {
+
29 matrix<T, N> ret;
+
30 std::fill(ret.mat.begin(), ret.mat.end(), t);
+
31 return ret;
+
32 }
+
33
+
34 matrix<T, N>() = default;
+
35 matrix(const matrix<T, N>& cpy) = default;
+
36 matrix(matrix<T, N>&& move) = default;
+
37 matrix& operator=(const matrix<T, N>& rhs) = default;
+
38 matrix& operator=(matrix<T, N>&& rhs) = default;
+
39
+
40 const T& operator[](std::size_t idx) const;
+
41 T& operator[](std::size_t idx);
+
42
+
43 const T& operator()(std::size_t x, std::size_t y) const;
+
44 T& operator()(std::size_t x, std::size_t y);
+
45
+
46 matrix<T, N> inverse() const;
+
47 matrix<T, N> transpose() const;
+
48
+
49 // matrix-scalar
+
50 matrix<T, N>& operator+=(T scalar);
+
51 matrix<T, N> operator+(T scalar) const{auto cpy = *this; return cpy += scalar;}
+
52 matrix<T, N>& operator-=(T scalar);
+
53 matrix<T, N> operator-(T scalar) const{auto cpy = *this; return cpy -= scalar;}
+
54 matrix<T, N>& operator*=(T scalar);
+
55 matrix<T, N> operator*(T scalar) const{auto cpy = *this; return cpy *= scalar;}
+
56 matrix<T, N>& operator/=(T scalar);
+
57 matrix<T, N> operator/(T scalar) const{auto cpy = *this; return cpy /= scalar;}
+
58
+
59 // matrix-matrix
+
60 matrix<T, N>& operator*=(const matrix<T, N>& rhs);
+
61 matrix<T, N> operator*(const matrix<T, N>& rhs) const{auto cpy = *this; return cpy *= rhs;}
+
62
+
63 bool operator==(const matrix<T, N>& rhs) const = default;
+
64
+
65 private:
+
66 std::array<T, N*N> mat;
+
67 };
+
68
+
69 using m2i = matrix<int, 2>;
+
70 using m3i = matrix<int, 3>;
+
71 using m4i = matrix<int, 4>;
+
72 using m2u = matrix<unsigned int, 2>;
+
73 using m3u = matrix<unsigned int, 3>;
+
74 using m4u = matrix<unsigned int, 4>;
+
75 using m2f = matrix<float, 2>;
+
76 using m3f = matrix<float, 3>;
+
77 using m4f = matrix<float, 4>;
+
78 using m2d = matrix<double, 2>;
+
79 using m3d = matrix<double, 3>;
+
80 using m4d = matrix<double, 4>;
+
81}
+
82
+
83#endif // TOPAZ_CORE_MATRIX_HPP
+
+ + +
+ + diff --git a/memory_8hpp_source.html b/memory_8hpp_source.html new file mode 100644 index 0000000000..6c7e8659ea --- /dev/null +++ b/memory_8hpp_source.html @@ -0,0 +1,149 @@ + + + + + + + +Topaz: /github/workspace/include/tz/core/memory.hpp Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Topaz 5.0 +
+
Topaz Game Engine
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
memory.hpp
+
+
+
1#ifndef TOPAZ_CORE_MEMORY_HPP
+
2#define TOPAZ_CORE_MEMORY_HPP
+
3#include <span>
+
4#include <ranges>
+
5#include <type_traits>
+
6
+
7namespace tz
+
8{
+
9 template<typename T>
+
10 constexpr auto view_bytes(T&& t) -> std::conditional_t<std::is_const_v<T>, std::span<const std::byte>, std::span<std::byte>>
+
11 {
+
12 if constexpr(requires{std::ranges::contiguous_range<T>;})
+
13 {
+
14 // we are a range
+
15 using V = std::ranges::range_value_t<T>;
+
16 std::span<V> range{std::begin(t), std::end(t)};
+
17 if constexpr(std::is_const_v<V>)
+
18 {
+
19 return std::as_bytes(range);
+
20 }
+
21 else
+
22 {
+
23 return std::as_writable_bytes(range);
+
24 }
+
25 }
+
26 else
+
27 {
+
28 // we are not a range
+
29 static_assert(std::is_standard_layout_v<T>, "view_bytes must be provided a contiguous range or a standard-layout-type. You have provided neither.");
+
30 // we are a scalar-y value
+
31 std::span<T, 1> span{&t};
+
32 if constexpr(std::is_const_v<T>)
+
33 {
+
34 return std::as_bytes(span);
+
35 }
+
36 else
+
37 {
+
38 return std::as_writable_bytes(span);
+
39 }
+
40 }
+
41 }
+
42}
+
43
+
44#endif // TOPAZ_CORE_MEMORY_HPP
+
+ + +
+ + diff --git a/menu.js b/menu.js new file mode 100644 index 0000000000..0fd1e99013 --- /dev/null +++ b/menu.js @@ -0,0 +1,134 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search,treeview) { + function makeTree(data,relPath) { + let result=''; + if ('children' in data) { + result+='
    '; + for (let i in data.children) { + let url; + const link = data.children[i].url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + } else { + url = relPath+link; + } + result+='
  • '+ + data.children[i].text+''+ + makeTree(data.children[i],relPath)+'
  • '; + } + result+='
'; + } + return result; + } + let searchBoxHtml; + if (searchEnabled) { + if (serverSide) { + searchBoxHtml='
'+ + '
'+ + '
 '+ + ''+ + '
'+ + '
'+ + '
'+ + '
'; + } else { + searchBoxHtml='
'+ + ''+ + ' '+ + ''+ + ''+ + ''+ + ''+ + ''+ + '
'; + } + } + + $('#main-nav').before('
'+ + ''+ + ''+ + '
'); + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchBoxHtml) { + $('#main-menu').append('
  • '); + } + const $mainMenuState = $('#main-menu-state'); + let prevWidth = 0; + if ($mainMenuState.length) { + const initResizableIfExists = function() { + if (typeof initResizable==='function') initResizable(treeview); + } + // animate mobile menu + $mainMenuState.change(function() { + const $menu = $('#main-menu'); + let options = { duration: 250, step: initResizableIfExists }; + if (this.checked) { + options['complete'] = () => $menu.css('display', 'block'); + $menu.hide().slideDown(options); + } else { + options['complete'] = () => $menu.css('display', 'none'); + $menu.show().slideUp(options); + } + }); + // set default menu visibility + const resetState = function() { + const $menu = $('#main-menu'); + const newWidth = $(window).outerWidth(); + if (newWidth!=prevWidth) { + if ($(window).outerWidth()<768) { + $mainMenuState.prop('checked',false); $menu.hide(); + $('#searchBoxPos1').html(searchBoxHtml); + $('#searchBoxPos2').hide(); + } else { + $menu.show(); + $('#searchBoxPos1').empty(); + $('#searchBoxPos2').html(searchBoxHtml); + $('#searchBoxPos2').show(); + } + if (typeof searchBox!=='undefined') { + searchBox.CloseResultsWindow(); + } + prevWidth = newWidth; + } + } + $(window).ready(function() { resetState(); initResizableIfExists(); }); + $(window).resize(resetState); + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/menudata.js b/menudata.js new file mode 100644 index 0000000000..099c89a23d --- /dev/null +++ b/menudata.js @@ -0,0 +1,27 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Home",url:"index.html"}, +{text:"API Reference",url:"group__tz.html"}]} diff --git a/minus.svg b/minus.svg new file mode 100644 index 0000000000..f70d0c1a18 --- /dev/null +++ b/minus.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/minusd.svg b/minusd.svg new file mode 100644 index 0000000000..5f8e879628 --- /dev/null +++ b/minusd.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/nav_f.png b/nav_f.png new file mode 100644 index 0000000000..72a58a529e Binary files /dev/null and b/nav_f.png differ diff --git a/nav_fd.png b/nav_fd.png new file mode 100644 index 0000000000..032fbdd4c5 Binary files /dev/null and b/nav_fd.png differ diff --git a/nav_g.png b/nav_g.png new file mode 100644 index 0000000000..2093a237a9 Binary files /dev/null and b/nav_g.png differ diff --git a/nav_h.png b/nav_h.png new file mode 100644 index 0000000000..33389b101d Binary files /dev/null and b/nav_h.png differ diff --git a/nav_hd.png b/nav_hd.png new file mode 100644 index 0000000000..de80f18ad6 Binary files /dev/null and b/nav_hd.png differ diff --git a/navtree.css b/navtree.css new file mode 100644 index 0000000000..3874e73d95 --- /dev/null +++ b/navtree.css @@ -0,0 +1,149 @@ +#nav-tree .children_ul { + margin:0; + padding:4px; +} + +#nav-tree ul { + list-style:none outside none; + margin:0px; + padding:0px; +} + +#nav-tree li { + white-space:nowrap; + margin:0px; + padding:0px; +} + +#nav-tree .plus { + margin:0px; +} + +#nav-tree .selected { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: #DCE2EF; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +#nav-tree .selected .arrow { + color: #90A5CE; + text-shadow: none; +} + +#nav-tree img { + margin:0px; + padding:0px; + border:0px; + vertical-align: middle; +} + +#nav-tree a { + text-decoration:none; + padding:0px; + margin:0px; +} + +#nav-tree .label { + margin:0px; + padding:0px; + font: 12px 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +} + +#nav-tree .label a { + padding:2px; +} + +#nav-tree .selected a { + text-decoration:none; + color:#DCE2EF; +} + +#nav-tree .children_ul { + margin:0px; + padding:0px; +} + +#nav-tree .item { + margin:0px; + padding:0px; +} + +#nav-tree { + padding: 0px 0px; + font-size:14px; + overflow:auto; +} + +#doc-content { + overflow:auto; + display:block; + padding:0px; + margin:0px; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#side-nav { + padding:0 6px 0 0; + margin: 0px; + display:block; + position: absolute; + left: 0px; + width: $width; + overflow : hidden; +} + +.ui-resizable .ui-resizable-handle { + display:block; +} + +.ui-resizable-e { + background-image:url('splitbard.png'); + background-size:100%; + background-repeat:repeat-y; + background-attachment: scroll; + cursor:ew-resize; + height:100%; + right:0; + top:0; + width:6px; +} + +.ui-resizable-handle { + display:none; + font-size:0.1px; + position:absolute; + z-index:1; +} + +#nav-tree-contents { + margin: 6px 0px 0px 0px; +} + +#nav-tree { + background-repeat:repeat-x; + background-color: #101826; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#nav-sync { + position:absolute; + top:5px; + right:24px; + z-index:0; +} + +#nav-sync img { + opacity:0.3; +} + +#nav-sync img:hover { + opacity:0.9; +} + +@media print +{ + #nav-tree { display: none; } + div.ui-resizable-handle { display: none; position: relative; } +} + diff --git a/open.png b/open.png new file mode 100644 index 0000000000..30f75c7efe Binary files /dev/null and b/open.png differ diff --git a/pass_8hpp_source.html b/pass_8hpp_source.html new file mode 100644 index 0000000000..5e82ef3545 --- /dev/null +++ b/pass_8hpp_source.html @@ -0,0 +1,262 @@ + + + + + + + +Topaz: /github/workspace/include/tz/gpu/pass.hpp Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Topaz 5.0 +
    +
    Topaz Game Engine
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    pass.hpp
    +
    +
    +
    1#ifndef TOPAZ_GPU_PASS_HPP
    +
    2#define TOPAZ_GPU_PASS_HPP
    +
    3#include "tz/core/handle.hpp"
    +
    4#include "tz/core/vector.hpp"
    +
    5#include "tz/gpu/resource.hpp"
    +
    6#include "tz/gpu/shader.hpp"
    +
    7
    +
    8namespace tz::gpu
    +
    9{
    +
    +
    20 enum class pass_type
    +
    21 {
    +
    23 render,
    + +
    26 };
    +
    +
    27
    +
    28 enum pass_flag
    +
    29 {
    +
    30 };
    +
    31
    +
    32 constexpr pass_flag operator|(pass_flag lhs, pass_flag rhs)
    +
    33 {
    +
    34 return static_cast<pass_flag>(static_cast<int>(lhs) | static_cast<int>(rhs));
    +
    35 }
    +
    36
    +
    37 constexpr bool operator&(pass_flag lhs, pass_flag& rhs)
    +
    38 {
    +
    39 return static_cast<int>(lhs) & static_cast<int>(rhs);
    +
    40 }
    +
    41
    +
    + +
    47 {
    +
    49 dont_clear = 0b0001,
    +
    51 no_depth_test = 0b0010,
    + +
    54
    +
    55 };
    +
    +
    56
    +
    57 constexpr graphics_flag operator|(graphics_flag lhs, graphics_flag rhs)
    +
    58 {
    +
    59 return static_cast<graphics_flag>(static_cast<int>(lhs) | static_cast<int>(rhs));
    +
    60 }
    +
    61
    +
    62 constexpr bool operator&(graphics_flag lhs, graphics_flag& rhs)
    +
    63 {
    +
    64 return static_cast<int>(lhs) & static_cast<int>(rhs);
    +
    65 }
    +
    66
    +
    +
    71 enum class cull
    +
    72 {
    +
    74 both,
    +
    76 front,
    +
    78 back,
    +
    80 none
    +
    81 };
    +
    +
    82
    + +
    138
    +
    + +
    146 {
    + +
    149 };
    +
    +
    150
    +
    + +
    158 {
    + + + +
    180 std::span<const resource_handle> resources = {};
    +
    182 pass_flag flags = static_cast<pass_flag>(0);
    +
    184 const char* name = "<untitled pass>";
    +
    185 };
    +
    +
    186
    + +
    192
    +
    197 constexpr auto present_pass = static_cast<tz::hanval>(std::numeric_limits<std::underlying_type_t<tz::hanval>>::max() - 1);
    +
    198
    +
    217 std::expected<pass_handle, tz::error_code> create_pass(pass_info);
    +
    218
    +
    230 void pass_set_triangle_count(pass_handle graphics_pass, std::size_t triangle_count);
    +
    231
    +
    243 void pass_set_kernel(pass_handle compute_pass, tz::v3u kernel);
    +
    244
    +
    256 void pass_set_scissor(pass_handle graphics_pass, tz::v4u scissor);
    +
    257
    + +
    269
    + +
    281}
    +
    282
    +
    283#endif // TOPAZ_GPU_PASS_HPP
    + +
    error_code
    Error codes for Topaz.
    Definition error.hpp:13
    +
    constexpr nullhand_t nullhand
    Definition handle.hpp:22
    +
    pass_type
    Describes what kind of GPU work a pass will involve.
    Definition pass.hpp:21
    +
    constexpr auto present_pass
    Meta-pass that acts as an action to present the system image to the screen.
    Definition pass.hpp:197
    +
    void pass_set_kernel(pass_handle compute_pass, tz::v3u kernel)
    Set the compute kernel of an existing compute pass.
    +
    std::expected< pass_handle, tz::error_code > create_pass(pass_info)
    Create a new pass.
    +
    cull
    Specifies face culling behaviour of a graphics pass.
    Definition pass.hpp:72
    +
    graphics_flag
    Specifies optional behaviours for a graphics pass.
    Definition pass.hpp:47
    +
    void pass_set_scissor(pass_handle graphics_pass, tz::v4u scissor)
    Set the scissor rectangle of an existing graphics pass.
    +
    tz::error_code pass_add_image_resource(pass_handle pass, resource_handle res)
    Add a new image resource to be used in the pass.
    +
    void pass_set_triangle_count(pass_handle graphics_pass, std::size_t triangle_count)
    Set the triangle count of an existing graphics pass.
    +
    void destroy_pass(pass_handle)
    Manually destroy a pass.
    +
    @ compute
    Compute Pass - involves bespoke GPU-side processing via a compute shader.
    +
    @ render
    Render Pass - involves rendering some kind of geometry via a vertex and fragment shader.
    +
    @ none
    Do not perform any face culling.
    +
    @ back
    Cull the back face.
    +
    @ front
    Cull the front face.
    +
    @ both
    Cull front and back faces.
    +
    @ dont_clear
    Do not clear the colour target images prior to rendering - whatever data they held previously will be...
    Definition pass.hpp:49
    +
    @ no_depth_write
    Disable depth writes - i.e when a depth test is passed by a fragment, the old depth value is not over...
    Definition pass.hpp:53
    +
    @ no_depth_test
    Disable depth testing - i.e fragments that are behind another may still draw over it.
    Definition pass.hpp:51
    +
    Specifies creation flags for a new compute pass.
    Definition pass.hpp:146
    +
    tz::v3u kernel
    Number of workgroups (XYZ) to dispatch every frame.
    Definition pass.hpp:148
    +
    Specifies creation flags for a new graphics pass.
    Definition pass.hpp:90
    +
    resource_handle depth_target
    Optional depth target. This will act as the depth image when performing depth testing/writes.
    Definition pass.hpp:98
    +
    resource_handle index_buffer
    Buffer containing indices drawn in a single invocation of the pass.
    Definition pass.hpp:109
    +
    tz::v4u scissor
    Scissor rectangle, components represent {offsetx, offsety, extentx, extenty} in pixels....
    Definition pass.hpp:94
    +
    tz::v4f clear_colour
    When a colour target is cleared, what colour (RGBA normalised floats) should it be cleared to?
    Definition pass.hpp:92
    +
    graphics_flag flags
    Specifies extra optional behaviour for the pass.
    Definition pass.hpp:126
    +
    std::span< const resource_handle > colour_targets
    List of all colour targets. The n'th colour target specified here will be the n'th output of the frag...
    Definition pass.hpp:96
    +
    cull culling
    Describe which faces will be culled during rendering.
    Definition pass.hpp:124
    +
    resource_handle draw_buffer
    Buffer containing an initial count and draw commands which may or may not be used in a single invocat...
    Definition pass.hpp:122
    +
    std::size_t triangle_count
    Number of triangles to draw in a single invocation of the pass.
    Definition pass.hpp:136
    +
    Specifies creation flags for a new pass.
    Definition pass.hpp:158
    +
    pass_compute_state compute
    Describe the compute state. If the pass is a graphics pass, this is ignored.
    Definition pass.hpp:162
    +
    pass_flag flags
    Specifies extra optional behaviour for the pass.
    Definition pass.hpp:182
    +
    pass_graphics_state graphics
    Describe the graphics state. If the pass is a compute pass, this is ignored.
    Definition pass.hpp:160
    +
    const char * name
    Name identifying the pass. Debug tools/error checking will refer to the pass by this name if you prov...
    Definition pass.hpp:184
    +
    std::span< const resource_handle > resources
    List of all resources used in the shader program.
    Definition pass.hpp:180
    +
    shader_handle shader
    Corresponds to the shader that will run during execution. This must refer to a valid shader program c...
    Definition pass.hpp:164
    + +
    static constexpr vector< unsigned int, N > zero()
    Definition vector.hpp:25
    +
    static constexpr vector< unsigned int, N > filled(unsigned int t)
    Definition vector.hpp:31
    +
    + + +
    + + diff --git a/plus.svg b/plus.svg new file mode 100644 index 0000000000..0752016553 --- /dev/null +++ b/plus.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/plusd.svg b/plusd.svg new file mode 100644 index 0000000000..0c65bfe946 --- /dev/null +++ b/plusd.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/quad_8hpp_source.html b/quad_8hpp_source.html new file mode 100644 index 0000000000..58d7016045 --- /dev/null +++ b/quad_8hpp_source.html @@ -0,0 +1,219 @@ + + + + + + + +Topaz: /github/workspace/include/tz/ren/quad.hpp Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Topaz 5.0 +
    +
    Topaz Game Engine
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    quad.hpp
    +
    +
    +
    1#ifndef TOPAZ_REN_QUAD_HPP
    +
    2#define TOPAZ_REN_QUAD_HPP
    +
    3#include "tz/core/handle.hpp"
    +
    4#include "tz/core/vector.hpp"
    +
    5#include "tz/gpu/graph.hpp"
    +
    6
    +
    7namespace tz::ren
    +
    8{
    +
    9 namespace detail
    +
    10 {
    +
    11 struct quad_t{};
    +
    12 struct quadren_t{};
    +
    13 }
    + + +
    36
    +
    + +
    42 {
    + + + +
    49 };
    +
    +
    50
    +
    51 constexpr quad_renderer_flag operator|(quad_renderer_flag lhs, quad_renderer_flag rhs)
    +
    52 {
    +
    53 return static_cast<quad_renderer_flag>(static_cast<int>(lhs) | static_cast<int>(rhs));
    +
    54 }
    +
    55
    +
    56 constexpr bool operator&(quad_renderer_flag lhs, quad_renderer_flag& rhs)
    +
    57 {
    +
    58 return static_cast<int>(lhs) & static_cast<int>(rhs);
    +
    59 }
    +
    60
    + +
    76
    +
    83 std::expected<quad_renderer_handle, tz::error_code> create_quad_renderer(quad_renderer_info info);
    + +
    90
    +
    +
    95 struct quad_info
    +
    96 {
    + +
    100 float rotation = 0.0f;
    + +
    104 std::uint32_t texture_id = -1;
    + +
    107 };
    +
    +
    108
    +
    117 std::expected<quad_handle, tz::error_code> quad_renderer_create_quad(quad_renderer_handle renh, quad_info info);
    +
    118 tz::error_code quad_renderer_destroy_quad(quad_renderer_handle renh, quad_handle quad);
    +
    119
    +
    126 std::expected<std::uint32_t, tz::error_code> quad_renderer_add_texture(quad_renderer_handle renh, tz::gpu::resource_handle image);
    +
    127
    + + +
    138
    + + +
    149
    + + +
    164
    + +
    177 void set_quad_texture(quad_renderer_handle renh, quad_handle quad, std::uint32_t texture_id);
    +
    178
    + + +
    194}
    +
    195
    +
    196#endif // TOPAZ_REN_QUAD_HPP
    +
    Represents a generic opaque handle.
    Definition handle.hpp:32
    +
    error_code
    Error codes for Topaz.
    Definition error.hpp:13
    +
    constexpr auto window_resource
    Corresponds to either the window image (as a colour target) or the system depth image (as a depth tar...
    Definition resource.hpp:125
    +
    tz::v2f get_quad_scale(quad_renderer_handle renh, quad_handle quad)
    Retrieve the scale factor of a quad, in both dimensions.
    +
    void set_quad_position(quad_renderer_handle renh, quad_handle quad, tz::v2f position)
    Set a new position of a quad, in world-space.
    +
    std::expected< std::uint32_t, tz::error_code > quad_renderer_add_texture(quad_renderer_handle renh, tz::gpu::resource_handle image)
    Associate an existing image resource with the provided quad renderer, allowing quads to use it as a t...
    +
    std::expected< quad_handle, tz::error_code > quad_renderer_create_quad(quad_renderer_handle renh, quad_info info)
    Create a new quad to be rendered by an existing quad renderer.
    +
    void set_quad_texture(quad_renderer_handle renh, quad_handle quad, std::uint32_t texture_id)
    Set a new texture-id to be used by a quad.
    +
    void set_quad_colour(quad_renderer_handle renh, quad_handle quad, tz::v3f colour)
    Set a new colour of a quad.
    +
    void set_quad_scale(quad_renderer_handle renh, quad_handle quad, tz::v2f scale)
    Set a new scale factor of a quad, in both dimensions.
    +
    tz::error_code destroy_quad_renderer(quad_renderer_handle renh)
    Manually destroy a quad renderer.
    +
    tz::v3f get_quad_colour(quad_renderer_handle renh, quad_handle quad)
    Retrieve the colour of a quad.
    +
    void quad_renderer_update(quad_renderer_handle renh)
    Update internal state for a quad renderer.
    +
    quad_renderer_flag
    Specifies optional, extra functionality for a quad renderer.
    Definition quad.hpp:42
    +
    std::uint32_t get_quad_texture(quad_renderer_handle renh, quad_handle quad)
    Retrieve the texture-id currently being used by a quad.
    +
    tz::gpu::graph_handle quad_renderer_graph(quad_renderer_handle renh)
    Retrieve a graph representing the quad renderer.
    +
    std::expected< quad_renderer_handle, tz::error_code > create_quad_renderer(quad_renderer_info info)
    Create a new quad renderer.
    +
    tz::v2f get_quad_position(quad_renderer_handle renh, quad_handle quad)
    Retrieve the position of a quad, in world-space.
    +
    @ allow_negative_scale
    Normally if a quad has a negative scale in any dimension, the triangles are no longer in the correct ...
    Definition quad.hpp:48
    +
    @ graph_present_after
    Sets tz::gpu::graph_flag::present_after on the graph representing the quad renderer.
    Definition quad.hpp:46
    +
    @ alpha_clipping
    If the alpha-component of any fragment in a quad (after texture sampling) is very low (<0....
    Definition quad.hpp:44
    +
    Specifies initial data for a single quad.
    Definition quad.hpp:96
    +
    tz::v2f position
    Position of the quad, in world-space. You can change this later via set_quad_position.
    Definition quad.hpp:98
    +
    std::uint32_t texture_id
    Texture to display on the quad. Defaults to -1 (no texture). If no texture is used,...
    Definition quad.hpp:104
    +
    tz::v2f scale
    Scale factors of the quad, in both dimensions. You can change this later via set_quad_scale.
    Definition quad.hpp:102
    +
    float rotation
    Rotation of the quads, in radians.
    Definition quad.hpp:100
    +
    tz::v3f colour
    Colour of the quad. If the quad has no texture, this will be the exact colour of the whole quad....
    Definition quad.hpp:106
    +
    Specifies creation flags for a quad renderer.
    Definition quad.hpp:68
    +
    tz::v4f clear_colour
    When the main pass is executed, the colour target will be cleared to this colour value.
    Definition quad.hpp:70
    +
    tz::gpu::resource_handle colour_target
    Specifies the colour target to render into. By default, this is the window resource (i....
    Definition quad.hpp:72
    +
    quad_renderer_flag flags
    Any extra optional flags to specify?
    Definition quad.hpp:74
    + +
    static constexpr vector< float, N > zero()
    Definition vector.hpp:25
    +
    static constexpr vector< float, N > filled(float t)
    Definition vector.hpp:31
    +
    + + +
    + + diff --git a/quaternion_8hpp_source.html b/quaternion_8hpp_source.html new file mode 100644 index 0000000000..aa406da504 --- /dev/null +++ b/quaternion_8hpp_source.html @@ -0,0 +1,136 @@ + + + + + + + +Topaz: /github/workspace/include/tz/core/quaternion.hpp Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Topaz 5.0 +
    +
    Topaz Game Engine
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    quaternion.hpp
    +
    +
    +
    1#ifndef TOPAZ_CORE_QUATERNION_HPP
    +
    2#define TOPAZ_CORE_QUATERNION_HPP
    +
    3#include "tz/core/vector.hpp"
    +
    4#include "tz/core/matrix.hpp"
    +
    5
    +
    6namespace tz
    +
    7{
    +
    8 struct quat : public tz::v4f
    +
    9 {
    +
    10 static quat iden()
    +
    11 {
    +
    12 return {tz::v4f{0.0f, 0.0f, 0.0f, 1.0f}};
    +
    13 }
    +
    14 quat() = default;
    +
    15 quat(tz::v4f vec);
    +
    16 static quat from_axis_angle(tz::v3f axis, float angle);
    +
    17 static quat from_euler_angles(tz::v3f euler_angles);
    +
    18 tz::m4f matrix() const;
    +
    19 quat inverse() const;
    +
    20 quat combine(const quat& rhs) const;
    +
    21 tz::v3f rotate(tz::v3f pos) const;
    +
    22 quat normalise() const;
    +
    23 quat slerp(const quat& rhs, float factor) const;
    +
    24
    +
    25 quat& operator*=(const quat& rhs);
    +
    26 quat operator*(const quat& rhs) const{auto cpy = *this; return cpy *= rhs;}
    +
    27 };
    +
    28}
    +
    29
    +
    30#endif // TOPAZ_CORE_QUATERNION_HPP
    + +
    + + +
    + + diff --git a/resize.js b/resize.js new file mode 100644 index 0000000000..16a0feabd1 --- /dev/null +++ b/resize.js @@ -0,0 +1,147 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +function initResizable(treeview) { + let sidenav,navtree,content,header,footer,barWidth=6; + const RESIZE_COOKIE_NAME = ''+'width'; + + function resizeWidth() { + const sidenavWidth = $(sidenav).outerWidth(); + content.css({marginLeft:parseInt(sidenavWidth)+"px"}); + if (typeof page_layout!=='undefined' && page_layout==1) { + footer.css({marginLeft:parseInt(sidenavWidth)+"px"}); + } + Cookie.writeSetting(RESIZE_COOKIE_NAME,sidenavWidth-barWidth); + } + + function restoreWidth(navWidth) { + content.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + if (typeof page_layout!=='undefined' && page_layout==1) { + footer.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + } + sidenav.css({width:navWidth + "px"}); + } + + function resizeHeight(treeview) { + const headerHeight = header.outerHeight(); + const windowHeight = $(window).height(); + let contentHeight; + if (treeview) + { + const footerHeight = footer.outerHeight(); + let navtreeHeight,sideNavHeight; + if (typeof page_layout==='undefined' || page_layout==0) { /* DISABLE_INDEX=NO */ + contentHeight = windowHeight - headerHeight - footerHeight; + navtreeHeight = contentHeight; + sideNavHeight = contentHeight; + } else if (page_layout==1) { /* DISABLE_INDEX=YES */ + contentHeight = windowHeight - footerHeight; + navtreeHeight = windowHeight - headerHeight; + sideNavHeight = windowHeight; + } + navtree.css({height:navtreeHeight + "px"}); + sidenav.css({height:sideNavHeight + "px"}); + } + else + { + contentHeight = windowHeight - headerHeight; + } + content.css({height:contentHeight + "px"}); + if (location.hash.slice(1)) { + (document.getElementById(location.hash.slice(1))||document.body).scrollIntoView(); + } + } + + function collapseExpand() { + let newWidth; + if (sidenav.width()>0) { + newWidth=0; + } else { + const width = Cookie.readSetting(RESIZE_COOKIE_NAME,1); + newWidth = (width>1 && width<$(window).width()) ? width : 1; + } + restoreWidth(newWidth); + const sidenavWidth = $(sidenav).outerWidth(); + Cookie.writeSetting(RESIZE_COOKIE_NAME,sidenavWidth-barWidth); + } + + header = $("#top"); + content = $("#doc-content"); + footer = $("#nav-path"); + sidenav = $("#side-nav"); + if (!treeview) { +// title = $("#titlearea"); +// titleH = $(title).height(); +// let animating = false; +// content.on("scroll", function() { +// slideOpts = { duration: 200, +// step: function() { +// contentHeight = $(window).height() - header.outerHeight(); +// content.css({ height : contentHeight + "px" }); +// }, +// done: function() { animating=false; } +// }; +// if (content.scrollTop()>titleH && title.css('display')!='none' && !animating) { +// title.slideUp(slideOpts); +// animating=true; +// } else if (content.scrollTop()<=titleH && title.css('display')=='none' && !animating) { +// title.slideDown(slideOpts); +// animating=true; +// } +// }); + } else { + navtree = $("#nav-tree"); + $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } }); + $(sidenav).resizable({ minWidth: 0 }); + } + $(window).resize(function() { resizeHeight(treeview); }); + if (treeview) + { + const device = navigator.userAgent.toLowerCase(); + const touch_device = device.match(/(iphone|ipod|ipad|android)/); + if (touch_device) { /* wider split bar for touch only devices */ + $(sidenav).css({ paddingRight:'20px' }); + $('.ui-resizable-e').css({ width:'20px' }); + $('#nav-sync').css({ right:'34px' }); + barWidth=20; + } + const width = Cookie.readSetting(RESIZE_COOKIE_NAME,1); + if (width) { restoreWidth(width); } else { resizeWidth(); } + } + resizeHeight(treeview); + const url = location.href; + const i=url.indexOf("#"); + if (i>=0) window.location.hash=url.substr(i); + const _preventDefault = function(evt) { evt.preventDefault(); }; + if (treeview) + { + $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); + $(".ui-resizable-handle").dblclick(collapseExpand); + // workaround for firefox + $("body").css({overflow: "hidden"}); + } + $(window).on('load',function() { resizeHeight(treeview); }); +} +/* @license-end */ diff --git a/resource_8hpp_source.html b/resource_8hpp_source.html new file mode 100644 index 0000000000..1bd8fa83c1 --- /dev/null +++ b/resource_8hpp_source.html @@ -0,0 +1,273 @@ + + + + + + + +Topaz: /github/workspace/include/tz/gpu/resource.hpp Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Topaz 5.0 +
    +
    Topaz Game Engine
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    resource.hpp
    +
    +
    +
    1#ifndef TOPAZ_GPU_RESOURCE_HPP
    +
    2#define TOPAZ_GPU_RESOURCE_HPP
    +
    3#include "tz/core/error.hpp"
    +
    4#include "tz/core/handle.hpp"
    +
    5#include <span>
    +
    6#include <expected>
    +
    7
    +
    8namespace tz::gpu
    +
    9{
    +
    + +
    21 {
    +
    23 index = 0b0001,
    +
    25 draw = 0b0010,
    + +
    28 };
    +
    +
    29
    +
    30 constexpr buffer_flag operator|(buffer_flag lhs, buffer_flag rhs)
    +
    31 {
    +
    32 return static_cast<buffer_flag>(static_cast<int>(lhs) | static_cast<int>(rhs));
    +
    33 }
    +
    34
    +
    35 constexpr bool operator&(buffer_flag lhs, buffer_flag& rhs)
    +
    36 {
    +
    37 return static_cast<int>(lhs) & static_cast<int>(rhs);
    +
    38 }
    +
    39
    +
    + +
    47 {
    +
    49 std::span<const std::byte> data;
    +
    51 const char* name = "<untitled buffer resource>";
    +
    53 buffer_flag flags = static_cast<buffer_flag>(0);
    +
    54 };
    +
    +
    55
    +
    +
    62 enum class image_type
    +
    63 {
    +
    65 rgba,
    +
    67 depth,
    +
    69 floats,
    +
    70 };
    +
    +
    71
    +
    + +
    77 {
    +
    79 colour_target = 0b0001,
    +
    81 depth_target = 0b0010,
    +
    82 };
    +
    +
    83
    +
    84 constexpr image_flag operator|(image_flag lhs, image_flag rhs)
    +
    85 {
    +
    86 return static_cast<image_flag>(static_cast<int>(lhs) | static_cast<int>(rhs));
    +
    87 }
    +
    88
    +
    89 constexpr bool operator&(image_flag lhs, image_flag& rhs)
    +
    90 {
    +
    91 return static_cast<int>(lhs) & static_cast<int>(rhs);
    +
    92 }
    +
    93
    +
    + +
    101 {
    +
    103 unsigned int width;
    +
    105 unsigned int height;
    + +
    109 std::span<const std::byte> data;
    +
    111 const char* name = "<untitled image resource>";
    +
    113 image_flag flags = static_cast<image_flag>(0);
    +
    114 };
    +
    +
    115
    + +
    125 constexpr auto window_resource = static_cast<tz::hanval>(std::numeric_limits<std::underlying_type_t<tz::hanval>>::max() - 1);
    +
    126
    +
    142 std::expected<resource_handle, tz::error_code> create_buffer(buffer_info);
    +
    157 std::expected<resource_handle, tz::error_code> create_image(image_info);
    +
    158
    + +
    175
    +
    180 using index_t = std::uint32_t;
    +
    +
    187 struct draw_t
    +
    188 {
    +
    190 std::uint32_t vertex_count = 0;
    +
    192 std::uint32_t instance_count = 1;
    +
    194 std::uint32_t first_vertex = 0;
    +
    196 std::uint32_t first_instance = 0;
    +
    197 };
    +
    +
    + +
    205 {
    +
    207 std::uint32_t index_count = 0;
    +
    209 std::uint32_t instance_count = 1;
    +
    211 std::uint32_t first_index = 0;
    +
    213 std::int32_t vertex_offset = 0;
    +
    215 std::uint32_t first_instance = 0;
    +
    216 };
    +
    +
    217
    +
    234 tz::error_code resource_write(resource_handle res, std::span<const std::byte> new_data, std::size_t offset = 0);
    + + + +
    262 std::span<const std::byte> resource_read(resource_handle res);
    +
    270 void buffer_resize(resource_handle bufh, std::size_t new_size_bytes);
    +
    278 void image_resize(resource_handle imgh, unsigned int new_width, unsigned int new_height);
    +
    285 tz::error_code index_buffer_write(resource_handle index_buffer, std::span<const index_t> indices);
    +
    292 tz::error_code draw_buffer_write(resource_handle draw_buffer, std::uint32_t count, std::span<const draw_t> draws);
    +
    299 tz::error_code draw_buffer_indexed_write(resource_handle draw_buffer, std::uint32_t count, std::span<const draw_indexed_t> draws);
    +
    300}
    +
    301
    +
    302#endif // TOPAZ_GPU_RESOURCE_HPP
    + +
    error_code
    Error codes for Topaz.
    Definition error.hpp:13
    +
    buffer_flag
    Specifies optional behaviours for a buffer.
    Definition resource.hpp:21
    +
    image_type
    Describes the internal format of an image's data.
    Definition resource.hpp:63
    +
    tz::error_code draw_buffer_write(resource_handle draw_buffer, std::uint32_t count, std::span< const draw_t > draws)
    Write draw-indirect-count + commands into a buffer resource.
    +
    tz::error_code destroy_resource(resource_handle res)
    Manually destroy a resource.
    +
    tz::error_code index_buffer_write(resource_handle index_buffer, std::span< const index_t > indices)
    Write indices into a buffer resource.
    +
    std::expected< resource_handle, tz::error_code > create_buffer(buffer_info)
    Create a new buffer.
    +
    std::expected< resource_handle, tz::error_code > create_image(image_info)
    Create a new image.
    +
    constexpr auto window_resource
    Corresponds to either the window image (as a colour target) or the system depth image (as a depth tar...
    Definition resource.hpp:125
    +
    std::span< const std::byte > resource_read(resource_handle res)
    Retrieves the current data within a resource.
    +
    std::size_t resource_size(resource_handle res)
    Retrieve the size of a resource's data, in bytes.
    +
    void buffer_resize(resource_handle bufh, std::size_t new_size_bytes)
    Resize a buffer resource.
    +
    image_flag
    Specifies optional behaviours for a buffer.
    Definition resource.hpp:77
    +
    unsigned int image_get_width(resource_handle res)
    Retrieve the width of an image resource.
    +
    unsigned int image_get_height(resource_handle res)
    Retrieve the height of an image resource.
    +
    tz::error_code resource_write(resource_handle res, std::span< const std::byte > new_data, std::size_t offset=0)
    Write some new data to a resource. The thread will block until the changes are resident GPU-side.
    +
    void image_resize(resource_handle imgh, unsigned int new_width, unsigned int new_height)
    Resize an image resource.
    +
    tz::error_code draw_buffer_indexed_write(resource_handle draw_buffer, std::uint32_t count, std::span< const draw_indexed_t > draws)
    Write draw-indirect-count + indexed commands into a buffer resource.
    +
    @ draw
    Buffer can be used as a draw buffer by a graphics pass.
    Definition resource.hpp:25
    +
    @ dynamic_access
    Buffer data will be writable directly from the CPU. Resource writes targetting buffers that are dynam...
    Definition resource.hpp:27
    +
    @ index
    Buffer can be used as an index buffer by a graphics pass.
    Definition resource.hpp:23
    +
    @ depth
    Image is comprised of 32-bit floats per pixel, but is only used as a depth image.
    +
    @ rgba
    Image data is in a 32-bit RGBA unsigned normalised format.
    +
    @ floats
    Image is comprised of 32-bit floats per pixel, but cannot be used as a depth image....
    +
    @ colour_target
    Image can be used as a colour target by a graphics pass.
    Definition resource.hpp:79
    +
    @ depth_target
    Image can be used as a depth target by a graphics pass.
    Definition resource.hpp:81
    +
    std::uint32_t index_t
    Represents a single index. Indices are always 32-bit unsigned integers.
    Definition resource.hpp:180
    +
    Specifies creation flags for a buffer.
    Definition resource.hpp:47
    +
    const char * name
    What name shall I have when you're looking at me in your graphics debugger of choice?...
    Definition resource.hpp:51
    +
    buffer_flag flags
    Any extra optional flags to specify?
    Definition resource.hpp:53
    +
    std::span< const std::byte > data
    What initial data shall I have?
    Definition resource.hpp:49
    +
    Represents a single indexed draw-call.
    Definition resource.hpp:205
    +
    std::uint32_t first_index
    Index of the first index to draw (within the index buffer).
    Definition resource.hpp:211
    +
    std::int32_t vertex_offset
    An offset added to each index value before indexing into the vertex buffer.
    Definition resource.hpp:213
    +
    std::uint32_t instance_count
    Number of instances to draw. If you're not doing GPU instancing, you probably want this to be 1.
    Definition resource.hpp:209
    +
    std::uint32_t first_instance
    Instance ID of the first instance to draw.
    Definition resource.hpp:215
    +
    std::uint32_t index_count
    Number of indices (vertices) to draw.
    Definition resource.hpp:207
    +
    Represents a single unindexed draw-call.
    Definition resource.hpp:188
    +
    std::uint32_t first_instance
    Instance ID of the first instance to draw.
    Definition resource.hpp:196
    +
    std::uint32_t vertex_count
    Number of vertices to draw.
    Definition resource.hpp:190
    +
    std::uint32_t first_vertex
    Index of the first vertex to draw. Essentially offsets gl_VertexIndex. (TODO: confirm that this is tr...
    Definition resource.hpp:194
    +
    std::uint32_t instance_count
    Number of instances to draw. If you're not doing GPU instancing, you probably want this to be 1.
    Definition resource.hpp:192
    +
    Specifies creation flags for an image.
    Definition resource.hpp:101
    +
    std::span< const std::byte > data
    What initial data shall I have?
    Definition resource.hpp:109
    +
    unsigned int height
    Height of the image, in pixels.
    Definition resource.hpp:105
    +
    image_flag flags
    Any extra optional flags to specify?
    Definition resource.hpp:113
    +
    unsigned int width
    Width of the image, in pixels.
    Definition resource.hpp:103
    +
    const char * name
    What name shall I have when you're looking at me in your graphics debugger of choice?...
    Definition resource.hpp:111
    +
    image_type type
    Describes the format of the image data.
    Definition resource.hpp:107
    +
    + + +
    + + diff --git a/search/all_0.js b/search/all_0.js new file mode 100644 index 0000000000..9169a2675c --- /dev/null +++ b/search/all_0.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['about_0',['About',['../index.html#autotoc_md1',1,'']]], + ['add_5fdependency_1',['add_dependency',['../structtz_1_1gpu_1_1graph__builder.html#afeda9b3aacf0a3f2a596acbb00192dcb',1,'tz::gpu::graph_builder']]], + ['add_5fpass_2',['add_pass',['../structtz_1_1gpu_1_1graph__builder.html#acb4772036947f1af7649efd149167460',1,'tz::gpu::graph_builder']]], + ['allow_5fnegative_5fscale_3',['allow_negative_scale',['../group__tz__ren__quad.html#ggada2d96dacb31346ea6a8d19d933a9bc9a397b26d33462f5f3ac70d09a93bb8ae6',1,'tz::ren']]], + ['alpha_5fclipping_4',['alpha_clipping',['../group__tz__ren__quad.html#ggada2d96dacb31346ea6a8d19d933a9bc9ad2388bab44a63e62df0adcc09e324e81',1,'tz::ren']]], + ['any_20of_20these_20these_20are_20listed_20just_20for_20completeness_5',['Note: I do not recommend any of these. These are listed just for completeness.',['../index.html#autotoc_md4',1,'']]], + ['api_20reference_6',['API Reference',['../group__tz.html',1,'']]], + ['appinfo_7',['appinfo',['../structtz_1_1appinfo.html',1,'tz']]], + ['are_20listed_20just_20for_20completeness_8',['Note: I do not recommend any of these. These are listed just for completeness.',['../index.html#autotoc_md4',1,'']]] +]; diff --git a/search/all_1.js b/search/all_1.js new file mode 100644 index 0000000000..c64f26b105 --- /dev/null +++ b/search/all_1.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['back_0',['back',['../group__tz__gpu__pass.html#gga6589e2e52a01e7636c35d868270d7b37a469bba0a564235dfceede42db14f17b0',1,'tz::gpu']]], + ['both_1',['both',['../group__tz__gpu__pass.html#gga6589e2e52a01e7636c35d868270d7b37af6cb3e816496528d4187db53bc66567f',1,'tz::gpu']]], + ['buffer_5fflag_2',['buffer_flag',['../group__tz__gpu__resource.html#ga085f6c2c900ac7e57be6bfbf1ccc9457',1,'tz::gpu']]], + ['buffer_5finfo_3',['buffer_info',['../structtz_1_1gpu_1_1buffer__info.html',1,'tz::gpu']]], + ['buffer_5fresize_4',['buffer_resize',['../group__tz__gpu__resource.html#gac4ca9edd5569f05ad0f34edaae49df11',1,'tz::gpu']]], + ['build_5',['Vulkan Build',['../index.html#autotoc_md8',1,'']]], + ['build_6',['build',['../structtz_1_1gpu_1_1graph__builder.html#a64d186c3a80de0eeb10616e1df91b209',1,'tz::gpu::graph_builder']]], + ['build_20instructions_7',['Build Instructions',['../index.html#autotoc_md5',1,'']]] +]; diff --git a/search/all_10.js b/search/all_10.js new file mode 100644 index 0000000000..b98d1c3e94 --- /dev/null +++ b/search/all_10.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['quad_20renderer_0',['Quad Renderer',['../group__tz__ren__quad.html',1,'']]], + ['quad_5fhandle_1',['quad_handle',['../group__tz__ren__quad.html#ga6d419f8830ac39e4f6e0fbd57d8b02c7',1,'tz::ren']]], + ['quad_5finfo_2',['quad_info',['../structtz_1_1ren_1_1quad__info.html',1,'tz::ren']]], + ['quad_5frenderer_5fadd_5ftexture_3',['quad_renderer_add_texture',['../group__tz__ren__quad.html#ga5021adfcac206620e7581fbca7ca3afe',1,'tz::ren']]], + ['quad_5frenderer_5fcreate_5fquad_4',['quad_renderer_create_quad',['../group__tz__ren__quad.html#ga51d767eab2c7690f37f596dbc9160d10',1,'tz::ren']]], + ['quad_5frenderer_5fflag_5',['quad_renderer_flag',['../group__tz__ren__quad.html#gada2d96dacb31346ea6a8d19d933a9bc9',1,'tz::ren']]], + ['quad_5frenderer_5fgraph_6',['quad_renderer_graph',['../group__tz__ren__quad.html#gaea9f99996c1028345bb8c4fcf14d6621',1,'tz::ren']]], + ['quad_5frenderer_5fhandle_7',['quad_renderer_handle',['../group__tz__ren__quad.html#ga21066c4d77673fe9a474137f4acc8745',1,'tz::ren']]], + ['quad_5frenderer_5finfo_8',['quad_renderer_info',['../structtz_1_1ren_1_1quad__renderer__info.html',1,'tz::ren']]], + ['quad_5frenderer_5fupdate_9',['quad_renderer_update',['../group__tz__ren__quad.html#gad34310d94fabd5e36b78aab607ed6a77',1,'tz::ren']]] +]; diff --git a/search/all_11.js b/search/all_11.js new file mode 100644 index 0000000000..018f4eefd0 --- /dev/null +++ b/search/all_11.js @@ -0,0 +1,17 @@ +var searchData= +[ + ['recommend_20any_20of_20these_20these_20are_20listed_20just_20for_20completeness_0',['Note: I do not recommend any of these. These are listed just for completeness.',['../index.html#autotoc_md4',1,'']]], + ['reference_1',['API Reference',['../group__tz.html',1,'']]], + ['render_2',['render',['../group__tz__gpu__pass.html#gga03a9b4db32a0fcf853e0b3f2c6cbfc3ea9e5f0bb330344d580b9e30d338d6ab6d',1,'tz::gpu']]], + ['renderer_3',['Quad Renderer',['../group__tz__ren__quad.html',1,'']]], + ['rendering_20library_4',['Rendering Library',['../group__tz__ren.html',1,'']]], + ['requirements_5',['Requirements',['../index.html#autotoc_md7',1,'']]], + ['resource_5fhandle_6',['resource_handle',['../group__tz__gpu__resource.html#gaa033f019591c94352c14a3269cd3f608',1,'tz::gpu']]], + ['resource_5fread_7',['resource_read',['../group__tz__gpu__resource.html#ga9e4069d26788509f05aa86396e9f5147',1,'tz::gpu']]], + ['resource_5fsize_8',['resource_size',['../group__tz__gpu__resource.html#gab8ae5b23365e06d1d971ae208ec1b235',1,'tz::gpu']]], + ['resource_5fwrite_9',['resource_write',['../group__tz__gpu__resource.html#gadeb3bc399cee18eab6646110f9c1284c',1,'tz::gpu']]], + ['resources_10',['Resources',['../group__tz__gpu__resource.html',1,'']]], + ['resources_11',['resources',['../structtz_1_1gpu_1_1pass__info.html#a8ff03988371ec8717f0ea0bbebe272eb',1,'tz::gpu::pass_info']]], + ['rgba_12',['rgba',['../group__tz__gpu__resource.html#gga133bb9aff1ab3d26c7845b4f96d6ac61a7082a31b8759c9d59795876351ec63aa',1,'tz::gpu']]], + ['rotation_13',['rotation',['../structtz_1_1ren_1_1quad__info.html#aab99f51c00b32f4a02a4888e7d779261',1,'tz::ren::quad_info']]] +]; diff --git a/search/all_12.js b/search/all_12.js new file mode 100644 index 0000000000..16c37e7237 --- /dev/null +++ b/search/all_12.js @@ -0,0 +1,18 @@ +var searchData= +[ + ['scale_0',['scale',['../structtz_1_1ren_1_1quad__info.html#a69d883714f9bcb94287583c37d242f9f',1,'tz::ren::quad_info']]], + ['scissor_1',['scissor',['../structtz_1_1gpu_1_1pass__graphics__state.html#a447c9a2cb82ea01cf39f583d75e1dae4',1,'tz::gpu::pass_graphics_state']]], + ['scripting_2',['Lua Scripting',['../group__tz__core__lua.html',1,'']]], + ['set_5fquad_5fcolour_3',['set_quad_colour',['../group__tz__ren__quad.html#ga82cb1330c8273ba6e7cf2b932882aa26',1,'tz::ren']]], + ['set_5fquad_5fposition_4',['set_quad_position',['../group__tz__ren__quad.html#ga4ec66f4c770c6c596f4455fdee16a230',1,'tz::ren']]], + ['set_5fquad_5fscale_5',['set_quad_scale',['../group__tz__ren__quad.html#ga9f0faca39ab0e0425995970fd12ca4c4',1,'tz::ren']]], + ['set_5fquad_5ftexture_6',['set_quad_texture',['../group__tz__ren__quad.html#ga61642f3867a0e34a755e5589447897ef',1,'tz::ren']]], + ['settings_7',['Settings',['../group__tz__gpu__settings.html',1,'']]], + ['settings_5fget_5fvsync_8',['settings_get_vsync',['../group__tz__gpu__settings.html#ga8c670a35a5dc3aff1401a46a701d8040',1,'tz::gpu']]], + ['settings_5fset_5fvsync_9',['settings_set_vsync',['../group__tz__gpu__settings.html#gaee404b2aea7c1c2516d057913b5b7af5',1,'tz::gpu']]], + ['shader_10',['shader',['../structtz_1_1gpu_1_1pass__info.html#a931759cc6be35d6697d2b2200c9fc497',1,'tz::gpu::pass_info']]], + ['shader_5fhandle_11',['shader_handle',['../group__tz__gpu__shader.html#ga411f2448d8c9380bac7e894918227f4f',1,'tz::gpu']]], + ['shaders_12',['Shaders',['../group__tz__gpu__shader.html',1,'']]], + ['success_13',['success',['../group__tz__core.html#gga98b356a4a54e1f49c9b3adb6002fc1afa260ca9dd8a4577fc00b7bd5810298076',1,'tz']]], + ['system_14',['System',['../group__tz__os__input.html',1,'Input System'],['../group__tz__core__job.html',1,'Job System'],['../group__tz__os__window.html',1,'Window System']]] +]; diff --git a/search/all_13.js b/search/all_13.js new file mode 100644 index 0000000000..1693c3f765 --- /dev/null +++ b/search/all_13.js @@ -0,0 +1,16 @@ +var searchData= +[ + ['terminate_0',['terminate',['../group__tz.html#ga0a5d1e375e7e82fcd12a8b74b8012bae',1,'tz']]], + ['texture_5fid_1',['texture_id',['../structtz_1_1ren_1_1quad__info.html#a6370bfa9baf96c77c98e560f2e620c5e',1,'tz::ren::quad_info']]], + ['these_20are_20listed_20just_20for_20completeness_2',['Note: I do not recommend any of these. These are listed just for completeness.',['../index.html#autotoc_md4',1,'']]], + ['these_20these_20are_20listed_20just_20for_20completeness_3',['Note: I do not recommend any of these. These are listed just for completeness.',['../index.html#autotoc_md4',1,'']]], + ['timeline_4',['timeline',['../structtz_1_1gpu_1_1graph__info.html#aa6b119eb52cb1b5390d667d826cd695b',1,'tz::gpu::graph_info']]], + ['title_5',['title',['../structtz_1_1os_1_1window__info.html#aba6ce4529c60001ec0f0534190b9e7b2',1,'tz::os::window_info']]], + ['topaz_20engine_6',['Topaz Engine',['../index.html',1,'']]], + ['transparent_7',['transparent',['../group__tz__os__window.html#gga0ce22ac9fb10ea777cfc95e9c52a9fa5a3942db11e2fc7c493a915beef467728e',1,'tz::os']]], + ['triangle_5fcount_8',['triangle_count',['../structtz_1_1gpu_1_1pass__graphics__state.html#ae9065866d3bc1f2f6ac5eec6c07dd2d7',1,'tz::gpu::pass_graphics_state']]], + ['type_9',['type',['../structtz_1_1gpu_1_1hardware.html#a84c26a9d3b8eefdb36430aa6d0c64320',1,'tz::gpu::hardware::type'],['../structtz_1_1gpu_1_1image__info.html#ae92c0901874459007b5e9f8f1d95b302',1,'tz::gpu::image_info::type']]], + ['tz_5fassert_10',['tz_assert',['../group__tz.html#ga2897aa0e0a57f32e8722e84b35004839',1,'debug.hpp']]], + ['tz_5ferror_11',['tz_error',['../group__tz.html#ga75d6dcf834e5d38fbe76f54acb6ca1c6',1,'debug.hpp']]], + ['tz_5fmust_12',['tz_must',['../group__tz.html#ga3c3b6fdaafbdb0813dacbfafafc2d639',1,'debug.hpp']]] +]; diff --git a/search/all_14.js b/search/all_14.js new file mode 100644 index 0000000000..07e0be75de --- /dev/null +++ b/search/all_14.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['unknown_0',['unknown',['../group__tz__gpu__hardware.html#ggaa1e78cd65e2d10e324243cc2d6030f5caad921d60486366258809553a3db49a4a',1,'tz::gpu']]], + ['unknown_5ferror_1',['unknown_error',['../group__tz__core.html#gga98b356a4a54e1f49c9b3adb6002fc1afa4e44c97a51e5519cd277f335de285ead',1,'tz']]], + ['use_5fhardware_2',['use_hardware',['../group__tz__gpu__hardware.html#gae0b031c00ca531bea031cf25332ae8ae',1,'tz::gpu']]] +]; diff --git a/search/all_15.js b/search/all_15.js new file mode 100644 index 0000000000..a99aeb71be --- /dev/null +++ b/search/all_15.js @@ -0,0 +1,27 @@ +var searchData= +[ + ['v2d_0',['v2d',['../group__tz__core__math.html#ga1eee13b29a03e11eab4472443791801a',1,'tz']]], + ['v2f_1',['v2f',['../group__tz__core__math.html#ga7f8dcc76689f8a8fc15e6699ce573798',1,'tz']]], + ['v2i_2',['v2i',['../group__tz__core__math.html#ga44f74f27d2810ea2bb413614bd8ba468',1,'tz']]], + ['v2u_3',['v2u',['../group__tz__core__math.html#ga0b49eee72dbdc3262a673a74cc772635',1,'tz']]], + ['v3d_4',['v3d',['../group__tz__core__math.html#ga89ccc9b47ab6aa5ed9b46909566c71a8',1,'tz']]], + ['v3f_5',['v3f',['../group__tz__core__math.html#ga4bbd59d09393fd2d928dee8341e4d7cd',1,'tz']]], + ['v3i_6',['v3i',['../group__tz__core__math.html#ga963de3d1ae6dd2a382ba0b852bbfa665',1,'tz']]], + ['v3u_7',['v3u',['../group__tz__core__math.html#ga31f6571a45149f2b4d229496156087c0',1,'tz']]], + ['v4d_8',['v4d',['../group__tz__core__math.html#ga80b8d577535016235023bf509c8d8f8b',1,'tz']]], + ['v4f_9',['v4f',['../group__tz__core__math.html#gac398d430d486b6705cd955a4d55b56fd',1,'tz']]], + ['v4i_10',['v4i',['../group__tz__core__math.html#ga1386b0ce3e8481374fdad8f117d0692e',1,'tz']]], + ['v4u_11',['v4u',['../group__tz__core__math.html#ga4bcbd9601057ce4166edc693ace5380c',1,'tz']]], + ['vector_12',['vector',['../structtz_1_1vector.html',1,'tz::vector< T, N >'],['../structtz_1_1vector.html#a57bf50d6fa7a8ee09d40e6fdd376375d',1,'tz::vector::vector(Ts &&... ts)'],['../structtz_1_1vector.html#a3e61aec72ace570a62305dba2521427a',1,'tz::vector::vector(std::array< T, N > data)'],['../structtz_1_1vector.html#a8a56603fb25b8bafa36afb477bc0baec',1,'tz::vector::vector()=default']]], + ['vector_3c_20float_2c_202_20_3e_13',['vector< float, 2 >',['../structtz_1_1vector.html',1,'tz']]], + ['vector_3c_20float_2c_203_20_3e_14',['vector< float, 3 >',['../structtz_1_1vector.html',1,'tz']]], + ['vector_3c_20float_2c_204_20_3e_15',['vector< float, 4 >',['../structtz_1_1vector.html',1,'tz']]], + ['vector_3c_20unsigned_20int_2c_203_20_3e_16',['vector< unsigned int, 3 >',['../structtz_1_1vector.html',1,'tz']]], + ['vector_3c_20unsigned_20int_2c_204_20_3e_17',['vector< unsigned int, 4 >',['../structtz_1_1vector.html',1,'tz']]], + ['version_20history_18',['Version History',['../index.html#autotoc_md3',1,'']]], + ['vertex_5fcount_19',['vertex_count',['../structtz_1_1gpu_1_1draw__t.html#a62c175fe6afe3be52943decdf89ff4ca',1,'tz::gpu::draw_t']]], + ['vertex_5foffset_20',['vertex_offset',['../structtz_1_1gpu_1_1draw__indexed__t.html#a3a9de12475a2d77214e83ac64001fe15',1,'tz::gpu::draw_indexed_t']]], + ['voom_21',['voom',['../group__tz__core.html#gga98b356a4a54e1f49c9b3adb6002fc1afa4207af5812019b2c0ff52b4ff4339d4b',1,'tz']]], + ['vram_5fsize_5fmib_22',['vram_size_mib',['../structtz_1_1gpu_1_1hardware.html#ae3ea3301d0a43bd452e432012cffac88',1,'tz::gpu::hardware']]], + ['vulkan_20build_23',['Vulkan Build',['../index.html#autotoc_md8',1,'']]] +]; diff --git a/search/all_16.js b/search/all_16.js new file mode 100644 index 0000000000..9f0e1ab56a --- /dev/null +++ b/search/all_16.js @@ -0,0 +1,19 @@ +var searchData= +[ + ['width_0',['width',['../structtz_1_1gpu_1_1image__info.html#aacc3805f569e3929a8f8712ff7d81af0',1,'tz::gpu::image_info::width'],['../structtz_1_1io_1_1image__header.html#af32a627b751af4a2587e098b684f0d79',1,'tz::io::image_header::width'],['../structtz_1_1os_1_1window__info.html#a3e55ad9c0d67894376b585eabcdd24d7',1,'tz::os::window_info::width']]], + ['window_20system_1',['Window System',['../group__tz__os__window.html',1,'']]], + ['window_5fflags_2',['window_flags',['../group__tz__os__window.html#ga0ce22ac9fb10ea777cfc95e9c52a9fa5',1,'tz::os']]], + ['window_5ffullscreen_3',['window_fullscreen',['../group__tz__os__window.html#gac649d1c762ca486ef8be1a375a3b7ce5',1,'tz::os']]], + ['window_5fget_5fheight_4',['window_get_height',['../group__tz__os__window.html#gadbebbc27cd903a79e4125d507c624688',1,'tz::os']]], + ['window_5fget_5ftitle_5',['window_get_title',['../group__tz__os__window.html#gae88e68809acfcaeb0bde00dfadd66394',1,'tz::os']]], + ['window_5fget_5fwidth_6',['window_get_width',['../group__tz__os__window.html#ga35103a5cb106e14ea924877ba6965493',1,'tz::os']]], + ['window_5finfo_7',['window_info',['../structtz_1_1os_1_1window__info.html',1,'tz::os']]], + ['window_5fis_5fopen_8',['window_is_open',['../group__tz__os__window.html#gac71356a74c55b52ec0ffc79da89afdcc',1,'tz::os']]], + ['window_5fmaximise_9',['window_maximise',['../group__tz__os__window.html#gad1d28191e820d89724d02c6618876d7c',1,'tz::os']]], + ['window_5fminimise_10',['window_minimise',['../group__tz__os__window.html#gaba6739afe416c3211891c7f2672dc4d4',1,'tz::os']]], + ['window_5fresource_11',['window_resource',['../group__tz__gpu__resource.html#ga9609fff0110d0e8b94c9fd8d1431ff51',1,'tz::gpu']]], + ['window_5fset_5fdimensions_12',['window_set_dimensions',['../group__tz__os__window.html#ga4446ccea8db8e4f6a13b6e3f84158616',1,'tz::os']]], + ['window_5fset_5ftitle_13',['window_set_title',['../group__tz__os__window.html#ga62d5d7e8c573b67fad970eaaa1fc06fd',1,'tz::os']]], + ['window_5fshow_14',['window_show',['../group__tz__os__window.html#ga5e828fee9d6f0aaffbb6131623aa8dfd',1,'tz::os']]], + ['window_5fupdate_15',['window_update',['../group__tz__os__window.html#gad1efe06c13c0d9f08460096df4498057',1,'tz::os']]] +]; diff --git a/search/all_17.js b/search/all_17.js new file mode 100644 index 0000000000..b3dd18f36f --- /dev/null +++ b/search/all_17.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['x_0',['x',['../structtz_1_1os_1_1window__info.html#a77fef456cf4d5c8e776b749b3129f197',1,'tz::os::window_info']]] +]; diff --git a/search/all_18.js b/search/all_18.js new file mode 100644 index 0000000000..c900b7b862 --- /dev/null +++ b/search/all_18.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['y_0',['y',['../structtz_1_1os_1_1window__info.html#a8febcefad6393dd88b3322498058c884',1,'tz::os::window_info']]] +]; diff --git a/search/all_19.js b/search/all_19.js new file mode 100644 index 0000000000..6dbd52acb8 --- /dev/null +++ b/search/all_19.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['zero_0',['zero',['../structtz_1_1vector.html#a34bac7d96ff37cf13c7cbcae3fdff141',1,'tz::vector']]] +]; diff --git a/search/all_2.js b/search/all_2.js new file mode 100644 index 0000000000..f4d67b5b97 --- /dev/null +++ b/search/all_2.js @@ -0,0 +1,26 @@ +var searchData= +[ + ['caps_0',['caps',['../structtz_1_1gpu_1_1hardware.html#a7e3dc222553d4b6277449d3c1261f54b',1,'tz::gpu::hardware']]], + ['centered_5fwindow_1',['centered_window',['../group__tz__os__window.html#gga0ce22ac9fb10ea777cfc95e9c52a9fa5aa5ea653f56ab7e74ae6b09bd57bbd421',1,'tz::os']]], + ['clear_5fcolour_2',['clear_colour',['../structtz_1_1gpu_1_1pass__graphics__state.html#a6e2d55e8f383a8195aa8e33a117cf2b6',1,'tz::gpu::pass_graphics_state::clear_colour'],['../structtz_1_1ren_1_1quad__renderer__info.html#a3a35a54def36c00d93d9d75fe673f24b',1,'tz::ren::quad_renderer_info::clear_colour']]], + ['close_5fwindow_3',['close_window',['../group__tz__os__window.html#ga45fdbf53cc64912c022c0dfd3fbd9a88',1,'tz::os']]], + ['colour_4',['colour',['../structtz_1_1ren_1_1quad__info.html#adbfb8bbcfd356f7d5ba621557b3634d2',1,'tz::ren::quad_info']]], + ['colour_5ftarget_5',['colour_target',['../structtz_1_1ren_1_1quad__renderer__info.html#a407c96dc2fcbad43889a29a5aea04f7a',1,'tz::ren::quad_renderer_info::colour_target'],['../group__tz__gpu__resource.html#ggac69ba8da4ab137995079556a00afa86ea167939444ca0bb293234fc31274fb659',1,'tz::gpu::colour_target']]], + ['colour_5ftargets_6',['colour_targets',['../structtz_1_1gpu_1_1pass__graphics__state.html#aa789ef6e8a5b0e422a8c1482f042c197',1,'tz::gpu::pass_graphics_state']]], + ['completeness_7',['Note: I do not recommend any of these. These are listed just for completeness.',['../index.html#autotoc_md4',1,'']]], + ['compute_8',['compute',['../structtz_1_1gpu_1_1pass__info.html#a24782754731e1f5e7ec2e0571613622e',1,'tz::gpu::pass_info::compute'],['../group__tz__gpu__pass.html#gga03a9b4db32a0fcf853e0b3f2c6cbfc3ea77e73f3a185e16d1f08ca5e057710b9d',1,'computetz::gpu']]], + ['compute_5fonly_9',['compute_only',['../group__tz__gpu__hardware.html#ggab2036c965f55d5a07205fa4fd2120e9cac503e1b23ae78f344e72b44606f5dfc6',1,'tz::gpu']]], + ['concurrent_5fusage_10',['concurrent_usage',['../group__tz__core.html#gga98b356a4a54e1f49c9b3adb6002fc1afa7f72dda8d43c76cb98044640facab14e',1,'tz']]], + ['core_20libraries_11',['Core Libraries',['../group__tz__core.html',1,'']]], + ['cpu_12',['cpu',['../group__tz__gpu__hardware.html#ggaa1e78cd65e2d10e324243cc2d6030f5cad9747e2da342bdb995f6389533ad1a3d',1,'tz::gpu']]], + ['create_5fbuffer_13',['create_buffer',['../group__tz__gpu__resource.html#ga87c1cae8f14cbb08ead45a767e042251',1,'tz::gpu']]], + ['create_5fcompute_5fshader_14',['create_compute_shader',['../group__tz__gpu__shader.html#ga658aea0467b28c7286a55be3350c0f34',1,'tz::gpu']]], + ['create_5fgraph_15',['create_graph',['../group__tz__gpu__graph.html#gaae3dd8ee4d7bb068e1051fb9638dd8be',1,'tz::gpu']]], + ['create_5fgraphics_5fshader_16',['create_graphics_shader',['../group__tz__gpu__shader.html#ga4b6c0f0ef7f40dc3fc68b05192c3fda0',1,'tz::gpu']]], + ['create_5fimage_17',['create_image',['../group__tz__gpu__resource.html#ga88ea6639f763c58f1a36ac6723f4174a',1,'tz::gpu']]], + ['create_5fpass_18',['create_pass',['../group__tz__gpu__pass.html#ga30e151020820180ff5e63d7a3f354920',1,'tz::gpu']]], + ['create_5fquad_5frenderer_19',['create_quad_renderer',['../group__tz__ren__quad.html#gafbee31504dfbef7490bbc05677fcf327',1,'tz::ren']]], + ['cross_20',['cross',['../structtz_1_1vector.html#a2bc70e2d046dfd7ec1907a2a28a70fa3',1,'tz::vector']]], + ['cull_21',['cull',['../group__tz__gpu__pass.html#ga6589e2e52a01e7636c35d868270d7b37',1,'tz::gpu']]], + ['culling_22',['culling',['../structtz_1_1gpu_1_1pass__graphics__state.html#aca9fcd2db54ac34c1c3f6b85a6b0c1bd',1,'tz::gpu::pass_graphics_state']]] +]; diff --git a/search/all_3.js b/search/all_3.js new file mode 100644 index 0000000000..e975bcf680 --- /dev/null +++ b/search/all_3.js @@ -0,0 +1,24 @@ +var searchData= +[ + ['data_0',['data',['../structtz_1_1gpu_1_1buffer__info.html#aef020d4faf7d57e4429ffca5fba8329e',1,'tz::gpu::buffer_info::data'],['../structtz_1_1gpu_1_1image__info.html#a18803ffd08786f35b56ac0d274e9410f',1,'tz::gpu::image_info::data']]], + ['data_5fsize_5fbytes_1',['data_size_bytes',['../structtz_1_1io_1_1image__header.html#a9988d8b45e89a2826e3b9a1bb590ecb0',1,'tz::io::image_header']]], + ['dependencies_2',['Dependencies',['../index.html#autotoc_md6',1,'']]], + ['dependencies_3',['dependencies',['../structtz_1_1gpu_1_1graph__info.html#a24663903ec8b49d2bd59f731bd26b8e1',1,'tz::gpu::graph_info']]], + ['depth_4',['depth',['../group__tz__gpu__resource.html#gga133bb9aff1ab3d26c7845b4f96d6ac61a12a055bf01a31369fe81ac35d85c7bc1',1,'tz::gpu']]], + ['depth_5ftarget_5',['depth_target',['../structtz_1_1gpu_1_1pass__graphics__state.html#a020a2cf072c156f9e243105c206160bd',1,'tz::gpu::pass_graphics_state::depth_target'],['../group__tz__gpu__resource.html#ggac69ba8da4ab137995079556a00afa86eafa53f0baca12f6734184401f3be89ac0',1,'tz::gpu::depth_target']]], + ['destroy_5fpass_6',['destroy_pass',['../group__tz__gpu__pass.html#gafa24b4faf0daadfb7cfb1a8880f599d5',1,'tz::gpu']]], + ['destroy_5fquad_5frenderer_7',['destroy_quad_renderer',['../group__tz__ren__quad.html#gac645375853feb89dc959293ec833dedc',1,'tz::ren']]], + ['destroy_5fresource_8',['destroy_resource',['../group__tz__gpu__resource.html#ga3d83aecf92ee31bcb53b094378074457',1,'tz::gpu']]], + ['destroy_5fshader_9',['destroy_shader',['../group__tz__gpu__shader.html#gad197fec81d1aceaaba87a95e93c64882',1,'tz::gpu']]], + ['do_20not_20recommend_20any_20of_20these_20these_20are_20listed_20just_20for_20completeness_10',['Note: I do not recommend any of these. These are listed just for completeness.',['../index.html#autotoc_md4',1,'']]], + ['dont_5fclear_11',['dont_clear',['../group__tz__gpu__pass.html#gga76beda1933fb65f5b8d8806653ab5ed2a07b90c315d4a99ef349a64b9fb54e747',1,'tz::gpu']]], + ['dot_12',['dot',['../structtz_1_1vector.html#ad9fa0d344eacf6b7e4f374c212eb0593',1,'tz::vector']]], + ['draw_13',['draw',['../group__tz__gpu__resource.html#gga085f6c2c900ac7e57be6bfbf1ccc9457a609c4204f28f9a864268e6d6bc03604c',1,'tz::gpu']]], + ['draw_5fbuffer_14',['draw_buffer',['../structtz_1_1gpu_1_1pass__graphics__state.html#ad87ecdf97b9a6e576cdd0c75c0bfee54',1,'tz::gpu::pass_graphics_state']]], + ['draw_5fbuffer_5findexed_5fwrite_15',['draw_buffer_indexed_write',['../group__tz__gpu__resource.html#gaf4a8c1aea2e234ee57c9101c4d46a8d6',1,'tz::gpu']]], + ['draw_5fbuffer_5fwrite_16',['draw_buffer_write',['../group__tz__gpu__resource.html#ga344192882a76a6ac579500c5c68f93e5',1,'tz::gpu']]], + ['draw_5findexed_5ft_17',['draw_indexed_t',['../structtz_1_1gpu_1_1draw__indexed__t.html',1,'tz::gpu']]], + ['draw_5ft_18',['draw_t',['../structtz_1_1gpu_1_1draw__t.html',1,'tz::gpu']]], + ['driver_5fhazard_19',['driver_hazard',['../group__tz__core.html#gga98b356a4a54e1f49c9b3adb6002fc1afa6592bef62853d098c86f7aa3bff9aecf',1,'tz']]], + ['dynamic_5faccess_20',['dynamic_access',['../group__tz__gpu__resource.html#gga085f6c2c900ac7e57be6bfbf1ccc9457ab48d7b2a83d1800ee2dc0d6154b21742',1,'tz::gpu']]] +]; diff --git a/search/all_4.js b/search/all_4.js new file mode 100644 index 0000000000..ce43099157 --- /dev/null +++ b/search/all_4.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['engine_0',['Topaz Engine',['../index.html',1,'']]], + ['engine_5fbug_1',['engine_bug',['../group__tz__core.html#gga98b356a4a54e1f49c9b3adb6002fc1afa2729042b27f7a6cb6750d2edd1e393f2',1,'tz']]], + ['error_5fcode_2',['error_code',['../group__tz__core.html#ga98b356a4a54e1f49c9b3adb6002fc1af',1,'tz']]], + ['execute_3',['execute',['../group__tz__gpu__graph.html#gade6998de18f8efd217e59542bd6e8910',1,'tz::gpu']]] +]; diff --git a/search/all_5.js b/search/all_5.js new file mode 100644 index 0000000000..69fdf984b2 --- /dev/null +++ b/search/all_5.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['features_0',['Notable Features',['../index.html#autotoc_md2',1,'']]], + ['features_1',['features',['../structtz_1_1gpu_1_1hardware.html#ac54007063b5c2c588c33d21d977fb3dc',1,'tz::gpu::hardware']]], + ['filled_2',['filled',['../structtz_1_1vector.html#a71f53f79d0935b7c716210e6f1f540d8',1,'tz::vector']]], + ['find_5fbest_5fhardware_3',['find_best_hardware',['../group__tz__gpu__hardware.html#gacc14c0fcc44014aaac7ee454bc6678d1',1,'tz::gpu']]], + ['first_5findex_4',['first_index',['../structtz_1_1gpu_1_1draw__indexed__t.html#a3249851f039573c1deaeae583fde485a',1,'tz::gpu::draw_indexed_t']]], + ['first_5finstance_5',['first_instance',['../structtz_1_1gpu_1_1draw__t.html#a277c735fc820130ad0a5cfe298bcff94',1,'tz::gpu::draw_t::first_instance'],['../structtz_1_1gpu_1_1draw__indexed__t.html#a9c8f242868f43211d676c08268f03606',1,'tz::gpu::draw_indexed_t::first_instance']]], + ['first_5fvertex_6',['first_vertex',['../structtz_1_1gpu_1_1draw__t.html#a8949fbf10eaec846036c38966ed96393',1,'tz::gpu::draw_t']]], + ['flags_7',['flags',['../structtz_1_1gpu_1_1graph__info.html#ad8115d8cc894a6d6c76d19499d7769e6',1,'tz::gpu::graph_info::flags'],['../structtz_1_1gpu_1_1pass__graphics__state.html#a829732e54d81f4f47555e0fe68d52cc8',1,'tz::gpu::pass_graphics_state::flags'],['../structtz_1_1gpu_1_1pass__info.html#a354f226b5b4a1174d564008116a0ed25',1,'tz::gpu::pass_info::flags'],['../structtz_1_1gpu_1_1buffer__info.html#ae02ab842fb611d3d3e438b9d490e0cd4',1,'tz::gpu::buffer_info::flags'],['../structtz_1_1gpu_1_1image__info.html#a2d27dae98a7e95e1864030d83991865e',1,'tz::gpu::image_info::flags'],['../structtz_1_1os_1_1window__info.html#ad49e0ca23539de74279317e3f502663b',1,'tz::os::window_info::flags'],['../structtz_1_1ren_1_1quad__renderer__info.html#a9e0fbc07fe53c92d10d7212216b29670',1,'tz::ren::quad_renderer_info::flags']]], + ['floats_8',['floats',['../group__tz__gpu__resource.html#gga133bb9aff1ab3d26c7845b4f96d6ac61abdbbd9aee4fcb6e41bbb94208e0e92ab',1,'tz::gpu']]], + ['for_20completeness_9',['Note: I do not recommend any of these. These are listed just for completeness.',['../index.html#autotoc_md4',1,'']]], + ['front_10',['front',['../group__tz__gpu__pass.html#gga6589e2e52a01e7636c35d868270d7b37ae6ec529ba185279aa0adcf93e645c7cd',1,'tz::gpu']]] +]; diff --git a/search/all_6.js b/search/all_6.js new file mode 100644 index 0000000000..74460f3c7e --- /dev/null +++ b/search/all_6.js @@ -0,0 +1,21 @@ +var searchData= +[ + ['get_5fmouse_5fposition_0',['get_mouse_position',['../group__tz__os__input.html#ga9d016b62eb7e9bd0e4d5a35cd4f1805c',1,'tz::os']]], + ['get_5fquad_5fcolour_1',['get_quad_colour',['../group__tz__ren__quad.html#gad160efd9345c3be1ba83fc331ec8967e',1,'tz::ren']]], + ['get_5fquad_5fposition_2',['get_quad_position',['../group__tz__ren__quad.html#gafd3ad2f589586336b3d761860a08bf59',1,'tz::ren']]], + ['get_5fquad_5fscale_3',['get_quad_scale',['../group__tz__ren__quad.html#ga4983cabbb6141b8ca3a13d2c5c66dd68',1,'tz::ren']]], + ['get_5fquad_5ftexture_4',['get_quad_texture',['../group__tz__ren__quad.html#gaddf339113bcfea9d23258a7adca2acd9',1,'tz::ren']]], + ['get_5fused_5fhardware_5',['get_used_hardware',['../group__tz__gpu__hardware.html#ga43bc20f0d8e004c82906519cfc8a957b',1,'tz::gpu']]], + ['get_5fwindow_5fhandle_6',['get_window_handle',['../group__tz__os__window.html#ga077ecc9d7fd551ce75bf1c80626de8e8',1,'tz::os']]], + ['gpu_7',['gpu',['../group__tz__gpu__hardware.html#ggaa1e78cd65e2d10e324243cc2d6030f5ca0aa0be2a866411d9ff03515227454947',1,'tz::gpu']]], + ['gpu_20library_8',['GPU Library',['../group__tz__gpu.html',1,'']]], + ['graph_5fbuilder_9',['graph_builder',['../structtz_1_1gpu_1_1graph__builder.html',1,'tz::gpu']]], + ['graph_5fflag_10',['graph_flag',['../group__tz__gpu__graph.html#ga100077702389aed66a4e3005e9ab1b1f',1,'tz::gpu']]], + ['graph_5finfo_11',['graph_info',['../structtz_1_1gpu_1_1graph__info.html',1,'tz::gpu']]], + ['graph_5fpresent_5fafter_12',['graph_present_after',['../group__tz__ren__quad.html#ggada2d96dacb31346ea6a8d19d933a9bc9a9d79226c801aca218b446d0fda2bc827',1,'tz::ren']]], + ['graphics_13',['graphics',['../structtz_1_1gpu_1_1pass__info.html#a3a170c5d574f0d5c0068cabfc0638442',1,'tz::gpu::pass_info']]], + ['graphics_5fcompute_14',['graphics_compute',['../group__tz__gpu__hardware.html#ggab2036c965f55d5a07205fa4fd2120e9cac84da432dd3c53e172ed93ab600333ec',1,'tz::gpu']]], + ['graphics_5fflag_15',['graphics_flag',['../group__tz__gpu__pass.html#ga76beda1933fb65f5b8d8806653ab5ed2',1,'tz::gpu']]], + ['graphics_5fonly_16',['graphics_only',['../group__tz__gpu__hardware.html#ggab2036c965f55d5a07205fa4fd2120e9ca012854df7733dee95e1733ce9341c71c',1,'tz::gpu']]], + ['graphs_17',['Graphs',['../group__tz__gpu__graph.html',1,'']]] +]; diff --git a/search/all_7.js b/search/all_7.js new file mode 100644 index 0000000000..5780c35e61 --- /dev/null +++ b/search/all_7.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['handle_0',['handle',['../classtz_1_1handle.html',1,'tz']]], + ['handle_3c_20buffer_5finfo_20_3e_1',['handle< buffer_info >',['../classtz_1_1handle.html',1,'tz']]], + ['handle_3c_20hardware_5ftype_20_3e_2',['handle< hardware_type >',['../classtz_1_1handle.html',1,'tz']]], + ['handle_3c_20shader_5ftag_5ft_20_3e_3',['handle< shader_tag_t >',['../classtz_1_1handle.html',1,'tz']]], + ['hardware_4',['Hardware',['../group__tz__gpu__hardware.html',1,'']]], + ['hardware_5',['hardware',['../structtz_1_1gpu_1_1hardware.html',1,'tz::gpu']]], + ['hardware_5fcapabilities_6',['hardware_capabilities',['../group__tz__gpu__hardware.html#gab2036c965f55d5a07205fa4fd2120e9c',1,'tz::gpu']]], + ['hardware_5ffeature_5fcoverage_7',['hardware_feature_coverage',['../group__tz__gpu__hardware.html#gaa093da436bceb04380b7a9943206cb7d',1,'tz::gpu']]], + ['hardware_5ftype_8',['hardware_type',['../group__tz__gpu__hardware.html#gaa1e78cd65e2d10e324243cc2d6030f5c',1,'tz::gpu']]], + ['height_9',['height',['../structtz_1_1gpu_1_1image__info.html#a18a6cf0244e53413126c4cf663f8203e',1,'tz::gpu::image_info::height'],['../structtz_1_1io_1_1image__header.html#ac231fd022f457ccc1a63c3efe06d82c7',1,'tz::io::image_header::height'],['../structtz_1_1os_1_1window__info.html#a7fa2a457e1db5dc1b9b12cb9e42e407a',1,'tz::os::window_info::height']]], + ['history_10',['Version History',['../index.html#autotoc_md3',1,'']]] +]; diff --git a/search/all_8.js b/search/all_8.js new file mode 100644 index 0000000000..2b218af06f --- /dev/null +++ b/search/all_8.js @@ -0,0 +1,31 @@ +var searchData= +[ + ['i_20do_20not_20recommend_20any_20of_20these_20these_20are_20listed_20just_20for_20completeness_0',['Note: I do not recommend any of these. These are listed just for completeness.',['../index.html#autotoc_md4',1,'']]], + ['ideal_1',['ideal',['../group__tz__gpu__hardware.html#ggaa093da436bceb04380b7a9943206cb7dab3bfb5ad6ba04daf0f8f1930133d89dd',1,'tz::gpu']]], + ['image_5fflag_2',['image_flag',['../group__tz__gpu__resource.html#gac69ba8da4ab137995079556a00afa86e',1,'tz::gpu']]], + ['image_5fget_5fheight_3',['image_get_height',['../group__tz__gpu__resource.html#gad499a5bdff5eb1888370845c06ac4463',1,'tz::gpu']]], + ['image_5fget_5fwidth_4',['image_get_width',['../group__tz__gpu__resource.html#gad1868282e0b2008822954e339dbcebf3',1,'tz::gpu']]], + ['image_5fheader_5',['image_header',['../structtz_1_1io_1_1image__header.html',1,'tz::io']]], + ['image_5finfo_6',['image_info',['../structtz_1_1gpu_1_1image__info.html',1,'tz::gpu::image_info'],['../group__tz__io.html#ga19d43db680f2fd3281c06c5270a44f74',1,'tz::io::image_info()']]], + ['image_5fresize_7',['image_resize',['../group__tz__gpu__resource.html#gae0b482c3b48fff0a71869869c4aae748',1,'tz::gpu']]], + ['image_5ftype_8',['image_type',['../group__tz__gpu__resource.html#ga133bb9aff1ab3d26c7845b4f96d6ac61',1,'tz::gpu']]], + ['importedshaderheader_9',['ImportedShaderHeader',['../group__tz__gpu__shader.html#ga6a0bf239902c687e57a586c673587b18',1,'shader.hpp']]], + ['importedshadersource_10',['ImportedShaderSource',['../group__tz__gpu__shader.html#ga565cc08094aefd52116978934a505025',1,'shader.hpp']]], + ['index_11',['index',['../group__tz__gpu__resource.html#gga085f6c2c900ac7e57be6bfbf1ccc9457ab77b2a028d8f8b03988b2f0c91cd0382',1,'tz::gpu']]], + ['index_5fbuffer_12',['index_buffer',['../structtz_1_1gpu_1_1pass__graphics__state.html#a283757443fb3ab19a9a2c0ad2ea9add9',1,'tz::gpu::pass_graphics_state']]], + ['index_5fbuffer_5fwrite_13',['index_buffer_write',['../group__tz__gpu__resource.html#ga4278c06de23695fab88715b47495624b',1,'tz::gpu']]], + ['index_5fcount_14',['index_count',['../structtz_1_1gpu_1_1draw__indexed__t.html#ab184cd48e8b3fd622cf96c206ea7b756',1,'tz::gpu::draw_indexed_t']]], + ['index_5ft_15',['index_t',['../group__tz__gpu.html#ga6067260e1b4dd001439b5bb75ac31e0b',1,'tz::gpu']]], + ['initialise_16',['initialise',['../group__tz.html#gabb648fc6eec063059f5e7ccf1f1d8fa7',1,'tz']]], + ['input_20system_17',['Input System',['../group__tz__os__input.html',1,'']]], + ['install_5fchar_5ftyped_5fcallback_18',['install_char_typed_callback',['../group__tz__os__input.html#gaf0f0287fe0f5644f74376a35bae73dda',1,'tz::os']]], + ['instance_5fcount_19',['instance_count',['../structtz_1_1gpu_1_1draw__t.html#af0efe4306e2088c4a831444f2d122da5',1,'tz::gpu::draw_t::instance_count'],['../structtz_1_1gpu_1_1draw__indexed__t.html#a7ab119f9692e82a0a08c2c8c24a1a119',1,'tz::gpu::draw_indexed_t::instance_count']]], + ['instructions_20',['Build Instructions',['../index.html#autotoc_md5',1,'']]], + ['insufficient_21',['insufficient',['../group__tz__gpu__hardware.html#ggaa093da436bceb04380b7a9943206cb7da0db1288fd85f292651522538c9c2cade',1,'tz::gpu']]], + ['integrated_5fgpu_22',['integrated_gpu',['../group__tz__gpu__hardware.html#ggaa1e78cd65e2d10e324243cc2d6030f5ca5f39c2e1d71801c8581f62cb087abedd',1,'tz::gpu']]], + ['invalid_5fvalue_23',['invalid_value',['../group__tz__core.html#gga98b356a4a54e1f49c9b3adb6002fc1afa24fe18195f0e29f8d3ef5ad3110cfc24',1,'tz']]], + ['invisible_24',['invisible',['../group__tz__os__window.html#gga0ce22ac9fb10ea777cfc95e9c52a9fa5abde7a934ad4d61f7bcb8258221646f97',1,'tz::os']]], + ['io_20library_25',['IO Library',['../group__tz__io.html',1,'']]], + ['is_5fkey_5fpressed_26',['is_key_pressed',['../group__tz__os__input.html#gabf0bc8c19e05c141d5af7395cc270c00',1,'tz::os']]], + ['iterate_5fhardware_27',['iterate_hardware',['../group__tz__gpu__hardware.html#ga4ca647b6b2a4c26ded590bd85f6f9594',1,'tz::gpu']]] +]; diff --git a/search/all_9.js b/search/all_9.js new file mode 100644 index 0000000000..21c5284652 --- /dev/null +++ b/search/all_9.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['job_20system_0',['Job System',['../group__tz__core__job.html',1,'']]], + ['job_5fcomplete_1',['job_complete',['../group__tz__core__job.html#gaf9fea8a971d02b61a4923ea8ab25e9c1',1,'tz']]], + ['job_5fcount_2',['job_count',['../group__tz__core__job.html#ga250854ffc23bbfb3a2b9e87ba01c35f9',1,'tz']]], + ['job_5fexecute_3',['job_execute',['../group__tz__core__job.html#ga588eb1810b15022bf081c94ecbd17904',1,'tz']]], + ['job_5fexecute_5fon_4',['job_execute_on',['../group__tz__core__job.html#ga59ec7904527b12314002a4ec19a13b3c',1,'tz']]], + ['job_5ffunction_5',['job_function',['../group__tz__core__job.html#ga30aa462efce332cc6f10fd2dcaf390db',1,'tz']]], + ['job_5fwait_6',['job_wait',['../group__tz__core__job.html#gad3515d01b907cb4282beefed4e9902b2',1,'tz']]], + ['job_5fworker_5fcount_7',['job_worker_count',['../group__tz__core__job.html#gac375de52029457c7e8e704b567995b8b',1,'tz']]], + ['just_20for_20completeness_8',['Note: I do not recommend any of these. These are listed just for completeness.',['../index.html#autotoc_md4',1,'']]] +]; diff --git a/search/all_a.js b/search/all_a.js new file mode 100644 index 0000000000..b17578fdcd --- /dev/null +++ b/search/all_a.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['kernel_0',['kernel',['../structtz_1_1gpu_1_1pass__compute__state.html#a57943e7334b19c77ed5f6ee8d4ec9c63',1,'tz::gpu::pass_compute_state']]], + ['key_1',['key',['../group__tz__os__input.html#ga4ced5678cf981ffd2661937f40591b28',1,'tz::os']]] +]; diff --git a/search/all_b.js b/search/all_b.js new file mode 100644 index 0000000000..63ec23346f --- /dev/null +++ b/search/all_b.js @@ -0,0 +1,35 @@ +var searchData= +[ + ['length_0',['length',['../structtz_1_1vector.html#a023f2bbcaf4a4a0bd1a1de9328e750eb',1,'tz::vector']]], + ['libraries_1',['Libraries',['../group__tz__core.html',1,'Core Libraries'],['../group__tz__os.html',1,'OS Libraries']]], + ['library_2',['Library',['../group__tz__gpu.html',1,'GPU Library'],['../group__tz__io.html',1,'IO Library'],['../group__tz__ren.html',1,'Rendering Library']]], + ['listed_20just_20for_20completeness_3',['Note: I do not recommend any of these. These are listed just for completeness.',['../index.html#autotoc_md4',1,'']]], + ['lua_20scripting_4',['Lua Scripting',['../group__tz__core__lua.html',1,'']]], + ['lua_5fdebug_5fcallstack_5',['lua_debug_callstack',['../group__tz__core__lua.html#gaeda86ae367f8b19ae4be83d41badb259',1,'tz']]], + ['lua_5fdebug_5fstack_6',['lua_debug_stack',['../group__tz__core__lua.html#ga44fee8d86a94d615667f622a67bbfd92',1,'tz']]], + ['lua_5fdefine_5ffunction_7',['lua_define_function',['../group__tz__core__lua.html#ga8b6b4f58bfe41f8167c9f8fa20b5a1bf',1,'tz']]], + ['lua_5fexecute_8',['lua_execute',['../group__tz__core__lua.html#gad81e6021d56728ae59cba1ad79c5c6f6',1,'tz']]], + ['lua_5fexecute_5ffile_9',['lua_execute_file',['../group__tz__core__lua.html#ga6c0aee737d908980c5e48ce46e36061d',1,'tz']]], + ['lua_5ffn_10',['lua_fn',['../group__tz__core__lua.html#ga1a434bd52c6f495483eff037dabc7496',1,'tz']]], + ['lua_5fget_5fbool_11',['lua_get_bool',['../group__tz__core__lua.html#ga9dd277f5adf490fa5cad849602ac36d6',1,'tz']]], + ['lua_5fget_5fint_12',['lua_get_int',['../group__tz__core__lua.html#gadcf0e8adfd1c4048d50afa2dae8c0626',1,'tz']]], + ['lua_5fget_5fnumber_13',['lua_get_number',['../group__tz__core__lua.html#gaaa36881506397bb704e1e714067f3ed2',1,'tz']]], + ['lua_5fget_5fstring_14',['lua_get_string',['../group__tz__core__lua.html#ga5e55a4178239919bfb9f8d503c15bf1c',1,'tz']]], + ['lua_5fparse_5fargs_15',['lua_parse_args',['../group__tz__core__lua.html#gab698d1657c518e0ce5949a0ebf15ee03',1,'tz']]], + ['lua_5fpush_5fbool_16',['lua_push_bool',['../group__tz__core__lua.html#ga8479efdd62c2966fc1b17b1cb8ca27cc',1,'tz']]], + ['lua_5fpush_5fint_17',['lua_push_int',['../group__tz__core__lua.html#gaff3974156b12c2545077c62fe0ae5ac5',1,'tz']]], + ['lua_5fpush_5fnil_18',['lua_push_nil',['../group__tz__core__lua.html#ga39c856674650db02cb11fce4cb4d3a50',1,'tz']]], + ['lua_5fpush_5fnumber_19',['lua_push_number',['../group__tz__core__lua.html#ga34a1412c408e8c1213bc2e2bed6ffbdd',1,'tz']]], + ['lua_5fpush_5fstring_20',['lua_push_string',['../group__tz__core__lua.html#ga6f0e981d3aa3f49027230db79d3d27bf',1,'tz']]], + ['lua_5fset_5fbool_21',['lua_set_bool',['../group__tz__core__lua.html#gae190dfb486310b8d685e6afefa46b7fe',1,'tz']]], + ['lua_5fset_5femptytable_22',['lua_set_emptytable',['../group__tz__core__lua.html#ga7c8a55fe1e49670b32fdb24d7a770f16',1,'tz']]], + ['lua_5fset_5fint_23',['lua_set_int',['../group__tz__core__lua.html#gae81e455354af393223b6b7be1823bf21',1,'tz']]], + ['lua_5fset_5fnil_24',['lua_set_nil',['../group__tz__core__lua.html#gafb9864da832c886af307326d65a19dcc',1,'tz']]], + ['lua_5fset_5fnumber_25',['lua_set_number',['../group__tz__core__lua.html#ga931e7ab7b099f88a32ea7639661f32f1',1,'tz']]], + ['lua_5fset_5fstring_26',['lua_set_string',['../group__tz__core__lua.html#gaa6a6565752d4b502eb7b2052b4f80d2f',1,'tz']]], + ['lua_5fstack_5fget_5fbool_27',['lua_stack_get_bool',['../group__tz__core__lua.html#ga57b6260b6644d3603be7e99d0ce0e40d',1,'tz']]], + ['lua_5fstack_5fget_5fint_28',['lua_stack_get_int',['../group__tz__core__lua.html#ga5f8fac3fe2babf77ebdea0d3d39efdac',1,'tz']]], + ['lua_5fstack_5fget_5fnumber_29',['lua_stack_get_number',['../group__tz__core__lua.html#ga979fda85364da92b05a51c33e068168b',1,'tz']]], + ['lua_5fstack_5fget_5fstring_30',['lua_stack_get_string',['../group__tz__core__lua.html#ga16076cbaed10324eb0de1a041784a4c1',1,'tz']]], + ['lua_5fstack_5fsize_31',['lua_stack_size',['../group__tz__core__lua.html#gaad4130c9556207e3cc9c8eef8878fad8',1,'tz']]] +]; diff --git a/search/all_c.js b/search/all_c.js new file mode 100644 index 0000000000..18fa75c63a --- /dev/null +++ b/search/all_c.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['machine_5funsuitable_0',['machine_unsuitable',['../group__tz__core.html#gga98b356a4a54e1f49c9b3adb6002fc1afa04b68ae506f7169b8f4b697ca378cbda',1,'tz']]], + ['major_1',['major',['../structtz_1_1appinfo.html#a74ae4b8f50ec32a225b9f90aba81c623',1,'tz::appinfo']]], + ['mathematics_2',['Mathematics',['../group__tz__core__math.html',1,'']]], + ['maximised_3',['maximised',['../group__tz__os__window.html#gga0ce22ac9fb10ea777cfc95e9c52a9fa5a276f2ead6fe25f69fea19153863874d3',1,'tz::os']]], + ['minor_4',['minor',['../structtz_1_1appinfo.html#ade6a725932619241de23c54595713260',1,'tz::appinfo']]] +]; diff --git a/search/all_d.js b/search/all_d.js new file mode 100644 index 0000000000..bd532a38d5 --- /dev/null +++ b/search/all_d.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['name_0',['name',['../structtz_1_1gpu_1_1hardware.html#a35713d0b6cec241e408103f025ce6b99',1,'tz::gpu::hardware::name'],['../structtz_1_1gpu_1_1pass__info.html#a44f70937ae155621406e7f8f213b7ea4',1,'tz::gpu::pass_info::name'],['../structtz_1_1gpu_1_1buffer__info.html#a09c66c30234ee32d0d08beaec5a87a71',1,'tz::gpu::buffer_info::name'],['../structtz_1_1gpu_1_1image__info.html#ac8ae9b14d53cf9638be6b3d93a4de0a9',1,'tz::gpu::image_info::name'],['../structtz_1_1appinfo.html#a99837845d68e2492ff3fb089d981cdd7',1,'tz::appinfo::name']]], + ['neither_1',['neither',['../group__tz__gpu__hardware.html#ggab2036c965f55d5a07205fa4fd2120e9caedab649646a4c3ebd9770bdfc29534b5',1,'tz::gpu']]], + ['no_5fdepth_5ftest_2',['no_depth_test',['../group__tz__gpu__pass.html#gga76beda1933fb65f5b8d8806653ab5ed2ac7fdaefba6a67bcae3e74143977b07f4',1,'tz::gpu']]], + ['no_5fdepth_5fwrite_3',['no_depth_write',['../group__tz__gpu__pass.html#gga76beda1933fb65f5b8d8806653ab5ed2a30f9639137965f02962aa47339c870c8',1,'tz::gpu']]], + ['none_4',['none',['../group__tz__gpu__pass.html#gga6589e2e52a01e7636c35d868270d7b37a334c4a4c42fdb79d7ebc3e73b517e6f8',1,'tz::gpu']]], + ['not_20recommend_20any_20of_20these_20these_20are_20listed_20just_20for_20completeness_5',['Note: I do not recommend any of these. These are listed just for completeness.',['../index.html#autotoc_md4',1,'']]], + ['notable_20features_6',['Notable Features',['../index.html#autotoc_md2',1,'']]], + ['note_3a_20i_20do_20not_20recommend_20any_20of_20these_20these_20are_20listed_20just_20for_20completeness_7',['Note: I do not recommend any of these. These are listed just for completeness.',['../index.html#autotoc_md4',1,'']]], + ['nullhand_8',['nullhand',['../group__tz__core.html#gac7ea0910b66986864e3463748d8bd94a',1,'tz']]] +]; diff --git a/search/all_e.js b/search/all_e.js new file mode 100644 index 0000000000..d6e9ee435f --- /dev/null +++ b/search/all_e.js @@ -0,0 +1,19 @@ +var searchData= +[ + ['of_20these_20these_20are_20listed_20just_20for_20completeness_0',['Note: I do not recommend any of these. These are listed just for completeness.',['../index.html#autotoc_md4',1,'']]], + ['oom_1',['oom',['../group__tz__core.html#gga98b356a4a54e1f49c9b3adb6002fc1afab64777a1172ff4005ed6cde9b70d7ca3',1,'tz']]], + ['open_5fwindow_2',['open_window',['../group__tz__os__window.html#ga0a5a8fe7a1079fe7911bad7465030bce',1,'tz::os']]], + ['operator_21_3d_3',['operator!=',['../classtz_1_1handle.html#a71752e38ec8a8632d75b46476c816cff',1,'tz::handle']]], + ['operator_2a_4',['operator*',['../structtz_1_1vector.html#a99cf97b83cd4fe4b9e50060af3ed1066',1,'tz::vector']]], + ['operator_2a_3d_5',['operator*=',['../structtz_1_1vector.html#aad31b1c451bcd597c1b9b06b11cb3a08',1,'tz::vector']]], + ['operator_2b_6',['operator+',['../structtz_1_1vector.html#ad8cb5b8725ddf0dc9f769e3bdfae2689',1,'tz::vector']]], + ['operator_2b_3d_7',['operator+=',['../structtz_1_1vector.html#a415422b24f3855762aa448d74af3ced3',1,'tz::vector']]], + ['operator_2d_8',['operator-',['../structtz_1_1vector.html#a90750968cd316f3d6d46e630fa1135ad',1,'tz::vector']]], + ['operator_2d_3d_9',['operator-=',['../structtz_1_1vector.html#a3aa8784281bec9b3ae48f06ca44ab7ec',1,'tz::vector']]], + ['operator_2f_10',['operator/',['../structtz_1_1vector.html#ae3fc45fe5a4b66e8420246c5a05f2256',1,'tz::vector']]], + ['operator_2f_3d_11',['operator/=',['../structtz_1_1vector.html#acdff32848159b04e4d0ab9de02d989fa',1,'tz::vector']]], + ['operator_3d_12',['operator=',['../classtz_1_1handle.html#a31c4c8bcef24c167ce10939f50b7d5fa',1,'tz::handle']]], + ['operator_3d_3d_13',['operator==',['../classtz_1_1handle.html#a922e0f8da5720e1333027a37bab49d82',1,'tz::handle::operator==()'],['../structtz_1_1vector.html#a0ea3011ca1397f026e8fccc6e18e705f',1,'tz::vector::operator==(const vector< T, N > &rhs) const =default']]], + ['operator_5b_5d_14',['operator[]',['../structtz_1_1vector.html#ac603e80ec0e8f7a593595fc3aed72838',1,'tz::vector::operator[](std::size_t idx) const'],['../structtz_1_1vector.html#aa60bc826efb53594049260cec0abf4d5',1,'tz::vector::operator[](std::size_t idx)']]], + ['os_20libraries_15',['OS Libraries',['../group__tz__os.html',1,'']]] +]; diff --git a/search/all_f.js b/search/all_f.js new file mode 100644 index 0000000000..22ff868b81 --- /dev/null +++ b/search/all_f.js @@ -0,0 +1,20 @@ +var searchData= +[ + ['parse_5fimage_0',['parse_image',['../group__tz__io.html#ga1c6abe61d22bf2257a139b41aa1063c9',1,'tz::io']]], + ['partial_5fsuccess_1',['partial_success',['../group__tz__core.html#gga98b356a4a54e1f49c9b3adb6002fc1afadbc8e69c50db1193ec71151b6fb6da9a',1,'tz']]], + ['pass_5fadd_5fimage_5fresource_2',['pass_add_image_resource',['../group__tz__gpu__pass.html#gadc3cfdcac66fbb410af52fcf7b1ff953',1,'tz::gpu']]], + ['pass_5fcompute_5fstate_3',['pass_compute_state',['../structtz_1_1gpu_1_1pass__compute__state.html',1,'tz::gpu']]], + ['pass_5fgraphics_5fstate_4',['pass_graphics_state',['../structtz_1_1gpu_1_1pass__graphics__state.html',1,'tz::gpu']]], + ['pass_5fhandle_5',['pass_handle',['../group__tz__gpu__pass.html#gaeb0b7299626b0f12c51bc32981fd419d',1,'tz::gpu']]], + ['pass_5finfo_6',['pass_info',['../structtz_1_1gpu_1_1pass__info.html',1,'tz::gpu']]], + ['pass_5fset_5fkernel_7',['pass_set_kernel',['../group__tz__gpu__pass.html#ga1e2a5f9b4f20558788905688e6b402ff',1,'tz::gpu']]], + ['pass_5fset_5fscissor_8',['pass_set_scissor',['../group__tz__gpu__pass.html#gaab0696a4eb7ef536038868a5804a8125',1,'tz::gpu']]], + ['pass_5fset_5ftriangle_5fcount_9',['pass_set_triangle_count',['../group__tz__gpu__pass.html#gadf35b21694f4b309a6a89724ab9227db',1,'tz::gpu']]], + ['pass_5ftype_10',['pass_type',['../group__tz__gpu__pass.html#ga03a9b4db32a0fcf853e0b3f2c6cbfc3e',1,'tz::gpu']]], + ['passes_11',['Passes',['../group__tz__gpu__pass.html',1,'']]], + ['peek_12',['peek',['../classtz_1_1handle.html#a5879b25f824f3282e5922569fdb669f2',1,'tz::handle']]], + ['poor_13',['poor',['../group__tz__gpu__hardware.html#ggaa093da436bceb04380b7a9943206cb7da5cffaf9375c0ef1d49451b062abdac80',1,'tz::gpu']]], + ['position_14',['position',['../structtz_1_1ren_1_1quad__info.html#a1a1543be8a1fad8a2897996f0e8514ff',1,'tz::ren::quad_info']]], + ['precondition_5ffailure_15',['precondition_failure',['../group__tz__core.html#gga98b356a4a54e1f49c9b3adb6002fc1afa71090755058a73a39e036d014dd51432',1,'tz']]], + ['present_5fpass_16',['present_pass',['../group__tz__gpu__pass.html#ga0925cc29143a1c20819479b7a446cc55',1,'tz::gpu']]] +]; diff --git a/search/classes_0.js b/search/classes_0.js new file mode 100644 index 0000000000..89d2e3908b --- /dev/null +++ b/search/classes_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['appinfo_0',['appinfo',['../structtz_1_1appinfo.html',1,'tz']]] +]; diff --git a/search/classes_1.js b/search/classes_1.js new file mode 100644 index 0000000000..d40ec79b77 --- /dev/null +++ b/search/classes_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['buffer_5finfo_0',['buffer_info',['../structtz_1_1gpu_1_1buffer__info.html',1,'tz::gpu']]] +]; diff --git a/search/classes_2.js b/search/classes_2.js new file mode 100644 index 0000000000..733cb7b43e --- /dev/null +++ b/search/classes_2.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['draw_5findexed_5ft_0',['draw_indexed_t',['../structtz_1_1gpu_1_1draw__indexed__t.html',1,'tz::gpu']]], + ['draw_5ft_1',['draw_t',['../structtz_1_1gpu_1_1draw__t.html',1,'tz::gpu']]] +]; diff --git a/search/classes_3.js b/search/classes_3.js new file mode 100644 index 0000000000..43791553de --- /dev/null +++ b/search/classes_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['graph_5fbuilder_0',['graph_builder',['../structtz_1_1gpu_1_1graph__builder.html',1,'tz::gpu']]], + ['graph_5finfo_1',['graph_info',['../structtz_1_1gpu_1_1graph__info.html',1,'tz::gpu']]] +]; diff --git a/search/classes_4.js b/search/classes_4.js new file mode 100644 index 0000000000..94923c1c22 --- /dev/null +++ b/search/classes_4.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['handle_0',['handle',['../classtz_1_1handle.html',1,'tz']]], + ['handle_3c_20buffer_5finfo_20_3e_1',['handle< buffer_info >',['../classtz_1_1handle.html',1,'tz']]], + ['handle_3c_20hardware_5ftype_20_3e_2',['handle< hardware_type >',['../classtz_1_1handle.html',1,'tz']]], + ['handle_3c_20shader_5ftag_5ft_20_3e_3',['handle< shader_tag_t >',['../classtz_1_1handle.html',1,'tz']]], + ['hardware_4',['hardware',['../structtz_1_1gpu_1_1hardware.html',1,'tz::gpu']]] +]; diff --git a/search/classes_5.js b/search/classes_5.js new file mode 100644 index 0000000000..e39b7e4e06 --- /dev/null +++ b/search/classes_5.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['image_5fheader_0',['image_header',['../structtz_1_1io_1_1image__header.html',1,'tz::io']]], + ['image_5finfo_1',['image_info',['../structtz_1_1gpu_1_1image__info.html',1,'tz::gpu']]] +]; diff --git a/search/classes_6.js b/search/classes_6.js new file mode 100644 index 0000000000..c77b14262a --- /dev/null +++ b/search/classes_6.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['pass_5fcompute_5fstate_0',['pass_compute_state',['../structtz_1_1gpu_1_1pass__compute__state.html',1,'tz::gpu']]], + ['pass_5fgraphics_5fstate_1',['pass_graphics_state',['../structtz_1_1gpu_1_1pass__graphics__state.html',1,'tz::gpu']]], + ['pass_5finfo_2',['pass_info',['../structtz_1_1gpu_1_1pass__info.html',1,'tz::gpu']]] +]; diff --git a/search/classes_7.js b/search/classes_7.js new file mode 100644 index 0000000000..2a5502cb1e --- /dev/null +++ b/search/classes_7.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['quad_5finfo_0',['quad_info',['../structtz_1_1ren_1_1quad__info.html',1,'tz::ren']]], + ['quad_5frenderer_5finfo_1',['quad_renderer_info',['../structtz_1_1ren_1_1quad__renderer__info.html',1,'tz::ren']]] +]; diff --git a/search/classes_8.js b/search/classes_8.js new file mode 100644 index 0000000000..c39abd54e2 --- /dev/null +++ b/search/classes_8.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['vector_0',['vector',['../structtz_1_1vector.html',1,'tz']]], + ['vector_3c_20float_2c_202_20_3e_1',['vector< float, 2 >',['../structtz_1_1vector.html',1,'tz']]], + ['vector_3c_20float_2c_203_20_3e_2',['vector< float, 3 >',['../structtz_1_1vector.html',1,'tz']]], + ['vector_3c_20float_2c_204_20_3e_3',['vector< float, 4 >',['../structtz_1_1vector.html',1,'tz']]], + ['vector_3c_20unsigned_20int_2c_203_20_3e_4',['vector< unsigned int, 3 >',['../structtz_1_1vector.html',1,'tz']]], + ['vector_3c_20unsigned_20int_2c_204_20_3e_5',['vector< unsigned int, 4 >',['../structtz_1_1vector.html',1,'tz']]] +]; diff --git a/search/classes_9.js b/search/classes_9.js new file mode 100644 index 0000000000..de4e40e91d --- /dev/null +++ b/search/classes_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['window_5finfo_0',['window_info',['../structtz_1_1os_1_1window__info.html',1,'tz::os']]] +]; diff --git a/search/close.svg b/search/close.svg new file mode 100644 index 0000000000..337d6cc132 --- /dev/null +++ b/search/close.svg @@ -0,0 +1,18 @@ + + + + + + diff --git a/search/enums_0.js b/search/enums_0.js new file mode 100644 index 0000000000..75caa515e4 --- /dev/null +++ b/search/enums_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['buffer_5fflag_0',['buffer_flag',['../group__tz__gpu__resource.html#ga085f6c2c900ac7e57be6bfbf1ccc9457',1,'tz::gpu']]] +]; diff --git a/search/enums_1.js b/search/enums_1.js new file mode 100644 index 0000000000..4d3b49dff7 --- /dev/null +++ b/search/enums_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['cull_0',['cull',['../group__tz__gpu__pass.html#ga6589e2e52a01e7636c35d868270d7b37',1,'tz::gpu']]] +]; diff --git a/search/enums_2.js b/search/enums_2.js new file mode 100644 index 0000000000..4b9d335a1a --- /dev/null +++ b/search/enums_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['error_5fcode_0',['error_code',['../group__tz__core.html#ga98b356a4a54e1f49c9b3adb6002fc1af',1,'tz']]] +]; diff --git a/search/enums_3.js b/search/enums_3.js new file mode 100644 index 0000000000..f6a4d7775e --- /dev/null +++ b/search/enums_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['graph_5fflag_0',['graph_flag',['../group__tz__gpu__graph.html#ga100077702389aed66a4e3005e9ab1b1f',1,'tz::gpu']]], + ['graphics_5fflag_1',['graphics_flag',['../group__tz__gpu__pass.html#ga76beda1933fb65f5b8d8806653ab5ed2',1,'tz::gpu']]] +]; diff --git a/search/enums_4.js b/search/enums_4.js new file mode 100644 index 0000000000..a9e9997270 --- /dev/null +++ b/search/enums_4.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['hardware_5fcapabilities_0',['hardware_capabilities',['../group__tz__gpu__hardware.html#gab2036c965f55d5a07205fa4fd2120e9c',1,'tz::gpu']]], + ['hardware_5ffeature_5fcoverage_1',['hardware_feature_coverage',['../group__tz__gpu__hardware.html#gaa093da436bceb04380b7a9943206cb7d',1,'tz::gpu']]], + ['hardware_5ftype_2',['hardware_type',['../group__tz__gpu__hardware.html#gaa1e78cd65e2d10e324243cc2d6030f5c',1,'tz::gpu']]] +]; diff --git a/search/enums_5.js b/search/enums_5.js new file mode 100644 index 0000000000..55387bdf33 --- /dev/null +++ b/search/enums_5.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['image_5fflag_0',['image_flag',['../group__tz__gpu__resource.html#gac69ba8da4ab137995079556a00afa86e',1,'tz::gpu']]], + ['image_5ftype_1',['image_type',['../group__tz__gpu__resource.html#ga133bb9aff1ab3d26c7845b4f96d6ac61',1,'tz::gpu']]] +]; diff --git a/search/enums_6.js b/search/enums_6.js new file mode 100644 index 0000000000..2bf306131c --- /dev/null +++ b/search/enums_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['key_0',['key',['../group__tz__os__input.html#ga4ced5678cf981ffd2661937f40591b28',1,'tz::os']]] +]; diff --git a/search/enums_7.js b/search/enums_7.js new file mode 100644 index 0000000000..2684b052df --- /dev/null +++ b/search/enums_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['pass_5ftype_0',['pass_type',['../group__tz__gpu__pass.html#ga03a9b4db32a0fcf853e0b3f2c6cbfc3e',1,'tz::gpu']]] +]; diff --git a/search/enums_8.js b/search/enums_8.js new file mode 100644 index 0000000000..96608b9245 --- /dev/null +++ b/search/enums_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['quad_5frenderer_5fflag_0',['quad_renderer_flag',['../group__tz__ren__quad.html#gada2d96dacb31346ea6a8d19d933a9bc9',1,'tz::ren']]] +]; diff --git a/search/enums_9.js b/search/enums_9.js new file mode 100644 index 0000000000..63d287d59e --- /dev/null +++ b/search/enums_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['window_5fflags_0',['window_flags',['../group__tz__os__window.html#ga0ce22ac9fb10ea777cfc95e9c52a9fa5',1,'tz::os']]] +]; diff --git a/search/enumvalues_0.js b/search/enumvalues_0.js new file mode 100644 index 0000000000..79f044a58a --- /dev/null +++ b/search/enumvalues_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['allow_5fnegative_5fscale_0',['allow_negative_scale',['../group__tz__ren__quad.html#ggada2d96dacb31346ea6a8d19d933a9bc9a397b26d33462f5f3ac70d09a93bb8ae6',1,'tz::ren']]], + ['alpha_5fclipping_1',['alpha_clipping',['../group__tz__ren__quad.html#ggada2d96dacb31346ea6a8d19d933a9bc9ad2388bab44a63e62df0adcc09e324e81',1,'tz::ren']]] +]; diff --git a/search/enumvalues_1.js b/search/enumvalues_1.js new file mode 100644 index 0000000000..b71631264e --- /dev/null +++ b/search/enumvalues_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['back_0',['back',['../group__tz__gpu__pass.html#gga6589e2e52a01e7636c35d868270d7b37a469bba0a564235dfceede42db14f17b0',1,'tz::gpu']]], + ['both_1',['both',['../group__tz__gpu__pass.html#gga6589e2e52a01e7636c35d868270d7b37af6cb3e816496528d4187db53bc66567f',1,'tz::gpu']]] +]; diff --git a/search/enumvalues_10.js b/search/enumvalues_10.js new file mode 100644 index 0000000000..c1280c2847 --- /dev/null +++ b/search/enumvalues_10.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['voom_0',['voom',['../group__tz__core.html#gga98b356a4a54e1f49c9b3adb6002fc1afa4207af5812019b2c0ff52b4ff4339d4b',1,'tz']]] +]; diff --git a/search/enumvalues_2.js b/search/enumvalues_2.js new file mode 100644 index 0000000000..05770aad8a --- /dev/null +++ b/search/enumvalues_2.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['centered_5fwindow_0',['centered_window',['../group__tz__os__window.html#gga0ce22ac9fb10ea777cfc95e9c52a9fa5aa5ea653f56ab7e74ae6b09bd57bbd421',1,'tz::os']]], + ['colour_5ftarget_1',['colour_target',['../group__tz__gpu__resource.html#ggac69ba8da4ab137995079556a00afa86ea167939444ca0bb293234fc31274fb659',1,'tz::gpu']]], + ['compute_2',['compute',['../group__tz__gpu__pass.html#gga03a9b4db32a0fcf853e0b3f2c6cbfc3ea77e73f3a185e16d1f08ca5e057710b9d',1,'tz::gpu']]], + ['compute_5fonly_3',['compute_only',['../group__tz__gpu__hardware.html#ggab2036c965f55d5a07205fa4fd2120e9cac503e1b23ae78f344e72b44606f5dfc6',1,'tz::gpu']]], + ['concurrent_5fusage_4',['concurrent_usage',['../group__tz__core.html#gga98b356a4a54e1f49c9b3adb6002fc1afa7f72dda8d43c76cb98044640facab14e',1,'tz']]], + ['cpu_5',['cpu',['../group__tz__gpu__hardware.html#ggaa1e78cd65e2d10e324243cc2d6030f5cad9747e2da342bdb995f6389533ad1a3d',1,'tz::gpu']]] +]; diff --git a/search/enumvalues_3.js b/search/enumvalues_3.js new file mode 100644 index 0000000000..e8228ef2ea --- /dev/null +++ b/search/enumvalues_3.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['depth_0',['depth',['../group__tz__gpu__resource.html#gga133bb9aff1ab3d26c7845b4f96d6ac61a12a055bf01a31369fe81ac35d85c7bc1',1,'tz::gpu']]], + ['depth_5ftarget_1',['depth_target',['../group__tz__gpu__resource.html#ggac69ba8da4ab137995079556a00afa86eafa53f0baca12f6734184401f3be89ac0',1,'tz::gpu']]], + ['dont_5fclear_2',['dont_clear',['../group__tz__gpu__pass.html#gga76beda1933fb65f5b8d8806653ab5ed2a07b90c315d4a99ef349a64b9fb54e747',1,'tz::gpu']]], + ['draw_3',['draw',['../group__tz__gpu__resource.html#gga085f6c2c900ac7e57be6bfbf1ccc9457a609c4204f28f9a864268e6d6bc03604c',1,'tz::gpu']]], + ['driver_5fhazard_4',['driver_hazard',['../group__tz__core.html#gga98b356a4a54e1f49c9b3adb6002fc1afa6592bef62853d098c86f7aa3bff9aecf',1,'tz']]], + ['dynamic_5faccess_5',['dynamic_access',['../group__tz__gpu__resource.html#gga085f6c2c900ac7e57be6bfbf1ccc9457ab48d7b2a83d1800ee2dc0d6154b21742',1,'tz::gpu']]] +]; diff --git a/search/enumvalues_4.js b/search/enumvalues_4.js new file mode 100644 index 0000000000..ab46208de2 --- /dev/null +++ b/search/enumvalues_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['engine_5fbug_0',['engine_bug',['../group__tz__core.html#gga98b356a4a54e1f49c9b3adb6002fc1afa2729042b27f7a6cb6750d2edd1e393f2',1,'tz']]] +]; diff --git a/search/enumvalues_5.js b/search/enumvalues_5.js new file mode 100644 index 0000000000..f4b4b4388f --- /dev/null +++ b/search/enumvalues_5.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['floats_0',['floats',['../group__tz__gpu__resource.html#gga133bb9aff1ab3d26c7845b4f96d6ac61abdbbd9aee4fcb6e41bbb94208e0e92ab',1,'tz::gpu']]], + ['front_1',['front',['../group__tz__gpu__pass.html#gga6589e2e52a01e7636c35d868270d7b37ae6ec529ba185279aa0adcf93e645c7cd',1,'tz::gpu']]] +]; diff --git a/search/enumvalues_6.js b/search/enumvalues_6.js new file mode 100644 index 0000000000..f2c8a4a487 --- /dev/null +++ b/search/enumvalues_6.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['gpu_0',['gpu',['../group__tz__gpu__hardware.html#ggaa1e78cd65e2d10e324243cc2d6030f5ca0aa0be2a866411d9ff03515227454947',1,'tz::gpu']]], + ['graph_5fpresent_5fafter_1',['graph_present_after',['../group__tz__ren__quad.html#ggada2d96dacb31346ea6a8d19d933a9bc9a9d79226c801aca218b446d0fda2bc827',1,'tz::ren']]], + ['graphics_5fcompute_2',['graphics_compute',['../group__tz__gpu__hardware.html#ggab2036c965f55d5a07205fa4fd2120e9cac84da432dd3c53e172ed93ab600333ec',1,'tz::gpu']]], + ['graphics_5fonly_3',['graphics_only',['../group__tz__gpu__hardware.html#ggab2036c965f55d5a07205fa4fd2120e9ca012854df7733dee95e1733ce9341c71c',1,'tz::gpu']]] +]; diff --git a/search/enumvalues_7.js b/search/enumvalues_7.js new file mode 100644 index 0000000000..d5c503ae4a --- /dev/null +++ b/search/enumvalues_7.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['ideal_0',['ideal',['../group__tz__gpu__hardware.html#ggaa093da436bceb04380b7a9943206cb7dab3bfb5ad6ba04daf0f8f1930133d89dd',1,'tz::gpu']]], + ['index_1',['index',['../group__tz__gpu__resource.html#gga085f6c2c900ac7e57be6bfbf1ccc9457ab77b2a028d8f8b03988b2f0c91cd0382',1,'tz::gpu']]], + ['insufficient_2',['insufficient',['../group__tz__gpu__hardware.html#ggaa093da436bceb04380b7a9943206cb7da0db1288fd85f292651522538c9c2cade',1,'tz::gpu']]], + ['integrated_5fgpu_3',['integrated_gpu',['../group__tz__gpu__hardware.html#ggaa1e78cd65e2d10e324243cc2d6030f5ca5f39c2e1d71801c8581f62cb087abedd',1,'tz::gpu']]], + ['invalid_5fvalue_4',['invalid_value',['../group__tz__core.html#gga98b356a4a54e1f49c9b3adb6002fc1afa24fe18195f0e29f8d3ef5ad3110cfc24',1,'tz']]], + ['invisible_5',['invisible',['../group__tz__os__window.html#gga0ce22ac9fb10ea777cfc95e9c52a9fa5abde7a934ad4d61f7bcb8258221646f97',1,'tz::os']]] +]; diff --git a/search/enumvalues_8.js b/search/enumvalues_8.js new file mode 100644 index 0000000000..54e88b8328 --- /dev/null +++ b/search/enumvalues_8.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['machine_5funsuitable_0',['machine_unsuitable',['../group__tz__core.html#gga98b356a4a54e1f49c9b3adb6002fc1afa04b68ae506f7169b8f4b697ca378cbda',1,'tz']]], + ['maximised_1',['maximised',['../group__tz__os__window.html#gga0ce22ac9fb10ea777cfc95e9c52a9fa5a276f2ead6fe25f69fea19153863874d3',1,'tz::os']]] +]; diff --git a/search/enumvalues_9.js b/search/enumvalues_9.js new file mode 100644 index 0000000000..312b8add1a --- /dev/null +++ b/search/enumvalues_9.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['neither_0',['neither',['../group__tz__gpu__hardware.html#ggab2036c965f55d5a07205fa4fd2120e9caedab649646a4c3ebd9770bdfc29534b5',1,'tz::gpu']]], + ['no_5fdepth_5ftest_1',['no_depth_test',['../group__tz__gpu__pass.html#gga76beda1933fb65f5b8d8806653ab5ed2ac7fdaefba6a67bcae3e74143977b07f4',1,'tz::gpu']]], + ['no_5fdepth_5fwrite_2',['no_depth_write',['../group__tz__gpu__pass.html#gga76beda1933fb65f5b8d8806653ab5ed2a30f9639137965f02962aa47339c870c8',1,'tz::gpu']]], + ['none_3',['none',['../group__tz__gpu__pass.html#gga6589e2e52a01e7636c35d868270d7b37a334c4a4c42fdb79d7ebc3e73b517e6f8',1,'tz::gpu']]] +]; diff --git a/search/enumvalues_a.js b/search/enumvalues_a.js new file mode 100644 index 0000000000..7d5f857274 --- /dev/null +++ b/search/enumvalues_a.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['oom_0',['oom',['../group__tz__core.html#gga98b356a4a54e1f49c9b3adb6002fc1afab64777a1172ff4005ed6cde9b70d7ca3',1,'tz']]] +]; diff --git a/search/enumvalues_b.js b/search/enumvalues_b.js new file mode 100644 index 0000000000..e684ebd075 --- /dev/null +++ b/search/enumvalues_b.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['partial_5fsuccess_0',['partial_success',['../group__tz__core.html#gga98b356a4a54e1f49c9b3adb6002fc1afadbc8e69c50db1193ec71151b6fb6da9a',1,'tz']]], + ['poor_1',['poor',['../group__tz__gpu__hardware.html#ggaa093da436bceb04380b7a9943206cb7da5cffaf9375c0ef1d49451b062abdac80',1,'tz::gpu']]], + ['precondition_5ffailure_2',['precondition_failure',['../group__tz__core.html#gga98b356a4a54e1f49c9b3adb6002fc1afa71090755058a73a39e036d014dd51432',1,'tz']]] +]; diff --git a/search/enumvalues_c.js b/search/enumvalues_c.js new file mode 100644 index 0000000000..d1eeef37ba --- /dev/null +++ b/search/enumvalues_c.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['render_0',['render',['../group__tz__gpu__pass.html#gga03a9b4db32a0fcf853e0b3f2c6cbfc3ea9e5f0bb330344d580b9e30d338d6ab6d',1,'tz::gpu']]], + ['rgba_1',['rgba',['../group__tz__gpu__resource.html#gga133bb9aff1ab3d26c7845b4f96d6ac61a7082a31b8759c9d59795876351ec63aa',1,'tz::gpu']]] +]; diff --git a/search/enumvalues_d.js b/search/enumvalues_d.js new file mode 100644 index 0000000000..61216f4922 --- /dev/null +++ b/search/enumvalues_d.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['success_0',['success',['../group__tz__core.html#gga98b356a4a54e1f49c9b3adb6002fc1afa260ca9dd8a4577fc00b7bd5810298076',1,'tz']]] +]; diff --git a/search/enumvalues_e.js b/search/enumvalues_e.js new file mode 100644 index 0000000000..a599bd491d --- /dev/null +++ b/search/enumvalues_e.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['transparent_0',['transparent',['../group__tz__os__window.html#gga0ce22ac9fb10ea777cfc95e9c52a9fa5a3942db11e2fc7c493a915beef467728e',1,'tz::os']]] +]; diff --git a/search/enumvalues_f.js b/search/enumvalues_f.js new file mode 100644 index 0000000000..97daf5ad5e --- /dev/null +++ b/search/enumvalues_f.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['unknown_0',['unknown',['../group__tz__gpu__hardware.html#ggaa1e78cd65e2d10e324243cc2d6030f5caad921d60486366258809553a3db49a4a',1,'tz::gpu']]], + ['unknown_5ferror_1',['unknown_error',['../group__tz__core.html#gga98b356a4a54e1f49c9b3adb6002fc1afa4e44c97a51e5519cd277f335de285ead',1,'tz']]] +]; diff --git a/search/functions_0.js b/search/functions_0.js new file mode 100644 index 0000000000..254f0102e8 --- /dev/null +++ b/search/functions_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['add_5fdependency_0',['add_dependency',['../structtz_1_1gpu_1_1graph__builder.html#afeda9b3aacf0a3f2a596acbb00192dcb',1,'tz::gpu::graph_builder']]], + ['add_5fpass_1',['add_pass',['../structtz_1_1gpu_1_1graph__builder.html#acb4772036947f1af7649efd149167460',1,'tz::gpu::graph_builder']]] +]; diff --git a/search/functions_1.js b/search/functions_1.js new file mode 100644 index 0000000000..be6b0db29f --- /dev/null +++ b/search/functions_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['buffer_5fresize_0',['buffer_resize',['../group__tz__gpu__resource.html#gac4ca9edd5569f05ad0f34edaae49df11',1,'tz::gpu']]], + ['build_1',['build',['../structtz_1_1gpu_1_1graph__builder.html#a64d186c3a80de0eeb10616e1df91b209',1,'tz::gpu::graph_builder']]] +]; diff --git a/search/functions_10.js b/search/functions_10.js new file mode 100644 index 0000000000..5b42625529 --- /dev/null +++ b/search/functions_10.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['use_5fhardware_0',['use_hardware',['../group__tz__gpu__hardware.html#gae0b031c00ca531bea031cf25332ae8ae',1,'tz::gpu']]] +]; diff --git a/search/functions_11.js b/search/functions_11.js new file mode 100644 index 0000000000..ca4b1dd94c --- /dev/null +++ b/search/functions_11.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['vector_0',['vector',['../structtz_1_1vector.html#a57bf50d6fa7a8ee09d40e6fdd376375d',1,'tz::vector::vector(Ts &&... ts)'],['../structtz_1_1vector.html#a3e61aec72ace570a62305dba2521427a',1,'tz::vector::vector(std::array< T, N > data)'],['../structtz_1_1vector.html#a8a56603fb25b8bafa36afb477bc0baec',1,'tz::vector::vector()=default']]] +]; diff --git a/search/functions_12.js b/search/functions_12.js new file mode 100644 index 0000000000..b69cf5c88f --- /dev/null +++ b/search/functions_12.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['window_5ffullscreen_0',['window_fullscreen',['../group__tz__os__window.html#gac649d1c762ca486ef8be1a375a3b7ce5',1,'tz::os']]], + ['window_5fget_5fheight_1',['window_get_height',['../group__tz__os__window.html#gadbebbc27cd903a79e4125d507c624688',1,'tz::os']]], + ['window_5fget_5ftitle_2',['window_get_title',['../group__tz__os__window.html#gae88e68809acfcaeb0bde00dfadd66394',1,'tz::os']]], + ['window_5fget_5fwidth_3',['window_get_width',['../group__tz__os__window.html#ga35103a5cb106e14ea924877ba6965493',1,'tz::os']]], + ['window_5fis_5fopen_4',['window_is_open',['../group__tz__os__window.html#gac71356a74c55b52ec0ffc79da89afdcc',1,'tz::os']]], + ['window_5fmaximise_5',['window_maximise',['../group__tz__os__window.html#gad1d28191e820d89724d02c6618876d7c',1,'tz::os']]], + ['window_5fminimise_6',['window_minimise',['../group__tz__os__window.html#gaba6739afe416c3211891c7f2672dc4d4',1,'tz::os']]], + ['window_5fset_5fdimensions_7',['window_set_dimensions',['../group__tz__os__window.html#ga4446ccea8db8e4f6a13b6e3f84158616',1,'tz::os']]], + ['window_5fset_5ftitle_8',['window_set_title',['../group__tz__os__window.html#ga62d5d7e8c573b67fad970eaaa1fc06fd',1,'tz::os']]], + ['window_5fshow_9',['window_show',['../group__tz__os__window.html#ga5e828fee9d6f0aaffbb6131623aa8dfd',1,'tz::os']]], + ['window_5fupdate_10',['window_update',['../group__tz__os__window.html#gad1efe06c13c0d9f08460096df4498057',1,'tz::os']]] +]; diff --git a/search/functions_13.js b/search/functions_13.js new file mode 100644 index 0000000000..6dbd52acb8 --- /dev/null +++ b/search/functions_13.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['zero_0',['zero',['../structtz_1_1vector.html#a34bac7d96ff37cf13c7cbcae3fdff141',1,'tz::vector']]] +]; diff --git a/search/functions_2.js b/search/functions_2.js new file mode 100644 index 0000000000..dbb9aa0c4e --- /dev/null +++ b/search/functions_2.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['close_5fwindow_0',['close_window',['../group__tz__os__window.html#ga45fdbf53cc64912c022c0dfd3fbd9a88',1,'tz::os']]], + ['create_5fbuffer_1',['create_buffer',['../group__tz__gpu__resource.html#ga87c1cae8f14cbb08ead45a767e042251',1,'tz::gpu']]], + ['create_5fcompute_5fshader_2',['create_compute_shader',['../group__tz__gpu__shader.html#ga658aea0467b28c7286a55be3350c0f34',1,'tz::gpu']]], + ['create_5fgraph_3',['create_graph',['../group__tz__gpu__graph.html#gaae3dd8ee4d7bb068e1051fb9638dd8be',1,'tz::gpu']]], + ['create_5fgraphics_5fshader_4',['create_graphics_shader',['../group__tz__gpu__shader.html#ga4b6c0f0ef7f40dc3fc68b05192c3fda0',1,'tz::gpu']]], + ['create_5fimage_5',['create_image',['../group__tz__gpu__resource.html#ga88ea6639f763c58f1a36ac6723f4174a',1,'tz::gpu']]], + ['create_5fpass_6',['create_pass',['../group__tz__gpu__pass.html#ga30e151020820180ff5e63d7a3f354920',1,'tz::gpu']]], + ['create_5fquad_5frenderer_7',['create_quad_renderer',['../group__tz__ren__quad.html#gafbee31504dfbef7490bbc05677fcf327',1,'tz::ren']]], + ['cross_8',['cross',['../structtz_1_1vector.html#a2bc70e2d046dfd7ec1907a2a28a70fa3',1,'tz::vector']]] +]; diff --git a/search/functions_3.js b/search/functions_3.js new file mode 100644 index 0000000000..f372881376 --- /dev/null +++ b/search/functions_3.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['destroy_5fpass_0',['destroy_pass',['../group__tz__gpu__pass.html#gafa24b4faf0daadfb7cfb1a8880f599d5',1,'tz::gpu']]], + ['destroy_5fquad_5frenderer_1',['destroy_quad_renderer',['../group__tz__ren__quad.html#gac645375853feb89dc959293ec833dedc',1,'tz::ren']]], + ['destroy_5fresource_2',['destroy_resource',['../group__tz__gpu__resource.html#ga3d83aecf92ee31bcb53b094378074457',1,'tz::gpu']]], + ['destroy_5fshader_3',['destroy_shader',['../group__tz__gpu__shader.html#gad197fec81d1aceaaba87a95e93c64882',1,'tz::gpu']]], + ['dot_4',['dot',['../structtz_1_1vector.html#ad9fa0d344eacf6b7e4f374c212eb0593',1,'tz::vector']]], + ['draw_5fbuffer_5findexed_5fwrite_5',['draw_buffer_indexed_write',['../group__tz__gpu__resource.html#gaf4a8c1aea2e234ee57c9101c4d46a8d6',1,'tz::gpu']]], + ['draw_5fbuffer_5fwrite_6',['draw_buffer_write',['../group__tz__gpu__resource.html#ga344192882a76a6ac579500c5c68f93e5',1,'tz::gpu']]] +]; diff --git a/search/functions_4.js b/search/functions_4.js new file mode 100644 index 0000000000..b95f668a7a --- /dev/null +++ b/search/functions_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['execute_0',['execute',['../group__tz__gpu__graph.html#gade6998de18f8efd217e59542bd6e8910',1,'tz::gpu']]] +]; diff --git a/search/functions_5.js b/search/functions_5.js new file mode 100644 index 0000000000..aba4e7134f --- /dev/null +++ b/search/functions_5.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['filled_0',['filled',['../structtz_1_1vector.html#a71f53f79d0935b7c716210e6f1f540d8',1,'tz::vector']]], + ['find_5fbest_5fhardware_1',['find_best_hardware',['../group__tz__gpu__hardware.html#gacc14c0fcc44014aaac7ee454bc6678d1',1,'tz::gpu']]] +]; diff --git a/search/functions_6.js b/search/functions_6.js new file mode 100644 index 0000000000..04883c0762 --- /dev/null +++ b/search/functions_6.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['get_5fmouse_5fposition_0',['get_mouse_position',['../group__tz__os__input.html#ga9d016b62eb7e9bd0e4d5a35cd4f1805c',1,'tz::os']]], + ['get_5fquad_5fcolour_1',['get_quad_colour',['../group__tz__ren__quad.html#gad160efd9345c3be1ba83fc331ec8967e',1,'tz::ren']]], + ['get_5fquad_5fposition_2',['get_quad_position',['../group__tz__ren__quad.html#gafd3ad2f589586336b3d761860a08bf59',1,'tz::ren']]], + ['get_5fquad_5fscale_3',['get_quad_scale',['../group__tz__ren__quad.html#ga4983cabbb6141b8ca3a13d2c5c66dd68',1,'tz::ren']]], + ['get_5fquad_5ftexture_4',['get_quad_texture',['../group__tz__ren__quad.html#gaddf339113bcfea9d23258a7adca2acd9',1,'tz::ren']]], + ['get_5fused_5fhardware_5',['get_used_hardware',['../group__tz__gpu__hardware.html#ga43bc20f0d8e004c82906519cfc8a957b',1,'tz::gpu']]], + ['get_5fwindow_5fhandle_6',['get_window_handle',['../group__tz__os__window.html#ga077ecc9d7fd551ce75bf1c80626de8e8',1,'tz::os']]] +]; diff --git a/search/functions_7.js b/search/functions_7.js new file mode 100644 index 0000000000..041c7dd013 --- /dev/null +++ b/search/functions_7.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['image_5fget_5fheight_0',['image_get_height',['../group__tz__gpu__resource.html#gad499a5bdff5eb1888370845c06ac4463',1,'tz::gpu']]], + ['image_5fget_5fwidth_1',['image_get_width',['../group__tz__gpu__resource.html#gad1868282e0b2008822954e339dbcebf3',1,'tz::gpu']]], + ['image_5finfo_2',['image_info',['../group__tz__io.html#ga19d43db680f2fd3281c06c5270a44f74',1,'tz::io']]], + ['image_5fresize_3',['image_resize',['../group__tz__gpu__resource.html#gae0b482c3b48fff0a71869869c4aae748',1,'tz::gpu']]], + ['index_5fbuffer_5fwrite_4',['index_buffer_write',['../group__tz__gpu__resource.html#ga4278c06de23695fab88715b47495624b',1,'tz::gpu']]], + ['initialise_5',['initialise',['../group__tz.html#gabb648fc6eec063059f5e7ccf1f1d8fa7',1,'tz']]], + ['install_5fchar_5ftyped_5fcallback_6',['install_char_typed_callback',['../group__tz__os__input.html#gaf0f0287fe0f5644f74376a35bae73dda',1,'tz::os']]], + ['is_5fkey_5fpressed_7',['is_key_pressed',['../group__tz__os__input.html#gabf0bc8c19e05c141d5af7395cc270c00',1,'tz::os']]], + ['iterate_5fhardware_8',['iterate_hardware',['../group__tz__gpu__hardware.html#ga4ca647b6b2a4c26ded590bd85f6f9594',1,'tz::gpu']]] +]; diff --git a/search/functions_8.js b/search/functions_8.js new file mode 100644 index 0000000000..925264e0cc --- /dev/null +++ b/search/functions_8.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['job_5fcomplete_0',['job_complete',['../group__tz__core__job.html#gaf9fea8a971d02b61a4923ea8ab25e9c1',1,'tz']]], + ['job_5fcount_1',['job_count',['../group__tz__core__job.html#ga250854ffc23bbfb3a2b9e87ba01c35f9',1,'tz']]], + ['job_5fexecute_2',['job_execute',['../group__tz__core__job.html#ga588eb1810b15022bf081c94ecbd17904',1,'tz']]], + ['job_5fexecute_5fon_3',['job_execute_on',['../group__tz__core__job.html#ga59ec7904527b12314002a4ec19a13b3c',1,'tz']]], + ['job_5fwait_4',['job_wait',['../group__tz__core__job.html#gad3515d01b907cb4282beefed4e9902b2',1,'tz']]], + ['job_5fworker_5fcount_5',['job_worker_count',['../group__tz__core__job.html#gac375de52029457c7e8e704b567995b8b',1,'tz']]] +]; diff --git a/search/functions_9.js b/search/functions_9.js new file mode 100644 index 0000000000..8b64909da3 --- /dev/null +++ b/search/functions_9.js @@ -0,0 +1,30 @@ +var searchData= +[ + ['length_0',['length',['../structtz_1_1vector.html#a023f2bbcaf4a4a0bd1a1de9328e750eb',1,'tz::vector']]], + ['lua_5fdebug_5fcallstack_1',['lua_debug_callstack',['../group__tz__core__lua.html#gaeda86ae367f8b19ae4be83d41badb259',1,'tz']]], + ['lua_5fdebug_5fstack_2',['lua_debug_stack',['../group__tz__core__lua.html#ga44fee8d86a94d615667f622a67bbfd92',1,'tz']]], + ['lua_5fdefine_5ffunction_3',['lua_define_function',['../group__tz__core__lua.html#ga8b6b4f58bfe41f8167c9f8fa20b5a1bf',1,'tz']]], + ['lua_5fexecute_4',['lua_execute',['../group__tz__core__lua.html#gad81e6021d56728ae59cba1ad79c5c6f6',1,'tz']]], + ['lua_5fexecute_5ffile_5',['lua_execute_file',['../group__tz__core__lua.html#ga6c0aee737d908980c5e48ce46e36061d',1,'tz']]], + ['lua_5fget_5fbool_6',['lua_get_bool',['../group__tz__core__lua.html#ga9dd277f5adf490fa5cad849602ac36d6',1,'tz']]], + ['lua_5fget_5fint_7',['lua_get_int',['../group__tz__core__lua.html#gadcf0e8adfd1c4048d50afa2dae8c0626',1,'tz']]], + ['lua_5fget_5fnumber_8',['lua_get_number',['../group__tz__core__lua.html#gaaa36881506397bb704e1e714067f3ed2',1,'tz']]], + ['lua_5fget_5fstring_9',['lua_get_string',['../group__tz__core__lua.html#ga5e55a4178239919bfb9f8d503c15bf1c',1,'tz']]], + ['lua_5fparse_5fargs_10',['lua_parse_args',['../group__tz__core__lua.html#gab698d1657c518e0ce5949a0ebf15ee03',1,'tz']]], + ['lua_5fpush_5fbool_11',['lua_push_bool',['../group__tz__core__lua.html#ga8479efdd62c2966fc1b17b1cb8ca27cc',1,'tz']]], + ['lua_5fpush_5fint_12',['lua_push_int',['../group__tz__core__lua.html#gaff3974156b12c2545077c62fe0ae5ac5',1,'tz']]], + ['lua_5fpush_5fnil_13',['lua_push_nil',['../group__tz__core__lua.html#ga39c856674650db02cb11fce4cb4d3a50',1,'tz']]], + ['lua_5fpush_5fnumber_14',['lua_push_number',['../group__tz__core__lua.html#ga34a1412c408e8c1213bc2e2bed6ffbdd',1,'tz']]], + ['lua_5fpush_5fstring_15',['lua_push_string',['../group__tz__core__lua.html#ga6f0e981d3aa3f49027230db79d3d27bf',1,'tz']]], + ['lua_5fset_5fbool_16',['lua_set_bool',['../group__tz__core__lua.html#gae190dfb486310b8d685e6afefa46b7fe',1,'tz']]], + ['lua_5fset_5femptytable_17',['lua_set_emptytable',['../group__tz__core__lua.html#ga7c8a55fe1e49670b32fdb24d7a770f16',1,'tz']]], + ['lua_5fset_5fint_18',['lua_set_int',['../group__tz__core__lua.html#gae81e455354af393223b6b7be1823bf21',1,'tz']]], + ['lua_5fset_5fnil_19',['lua_set_nil',['../group__tz__core__lua.html#gafb9864da832c886af307326d65a19dcc',1,'tz']]], + ['lua_5fset_5fnumber_20',['lua_set_number',['../group__tz__core__lua.html#ga931e7ab7b099f88a32ea7639661f32f1',1,'tz']]], + ['lua_5fset_5fstring_21',['lua_set_string',['../group__tz__core__lua.html#gaa6a6565752d4b502eb7b2052b4f80d2f',1,'tz']]], + ['lua_5fstack_5fget_5fbool_22',['lua_stack_get_bool',['../group__tz__core__lua.html#ga57b6260b6644d3603be7e99d0ce0e40d',1,'tz']]], + ['lua_5fstack_5fget_5fint_23',['lua_stack_get_int',['../group__tz__core__lua.html#ga5f8fac3fe2babf77ebdea0d3d39efdac',1,'tz']]], + ['lua_5fstack_5fget_5fnumber_24',['lua_stack_get_number',['../group__tz__core__lua.html#ga979fda85364da92b05a51c33e068168b',1,'tz']]], + ['lua_5fstack_5fget_5fstring_25',['lua_stack_get_string',['../group__tz__core__lua.html#ga16076cbaed10324eb0de1a041784a4c1',1,'tz']]], + ['lua_5fstack_5fsize_26',['lua_stack_size',['../group__tz__core__lua.html#gaad4130c9556207e3cc9c8eef8878fad8',1,'tz']]] +]; diff --git a/search/functions_a.js b/search/functions_a.js new file mode 100644 index 0000000000..b7c05a6ea3 --- /dev/null +++ b/search/functions_a.js @@ -0,0 +1,16 @@ +var searchData= +[ + ['open_5fwindow_0',['open_window',['../group__tz__os__window.html#ga0a5a8fe7a1079fe7911bad7465030bce',1,'tz::os']]], + ['operator_21_3d_1',['operator!=',['../classtz_1_1handle.html#a71752e38ec8a8632d75b46476c816cff',1,'tz::handle']]], + ['operator_2a_2',['operator*',['../structtz_1_1vector.html#a99cf97b83cd4fe4b9e50060af3ed1066',1,'tz::vector']]], + ['operator_2a_3d_3',['operator*=',['../structtz_1_1vector.html#aad31b1c451bcd597c1b9b06b11cb3a08',1,'tz::vector']]], + ['operator_2b_4',['operator+',['../structtz_1_1vector.html#ad8cb5b8725ddf0dc9f769e3bdfae2689',1,'tz::vector']]], + ['operator_2b_3d_5',['operator+=',['../structtz_1_1vector.html#a415422b24f3855762aa448d74af3ced3',1,'tz::vector']]], + ['operator_2d_6',['operator-',['../structtz_1_1vector.html#a90750968cd316f3d6d46e630fa1135ad',1,'tz::vector']]], + ['operator_2d_3d_7',['operator-=',['../structtz_1_1vector.html#a3aa8784281bec9b3ae48f06ca44ab7ec',1,'tz::vector']]], + ['operator_2f_8',['operator/',['../structtz_1_1vector.html#ae3fc45fe5a4b66e8420246c5a05f2256',1,'tz::vector']]], + ['operator_2f_3d_9',['operator/=',['../structtz_1_1vector.html#acdff32848159b04e4d0ab9de02d989fa',1,'tz::vector']]], + ['operator_3d_10',['operator=',['../classtz_1_1handle.html#a31c4c8bcef24c167ce10939f50b7d5fa',1,'tz::handle']]], + ['operator_3d_3d_11',['operator==',['../classtz_1_1handle.html#a922e0f8da5720e1333027a37bab49d82',1,'tz::handle::operator==()'],['../structtz_1_1vector.html#a0ea3011ca1397f026e8fccc6e18e705f',1,'tz::vector::operator==(const vector< T, N > &rhs) const =default']]], + ['operator_5b_5d_12',['operator[]',['../structtz_1_1vector.html#ac603e80ec0e8f7a593595fc3aed72838',1,'tz::vector::operator[](std::size_t idx) const'],['../structtz_1_1vector.html#aa60bc826efb53594049260cec0abf4d5',1,'tz::vector::operator[](std::size_t idx)']]] +]; diff --git a/search/functions_b.js b/search/functions_b.js new file mode 100644 index 0000000000..3b3d74d6dd --- /dev/null +++ b/search/functions_b.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['parse_5fimage_0',['parse_image',['../group__tz__io.html#ga1c6abe61d22bf2257a139b41aa1063c9',1,'tz::io']]], + ['pass_5fadd_5fimage_5fresource_1',['pass_add_image_resource',['../group__tz__gpu__pass.html#gadc3cfdcac66fbb410af52fcf7b1ff953',1,'tz::gpu']]], + ['pass_5fset_5fkernel_2',['pass_set_kernel',['../group__tz__gpu__pass.html#ga1e2a5f9b4f20558788905688e6b402ff',1,'tz::gpu']]], + ['pass_5fset_5fscissor_3',['pass_set_scissor',['../group__tz__gpu__pass.html#gaab0696a4eb7ef536038868a5804a8125',1,'tz::gpu']]], + ['pass_5fset_5ftriangle_5fcount_4',['pass_set_triangle_count',['../group__tz__gpu__pass.html#gadf35b21694f4b309a6a89724ab9227db',1,'tz::gpu']]], + ['peek_5',['peek',['../classtz_1_1handle.html#a5879b25f824f3282e5922569fdb669f2',1,'tz::handle']]] +]; diff --git a/search/functions_c.js b/search/functions_c.js new file mode 100644 index 0000000000..25a2be9b15 --- /dev/null +++ b/search/functions_c.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['quad_5frenderer_5fadd_5ftexture_0',['quad_renderer_add_texture',['../group__tz__ren__quad.html#ga5021adfcac206620e7581fbca7ca3afe',1,'tz::ren']]], + ['quad_5frenderer_5fcreate_5fquad_1',['quad_renderer_create_quad',['../group__tz__ren__quad.html#ga51d767eab2c7690f37f596dbc9160d10',1,'tz::ren']]], + ['quad_5frenderer_5fgraph_2',['quad_renderer_graph',['../group__tz__ren__quad.html#gaea9f99996c1028345bb8c4fcf14d6621',1,'tz::ren']]], + ['quad_5frenderer_5fupdate_3',['quad_renderer_update',['../group__tz__ren__quad.html#gad34310d94fabd5e36b78aab607ed6a77',1,'tz::ren']]] +]; diff --git a/search/functions_d.js b/search/functions_d.js new file mode 100644 index 0000000000..f01289abe7 --- /dev/null +++ b/search/functions_d.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['resource_5fread_0',['resource_read',['../group__tz__gpu__resource.html#ga9e4069d26788509f05aa86396e9f5147',1,'tz::gpu']]], + ['resource_5fsize_1',['resource_size',['../group__tz__gpu__resource.html#gab8ae5b23365e06d1d971ae208ec1b235',1,'tz::gpu']]], + ['resource_5fwrite_2',['resource_write',['../group__tz__gpu__resource.html#gadeb3bc399cee18eab6646110f9c1284c',1,'tz::gpu']]] +]; diff --git a/search/functions_e.js b/search/functions_e.js new file mode 100644 index 0000000000..5e808d3fea --- /dev/null +++ b/search/functions_e.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['set_5fquad_5fcolour_0',['set_quad_colour',['../group__tz__ren__quad.html#ga82cb1330c8273ba6e7cf2b932882aa26',1,'tz::ren']]], + ['set_5fquad_5fposition_1',['set_quad_position',['../group__tz__ren__quad.html#ga4ec66f4c770c6c596f4455fdee16a230',1,'tz::ren']]], + ['set_5fquad_5fscale_2',['set_quad_scale',['../group__tz__ren__quad.html#ga9f0faca39ab0e0425995970fd12ca4c4',1,'tz::ren']]], + ['set_5fquad_5ftexture_3',['set_quad_texture',['../group__tz__ren__quad.html#ga61642f3867a0e34a755e5589447897ef',1,'tz::ren']]], + ['settings_5fget_5fvsync_4',['settings_get_vsync',['../group__tz__gpu__settings.html#ga8c670a35a5dc3aff1401a46a701d8040',1,'tz::gpu']]], + ['settings_5fset_5fvsync_5',['settings_set_vsync',['../group__tz__gpu__settings.html#gaee404b2aea7c1c2516d057913b5b7af5',1,'tz::gpu']]] +]; diff --git a/search/functions_f.js b/search/functions_f.js new file mode 100644 index 0000000000..b1127d37eb --- /dev/null +++ b/search/functions_f.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['terminate_0',['terminate',['../group__tz.html#ga0a5d1e375e7e82fcd12a8b74b8012bae',1,'tz']]] +]; diff --git a/search/groups_0.js b/search/groups_0.js new file mode 100644 index 0000000000..29d630261b --- /dev/null +++ b/search/groups_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['api_20reference_0',['API Reference',['../group__tz.html',1,'']]] +]; diff --git a/search/groups_1.js b/search/groups_1.js new file mode 100644 index 0000000000..169da550ad --- /dev/null +++ b/search/groups_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['core_20libraries_0',['Core Libraries',['../group__tz__core.html',1,'']]] +]; diff --git a/search/groups_2.js b/search/groups_2.js new file mode 100644 index 0000000000..6ad4d93112 --- /dev/null +++ b/search/groups_2.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['gpu_20library_0',['GPU Library',['../group__tz__gpu.html',1,'']]], + ['graphs_1',['Graphs',['../group__tz__gpu__graph.html',1,'']]] +]; diff --git a/search/groups_3.js b/search/groups_3.js new file mode 100644 index 0000000000..cc9e5a8261 --- /dev/null +++ b/search/groups_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['hardware_0',['Hardware',['../group__tz__gpu__hardware.html',1,'']]] +]; diff --git a/search/groups_4.js b/search/groups_4.js new file mode 100644 index 0000000000..4e4b5db353 --- /dev/null +++ b/search/groups_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['input_20system_0',['Input System',['../group__tz__os__input.html',1,'']]], + ['io_20library_1',['IO Library',['../group__tz__io.html',1,'']]] +]; diff --git a/search/groups_5.js b/search/groups_5.js new file mode 100644 index 0000000000..b2f2d74101 --- /dev/null +++ b/search/groups_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['job_20system_0',['Job System',['../group__tz__core__job.html',1,'']]] +]; diff --git a/search/groups_6.js b/search/groups_6.js new file mode 100644 index 0000000000..8743cb18e9 --- /dev/null +++ b/search/groups_6.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['libraries_0',['Libraries',['../group__tz__core.html',1,'Core Libraries'],['../group__tz__os.html',1,'OS Libraries']]], + ['library_1',['Library',['../group__tz__gpu.html',1,'GPU Library'],['../group__tz__io.html',1,'IO Library'],['../group__tz__ren.html',1,'Rendering Library']]], + ['lua_20scripting_2',['Lua Scripting',['../group__tz__core__lua.html',1,'']]] +]; diff --git a/search/groups_7.js b/search/groups_7.js new file mode 100644 index 0000000000..817b84d2d3 --- /dev/null +++ b/search/groups_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['mathematics_0',['Mathematics',['../group__tz__core__math.html',1,'']]] +]; diff --git a/search/groups_8.js b/search/groups_8.js new file mode 100644 index 0000000000..b6375f15ac --- /dev/null +++ b/search/groups_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['os_20libraries_0',['OS Libraries',['../group__tz__os.html',1,'']]] +]; diff --git a/search/groups_9.js b/search/groups_9.js new file mode 100644 index 0000000000..d3ab49f27d --- /dev/null +++ b/search/groups_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['passes_0',['Passes',['../group__tz__gpu__pass.html',1,'']]] +]; diff --git a/search/groups_a.js b/search/groups_a.js new file mode 100644 index 0000000000..8e765bec39 --- /dev/null +++ b/search/groups_a.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['quad_20renderer_0',['Quad Renderer',['../group__tz__ren__quad.html',1,'']]] +]; diff --git a/search/groups_b.js b/search/groups_b.js new file mode 100644 index 0000000000..f648a89ce7 --- /dev/null +++ b/search/groups_b.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['reference_0',['API Reference',['../group__tz.html',1,'']]], + ['renderer_1',['Quad Renderer',['../group__tz__ren__quad.html',1,'']]], + ['rendering_20library_2',['Rendering Library',['../group__tz__ren.html',1,'']]], + ['resources_3',['Resources',['../group__tz__gpu__resource.html',1,'']]] +]; diff --git a/search/groups_c.js b/search/groups_c.js new file mode 100644 index 0000000000..3793cf890b --- /dev/null +++ b/search/groups_c.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['scripting_0',['Lua Scripting',['../group__tz__core__lua.html',1,'']]], + ['settings_1',['Settings',['../group__tz__gpu__settings.html',1,'']]], + ['shaders_2',['Shaders',['../group__tz__gpu__shader.html',1,'']]], + ['system_3',['System',['../group__tz__os__input.html',1,'Input System'],['../group__tz__core__job.html',1,'Job System'],['../group__tz__os__window.html',1,'Window System']]] +]; diff --git a/search/groups_d.js b/search/groups_d.js new file mode 100644 index 0000000000..1c4b2058c9 --- /dev/null +++ b/search/groups_d.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['window_20system_0',['Window System',['../group__tz__os__window.html',1,'']]] +]; diff --git a/search/mag.svg b/search/mag.svg new file mode 100644 index 0000000000..ffb6cf0d02 --- /dev/null +++ b/search/mag.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/search/mag_d.svg b/search/mag_d.svg new file mode 100644 index 0000000000..4122773f92 --- /dev/null +++ b/search/mag_d.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/search/mag_sel.svg b/search/mag_sel.svg new file mode 100644 index 0000000000..553dba8773 --- /dev/null +++ b/search/mag_sel.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/search/mag_seld.svg b/search/mag_seld.svg new file mode 100644 index 0000000000..c906f84c83 --- /dev/null +++ b/search/mag_seld.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/search/pages_0.js b/search/pages_0.js new file mode 100644 index 0000000000..e0b38ae5eb --- /dev/null +++ b/search/pages_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['engine_0',['Topaz Engine',['../index.html',1,'']]] +]; diff --git a/search/pages_1.js b/search/pages_1.js new file mode 100644 index 0000000000..7635c89a43 --- /dev/null +++ b/search/pages_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['topaz_20engine_0',['Topaz Engine',['../index.html',1,'']]] +]; diff --git a/search/search.css b/search/search.css new file mode 100644 index 0000000000..e521f5e380 --- /dev/null +++ b/search/search.css @@ -0,0 +1,291 @@ +/*---------------- Search Box positioning */ + +#main-menu > li:last-child { + /* This
  • object is the parent of the search bar */ + display: flex; + justify-content: center; + align-items: center; + height: 36px; + margin-right: 1em; +} + +/*---------------- Search box styling */ + +.SRPage * { + font-weight: normal; + line-height: normal; +} + +dark-mode-toggle { + margin-left: 5px; + display: flex; + float: right; +} + +#MSearchBox { + display: inline-block; + white-space : nowrap; + background: black; + border-radius: 0.65em; + box-shadow: inset 0.5px 0.5px 3px 0px #2F436C; + z-index: 102; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; +} + +#MSearchSelect { + display: inline-block; + vertical-align: middle; + width: 20px; + height: 19px; + background-image: url('mag_seld.svg'); + margin: 0 0 0 0.3em; + padding: 0; +} + +#MSearchSelectExt { + display: inline-block; + vertical-align: middle; + width: 10px; + height: 19px; + background-image: url('mag_d.svg'); + margin: 0 0 0 0.5em; + padding: 0; +} + + +#MSearchField { + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 19px; + margin: 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: #C5C5C5; + outline: none; + font-family: Arial,Verdana,sans-serif; + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + +@media(hover: none) { + /* to avoid zooming on iOS */ + #MSearchField { + font-size: 16px; + } +} + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: #C5C5C5; +} + + + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #7C95C6; + background-color: #101826; + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial,Verdana,sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: #90A5CE; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: #90A5CE; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: #BCC9E2; + background-color: #283A5D; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + /*width: 60ex;*/ + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #7C95C6; + background-color: #101826; + z-index:10000; + width: 300px; + height: 400px; + overflow: auto; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +div.SRPage { + margin: 5px 2px; + background-color: #101826; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #90A5CE; + font-family: Arial,Verdana,sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #90A5CE; + font-family: Arial,Verdana,sans-serif; + font-size: 8pt; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; + font-family: Arial,Verdana,sans-serif; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: Arial,Verdana,sans-serif; +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_ad.png"); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/search/search.js b/search/search.js new file mode 100644 index 0000000000..666af01e5e --- /dev/null +++ b/search/search.js @@ -0,0 +1,694 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +const SEARCH_COOKIE_NAME = ''+'search_grp'; + +const searchResults = new SearchResults(); + +/* A class handling everything associated with the search panel. + + Parameters: + name - The name of the global variable that will be + storing this instance. Is needed to be able to set timeouts. + resultPath - path to use for external files +*/ +function SearchBox(name, resultsPath, extension) { + if (!name || !resultsPath) { alert("Missing parameters to SearchBox."); } + if (!extension || extension == "") { extension = ".html"; } + + function getXPos(item) { + let x = 0; + if (item.offsetWidth) { + while (item && item!=document.body) { + x += item.offsetLeft; + item = item.offsetParent; + } + } + return x; + } + + function getYPos(item) { + let y = 0; + if (item.offsetWidth) { + while (item && item!=document.body) { + y += item.offsetTop; + item = item.offsetParent; + } + } + return y; + } + + // ---------- Instance variables + this.name = name; + this.resultsPath = resultsPath; + this.keyTimeout = 0; + this.keyTimeoutLength = 500; + this.closeSelectionTimeout = 300; + this.lastSearchValue = ""; + this.lastResultsPage = ""; + this.hideTimeout = 0; + this.searchIndex = 0; + this.searchActive = false; + this.extension = extension; + + // ----------- DOM Elements + + this.DOMSearchField = () => document.getElementById("MSearchField"); + this.DOMSearchSelect = () => document.getElementById("MSearchSelect"); + this.DOMSearchSelectWindow = () => document.getElementById("MSearchSelectWindow"); + this.DOMPopupSearchResults = () => document.getElementById("MSearchResults"); + this.DOMPopupSearchResultsWindow = () => document.getElementById("MSearchResultsWindow"); + this.DOMSearchClose = () => document.getElementById("MSearchClose"); + this.DOMSearchBox = () => document.getElementById("MSearchBox"); + + // ------------ Event Handlers + + // Called when focus is added or removed from the search field. + this.OnSearchFieldFocus = function(isActive) { + this.Activate(isActive); + } + + this.OnSearchSelectShow = function() { + const searchSelectWindow = this.DOMSearchSelectWindow(); + const searchField = this.DOMSearchSelect(); + + const left = getXPos(searchField); + const top = getYPos(searchField) + searchField.offsetHeight; + + // show search selection popup + searchSelectWindow.style.display='block'; + searchSelectWindow.style.left = left + 'px'; + searchSelectWindow.style.top = top + 'px'; + + // stop selection hide timer + if (this.hideTimeout) { + clearTimeout(this.hideTimeout); + this.hideTimeout=0; + } + return false; // to avoid "image drag" default event + } + + this.OnSearchSelectHide = function() { + this.hideTimeout = setTimeout(this.CloseSelectionWindow.bind(this), + this.closeSelectionTimeout); + } + + // Called when the content of the search field is changed. + this.OnSearchFieldChange = function(evt) { + if (this.keyTimeout) { // kill running timer + clearTimeout(this.keyTimeout); + this.keyTimeout = 0; + } + + const e = evt ? evt : window.event; // for IE + if (e.keyCode==40 || e.keyCode==13) { + if (e.shiftKey==1) { + this.OnSearchSelectShow(); + const win=this.DOMSearchSelectWindow(); + for (let i=0;i do a search + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) { // Up + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } else if (e.keyCode==13 || e.keyCode==27) { + e.stopPropagation(); + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() { + this.keyTimeout = 0; + + // strip leading whitespace + const searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + const code = searchValue.toLowerCase().charCodeAt(0); + let idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) { // surrogate pair + idxChar = searchValue.substr(0, 2); + } + + let jsFile; + let idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) { + const hexCode=idx.toString(16); + jsFile = this.resultsPath + indexSectionNames[this.searchIndex] + '_' + hexCode + '.js'; + } + + const loadJS = function(url, impl, loc) { + const scriptTag = document.createElement('script'); + scriptTag.src = url; + scriptTag.onload = impl; + scriptTag.onreadystatechange = impl; + loc.appendChild(scriptTag); + } + + const domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + const domSearchBox = this.DOMSearchBox(); + const domPopupSearchResults = this.DOMPopupSearchResults(); + const domSearchClose = this.DOMSearchClose(); + const resultsPath = this.resultsPath; + + const handleResults = function() { + document.getElementById("Loading").style.display="none"; + if (typeof searchData !== 'undefined') { + createResults(resultsPath); + document.getElementById("NoMatches").style.display="none"; + } + + if (idx!=-1) { + searchResults.Search(searchValue); + } else { // no file with search results => force empty search results + searchResults.Search('===='); + } + + if (domPopupSearchResultsWindow.style.display!='block') { + domSearchClose.style.display = 'inline-block'; + let left = getXPos(domSearchBox) + 150; + let top = getYPos(domSearchBox) + 20; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + const maxWidth = document.body.clientWidth; + const maxHeight = document.body.clientHeight; + let width = 300; + if (left<10) left=10; + if (width+left+8>maxWidth) width=maxWidth-left-8; + let height = 400; + if (height+top+8>maxHeight) height=maxHeight-top-8; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResultsWindow.style.height = height + 'px'; + } + } + + if (jsFile) { + loadJS(jsFile, handleResults, this.DOMPopupSearchResultsWindow()); + } else { + handleResults(); + } + + this.lastSearchValue = searchValue; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) { + this.DOMSearchBox().className = 'MSearchBoxActive'; + this.searchActive = true; + } else if (!isActive) { // directly remove the panel + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + this.DOMSearchField().value = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults() { + + function convertToId(search) { + let result = ''; + for (let i=0;i. + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) { + const parentElement = document.getElementById(id); + let element = parentElement.firstChild; + + while (element && element!=parentElement) { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') { + return element; + } + + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) { + element = element.firstChild; + } else if (element.nextSibling) { + element = element.nextSibling; + } else { + do { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) { + const element = this.FindChildElement(id); + if (element) { + if (element.style.display == 'block') { + element.style.display = 'none'; + } else { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) { + if (!search) { // get search word from URL + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + const resultRows = document.getElementsByTagName("div"); + let matches = 0; + + let i = 0; + while (i < resultRows.length) { + const row = resultRows.item(i); + if (row.className == "SRResult") { + let rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) { + row.style.display = 'block'; + matches++; + } else { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) { // no results + document.getElementById("NoMatches").style.display='block'; + } else { // at least one result + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) { + let focusItem; + for (;;) { + const focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { + break; + } else if (!focusItem) { // last element + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) { + let focusItem; + for (;;) { + const focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { + break; + } else if (!focusItem) { // last element + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) { + if (e.type == "keydown") { + this.repeatOn = false; + this.lastKey = e.keyCode; + } else if (e.type == "keypress") { + if (!this.repeatOn) { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } else if (e.type == "keyup") { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) { // Up + const newIndex = itemIndex-1; + let focusItem = this.NavPrev(newIndex); + if (focusItem) { + let child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') { // children visible + let n=0; + let tmpElem; + for (;;) { // search for last child + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) { + focusItem = tmpElem; + } else { // found it! + break; + } + n++; + } + } + } + if (focusItem) { + focusItem.focus(); + } else { // return focus to search field + document.getElementById("MSearchField").focus(); + } + } else if (this.lastKey==40) { // Down + const newIndex = itemIndex+1; + let focusItem; + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') { // children visible + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } else if (this.lastKey==39) { // Right + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } else if (this.lastKey==37) { // Left + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } else if (this.lastKey==27) { // Escape + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } else if (this.lastKey==13) { // Enter + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) { // Up + if (childIndex>0) { + const newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } else { // already at first child, jump to parent + document.getElementById('Item'+itemIndex).focus(); + } + } else if (this.lastKey==40) { // Down + const newIndex = childIndex+1; + let elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) { // last child, jump to parent next parent + elem = this.NavNext(itemIndex+1); + } + if (elem) { + elem.focus(); + } + } else if (this.lastKey==27) { // Escape + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } else if (this.lastKey==13) { // Enter + return true; + } + return false; + } +} + +function createResults(resultsPath) { + + function setKeyActions(elem,action) { + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); + } + + function setClassAttr(elem,attr) { + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); + } + + const results = document.getElementById("SRResults"); + results.innerHTML = ''; + searchData.forEach((elem,index) => { + const id = elem[0]; + const srResult = document.createElement('div'); + srResult.setAttribute('id','SR_'+id); + setClassAttr(srResult,'SRResult'); + const srEntry = document.createElement('div'); + setClassAttr(srEntry,'SREntry'); + const srLink = document.createElement('a'); + srLink.setAttribute('id','Item'+index); + setKeyActions(srLink,'return searchResults.Nav(event,'+index+')'); + setClassAttr(srLink,'SRSymbol'); + srLink.innerHTML = elem[1][0]; + srEntry.appendChild(srLink); + if (elem[1].length==2) { // single result + srLink.setAttribute('href',resultsPath+elem[1][1][0]); + srLink.setAttribute('onclick','searchBox.CloseResultsWindow()'); + if (elem[1][1][1]) { + srLink.setAttribute('target','_parent'); + } else { + srLink.setAttribute('target','_blank'); + } + const srScope = document.createElement('span'); + setClassAttr(srScope,'SRScope'); + srScope.innerHTML = elem[1][1][2]; + srEntry.appendChild(srScope); + } else { // multiple results + srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")'); + const srChildren = document.createElement('div'); + setClassAttr(srChildren,'SRChildren'); + for (let c=0; c + + + + + + +Topaz: /github/workspace/include/tz/gpu/settings.hpp Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Topaz 5.0 +
    +
    Topaz Game Engine
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    settings.hpp
    +
    +
    +
    1#ifndef TOPAZ_GPU_SETTINGS_HPP
    +
    2#define TOPAZ_GPU_SETTINGS_HPP
    +
    3
    +
    4namespace tz::gpu
    +
    5{
    + +
    25 void settings_set_vsync(bool enabled);
    +
    26}
    +
    27
    +
    28#endif // TOPAZ_GPU_SETTINGS_HPP
    +
    bool settings_get_vsync()
    Query as to whether vsync is enabled.
    +
    void settings_set_vsync(bool enabled)
    Enable/disable vsync.
    +
    + + +
    + + diff --git a/shader_8hpp_source.html b/shader_8hpp_source.html new file mode 100644 index 0000000000..c511a0db8e --- /dev/null +++ b/shader_8hpp_source.html @@ -0,0 +1,147 @@ + + + + + + + +Topaz: /github/workspace/include/tz/gpu/shader.hpp Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Topaz 5.0 +
    +
    Topaz Game Engine
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    shader.hpp
    +
    +
    +
    1#ifndef TOPAZ_GPU_SHADER_HPP
    +
    2#define TOPAZ_GPU_SHADER_HPP
    +
    3#include "tz/core/handle.hpp"
    +
    4#include "tz/core/error.hpp"
    +
    5#include <string>
    +
    6#include <expected>
    +
    7#include <string_view>
    +
    8#include <span>
    +
    9
    +
    10
    +
    11namespace tz::gpu
    +
    12{
    +
    13 struct shader_tag_t{};
    + +
    35 std::expected<shader_handle, tz::error_code> create_graphics_shader(std::string_view vertex_source, std::string_view fragment_source);
    +
    45 std::expected<shader_handle, tz::error_code> create_compute_shader(std::string_view compute_source);
    + +
    57}
    +
    58
    +
    59#define TZ_MACROHACKERY_JOIN4(X, Y, Z, W) X##Y##Z##W
    +
    60#define TZ_MACROHACKERY_STRINGIFY(X) TZ_MACROHACKERY_STRINGIFY2(X)
    +
    61#define TZ_MACROHACKERY_STRINGIFY2(X) #X
    +
    62#if TOPAZ_VULKAN
    +
    63#define TZ_MACROHACKERY_JOIN_SHADER(X, Y, Z) TZ_MACROHACKERY_JOIN4(X, Y, Z, _tzsl_spv)
    +
    64//#elif TZ_OGL
    +
    65//#define TZ_MACROHACKERY_JOIN_SHADER(X, Y, Z) TZ_MACROHACKERY_JOIN4(X, Y, Z, _tzsl_glsl)
    +
    66#endif
    +
    67#if TOPAZ_VULKAN
    +
    74#define ImportedShaderHeader(shader_name, shader_type) TZ_MACROHACKERY_STRINGIFY2(shader_name.shader_type.tzsl.spv.hpp)
    +
    75//#elif TZ_OGL
    +
    76//#define ImportedShaderHeader(shader_name, shader_type) TZ_MACROHACKERY_STRINGIFY2(shader_name.shader_type.tzsl.glsl.hpp)
    +
    77#else
    +
    78#define ImportedShaderHeader
    +
    79#endif
    +
    80
    +
    88#define ImportedShaderSource(shader_name, shader_type) []()->std::string_view{std::span<const std::byte> shader_bin = std::as_bytes(std::span<const std::int8_t>(TZ_MACROHACKERY_JOIN_SHADER(shader_name, _, shader_type))); return std::string_view{reinterpret_cast<const char*>(shader_bin.data()), shader_bin.size_bytes()};}()
    +
    89
    +
    90#endif // TOPAZ_GPU_SHADER_HPP
    + +
    std::expected< shader_handle, tz::error_code > create_graphics_shader(std::string_view vertex_source, std::string_view fragment_source)
    Create a new shader intended for graphics GPU work, comprised of a vertex and fragment shader.
    +
    std::expected< shader_handle, tz::error_code > create_compute_shader(std::string_view compute_source)
    Create a new shader intended for compute GPU work, comprised of a single compute shader.
    +
    void destroy_shader(shader_handle)
    Manually destroy a previously-created shader.
    +
    + + +
    + + diff --git a/splitbar.png b/splitbar.png new file mode 100644 index 0000000000..fe895f2c58 Binary files /dev/null and b/splitbar.png differ diff --git a/splitbard.png b/splitbard.png new file mode 100644 index 0000000000..8367416d75 Binary files /dev/null and b/splitbard.png differ diff --git a/structtz_1_1appinfo-members.html b/structtz_1_1appinfo-members.html new file mode 100644 index 0000000000..55034b7cbe --- /dev/null +++ b/structtz_1_1appinfo-members.html @@ -0,0 +1,111 @@ + + + + + + + +Topaz: Member List + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Topaz 5.0 +
    +
    Topaz Game Engine
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    tz::appinfo Member List
    +
    +
    + +

    This is the complete list of members for tz::appinfo, including all inherited members.

    + + + + +
    majortz::appinfo
    minortz::appinfo
    nametz::appinfo
    + + +
    + + diff --git a/structtz_1_1appinfo.html b/structtz_1_1appinfo.html new file mode 100644 index 0000000000..9124448d50 --- /dev/null +++ b/structtz_1_1appinfo.html @@ -0,0 +1,174 @@ + + + + + + + +Topaz: tz::appinfo Struct Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Topaz 5.0 +
    +
    Topaz Game Engine
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    tz::appinfo Struct Reference
    +
    +
    +

    Description

    +

    Contains information about the application being initialised.

    +
    +

    #include "topaz.hpp"

    + + + + + + + + + + + +

    +Public Attributes

    const char * name = "A Topaz Application"
     Name of the application.
     
    unsigned int major = 1u
     Major version of the application.
     
    unsigned int minor = 0u
     Minor version of the application.
     
    +

    Member Data Documentation

    + +

    ◆ name

    + +
    +
    + + + + +
    const char* tz::appinfo::name = "A Topaz Application"
    +
    + +

    Name of the application.

    + +
    +
    + +

    ◆ major

    + +
    +
    + + + + +
    unsigned int tz::appinfo::major = 1u
    +
    + +

    Major version of the application.

    + +
    +
    + +

    ◆ minor

    + +
    +
    + + + + +
    unsigned int tz::appinfo::minor = 0u
    +
    + +

    Minor version of the application.

    + +
    +
    +
    + + +
    + + diff --git a/structtz_1_1gpu_1_1buffer__info-members.html b/structtz_1_1gpu_1_1buffer__info-members.html new file mode 100644 index 0000000000..40830a88cd --- /dev/null +++ b/structtz_1_1gpu_1_1buffer__info-members.html @@ -0,0 +1,111 @@ + + + + + + + +Topaz: Member List + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Topaz 5.0 +
    +
    Topaz Game Engine
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    tz::gpu::buffer_info Member List
    +
    +
    + +

    This is the complete list of members for tz::gpu::buffer_info, including all inherited members.

    + + + + +
    datatz::gpu::buffer_info
    flagstz::gpu::buffer_info
    nametz::gpu::buffer_info
    + + +
    + + diff --git a/structtz_1_1gpu_1_1buffer__info.html b/structtz_1_1gpu_1_1buffer__info.html new file mode 100644 index 0000000000..083304993c --- /dev/null +++ b/structtz_1_1gpu_1_1buffer__info.html @@ -0,0 +1,176 @@ + + + + + + + +Topaz: tz::gpu::buffer_info Struct Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Topaz 5.0 +
    +
    Topaz Game Engine
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    tz::gpu::buffer_info Struct Reference
    +
    +
    +

    Description

    +

    Specifies creation flags for a buffer.

    +

    See tz::gpu::create_buffer for usage.

    +
    +

    #include "resource.hpp"

    + + + + + + + + + + + +

    +Public Attributes

    std::span< const std::byte > data
     What initial data shall I have?
     
    const char * name = "<untitled buffer resource>"
     What name shall I have when you're looking at me in your graphics debugger of choice? If you don't specify one, I will be named "Resource 123B" (not necessarily 123)
     
    buffer_flag flags = static_cast<buffer_flag>(0)
     Any extra optional flags to specify?
     
    +

    Member Data Documentation

    + +

    ◆ data

    + +
    +
    + + + + +
    std::span<const std::byte> tz::gpu::buffer_info::data
    +
    + +

    What initial data shall I have?

    +
    Warning
    This must not be empty – zero-sized buffers are not supported.
    + +
    +
    + +

    ◆ name

    + +
    +
    + + + + +
    const char* tz::gpu::buffer_info::name = "<untitled buffer resource>"
    +
    + +

    What name shall I have when you're looking at me in your graphics debugger of choice? If you don't specify one, I will be named "Resource 123B" (not necessarily 123)

    + +
    +
    + +

    ◆ flags

    + +
    +
    + + + + +
    buffer_flag tz::gpu::buffer_info::flags = static_cast<buffer_flag>(0)
    +
    + +

    Any extra optional flags to specify?

    + +
    +
    +
    + + +
    + + diff --git a/structtz_1_1gpu_1_1draw__indexed__t-members.html b/structtz_1_1gpu_1_1draw__indexed__t-members.html new file mode 100644 index 0000000000..6434c07ce3 --- /dev/null +++ b/structtz_1_1gpu_1_1draw__indexed__t-members.html @@ -0,0 +1,113 @@ + + + + + + + +Topaz: Member List + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Topaz 5.0 +
    +
    Topaz Game Engine
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    tz::gpu::draw_indexed_t Member List
    +
    + + + +
    + + diff --git a/structtz_1_1gpu_1_1draw__indexed__t.html b/structtz_1_1gpu_1_1draw__indexed__t.html new file mode 100644 index 0000000000..885dd8b4f1 --- /dev/null +++ b/structtz_1_1gpu_1_1draw__indexed__t.html @@ -0,0 +1,213 @@ + + + + + + + +Topaz: tz::gpu::draw_indexed_t Struct Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Topaz 5.0 +
    +
    Topaz Game Engine
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    tz::gpu::draw_indexed_t Struct Reference
    +
    +
    +

    Description

    +

    Represents a single indexed draw-call.

    +

    See pass_graphics_state::draw_buffer for details.

    +
    +

    #include "resource.hpp"

    + + + + + + + + + + + + + + + + + +

    +Public Attributes

    std::uint32_t index_count = 0
     Number of indices (vertices) to draw.
     
    std::uint32_t instance_count = 1
     Number of instances to draw. If you're not doing GPU instancing, you probably want this to be 1.
     
    std::uint32_t first_index = 0
     Index of the first index to draw (within the index buffer).
     
    std::int32_t vertex_offset = 0
     An offset added to each index value before indexing into the vertex buffer.
     
    std::uint32_t first_instance = 0
     Instance ID of the first instance to draw.
     
    +

    Member Data Documentation

    + +

    ◆ index_count

    + +
    +
    + + + + +
    std::uint32_t tz::gpu::draw_indexed_t::index_count = 0
    +
    + +

    Number of indices (vertices) to draw.

    + +
    +
    + +

    ◆ instance_count

    + +
    +
    + + + + +
    std::uint32_t tz::gpu::draw_indexed_t::instance_count = 1
    +
    + +

    Number of instances to draw. If you're not doing GPU instancing, you probably want this to be 1.

    + +
    +
    + +

    ◆ first_index

    + +
    +
    + + + + +
    std::uint32_t tz::gpu::draw_indexed_t::first_index = 0
    +
    + +

    Index of the first index to draw (within the index buffer).

    + +
    +
    + +

    ◆ vertex_offset

    + +
    +
    + + + + +
    std::int32_t tz::gpu::draw_indexed_t::vertex_offset = 0
    +
    + +

    An offset added to each index value before indexing into the vertex buffer.

    + +
    +
    + +

    ◆ first_instance

    + +
    +
    + + + + +
    std::uint32_t tz::gpu::draw_indexed_t::first_instance = 0
    +
    + +

    Instance ID of the first instance to draw.

    + +
    +
    +
    + + +
    + + diff --git a/structtz_1_1gpu_1_1draw__t-members.html b/structtz_1_1gpu_1_1draw__t-members.html new file mode 100644 index 0000000000..8007026c8c --- /dev/null +++ b/structtz_1_1gpu_1_1draw__t-members.html @@ -0,0 +1,112 @@ + + + + + + + +Topaz: Member List + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Topaz 5.0 +
    +
    Topaz Game Engine
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    tz::gpu::draw_t Member List
    +
    +
    + +

    This is the complete list of members for tz::gpu::draw_t, including all inherited members.

    + + + + + +
    first_instancetz::gpu::draw_t
    first_vertextz::gpu::draw_t
    instance_counttz::gpu::draw_t
    vertex_counttz::gpu::draw_t
    + + +
    + + diff --git a/structtz_1_1gpu_1_1draw__t.html b/structtz_1_1gpu_1_1draw__t.html new file mode 100644 index 0000000000..a1dc307e4f --- /dev/null +++ b/structtz_1_1gpu_1_1draw__t.html @@ -0,0 +1,194 @@ + + + + + + + +Topaz: tz::gpu::draw_t Struct Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Topaz 5.0 +
    +
    Topaz Game Engine
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    tz::gpu::draw_t Struct Reference
    +
    +
    +

    Description

    +

    Represents a single unindexed draw-call.

    +

    See pass_graphics_state::draw_buffer for details.

    +
    +

    #include "resource.hpp"

    + + + + + + + + + + + + + + +

    +Public Attributes

    std::uint32_t vertex_count = 0
     Number of vertices to draw.
     
    std::uint32_t instance_count = 1
     Number of instances to draw. If you're not doing GPU instancing, you probably want this to be 1.
     
    std::uint32_t first_vertex = 0
     Index of the first vertex to draw. Essentially offsets gl_VertexIndex. (TODO: confirm that this is true)
     
    std::uint32_t first_instance = 0
     Instance ID of the first instance to draw.
     
    +

    Member Data Documentation

    + +

    ◆ vertex_count

    + +
    +
    + + + + +
    std::uint32_t tz::gpu::draw_t::vertex_count = 0
    +
    + +

    Number of vertices to draw.

    + +
    +
    + +

    ◆ instance_count

    + +
    +
    + + + + +
    std::uint32_t tz::gpu::draw_t::instance_count = 1
    +
    + +

    Number of instances to draw. If you're not doing GPU instancing, you probably want this to be 1.

    + +
    +
    + +

    ◆ first_vertex

    + +
    +
    + + + + +
    std::uint32_t tz::gpu::draw_t::first_vertex = 0
    +
    + +

    Index of the first vertex to draw. Essentially offsets gl_VertexIndex. (TODO: confirm that this is true)

    + +
    +
    + +

    ◆ first_instance

    + +
    +
    + + + + +
    std::uint32_t tz::gpu::draw_t::first_instance = 0
    +
    + +

    Instance ID of the first instance to draw.

    + +
    +
    +
    + + +
    + + diff --git a/structtz_1_1gpu_1_1graph__builder-members.html b/structtz_1_1gpu_1_1graph__builder-members.html new file mode 100644 index 0000000000..3e9d51fd48 --- /dev/null +++ b/structtz_1_1gpu_1_1graph__builder-members.html @@ -0,0 +1,111 @@ + + + + + + + +Topaz: Member List + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Topaz 5.0 +
    +
    Topaz Game Engine
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    tz::gpu::graph_builder Member List
    +
    +
    + +

    This is the complete list of members for tz::gpu::graph_builder, including all inherited members.

    + + + + +
    add_dependency(pass_handle pass, pass_handle dependency)tz::gpu::graph_builderinline
    add_pass(pass_handle pass)tz::gpu::graph_builderinline
    build()tz::gpu::graph_builderinline
    + + +
    + + diff --git a/structtz_1_1gpu_1_1graph__builder.html b/structtz_1_1gpu_1_1graph__builder.html new file mode 100644 index 0000000000..976a79c90c --- /dev/null +++ b/structtz_1_1gpu_1_1graph__builder.html @@ -0,0 +1,212 @@ + + + + + + + +Topaz: tz::gpu::graph_builder Struct Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Topaz 5.0 +
    +
    Topaz Game Engine
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    tz::gpu::graph_builder Struct Reference
    +
    +
    +

    Description

    +

    Helper struct for creating a new graph. Follows the builder pattern.

    +

    To populate the fields in graph_info manually will require you to lay out the passes in memory in a particular way, so to avoid allocations. However, if you're happy to accept an allocation or two, you can use this helper builder to construct the graph instead.

    +
    +

    #include "graph.hpp"

    + + + + + + + + + + + +

    +Public Member Functions

    graph_builderadd_pass (pass_handle pass)
     Add a new pass to the end of the timeline.
     
    graph_builderadd_dependency (pass_handle pass, pass_handle dependency)
     Add a new dependency to an existing pass in the timeline. Make sure the pass has already been added via add_pass.
     
    std::expected< graph_handle, tz::error_codebuild ()
     Attempt to create the graph based on all previous calls and return the result. This will call create_graph for you.
     
    +

    Member Function Documentation

    + +

    ◆ add_pass()

    + +
    +
    + + + + + +
    + + + + + + + +
    graph_builder & tz::gpu::graph_builder::add_pass (pass_handle pass)
    +
    +inline
    +
    + +

    Add a new pass to the end of the timeline.

    + +
    +
    + +

    ◆ add_dependency()

    + +
    +
    + + + + + +
    + + + + + + + + + + + +
    graph_builder & tz::gpu::graph_builder::add_dependency (pass_handle pass,
    pass_handle dependency )
    +
    +inline
    +
    + +

    Add a new dependency to an existing pass in the timeline. Make sure the pass has already been added via add_pass.

    + +
    +
    + +

    ◆ build()

    + +
    +
    + + + + + +
    + + + + + + + +
    std::expected< graph_handle, tz::error_code > tz::gpu::graph_builder::build ()
    +
    +inline
    +
    + +

    Attempt to create the graph based on all previous calls and return the result. This will call create_graph for you.

    + +
    +
    +
    + + +
    + + diff --git a/structtz_1_1gpu_1_1graph__info-members.html b/structtz_1_1gpu_1_1graph__info-members.html new file mode 100644 index 0000000000..8b6a4b747c --- /dev/null +++ b/structtz_1_1gpu_1_1graph__info-members.html @@ -0,0 +1,111 @@ + + + + + + + +Topaz: Member List + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Topaz 5.0 +
    +
    Topaz Game Engine
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    tz::gpu::graph_info Member List
    +
    +
    + +

    This is the complete list of members for tz::gpu::graph_info, including all inherited members.

    + + + + +
    dependenciestz::gpu::graph_info
    flagstz::gpu::graph_info
    timelinetz::gpu::graph_info
    + + +
    + + diff --git a/structtz_1_1gpu_1_1graph__info.html b/structtz_1_1gpu_1_1graph__info.html new file mode 100644 index 0000000000..217ce7fcc9 --- /dev/null +++ b/structtz_1_1gpu_1_1graph__info.html @@ -0,0 +1,175 @@ + + + + + + + +Topaz: tz::gpu::graph_info Struct Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Topaz 5.0 +
    +
    Topaz Game Engine
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    tz::gpu::graph_info Struct Reference
    +
    +
    +

    Description

    +

    Specifies creation flags for a new graph.

    +

    See tz::gpu::create_graph for usage.

    Note
    You may prefer to use the helper struct graph_builder to generate a graph instead.
    +
    +

    #include "graph.hpp"

    + + + + + + + + + + + +

    +Public Attributes

    std::span< const pass_handletimeline = {}
     Contains all the passes that will be executed during a single frame - in chronological order.
     
    std::span< std::span< const pass_handle > > dependencies = {}
     List of dependencies for each pass in the timeline. The n'th index of dependencies corresponds to the dependencies for the pass at the n'th index of the timeline.
     
    graph_flag flags = static_cast<graph_flag>(0)
     Specifies extra optional behaviour for the graph.
     
    +

    Member Data Documentation

    + +

    ◆ timeline

    + +
    +
    + + + + +
    std::span<const pass_handle> tz::gpu::graph_info::timeline = {}
    +
    + +

    Contains all the passes that will be executed during a single frame - in chronological order.

    + +
    +
    + +

    ◆ dependencies

    + +
    +
    + + + + +
    std::span<std::span<const pass_handle> > tz::gpu::graph_info::dependencies = {}
    +
    + +

    List of dependencies for each pass in the timeline. The n'th index of dependencies corresponds to the dependencies for the pass at the n'th index of the timeline.

    + +
    +
    + +

    ◆ flags

    + +
    +
    + + + + +
    graph_flag tz::gpu::graph_info::flags = static_cast<graph_flag>(0)
    +
    + +

    Specifies extra optional behaviour for the graph.

    + +
    +
    +
    + + +
    + + diff --git a/structtz_1_1gpu_1_1hardware-members.html b/structtz_1_1gpu_1_1hardware-members.html new file mode 100644 index 0000000000..06fccf1345 --- /dev/null +++ b/structtz_1_1gpu_1_1hardware-members.html @@ -0,0 +1,113 @@ + + + + + + + +Topaz: Member List + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Topaz 5.0 +
    +
    Topaz Game Engine
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    tz::gpu::hardware Member List
    +
    +
    + +

    This is the complete list of members for tz::gpu::hardware, including all inherited members.

    + + + + + + +
    capstz::gpu::hardware
    featurestz::gpu::hardware
    nametz::gpu::hardware
    typetz::gpu::hardware
    vram_size_mibtz::gpu::hardware
    + + +
    + + diff --git a/structtz_1_1gpu_1_1hardware.html b/structtz_1_1gpu_1_1hardware.html new file mode 100644 index 0000000000..842c3180f0 --- /dev/null +++ b/structtz_1_1gpu_1_1hardware.html @@ -0,0 +1,213 @@ + + + + + + + +Topaz: tz::gpu::hardware Struct Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Topaz 5.0 +
    +
    Topaz Game Engine
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    tz::gpu::hardware Struct Reference
    +
    +
    +

    Description

    +

    Contains some basic information about a particular piece of hardware on the machine that the driver thinks could do GPU work.

    +

    If you're looking to request information about the hardware available on your machine, look through iterate_hardware.

    +
    +

    #include "hardware.hpp"

    + + + + + + + + + + + + + + + + + +

    +Public Attributes

    std::string name
     User-facing name of the hardware. In most cases this should be the name of your graphics card. Note that some drivers may truncate this to an implementation-defined maximum size.
     
    std::uint64_t vram_size_mib
     Estimated size of the biggest heap, in MiB. If the hardware is not a discrete GPU, this value could be inaccurate.
     
    hardware_type type
     Describes which type of hardware this is (e.g a discrete GPU, or a CPU).
     
    hardware_feature_coverage features
     Describes whether this hardware is suited to Topaz rendering based upon the GPU features it supports.
     
    hardware_capabilities caps
     Describes which sort of GPU operations this hardware is capable of doing.
     
    +

    Member Data Documentation

    + +

    ◆ name

    + +
    +
    + + + + +
    std::string tz::gpu::hardware::name
    +
    + +

    User-facing name of the hardware. In most cases this should be the name of your graphics card. Note that some drivers may truncate this to an implementation-defined maximum size.

    + +
    +
    + +

    ◆ vram_size_mib

    + +
    +
    + + + + +
    std::uint64_t tz::gpu::hardware::vram_size_mib
    +
    + +

    Estimated size of the biggest heap, in MiB. If the hardware is not a discrete GPU, this value could be inaccurate.

    + +
    +
    + +

    ◆ type

    + +
    +
    + + + + +
    hardware_type tz::gpu::hardware::type
    +
    + +

    Describes which type of hardware this is (e.g a discrete GPU, or a CPU).

    + +
    +
    + +

    ◆ features

    + +
    +
    + + + + +
    hardware_feature_coverage tz::gpu::hardware::features
    +
    + +

    Describes whether this hardware is suited to Topaz rendering based upon the GPU features it supports.

    + +
    +
    + +

    ◆ caps

    + +
    +
    + + + + +
    hardware_capabilities tz::gpu::hardware::caps
    +
    + +

    Describes which sort of GPU operations this hardware is capable of doing.

    + +
    +
    +
    + + +
    + + diff --git a/structtz_1_1gpu_1_1image__info-members.html b/structtz_1_1gpu_1_1image__info-members.html new file mode 100644 index 0000000000..220b0a3fdd --- /dev/null +++ b/structtz_1_1gpu_1_1image__info-members.html @@ -0,0 +1,114 @@ + + + + + + + +Topaz: Member List + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Topaz 5.0 +
    +
    Topaz Game Engine
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    tz::gpu::image_info Member List
    +
    + + + +
    + + diff --git a/structtz_1_1gpu_1_1image__info.html b/structtz_1_1gpu_1_1image__info.html new file mode 100644 index 0000000000..f0b3176fe2 --- /dev/null +++ b/structtz_1_1gpu_1_1image__info.html @@ -0,0 +1,233 @@ + + + + + + + +Topaz: tz::gpu::image_info Struct Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Topaz 5.0 +
    +
    Topaz Game Engine
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    tz::gpu::image_info Struct Reference
    +
    +
    +

    Description

    +

    Specifies creation flags for an image.

    +

    See tz::gpu::create_image for usage.

    +
    +

    #include "resource.hpp"

    + + + + + + + + + + + + + + + + + + + + +

    +Public Attributes

    unsigned int width
     Width of the image, in pixels.
     
    unsigned int height
     Height of the image, in pixels.
     
    image_type type
     Describes the format of the image data.
     
    std::span< const std::byte > data
     What initial data shall I have?
     
    const char * name = "<untitled image resource>"
     What name shall I have when you're looking at me in your graphics debugger of choice? If you don't specify one, I will be named "Resource 123I" (not necessarily 123)
     
    image_flag flags = static_cast<image_flag>(0)
     Any extra optional flags to specify?
     
    +

    Member Data Documentation

    + +

    ◆ width

    + +
    +
    + + + + +
    unsigned int tz::gpu::image_info::width
    +
    + +

    Width of the image, in pixels.

    + +
    +
    + +

    ◆ height

    + +
    +
    + + + + +
    unsigned int tz::gpu::image_info::height
    +
    + +

    Height of the image, in pixels.

    + +
    +
    + +

    ◆ type

    + +
    +
    + + + + +
    image_type tz::gpu::image_info::type
    +
    + +

    Describes the format of the image data.

    + +
    +
    + +

    ◆ data

    + +
    +
    + + + + +
    std::span<const std::byte> tz::gpu::image_info::data
    +
    + +

    What initial data shall I have?

    +
    Note
    The size of the data, in bytes, should be equal to width * height * 4 (all image_type values are 32-bit aka 4 bytes per pixel).
    + +
    +
    + +

    ◆ name

    + +
    +
    + + + + +
    const char* tz::gpu::image_info::name = "<untitled image resource>"
    +
    + +

    What name shall I have when you're looking at me in your graphics debugger of choice? If you don't specify one, I will be named "Resource 123I" (not necessarily 123)

    + +
    +
    + +

    ◆ flags

    + +
    +
    + + + + +
    image_flag tz::gpu::image_info::flags = static_cast<image_flag>(0)
    +
    + +

    Any extra optional flags to specify?

    + +
    +
    +
    + + +
    + + diff --git a/structtz_1_1gpu_1_1pass__compute__state-members.html b/structtz_1_1gpu_1_1pass__compute__state-members.html new file mode 100644 index 0000000000..8075b17d7a --- /dev/null +++ b/structtz_1_1gpu_1_1pass__compute__state-members.html @@ -0,0 +1,109 @@ + + + + + + + +Topaz: Member List + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Topaz 5.0 +
    +
    Topaz Game Engine
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    tz::gpu::pass_compute_state Member List
    +
    +
    + +

    This is the complete list of members for tz::gpu::pass_compute_state, including all inherited members.

    + + +
    kerneltz::gpu::pass_compute_state
    + + +
    + + diff --git a/structtz_1_1gpu_1_1pass__compute__state.html b/structtz_1_1gpu_1_1pass__compute__state.html new file mode 100644 index 0000000000..af4d79b9f3 --- /dev/null +++ b/structtz_1_1gpu_1_1pass__compute__state.html @@ -0,0 +1,137 @@ + + + + + + + +Topaz: tz::gpu::pass_compute_state Struct Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Topaz 5.0 +
    +
    Topaz Game Engine
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    tz::gpu::pass_compute_state Struct Reference
    +
    +
    +

    Description

    +

    Specifies creation flags for a new compute pass.

    +

    See tz::gpu::pass_info for usage.

    +
    +

    #include "pass.hpp"

    + + + + + +

    +Public Attributes

    tz::v3u kernel = tz::v3u::zero()
     Number of workgroups (XYZ) to dispatch every frame.
     
    +

    Member Data Documentation

    + +

    ◆ kernel

    + +
    +
    + + + + +
    tz::v3u tz::gpu::pass_compute_state::kernel = tz::v3u::zero()
    +
    + +

    Number of workgroups (XYZ) to dispatch every frame.

    + +
    +
    +
    + + +
    + + diff --git a/structtz_1_1gpu_1_1pass__graphics__state-members.html b/structtz_1_1gpu_1_1pass__graphics__state-members.html new file mode 100644 index 0000000000..d04104937f --- /dev/null +++ b/structtz_1_1gpu_1_1pass__graphics__state-members.html @@ -0,0 +1,117 @@ + + + + + + + +Topaz: Member List + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Topaz 5.0 +
    +
    Topaz Game Engine
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    + + + diff --git a/structtz_1_1gpu_1_1pass__graphics__state.html b/structtz_1_1gpu_1_1pass__graphics__state.html new file mode 100644 index 0000000000..2d4118d817 --- /dev/null +++ b/structtz_1_1gpu_1_1pass__graphics__state.html @@ -0,0 +1,303 @@ + + + + + + + +Topaz: tz::gpu::pass_graphics_state Struct Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Topaz 5.0 +
    +
    Topaz Game Engine
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    tz::gpu::pass_graphics_state Struct Reference
    +
    +
    +

    Description

    +

    Specifies creation flags for a new graphics pass.

    +

    See tz::gpu::pass_info for usage.

    +
    +

    #include "pass.hpp"

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Attributes

    tz::v4f clear_colour = {0.0f, 0.0f, 0.0f, 1.0f}
     When a colour target is cleared, what colour (RGBA normalised floats) should it be cleared to?
     
    tz::v4u scissor = tz::v4u::filled(-1)
     Scissor rectangle, components represent {offsetx, offsety, extentx, extenty} in pixels. If all values are -1, the scissor offset will be {0, 0} and the extent equal to the dimensions of the colour_targets you have provided.
     
    std::span< const resource_handlecolour_targets = {}
     List of all colour targets. The n'th colour target specified here will be the n'th output of the fragment shader. If you want the window itself to be a colour target, pass tz::gpu::window_resource. You must provide at least one colour target, and all colour targets must have the same dimensions.
     
    resource_handle depth_target = tz::nullhand
     Optional depth target. This will act as the depth image when performing depth testing/writes.
     
    resource_handle index_buffer = tz::nullhand
     Buffer containing indices drawn in a single invocation of the pass.
     
    resource_handle draw_buffer = tz::nullhand
     Buffer containing an initial count and draw commands which may or may not be used in a single invocation of the pass.
     
    cull culling = cull::back
     Describe which faces will be culled during rendering.
     
    graphics_flag flags = static_cast<graphics_flag>(0)
     Specifies extra optional behaviour for the pass.
     
    std::size_t triangle_count = 0
     Number of triangles to draw in a single invocation of the pass.
     
    +

    Member Data Documentation

    + +

    ◆ clear_colour

    + +
    +
    + + + + +
    tz::v4f tz::gpu::pass_graphics_state::clear_colour = {0.0f, 0.0f, 0.0f, 1.0f}
    +
    + +

    When a colour target is cleared, what colour (RGBA normalised floats) should it be cleared to?

    + +
    +
    + +

    ◆ scissor

    + +
    +
    + + + + +
    tz::v4u tz::gpu::pass_graphics_state::scissor = tz::v4u::filled(-1)
    +
    + +

    Scissor rectangle, components represent {offsetx, offsety, extentx, extenty} in pixels. If all values are -1, the scissor offset will be {0, 0} and the extent equal to the dimensions of the colour_targets you have provided.

    + +
    +
    + +

    ◆ colour_targets

    + +
    +
    + + + + +
    std::span<const resource_handle> tz::gpu::pass_graphics_state::colour_targets = {}
    +
    + +

    List of all colour targets. The n'th colour target specified here will be the n'th output of the fragment shader. If you want the window itself to be a colour target, pass tz::gpu::window_resource. You must provide at least one colour target, and all colour targets must have the same dimensions.

    + +
    +
    + +

    ◆ depth_target

    + +
    +
    + + + + +
    resource_handle tz::gpu::pass_graphics_state::depth_target = tz::nullhand
    +
    + +

    Optional depth target. This will act as the depth image when performing depth testing/writes.

    + +
    +
    + +

    ◆ index_buffer

    + +
    +
    + + + + +
    resource_handle tz::gpu::pass_graphics_state::index_buffer = tz::nullhand
    +
    + +

    Buffer containing indices drawn in a single invocation of the pass.

    +

    The memory contents of the index buffer are expected to be:

    +

    {indices...}

    +

    Where a single index is equal to a index_t.

      +
    • The number of indices in the buffer does not affect how many vertices ultimately get drawn. That is always controlled by the draw_buffer, or triangle_count if no draw buffer is used.
    • +
    + +
    +
    + +

    ◆ draw_buffer

    + +
    +
    + + + + +
    resource_handle tz::gpu::pass_graphics_state::draw_buffer = tz::nullhand
    +
    + +

    Buffer containing an initial count and draw commands which may or may not be used in a single invocation of the pass.

    +

    The memory contents of the draw buffer are expected to be:

    +

    {drawcount, draws...}

    +

    Where drawcount is a unsigned 32-bit integer representing the number of proceeding draws which will occur in a single invocation of the pass. Following the draw count, the buffer should contain a tightly-packed array of draw commands.

      +
    • If an index buffer has been provided (i.e index_buffer is not null), then a draw command should be a draw_indexed_t. Otherwise, a draw command should be a draw_t.
    • +
    • The drawcount does not have to match the number of draw commands proceeding it in the buffer. If the drawcount is less than the number of draw commands, than the excess commands will not occur. If the drawcount is greater than the number of draw commands, then the entire array of draw commands will safely be used without any buffer overreads.
    • +
    + +
    +
    + +

    ◆ culling

    + +
    +
    + + + + +
    cull tz::gpu::pass_graphics_state::culling = cull::back
    +
    + +

    Describe which faces will be culled during rendering.

    + +
    +
    + +

    ◆ flags

    + +
    +
    + + + + +
    graphics_flag tz::gpu::pass_graphics_state::flags = static_cast<graphics_flag>(0)
    +
    + +

    Specifies extra optional behaviour for the pass.

    + +
    +
    + +

    ◆ triangle_count

    + +
    +
    + + + + +
    std::size_t tz::gpu::pass_graphics_state::triangle_count = 0
    +
    + +

    Number of triangles to draw in a single invocation of the pass.

    +

    The count you specify affects how many vertices are drawn every frame. You can change this count later on via pass_set_triangle_count.

    +

    If you have specified an index_buffer, then 3*triangle_count indices will be drawn, sourced from the start of the index buffer.

    +

    If you have specified a draw_buffer, then this field is entirely ignored and the draw buffer becomes the only source of truth.

    + +
    +
    +
    + + +
    + + diff --git a/structtz_1_1gpu_1_1pass__info-members.html b/structtz_1_1gpu_1_1pass__info-members.html new file mode 100644 index 0000000000..a66e107d4a --- /dev/null +++ b/structtz_1_1gpu_1_1pass__info-members.html @@ -0,0 +1,114 @@ + + + + + + + +Topaz: Member List + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Topaz 5.0 +
    +
    Topaz Game Engine
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    tz::gpu::pass_info Member List
    +
    + + + +
    + + diff --git a/structtz_1_1gpu_1_1pass__info.html b/structtz_1_1gpu_1_1pass__info.html new file mode 100644 index 0000000000..7d59e6a1c4 --- /dev/null +++ b/structtz_1_1gpu_1_1pass__info.html @@ -0,0 +1,239 @@ + + + + + + + +Topaz: tz::gpu::pass_info Struct Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Topaz 5.0 +
    +
    Topaz Game Engine
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    tz::gpu::pass_info Struct Reference
    +
    +
    +

    Description

    +

    Specifies creation flags for a new pass.

    +

    See tz::gpu::create_pass for usage.

    +
    +

    #include "pass.hpp"

    + + + + + + + + + + + + + + + + + + + + +

    +Public Attributes

    pass_graphics_state graphics = {}
     Describe the graphics state. If the pass is a compute pass, this is ignored.
     
    pass_compute_state compute = {}
     Describe the compute state. If the pass is a graphics pass, this is ignored.
     
    shader_handle shader = tz::nullhand
     Corresponds to the shader that will run during execution. This must refer to a valid shader program created via create_graphics_shader or create_compute_shader.
     
    std::span< const resource_handleresources = {}
     List of all resources used in the shader program.
     
    pass_flag flags = static_cast<pass_flag>(0)
     Specifies extra optional behaviour for the pass.
     
    const char * name = "<untitled pass>"
     Name identifying the pass. Debug tools/error checking will refer to the pass by this name if you provide one. If you do not provide a name, one will be automatically generated for you.
     
    +

    Member Data Documentation

    + +

    ◆ graphics

    + +
    +
    + + + + +
    pass_graphics_state tz::gpu::pass_info::graphics = {}
    +
    + +

    Describe the graphics state. If the pass is a compute pass, this is ignored.

    + +
    +
    + +

    ◆ compute

    + +
    +
    + + + + +
    pass_compute_state tz::gpu::pass_info::compute = {}
    +
    + +

    Describe the compute state. If the pass is a graphics pass, this is ignored.

    + +
    +
    + +

    ◆ shader

    + +
    +
    + + + + +
    shader_handle tz::gpu::pass_info::shader = tz::nullhand
    +
    + +

    Corresponds to the shader that will run during execution. This must refer to a valid shader program created via create_graphics_shader or create_compute_shader.

    + +
    +
    + +

    ◆ resources

    + +
    +
    + + + + +
    std::span<const resource_handle> tz::gpu::pass_info::resources = {}
    +
    + +

    List of all resources used in the shader program.

    +

    There are several restrictions you must adhere to when defining a set of resources:

    +

    The order in which you provide the list of resources may affect the buffer resource index you need to use in the shader.

      +
    • The id of the buffer is unaffected by any preceding images, and the id of the image is unaffected by any preceding buffers. This means you are free to intersperse as many images between buffers as you want (and vice-versa), without affecting the buffer ids. For example: .resources = {myimage0, mybuffer0, myimage1, mybuffer1, myimage2, myimage3, mybuffer2} Note that the number at the end of each resource name in the above example represents its buffer/image id used in the shader, i.e: resource(id = 1) const buffer mybuffer1{...}; vec4 myimage1_colour = sample(1, some_uv);
    • +
    + +
    +
    + +

    ◆ flags

    + +
    +
    + + + + +
    pass_flag tz::gpu::pass_info::flags = static_cast<pass_flag>(0)
    +
    + +

    Specifies extra optional behaviour for the pass.

    + +
    +
    + +

    ◆ name

    + +
    +
    + + + + +
    const char* tz::gpu::pass_info::name = "<untitled pass>"
    +
    + +

    Name identifying the pass. Debug tools/error checking will refer to the pass by this name if you provide one. If you do not provide a name, one will be automatically generated for you.

    + +
    +
    +
    + + +
    + + diff --git a/structtz_1_1io_1_1image__header-members.html b/structtz_1_1io_1_1image__header-members.html new file mode 100644 index 0000000000..841dee3e0e --- /dev/null +++ b/structtz_1_1io_1_1image__header-members.html @@ -0,0 +1,111 @@ + + + + + + + +Topaz: Member List + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Topaz 5.0 +
    +
    Topaz Game Engine
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    tz::io::image_header Member List
    +
    +
    + +

    This is the complete list of members for tz::io::image_header, including all inherited members.

    + + + + +
    data_size_bytestz::io::image_header
    heighttz::io::image_header
    widthtz::io::image_header
    + + +
    + + diff --git a/structtz_1_1io_1_1image__header.html b/structtz_1_1io_1_1image__header.html new file mode 100644 index 0000000000..c2fd25058c --- /dev/null +++ b/structtz_1_1io_1_1image__header.html @@ -0,0 +1,175 @@ + + + + + + + +Topaz: tz::io::image_header Struct Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Topaz 5.0 +
    +
    Topaz Game Engine
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    tz::io::image_header Struct Reference
    +
    +
    +

    Description

    +

    Describes basic information about an image.

    +

    Note that all images loaded are 4-component RGBA with 1 byte ber component.

    +
    +

    #include "image.hpp"

    + + + + + + + + + + + +

    +Public Attributes

    unsigned int width = 0u
     Width of the image, in pixels.
     
    unsigned int height = 0u
     Height of the image, in pixels.
     
    std::size_t data_size_bytes = 0u
     Size of the total image data, in bytes.
     
    +

    Member Data Documentation

    + +

    ◆ width

    + +
    +
    + + + + +
    unsigned int tz::io::image_header::width = 0u
    +
    + +

    Width of the image, in pixels.

    + +
    +
    + +

    ◆ height

    + +
    +
    + + + + +
    unsigned int tz::io::image_header::height = 0u
    +
    + +

    Height of the image, in pixels.

    + +
    +
    + +

    ◆ data_size_bytes

    + +
    +
    + + + + +
    std::size_t tz::io::image_header::data_size_bytes = 0u
    +
    + +

    Size of the total image data, in bytes.

    + +
    +
    +
    + + +
    + + diff --git a/structtz_1_1os_1_1window__info-members.html b/structtz_1_1os_1_1window__info-members.html new file mode 100644 index 0000000000..608a5387db --- /dev/null +++ b/structtz_1_1os_1_1window__info-members.html @@ -0,0 +1,114 @@ + + + + + + + +Topaz: Member List + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Topaz 5.0 +
    +
    Topaz Game Engine
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    tz::os::window_info Member List
    +
    + + + +
    + + diff --git a/structtz_1_1os_1_1window__info.html b/structtz_1_1os_1_1window__info.html new file mode 100644 index 0000000000..f30da15033 --- /dev/null +++ b/structtz_1_1os_1_1window__info.html @@ -0,0 +1,231 @@ + + + + + + + +Topaz: tz::os::window_info Struct Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Topaz 5.0 +
    +
    Topaz Game Engine
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    tz::os::window_info Struct Reference
    +
    +
    +

    Description

    +

    Basic customisation of a newly-opened window.

    +
    +

    #include "window.hpp"

    + + + + + + + + + + + + + + + + + + + + +

    +Public Attributes

    std::string title = "Untitled"
     Title of the window.
     
    unsigned int x = 0
     x-position of the window, in pixels.
     
    unsigned int y = 0
     y-position of the window, in pixels.
     
    unsigned int width = 800
     Width of the window body, in pixels.
     
    unsigned int height = 600
     Height of the window body, in pixels.
     
    window_flags flags = window_flags::none
     Some optional extra flags. See window_flags.
     
    +

    Member Data Documentation

    + +

    ◆ title

    + +
    +
    + + + + +
    std::string tz::os::window_info::title = "Untitled"
    +
    + +

    Title of the window.

    + +
    +
    + +

    ◆ x

    + +
    +
    + + + + +
    unsigned int tz::os::window_info::x = 0
    +
    + +

    x-position of the window, in pixels.

    + +
    +
    + +

    ◆ y

    + +
    +
    + + + + +
    unsigned int tz::os::window_info::y = 0
    +
    + +

    y-position of the window, in pixels.

    + +
    +
    + +

    ◆ width

    + +
    +
    + + + + +
    unsigned int tz::os::window_info::width = 800
    +
    + +

    Width of the window body, in pixels.

    + +
    +
    + +

    ◆ height

    + +
    +
    + + + + +
    unsigned int tz::os::window_info::height = 600
    +
    + +

    Height of the window body, in pixels.

    + +
    +
    + +

    ◆ flags

    + +
    +
    + + + + +
    window_flags tz::os::window_info::flags = window_flags::none
    +
    + +

    Some optional extra flags. See window_flags.

    + +
    +
    +
    + + +
    + + diff --git a/structtz_1_1ren_1_1quad__info-members.html b/structtz_1_1ren_1_1quad__info-members.html new file mode 100644 index 0000000000..057871200a --- /dev/null +++ b/structtz_1_1ren_1_1quad__info-members.html @@ -0,0 +1,113 @@ + + + + + + + +Topaz: Member List + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Topaz 5.0 +
    +
    Topaz Game Engine
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    tz::ren::quad_info Member List
    +
    + + + +
    + + diff --git a/structtz_1_1ren_1_1quad__info.html b/structtz_1_1ren_1_1quad__info.html new file mode 100644 index 0000000000..ccc22eba9f --- /dev/null +++ b/structtz_1_1ren_1_1quad__info.html @@ -0,0 +1,212 @@ + + + + + + + +Topaz: tz::ren::quad_info Struct Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Topaz 5.0 +
    +
    Topaz Game Engine
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    tz::ren::quad_info Struct Reference
    +
    +
    +

    Description

    +

    Specifies initial data for a single quad.

    +
    +

    #include "quad.hpp"

    + + + + + + + + + + + + + + + + + +

    +Public Attributes

    tz::v2f position = tz::v2f::zero()
     Position of the quad, in world-space. You can change this later via set_quad_position.
     
    float rotation = 0.0f
     Rotation of the quads, in radians.
     
    tz::v2f scale = tz::v2f::filled(1.0f)
     Scale factors of the quad, in both dimensions. You can change this later via set_quad_scale.
     
    std::uint32_t texture_id = -1
     Texture to display on the quad. Defaults to -1 (no texture). If no texture is used, then the quad will have a solid colour corresponding to colour. You can change this later via set_quad_texture.
     
    tz::v3f colour = tz::v3f::filled(1.0f)
     Colour of the quad. If the quad has no texture, this will be the exact colour of the whole quad. If the quad does have a texture, then the sampled texture colour will be multiplied by this value (in which case you will often want to provide {1, 1, 1}). You can change this later via set_quad_colour.
     
    +

    Member Data Documentation

    + +

    ◆ position

    + +
    +
    + + + + +
    tz::v2f tz::ren::quad_info::position = tz::v2f::zero()
    +
    + +

    Position of the quad, in world-space. You can change this later via set_quad_position.

    + +
    +
    + +

    ◆ rotation

    + +
    +
    + + + + +
    float tz::ren::quad_info::rotation = 0.0f
    +
    + +

    Rotation of the quads, in radians.

    + +
    +
    + +

    ◆ scale

    + +
    +
    + + + + +
    tz::v2f tz::ren::quad_info::scale = tz::v2f::filled(1.0f)
    +
    + +

    Scale factors of the quad, in both dimensions. You can change this later via set_quad_scale.

    + +
    +
    + +

    ◆ texture_id

    + +
    +
    + + + + +
    std::uint32_t tz::ren::quad_info::texture_id = -1
    +
    + +

    Texture to display on the quad. Defaults to -1 (no texture). If no texture is used, then the quad will have a solid colour corresponding to colour. You can change this later via set_quad_texture.

    + +
    +
    + +

    ◆ colour

    + +
    +
    + + + + +
    tz::v3f tz::ren::quad_info::colour = tz::v3f::filled(1.0f)
    +
    + +

    Colour of the quad. If the quad has no texture, this will be the exact colour of the whole quad. If the quad does have a texture, then the sampled texture colour will be multiplied by this value (in which case you will often want to provide {1, 1, 1}). You can change this later via set_quad_colour.

    + +
    +
    +
    + + +
    + + diff --git a/structtz_1_1ren_1_1quad__renderer__info-members.html b/structtz_1_1ren_1_1quad__renderer__info-members.html new file mode 100644 index 0000000000..c8c5e59106 --- /dev/null +++ b/structtz_1_1ren_1_1quad__renderer__info-members.html @@ -0,0 +1,111 @@ + + + + + + + +Topaz: Member List + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Topaz 5.0 +
    +
    Topaz Game Engine
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    tz::ren::quad_renderer_info Member List
    +
    + + + +
    + + diff --git a/structtz_1_1ren_1_1quad__renderer__info.html b/structtz_1_1ren_1_1quad__renderer__info.html new file mode 100644 index 0000000000..7f9afa5c10 --- /dev/null +++ b/structtz_1_1ren_1_1quad__renderer__info.html @@ -0,0 +1,175 @@ + + + + + + + +Topaz: tz::ren::quad_renderer_info Struct Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Topaz 5.0 +
    +
    Topaz Game Engine
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    tz::ren::quad_renderer_info Struct Reference
    +
    +
    +

    Description

    +

    Specifies creation flags for a quad renderer.

    +

    See create_quad_renderer for usage.

    +
    +

    #include "quad.hpp"

    + + + + + + + + + + + +

    +Public Attributes

    tz::v4f clear_colour = {0.0f, 0.0f, 0.0f, 1.0f}
     When the main pass is executed, the colour target will be cleared to this colour value.
     
    tz::gpu::resource_handle colour_target = tz::gpu::window_resource
     Specifies the colour target to render into. By default, this is the window resource (i.e the quad renderer will draw to the window unless you specify a different colour target).
     
    quad_renderer_flag flags = static_cast<quad_renderer_flag>(0)
     Any extra optional flags to specify?
     
    +

    Member Data Documentation

    + +

    ◆ clear_colour

    + +
    +
    + + + + +
    tz::v4f tz::ren::quad_renderer_info::clear_colour = {0.0f, 0.0f, 0.0f, 1.0f}
    +
    + +

    When the main pass is executed, the colour target will be cleared to this colour value.

    + +
    +
    + +

    ◆ colour_target

    + +
    +
    + + + + +
    tz::gpu::resource_handle tz::ren::quad_renderer_info::colour_target = tz::gpu::window_resource
    +
    + +

    Specifies the colour target to render into. By default, this is the window resource (i.e the quad renderer will draw to the window unless you specify a different colour target).

    + +
    +
    + +

    ◆ flags

    + +
    +
    + + + + +
    quad_renderer_flag tz::ren::quad_renderer_info::flags = static_cast<quad_renderer_flag>(0)
    +
    + +

    Any extra optional flags to specify?

    + +
    +
    +
    + + +
    + + diff --git a/structtz_1_1vector-members.html b/structtz_1_1vector-members.html new file mode 100644 index 0000000000..d1599347f0 --- /dev/null +++ b/structtz_1_1vector-members.html @@ -0,0 +1,127 @@ + + + + + + + +Topaz: Member List + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Topaz 5.0 +
    +
    Topaz Game Engine
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    tz::vector< T, N > Member List
    +
    +
    + +

    This is the complete list of members for tz::vector< T, N >, including all inherited members.

    + + + + + + + + + + + + + + + + + + + + +
    cross(const vector< T, N > &rhs) consttz::vector< T, N >
    dot(const vector< T, N > &rhs) consttz::vector< T, N >
    filled(T t)tz::vector< T, N >inlinestatic
    length() consttz::vector< T, N >
    operator*(const vector< T, N > &rhs) consttz::vector< T, N >inline
    operator*=(const vector< T, N > &rhs)tz::vector< T, N >
    operator+(const vector< T, N > &rhs) consttz::vector< T, N >inline
    operator+=(const vector< T, N > &rhs)tz::vector< T, N >
    operator-(const vector< T, N > &rhs) consttz::vector< T, N >inline
    operator-=(const vector< T, N > &rhs)tz::vector< T, N >
    operator/(const vector< T, N > &rhs) consttz::vector< T, N >inline
    operator/=(const vector< T, N > &rhs)tz::vector< T, N >
    operator==(const vector< T, N > &rhs) const =defaulttz::vector< T, N >
    operator[](std::size_t idx) consttz::vector< T, N >
    operator[](std::size_t idx)tz::vector< T, N >
    vector(Ts &&... ts)tz::vector< T, N >inline
    vector(std::array< T, N > data)tz::vector< T, N >inline
    vector()=defaulttz::vector< T, N >
    zero()tz::vector< T, N >inlinestatic
    + + +
    + + diff --git a/structtz_1_1vector.html b/structtz_1_1vector.html new file mode 100644 index 0000000000..ffac67bfba --- /dev/null +++ b/structtz_1_1vector.html @@ -0,0 +1,656 @@ + + + + + + + +Topaz: tz::vector< T, N > Struct Template Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Topaz 5.0 +
    +
    Topaz Game Engine
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    + +
    +

    Description

    +
    template<typename T, int N>
    +requires std::integral<T> || std::floating_point<T>
    +struct tz::vector< T, N >

    Represents the generic vector.

    +
    +

    #include "vector.hpp"

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    template<typename... Ts>
    +requires ( sizeof...(Ts) <= N && sizeof...(Ts) > 1 && std::is_convertible_v<std::tuple_element_t<0, std::tuple<Ts...>>, T>)
    constexpr vector (Ts &&... ts)
     
    constexpr vector (std::array< T, N > data)
     
     vector ()=default
     
    const T & operator[] (std::size_t idx) const
     
    T & operator[] (std::size_t idx)
     
    vector< T, N > & operator+= (const vector< T, N > &rhs)
     Add one vector to another.
     
    vector< T, N > & operator-= (const vector< T, N > &rhs)
     Subtract one vector from another.
     
    vector< T, N > & operator*= (const vector< T, N > &rhs)
     Multiply one vector with another.
     
    vector< T, N > & operator/= (const vector< T, N > &rhs)
     Divide one vector by another.
     
    vector< T, N > operator+ (const vector< T, N > &rhs) const
     Add one vector to another.
     
    vector< T, N > operator- (const vector< T, N > &rhs) const
     Subtract one vector from another.
     
    vector< T, N > operator* (const vector< T, N > &rhs) const
     Multiply one vector with another.
     
    vector< T, N > operator/ (const vector< T, N > &rhs) const
     Divide one vector by another.
     
    length () const
     Retrieve the magnitude of the vector.
     
    dot (const vector< T, N > &rhs) const
     Retrieve the dot (scalar) product of two vectors.
     
    vector< T, N > cross (const vector< T, N > &rhs) const
     Retrieve a cross product between two three-dimensional vectors.
     
    bool operator== (const vector< T, N > &rhs) const =default
     Compare two vectors. Two vectors are equal if all of their components are exactly equal.
     
    + + + + + + + +

    +Static Public Member Functions

    static constexpr vector< T, N > zero ()
     Retrieve a vector filled with zeroes.
     
    static constexpr vector< T, N > filled (T t)
     Retrieve a vector filled with the given value.
     
    +

    Constructor & Destructor Documentation

    + +

    ◆ vector() [1/3]

    + +
    +
    +
    +template<typename T , int N>
    +
    +template<typename... Ts>
    +requires ( sizeof...(Ts) <= N && sizeof...(Ts) > 1 && std::is_convertible_v<std::tuple_element_t<0, std::tuple<Ts...>>, T>)
    + + + + + +
    + + + + + + + +
    tz::vector< T, N >::vector (Ts &&... ts)
    +
    +inlineconstexpr
    +
    +

    Construct a vector directly using a variadic parameter pack value. If the number of parameters provided is less than the vector's length, the remainder elements of the vector will be of indeterminate value.

    + +
    +
    + +

    ◆ vector() [2/3]

    + +
    +
    +
    +template<typename T , int N>
    + + + + + +
    + + + + + + + +
    tz::vector< T, N >::vector (std::array< T, N > data)
    +
    +inlineconstexpr
    +
    +

    Construct a vector using an existing array of appropriate size.

    + +
    +
    + +

    ◆ vector() [3/3]

    + +
    +
    +
    +template<typename T , int N>
    + + + + + +
    + + + + + + + +
    tz::vector< T, N >::vector ()
    +
    +default
    +
    +

    Default-constructed vectors have indeterminate values.

    + +
    +
    +

    Member Function Documentation

    + +

    ◆ zero()

    + +
    +
    +
    +template<typename T , int N>
    + + + + + +
    + + + + + + + +
    static constexpr vector< T, N > tz::vector< T, N >::zero ()
    +
    +inlinestaticconstexpr
    +
    + +

    Retrieve a vector filled with zeroes.

    + +
    +
    + +

    ◆ filled()

    + +
    +
    +
    +template<typename T , int N>
    + + + + + +
    + + + + + + + +
    static constexpr vector< T, N > tz::vector< T, N >::filled (T t)
    +
    +inlinestaticconstexpr
    +
    + +

    Retrieve a vector filled with the given value.

    + +
    +
    + +

    ◆ operator[]() [1/2]

    + +
    +
    +
    +template<typename T , int N>
    + + + + + + + +
    const T & tz::vector< T, N >::operator[] (std::size_t idx) const
    +
    +

    Retrieve the element value at the given index. Precondition: idx < S. Otherwise, this will assert and invoke UB.

    Returns
    The value at the given index.
    + +
    +
    + +

    ◆ operator[]() [2/2]

    + +
    +
    +
    +template<typename T , int N>
    + + + + + + + +
    T & tz::vector< T, N >::operator[] (std::size_t idx)
    +
    +

    Retrieve the element value at the given index. Precondition: idx < S. Otherwise, this will assert and invoke UB.

    Returns
    The value at the given index.
    + +
    +
    + +

    ◆ operator+=()

    + +
    +
    +
    +template<typename T , int N>
    + + + + + + + +
    vector< T, N > & tz::vector< T, N >::operator+= (const vector< T, N > & rhs)
    +
    + +

    Add one vector to another.

    + +
    +
    + +

    ◆ operator-=()

    + +
    +
    +
    +template<typename T , int N>
    + + + + + + + +
    vector< T, N > & tz::vector< T, N >::operator-= (const vector< T, N > & rhs)
    +
    + +

    Subtract one vector from another.

    + +
    +
    + +

    ◆ operator*=()

    + +
    +
    +
    +template<typename T , int N>
    + + + + + + + +
    vector< T, N > & tz::vector< T, N >::operator*= (const vector< T, N > & rhs)
    +
    + +

    Multiply one vector with another.

    + +
    +
    + +

    ◆ operator/=()

    + +
    +
    +
    +template<typename T , int N>
    + + + + + + + +
    vector< T, N > & tz::vector< T, N >::operator/= (const vector< T, N > & rhs)
    +
    + +

    Divide one vector by another.

    + +
    +
    + +

    ◆ operator+()

    + +
    +
    +
    +template<typename T , int N>
    + + + + + +
    + + + + + + + +
    vector< T, N > tz::vector< T, N >::operator+ (const vector< T, N > & rhs) const
    +
    +inline
    +
    + +

    Add one vector to another.

    + +
    +
    + +

    ◆ operator-()

    + +
    +
    +
    +template<typename T , int N>
    + + + + + +
    + + + + + + + +
    vector< T, N > tz::vector< T, N >::operator- (const vector< T, N > & rhs) const
    +
    +inline
    +
    + +

    Subtract one vector from another.

    + +
    +
    + +

    ◆ operator*()

    + +
    +
    +
    +template<typename T , int N>
    + + + + + +
    + + + + + + + +
    vector< T, N > tz::vector< T, N >::operator* (const vector< T, N > & rhs) const
    +
    +inline
    +
    + +

    Multiply one vector with another.

    + +
    +
    + +

    ◆ operator/()

    + +
    +
    +
    +template<typename T , int N>
    + + + + + +
    + + + + + + + +
    vector< T, N > tz::vector< T, N >::operator/ (const vector< T, N > & rhs) const
    +
    +inline
    +
    + +

    Divide one vector by another.

    + +
    +
    + +

    ◆ length()

    + +
    +
    +
    +template<typename T , int N>
    + + + + + + + +
    T tz::vector< T, N >::length () const
    +
    + +

    Retrieve the magnitude of the vector.

    + +
    +
    + +

    ◆ dot()

    + +
    +
    +
    +template<typename T , int N>
    + + + + + + + +
    T tz::vector< T, N >::dot (const vector< T, N > & rhs) const
    +
    + +

    Retrieve the dot (scalar) product of two vectors.

    + +
    +
    + +

    ◆ cross()

    + +
    +
    +
    +template<typename T , int N>
    + + + + + + + +
    vector< T, N > tz::vector< T, N >::cross (const vector< T, N > & rhs) const
    +
    + +

    Retrieve a cross product between two three-dimensional vectors.

    +
    Warning
    If you invoke this on a vector that is not three-dimensional, the program is ill-formed.
    + +
    +
    + +

    ◆ operator==()

    + +
    +
    +
    +template<typename T , int N>
    + + + + + +
    + + + + + + + +
    bool tz::vector< T, N >::operator== (const vector< T, N > & rhs) const
    +
    +default
    +
    + +

    Compare two vectors. Two vectors are equal if all of their components are exactly equal.

    + +
    +
    +
    + + +
    + + diff --git a/sync_off.png b/sync_off.png new file mode 100644 index 0000000000..3b443fc628 Binary files /dev/null and b/sync_off.png differ diff --git a/sync_on.png b/sync_on.png new file mode 100644 index 0000000000..e08320fb64 Binary files /dev/null and b/sync_on.png differ diff --git a/tab_a.png b/tab_a.png new file mode 100644 index 0000000000..3b725c41c5 Binary files /dev/null and b/tab_a.png differ diff --git a/tab_ad.png b/tab_ad.png new file mode 100644 index 0000000000..e34850acfc Binary files /dev/null and b/tab_ad.png differ diff --git a/tab_b.png b/tab_b.png new file mode 100644 index 0000000000..e2b4a8638c Binary files /dev/null and b/tab_b.png differ diff --git a/tab_bd.png b/tab_bd.png new file mode 100644 index 0000000000..91c2524986 Binary files /dev/null and b/tab_bd.png differ diff --git a/tab_h.png b/tab_h.png new file mode 100644 index 0000000000..fd5cb70548 Binary files /dev/null and b/tab_h.png differ diff --git a/tab_hd.png b/tab_hd.png new file mode 100644 index 0000000000..2489273d4c Binary files /dev/null and b/tab_hd.png differ diff --git a/tab_s.png b/tab_s.png new file mode 100644 index 0000000000..ab478c95b6 Binary files /dev/null and b/tab_s.png differ diff --git a/tab_sd.png b/tab_sd.png new file mode 100644 index 0000000000..757a565ced Binary files /dev/null and b/tab_sd.png differ diff --git a/tabs.css b/tabs.css new file mode 100644 index 0000000000..b69411bc4f --- /dev/null +++ b/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:#B6C4DF;-webkit-transition:all .25s;transition:all .25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px,1px,1px,1px)}#main-menu-state:not(:checked) ~ #main-menu{display:none}#main-menu-state:checked ~ #main-menu{display:block}@media(min-width:768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked) ~ #main-menu{display:block}}.sm-dox{background-image:url('tab_bd.png')}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0px 1px 1px black;color:#B6C4DF;outline:0}.sm-dox a:hover{background-image:url('tab_ad.png');background-repeat:repeat-x;color:#DCE2EF;text-shadow:0px 1px 1px rgba(0, 0, 0, 1.0)}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255, 255, 255, 0.2);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:#05070C}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:#05070C;background-image:none}.sm-dox ul a:hover{background-image:url('tab_ad.png');background-repeat:repeat-x;color:#DCE2EF;text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url('tab_bd.png');line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#B6C4DF transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:url('tab_sd.png');background-repeat:no-repeat;background-position:right;-moz-border-radius:0 !important;-webkit-border-radius:0;border-radius:0 !important}.sm-dox a:hover{background-image:url('tab_ad.png');background-repeat:repeat-x;color:#DCE2EF;text-shadow:0px 1px 1px rgba(0, 0, 0, 1.0)}.sm-dox a:hover span.sub-arrow{border-color:#DCE2EF transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #05070C transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#05070C;-moz-border-radius:5px !important;-webkit-border-radius:5px;border-radius:5px !important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #BBBBBB;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#BBBBBB;background-image:none;border:0 !important}.sm-dox ul a:hover{background-image:url('tab_ad.png');background-repeat:repeat-x;color:#DCE2EF;text-shadow:0px 1px 1px rgba(0, 0, 0, 1.0)}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent #DCE2EF}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#05070C;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #BBBBBB transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#BBBBBB transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url('tab_bd.png')}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#05070C}} diff --git a/time_8hpp_source.html b/time_8hpp_source.html new file mode 100644 index 0000000000..376fe996e6 --- /dev/null +++ b/time_8hpp_source.html @@ -0,0 +1,116 @@ + + + + + + + +Topaz: /github/workspace/include/tz/core/time.hpp Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Topaz 5.0 +
    +
    Topaz Game Engine
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    time.hpp
    +
    +
    +
    1#ifndef TOPAZ_CORE_TIME_HPP
    +
    2#define TOPAZ_CORE_TIME_HPP
    +
    3#include <cstdint>
    +
    4
    +
    5namespace tz
    +
    6{
    +
    7 std::uint64_t system_millis();
    +
    8 std::uint64_t system_nanos();
    +
    9}
    +
    10
    +
    11#endif // TOPAZ_CORE_TIME_HPP
    +
    + + +
    + + diff --git a/topaz_8hpp_source.html b/topaz_8hpp_source.html new file mode 100644 index 0000000000..8c3ee5ace8 --- /dev/null +++ b/topaz_8hpp_source.html @@ -0,0 +1,150 @@ + + + + + + + +Topaz: /github/workspace/include/tz/topaz.hpp Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Topaz 5.0 +
    +
    Topaz Game Engine
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    topaz.hpp
    +
    +
    +
    1#ifndef TOPAZ_HPP
    +
    2#define TOPAZ_HPP
    +
    3#include "textc/imported_text.hpp"
    +
    4
    +
    9namespace tz
    +
    10{
    +
    +
    15 struct appinfo
    +
    16 {
    +
    18 const char* name = "A Topaz Application";
    +
    20 unsigned int major = 1u;
    +
    22 unsigned int minor = 0u;
    +
    23 };
    +
    +
    33 void initialise(appinfo info = {});
    +
    42 void terminate();
    +
    43
    +
    44 namespace detail
    +
    45 {
    +
    46 void job_system_initialise();
    +
    47 void job_system_terminate();
    +
    48 void lua_initialise_local();
    +
    49 void lua_initialise_all_threads();
    +
    50 }
    +
    51 namespace gpu
    +
    52 {
    +
    53 void initialise(appinfo info);
    +
    54 void terminate();
    +
    55 }
    +
    56 namespace os
    +
    57 {
    +
    58 void initialise();
    +
    59 void terminate();
    +
    60 }
    +
    61}
    +
    62
    +
    126#include "detail/debug.hpp"
    +
    127
    +
    128#endif // TOPAZ_HPP
    +
    void terminate()
    Terminate the engine, cleaning up all resources.
    +
    void initialise(appinfo info={})
    Initialise the engine.
    +
    Contains information about the application being initialised.
    Definition topaz.hpp:16
    +
    unsigned int major
    Major version of the application.
    Definition topaz.hpp:20
    +
    const char * name
    Name of the application.
    Definition topaz.hpp:18
    +
    unsigned int minor
    Minor version of the application.
    Definition topaz.hpp:22
    +
    + + +
    + + diff --git a/trs_8hpp_source.html b/trs_8hpp_source.html new file mode 100644 index 0000000000..a84e781a47 --- /dev/null +++ b/trs_8hpp_source.html @@ -0,0 +1,140 @@ + + + + + + + +Topaz: /github/workspace/include/tz/core/trs.hpp Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Topaz 5.0 +
    +
    Topaz Game Engine
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    trs.hpp
    +
    +
    +
    1#ifndef TOPAZ_CORE_TRS_HPP
    +
    2#define TOPAZ_CORE_TRS_HPP
    +
    3#include "tz/core/vector.hpp"
    +
    4#include "tz/core/quaternion.hpp"
    +
    5#include "tz/core/matrix.hpp"
    +
    6
    +
    7namespace tz
    +
    8{
    +
    9 tz::m4f matrix_translate(tz::v3f translate);
    +
    10 tz::m4f matrix_scale(tz::v3f scale);
    +
    11 tz::m4f matrix_ortho(float left, float right, float top, float bottom, float near, float far);
    +
    12 tz::m4f matrix_persp(float fov, float aspect_ratio, float near, float far);
    +
    13 tz::m4f matrix_persp_nofar(float fov, float aspect_ratio, float near);
    +
    14
    +
    15 struct trs
    +
    16 {
    +
    17 tz::v3f translate = tz::v3f::zero();
    +
    18 tz::quat rotate = tz::quat::iden();
    +
    19 tz::v3f scale = tz::v3f::filled(1.0f);
    +
    20
    +
    21 trs lerp(const trs& rhs, float factor) const;
    +
    22 m4f matrix() const;
    +
    23 static trs from_matrix(m4f mat);
    +
    24
    +
    25 trs inverse() const;
    +
    26 trs combine(const trs& rhs);
    +
    27
    +
    28 bool operator==(const trs& rhs) const = default;
    +
    29 };
    +
    30}
    +
    31
    +
    32#endif // TOPAZ_CORE_TRS_HPP
    + +
    static constexpr vector< float, N > zero()
    Definition vector.hpp:25
    +
    static constexpr vector< float, N > filled(float t)
    Definition vector.hpp:31
    +
    + + +
    + + diff --git a/tz.png b/tz.png new file mode 100644 index 0000000000..714168fce9 Binary files /dev/null and b/tz.png differ diff --git a/vector_8hpp_source.html b/vector_8hpp_source.html new file mode 100644 index 0000000000..abac6a912e --- /dev/null +++ b/vector_8hpp_source.html @@ -0,0 +1,214 @@ + + + + + + + +Topaz: /github/workspace/include/tz/core/vector.hpp Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Topaz 5.0 +
    +
    Topaz Game Engine
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    vector.hpp
    +
    +
    +
    1#ifndef TOPAZ_CORE_VECTOR_HPP
    +
    2#define TOPAZ_CORE_VECTOR_HPP
    +
    3#include <concepts>
    +
    4#include <array>
    +
    5#include <type_traits>
    +
    6
    +
    7namespace tz
    +
    8{
    +
    20 template<typename T, int N>
    +
    21 requires std::integral<T> || std::floating_point<T>
    +
    +
    22 struct vector
    +
    23 {
    +
    +
    25 static constexpr vector<T, N> zero()
    +
    26 {
    +
    27 return vector<T, N>::filled(T{0});
    +
    28 }
    +
    +
    29
    +
    +
    31 static constexpr vector<T, N> filled(T t)
    +
    32 {
    +
    33 std::array<T, N> values;
    +
    34 std::fill(values.begin(), values.end(), t);
    +
    35 return {values};
    +
    36 }
    +
    +
    37
    +
    42 template<typename... Ts>
    +
    43 requires(
    +
    44 sizeof...(Ts) <= N
    +
    45 && sizeof...(Ts) > 1
    +
    46 && std::is_convertible_v<std::tuple_element_t<0, std::tuple<Ts...>>, T>)
    +
    +
    47 constexpr vector(Ts&&... ts) :
    +
    48 arr({ std::forward<Ts>(ts)... }) {}
    +
    +
    52 constexpr vector(std::array<T, N> data): arr(data){}
    +
    56 vector() = default;
    +
    57 vector(const vector<T, N>& cpy) = default;
    +
    58 vector(vector<T, N>&& move) = default;
    +
    59 vector& operator=(const vector<T, N>& rhs) = default;
    +
    60 vector& operator=(vector<T, N>&& rhs) = default;
    +
    61
    +
    67 const T& operator[](std::size_t idx) const;
    +
    73 T& operator[](std::size_t idx);
    +
    74
    +
    75 // Multiply vector by scalar
    +
    76 vector<T, N>& operator*=(T scalar);
    +
    77 vector<T, N>& operator/=(T scalar);
    +
    78 vector<T, N> operator*(T scalar) const{auto cpy = *this; return cpy *= scalar;}
    +
    79 vector<T, N> operator/(T scalar) const{auto cpy = *this; return cpy /= scalar;}
    +
    80
    + + + + +
    89
    +
    91 vector<T, N> operator+(const vector<T, N>& rhs) const{auto cpy = *this; return cpy += rhs;}
    +
    93 vector<T, N> operator-(const vector<T, N>& rhs) const{auto cpy = *this; return cpy -= rhs;}
    +
    95 vector<T, N> operator*(const vector<T, N>& rhs) const{auto cpy = *this; return cpy *= rhs;}
    +
    97 vector<T, N> operator/(const vector<T, N>& rhs) const{auto cpy = *this; return cpy /= rhs;}
    +
    98
    +
    100 T length() const;
    +
    102 T dot(const vector<T, N>& rhs) const;
    +
    104 vector<T, N> cross(const vector<T, N>& rhs) const requires(N == 3);
    +
    105
    +
    107 bool operator==(const vector<T, N>& rhs) const = default;
    +
    108 private:
    +
    109 std::array<T, N> arr;
    +
    110 };
    +
    +
    111
    + + + + + + + + + + + + +
    172}
    +
    173
    +
    174#endif // TOPAZ_CORE_VECTOR_HPP
    +
    Represents the generic vector.
    Definition vector.hpp:23
    +
    T length() const
    Retrieve the magnitude of the vector.
    +
    bool operator==(const vector< T, N > &rhs) const =default
    Compare two vectors. Two vectors are equal if all of their components are exactly equal.
    +
    vector< T, N > cross(const vector< T, N > &rhs) const
    Retrieve a cross product between two three-dimensional vectors.
    +
    static constexpr vector< T, N > zero()
    Retrieve a vector filled with zeroes.
    Definition vector.hpp:25
    +
    vector< T, N > & operator-=(const vector< T, N > &rhs)
    Subtract one vector from another.
    +
    constexpr vector(std::array< T, N > data)
    Definition vector.hpp:52
    +
    vector< T, N > & operator+=(const vector< T, N > &rhs)
    Add one vector to another.
    +
    constexpr vector(Ts &&... ts)
    Definition vector.hpp:47
    +
    static constexpr vector< T, N > filled(T t)
    Retrieve a vector filled with the given value.
    Definition vector.hpp:31
    +
    vector()=default
    +
    vector< T, N > operator-(const vector< T, N > &rhs) const
    Subtract one vector from another.
    Definition vector.hpp:93
    +
    vector< T, N > operator*(const vector< T, N > &rhs) const
    Multiply one vector with another.
    Definition vector.hpp:95
    +
    T & operator[](std::size_t idx)
    +
    vector< T, N > & operator*=(const vector< T, N > &rhs)
    Multiply one vector with another.
    +
    const T & operator[](std::size_t idx) const
    +
    vector< T, N > & operator/=(const vector< T, N > &rhs)
    Divide one vector by another.
    +
    vector< T, N > operator+(const vector< T, N > &rhs) const
    Add one vector to another.
    Definition vector.hpp:91
    +
    T dot(const vector< T, N > &rhs) const
    Retrieve the dot (scalar) product of two vectors.
    +
    vector< T, N > operator/(const vector< T, N > &rhs) const
    Divide one vector by another.
    Definition vector.hpp:97
    +
    + + +
    + + diff --git a/window_8hpp_source.html b/window_8hpp_source.html new file mode 100644 index 0000000000..07218ae04a --- /dev/null +++ b/window_8hpp_source.html @@ -0,0 +1,196 @@ + + + + + + + +Topaz: /github/workspace/include/tz/os/window.hpp Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Topaz 5.0 +
    +
    Topaz Game Engine
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    window.hpp
    +
    +
    +
    1#ifndef TOPAZ_OS_WINDOW_HPP
    +
    2#define TOPAZ_OS_WINDOW_HPP
    +
    3#include "tz/core/handle.hpp"
    +
    4#include "tz/core/error.hpp"
    +
    5#include <string>
    +
    6
    +
    7namespace tz::os
    +
    8{
    +
    + +
    20 {
    +
    21 none = 0x00,
    + +
    25 maximised = 0b0010,
    +
    27 transparent = 0b0100,
    +
    29 invisible = 0b1000,
    +
    30 };
    +
    +
    31
    +
    32 constexpr window_flags operator|(window_flags lhs, window_flags rhs)
    +
    33 {
    +
    34 return static_cast<window_flags>(static_cast<int>(lhs) | static_cast<int>(rhs));
    +
    35 }
    +
    36
    +
    37 constexpr bool operator&(window_flags lhs, window_flags& rhs)
    +
    38 {
    +
    39 return static_cast<int>(lhs) & static_cast<int>(rhs);
    +
    40 }
    +
    41
    +
    + +
    47 {
    +
    49 std::string title = "Untitled";
    +
    51 unsigned int x = 0;
    +
    53 unsigned int y = 0;
    +
    55 unsigned int width = 800;
    +
    57 unsigned int height = 600;
    +
    59 window_flags flags = window_flags::none;
    +
    60 };
    +
    +
    61
    + +
    63
    + + +
    84
    + + +
    98
    + +
    108
    +
    116 unsigned int window_get_width();
    +
    124 unsigned int window_get_height();
    +
    130 void window_set_dimensions(unsigned int width, unsigned int height);
    +
    136 std::string window_get_title();
    +
    142 void window_set_title(std::string_view title);
    + + + + +
    171}
    +
    172
    +
    173#endif // TOPAZ_OS_WINDOW_HPP
    +
    Represents a generic opaque handle.
    Definition handle.hpp:32
    +
    error_code
    Error codes for Topaz.
    Definition error.hpp:13
    +
    window_handle get_window_handle()
    Retrieve a opaque handle corresponding to the underlying window native.
    +
    tz::error_code open_window(window_info winfo)
    Open a new window.
    +
    window_flags
    Optional behaviours/attributes when opening windows.
    Definition window.hpp:20
    +
    unsigned int window_get_width()
    Retrieve the width of the window, in pixels.
    +
    void window_set_dimensions(unsigned int width, unsigned int height)
    Set a new width and height for the open window.
    +
    tz::error_code close_window()
    Close a previously-opened window.
    +
    void window_show()
    Show the window as normal, even if it is currently maximised/minimised/fullscreen.
    +
    void window_set_title(std::string_view title)
    Set a new title for the open window.
    +
    void window_minimise()
    Minimise the window, causing it to no longer be visible until maximised/shown.
    +
    void window_fullscreen()
    Display the window in proper fullscreen.
    +
    bool window_is_open()
    Query as to whether a window has been opened that has not yet been closed.
    +
    void window_maximise()
    Maximise the window, causing it to cover the whole screen.
    +
    void window_update()
    Poll updates for a window, advancing input events etc.
    +
    unsigned int window_get_height()
    Retrieve the height of the window, in pixels.
    +
    std::string window_get_title()
    Retrieve the title of the window.
    +
    @ maximised
    Ignore the width and height provided within window_info and set set the window as maximised instead.
    Definition window.hpp:25
    +
    @ transparent
    When a pixel of the window's framebuffer is never drawn to, instead of being a clamped colour it is i...
    Definition window.hpp:27
    +
    @ centered_window
    Ignore the x and y coordinates provided within window_info and position the window approximately in t...
    Definition window.hpp:23
    +
    @ invisible
    When the window is "opened", it is completely invisible to the user. They won't see the window,...
    Definition window.hpp:29
    +
    Basic customisation of a newly-opened window.
    Definition window.hpp:47
    +
    unsigned int width
    Width of the window body, in pixels.
    Definition window.hpp:55
    +
    unsigned int x
    x-position of the window, in pixels.
    Definition window.hpp:51
    +
    unsigned int height
    Height of the window body, in pixels.
    Definition window.hpp:57
    +
    unsigned int y
    y-position of the window, in pixels.
    Definition window.hpp:53
    +
    std::string title
    Title of the window.
    Definition window.hpp:49
    +
    window_flags flags
    Some optional extra flags. See window_flags.
    Definition window.hpp:59
    +
    + + +
    + +