Showing preview only (3,885K chars total). Download the full file or copy to clipboard to get everything.
Repository: glampert/debug-draw
Branch: master
Commit: 623e351c4842
Files: 124
Total size: 3.7 MB
Directory structure:
gitextract_gyt1ey61/
├── .travis.yml
├── README.md
├── debug_draw.hpp
└── samples/
├── Makefile
├── README.md
├── gl3w/
│ ├── README.rst
│ ├── UNLICENSE
│ ├── gl3w_gen.py
│ ├── include/
│ │ └── GL/
│ │ ├── gl3w.h
│ │ └── glcorearb.h
│ └── src/
│ └── gl3w.cpp
├── sample_d3d11.cpp
├── sample_gl_core.cpp
├── sample_gl_core_multithreaded_explicit.cpp
├── sample_gl_core_multithreaded_tls.cpp
├── sample_gl_legacy.cpp
├── sample_null_renderer.cpp
├── samples_common.hpp
├── vectormath/
│ ├── LICENSE
│ ├── SSE/
│ │ └── cpp/
│ │ ├── boolInVec.h
│ │ ├── defines.h
│ │ ├── floatInVec.h
│ │ ├── mat_aos.h
│ │ ├── quat_aos.h
│ │ ├── vec_aos.h
│ │ ├── vecidx_aos.h
│ │ └── vectormath_aos.h
│ ├── c/
│ │ ├── vectormath_aos.h
│ │ ├── vectormath_aos_v.h
│ │ ├── vectormath_soa.h
│ │ └── vectormath_soa_v.h
│ ├── cpp/
│ │ ├── vectormath_aos.h
│ │ └── vectormath_soa.h
│ ├── ppu/
│ │ ├── c/
│ │ │ ├── mat_aos.h
│ │ │ ├── mat_aos_v.h
│ │ │ ├── mat_soa.h
│ │ │ ├── mat_soa_v.h
│ │ │ ├── quat_aos.h
│ │ │ ├── quat_aos_v.h
│ │ │ ├── quat_soa.h
│ │ │ ├── quat_soa_v.h
│ │ │ ├── vec_aos.h
│ │ │ ├── vec_aos_v.h
│ │ │ ├── vec_soa.h
│ │ │ ├── vec_soa_v.h
│ │ │ ├── vec_types.h
│ │ │ ├── vectormath_aos.h
│ │ │ ├── vectormath_aos_v.h
│ │ │ ├── vectormath_soa.h
│ │ │ └── vectormath_soa_v.h
│ │ └── cpp/
│ │ ├── boolInVec.h
│ │ ├── floatInVec.h
│ │ ├── mat_aos.h
│ │ ├── mat_soa.h
│ │ ├── quat_aos.h
│ │ ├── quat_soa.h
│ │ ├── vec_aos.h
│ │ ├── vec_soa.h
│ │ ├── vecidx_aos.h
│ │ ├── vectormath_aos.h
│ │ └── vectormath_soa.h
│ ├── scalar/
│ │ ├── c/
│ │ │ ├── mat_aos.h
│ │ │ ├── mat_aos_v.h
│ │ │ ├── quat_aos.h
│ │ │ ├── quat_aos_v.h
│ │ │ ├── vec_aos.h
│ │ │ ├── vec_aos_v.h
│ │ │ ├── vectormath_aos.h
│ │ │ └── vectormath_aos_v.h
│ │ └── cpp/
│ │ ├── mat_aos.h
│ │ ├── quat_aos.h
│ │ ├── vec_aos.h
│ │ └── vectormath_aos.h
│ ├── spu/
│ │ ├── c/
│ │ │ ├── mat_aos.h
│ │ │ ├── mat_aos_v.h
│ │ │ ├── mat_soa.h
│ │ │ ├── mat_soa_v.h
│ │ │ ├── quat_aos.h
│ │ │ ├── quat_aos_v.h
│ │ │ ├── quat_soa.h
│ │ │ ├── quat_soa_v.h
│ │ │ ├── vec_aos.h
│ │ │ ├── vec_aos_v.h
│ │ │ ├── vec_soa.h
│ │ │ ├── vec_soa_v.h
│ │ │ ├── vectormath_aos.h
│ │ │ ├── vectormath_aos_v.h
│ │ │ ├── vectormath_soa.h
│ │ │ └── vectormath_soa_v.h
│ │ └── cpp/
│ │ ├── boolInVec.h
│ │ ├── floatInVec.h
│ │ ├── mat_aos.h
│ │ ├── mat_soa.h
│ │ ├── quat_aos.h
│ │ ├── quat_soa.h
│ │ ├── vec_aos.h
│ │ ├── vec_soa.h
│ │ ├── vecidx_aos.h
│ │ ├── vectormath_aos.h
│ │ └── vectormath_soa.h
│ └── vectormath.h
└── vs2015/
├── ddSampleD3D11/
│ ├── ddSampleD3D11.filters
│ ├── ddSampleD3D11.sln
│ ├── ddSampleD3D11.vcxproj
│ └── ddShader.fx
├── ddSampleGLCore/
│ ├── ddSampleGLCore.sln
│ ├── ddSampleGLCore.vcxproj
│ └── ddSampleGLCore.vcxproj.filters
├── ddSampleGLLegacy/
│ ├── ddSampleGLCore.vcxproj
│ ├── ddSampleGLCore.vcxproj.filters
│ └── ddSampleGLLegacy.sln
├── ddSampleNullRenderer/
│ ├── ddSampleNullRenderer.sln
│ ├── ddSampleNullRenderer.vcxproj
│ └── ddSampleNullRenderer.vcxproj.filters
├── glfw-3.2-WIN32/
│ ├── COPYING.txt
│ ├── include/
│ │ └── GLFW/
│ │ ├── glfw3.h
│ │ └── glfw3native.h
│ └── lib-vc2015/
│ ├── glfw3.lib
│ └── glfw3dll.lib
└── glfw-3.2-WIN64/
├── COPYING.txt
├── include/
│ └── GLFW/
│ ├── glfw3.h
│ └── glfw3native.h
└── lib-vc2015/
├── glfw3.lib
└── glfw3dll.lib
================================================
FILE CONTENTS
================================================
================================================
FILE: .travis.yml
================================================
language: cpp
os:
- linux
- osx
compiler:
- gcc
- clang
before_install:
# GCC update for linux, to ensure C++11 support.
- if [ $TRAVIS_OS_NAME == linux ]; then
sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test;
sudo apt-get update -qq;
fi
# GLFW install on linux:
- if [ $TRAVIS_OS_NAME == linux ]; then
sudo add-apt-repository -y ppa:pyglfw/pyglfw;
sudo apt-get update -qq;
sudo apt-get install -y --no-install-recommends libglfw3-dev libxrandr-dev libxi-dev libxxf86vm-dev;
fi
# GLFW install on MacOS: (make sure brew can install GLFW in usr/local)
- if [ $TRAVIS_OS_NAME == osx ]; then
sudo chown -R $(whoami) /usr/local;
brew update;
brew install glfw3;
fi
install:
# Finish the GCC install for linux:
- if [ $TRAVIS_OS_NAME == linux ]; then
sudo apt-get install -qq g++-5;
export CXX="g++-5";
export CC="gcc-5";
fi
script:
- $CXX --version
- make -C samples
================================================
FILE: README.md
================================================
# Debug Draw
[](https://travis-ci.org/glampert/debug-draw)
An immediate-mode, renderer agnostic, lightweight debug drawing API for C++.

## License
This software is in the public domain. Where that dedication is not recognized,
you are granted a perpetual, irrevocable license to copy, distribute, and modify
the source code as you see fit.
The source code is provided "as is", without warranty of any kind, express or implied.
No attribution is required, but a mention about the author(s) is appreciated.
## Using Debug Draw
Debug Draw is a single source file library, so the "header" forward declarations and
the implementation are contained in the same file (`debug_draw.hpp`). This should facilitate
deployment and integration with your own projects. All you have to do is `#include` the library
file in one of your own source files and define `DEBUG_DRAW_IMPLEMENTATION` in that
file to generate the implementation. You can also still include the library in other
places. When `DEBUG_DRAW_IMPLEMENTATION` is not defined, it acts as a normal C++ header file.
Example:
In `my_program.cpp`:
```cpp
#define DEBUG_DRAW_IMPLEMENTATION
#include "debug_draw.hpp"
```
Now in `my_program.hpp` or any other header or source file,
you can include it as a normal C++ header:
```cpp
#include "debug_draw.hpp"
```
That's it, you should now be able to build Debug Draw into your own application.
### Interfacing with your renderer
Debug Draw doesn't make assumptions about the underlaying renderer API, so it can be
integrated very easily with Direct3D or OpenGL or any other rendering engine of
your choice. All that is required is that you provide an implementation for the
`dd::RenderInterface` abstract class, which provides Debug Draw with basic methods
to draw points, lines and character glyphs. The following is what `dd::RenderInterface` looks like:
```cpp
class RenderInterface
{
public:
virtual void beginDraw();
virtual void endDraw();
virtual GlyphTextureHandle createGlyphTexture(int width, int height, const void * pixels);
virtual void destroyGlyphTexture(GlyphTextureHandle glyphTex);
virtual void drawPointList(const DrawVertex * points, int count, bool depthEnabled);
virtual void drawLineList(const DrawVertex * lines, int count, bool depthEnabled);
virtual void drawGlyphList(const DrawVertex * glyphs, int count, GlyphTextureHandle glyphTex);
virtual ~RenderInterface() = 0;
};
```
Not all methods have to be implemented, you decide which features to support!
Look into the source code for the declaration of `RenderInterface`. Each method is
well commented and describes the expected behavior that you should implement.
For reference implementations of the `RenderInterface` using standard APIs like OpenGL,
refer to the `samples/` directory in this project.
Once you implement a `RenderInterface` for your renderer, all you need to do before starting
to use Debug Draw is to call `dd::initialize()` passing it a pointer to your custom `RenderInterface`:
```cpp
MyRenderInterface renderIface;
dd::initialize(&renderIface);
```
Note however that Debug Draw batches all primitives to reduce the number of calls to `RenderInterface`,
so drawing will only actually take place by the time you call `dd::flush()`, which is normally done
at the end of a frame, before flipping the screen buffers:
```cpp
// You only have to pass the current time if you have timed debug
// draws in the queues. Otherwise just omit the argument or pass 0.
dd::flush(getTimeMilliseconds());
```
So the overall setup should look something like the following:
```cpp
class MyRenderInterface : public dd::RenderInterface
{
// Cherrypick the methods you want to implement or implement them all
...
};
int main()
{
MyRenderInterface renderIface;
dd::initialize(&renderIface);
while (!quitting)
{
// Any other drawing that you already do
...
// Call any dd:: functions to add debug primitives to the draw queues
...
dd::flush(getTimeMilliseconds());
// Swap buffers to present the scene
...
}
dd::shutdown();
}
```
### Configuration switches
Debug Draw provides several compiler switches for library configuration and customization.
Check the documentation in `debug_draw.hpp` for a list of all switches plus detailed description of each.
### Language/compiler requirements
The library has very few language requirements. One of its main goals is to be painless to integrate
and portable. The only requirement is a fairly recent C++ compiler with minimal Standard Library support.
Some C++11 features are assumed, such as `nullptr` and `<cstdint>`. The samples included make heavier use
of the C++ Standard Library to demonstrate Debug Draw usage with threads.
RTTI and C++ Exceptions **are not used**, so you should have no problems integrating
the library with projects that disable those features.
The memory footprint is also small and you can manage the amount of memory that gets committed
to the internal queues via preprocessor directives. We currently only allocate a small amount of
dynamic memory at library startup to decompress the font glyphs for the debug text drawing functions
and for the draw queues and library context data.
### Thread safety and explicit contexts
By default, Debug Draw will use a static global context internally, providing a procedural-style API that
*is not thread safe*. This is the "classic" Debug Draw mode that is the easiest to use and set up, but
the library also supports two other modes that are thread safe and configurable at compile time:
- `DEBUG_DRAW_PER_THREAD_CONTEXT`: If this is defined before the implementation, the library will use
a thread-local context instead of the global shared default. This allows calling the library from
different threads since each will keep its private context and draw queues. This mode provides
the same public library interface but requires TLS (Thread Local Storage) support from the compiler.
- `DEBUG_DRAW_EXPLICIT_CONTEXT`: If this is defined before the implementation, the library expects the
user to supply a handle to a context. This mode exposes the `dd::ContextHandle` type and changes each
function in the library to take this handle as the first argument. This mode makes the library fully
stateless, so that each rendering thread that calls into the library can create and maintain its own
instance of Debug Draw.
The explicit context mode is a cleaner and more functional-style API and should be the preferred one for new users.
The procedural mode is still kept as the default for compatibility with older library versions, but it is
recommended that you use the explicit context mode by adding `#define DEBUG_DRAW_EXPLICIT_CONTEXT` together
with `DEBUG_DRAW_IMPLEMENTATION`. In the future, the procedural stateful API will be deprecated in favor of the explicit one.
## Samples
Drawing a box with a set of coordinate axes in its center:
```cpp
const ddVec3 boxColor = { 0.0f, 0.8f, 0.8f };
const ddVec3 boxCenter = { 0.0f, 0.0f, 3.0f };
dd::box(boxCenter, boxColor, 1.5f, 1.5f, 1.5f);
dd::cross(boxCenter, 1.0f);
```

To visualize a matrix transform, you can use `dd::axisTriad()`
to draw the transform as three arrows:
```cpp
const ddMat4x4 transform = { // The identity matrix
1.0f, 0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f,
0.0f, 0.0f, 0.0f, 1.0f
};
dd::axisTriad(transform, 0.3f, 2.0f);
```

More complex samples and examples on how to integrate Debug Draw with your own renderer can
be found inside the `samples/` directory. Each function provided in the public API is also well
documented in the header file. You will find a descriptive header comment before
the prototype of each public function exported by the library.
================================================
FILE: debug_draw.hpp
================================================
// ================================================================================================
// -*- C++ -*-
// File: debug_draw.hpp
// Author: Guilherme R. Lampert
// Brief: Debug Draw - an immediate-mode, renderer agnostic, lightweight debug drawing API.
// ================================================================================================
#ifndef DEBUG_DRAW_HPP
#define DEBUG_DRAW_HPP
// ========================================================
// Library Overview:
// ========================================================
//
// ---------
// LICENSE
// ---------
// This software is in the public domain. Where that dedication is not recognized,
// you are granted a perpetual, irrevocable license to copy, distribute, and modify
// this file as you see fit.
//
// The source code is provided "as is", without warranty of any kind, express or implied.
// No attribution is required, but a mention about the author(s) is appreciated.
//
// -------------
// QUICK SETUP
// -------------
// In *one* C++ source file, *before* including this file, do this:
//
// #define DEBUG_DRAW_IMPLEMENTATION
//
// To enable the implementation. Further includes of this
// file *should not* redefine DEBUG_DRAW_IMPLEMENTATION.
// Example:
//
// In my_program.cpp:
//
// #define DEBUG_DRAW_IMPLEMENTATION
// #include "debug_draw.hpp"
//
// In my_program.hpp:
//
// #include "debug_draw.hpp"
//
// ----------------------
// COMPILATION SWITCHES
// ----------------------
//
// DEBUG_DRAW_CXX11_SUPPORTED
// Enables the use of some C++11 features. If your compiler supports C++11
// or better, you should define this switch globally or before every inclusion
// of this file. If it is not defined, we try to guess it from the value of the
// '__cplusplus' built-in macro constant.
//
// DEBUG_DRAW_MAX_*
// Sizes of internal intermediate buffers, which are allocated on initialization
// by the implementation. If you need to draw more primitives than the sizes of
// these buffers, you need to redefine the macros and recompile.
//
// DEBUG_DRAW_VERTEX_BUFFER_SIZE
// Size in dd::DrawVertex elements of the intermediate vertex buffer used
// to batch primitives before sending them to dd::RenderInterface. A bigger
// buffer will reduce the number of calls to dd::RenderInterface when drawing
// large sets of debug primitives.
//
// DEBUG_DRAW_OVERFLOWED(message)
// An error handler called if any of the DEBUG_DRAW_MAX_* sizes overflow.
// By default it just prints a message to stderr.
//
// DEBUG_DRAW_USE_STD_MATH
// If defined to nonzero, uses cmath/math.h. If you redefine it to zero before
// the library implementation, it will force the use of local replacements
// for the Standard Library. This might be useful if you want to avoid the
// dependency. It is defined to zero by default (i.e. we use cmath by default).
//
// DEBUG_DRAW_*_TYPE_DEFINED
// The compound types used by Debug Draw can also be customized.
// By default, ddVec3 and ddMat4x4 are plain C-arrays, but you can
// redefine them to use your own classes or structures (see below).
// ddStr is by default a std::string, but you can redefine it to
// a custom string type if necessary. The only requirements are that
// it provides a 'c_str()' method returning a null terminated
// const char* string and an assignment operator (=).
//
// DEBUG_DRAW_STR_DEALLOC_FUNC(str)
// If you define a custom string type for ddStr and it requires some
// extra cleanup besides the class destructor, you might define this
// function macro to perform said cleanup. It is called by dd::clear()
// and dd::shutdown() on every instance of the internal DebugString buffer.
//
// DEBUG_DRAW_NO_DEFAULT_COLORS
// If defined, doesn't add the set of predefined color constants inside
// dd::colors:: namespace. Each color is a ddVec3, so you can define this
// to prevent adding more global data to the binary if you don't need them.
//
// DEBUG_DRAW_PER_THREAD_CONTEXT
// If defined, a per-thread global context will be created for Debug Draw.
// This allows having an instance of the library for each thread in
// your application. You must then call initialize/shutdown/flush/etc
// for each thread that wishes to use the library. If this is not
// defined it defaults to a single threaded global context.
//
// DEBUG_DRAW_EXPLICIT_CONTEXT
// If defined, each Debug Draw function will expect and additional argument
// (the first one) which is the library context instance. This is an alternative
// to DEBUG_DRAW_PER_THREAD_CONTEXT to allow having multiple instances of the
// library in the same application. This flag is mutually exclusive with
// DEBUG_DRAW_PER_THREAD_CONTEXT.
//
// -------------------
// MEMORY ALLOCATION
// -------------------
// Debug Draw will only perform a couple of memory allocations during startup to decompress
// the built-in glyph bitmap used for debug text rendering and to allocate the vertex buffers
// and intermediate draw/batch buffers and context data used internally.
//
// Memory allocation and deallocation for Debug Draw will be done via:
//
// DD_MALLOC(size)
// DD_MFREE(ptr)
//
// These two macros can be redefined if you'd like to supply you own memory allocator.
// By default, they are defined to use std::malloc and std::free, respectively.
// Note: If you redefine one, you must also provide the other.
//
// --------------------------------
// INTERFACING WITH YOUR RENDERER
// --------------------------------
// Debug Draw doesn't touch on any renderer-specific aspects or APIs, instead you provide
// the library with all of it's rendering needs via the dd::RenderInterface abstract class.
//
// See the declaration of dd::RenderInterface for details. Not all methods are
// required. In fact, you could also implement a full no-op RenderInterface that
// disables debug drawing by simply inheriting from dd::RenderInterface and not overriding
// any of the methods (or even easier, call dd::initialize(nullptr) to make everything a no-op).
//
// For examples on how to implement your own dd::RenderInterface, see the accompanying samples.
// You can also find them in the source code repository for this project:
// https://github.com/glampert/debug-draw
//
// ------------------
// CONVENTIONS USED
// ------------------
// Points and lines are always specified in world-space positions. This also
// applies to shapes drawn from lines, like boxes, spheres, cones, etc.
//
// 2D screen-text is in screen-space pixels (from 0,0 in the upper-left
// corner of the screen to screen_width-1 and screen_height-1).
// RenderInterface::drawGlyphList() also receives vertexes in screen-space.
//
// We make some usage of matrices for things like the projected text labels.
// Matrix layout used is column-major and vectors multiply as columns.
// This is the convention normally used by standard OpenGL.
//
// C++ Exceptions are not used. Little error checking is provided or
// done inside the library. We favor simpler, faster and easier to maintain
// code over more sophisticated error handling. The rationale is that a
// debug drawing API doesn't have to be very robust, since it won't make
// into the final release executable in most cases.
//
// ========================================================
// Configurable compilation switches:
// ========================================================
//
// If the user didn't specify if C++11 or above are supported, try to guess
// from the value of '__cplusplus'. It should be 199711L for pre-C++11 compilers
// and 201103L in those supporting C++11, but this is not a guarantee that all
// C++11 features will be available and stable, so again, we are making a guess.
// It is recommended to instead supply the DEBUG_DRAW_CXX11_SUPPORTED switch
// yourself before including this file.
//
#ifndef DEBUG_DRAW_CXX11_SUPPORTED
#if (__cplusplus > 199711L)
#define DEBUG_DRAW_CXX11_SUPPORTED 1
#endif // __cplusplus
#endif // DEBUG_DRAW_CXX11_SUPPORTED
//
// Max elements of each type at any given time.
// We supply these reasonable defaults, but you can provide your
// own tunned values to save memory or fit all of your debug data.
// These are hard constraints. If not enough, change and recompile.
//
#ifndef DEBUG_DRAW_MAX_STRINGS
#define DEBUG_DRAW_MAX_STRINGS 512
#endif // DEBUG_DRAW_MAX_STRINGS
#ifndef DEBUG_DRAW_MAX_POINTS
#define DEBUG_DRAW_MAX_POINTS 8192
#endif // DEBUG_DRAW_MAX_POINTS
#ifndef DEBUG_DRAW_MAX_LINES
#define DEBUG_DRAW_MAX_LINES 32768
#endif // DEBUG_DRAW_MAX_LINES
//
// Size in vertexes of a local buffer we use to sort elements
// drawn with and without depth testing before submitting them to
// the dd::RenderInterface. A larger buffer will require less flushes
// (e.g. dd::RenderInterface calls) when drawing large amounts of
// primitives. Less will obviously save more memory. Each DrawVertex
// is about 32 bytes in size, we keep a context-specific array
// with this many entries.
//
#ifndef DEBUG_DRAW_VERTEX_BUFFER_SIZE
#define DEBUG_DRAW_VERTEX_BUFFER_SIZE 4096
#endif // DEBUG_DRAW_VERTEX_BUFFER_SIZE
//
// This macro is called with an error message if any of the above
// sizes is overflowed during runtime. In a debug build, you might
// keep this enabled to be able to log and find out if more space
// is needed for the debug data arrays. Default output is stderr.
//
#ifndef DEBUG_DRAW_OVERFLOWED
#include <cstdio>
#define DEBUG_DRAW_OVERFLOWED(message) std::fprintf(stderr, "%s\n", message)
#endif // DEBUG_DRAW_OVERFLOWED
//
// Use <math.h> and <float.h> for trigonometry functions by default.
// If you wish to avoid those dependencies, DD provides local approximations
// of the required functions as a portable replacement. Just define
// DEBUG_DRAW_USE_STD_MATH to zero before including this file.
//
#ifndef DEBUG_DRAW_USE_STD_MATH
#define DEBUG_DRAW_USE_STD_MATH 1
#endif // DEBUG_DRAW_USE_STD_MATH
// ========================================================
// Overridable Debug Draw types:
// ========================================================
#include <cstddef>
#include <cstdint>
//
// Following typedefs are not members of the dd:: namespace to allow easy redefinition by the user.
// If you provide a custom implementation for them before including this file, be sure to
// also define the proper DEBUG_DRAW_*_TYPE_DEFINED switch to disable the default typedefs.
//
// The only requirement placed on the vector/matrix types is that they provide
// an array subscript operator [] and have the expected number of elements. Apart
// from that, they could be structs, classes, what-have-you. POD types are recommended
// but not mandatory.
//
#ifndef DEBUG_DRAW_VEC3_TYPE_DEFINED
// ddVec3:
// A small array of floats with at least three elements, but
// it could have more for alignment purposes, extra slots are ignored.
// A custom ddVec3 type must provide the array subscript operator.
typedef float ddVec3[3];
// ddVec3_In/ddVec3_Out:
// Since our default ddVec3 is a plain C-array, it decays to a pointer
// when passed as an input parameter to a function, so we can use it directly.
// If you change it to some structured type, it might be more efficient
// passing by const reference instead, however, some platforms have optimized
// hardware registers for vec3s/vec4s, so passing by value might also be efficient.
typedef const ddVec3 ddVec3_In;
typedef ddVec3 ddVec3_Out;
#define DEBUG_DRAW_VEC3_TYPE_DEFINED 1
#endif // DEBUG_DRAW_VEC3_TYPE_DEFINED
#ifndef DEBUG_DRAW_MAT4X4_TYPE_DEFINED
// ddMat4x4:
// Homogeneous matrix of 16 floats, representing rotations as well as
// translation/scaling and projections. The internal matrix layout used by this
// library is COLUMN-MAJOR, vectors multiplying as columns (usual OpenGL convention).
// Column-major matrix layout:
// c.0 c.1 c.2 c.3
// r.0 | 0.x 4.x 8.x 12.x |
// r.1 | 1.y 5.y 9.y 13.y |
// r.2 | 2.z 6.z 10.z 14.z |
// r.3 | 3.w 7.w 11.w 15.w |
// If your custom matrix type uses row-major format internally, you'll
// have to transpose them before passing your matrices to the DD functions.
// We use the array subscript operator internally, so it must also be provided.
typedef float ddMat4x4[4 * 4];
// ddMat4x4_In/ddMat4x4_Out:
// Since our default ddMat4x4 is a plain C-array, it decays to a pointer
// when passed as an input parameter to a function, so we can use it directly.
// If you change it to some structured type, it might be more efficient
// passing by const reference instead.
typedef const ddMat4x4 ddMat4x4_In;
typedef ddMat4x4 ddMat4x4_Out;
#define DEBUG_DRAW_MAT4X4_TYPE_DEFINED 1
#endif // DEBUG_DRAW_MAT4X4_TYPE_DEFINED
#ifndef DEBUG_DRAW_STRING_TYPE_DEFINED
// ddStr:
// String type used internally to store the debug text strings.
// A custom string type must provide at least an assignment
// operator (=) and a 'c_str()' method that returns a
// null-terminated const char* string pointer. That's it.
// An array subscript operator [] is not required for ddStr.
#include <string>
typedef std::string ddStr;
typedef const ddStr & ddStr_In;
typedef ddStr & ddStr_Out;
#define DEBUG_DRAW_STRING_TYPE_DEFINED 1
#endif // DEBUG_DRAW_STRING_TYPE_DEFINED
namespace dd
{
// ========================================================
// Optional built-in colors in RGB float format:
// ========================================================
#ifndef DEBUG_DRAW_NO_DEFAULT_COLORS
namespace colors
{
extern const ddVec3 AliceBlue;
extern const ddVec3 AntiqueWhite;
extern const ddVec3 Aquamarine;
extern const ddVec3 Azure;
extern const ddVec3 Beige;
extern const ddVec3 Bisque;
extern const ddVec3 Black;
extern const ddVec3 BlanchedAlmond;
extern const ddVec3 Blue;
extern const ddVec3 BlueViolet;
extern const ddVec3 Brown;
extern const ddVec3 BurlyWood;
extern const ddVec3 CadetBlue;
extern const ddVec3 Chartreuse;
extern const ddVec3 Chocolate;
extern const ddVec3 Coral;
extern const ddVec3 CornflowerBlue;
extern const ddVec3 Cornsilk;
extern const ddVec3 Crimson;
extern const ddVec3 Cyan;
extern const ddVec3 DarkBlue;
extern const ddVec3 DarkCyan;
extern const ddVec3 DarkGoldenRod;
extern const ddVec3 DarkGray;
extern const ddVec3 DarkGreen;
extern const ddVec3 DarkKhaki;
extern const ddVec3 DarkMagenta;
extern const ddVec3 DarkOliveGreen;
extern const ddVec3 DarkOrange;
extern const ddVec3 DarkOrchid;
extern const ddVec3 DarkRed;
extern const ddVec3 DarkSalmon;
extern const ddVec3 DarkSeaGreen;
extern const ddVec3 DarkSlateBlue;
extern const ddVec3 DarkSlateGray;
extern const ddVec3 DarkTurquoise;
extern const ddVec3 DarkViolet;
extern const ddVec3 DeepPink;
extern const ddVec3 DeepSkyBlue;
extern const ddVec3 DimGray;
extern const ddVec3 DodgerBlue;
extern const ddVec3 FireBrick;
extern const ddVec3 FloralWhite;
extern const ddVec3 ForestGreen;
extern const ddVec3 Gainsboro;
extern const ddVec3 GhostWhite;
extern const ddVec3 Gold;
extern const ddVec3 GoldenRod;
extern const ddVec3 Gray;
extern const ddVec3 Green;
extern const ddVec3 GreenYellow;
extern const ddVec3 HoneyDew;
extern const ddVec3 HotPink;
extern const ddVec3 IndianRed;
extern const ddVec3 Indigo;
extern const ddVec3 Ivory;
extern const ddVec3 Khaki;
extern const ddVec3 Lavender;
extern const ddVec3 LavenderBlush;
extern const ddVec3 LawnGreen;
extern const ddVec3 LemonChiffon;
extern const ddVec3 LightBlue;
extern const ddVec3 LightCoral;
extern const ddVec3 LightCyan;
extern const ddVec3 LightGoldenYellow;
extern const ddVec3 LightGray;
extern const ddVec3 LightGreen;
extern const ddVec3 LightPink;
extern const ddVec3 LightSalmon;
extern const ddVec3 LightSeaGreen;
extern const ddVec3 LightSkyBlue;
extern const ddVec3 LightSlateGray;
extern const ddVec3 LightSteelBlue;
extern const ddVec3 LightYellow;
extern const ddVec3 Lime;
extern const ddVec3 LimeGreen;
extern const ddVec3 Linen;
extern const ddVec3 Magenta;
extern const ddVec3 Maroon;
extern const ddVec3 MediumAquaMarine;
extern const ddVec3 MediumBlue;
extern const ddVec3 MediumOrchid;
extern const ddVec3 MediumPurple;
extern const ddVec3 MediumSeaGreen;
extern const ddVec3 MediumSlateBlue;
extern const ddVec3 MediumSpringGreen;
extern const ddVec3 MediumTurquoise;
extern const ddVec3 MediumVioletRed;
extern const ddVec3 MidnightBlue;
extern const ddVec3 MintCream;
extern const ddVec3 MistyRose;
extern const ddVec3 Moccasin;
extern const ddVec3 NavajoWhite;
extern const ddVec3 Navy;
extern const ddVec3 OldLace;
extern const ddVec3 Olive;
extern const ddVec3 OliveDrab;
extern const ddVec3 Orange;
extern const ddVec3 OrangeRed;
extern const ddVec3 Orchid;
extern const ddVec3 PaleGoldenRod;
extern const ddVec3 PaleGreen;
extern const ddVec3 PaleTurquoise;
extern const ddVec3 PaleVioletRed;
extern const ddVec3 PapayaWhip;
extern const ddVec3 PeachPuff;
extern const ddVec3 Peru;
extern const ddVec3 Pink;
extern const ddVec3 Plum;
extern const ddVec3 PowderBlue;
extern const ddVec3 Purple;
extern const ddVec3 RebeccaPurple;
extern const ddVec3 Red;
extern const ddVec3 RosyBrown;
extern const ddVec3 RoyalBlue;
extern const ddVec3 SaddleBrown;
extern const ddVec3 Salmon;
extern const ddVec3 SandyBrown;
extern const ddVec3 SeaGreen;
extern const ddVec3 SeaShell;
extern const ddVec3 Sienna;
extern const ddVec3 Silver;
extern const ddVec3 SkyBlue;
extern const ddVec3 SlateBlue;
extern const ddVec3 SlateGray;
extern const ddVec3 Snow;
extern const ddVec3 SpringGreen;
extern const ddVec3 SteelBlue;
extern const ddVec3 Tan;
extern const ddVec3 Teal;
extern const ddVec3 Thistle;
extern const ddVec3 Tomato;
extern const ddVec3 Turquoise;
extern const ddVec3 Violet;
extern const ddVec3 Wheat;
extern const ddVec3 White;
extern const ddVec3 WhiteSmoke;
extern const ddVec3 Yellow;
extern const ddVec3 YellowGreen;
} // namespace colors
#endif // DEBUG_DRAW_NO_DEFAULT_COLORS
// ========================================================
// Optional explicit context mode:
// ========================================================
#ifdef DEBUG_DRAW_EXPLICIT_CONTEXT
struct OpaqueContextType { };
typedef OpaqueContextType * ContextHandle;
#define DD_EXPLICIT_CONTEXT_ONLY(...) __VA_ARGS__
#else // !DEBUG_DRAW_EXPLICIT_CONTEXT
#define DD_EXPLICIT_CONTEXT_ONLY(...) /* nothing */
#endif // DEBUG_DRAW_EXPLICIT_CONTEXT
// ========================================================
// Debug Draw functions:
// - Durations are always in milliseconds.
// - Colors are RGB floats in the [0,1] range.
// - Positions are in world-space, unless stated otherwise.
// ========================================================
// Add a point in 3D space to the debug draw queue.
// Point is expressed in world-space coordinates.
// Note that not all renderer support configurable point
// size, so take the 'size' parameter as a hint only
void point(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,)
ddVec3_In pos,
ddVec3_In color,
float size = 1.0f,
int durationMillis = 0,
bool depthEnabled = true);
// Add a 3D line to the debug draw queue. Note that
// lines are expressed in world coordinates, and so are
// all wireframe primitives which are built from lines.
void line(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,)
ddVec3_In from,
ddVec3_In to,
ddVec3_In color,
int durationMillis = 0,
bool depthEnabled = true);
// Add a 2D text string as an overlay to the current view, using a built-in font.
// Position is in screen-space pixels, origin at the top-left corner of the screen.
// The third element (Z) of the position vector is ignored.
// Note: Newlines and tabs are handled (1 tab = 4 spaces).
void screenText(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,)
const char * str,
ddVec3_In pos,
ddVec3_In color,
float scaling = 1.0f,
int durationMillis = 0);
// Add a 3D text label centered at the given world position that
// gets projected to screen-space. The label always faces the viewer.
// sx/sy, sw/sh are the viewport coordinates/size, in pixels.
// 'vpMatrix' is the view * projection transform to map the text from 3D to 2D.
void projectedText(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,)
const char * str,
ddVec3_In pos,
ddVec3_In color,
ddMat4x4_In vpMatrix,
int sx, int sy,
int sw, int sh,
float scaling = 1.0f,
int durationMillis = 0);
// Add a set of three coordinate axis depicting the position and orientation of the given transform.
// 'size' defines the size of the arrow heads. 'length' defines the length of the arrow's base line.
void axisTriad(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,)
ddMat4x4_In transform,
float size,
float length,
int durationMillis = 0,
bool depthEnabled = true);
// Add a 3D line with an arrow-like end to the debug draw queue.
// 'size' defines the arrow head size. 'from' and 'to' the length of the arrow's base line.
void arrow(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,)
ddVec3_In from,
ddVec3_In to,
ddVec3_In color,
float size,
int durationMillis = 0,
bool depthEnabled = true);
// Add an axis-aligned cross (3 lines converging at a point) to the debug draw queue.
// 'length' defines the length of the crossing lines.
// 'center' is the world-space point where the lines meet.
void cross(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,)
ddVec3_In center,
float length,
int durationMillis = 0,
bool depthEnabled = true);
// Add a wireframe circle to the debug draw queue.
void circle(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,)
ddVec3_In center,
ddVec3_In planeNormal,
ddVec3_In color,
float radius,
float numSteps,
int durationMillis = 0,
bool depthEnabled = true);
// Add a wireframe plane in 3D space to the debug draw queue.
// If 'normalVecScale' is not zero, a line depicting the plane normal is also draw.
void plane(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,)
ddVec3_In center,
ddVec3_In planeNormal,
ddVec3_In planeColor,
ddVec3_In normalVecColor,
float planeScale,
float normalVecScale,
int durationMillis = 0,
bool depthEnabled = true);
// Add a wireframe sphere to the debug draw queue.
void sphere(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,)
ddVec3_In center,
ddVec3_In color,
float radius,
int durationMillis = 0,
bool depthEnabled = true);
// Add a wireframe cone to the debug draw queue.
// The cone 'apex' is the point where all lines meet.
// The length of the 'dir' vector determines the thickness.
// 'baseRadius' & 'apexRadius' are in degrees.
void cone(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,)
ddVec3_In apex,
ddVec3_In dir,
ddVec3_In color,
float baseRadius,
float apexRadius,
int durationMillis = 0,
bool depthEnabled = true);
// Wireframe box from the eight points that define it.
void box(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,)
const ddVec3 points[8],
ddVec3_In color,
int durationMillis = 0,
bool depthEnabled = true);
// Add a wireframe box to the debug draw queue.
void box(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,)
ddVec3_In center,
ddVec3_In color,
float width,
float height,
float depth,
int durationMillis = 0,
bool depthEnabled = true);
// Add a wireframe Axis Aligned Bounding Box (AABB) to the debug draw queue.
void aabb(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,)
ddVec3_In mins,
ddVec3_In maxs,
ddVec3_In color,
int durationMillis = 0,
bool depthEnabled = true);
// Add a wireframe frustum pyramid to the debug draw queue.
// 'invClipMatrix' is the inverse of the matrix defining the frustum
// (AKA clip) volume, which normally consists of the projection * view matrix.
// E.g.: inverse(projMatrix * viewMatrix)
void frustum(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,)
ddMat4x4_In invClipMatrix,
ddVec3_In color,
int durationMillis = 0,
bool depthEnabled = true);
// Add a vertex normal for debug visualization.
// The normal vector 'normal' is assumed to be already normalized.
void vertexNormal(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,)
ddVec3_In origin,
ddVec3_In normal,
float length,
int durationMillis = 0,
bool depthEnabled = true);
// Add a "tangent basis" at a given point in world space.
// Color scheme used is: normal=WHITE, tangent=YELLOW, bi-tangent=MAGENTA.
// The normal vector, tangent and bi-tangent vectors are assumed to be already normalized.
void tangentBasis(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,)
ddVec3_In origin,
ddVec3_In normal,
ddVec3_In tangent,
ddVec3_In bitangent,
float lengths,
int durationMillis = 0,
bool depthEnabled = true);
// Makes a 3D square grid of lines along the X and Z planes.
// 'y' defines the height in the Y axis where the grid is placed.
// The grid will go from 'mins' to 'maxs' units in both the X and Z.
// 'step' defines the gap between each line of the grid.
void xzSquareGrid(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,)
float mins,
float maxs,
float y,
float step,
ddVec3_In color,
int durationMillis = 0,
bool depthEnabled = true);
// Add a wireframe capsule to the debug draw queue.
void capsule(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,)
ddVec3_In center,
ddVec3_In axis,
float length,
float radius,
ddVec3_In color,
const int durationMillis = 0,
const bool depthEnabled = true);
// ========================================================
// Debug Draw vertex type:
// The only drawing type the user has to interface with.
// ========================================================
union DrawVertex
{
struct
{
float x, y, z;
float r, g, b;
float size;
} point;
struct
{
float x, y, z;
float r, g, b;
} line;
struct
{
float x, y;
float u, v;
float r, g, b;
} glyph;
};
//
// Opaque handle to a texture object.
// Used by the debug text drawing functions.
//
struct OpaqueTextureType { };
typedef OpaqueTextureType * GlyphTextureHandle;
// ========================================================
// Debug Draw rendering callbacks:
// Implementation is provided by the user so we don't
// tie this code directly to a specific rendering API.
// ========================================================
class RenderInterface
{
public:
//
// These are called by dd::flush() before any drawing and after drawing is finished.
// User can override these to perform any common setup for subsequent draws and to
// cleanup afterwards. By default, no-ops stubs are provided.
//
virtual void beginDraw();
virtual void endDraw();
//
// Create/free the glyph bitmap texture used by the debug text drawing functions.
// The debug renderer currently only creates one of those on startup.
//
// You're not required to implement these two if you don't care about debug text drawing.
// Default no-op stubs are provided by default, which disable debug text rendering.
//
// Texture dimensions are in pixels, data format is always 8-bits per pixel (Grayscale/GL_RED).
// The pixel values range from 255 for a pixel within a glyph to 0 for a transparent pixel.
// If createGlyphTexture() returns null, the renderer will disable all text drawing functions.
//
virtual GlyphTextureHandle createGlyphTexture(int width, int height, const void * pixels);
virtual void destroyGlyphTexture(GlyphTextureHandle glyphTex);
//
// Batch drawing methods for the primitives used by the debug renderer.
// If you don't wish to support a given primitive type, don't override the method.
//
virtual void drawPointList(const DrawVertex * points, int count, bool depthEnabled);
virtual void drawLineList(const DrawVertex * lines, int count, bool depthEnabled);
virtual void drawGlyphList(const DrawVertex * glyphs, int count, GlyphTextureHandle glyphTex);
// User defined cleanup. Nothing by default.
virtual ~RenderInterface() = 0;
};
// ========================================================
// Housekeeping functions:
// ========================================================
// Flags for dd::flush()
enum FlushFlags
{
FlushPoints = 1 << 1,
FlushLines = 1 << 2,
FlushText = 1 << 3,
FlushAll = (FlushPoints | FlushLines | FlushText)
};
// Initialize with the user-supplied renderer interface.
// Given object must remain valid until after dd::shutdown() is called!
// If 'renderer' is null, the Debug Draw functions become no-ops, but
// can still be safely called.
bool initialize(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle * outCtx,) RenderInterface * renderer);
// After this is called, it is safe to dispose the dd::RenderInterface instance
// you passed to dd::initialize(). Shutdown will also attempt to free the glyph texture.
void shutdown(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx));
// Test if the Debug Draw library is currently initialized and has a render interface.
bool isInitialized(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx));
// Test if there's data in the debug draw queue and dd::flush() should be called.
bool hasPendingDraws(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx));
// Manually removes all queued debug render data without drawing.
// This is not normally called. To draw stuff, call dd::flush() instead.
void clear(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx));
// Actually calls the dd::RenderInterface to consume the debug draw queues.
// Objects that have expired their lifetimes get removed. Pass the current
// application time in milliseconds to remove timed objects that have expired.
// Passing zero removes all objects after they get drawn, regardless of lifetime.
void flush(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,)
std::int64_t currTimeMillis = 0,
std::uint32_t flags = FlushAll);
} // namespace dd
// ================== End of header file ==================
#endif // DEBUG_DRAW_HPP
// ================== End of header file ==================
// ================================================================================================
//
// Debug Draw Implementation
//
// ================================================================================================
#ifdef DEBUG_DRAW_IMPLEMENTATION
#ifndef DD_MALLOC
#include <cstdlib>
#define DD_MALLOC std::malloc
#define DD_MFREE std::free
#endif // DD_MALLOC
#if DEBUG_DRAW_USE_STD_MATH
#include <math.h>
#include <float.h>
#endif // DEBUG_DRAW_USE_STD_MATH
namespace dd
{
#if defined(FLT_EPSILON) && DEBUG_DRAW_USE_STD_MATH
static const float FloatEpsilon = FLT_EPSILON;
#else // !FLT_EPSILON || !DEBUG_DRAW_USE_STD_MATH
static const float FloatEpsilon = 1e-14;
#endif // FLT_EPSILON && DEBUG_DRAW_USE_STD_MATH
#if defined(M_PI) && DEBUG_DRAW_USE_STD_MATH
static const float PI = static_cast<float>(M_PI);
#else // !M_PI || !DEBUG_DRAW_USE_STD_MATH
static const float PI = 3.1415926535897931f;
#endif // M_PI && DEBUG_DRAW_USE_STD_MATH
static const float HalfPI = PI * 0.5f;
static const float TAU = PI * 2.0f;
template<typename T>
static inline float degreesToRadians(const T degrees)
{
return (static_cast<float>(degrees) * PI / 180.0f);
}
template<typename T, int Size>
static inline int arrayLength(const T (&)[Size])
{
return Size;
}
// ========================================================
// Built-in color constants:
// ========================================================
#ifndef DEBUG_DRAW_NO_DEFAULT_COLORS
namespace colors
{
const ddVec3 AliceBlue = {0.941176f, 0.972549f, 1.000000f};
const ddVec3 AntiqueWhite = {0.980392f, 0.921569f, 0.843137f};
const ddVec3 Aquamarine = {0.498039f, 1.000000f, 0.831373f};
const ddVec3 Azure = {0.941176f, 1.000000f, 1.000000f};
const ddVec3 Beige = {0.960784f, 0.960784f, 0.862745f};
const ddVec3 Bisque = {1.000000f, 0.894118f, 0.768627f};
const ddVec3 Black = {0.000000f, 0.000000f, 0.000000f};
const ddVec3 BlanchedAlmond = {1.000000f, 0.921569f, 0.803922f};
const ddVec3 Blue = {0.000000f, 0.000000f, 1.000000f};
const ddVec3 BlueViolet = {0.541176f, 0.168627f, 0.886275f};
const ddVec3 Brown = {0.647059f, 0.164706f, 0.164706f};
const ddVec3 BurlyWood = {0.870588f, 0.721569f, 0.529412f};
const ddVec3 CadetBlue = {0.372549f, 0.619608f, 0.627451f};
const ddVec3 Chartreuse = {0.498039f, 1.000000f, 0.000000f};
const ddVec3 Chocolate = {0.823529f, 0.411765f, 0.117647f};
const ddVec3 Coral = {1.000000f, 0.498039f, 0.313726f};
const ddVec3 CornflowerBlue = {0.392157f, 0.584314f, 0.929412f};
const ddVec3 Cornsilk = {1.000000f, 0.972549f, 0.862745f};
const ddVec3 Crimson = {0.862745f, 0.078431f, 0.235294f};
const ddVec3 Cyan = {0.000000f, 1.000000f, 1.000000f};
const ddVec3 DarkBlue = {0.000000f, 0.000000f, 0.545098f};
const ddVec3 DarkCyan = {0.000000f, 0.545098f, 0.545098f};
const ddVec3 DarkGoldenRod = {0.721569f, 0.525490f, 0.043137f};
const ddVec3 DarkGray = {0.662745f, 0.662745f, 0.662745f};
const ddVec3 DarkGreen = {0.000000f, 0.392157f, 0.000000f};
const ddVec3 DarkKhaki = {0.741176f, 0.717647f, 0.419608f};
const ddVec3 DarkMagenta = {0.545098f, 0.000000f, 0.545098f};
const ddVec3 DarkOliveGreen = {0.333333f, 0.419608f, 0.184314f};
const ddVec3 DarkOrange = {1.000000f, 0.549020f, 0.000000f};
const ddVec3 DarkOrchid = {0.600000f, 0.196078f, 0.800000f};
const ddVec3 DarkRed = {0.545098f, 0.000000f, 0.000000f};
const ddVec3 DarkSalmon = {0.913725f, 0.588235f, 0.478431f};
const ddVec3 DarkSeaGreen = {0.560784f, 0.737255f, 0.560784f};
const ddVec3 DarkSlateBlue = {0.282353f, 0.239216f, 0.545098f};
const ddVec3 DarkSlateGray = {0.184314f, 0.309804f, 0.309804f};
const ddVec3 DarkTurquoise = {0.000000f, 0.807843f, 0.819608f};
const ddVec3 DarkViolet = {0.580392f, 0.000000f, 0.827451f};
const ddVec3 DeepPink = {1.000000f, 0.078431f, 0.576471f};
const ddVec3 DeepSkyBlue = {0.000000f, 0.749020f, 1.000000f};
const ddVec3 DimGray = {0.411765f, 0.411765f, 0.411765f};
const ddVec3 DodgerBlue = {0.117647f, 0.564706f, 1.000000f};
const ddVec3 FireBrick = {0.698039f, 0.133333f, 0.133333f};
const ddVec3 FloralWhite = {1.000000f, 0.980392f, 0.941176f};
const ddVec3 ForestGreen = {0.133333f, 0.545098f, 0.133333f};
const ddVec3 Gainsboro = {0.862745f, 0.862745f, 0.862745f};
const ddVec3 GhostWhite = {0.972549f, 0.972549f, 1.000000f};
const ddVec3 Gold = {1.000000f, 0.843137f, 0.000000f};
const ddVec3 GoldenRod = {0.854902f, 0.647059f, 0.125490f};
const ddVec3 Gray = {0.501961f, 0.501961f, 0.501961f};
const ddVec3 Green = {0.000000f, 0.501961f, 0.000000f};
const ddVec3 GreenYellow = {0.678431f, 1.000000f, 0.184314f};
const ddVec3 HoneyDew = {0.941176f, 1.000000f, 0.941176f};
const ddVec3 HotPink = {1.000000f, 0.411765f, 0.705882f};
const ddVec3 IndianRed = {0.803922f, 0.360784f, 0.360784f};
const ddVec3 Indigo = {0.294118f, 0.000000f, 0.509804f};
const ddVec3 Ivory = {1.000000f, 1.000000f, 0.941176f};
const ddVec3 Khaki = {0.941176f, 0.901961f, 0.549020f};
const ddVec3 Lavender = {0.901961f, 0.901961f, 0.980392f};
const ddVec3 LavenderBlush = {1.000000f, 0.941176f, 0.960784f};
const ddVec3 LawnGreen = {0.486275f, 0.988235f, 0.000000f};
const ddVec3 LemonChiffon = {1.000000f, 0.980392f, 0.803922f};
const ddVec3 LightBlue = {0.678431f, 0.847059f, 0.901961f};
const ddVec3 LightCoral = {0.941176f, 0.501961f, 0.501961f};
const ddVec3 LightCyan = {0.878431f, 1.000000f, 1.000000f};
const ddVec3 LightGoldenYellow = {0.980392f, 0.980392f, 0.823529f};
const ddVec3 LightGray = {0.827451f, 0.827451f, 0.827451f};
const ddVec3 LightGreen = {0.564706f, 0.933333f, 0.564706f};
const ddVec3 LightPink = {1.000000f, 0.713726f, 0.756863f};
const ddVec3 LightSalmon = {1.000000f, 0.627451f, 0.478431f};
const ddVec3 LightSeaGreen = {0.125490f, 0.698039f, 0.666667f};
const ddVec3 LightSkyBlue = {0.529412f, 0.807843f, 0.980392f};
const ddVec3 LightSlateGray = {0.466667f, 0.533333f, 0.600000f};
const ddVec3 LightSteelBlue = {0.690196f, 0.768627f, 0.870588f};
const ddVec3 LightYellow = {1.000000f, 1.000000f, 0.878431f};
const ddVec3 Lime = {0.000000f, 1.000000f, 0.000000f};
const ddVec3 LimeGreen = {0.196078f, 0.803922f, 0.196078f};
const ddVec3 Linen = {0.980392f, 0.941176f, 0.901961f};
const ddVec3 Magenta = {1.000000f, 0.000000f, 1.000000f};
const ddVec3 Maroon = {0.501961f, 0.000000f, 0.000000f};
const ddVec3 MediumAquaMarine = {0.400000f, 0.803922f, 0.666667f};
const ddVec3 MediumBlue = {0.000000f, 0.000000f, 0.803922f};
const ddVec3 MediumOrchid = {0.729412f, 0.333333f, 0.827451f};
const ddVec3 MediumPurple = {0.576471f, 0.439216f, 0.858824f};
const ddVec3 MediumSeaGreen = {0.235294f, 0.701961f, 0.443137f};
const ddVec3 MediumSlateBlue = {0.482353f, 0.407843f, 0.933333f};
const ddVec3 MediumSpringGreen = {0.000000f, 0.980392f, 0.603922f};
const ddVec3 MediumTurquoise = {0.282353f, 0.819608f, 0.800000f};
const ddVec3 MediumVioletRed = {0.780392f, 0.082353f, 0.521569f};
const ddVec3 MidnightBlue = {0.098039f, 0.098039f, 0.439216f};
const ddVec3 MintCream = {0.960784f, 1.000000f, 0.980392f};
const ddVec3 MistyRose = {1.000000f, 0.894118f, 0.882353f};
const ddVec3 Moccasin = {1.000000f, 0.894118f, 0.709804f};
const ddVec3 NavajoWhite = {1.000000f, 0.870588f, 0.678431f};
const ddVec3 Navy = {0.000000f, 0.000000f, 0.501961f};
const ddVec3 OldLace = {0.992157f, 0.960784f, 0.901961f};
const ddVec3 Olive = {0.501961f, 0.501961f, 0.000000f};
const ddVec3 OliveDrab = {0.419608f, 0.556863f, 0.137255f};
const ddVec3 Orange = {1.000000f, 0.647059f, 0.000000f};
const ddVec3 OrangeRed = {1.000000f, 0.270588f, 0.000000f};
const ddVec3 Orchid = {0.854902f, 0.439216f, 0.839216f};
const ddVec3 PaleGoldenRod = {0.933333f, 0.909804f, 0.666667f};
const ddVec3 PaleGreen = {0.596078f, 0.984314f, 0.596078f};
const ddVec3 PaleTurquoise = {0.686275f, 0.933333f, 0.933333f};
const ddVec3 PaleVioletRed = {0.858824f, 0.439216f, 0.576471f};
const ddVec3 PapayaWhip = {1.000000f, 0.937255f, 0.835294f};
const ddVec3 PeachPuff = {1.000000f, 0.854902f, 0.725490f};
const ddVec3 Peru = {0.803922f, 0.521569f, 0.247059f};
const ddVec3 Pink = {1.000000f, 0.752941f, 0.796078f};
const ddVec3 Plum = {0.866667f, 0.627451f, 0.866667f};
const ddVec3 PowderBlue = {0.690196f, 0.878431f, 0.901961f};
const ddVec3 Purple = {0.501961f, 0.000000f, 0.501961f};
const ddVec3 RebeccaPurple = {0.400000f, 0.200000f, 0.600000f};
const ddVec3 Red = {1.000000f, 0.000000f, 0.000000f};
const ddVec3 RosyBrown = {0.737255f, 0.560784f, 0.560784f};
const ddVec3 RoyalBlue = {0.254902f, 0.411765f, 0.882353f};
const ddVec3 SaddleBrown = {0.545098f, 0.270588f, 0.074510f};
const ddVec3 Salmon = {0.980392f, 0.501961f, 0.447059f};
const ddVec3 SandyBrown = {0.956863f, 0.643137f, 0.376471f};
const ddVec3 SeaGreen = {0.180392f, 0.545098f, 0.341176f};
const ddVec3 SeaShell = {1.000000f, 0.960784f, 0.933333f};
const ddVec3 Sienna = {0.627451f, 0.321569f, 0.176471f};
const ddVec3 Silver = {0.752941f, 0.752941f, 0.752941f};
const ddVec3 SkyBlue = {0.529412f, 0.807843f, 0.921569f};
const ddVec3 SlateBlue = {0.415686f, 0.352941f, 0.803922f};
const ddVec3 SlateGray = {0.439216f, 0.501961f, 0.564706f};
const ddVec3 Snow = {1.000000f, 0.980392f, 0.980392f};
const ddVec3 SpringGreen = {0.000000f, 1.000000f, 0.498039f};
const ddVec3 SteelBlue = {0.274510f, 0.509804f, 0.705882f};
const ddVec3 Tan = {0.823529f, 0.705882f, 0.549020f};
const ddVec3 Teal = {0.000000f, 0.501961f, 0.501961f};
const ddVec3 Thistle = {0.847059f, 0.749020f, 0.847059f};
const ddVec3 Tomato = {1.000000f, 0.388235f, 0.278431f};
const ddVec3 Turquoise = {0.250980f, 0.878431f, 0.815686f};
const ddVec3 Violet = {0.933333f, 0.509804f, 0.933333f};
const ddVec3 Wheat = {0.960784f, 0.870588f, 0.701961f};
const ddVec3 White = {1.000000f, 1.000000f, 1.000000f};
const ddVec3 WhiteSmoke = {0.960784f, 0.960784f, 0.960784f};
const ddVec3 Yellow = {1.000000f, 1.000000f, 0.000000f};
const ddVec3 YellowGreen = {0.603922f, 0.803922f, 0.196078f};
} // namespace colors
#endif // DEBUG_DRAW_NO_DEFAULT_COLORS
// ========================================================
// Embedded bitmap font for debug text rendering:
// ========================================================
struct FontChar
{
std::uint16_t x;
std::uint16_t y;
};
struct FontCharSet
{
enum { MaxChars = 256 };
const std::uint8_t * bitmap;
int bitmapWidth;
int bitmapHeight;
int bitmapColorChannels;
int bitmapDecompressSize;
int charBaseHeight;
int charWidth;
int charHeight;
int charCount;
FontChar chars[MaxChars];
};
#if DEBUG_DRAW_CXX11_SUPPORTED
#define DD_ALIGNED_BUFFER(name) alignas(16) static const std::uint8_t name[]
#else // !C++11
#if defined(__GNUC__) // Clang & GCC
#define DD_ALIGNED_BUFFER(name) static const std::uint8_t name[] __attribute__((aligned(16)))
#elif defined(_MSC_VER) // Visual Studio
#define DD_ALIGNED_BUFFER(name) __declspec(align(16)) static const std::uint8_t name[]
#else // Unknown compiler
#define DD_ALIGNED_BUFFER(name) static const std::uint8_t name[] /* hope for the best! */
#endif // Compiler id
#endif // DEBUG_DRAW_CXX11_SUPPORTED
//
// Data generated from font 'Monoid18' by font-tool.
// Command line: monoid-18.fnt monoid-18.png monoid-18.h Monoid18 --static --compress --structs --hex --encoding=lzw
//
// The Monoid font, copyright (c) 2015 Andreas Larsen and contributors,
// is released under the MIT license. See: https://github.com/larsenwork/monoid
//
// The following glyph bitmap is an LZW compressed graymap.
// ~7.55 KB of data.
//
// It is better to ensure it is aligned to a, say 16 bytes boundary,
// because we cast the first few bytes to uint32s.
//
// font-tool: https://github.com/glampert/font-tool
// LZW compression: https://github.com/glampert/compression-algorithms
//
DD_ALIGNED_BUFFER(s_fontMonoid18Bitmap) =
"\x2F\x1E\x00\x00\x78\xF1\x00\x00\x00\x00\x06\x14\x38\x90\x60\x41\x83\x07\x11\x26\x54\xB8"
"\x90\x61\x43\x87\x0F\x21\x46\x94\x38\x91\x62\x45\x8B\x17\x31\x66\xD4\x88\x70\x43\x13\x8C"
"\x15\x80\x0D\xD8\x98\x10\x0D\x98\x84\x4D\x36\x8C\x8C\x28\x40\xC1\x01\x95\x2F\x1F\x06\x10"
"\x10\x00\x26\xC0\x44\xFE\x5C\x5A\xA4\xF4\x8F\x4E\xCD\x81\x01\xF8\xFD\x4B\x70\x30\x40\x3F"
"\x3F\x3E\x17\x32\xFA\xB7\xB4\x5F\xCA\x8C\x67\xFC\xD1\x04\xB0\x2F\x0D\x52\x82\x74\x96\xF2"
"\x54\xD9\xC4\x5D\xD6\xA5\xBF\x10\x36\x5B\xBA\xE3\x60\x81\x7E\xFD\xA4\x2E\x3C\xC0\xE8\xDB"
"\xD2\x77\xC1\x2A\x34\xF4\xF2\xEF\x52\x42\x7E\x3D\xAD\x1E\x74\xB5\x34\x13\xB4\xA5\x11\x9E"
"\x46\x05\x78\x37\x6F\xC0\x25\x4B\xDB\xFE\xAB\xB2\x51\x0E\xE2\x7E\xFF\xDE\xF9\x73\xA6\xF7"
"\x9F\xBF\xA5\x14\x0E\xEE\xFC\xC2\xD0\x44\x56\x7F\xEF\xB2\xB2\x60\xA8\xCF\xDF\x50\x84\x84"
"\x0B\x13\x8C\xF0\xAF\x5F\xCE\x2F\xFF\xC0\x62\x84\x4A\x13\x28\xDE\xC2\xD8\xFC\xC5\xA5\xE0"
"\xAF\x5B\x40\x1A\x16\x0F\xF8\xF3\x67\x02\x40\x17\x7F\x09\x4B\xB0\x06\x30\xE4\x5F\x6F\x83"
"\xC1\xFB\x31\xDC\xF7\x4F\x4D\x5A\x2B\xFF\xD8\x2D\x9C\xF2\x8F\x94\x42\xD4\xA9\x05\x7E\xF8"
"\x57\x35\xE0\x3E\x6E\x19\x8D\x07\xE4\x47\xBE\xF0\xB2\xE3\x83\x9D\x2B\x1A\x5F\x91\xF9\x66"
"\x00\xB3\x11\x66\xFB\x07\x02\xA0\xB2\x7F\xA2\x0D\x12\xE5\x1F\x26\x14\x3A\xAC\xBB\x81\x70"
"\x4B\xEB\xA0\x7C\xFE\x01\xCC\x2E\xDB\x16\x6A\x86\xC0\x8C\xC4\x3B\x10\x80\x01\xFA\x71\xCE"
"\xA2\x59\xDA\x9A\xC5\xC3\x7F\xBE\x01\x46\x23\x09\x11\x4A\xE4\x1F\x6F\x9A\xE8\x86\x2E\x00"
"\xE4\x6B\xAD\xA2\xC6\x34\x00\x08\x3F\x83\x34\xF8\x67\x32\x80\x6A\xBC\xB1\x20\x08\xFE\xE1"
"\x47\x21\x34\xFE\xF9\x00\xA0\x06\xAC\x00\xC3\x0A\x67\x04\x43\x88\xB9\xD8\x1E\x74\xE8\x3B"
"\x8C\xA6\xC3\x0C\x00\x66\xB4\xB2\x28\x00\xCB\xBC\x5A\x2A\xC9\x81\x5A\x3A\xC0\xCB\x03\x14"
"\x10\xC0\x3B\x08\x0B\xDA\x26\xAB\x76\x00\x30\xB1\x1F\x91\x2A\x92\x61\xC5\xFB\xB6\x24\x48"
"\x97\x7F\x66\x10\xE8\x9E\x06\x0F\xDA\xE5\x1F\xB2\x10\x82\xCA\x00\x00\xD2\xC8\x32\xCE\x82"
"\xD2\xF9\x27\xC6\x31\x9D\x24\xD3\xA2\xC3\xFC\x51\xE3\xB1\xE8\x30\x12\xC0\x0F\x7F\x1A\x20"
"\xA0\x01\x7E\xFE\x10\x93\xA0\x2B\xB3\xFC\xE7\xA8\x26\x13\x32\x81\x08\xE2\xD4\xFC\xD3\x22"
"\x0C\xFF\xA9\x03\x00\x34\xDE\x7B\xCE\xC1\x80\x0E\x78\xB5\xA0\x0C\xFE\x41\xB3\xCF\xE3\x3C"
"\xA8\xAC\x89\x06\x14\xF8\x63\xD0\x81\xDC\xD4\x11\xD4\x83\x36\x88\x6B\x30\xF2\x04\xF8\x8D"
"\xA0\x06\x32\x99\x45\xD5\x80\x76\x90\xC5\xA0\x40\xB3\x7A\x46\x41\x8B\x66\x7C\x72\x20\x60"
"\x3C\xEC\x36\x98\x09\x4F\x53\xF4\x20\x4B\x58\x33\xF5\xA2\x1D\xBC\xF2\xC7\x8A\x8D\x96\xF9"
"\xEF\x56\x00\xCC\xD8\x33\x20\x57\x7E\x15\x48\x3F\xFE\x16\xD2\x96\x20\x7B\x2A\xAB\x03\x84"
"\x7E\x30\x31\x21\x98\xA5\x00\x0C\x08\xA8\xAC\x20\x05\xA0\x92\x5F\x47\xF1\x0A\x2F\x01\x08"
"\x90\x2D\x49\x7D\x21\x92\x49\x00\x01\x0E\xC0\x14\x80\x8B\x35\x35\x88\x5C\x17\x0D\xB2\x98"
"\xE3\x91\x3B\x26\x08\x24\xAF\xFA\x31\xED\xA2\xE4\x34\x2C\x08\x2A\x78\xF7\x0B\x28\x9B\x7A"
"\x01\x62\xB9\x21\x8A\x05\x02\x23\xB1\x4E\x4D\x71\x2A\xA0\x19\xFE\x29\x25\x02\x75\x60\x03"
"\x68\xE6\x6B\x19\xAD\x80\x07\xD6\x44\x92\x83\xE6\x87\xD2\x3B\xD6\xA2\xC6\x3A\xD5\xF2\xDA"
"\x80\x1A\x5E\x13\x21\xAA\xAB\x7E\x7A\xAA\x45\x2A\x50\xD1\xC7\x8C\xB4\x89\xD9\xA0\x97\xE3"
"\xAD\x13\x00\x1E\x9F\x6E\xB7\x60\x44\x15\x52\x00\x0C\x84\xF1\x25\xA8\x31\x21\x03\x98\x6E"
"\x16\x40\xB0\x23\xA8\xEC\x12\x00\x12\x70\xB2\x19\x29\x6A\x62\x16\x7F\xC0\x68\x02\x0C\x7F"
"\x80\xF1\x88\x22\x2A\xBE\x81\x46\x72\xC8\x24\x87\xC6\x9B\xAB\x01\xC8\x5A\x01\xC3\x67\x31"
"\x89\x20\xC8\x2B\x0F\xDD\x72\xCC\xD5\x23\xAF\x6C\x21\x31\x0A\xF6\xA0\x97\x55\xA8\x8C\x07"
"\x1E\x82\xA2\x99\x56\x5B\x19\xC2\x99\xA0\xE4\x96\x6A\x79\x20\xA7\xD9\x8C\x00\x4B\x79\x05"
"\x02\x2A\xBB\x80\xF4\xF9\x87\x08\x2A\xBC\x5E\x28\x80\xAA\x97\x22\x3D\xA2\xF5\x12\x6A\x18"
"\xA7\x4A\xBC\x8A\x45\x23\xD4\x56\x98\x2F\xA3\x42\x8D\x25\xE8\x8C\x7F\x20\x00\x60\xAF\xA5"
"\xDC\x09\x86\x66\x3D\xF9\xAC\x5D\x5C\x82\x50\x25\x42\x2C\x45\x0C\x8A\xA0\x85\xE0\x79\x20"
"\xA2\x81\x4D\xF9\x39\x2F\xA0\x1A\xAD\xB6\xA8\x85\x52\xFC\xC1\x83\x16\xF0\xA0\x1F\xA5\x98"
"\x5F\x41\x82\x92\xA5\xF5\x19\xCC\x76\x99\xAB\x4C\x02\x14\xC0\x9A\x0A\x54\x80\x1D\x86\xCA"
"\x08\x6A\x68\xB5\xC0\x88\xA0\xCB\x17\x06\x69\x0C\xE0\x00\xC0\x03\x40\xA8\x01\x00\x0D\x50"
"\x16\x41\x78\x34\xB6\x9B\x69\x30\x20\xED\xEA\x4E\x70\xFE\x41\x9C\x8A\xE8\xE7\x50\x00\x01"
"\x12\x6B\x9C\xE7\x90\xA8\x01\x00\x7A\x06\xD1\xC7\x3B\x80\x08\x44\x7F\xB0\xE7\x20\x0D\xDC"
"\x07\xA5\x00\x50\x23\x34\x00\xA4\x0B\x66\xB3\x12\x6A\x4C\xF4\xB6\x8B\x30\x48\x56\xD0\xE2"
"\x8E\x43\x04\x04\x2E\xF5\x29\x84\x02\xCA\x01\x08\x73\x84\x25\x11\x2A\x54\x46\x86\x00\x28"
"\x40\xEE\x24\x26\x95\x06\x56\xCC\x28\x08\x69\x80\x83\xC4\x53\x8A\xC0\xFD\x03\x84\x14\x51"
"\x63\x55\xAE\xE3\x0F\x73\x61\x64\x3B\x16\x1A\xC8\x74\x00\x51\xB2\x92\x09\x04\x3A\x10\x59"
"\x23\x40\x22\x20\xAB\x13\x56\xE4\x15\xE4\x6B\x96\x57\x0E\x58\x91\x6C\xB1\x10\x22\x28\x69"
"\x48\xF1\x26\x97\xB0\x89\xD4\xC8\x1F\x6D\xF9\xCC\x52\x86\xA0\x12\xD2\xA8\x4C\x20\x2D\xF0"
"\x0C\x68\x96\x82\xBA\x81\x68\xC6\x90\x94\xF4\x09\x0F\xBA\x92\x15\x40\x5C\x47\x93\x00\x00"
"\x81\x15\x9A\x90\x4B\x5D\xE6\x72\x5D\x67\x4B\x12\x55\xC0\x33\x90\x06\x54\xF0\x1F\xEE\xA8"
"\x62\x44\x28\xF0\x18\xAF\x78\xC3\x67\x1B\x99\xCB\x22\x0C\xA2\x80\x4C\x24\xE6\x33\xDF\xE8"
"\x5E\x40\xCC\x82\x96\x56\x06\xB3\x20\x04\xF0\x12\x42\xF6\xC0\xBC\xE6\x71\x53\x22\xDF\xD4"
"\x88\x02\xFC\x51\x97\x9A\x1C\x8C\x94\x10\xD9\x89\x2B\x09\x72\x48\x72\xAA\xA6\x05\x26\xB0"
"\xE7\x3D\xED\x19\xC9\x79\xEE\x13\x20\x96\xF4\xC9\x17\x3C\x37\x91\x0A\xCC\x82\x4D\x0F\x91"
"\x27\x3F\x11\x9A\x50\x85\xF2\x13\x98\x0B\x75\xE8\x43\x21\x1A\x51\x89\x4E\x94\xA2\x15\xB5"
"\xE8\x45\x31\x9A\x51\x8D\x6E\x94\xA3\x1D\xF5\xE8\x47\x41\x1A\x52\x91\x8E\x94\xA4\x25\x35"
"\xE9\x49\x51\x9A\x52\x95\xAE\x14\xA1\x8C\x00\xC3\xFD\x20\x42\x03\x46\xE8\x73\x20\x44\xB0"
"\xE9\x4D\x15\xB2\x81\x9B\xDA\xB4\x99\x03\xA1\x41\xDD\x20\x12\x50\x96\xA2\x94\x53\xFF\x80"
"\x66\x43\x2A\xA0\x4C\xF8\x15\x64\x79\xE9\xCA\x21\x00\xB8\xB6\x94\xA5\x16\x64\x3A\x47\x75"
"\x48\x04\x82\x42\xC4\xA1\x1E\x04\x62\x83\xAC\x68\x04\x16\x07\xBC\x85\x60\xE3\x1F\xC0\x30"
"\x41\x4E\x0A\x42\x03\xB5\xFE\x2F\x79\x50\x21\x82\x5A\x69\x70\xCD\x81\xF0\xC0\x32\x98\x70"
"\x08\x03\x1E\x03\x0C\xB4\x9E\xB4\xA1\x08\x69\x58\xB5\x8E\x39\x10\xF7\x30\x40\xA1\x6E\x82"
"\x27\x50\x54\xB8\x10\xE3\x3C\xF5\x65\x0C\x61\x40\x50\x16\xC3\x10\x06\x59\x35\xA5\x87\xC4"
"\x0D\x34\x4C\xA1\x4C\x98\x1A\x64\x8C\xEA\x44\x28\x86\xE0\xC9\xC3\xA9\x2E\x84\x70\xBE\x7C"
"\xAA\x40\xBA\xE8\x0F\xC2\x2A\x84\x7A\xD6\x63\xE9\x21\x4B\xA6\x86\x37\x1D\xE4\x88\x7B\x3C"
"\xC8\x25\x42\x3B\x90\x04\xB0\x03\xA8\x06\x39\x28\x0F\xB5\x9A\x90\xD2\xBA\x2C\x79\x03\xE9"
"\xAC\x42\x0A\xE0\x8F\x5A\x56\x36\xB7\x00\x00\x8A\xEE\xEC\xF6\x8F\xD1\x1A\x64\x00\xD3\xB1"
"\xEB\x43\x22\xF0\x98\xE0\xC6\x73\xBB\x06\xD9\x47\x6E\x87\xEB\xBD\xE2\xFE\x71\xB9\x9F\xD3"
"\x9E\x42\x86\x10\x8C\x6F\x2D\x24\xBD\xEB\x45\xE8\x6F\x01\x62\x16\xE8\x0E\x64\x00\xB3\x60"
"\x84\xF2\xD6\xF1\x0F\x69\x35\x04\x04\x96\x89\xAC\x5D\x98\x94\x10\x1E\x81\xB7\xAD\xE3\x15"
"\x88\x80\x7A\x4B\x90\x76\x05\xD6\x65\x4B\x71\xE5\xF7\xAA\xC4\x4F\xF8\x02\x60\x27\xDD\x9D"
"\x48\xA1\xC2\x78\x10\x53\x0E\x48\x79\xFC\xF0\x07\x83\x07\x22\x9F\x4F\x31\x24\xBC\x03\x29"
"\x71\x9F\x9C\x68\x10\x65\x18\x98\x6A\xAE\x6C\x71\x42\xE1\x8B\x2E\x7F\x14\x94\x6C\xB5\x7A"
"\x2A\x11\xC6\xD2\x10\x13\xFD\x23\x18\x8B\x1C\x08\x23\xBA\x82\xC4\x86\x9C\x38\x20\x44\x36"
"\x88\x0E\x52\x5C\x10\x65\x24\x36\x21\x2D\xA8\x43\x1D\x7C\x6C\x10\x27\x43\x39\xA1\xDC\xF8"
"\xAF\x42\xC4\x23\xD6\x8D\x50\x09\x64\x05\x79\x0D\x9D\x1C\x32\x80\xAC\x4C\xD7\x60\x58\xF2"
"\x23\x69\x0B\x7C\xDA\x81\xD0\x2A\xC1\x03\x51\x86\xFE\xB6\xEA\x10\x74\x44\x58\x25\xBD\xF0"
"\x54\xC8\x1E\xD3\x66\x84\x14\xCA\x1B\x34\xD8\xEB\x40\x36\x50\x87\x1C\x0F\x39\xCD\x0F\x19"
"\xA3\x9E\x03\xA2\x8C\xF2\xC6\x99\x28\xFC\x60\xF2\x46\x0A\x50\xC1\x05\x06\x85\x84\x0D\x41"
"\x2C\x43\x82\x40\x67\x85\x18\x19\x4E\x6A\x16\xC8\xF7\x10\x0D\x10\xF7\x78\x9A\xD1\x00\xD0"
"\x87\x85\x2D\xF2\xD8\xA2\x1D\x04\x04\x4B\xA1\xAC\x77\x3C\x9B\x90\xE4\x12\x98\xB1\x06\x4E"
"\xF4\x3F\xE4\x4A\x10\x3D\xA9\xB2\xD4\xF3\xCC\xEE\x3F\x5C\x8B\x10\x0D\xD4\xF5\x66\xA8\x1E"
"\x08\x7C\x39\xCD\x69\xFA\xF6\xE3\xD1\x04\x41\x32\x99\x2F\xE2\x05\x20\xDA\x27\x21\xD2\x7E"
"\x07\xB5\x53\x3A\xEC\x7F\x5C\x57\x21\xBF\x0E\xF6\xB0\xBC\x63\x6C\x13\x17\xBA\x21\x8D\x81"
"\xF6\xB2\x67\xBC\x10\x05\x80\x00\x04\x9B\x45\xB1\xA6\xCF\xE6\x60\x75\xB3\xDB\xDD\x19\x31"
"\x01\x23\x00\x31\x92\x56\x1B\xF5\xAE\x8F\x09\x30\x75\xFB\x11\x5A\x7E\x9C\xDB\xB4\xC2\xB5"
"\x75\x6A\x57\x9B\x10\xEA\xFD\xDB\x83\x4B\x19\xF1\xD6\xE4\xAD\x90\x17\x4B\xDC\xE1\x2A\x99"
"\xCE\x79\x2F\xC2\x80\xA5\xFC\x01\x22\x09\x08\x4A\x07\x11\x62\x58\x86\x00\x85\x76\x8A\x2D"
"\x70\x43\x32\xF6\x0F\x6C\x27\xA4\x78\x1C\x17\x6E\xC4\x13\xB2\x01\x2B\xF8\xC3\x95\x32\xA7"
"\x39\x69\x61\x9E\x91\x83\xDD\x59\x23\x7D\x68\x2E\x36\xD9\x51\x6F\x81\x34\xA0\x09\x8F\xA9"
"\xA3\x42\x0A\x35\x0B\x10\x44\xCC\x20\x34\x68\x41\x3D\x01\x58\x6B\x01\xB6\x20\xAE\x1A\x7E"
"\x8C\x1C\x1B\xE2\xBB\xA0\x31\x3D\xDE\x18\x07\xF7\xD7\xBB\x2E\xEE\x88\x34\x32\xC9\x13\x2D"
"\x2A\xD6\x19\xF2\x6B\xE9\x86\x4C\x50\x4F\x8D\xEA\xDA\x7D\xBB\x6D\x88\x24\xD5\xEB\x15\x01"
"\x1A\x3C\xEF\x9E\xD0\x03\x90\x3A\xA1\x8C\x50\x03\x88\x11\xC2\x83\x4C\x44\x39\x20\x3B\xB5"
"\x69\x4E\x0D\xDF\x53\x81\xF0\xA0\x8C\x10\xA9\x4E\x46\x98\xE3\x2E\xF4\x12\xAC\xD7\x95\xA7"
"\x68\x63\x2A\x4D\xF1\xCC\x5B\x9E\xF3\x0F\xF5\x2A\x42\x3E\xDF\x79\xD1\x8F\x9E\xF4\xA5\x37"
"\xFD\xE9\x51\x9F\x7A\xD5\xAF\x9E\xF5\xAD\x77\xFD\xEB\x61\x1F\x7B\xD9\xCF\x9E\xF6\xB5\x8F"
"\x08\x01\xB8\x9E\x10\x8E\x35\x04\xF7\x2F\xC9\xFD\x45\x03\x80\xFB\xD0\x97\xD4\x77\xDF\x5E"
"\xDD\x2F\x51\x8D\xE3\xA5\x3C\x83\xC6\x05\x29\x45\x56\xF4\x9A\x90\xB9\x2D\xC5\x1B\x42\xBF"
"\x75\xD5\x78\x5D\x10\xDC\x00\x7E\x2A\x9D\x42\x35\xAB\x4C\xD3\x57\x82\x5C\xDC\x2D\x75\x27"
"\xDE\x32\x73\x5D\x90\x06\x74\x43\x9B\x19\x15\x0F\x9C\x6F\xA5\xC6\x05\xF2\x2F\x32\xFF\x80"
"\x3F\x41\xFC\xE3\x0F\x68\x58\xA6\xD9\x01\xB9\x21\x34\x40\x83\x66\x7A\xE1\x33\x82\x08\x95"
"\x42\x8D\x05\x6A\xC5\x3B\x20\x23\x88\xCC\xAF\x85\x26\x66\x81\x7E\x08\x88\x12\xE3\xE1\x8E"
"\xED\x1B\x82\x61\x16\x02\xB0\x9D\x08\xE2\x3A\x2A\x83\xEF\x10\xAA\x46\xEE\xAF\xE0\x78\x68"
"\x81\xF4\x64\x31\x02\x80\x68\xD2\x0F\x00\xBA\xA8\xFD\xF4\x43\x6D\xA8\x2A\x37\x00\x62\x11"
"\x1A\x50\xFB\xD2\xED\x20\x0A\x25\xFB\x10\x28\xB7\xD0\x41\x85\xE4\x89\x01\x84\x83\xFB\x02"
"\x42\x3E\x62\xED\x27\x7E\xA1\x32\xBE\xC1\xD6\x12\x0A\x04\xD1\x4C\xFE\x68\x4B\x85\xF4\xA4"
"\xBB\x80\xE6\xBF\x92\x63\x7D\x6A\xC4\xB3\x92\x2B\x04\x0D\x22\x01\x80\x2D\xE4\x56\x0D\xEC"
"\x4E\x03\xCE\xE4\x49\x3F\xB4\xC8\x3B\xE6\x0B\x20\xA6\x43\x5A\x16\x4B\xA3\x94\x70\xD3\x1E"
"\xB0\x88\xD4\xA9\x8B\xE0\x0D\x20\x60\x24\x20\x40\xCB\x20\xC4\x83\x88\xCC\x83\xC4\x24\xCF"
"\x20\xE6\x4C\x4A\xBC\x30\x7E\x78\x6E\x04\x15\x62\x8C\x18\x0E\x21\x82\x03\x0B\x01\x42\x0D"
"\x94\xC5\xC8\x16\xA1\x5B\x3C\x04\x1A\x52\x50\x0D\x98\x4F\x20\xAA\xE0\x19\x34\x10\x00\x62"
"\x21\x18\xF4\xA9\x14\xA0\xC1\x05\x69\xC4\xFE\x96\x70\x30\x26\x8D\x3C\xC8\x6E\x7D\x40\x4D"
"\x20\xBE\xCB\x20\x7C\x90\x49\x78\xA4\x10\x09\x65\xD1\x70\x84\x35\x4C\x80\x06\xB8\x8F\x1F"
"\x36\x63\x80\x14\x6F\x20\x6A\x84\x3D\xD6\x28\x01\x94\xEB\x21\xFA\x20\x0E\xC5\x2B\x87\xCE"
"\xA1\x53\x8E\x4E\x20\xF8\x00\xCC\x02\x02\x1D\x6A\x70\x20\x80\x24\x61\x98\x43\x6B\x84\xCD"
"\x46\x42\x51\x10\x7D\xAB\x27\x78\x04\x10\xC4\x4F\x20\x80\xA4\x6E\x56\x63\x81\x8E\xE8\x80"
"\x60\xE1\x1F\x42\x89\x8B\x66\xAB\x20\xDE\x6E\xBF\xBC\xEB\x1B\x94\x89\xDF\x0E\x62\x2E\xEA"
"\x66\x8D\xF4\xA3\x1D\x88\xE0\xF7\x0E\x22\x38\xF4\xA8\x1A\x0D\xC2\x9B\x0E\xC0\x52\xCE\x82"
"\x74\x92\x63\xAA\x30\xA4\x0C\x01\xA0\x6C\xC8\x63\x3A\x3C\xF1\x13\x11\x71\x20\x98\xE0\x72"
"\x00\xC2\xCA\x0C\xA2\x8B\x7A\x42\x14\xFA\x41\x01\xF4\x21\xC3\x00\xE2\x30\x6C\x43\xE4\x0C"
"\x02\x01\xFF\x61\x16\xBA\x82\x20\x07\x02\x11\x82\x04\x21\xDA\xA5\x51\x04\x4D\x31\xF0\xAC"
"\x32\xAC\x80\x6F\xB4\x6C\x20\x92\xF1\x55\xD6\x08\x1F\x3C\xC3\xB6\x0C\x62\x2F\x28\xF0\xF8"
"\x3C\xAD\x31\xC6\x30\x78\xF8\x81\x76\x02\xF2\x20\x34\x2E\x2A\x1A\xC3\xF8\x42\x66\xC2\x12"
"\x42\x3C\xD0\xE0\x8C\x8E\x62\x1F\xCA\x90\x47\xFA\xE1\x7E\x08\x80\x68\xAE\x6C\x20\x78\xA4"
"\x7A\x46\x03\x16\xCD\xF0\xC3\x6A\xA6\x39\x0E\xA2\x0E\x80\x41\x2A\x96\xE4\x20\x46\x4D\x3D"
"\x58\x08\x63\x1A\x80\x1B\xE0\x6E\x1A\xB5\x72\xDC\xD4\x2C\x38\x86\x87\x2C\x4B\x03\x20\x92"
"\x51\x8A\x4C\x0C\x32\x70\x68\x8B\x32\xC2\x07\xC1\x60\x52\xFE\x84\x1F\xCE\x4C\x20\xEC\x0C"
"\x44\xB2\xC2\x0F\x09\x82\x41\x00\xE1\x00\x36\x60\x3A\x56\xAE\x20\xB2\x27\x27\xFF\xA8\x65"
"\xF2\xC1\xC0\xF6\xA1\xFF\x00\x00\x1F\x5A\xA6\x87\x90\x8B\x37\x14\x42\x0C\x09\x4D\xCD\xF6"
"\x22\xD4\x00\x60\x2E\x22\x4B\x1B\xF2\x11\x21\xA8\x44\x19\x17\x42\x1F\x1A\xB3\x22\xF6\x21"
"\x18\xFA\xA1\x3B\x80\x02\xD5\x32\x01\x65\x0E\x42\x3C\x58\xD1\x2B\x13\x62\x2F\x6A\x31\xD6"
"\x56\xCC\xD3\x7E\x93\xA9\x28\x0D\x0C\xC0\xA0\x0E\xFC\x21\x18\x84\xCA\x24\xBD\x06\x68\x4A"
"\x8E\x0D\x4F\x4B\x3C\x8C\x92\x20\x34\x6E\x32\xCC\x22\x2E\x0F\xA2\x31\x9A\x91\x9B\xA6\x83"
"\x2B\xAD\x31\x21\x98\x63\x08\x3F\x8D\x8E\xEC\xA5\x2D\x85\x27\xDC\x04\xA2\x2C\x17\x22\x38"
"\x37\xA5\x1D\xB3\x44\xCD\xEE\xC1\x6B\x18\xA4\xF1\x9C\x13\xE9\xE6\x52\x21\x98\x71\x00\x62"
"\x20\x10\x55\xD1\xCC\xF6\x29\x28\x62\x43\x22\x17\x62\xCE\x52\xF0\x3E\x2C\x28\xD1\xBC\xA6"
"\x3E\xBC\xC3\x8F\xD4\x53\x21\xD0\x93\x20\x4C\x00\x04\xEC\x09\x04\x5A\xA0\x80\x44\xD3\x01"
"\x9D\xA7\x89\x30\x32\xFE\x12\x42\x23\x19\x62\x3B\xC0\x40\x06\x71\x50\xB0\x8C\xE7\x6F\x16"
"\xE2\xDE\xF2\x4D\x23\xA2\x04\x20\x90\x4C\xDC\x6C\xE6\x20\x0E\xE3\xCA\xF2\xA1\x2D\xDD\xE3"
"\x12\x7D\xD2\x3A\x9D\x72\xE4\xF8\xC1\x3A\xED\x42\xEC\x06\xA3\x39\x7D\x12\x4F\x1C\xC2\xC8"
"\xF2\xA6\x2D\x7F\xD4\x8B\x0E\x82\x39\xB2\x23\x7B\x2C\x13\x15\x97\x82\x47\x19\x42\x4F\xEC"
"\x83\x41\x06\x54\x66\xF6\xB0\x20\x34\x2E\x65\x00\x02\x2B\xA2\x13\x56\x24\x63\x21\xF4\xE3"
"\x80\x98\x00\x14\x43\x46\x20\xFC\xE0\x1C\xFF\xD0\xB9\x04\x02\x2B\x02\x33\x20\x48\x12\x3C"
"\xE7\xF3\x20\x4C\x24\x7D\x16\x22\x18\xAF\x88\x28\xA6\x03\x84\xDA\x85\x85\x76\x0E\x32\x27"
"\x22\xCB\x66\xE1\x31\x16\x32\x20\x90\x4C\x47\x0B\x42\x40\xFE\xC1\x14\x54\x04\x48\xE3\xAD"
"\x27\x0B\x02\x5D\x78\xCC\x2F\xCA\x4E\x3D\xDE\xC2\x14\x62\xC9\xFA\xAE\xB1\x88\x26\x35\x96"
"\x0C\xF3\xD8\x10\x23\x88\xFC\xA1\x86\x74\xF2\x34\x2A\xC3\x53\xC5\x6D\x3A\xEC\x52\x20\xA8"
"\x47\x47\x38\xC9\x52\x03\x82\xEC\x2A\xF4\x21\x9A\xA0\x5A\x9A\xAF\x20\xC8\xE5\x18\x0D\xC2"
"\x25\x8B\x29\x17\xCF\x33\x3B\x11\xA2\x09\xB0\x24\x80\x10\xA2\x78\xB2\xC2\x1D\xA6\x74\xFC"
"\x2C\x4C\x58\xC9\x47\x57\xCD\xB0\x6A\x40\x55\x04\xBD\xAB\x53\x28\x49\x1F\xB4\xD2\x07\xFF"
"\xC1\x30\xF7\x62\x4D\x07\x62\xEF\x5E\xA2\x25\x1A\x82\x55\x09\x02\x63\xFE\x2C\x23\xCC\x29"
"\x21\x82\x6F\x5C\x75\x8E\x1F\x37\xAA\x4C\xDD\xD4\xF6\xD8\xF5\x21\x64\xE1\x31\xEA\xB3\x5D"
"\xE5\x15\x22\x1E\xE3\x19\x8A\x75\x5E\xF1\x95\x20\x0E\x60\xF8\xF2\xB5\x5F\xFD\xF5\x5F\x01"
"\x36\x60\x05\x76\x60\x09\xB6\x60\x0D\xF6\x60\x11\x36\x61\x15\x76\x61\x19\xB6\x61\x01\x62"
"\x26\x18\x82\x5F\x1D\x76\xA2\xB6\x91\xAA\x9C\x54\x50\x2B\xC3\x5B\x01\xA2\x50\xD6\x75\xA2"
"\x74\xAA\x61\x0F\x09\x29\xA9\xC6\x56\x7F\xE2\x31\x08\xB5\xA2\x9C\xC6\x03\xF1\x35\x64\x7F"
"\xAE\xBF\xDA\x61\x56\x09\x82\x14\x54\x6E\xA3\x76\x48\x61\x59\x16\xA1\x14\x41\x1D\x05\x82"
"\x06\xAC\x89\x20\x24\x91\xC6\x2A\x91\x46\x49\x24\x20\x86\x76\x20\xD2\x8B\x43\x3E\xD2\x43"
"\xDC\xCB\x20\xD4\xE0\x1B\xDE\xE1\x1B\x22\x87\x51\x01\xA2\x19\x42\x09\x10\x9C\xF6\x1D\xAA"
"\xB2\xA6\x9C\x56\x16\x0E\xE0\x17\xA4\x16\x00\x9A\x81\xF1\xDC\xE1\x1D\xB8\x36\x54\x9E\x01"
"\x1A\xBE\xE1\x44\x0F\xA2\x19\x6C\x0A\x6A\x4D\x01\x66\x97\x03\x39\xA1\x36\xAE\xBA\xE1\x1D"
"\xC2\xF2\x4C\xCD\x32\x20\x12\x20\x18\xA0\x01\xC4\x8E\x76\x16\x44\x04\x21\xB8\x65\x16\x96"
"\xD6\x20\x1A\x34\x20\x1A\x23\xC1\x82\xF1\xE8\x70\xC3\x26\x45\x51\x20\x28\x26\x9C\xAA\x86"
"\x4F\x01\xA0\x50\xB2\x84\x72\xF9\x01\x51\x1D\x66\x75\xA0\xB5\x88\xDA\xEE\x48\xB3\x64\x49"
"\x13\x08\x61\xBA\xAE\x6A\x32\x34\x6F\x41\xA5\xBA\xDC\xB1\xE1\xFA\x67\x25\x73\x4E\xC9\x7E"
"\xE5\x14\x07\x02\x68\xF0\xD0\x47\x51\xF7\x71\x09\xC2\x52\x0E\x40\x11\xFC\x61\x03\x1A\xE0"
"\x77\xED\x11\x20\xBA\xA8\xFA\x00\x22\x00\xB4\xF5\x59\xA9\x83\x36\x1A\xCD\x78\x00\xA0\x33"
"\x84\xB1\xFB\xC0\x82\x00\xCC\x04\x1C\xFF\xC1\x23\x08\x40\x2D\x2D\x6C\x3A\xD6\xE5\x00\xD4"
"\xB2\x1C\xEF\xB2\x27\x02\xA5\x35\x0A\xE0\x88\x72\xE8\x66\x03\x80\x41\xB0\x35\x20\x30\x46"
"\x52\xBC\xA6\x1F\x2F\x85\x85\x82\xF3\x00\x4C\xC1\x73\x64\x57\x20\x7C\x50\x47\xBA\x28\x7D"
"\x9F\xA4\x81\x1A\x2B\x21\x6A\x64\x0E\x1A\x62\x3A\xC4\x0E\x3A\xFD\xEF\x79\xC9\x17\x20\x34"
"\x0E\x11\x6B\xC4\x42\x0E\x91\xB6\x34\x44\x3C\xC4\xC5\x4F\xCC\xA8\x1F\x8E\x0A\x11\xBC\x26"
"\x64\x97\x88\x68\x5C\x91\xB8\xD4\x6C\x8D\x82\x13\xC9\x20\xE5\x7B\x42\x34\x46\x03\x62\x3B"
"\xBE\x76\x7F\x35\x48\xD9\x6A\xC4\x1D\x36\x40\xCD\xF6\x81\x48\x01\x62\x2E\x0A\x06\x40\xBD"
"\x4B\x58\xB2\xA1\xFD\xEE\x52\x4E\xD3\x81\x66\xBE\xA3\x36\x38\x58\x6A\x3A\x2D\x5C\xBC\x83"
"\x11\x8A\xF0\x74\x7F\x18\x6E\x8E\xEF\x4F\x42\xA1\x32\x08\xAB\x0F\xEA\x65\x2F\xA4\x84\x37"
"\x8B\x08\x42\xF8\x77\xBC\xDA\x45\x4B\x66\x01\xF0\xF2\x10\xE7\x54\x09\x82\x1D\x58\x20\x16"
"\x34\x3C\x79\x2D\x8C\x21\x97\x8A\x23\xB8\x0D\x83\x78\x8A\x15\x82\xFC\x68\x2D\x5F\x58\x48"
"\x84\x2F\x13\x94\x00\x60\x19\x70\x58\x20\x94\x60\x66\x4D\x4D\x2B\x51\x58\x43\x17\xC2\x0A"
"\x82\x01\x95\x70\x4D\x8D\x71\xAE\x6E\x7C\xD8\xB7\x1E\x8E\x8C\x65\x24\xC5\x10\x19\x77\x19"
"\xF9\xD3\xD0\xD8\xC8\x42\xD6\x33\x12\xEE\x4D\xF1\x16\x00\xC4\x83\x0A\xCE\xA8\x09\xD2\xA1"
"\x3B\xF2\xA1\x0C\x83\x63\x32\x68\x25\x7D\xBB\x73\x94\x87\xF1\x21\x04\x40\x06\x17\xF2\xA0"
"\xEA\x37\x83\x68\x4B\x58\x16\x19\x8E\x0D\x94\x74\xF6\xB8\x94\xAD\x11\x92\x29\xE9\x27\x01"
"\xE0\x8E\x8D\xD8\x2D\xDD\x38\x21\x82\x23\x0D\x68\xE0\x1F\x0E\x60\x12\xF8\x21\x63\x3A\xD6"
"\x34\x01\x20\x0E\x54\x13\x81\x88\xA8\x8A\x55\x16\x00\xD0\x01\x16\x0F\xEA\x6E\x02\x82\x95"
"\x6B\x18\x8C\xEB\xE5\x83\xEC\x85\x87\xCD\xF8\x88\x51\xC3\x96\xCD\xB3\x72\x5F\x32\x54\x91"
"\xF8\x20\xF4\x01\x18\x32\xC1\x47\x64\x00\x71\x54\xD2\x20\xE6\xC2\x0A\xB6\x41\x2B\x81\x82"
"\x49\x68\x38\xDE\x9A\x95\x21\x8E\xE6\x52\x17\x22\x39\x5C\x0E\x00\x90\x0C\x1C\x55\x08\x43"
"\x4E\x16\x00\x10\x70\xC4\x8A\x62\xA0\x47\x99\x62\x26\x49\x46\x2E\xF8\x96\xF1\x42\x3C\xEA"
"\x98\x9C\x2B\x19\x00\xF4\x64\x45\xCC\x62\x29\xEE\x99\x4B\x97\x42\x94\xA7\x02\x06\x01\x80"
"\x5C\x34\x68\x2E\xD0\xAE\x21\xC2\x14\xA1\x0F\x0A\x1F\x01\x43\x75\xA9\x97\x3C\xA8\x67\x5D"
"\x93\xCB\xA3\xC9\xA5\x63\x67\x99\x97\x6B\xF9\x69\x48\x0E\x89\x5B\xC1\x4C\xDD\x79\xBC\x0E"
"\x09\xC2\xD4\x66\xCE\x22\x7A\x20\x2A\x3A\xA3\x91\x71\x29\x66\xA1\x1D\x5E\x77\x20\x2E\xDA"
"\x1D\x4C\xE1\x1B\xB2\x96\x78\xA0\x61\x16\x9A\x7A\x29\x12\xB2\x8C\x1B\x62\x89\xFF\x61\xFF"
"\x92\xBA\x3C\x3A\x75\x29\x26\x79\x20\xE8\x34\x13\x54\x24\x5E\xE3\xA9\x9B\x69\xF9\x9B\xBD"
"\x66\xCE\xBE\x61\x16\xBC\xB7\xAC\xB1\x29\xCF\x14\x82\x5E\x3A\x98\x92\x52\x8B\x4D\x1A\x63"
"\x83\x01\x42\x3C\x76\x39\x06\xB5\x84\x07\x2A\x76\x20\x28\x28\x2B\xA8\x77\x58\x09\xAF\x3C"
"\x2E\x16\x13\x98\x02\x04\x52\xD1\xB7\xD4\x40\xB6\xC8\x28\x21\x1C\xFB\x44\xB4\x18\x0F\xB7"
"\x6B\x46\x1A\xCA\xC8\x1A\xE0\xE2\x28\x57\xFC\xE6\x62\xAF\x99\xD1\x85\x2F\x16\x26\x64\xE2"
"\x21\xBC\x49\x62\x83\x0F\x62\x54\xE2\x62\x1A\xF9\xD8\x00\x98\x00\x24\x96\x90\x82\x97\x9C"
"\xBC\xE4\x99\x11\xE2\x35\x02\x95\x60\x6D\x07\x29\x57\xAA\x1B\x82\xA1\x2F\x96\x42\x59\x0B"
"\x36\xB7\x7F\x6E\xA5\x46\xD7\x1F\x5E\x35\x60\x8B\x82\x4F\x93\x3B\xF5\x20\x46\x01\x26\xB6"
"\x9F\x94\xD5\x9F\x9E\x7B\xBA\xA9\xBB\xBA\xAD\xFB\xBA\xB1\x3B\xBB\xB5\x7B\xBB\xB9\xBB\xBB"
"\xBD\x1B\xA5\x84\xEF\xBB\x33\xEA\xAF\x33\x62\xFA\xB6\xFA\x22\xC8\x1B\x22\xD2\xDB\xBA\x75"
"\x9B\x21\xF6\xCD\x43\xDC\xA1\x35\x2F\xA2\xBD\xDD\xDA\xBB\xE9\x9B\xE2\xE4\xF4\x25\xEE\xDB"
"\xAA\xED\x7B\xB8\x49\x0C\x27\x90\x62\xBF\x6F\x97\xBB\xF9\x41\x0D\x88\xC0\x6D\xE1\x36\x20"
"\xB8\x82\x6C\xBB\xF6\x6B\xE1\xA4\x21\x78\x40\x72\xBE\x21\x13\xC2\x55\x6B\x43\xA4\x02\xF4"
"\x41\x83\x36\xC0\x14\x24\xB0\x67\x7D\xEB\x0B\x4C\xC0\x1D\xBE\xA1\x6C\x0F\x22\x02\xA0\x16"
"\x6A\xA1\xA1\xB0\xFF\x95\xFC\x98\x02\xE2\x14\xA8\x9B\x1A\x60\x77\x7B\xF7\x77\x2B\xE5\x20"
"\x6E\xC8\x33\x12\x1C\xC2\x36\xD7\x20\x80\x26\x4B\x48\x76\x59\x9D\xEA\x36\x3B\xE5\xB8\xDB"
"\x55\x7B\x01\x80\x7B\xC9\xF1\x28\xFF\xE1\x37\x36\xE0\x31\xC4\x45\x72\x3B\x85\x4F\x07\xC0"
"\xC3\xE6\x47\x00\x62\x41\x3F\x7F\x94\x08\x9A\xF7\xBC\x4D\xED\x1F\x02\x2A\xB6\x97\xF5\x17"
"\x82\x6F\x7A\x0D\x51\x2A\x02\x85\x72\xFB\xF5\x46\xF3\x5A\x18\x17\xB8\xC8\xE2\x70\x08\x4C"
"\x61\x9A\x0E\x35\x13\x32\xC1\x14\xDA\x3A\x3C\xD6\x12\x43\x10\x91\x80\x6D\x88\xCD\xBB\x70"
"\x8D\x93\x24\x81\x1D\xEB\x79\xFB\xB5\x87\x71\xA6\x89\xEA\xA6\x46\x34\xA8\x66\xDF\x11\xCC"
"\x02\x80\x26\xA2\x19\x73\x64\x38\x20\xEA\x79\x20\xE6\xA2\xAA\x5B\x79\x3C\x3D\x6D\xB1\x71"
"\xDB\xAC\xBD\x67\x0F\x7D\x30\x85\x8B\x4B\xC7\x83\xFC\xD3\xBB\x58\x18\x81\x24\x44\xBD\xAB"
"\x65\x16\x39\x11\x77\x86\xD0\xF3\x75\xA6\x9D\xD1\x89\x2A\x9D\x96\xDF\xED\xC4\xA1\xB6\x0C"
"\xEB\xB7\x90\x09\x82\x39\x88\x9C\x1F\x0E\x59\x00\xDD\x02\x6A\x61\x7D\x65\x3D\xDD\x68\x55"
"\xD3\x8B\x25\x9A\x73\x55\xFD\xD3\xEB\xC6\x9A\x4D\x3D\x80\x5D\xB9\x5E\x6A\xC4\x1B\x9C\xDB"
"\xB9\x04\xDC\xF5\x64\x1D\xB5\xC4\x54\x61\x08\x5D\xD9\xB4\x79\x21\xA8\x19\x20\xA0\x7D\xD6"
"\x7F\x9C\xAA\xA6\x1D\x73\xBE\xC7\x7B\x15\xDD\x60\xB7\x5D\x20\x18\x04\x13\x1A\xC0\xB1\x45"
"\xFD\xB4\x82\x72\x9F\xFF\xA1\x9F\xFF\xD9\x20\xEE\x7D\x21\x2A\x93\x0E\xFB\x61\xA0\xC3\x3D"
"\x97\x8B\x7D\x5E\xDF\x3D\x20\x36\xCC\xA8\x6F\x6E\xD9\x9F\xC3\x32\x5E\x15\xA5\x2F\x64\x3A"
"\xD6\xC7\x2C\x7A\x57\x3A\xB4\xA7\xA5\x8F\x6C\xD5\x0E\x40\xE2\xDD\xFD\xD8\x97\x05\x10\x32"
"\x81\x07\x1A\xE0\xDB\xC7\x2B\x19\x0F\xD5\x14\xFE\xD8\xC2\xB0\xFA\x70\xB8\xFC\x86\x2E\xD0"
"\x7C\xB2\x77\x29\xD0\xD6\xAB\xCD\xB9\x98\x66\x41\xB0\x0D\x56\xFC\xD6\x5B\x20\xF2\xB3\xDE"
"\x19\x42\x0D\x7E\x67\x06\x01\x00\xB1\x5D\x67\xBD\xC3\x2A\x2B\xB2\xB7\xB1\xB5\x44\x3E\x85"
"\x89\x98\xDA\x01\xC3\x43\x5B\x61\x07\xA0\x78\x88\x9C\x21\xFA\x11\x62\x75\xAF\xC2\xEF\xD1"
"\xB5\x19\xC2\x9B\xAC\x5E\xEB\xAB\x1B\x72\xA4\xDA\x32\xF0\x5A\xBC\x19\x8D\xD4\xB9\xCD\xEC"
"\x47\xAF\x5C\xC1\x5C\xED\xDD\xFE\xED\xE1\x3E\xEE\xE5\x7E\xEE\xE9\xBE\xEE\xED\xFE\xEE\xF1"
"\x3E\xEF\xF5\x7E\xEF\xF9\xBE\xEF\xFD\xFE\xEF\x01\x3F\xF0\x05\x7F\xF0\x09\xBF\xF0\x0D\xFF"
"\xF0\x11\x3F\xF1\x15\x7F\xF1\x19\xBF\xF1\x1D\xFF\xF1\x21\x3F\xF2\x25\x7F\xF2\x29\xBF\xF2"
"\x2D\xFF\xF2\x31\x3F\xF3\x35\x7F\xF3\x39\xBF\xF3\x3D\xFF\xF3\x41\x3F\xF4\x45\x7F\xF4\x37"
"\x4A\xF8\x68\x9B\xAB\x7A\x6F\x24\x20\xA6\xED\x1D\x8A\x7F\x4C\xD7\x6F\x4E\x53\x20\x1A\x23"
"\x21\x83\x51\xAB\x02\x80\x34\x6C\x8B\x22\xAF\x06\x2A\xAA\x48\xD1\x0A\xE2\xD0\x68\xDA\x91"
"\xAF\x85\xD4\xB3\x24\xA8\x01\x02\x76\xB2\xC4\x15\xC9\xEF\x2D\x78\xC0\x10\x65\xC1\x33\xB4"
"\x9C\xB6\xB2\x82\xF9\x9D\x1F\xFA\xE3\x2D\xBF\xD3\xD8\xCD\xAB\x5A\x1B\x8C\x7F\xE7\xF7\x67"
"\x01\x0B\x70\x29\x42\xB0\x31\x82\xEB\x88\x9A\x6F\x28\x69\xAC\x28\x15\x2C\x76\x93\x6C\x17"
"\x84\x0C\x55\x03\x59\xF8\x6D\x3D\x86\xC1\xDF\x2D\x80\xC8\xF8\x6F\xE8\x1B\x50\xFE\x08\x33"
"\x34\x28\x80\x28\x2B\x9C\x01\x08\x28\x30\x60\x03\x7F\xFF\xFC\x99\x82\xF6\xEF\x1F\xA6\x81"
"\x0E\xF9\xFD\x7B\xF7\x6E\xE1\x3F\x80\x0E\x09\x1A\x44\xA8\xF0\x1F\xA9\x8B\x00\xCE\xFC\xEB"
"\x77\xF1\x8C\xBF\x00\x0E\x41\xF2\x73\xA8\xE3\xA0\xC9\x8B\xFC\xE8\x78\x8C\xE9\x31\xDD\xBF"
"\x19\x17\x0B\xF8\x13\x39\x50\xC9\xBF\x4B\x1E\x13\xFD\x5B\x24\xB0\x40\x3F\x7F\x09\x2E\x2E"
"\x2B\x39\xF2\x1F\x08\x87\x5E\x6A\x5E\xD4\xA6\x73\x20\xC9\x96\x54\x95\xCA\x7C\x29\x33\x60"
"\x82\x83\x2D\xB6\x0E\xD4\x1A\x10\xC4\xBE\x9E\x1E\xB5\x31\x14\x08\xA2\xDF\x3F\x16\x31\xC5"
"\x02\x20\x6B\x36\xEA\xBF\x52\x6A\xD9\xBA\x3D\xB9\xF0\xCB\x49\xAC\x02\x41\xFE\x1B\x32\x10"
"\x1F\x4B\x8F\x70\xC1\x7A\xA4\x52\x31\xA6\xA8\xC0\x83\xFF\x31\xF0\x38\x80\x9F\xD1\x80\x94"
"\xFE\xFD\xF1\x28\xC7\xEF\x5F\x7F\x03\x1C\x7E\xC0\xEC\x30\x00\xBF\x6E\x23\x39\x07\xAC\xBA"
"\xF5\xB0\x47\x9E\x55\x10\x0B\x3C\x1C\x40\x9F\x3F\x03\x0E\x4B\x2C\x1E\x18\xDA\xB4\x61\x98"
"\x02\x67\xD7\x76\x08\xE2\x1F\x37\xD0\xFF\x78\x53\x5D\xD8\xCF\xEA\x47\xD4\x80\xA7\x0E\x59"
"\x88\x3A\x20\x6B\xD8\x01\x27\xFB\x8B\xEC\x91\xC1\xBF\x94\x01\x57\xC6\x92\xF9\x34\x3C\xF7"
"\xE5\x1E\x55\xF7\x65\x0E\x60\x40\x3F\xE4\x01\x35\x88\x4E\x7F\x5A\xFD\x43\xDF\x32\xE5\xFC"
"\xFB\x60\x1D\x00\xEB\x38\x4C\x1D\x22\xF2\x9F\x43\xBD\x54\xE6\x92\x7D\x01\xF9\xD7\xD4\x40"
"\x40\x29\x38\x10\x81\x47\x51\xD5\x0F\x18\xF1\xA5\xE6\x5C\x3F\x80\xFC\xF3\x1A\x00\xF9\xB8"
"\xC3\xC8\x74\xFC\x1D\xB8\x1F\x00\x8D\x85\xE8\x50\x25\xFF\x30\x11\x50\x3E\xD9\x6D\x95\xCF"
"\x3F\x11\x34\xA6\xE1\x69\x02\x45\x70\x40\x40\x5E\x4C\x87\x0E\x67\x5D\x40\x25\x9F\x8F\x6F"
"\x95\xE8\xD0\x0C\x73\xC1\xC6\xDA\x24\x02\x0A\xB4\xCC\x54\x03\xF1\x58\x42\x6F\x0E\x1D\xD9"
"\x60\x40\x4A\x7A\xD4\xE4\x49\xFD\x08\x90\x4D\x81\xCD\xA9\x77\x46\x3F\x07\xE4\x23\x12\x4F"
"\x43\x50\xF1\x61\x75\xB0\xC1\xB7\xA4\x47\x38\xF9\x03\x80\x19\x44\xC6\xB4\xD2\x42\xDE\x9D"
"\xF7\x4F\x05\x00\x84\xC6\x4E\x40\xAE\x4C\x07\x94\x06\x03\xED\xB2\x65\x67\xF4\xA1\x07\x24"
"\x58\xEC\xFD\x03\x06\x7D\x4F\x0E\x74\xE2\x9F\x03\x29\x33\x1D\x48\x52\xC6\x16\xA2\xA3\x0E"
"\x45\x4A\x28\x92\x15\xE2\xC9\xD1\xA0\x7D\x01\xC0\x13\x20\xEC\x88\x64\x86\x99\x41\x22\x46"
"\x93\x4D\x60\xE1\xF7\x8D\x3F\x9E\x21\x86\x56\x8F\x9A\xFD\x87\x46\x61\x49\xD1\x37\x64\x1A"
"\x03\xE9\x43\xE7\x55\x84\x7E\x58\x29\x62\x3B\x50\xF4\x4D\x26\x3C\xAC\x76\xE0\x70\x6A\x02"
"\x90\xE9\x52\x94\x52\xA7\x6C\x48\x17\x39\xAB\x17\xA5\xAA\x29\xF3\x0F\x05\x15\x76\xA9\x94"
"\x3E\x0B\xBD\x56\x68\x58\xA8\x6E\xA5\x98\x45\x88\xB9\x88\x22\x6C\xAD\x2C\xA4\x9D\x47\x2C"
"\xFC\xF3\x67\xB6\xF9\x35\xAB\xE7\x4D\xFD\x9C\x0B\x9F\x4F\xF3\xF1\x9B\x15\xB9\x03\x6D\x10"
"\x0C\x45\x21\x7D\x66\xD8\x1F\x01\x10\xD0\x80\x1A\x0B\xA5\xE8\xD0\x2B\xFF\xD8\x66\xAD\xC1"
"\x08\x2B\xCC\xF0\x45\x0F\x47\x9C\xDC\xB5\x4A\x51\x90\x9B\xB8\x5C\x02\xB0\xC4\xB4\x20\x1B"
"\x28\xE2\x7A\x45\xB9\x0B\x56\xC7\xBF\xC0\x06\x01\x45\xE1\xC5\x04\xDF\x6B\xFC\xD4\xA1\xCF"
"\x1C\x1B\x16\x77\x16\x56\xB6\xE6\xF5\xE3\xA7\xFE\x8A\x48\x80\x09\xDD\xFC\xD3\x4E\x4C\x65"
"\x0D\xFC\x4F\x90\x4A\x6A\x0A\x2D\x00\x48\x0F\xBC\xB4\x79\x12\xFF\x1A\x50\x63\x4E\x7E\x8C"
"\x1E\x08\x0D\x70\xCB\xE8\x7E\x24\x8A\xB8\xCF\xAE\x88\x65\x6B\xC5\x36\xF4\x7A\x44\x1A\x1A"
"\x11\xBC\xD8\x4A\x71\x67\x02\xC0\x73\x40\xDA\x7C\x48\x92\x47\x38\x2E\x2A\xAC\xC9\x00\xD0"
"\xF4\xE8\x43\xEE\xCC\x12\xCC\x2C\x07\xC5\x54\xAD\xC6\x86\x01\x2E\x78\x1D\x11\x14\x2E\xE9"
"\xA6\x24\x1F\xE0\x8F\xD1\xA6\x76\x0B\xEC\xA2\x70\xC7\x14\x1A\xB3\x60\x61\x2E\x10\x6E\x46"
"\xC7\x70\x5C\x4C\xA4\xA5\x51\x85\x48\x53\xF4\xD3\xC0\x3E\xA8\xB2\xED\x53\xE4\x2C\xD7\xC9"
"\xB8\x43\xA2\x04\x1B\xED\xDE\x00\xAC\xD4\xF0\x43\x63\x03\x70\xA2\x8C\x90\x62\x65\x15\x48"
"\xFA\xB9\xC4\xFB\x56\x86\xFF\xF5\x78\xA1\x01\xCE\x50\x66\xE5\xFD\xD6\x27\xA2\xAA\x26\x77"
"\x1E\x10\x4D\x79\x65\xF3\xCF\x0E\x31\x61\xF3\x0C\x30\x00\x75\x5C\xC7\x3F\x4E\xC6\x94\xCE"
"\xE9\x8E\x79\x64\x2B\xF9\x03\x61\x53\x3B\x88\xB7\x77\xEC\x87\xD7\x2E\xFB\x2A\x90\xAD\x82"
"\x05\xD0\x8F\x6F\xEA\x9C\x0A\xDB\xFD\x17\xE1\xC3\x39\x7E\x21\x4D\x3B\x00\x21\x40\xCB\x79"
"\x0D\x31\x8A\x81\x9D\x88\xAA\x17\x9D\x9C\x75\x6A\x73\x00\xE8\xC5\x5E\x02\xF2\xAD\x78\xC9"
"\xC4\x56\x2D\x60\x46\xB0\xA2\xD3\x91\x81\x44\x4E\x82\x7A\x33\x19\x50\x7A\x36\x2E\x48\xB5"
"\xE5\x22\x1D\x33\xDA\xFB\xE0\x75\xAE\xE8\x21\x66\x85\x0E\x71\x21\xF4\x3E\x22\x9D\xE7\xF9"
"\x6C\x84\x60\x21\x8A\xA0\xAC\x53\xBD\x6F\xF9\x0D\x00\xBB\xF8\x07\x5F\x96\x62\xA7\x80\x0C"
"\xB1\x76\x09\x30\x88\xA7\x64\x52\x16\x30\x08\x44\x01\xDC\x20\x22\xE7\xFE\x15\x10\xF5\x34"
"\xE1\x20\x19\x3B\xA1\x40\x56\x90\x1B\x87\x64\xAF\x14\x04\x10\x5B\x04\xF0\x62\x28\xD8\x64"
"\xAF\x21\x01\xD9\x80\x19\x73\xF8\xAD\x03\xD6\x50\x87\x5B\x01\xCC\x37\x24\x62\xC7\x77\x4C"
"\xED\x8C\x31\xC1\x0F\x03\x03\xE2\x32\x58\x09\x69\x64\x00\x50\x0C\x0B\x65\x42\x41\x0C\xCA"
"\x84\x58\x07\x31\x85\xC0\x8A\x86\x98\xEA\xC1\xE7\x1D\xD0\x98\x85\x29\xDC\xB1\x10\xC1\x24"
"\x10\x00\x84\x91\xDD\x40\x0A\x92\xB4\xB4\xE8\x11\x2C\x11\xC8\x48\x42\x16\x62\x97\x38\xF2"
"\x04\x8E\x39\x0C\xC8\x3E\xFC\x71\x47\x89\xE4\x31\x79\x9F\x54\x4E\xDE\x58\x69\xBC\x8B\xD0"
"\x26\x65\x01\x39\x51\x11\x07\xC2\x36\x06\xB2\x0D\x66\x32\x09\xCD\x0B\x63\x52\x01\x60\x50"
"\xC4\x1F\x50\x44\x8C\xD8\x54\xC6\x96\x81\x79\x63\x03\x4E\xBC\xA5\xC8\x6E\x19\x90\x03\x0C"
"\x6E\x21\xEF\x68\xC2\x56\x9A\x69\x1D\x6C\x26\x93\x9B\xE7\x99\x8E\xF9\x70\x58\xB5\x8B\x40"
"\x6D\x60\xB1\xBC\x1D\x3B\xDB\xE9\x4E\x99\x08\xE0\x00\x04\x78\x67\x4C\x04\x40\x80\x7B\xD2"
"\xD3\x23\x14\xB4\x26\x3D\xE3\x69\xA3\x7C\x02\x34\xA0\x02\x1D\x28\x41\x0B\xFA\xCE\x8E\xFD"
"\xE3\x1B\xA6\x78\x86\x41\x1B\xEA\xD0\x87\x42\x34\xA2\x12\xBD\x88\x09\xDA\x71\xC3\x89\x62"
"\x34\xA3\x1A\xDD\x28\x47\x05\x42\x80\x03\x08\xA0\xA3\x22\x1D\x29\x49\x4B\x6A\xD2\x93\xA2"
"\x34\xA5\x2A\x5D\x29\x4B\x5B\xEA\xD2\x97\xC2\x34\xA6\x32\x9D\x29\x4D\x6B\x6A\xD3\x9B\xE2"
"\x34\xA7\x3A\xDD\x29\x4F\x7B\xEA\xD3\x9F\x02\x35\xA8\x42\x1D\xEA\x46\xED\x49\x80\x90\xCE"
"\xF4\x9E\x47\x25\x6A\x41\x3F\x46\xC1\x55\xA1\x73\x96\xEB\x64\xE5\x27\xF9\xF9\x31\x92\x5D"
"\x84\x07\xDF\x48\x1A\x3F\x9F\x26\xD5\x45\xA5\x93\x22\xEB\x04\x8C\x74\x82\x21\xCE\xAD\x58"
"\xE1\x99\x2F\x33\xA2\x74\xA0\x71\xD6\xAD\x44\xA7\x90\x40\x15\x97\x25\x9A\xE8\x11\x7D\xBC"
"\x72\x22\x1F\xC2\xEB\x44\x22\xF2\x0F\xAB\x4A\xEA\x43\x67\xFB\x87\x3B\x4C\x31\x0B\x68\xF8"
"\xA3\x97\x0F\x89\xC8\x2B\xA7\xCA\x1F\xC6\xDE\x71\xAC\x90\x65\x62\x3F\x20\x74\x91\x00\xAC"
"\x63\x21\x0A\x3D\xAC\x3F\x20\x98\x3C\x3B\xAE\x15\x2C\x17\x54\xAC\x4F\x0B\x65\x2B\xF7\xC0"
"\xE6\xAA\x5C\x8C\xC9\x55\xAF\xDA\x18\x77\x48\xB3\x48\x56\x5C\xED\x1C\xFD\x12\x81\x66\x08"
"\xD2\x21\xAE\xF8\xC7\x33\xB8\x06\x96\x42\x55\xA0\x2C\xBA\xF3\x88\xC8\x66\xC1\x0F\x11\xE6"
"\x14\x3D\x2B\x41\x2E\x6B\xDD\xD7\xB9\xD6\xA2\x86\x6D\xCC\x85\xA1\x6C\x53\x8B\x1A\x45\xC0"
"\x29\x20\x1D\x9B\x6E\xD7\x04\xC2\x80\xCE\x6E\x25\x1D\x6D\xF2\xCF\xF6\xE6\xAA\x94\x0A\x1C"
"\xC4\xB2\xFB\x51\xAD\x1C\x57\xF9\xB1\xFF\xED\xA7\x7A\xB4\x95\xC9\x55\xF5\xC1\x2C\xF8\x22"
"\xE6\x63\xFB\xF0\xAC\x43\x32\xE0\xA9\xC8\x15\x93\xA7\x76\x2B\x00\x44\x9C\x96\x5F\xE7\xFE"
"\x0B\xBA\xEA\x41\xDE\x23\x67\xDB\xDE\x71\xD2\xE7\x52\xC0\xAB\xA5\xCF\x00\x2C\x93\x00\x11"
"\x2F\x52\x5B\x14\xF0\x97\xEE\x81\xBE\xBD\xB1\xD7\x76\xF4\x6D\xD3\x45\xBA\x80\x1A\x06\x73"
"\xAE\xAB\x86\x51\xF1\x39\x07\xF2\x14\x4A\xA1\xB8\xB9\x03\x09\x00\x6E\x49\x3B\x90\x30\x09"
"\x44\x64\xBF\x13\xF0\xC0\x0C\x7C\x60\x0A\x3F\xF7\x1F\x80\xA8\x03\x91\x89\xAC\x86\x60\x9C"
"\xD8\x2F\x3C\x30\x45\x26\x32\x61\x8A\xB7\x3C\x43\x0D\x45\xAE\x03\x0D\xB2\xF2\x0D\x46\x34"
"\xD9\xC9\x98\x74\xEF\xE3\x62\x5C\x27\x26\x67\x62\x16\x06\x09\xB0\x40\xE0\x23\x4C\xEE\x90"
"\x39\xB9\xEA\x64\x67\x88\xDF\x47\xDF\x59\x5E\x74\xC2\x02\xD9\x43\x32\xC1\xFA\x49\x45\x38"
"\xF1\xCE\x10\xBE\x08\x28\xBA\xEC\xBE\xE4\x7C\xD2\x1F\x06\xC6\xCF\x96\x35\x09\xC8\x9E\x82"
"\xC4\x34\xEC\x12\xA6\x88\xDA\xFC\x5C\x7F\xB4\x60\x03\x92\x96\x74\x05\x2E\x91\x64\xAB\x24"
"\xEC\x00\x8A\x30\x13\x26\x2A\x30\xE9\xAD\x65\x65\x11\x07\x68\x00\xA9\x1B\x30\xCF\x38\x02"
"\xE0\xC5\x98\xFA\x73\x67\x36\x50\xEA\x0A\x4C\xE8\x1F\xBE\x75\x48\x52\x0A\x16\x90\x00\xF9"
"\xD8\xA6\x24\xB1\x4D\x00\xCA\x52\x68\xEB\x38\x3A\xC1\x24\x76\x08\xE5\x68\x1D\xD8\xCB\xB1"
"\x78\x77\xD6\x6D\x9A\xB1\x29\x7C\x95\x8B\x10\x8B\xD1\x02\x29\x4B\x1D\xC0\x60\x6D\x2B\x64"
"\x36\xD9\x34\x45\x0F\x6E\x82\x23\xA2\x3E\x20\xB8\xB6\x08\x1C\x08\xED\x36\x8C\xD5\xF9\x26"
"\x6B\xD9\xD4\xF2\xC7\xAC\xAD\xE6\xED\x1F\xBB\x84\xBF\x00\x60\x1B\x9C\xA5\xAD\xD3\x42\x01"
"\x25\xCD\x32\xD1\x12\x90\x85\x3D\x6E\x81\xF0\xA8\x44\xAA\x95\xEF\x83\xE3\xC8\x9E\xFA\x0D"
"\x52\x69\xC0\x46\xCD\x00\xBE\xE8\xB9\xBA\x6C\xC0\x04\x12\x07\x01\x0D\xDA\xF3\x53\x71\xB9"
"\xC8\xC6\x01\xE1\xA4\x40\x5C\x26\xD7\x4C\xBA\x17\x35\x21\x44\xB5\x9B\xAB\x0B\xEF\x81\x2C"
"\xE3\x1F\xF2\x73\x48\x08\x9D\xDD\xDD\x8E\x83\x57\x2F\x50\x15\x08\xBF\x4B\xCB\x19\xF8\xBC"
"\xE8\x22\x5D\xF1\x06\x27\x23\x50\x16\x8D\xA3\xBB\xC5\x3F\x1B\x08\xBB\xBC\xD1\x6E\x34\xF4"
"\xCF\x87\x0E\x2E\x54\x04\x32\x2B\xC1\x50\xFC\x83\xE7\x27\x27\xC8\xB7\x86\xBB\x4B\x44\x02"
"\x8A\x45\x88\x46\x0D\x7E\x10\x7E\x80\x0B\xBE\x63\x16\x5B\x75\xB8\x43\xF8\x7A\x90\x77\xF8"
"\x03\xB0\xFF\x16\xC8\x00\x2E\x08\x8D\x30\x6F\x35\xE9\xB0\x69\x65\x5E\x25\x2B\x91\x3A\x4A"
"\x47\xBD\x33\x4E\xD7\x66\x83\x81\xC7\xA5\xDC\x91\x22\x64\xC6\xD5\xB3\x6C\x4E\x1F\xB4\xEC"
"\x38\x20\x4D\x18\x3B\x61\xAD\xD0\xCD\x4F\x06\x49\xC1\x31\x01\x83\x5A\x23\x22\x8B\xA3\x69"
"\x7B\xDA\x5F\xD5\x4B\x32\xDD\x8A\x98\x26\x58\x52\x9D\x5D\x4A\x9A\x3F\xBE\xB1\x4C\xA4\x4C"
"\x15\x24\x26\x60\xAA\x75\x02\x20\x00\xA4\x8E\xF4\xA3\x04\x70\x39\x4A\x65\x0F\x7B\xD6\xE3"
"\x3E\xF7\xBA\xDF\x3D\xEF\x7B\xEF\xFB\xDF\x03\x3F\xF8\xC2\x1F\x3E\xF1\x8B\x6F\xFC\xE3\x23"
"\x3F\xF9\xCA\x5F\x3E\xF3\x9B\xEF\xFC\xE7\x43\x3F\xFA\xD2\x9F\x3E\xF5\xAB\x6F\xFD\xEB\x63"
"\x3F\xFB\xDA\xDF\x3E\xF7\xBB\xEF\xFD\xEF\x83\x3F\xFC\xE2\x1F\x3F\xF9\xCB\x6F\xFE\xF3\xA3"
"\x3F\xFD\xEA\x5F\x3F\xFB\xDB\xEF\xFE\xF7\xC3\xFF\xF8";
#undef DD_ALIGNED_BUFFER
static const FontCharSet s_fontMonoid18CharSet = {
/* bitmap = */ s_fontMonoid18Bitmap,
/* bitmapWidth = */ 256,
/* bitmapHeight = */ 256,
/* bitmapColorChannels = */ 1,
/* bitmapDecompressSize = */ 65536,
/* charBaseHeight = */ 20,
/* charWidth = */ 17,
/* charHeight = */ 30,
/* charCount = */ 96,
{
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 }, { 0, 150 }, { 0, 0 },
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 60 }, { 17, 60 }, { 68, 0 },
{ 153, 0 }, { 119, 0 }, { 34, 0 }, { 204, 30 },
{ 119, 30 }, { 102, 30 }, { 0, 0 }, { 102, 0 },
{ 170, 30 }, { 136, 0 }, { 187, 30 }, { 221, 0 },
{ 34, 60 }, { 187, 60 }, { 170, 60 }, { 153, 60 },
{ 136, 60 }, { 119, 60 }, { 102, 60 }, { 85, 60 },
{ 68, 60 }, { 51, 60 }, { 136, 30 }, { 153, 30 },
{ 17, 30 }, { 85, 0 }, { 0, 30 }, { 221, 30 },
{ 204, 0 }, { 170, 210 }, { 153, 210 }, { 136, 210 },
{ 119, 210 }, { 102, 210 }, { 85, 210 }, { 68, 210 },
{ 51, 210 }, { 34, 210 }, { 17, 210 }, { 0, 210 },
{ 238, 180 }, { 221, 180 }, { 204, 180 }, { 187, 180 },
{ 170, 180 }, { 153, 180 }, { 136, 180 }, { 119, 180 },
{ 102, 180 }, { 85, 180 }, { 68, 180 }, { 51, 180 },
{ 34, 180 }, { 17, 180 }, { 0, 180 }, { 85, 30 },
{ 187, 0 }, { 68, 30 }, { 170, 0 }, { 51, 0 },
{ 238, 30 }, { 119, 120 }, { 102, 120 }, { 85, 120 },
{ 68, 120 }, { 51, 120 }, { 34, 120 }, { 17, 120 },
{ 0, 120 }, { 238, 90 }, { 221, 90 }, { 204, 90 },
{ 187, 90 }, { 170, 90 }, { 153, 90 }, { 136, 90 },
{ 119, 90 }, { 102, 90 }, { 85, 90 }, { 68, 90 },
{ 51, 90 }, { 34, 90 }, { 17, 90 }, { 0, 90 },
{ 238, 60 }, { 221, 60 }, { 204, 60 }, { 51, 30 },
{ 238, 0 }, { 34, 30 }, { 17, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }
}
};
// ========================================================
// LZW decompression helpers for the font bitmap:
// ========================================================
// These must match the font-tool encoder!
static const int LzwNil = -1;
static const int LzwMaxDictBits = 12;
static const int LzwStartBits = 9;
static const int LzwFirstCode = (1 << (LzwStartBits - 1)); // 256
static const int LzwMaxDictEntries = (1 << LzwMaxDictBits); // 4096
struct LzwDictionary
{
// Dictionary entries 0-255 are always reserved to the byte/ASCII range.
struct Entry
{
int code;
int value;
};
int size;
Entry entries[LzwMaxDictEntries];
LzwDictionary();
int findIndex(int code, int value) const;
bool add(int code, int value);
bool flush(int & codeBitsWidth);
};
struct LzwBitStreamReader
{
const std::uint8_t * stream; // Pointer to the external bit stream. Not owned by the reader.
int sizeInBytes; // Size of the stream in bytes. Might include padding.
int sizeInBits; // Size of the stream in bits, padding not include.
int currBytePos; // Current byte being read in the stream.
int nextBitPos; // Bit position within the current byte to access next. 0 to 7.
int numBitsRead; // Total bits read from the stream so far. Never includes byte-rounding.
LzwBitStreamReader(const std::uint8_t * bitStream, int byteCount, int bitCount);
bool readNextBit(int & outBit);
int readBits(int bitCount);
};
// ========================================================
// LzwDictionary:
// ========================================================
LzwDictionary::LzwDictionary()
{
// First 256 dictionary entries are reserved to the byte/ASCII
// range. Additional entries follow for the character sequences
// found in the input. Up to 4096 - 256 (LzwMaxDictEntries - LzwFirstCode).
size = LzwFirstCode;
for (int i = 0; i < size; ++i)
{
entries[i].code = LzwNil;
entries[i].value = i;
}
}
int LzwDictionary::findIndex(const int code, const int value) const
{
if (code == LzwNil)
{
return value;
}
for (int i = 0; i < size; ++i)
{
if (entries[i].code == code && entries[i].value == value)
{
return i;
}
}
return LzwNil;
}
bool LzwDictionary::add(const int code, const int value)
{
if (size == LzwMaxDictEntries)
{
return false;
}
entries[size].code = code;
entries[size].value = value;
++size;
return true;
}
bool LzwDictionary::flush(int & codeBitsWidth)
{
if (size == (1 << codeBitsWidth))
{
++codeBitsWidth;
if (codeBitsWidth > LzwMaxDictBits)
{
// Clear the dictionary (except the first 256 byte entries).
codeBitsWidth = LzwStartBits;
size = LzwFirstCode;
return true;
}
}
return false;
}
// ========================================================
// LzwBitStreamReader:
// ========================================================
LzwBitStreamReader::LzwBitStreamReader(const std::uint8_t * bitStream, const int byteCount, const int bitCount)
: stream(bitStream)
, sizeInBytes(byteCount)
, sizeInBits(bitCount)
, currBytePos(0)
, nextBitPos(0)
, numBitsRead(0)
{ }
bool LzwBitStreamReader::readNextBit(int & outBit)
{
if (numBitsRead >= sizeInBits)
{
return false; // We are done.
}
const int mask = 1 << nextBitPos;
outBit = !!(stream[currBytePos] & mask);
++numBitsRead;
if (++nextBitPos == 8)
{
nextBitPos = 0;
++currBytePos;
}
return true;
}
int LzwBitStreamReader::readBits(const int bitCount)
{
int num = 0;
for (int b = 0; b < bitCount; ++b)
{
int bit;
if (!readNextBit(bit))
{
break;
}
const int mask = 1 << b;
num = (num & ~mask) | (-bit & mask);
}
return num;
}
// ========================================================
// lzwDecompress() and helpers:
// ========================================================
static bool lzwOutputByte(int code, std::uint8_t *& output, int outputSizeBytes, int & bytesDecodedSoFar)
{
if (code < 0 || code >= 256)
{
return false;
}
if (bytesDecodedSoFar >= outputSizeBytes)
{
return false;
}
*output++ = static_cast<std::uint8_t>(code);
++bytesDecodedSoFar;
return true;
}
static bool lzwOutputSequence(const LzwDictionary & dict, int code,
std::uint8_t *& output, int outputSizeBytes,
int & bytesDecodedSoFar, int & firstByte)
{
// A sequence is stored backwards, so we have to write
// it to a temp then output the buffer in reverse.
int i = 0;
std::uint8_t sequence[LzwMaxDictEntries];
do
{
sequence[i++] = dict.entries[code].value & 0xFF;
code = dict.entries[code].code;
} while (code >= 0);
firstByte = sequence[--i];
for (; i >= 0; --i)
{
if (!lzwOutputByte(sequence[i], output, outputSizeBytes, bytesDecodedSoFar))
{
return false;
}
}
return true;
}
static int lzwDecompress(const void * compressedData, int compressedSizeBytes,
int compressedSizeBits, void * uncompressedData,
int uncompressedSizeBytes)
{
if (compressedData == nullptr || uncompressedData == nullptr)
{
return 0;
}
if (compressedSizeBytes <= 0 || compressedSizeBits <= 0 || uncompressedSizeBytes <= 0)
{
return 0;
}
int code = LzwNil;
int prevCode = LzwNil;
int codeBitsWidth = LzwStartBits;
int firstByte = 0;
int bytesDecoded = 0;
const std::uint8_t * compressedPtr = reinterpret_cast<const std::uint8_t *>(compressedData);
std::uint8_t * uncompressedPtr = reinterpret_cast<std::uint8_t *>(uncompressedData);
// We'll reconstruct the dictionary based on the bit stream codes.
LzwBitStreamReader bitStream(compressedPtr, compressedSizeBytes, compressedSizeBits);
LzwDictionary dictionary;
// We check to avoid an overflow of the user buffer.
// If the buffer is smaller than the decompressed size, we
// break the loop and return the current decompression count.
while (bitStream.numBitsRead < bitStream.sizeInBits)
{
if (codeBitsWidth > LzwMaxDictBits)
{
break;
}
code = bitStream.readBits(codeBitsWidth);
if (prevCode == LzwNil)
{
if (!lzwOutputByte(code, uncompressedPtr, uncompressedSizeBytes, bytesDecoded))
{
break;
}
firstByte = code;
prevCode = code;
continue;
}
if (code >= dictionary.size)
{
if (!lzwOutputSequence(dictionary, prevCode, uncompressedPtr,
uncompressedSizeBytes, bytesDecoded, firstByte))
{
break;
}
if (!lzwOutputByte(firstByte, uncompressedPtr, uncompressedSizeBytes, bytesDecoded))
{
break;
}
}
else
{
if (!lzwOutputSequence(dictionary, code, uncompressedPtr,
uncompressedSizeBytes, bytesDecoded, firstByte))
{
break;
}
}
if (!dictionary.add(prevCode, firstByte))
{
break;
}
if (dictionary.flush(codeBitsWidth))
{
prevCode = LzwNil;
}
else
{
prevCode = code;
}
}
return bytesDecoded;
}
// ========================================================
// Built-in font glyph bitmap decompression:
// ========================================================
// If you decide to change the font, these are the only things that
// need to be updated. The s_font* variables are never referenced
// directly in the code, these functions are used instead.
static inline const std::uint8_t * getRawFontBitmapData() { return s_fontMonoid18Bitmap; }
static inline const FontCharSet & getFontCharSet() { return s_fontMonoid18CharSet; }
static std::uint8_t * decompressFontBitmap()
{
const std::uint32_t * compressedData = reinterpret_cast<const std::uint32_t *>(getRawFontBitmapData());
// First two uint32s are the compressed size in
// bytes followed by the compressed size in bits.
const int compressedSizeBytes = *compressedData++;
const int compressedSizeBits = *compressedData++;
// Allocate the decompression buffer:
const int uncompressedSizeBytes = getFontCharSet().bitmapDecompressSize;
std::uint8_t * uncompressedData = static_cast<std::uint8_t *>(DD_MALLOC(uncompressedSizeBytes));
// Out of memory? Font rendering will be disable.
if (uncompressedData == nullptr)
{
return nullptr;
}
// Decode the bitmap pixels (stored with an LZW-flavor of compression):
const int bytesDecoded = lzwDecompress(compressedData,
compressedSizeBytes,
compressedSizeBits,
uncompressedData,
uncompressedSizeBytes);
// Unexpected decompression size? Probably a data mismatch in the font-tool.
if (bytesDecoded != uncompressedSizeBytes)
{
DD_MFREE(uncompressedData);
return nullptr;
}
// Must later free with DD_MFREE().
return uncompressedData;
}
// ========================================================
// Internal Debug Draw queues and helper types/functions:
// ========================================================
struct DebugString
{
std::int64_t expiryDateMillis;
ddVec3 color;
float posX;
float posY;
float scaling;
ddStr text;
bool centered;
};
struct DebugPoint
{
std::int64_t expiryDateMillis;
ddVec3 position;
ddVec3 color;
float size;
bool depthEnabled;
};
struct DebugLine
{
std::int64_t expiryDateMillis;
ddVec3 posFrom;
ddVec3 posTo;
ddVec3 color;
bool depthEnabled;
};
struct InternalContext DD_EXPLICIT_CONTEXT_ONLY(: public OpaqueContextType)
{
int vertexBufferUsed;
int debugStringsCount;
int debugPointsCount;
int debugLinesCount;
std::int64_t currentTimeMillis; // Latest time value (in milliseconds) from dd::flush().
GlyphTextureHandle glyphTexHandle; // Our built-in glyph bitmap. If kept null, no text is rendered.
RenderInterface * renderInterface; // Ref to the external renderer. Can be null for a no-op debug draw.
DrawVertex vertexBuffer[DEBUG_DRAW_VERTEX_BUFFER_SIZE]; // Vertex buffer we use to expand the lines/points before calling on RenderInterface.
DebugString debugStrings[DEBUG_DRAW_MAX_STRINGS]; // Debug strings queue (2D screen-space strings + 3D projected labels).
DebugPoint debugPoints[DEBUG_DRAW_MAX_POINTS]; // 3D debug points queue.
DebugLine debugLines[DEBUG_DRAW_MAX_LINES]; // 3D debug lines queue.
InternalContext(RenderInterface * renderer)
: vertexBufferUsed(0)
, debugStringsCount(0)
, debugPointsCount(0)
, debugLinesCount(0)
, currentTimeMillis(0)
, glyphTexHandle(nullptr)
, renderInterface(renderer)
{ }
};
// ========================================================
// Library context mode selection:
// ========================================================
#if (defined(DEBUG_DRAW_PER_THREAD_CONTEXT) && defined(DEBUG_DRAW_EXPLICIT_CONTEXT))
#error "DEBUG_DRAW_PER_THREAD_CONTEXT and DEBUG_DRAW_EXPLICIT_CONTEXT are mutually exclusive!"
#endif // DEBUG_DRAW_PER_THREAD_CONTEXT && DEBUG_DRAW_EXPLICIT_CONTEXT
#if defined(DEBUG_DRAW_EXPLICIT_CONTEXT)
//
// Explicit context passed as argument
//
#define DD_CONTEXT static_cast<InternalContext *>(ctx)
#elif defined(DEBUG_DRAW_PER_THREAD_CONTEXT)
//
// Per-thread global context (MT safe)
//
#if defined(__GNUC__) || defined(__clang__) // GCC/Clang
#define DD_THREAD_LOCAL static __thread
#elif defined(_MSC_VER) // Visual Studio
#define DD_THREAD_LOCAL static __declspec(thread)
#else // Try C++11 thread_local
#if DEBUG_DRAW_CXX11_SUPPORTED
#define DD_THREAD_LOCAL static thread_local
#else // !DEBUG_DRAW_CXX11_SUPPORTED
#error "Unsupported compiler - unknown TLS model"
#endif // DEBUG_DRAW_CXX11_SUPPORTED
#endif // TLS model
DD_THREAD_LOCAL InternalContext * s_threadContext = nullptr;
#define DD_CONTEXT s_threadContext
#undef DD_THREAD_LOCAL
#else // Debug Draw context selection
//
// Global static context (single threaded operation)
//
static InternalContext * s_globalContext = nullptr;
#define DD_CONTEXT s_globalContext
#endif // Debug Draw context selection
// ========================================================
#if DEBUG_DRAW_USE_STD_MATH
static inline float floatAbs(float x) { return fabsf(x); }
static inline float floatSin(float radians) { return sinf(radians); }
static inline float floatCos(float radians) { return cosf(radians); }
static inline float floatInvSqrt(float x) { return (1.0f / sqrtf(x)); }
#else // !DEBUG_DRAW_USE_STD_MATH
// ========================================================
// Fast approximations of math functions used by Debug Draw
// ========================================================
union Float2UInt
{
float asFloat;
std::uint32_t asUInt;
};
static inline float floatRound(float x)
{
// Probably slower than std::floor(), also depends of FPU settings,
// but we only need this for that special sin/cos() case anyways...
const int i = static_cast<int>(x);
return (x >= 0.0f) ? static_cast<float>(i) : static_cast<float>(i - 1);
}
static inline float floatAbs(float x)
{
// Mask-off the sign bit
Float2UInt i;
i.asFloat = x;
i.asUInt &= 0x7FFFFFFF;
return i.asFloat;
}
static inline float floatInvSqrt(float x)
{
// Modified version of the emblematic Q_rsqrt() from Quake 3.
// See: http://en.wikipedia.org/wiki/Fast_inverse_square_root
Float2UInt i;
float y, r;
y = x * 0.5f;
i.asFloat = x;
i.asUInt = 0x5F3759DF - (i.asUInt >> 1);
r = i.asFloat;
r = r * (1.5f - (r * r * y));
return r;
}
static inline float floatSin(float radians)
{
static const float A = -2.39e-08;
static const float B = 2.7526e-06;
static const float C = 1.98409e-04;
static const float D = 8.3333315e-03;
static const float E = 1.666666664e-01;
if (radians < 0.0f || radians >= TAU)
{
radians -= floatRound(radians / TAU) * TAU;
}
if (radians < PI)
{
if (radians > HalfPI)
{
radians = PI - radians;
}
}
else
{
radians = (radians > (PI + HalfPI)) ? (radians - TAU) : (PI - radians);
}
const float s = radians * radians;
return radians * (((((A * s + B) * s - C) * s + D) * s - E) * s + 1.0f);
}
static inline float floatCos(float radians)
{
static const float A = -2.605e-07;
static const float B = 2.47609e-05;
static const float C = 1.3888397e-03;
static const float D = 4.16666418e-02;
static const float E = 4.999999963e-01;
if (radians < 0.0f || radians >= TAU)
{
radians -= floatRound(radians / TAU) * TAU;
}
float d;
if (radians < PI)
{
if (radians > HalfPI)
{
radians = PI - radians;
d = -1.0f;
}
else
{
d = 1.0f;
}
}
else
{
if (radians > (PI + HalfPI))
{
radians = radians - TAU;
d = 1.0f;
}
else
{
radians = PI - radians;
d = -1.0f;
}
}
const float s = radians * radians;
return d * (((((A * s + B) * s - C) * s + D) * s - E) * s + 1.0f);
}
#endif // DEBUG_DRAW_USE_STD_MATH
// ========================================================
// ddVec3 helpers:
// ========================================================
enum VecElements { X, Y, Z, W };
static inline void vecSet(ddVec3_Out dest, const float x, const float y, const float z)
{
dest[X] = x;
dest[Y] = y;
dest[Z] = z;
}
static inline void vecCopy(ddVec3_Out dest, ddVec3_In src)
{
dest[X] = src[X];
dest[Y] = src[Y];
dest[Z] = src[Z];
}
static inline void vecAdd(ddVec3_Out result, ddVec3_In a, ddVec3_In b)
{
result[X] = a[X] + b[X];
result[Y] = a[Y] + b[Y];
result[Z] = a[Z] + b[Z];
}
static inline void vecSub(ddVec3_Out result, ddVec3_In a, ddVec3_In b)
{
result[X] = a[X] - b[X];
result[Y] = a[Y] - b[Y];
result[Z] = a[Z] - b[Z];
}
static inline void vecScale(ddVec3_Out result, ddVec3_In v, const float s)
{
result[X] = v[X] * s;
result[Y] = v[Y] * s;
result[Z] = v[Z] * s;
}
static inline void vecNormalize(ddVec3_Out result, ddVec3_In v)
{
const float lenSqr = v[X] * v[X] + v[Y] * v[Y] + v[Z] * v[Z];
const float invLen = floatInvSqrt(lenSqr);
result[X] = v[X] * invLen;
result[Y] = v[Y] * invLen;
result[Z] = v[Z] * invLen;
}
static inline void vecCross(ddVec3_Out result, ddVec3_In a, ddVec3_In b)
{
result[X] = a[Y] * b[Z] - a[Z] * b[Y];
result[Y] = a[Z] * b[X] - a[X] * b[Z];
result[Z] = a[X] * b[Y] - a[Y] * b[X];
}
static inline void vecOrthogonalBasis(ddVec3_Out left, ddVec3_Out up, ddVec3_In v)
{
// Produces two orthogonal vectors for normalized vector v.
float lenSqr, invLen;
if (floatAbs(v[Z]) > 0.7f)
{
lenSqr = v[Y] * v[Y] + v[Z] * v[Z];
invLen = floatInvSqrt(lenSqr);
up[X] = 0.0f;
up[Y] = v[Z] * invLen;
up[Z] = -v[Y] * invLen;
left[X] = lenSqr * invLen;
left[Y] = -v[X] * up[Z];
left[Z] = v[X] * up[Y];
}
else
{
lenSqr = v[X] * v[X] + v[Y] * v[Y];
invLen = floatInvSqrt(lenSqr);
left[X] = -v[Y] * invLen;
left[Y] = v[X] * invLen;
left[Z] = 0.0f;
up[X] = -v[Z] * left[Y];
up[Y] = v[Z] * left[X];
up[Z] = lenSqr * invLen;
}
}
// ========================================================
// ddMat4x4 helpers:
// ========================================================
static inline void matTransformPointXYZ(ddVec3_Out result, ddVec3_In p, ddMat4x4_In m)
{
result[X] = (m[0] * p[X]) + (m[4] * p[Y]) + (m[8] * p[Z]) + m[12]; // p[W] assumed to be 1
result[Y] = (m[1] * p[X]) + (m[5] * p[Y]) + (m[9] * p[Z]) + m[13];
result[Z] = (m[2] * p[X]) + (m[6] * p[Y]) + (m[10] * p[Z]) + m[14];
}
static inline void matTransformPointXYZW(float result[4], ddVec3_In p, ddMat4x4_In m)
{
result[X] = (m[0] * p[X]) + (m[4] * p[Y]) + (m[8] * p[Z]) + m[12]; // p[W] assumed to be 1
result[Y] = (m[1] * p[X]) + (m[5] * p[Y]) + (m[9] * p[Z]) + m[13];
result[Z] = (m[2] * p[X]) + (m[6] * p[Y]) + (m[10] * p[Z]) + m[14];
result[W] = (m[3] * p[X]) + (m[7] * p[Y]) + (m[11] * p[Z]) + m[15];
}
static inline float matTransformPointXYZW2(ddVec3_Out result, const float p[3], ddMat4x4_In m)
{
result[X] = (m[0] * p[X]) + (m[4] * p[Y]) + (m[8] * p[Z]) + m[12]; // p[W] assumed to be 1
result[Y] = (m[1] * p[X]) + (m[5] * p[Y]) + (m[9] * p[Z]) + m[13];
result[Z] = (m[2] * p[X]) + (m[6] * p[Y]) + (m[10] * p[Z]) + m[14];
float rw = (m[3] * p[X]) + (m[7] * p[Y]) + (m[11] * p[Z]) + m[15];
return rw;
}
// ========================================================
// Misc local functions for draw queue management:
// ========================================================
enum DrawMode
{
DrawModePoints,
DrawModeLines,
DrawModeText
};
static void flushDebugVerts(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) const DrawMode mode, const bool depthEnabled)
{
if (DD_CONTEXT->vertexBufferUsed == 0)
{
return;
}
switch (mode)
{
case DrawModePoints :
DD_CONTEXT->renderInterface->drawPointList(DD_CONTEXT->vertexBuffer,
DD_CONTEXT->vertexBufferUsed,
depthEnabled);
break;
case DrawModeLines :
DD_CONTEXT->renderInterface->drawLineList(DD_CONTEXT->vertexBuffer,
DD_CONTEXT->vertexBufferUsed,
depthEnabled);
break;
case DrawModeText :
DD_CONTEXT->renderInterface->drawGlyphList(DD_CONTEXT->vertexBuffer,
DD_CONTEXT->vertexBufferUsed,
DD_CONTEXT->glyphTexHandle);
break;
} // switch (mode)
DD_CONTEXT->vertexBufferUsed = 0;
}
static void pushPointVert(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) const DebugPoint & point)
{
// Make room for one more vert:
if ((DD_CONTEXT->vertexBufferUsed + 1) >= DEBUG_DRAW_VERTEX_BUFFER_SIZE)
{
flushDebugVerts(DD_EXPLICIT_CONTEXT_ONLY(ctx,) DrawModePoints, point.depthEnabled);
}
DrawVertex & v = DD_CONTEXT->vertexBuffer[DD_CONTEXT->vertexBufferUsed++];
v.point.x = point.position[X];
v.point.y = point.position[Y];
v.point.z = point.position[Z];
v.point.r = point.color[X];
v.point.g = point.color[Y];
v.point.b = point.color[Z];
v.point.size = point.size;
}
static void pushLineVert(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) const DebugLine & line)
{
// Make room for two more verts:
if ((DD_CONTEXT->vertexBufferUsed + 2) >= DEBUG_DRAW_VERTEX_BUFFER_SIZE)
{
flushDebugVerts(DD_EXPLICIT_CONTEXT_ONLY(ctx,) DrawModeLines, line.depthEnabled);
}
DrawVertex & v0 = DD_CONTEXT->vertexBuffer[DD_CONTEXT->vertexBufferUsed++];
DrawVertex & v1 = DD_CONTEXT->vertexBuffer[DD_CONTEXT->vertexBufferUsed++];
v0.line.x = line.posFrom[X];
v0.line.y = line.posFrom[Y];
v0.line.z = line.posFrom[Z];
v0.line.r = line.color[X];
v0.line.g = line.color[Y];
v0.line.b = line.color[Z];
v1.line.x = line.posTo[X];
v1.line.y = line.posTo[Y];
v1.line.z = line.posTo[Z];
v1.line.r = line.color[X];
v1.line.g = line.color[Y];
v1.line.b = line.color[Z];
}
static void pushGlyphVerts(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) const DrawVertex verts[4])
{
static const int indexes[6] = { 0, 1, 2, 2, 1, 3 };
// Make room for one more glyph (2 tris):
if ((DD_CONTEXT->vertexBufferUsed + 6) >= DEBUG_DRAW_VERTEX_BUFFER_SIZE)
{
flushDebugVerts(DD_EXPLICIT_CONTEXT_ONLY(ctx,) DrawModeText, false);
}
for (int i = 0; i < 6; ++i)
{
DD_CONTEXT->vertexBuffer[DD_CONTEXT->vertexBufferUsed++].glyph = verts[indexes[i]].glyph;
}
}
static void pushStringGlyphs(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) float x, float y,
const char * text, ddVec3_In color, const float scaling)
{
// Invariants for all characters:
const float initialX = x;
const float scaleU = static_cast<float>(getFontCharSet().bitmapWidth);
const float scaleV = static_cast<float>(getFontCharSet().bitmapHeight);
const float fixedWidth = static_cast<float>(getFontCharSet().charWidth);
const float fixedHeight = static_cast<float>(getFontCharSet().charHeight);
const float tabW = fixedWidth * 4.0f * scaling; // TAB = 4 spaces.
const float chrW = fixedWidth * scaling;
const float chrH = fixedHeight * scaling;
for (; *text != '\0'; ++text)
{
const int charVal = *text;
if (charVal >= FontCharSet::MaxChars)
{
continue;
}
if (charVal == ' ')
{
x += chrW;
continue;
}
if (charVal == '\t')
{
x += tabW;
continue;
}
if (charVal == '\n')
{
y += chrH;
x = initialX;
continue;
}
const FontChar fontChar = getFontCharSet().chars[charVal];
const float u0 = (fontChar.x + 0.5f) / scaleU;
const float v0 = (fontChar.y + 0.5f) / scaleV;
const float u1 = u0 + (fixedWidth / scaleU);
const float v1 = v0 + (fixedHeight / scaleV);
DrawVertex verts[4];
verts[0].glyph.x = x;
verts[0].glyph.y = y;
verts[0].glyph.u = u0;
verts[0].glyph.v = v0;
verts[0].glyph.r = color[X];
verts[0].glyph.g = color[Y];
verts[0].glyph.b = color[Z];
verts[1].glyph.x = x;
verts[1].glyph.y = y + chrH;
verts[1].glyph.u = u0;
verts[1].glyph.v = v1;
verts[1].glyph.r = color[X];
verts[1].glyph.g = color[Y];
verts[1].glyph.b = color[Z];
verts[2].glyph.x = x + chrW;
verts[2].glyph.y = y;
verts[2].glyph.u = u1;
verts[2].glyph.v = v0;
verts[2].glyph.r = color[X];
verts[2].glyph.g = color[Y];
verts[2].glyph.b = color[Z];
verts[3].glyph.x = x + chrW;
verts[3].glyph.y = y + chrH;
verts[3].glyph.u = u1;
verts[3].glyph.v = v1;
verts[3].glyph.r = color[X];
verts[3].glyph.g = color[Y];
verts[3].glyph.b = color[Z];
pushGlyphVerts(DD_EXPLICIT_CONTEXT_ONLY(ctx,) verts);
x += chrW;
}
}
static float calcTextWidth(const char * text, const float scaling)
{
const float fixedWidth = static_cast<float>(getFontCharSet().charWidth);
const float tabW = fixedWidth * 4.0f * scaling; // TAB = 4 spaces.
const float chrW = fixedWidth * scaling;
float x = 0.0f;
for (; *text != '\0'; ++text)
{
// Tabs are handled differently (4 spaces)
if (*text == '\t')
{
x += tabW;
}
else // Non-tab char (including whitespace)
{
x += chrW;
}
}
return x;
}
static void drawDebugStrings(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx))
{
const int count = DD_CONTEXT->debugStringsCount;
if (count == 0)
{
return;
}
const DebugString * const debugStrings = DD_CONTEXT->debugStrings;
for (int i = 0; i < count; ++i)
{
const DebugString & dstr = debugStrings[i];
if (dstr.centered)
{
// 3D Labels are centered at the point of origin, e.g. center-aligned.
const float offset = calcTextWidth(dstr.text.c_str(), dstr.scaling) * 0.5f;
pushStringGlyphs(DD_EXPLICIT_CONTEXT_ONLY(ctx,) dstr.posX - offset, dstr.posY, dstr.text.c_str(), dstr.color, dstr.scaling);
}
else
{
// Left-aligned
pushStringGlyphs(DD_EXPLICIT_CONTEXT_ONLY(ctx,) dstr.posX, dstr.posY, dstr.text.c_str(), dstr.color, dstr.scaling);
}
}
flushDebugVerts(DD_EXPLICIT_CONTEXT_ONLY(ctx,) DrawModeText, false);
}
static void drawDebugPoints(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx))
{
const int count = DD_CONTEXT->debugPointsCount;
if (count == 0)
{
return;
}
const DebugPoint * const debugPoints = DD_CONTEXT->debugPoints;
//
// First pass, points with depth test ENABLED:
//
int numDepthlessPoints = 0;
for (int i = 0; i < count; ++i)
{
const DebugPoint & point = debugPoints[i];
if (point.depthEnabled)
{
pushPointVert(DD_EXPLICIT_CONTEXT_ONLY(ctx,) point);
}
numDepthlessPoints += !point.depthEnabled;
}
flushDebugVerts(DD_EXPLICIT_CONTEXT_ONLY(ctx,) DrawModePoints, true);
//
// Second pass draws points with depth DISABLED:
//
if (numDepthlessPoints > 0)
{
for (int i = 0; i < count; ++i)
{
const DebugPoint & point = debugPoints[i];
if (!point.depthEnabled)
{
pushPointVert(DD_EXPLICIT_CONTEXT_ONLY(ctx,) point);
}
}
flushDebugVerts(DD_EXPLICIT_CONTEXT_ONLY(ctx,) DrawModePoints, false);
}
}
static void drawDebugLines(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx))
{
const int count = DD_CONTEXT->debugLinesCount;
if (count == 0)
{
return;
}
const DebugLine * const debugLines = DD_CONTEXT->debugLines;
//
// First pass, lines with depth test ENABLED:
//
int numDepthlessLines = 0;
for (int i = 0; i < count; ++i)
{
const DebugLine & line = debugLines[i];
if (line.depthEnabled)
{
pushLineVert(DD_EXPLICIT_CONTEXT_ONLY(ctx,) line);
}
numDepthlessLines += !line.depthEnabled;
}
flushDebugVerts(DD_EXPLICIT_CONTEXT_ONLY(ctx,) DrawModeLines, true);
//
// Second pass draws lines with depth DISABLED:
//
if (numDepthlessLines > 0)
{
for (int i = 0; i < count; ++i)
{
const DebugLine & line = debugLines[i];
if (!line.depthEnabled)
{
pushLineVert(DD_EXPLICIT_CONTEXT_ONLY(ctx,) line);
}
}
flushDebugVerts(DD_EXPLICIT_CONTEXT_ONLY(ctx,) DrawModeLines, false);
}
}
template<typename T>
static void clearDebugQueue(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) T * queue, int & queueCount)
{
const std::int64_t time = DD_CONTEXT->currentTimeMillis;
if (time == 0)
{
queueCount = 0;
return;
}
int index = 0;
T * pElem = queue;
// Concatenate elements that still need to be draw on future frames:
for (int i = 0; i < queueCount; ++i, ++pElem)
{
if (pElem->expiryDateMillis > time)
{
if (index != i)
{
queue[index] = *pElem;
}
++index;
}
}
queueCount = index;
}
static void setupGlyphTexture(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx))
{
if (DD_CONTEXT->renderInterface == nullptr)
{
return;
}
if (DD_CONTEXT->glyphTexHandle != nullptr)
{
DD_CONTEXT->renderInterface->destroyGlyphTexture(DD_CONTEXT->glyphTexHandle);
DD_CONTEXT->glyphTexHandle = nullptr;
}
std::uint8_t * decompressedBitmap = decompressFontBitmap();
if (decompressedBitmap == nullptr)
{
return; // Failed to decompressed. No font rendering available.
}
DD_CONTEXT->glyphTexHandle = DD_CONTEXT->renderInterface->createGlyphTexture(
getFontCharSet().bitmapWidth,
getFontCharSet().bitmapHeight,
decompressedBitmap);
// No longer needed.
DD_MFREE(decompressedBitmap);
}
// ========================================================
// Public Debug Draw interface:
// ========================================================
bool initialize(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle * outCtx,) RenderInterface * renderer)
{
if (renderer == nullptr)
{
return false;
}
void * buffer = DD_MALLOC(sizeof(InternalContext));
if (buffer == nullptr)
{
return false;
}
InternalContext * newCtx = ::new(buffer) InternalContext(renderer);
#ifdef DEBUG_DRAW_EXPLICIT_CONTEXT
if ((*outCtx) != nullptr) { shutdown(*outCtx); }
(*outCtx) = newCtx;
#else // !DEBUG_DRAW_EXPLICIT_CONTEXT
if (DD_CONTEXT != nullptr) { shutdown(); }
DD_CONTEXT = newCtx;
#endif // DEBUG_DRAW_EXPLICIT_CONTEXT
setupGlyphTexture(DD_EXPLICIT_CONTEXT_ONLY(*outCtx));
return true;
}
void shutdown(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx))
{
if (DD_CONTEXT != nullptr)
{
// If this macro is defined, the user-provided ddStr type
// needs some extra cleanup before shutdown, so we run for
// all entries in the debugStrings[] array.
//
// We could call std::string::clear() here, but clear()
// doesn't deallocate memory in std string, so we might
// as well let the default destructor do the cleanup,
// when using the default (AKA std::string) ddStr.
#ifdef DEBUG_DRAW_STR_DEALLOC_FUNC
for (int i = 0; i < DEBUG_DRAW_MAX_STRINGS; ++i)
{
DEBUG_DRAW_STR_DEALLOC_FUNC(DD_CONTEXT->debugStrings[i].text);
}
#endif // DEBUG_DRAW_STR_DEALLOC_FUNC
if (DD_CONTEXT->renderInterface != nullptr && DD_CONTEXT->glyphTexHandle != nullptr)
{
DD_CONTEXT->renderInterface->destroyGlyphTexture(DD_CONTEXT->glyphTexHandle);
}
DD_CONTEXT->~InternalContext(); // Destroy first
DD_MFREE(DD_CONTEXT);
#ifndef DEBUG_DRAW_EXPLICIT_CONTEXT
DD_CONTEXT = nullptr;
#endif // DEBUG_DRAW_EXPLICIT_CONTEXT
}
}
bool isInitialized(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx))
{
return (DD_CONTEXT != nullptr && DD_CONTEXT->renderInterface != nullptr);
}
bool hasPendingDraws(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx))
{
if (!isInitialized(DD_EXPLICIT_CONTEXT_ONLY(ctx)))
{
return false;
}
return (DD_CONTEXT->debugStringsCount + DD_CONTEXT->debugPointsCount + DD_CONTEXT->debugLinesCount) > 0;
}
void flush(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) const std::int64_t currTimeMillis, const std::uint32_t flags)
{
if (!hasPendingDraws(DD_EXPLICIT_CONTEXT_ONLY(ctx)))
{
return;
}
// Save the last know time value for next dd::line/dd::point calls.
DD_CONTEXT->currentTimeMillis = currTimeMillis;
// Let the user set common render states.
DD_CONTEXT->renderInterface->beginDraw();
// Issue the render calls:
if (flags & FlushLines) { drawDebugLines(DD_EXPLICIT_CONTEXT_ONLY(ctx)); }
if (flags & FlushPoints) { drawDebugPoints(DD_EXPLICIT_CONTEXT_ONLY(ctx)); }
if (flags & FlushText) { drawDebugStrings(DD_EXPLICIT_CONTEXT_ONLY(ctx)); }
// And cleanup if needed.
DD_CONTEXT->renderInterface->endDraw();
// Remove all expired objects, regardless of draw flags:
clearDebugQueue(DD_EXPLICIT_CONTEXT_ONLY(ctx,) DD_CONTEXT->debugStrings, DD_CONTEXT->debugStringsCount);
clearDebugQueue(DD_EXPLICIT_CONTEXT_ONLY(ctx,) DD_CONTEXT->debugPoints, DD_CONTEXT->debugPointsCount);
clearDebugQueue(DD_EXPLICIT_CONTEXT_ONLY(ctx,) DD_CONTEXT->debugLines, DD_CONTEXT->debugLinesCount);
}
void clear(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx))
{
if (!isInitialized(DD_EXPLICIT_CONTEXT_ONLY(ctx)))
{
return;
}
// Let the user cleanup the debug strings:
#ifdef DEBUG_DRAW_STR_DEALLOC_FUNC
for (int i = 0; i < DEBUG_DRAW_MAX_STRINGS; ++i)
{
DEBUG_DRAW_STR_DEALLOC_FUNC(DD_CONTEXT->debugStrings[i].text);
}
#endif // DEBUG_DRAW_STR_DEALLOC_FUNC
DD_CONTEXT->vertexBufferUsed = 0;
DD_CONTEXT->debugStringsCount = 0;
DD_CONTEXT->debugPointsCount = 0;
DD_CONTEXT->debugLinesCount = 0;
}
void point(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ddVec3_In pos, ddVec3_In color,
const float size, const int durationMillis, const bool depthEnabled)
{
if (!isInitialized(DD_EXPLICIT_CONTEXT_ONLY(ctx)))
{
return;
}
if (DD_CONTEXT->debugPointsCount == DEBUG_DRAW_MAX_POINTS)
{
DEBUG_DRAW_OVERFLOWED("DEBUG_DRAW_MAX_POINTS limit reached! Dropping further debug point draws.");
return;
}
DebugPoint & point = DD_CONTEXT->debugPoints[DD_CONTEXT->debugPointsCount++];
point.expiryDateMillis = DD_CONTEXT->currentTimeMillis + durationMillis;
point.depthEnabled = depthEnabled;
point.size = size;
vecCopy(point.position, pos);
vecCopy(point.color, color);
}
void line(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ddVec3_In from, ddVec3_In to,
ddVec3_In color, const int durationMillis, const bool depthEnabled)
{
if (!isInitialized(DD_EXPLICIT_CONTEXT_ONLY(ctx)))
{
return;
}
if (DD_CONTEXT->debugLinesCount == DEBUG_DRAW_MAX_LINES)
{
DEBUG_DRAW_OVERFLOWED("DEBUG_DRAW_MAX_LINES limit reached! Dropping further debug line draws.");
return;
}
DebugLine & line = DD_CONTEXT->debugLines[DD_CONTEXT->debugLinesCount++];
line.expiryDateMillis = DD_CONTEXT->currentTimeMillis + durationMillis;
line.depthEnabled = depthEnabled;
vecCopy(line.posFrom, from);
vecCopy(line.posTo, to);
vecCopy(line.color, color);
}
void screenText(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) const char * const str, ddVec3_In pos,
ddVec3_In color, const float scaling, const int durationMillis)
{
if (!isInitialized(DD_EXPLICIT_CONTEXT_ONLY(ctx)))
{
return;
}
if (DD_CONTEXT->glyphTexHandle == nullptr)
{
return;
}
if (DD_CONTEXT->debugStringsCount == DEBUG_DRAW_MAX_STRINGS)
{
DEBUG_DRAW_OVERFLOWED("DEBUG_DRAW_MAX_STRINGS limit reached! Dropping further debug string draws.");
return;
}
DebugString & dstr = DD_CONTEXT->debugStrings[DD_CONTEXT->debugStringsCount++];
dstr.expiryDateMillis = DD_CONTEXT->currentTimeMillis + durationMillis;
dstr.posX = pos[X];
dstr.posY = pos[Y];
dstr.scaling = scaling;
dstr.text = str;
dstr.centered = false;
vecCopy(dstr.color, color);
}
void projectedText(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) const char * const str, ddVec3_In pos, ddVec3_In color,
ddMat4x4_In vpMatrix, const int sx, const int sy, const int sw, const int sh, const float scaling,
const int durationMillis)
{
if (!isInitialized(DD_EXPLICIT_CONTEXT_ONLY(ctx)))
{
return;
}
if (DD_CONTEXT->glyphTexHandle == nullptr)
{
return;
}
if (DD_CONTEXT->debugStringsCount == DEBUG_DRAW_MAX_STRINGS)
{
DEBUG_DRAW_OVERFLOWED("DEBUG_DRAW_MAX_STRINGS limit reached! Dropping further debug string draws.");
return;
}
float tempPoint[4];
matTransformPointXYZW(tempPoint, pos, vpMatrix);
// Bail if W ended up as zero.
if (floatAbs(tempPoint[W]) < FloatEpsilon)
{
return;
}
// Bail if point is behind camera.
if (tempPoint[Z] < -tempPoint[W] || tempPoint[Z] > tempPoint[W])
{
return;
}
// Perspective divide (we only care about the 2D part now):
tempPoint[X] /= tempPoint[W];
tempPoint[Y] /= tempPoint[W];
// Map to window coordinates:
float scrX = ((tempPoint[X] * 0.5f) + 0.5f) * sw + sx;
float scrY = ((tempPoint[Y] * 0.5f) + 0.5f) * sh + sy;
// Need to invert the direction because on OGL the screen origin is the bottom-left corner.
// NOTE: This is not renderer agnostic, I think... Should add a #define or something!
scrY = static_cast<float>(sh) - scrY;
DebugString & dstr = DD_CONTEXT->debugStrings[DD_CONTEXT->debugStringsCount++];
dstr.expiryDateMillis = DD_CONTEXT->currentTimeMillis + durationMillis;
dstr.posX = scrX;
dstr.posY = scrY;
dstr.scaling = scaling;
dstr.text = str;
dstr.centered = true;
vecCopy(dstr.color, color);
}
void axisTriad(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ddMat4x4_In transform, const float size,
const float length, const int durationMillis, const bool depthEnabled)
{
if (!isInitialized(DD_EXPLICIT_CONTEXT_ONLY(ctx)))
{
return;
}
ddVec3 p0, p1, p2, p3;
ddVec3 xEnd, yEnd, zEnd;
ddVec3 origin, cR, cG, cB;
vecSet(cR, 1.0f, 0.0f, 0.0f);
vecSet(cG, 0.0f, 1.0f, 0.0f);
vecSet(cB, 0.0f, 0.0f, 1.0f);
vecSet(origin, 0.0f, 0.0f, 0.0f);
vecSet(xEnd, length, 0.0f, 0.0f);
vecSet(yEnd, 0.0f, length, 0.0f);
vecSet(zEnd, 0.0f, 0.0f, length);
matTransformPointXYZ(p0, origin, transform);
matTransformPointXYZ(p1, xEnd, transform);
matTransformPointXYZ(p2, yEnd, transform);
matTransformPointXYZ(p3, zEnd, transform);
arrow(DD_EXPLICIT_CONTEXT_ONLY(ctx,) p0, p1, cR, size, durationMillis, depthEnabled); // X: red axis
arrow(DD_EXPLICIT_CONTEXT_ONLY(ctx,) p0, p2, cG, size, durationMillis, depthEnabled); // Y: green axis
arrow(DD_EXPLICIT_CONTEXT_ONLY(ctx,) p0, p3, cB, size, durationMillis, depthEnabled); // Z: blue axis
}
void arrow(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ddVec3_In from, ddVec3_In to, ddVec3_In color,
const float size, const int durationMillis, const bool depthEnabled)
{
if (!isInitialized(DD_EXPLICIT_CONTEXT_ONLY(ctx)))
{
return;
}
static const float arrowStep = 30.0f; // In degrees
static const float arrowSin[45] = {
0.0f, 0.5f, 0.866025f, 1.0f, 0.866025f, 0.5f, -0.0f, -0.5f, -0.866025f,
-1.0f, -0.866025f, -0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f
};
static const float arrowCos[45] = {
1.0f, 0.866025f, 0.5f, -0.0f, -0.5f, -0.866026f, -1.0f, -0.866025f, -0.5f, 0.0f,
0.5f, 0.866026f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f
};
// Body line:
line(DD_EXPLICIT_CONTEXT_ONLY(ctx,) from, to, color, durationMillis, depthEnabled);
// Aux vectors to compute the arrowhead:
ddVec3 up, right, forward;
vecSub(forward, to, from);
vecNormalize(forward, forward);
vecOrthogonalBasis(right, up, forward);
vecScale(forward, forward, size);
// Arrowhead is a cone (sin/cos tables used here):
float degrees = 0.0f;
for (int i = 0; degrees < 360.0f; degrees += arrowStep, ++i)
{
float scale;
ddVec3 v1, v2, temp;
scale = 0.5f * size * arrowCos[i];
vecScale(temp, right, scale);
vecSub(v1, to, forward);
vecAdd(v1, v1, temp);
scale = 0.5f * size * arrowSin[i];
vecScale(temp, up, scale);
vecAdd(v1, v1, temp);
scale = 0.5f * size * arrowCos[i + 1];
vecScale(temp, right, scale);
vecSub(v2, to, forward);
vecAdd(v2, v2, temp);
scale = 0.5f * size * arrowSin[i + 1];
vecScale(temp, up, scale);
vecAdd(v2, v2, temp);
line(DD_EXPLICIT_CONTEXT_ONLY(ctx,) v1, to, color, durationMillis, depthEnabled);
line(DD_EXPLICIT_CONTEXT_ONLY(ctx,) v1, v2, color, durationMillis, depthEnabled);
}
}
void cross(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ddVec3_In center, const float length,
const int durationMillis, const bool depthEnabled)
{
if (!isInitialized(DD_EXPLICIT_CONTEXT_ONLY(ctx)))
{
return;
}
ddVec3 from, to;
ddVec3 cR, cG, cB;
vecSet(cR, 1.0f, 0.0f, 0.0f);
vecSet(cG, 0.0f, 1.0f, 0.0f);
vecSet(cB, 0.0f, 0.0f, 1.0f);
const float cx = center[X];
const float cy = center[Y];
const float cz = center[Z];
const float hl = length * 0.5f; // Half on each side.
// Red line: X - length/2 to X + length/2
vecSet(from, cx - hl, cy, cz);
vecSet(to, cx + hl, cy, cz);
line(DD_EXPLICIT_CONTEXT_ONLY(ctx,) from, to, cR, durationMillis, depthEnabled);
// Green line: Y - length/2 to Y + length/2
vecSet(from, cx, cy - hl, cz);
vecSet(to, cx, cy + hl, cz);
line(DD_EXPLICIT_CONTEXT_ONLY(ctx,) from, to, cG, durationMillis, depthEnabled);
// Blue line: Z - length/2 to Z + length/2
vecSet(from, cx, cy, cz - hl);
vecSet(to, cx, cy, cz + hl);
line(DD_EXPLICIT_CONTEXT_ONLY(ctx,) from, to, cB, durationMillis, depthEnabled);
}
void circle(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ddVec3_In center, ddVec3_In planeNormal, ddVec3_In color,
const float radius, const float numSteps, const int durationMillis, const bool depthEnabled)
{
if (!isInitialized(DD_EXPLICIT_CONTEXT_ONLY(ctx)))
{
return;
}
ddVec3 left, up;
ddVec3 point, lastPoint;
vecOrthogonalBasis(left, up, planeNormal);
vecScale(up, up, radius);
vecScale(left, left, radius);
vecAdd(lastPoint, center, up);
for (int i = 1; i <= numSteps; ++i)
{
const float radians = TAU * i / numSteps;
ddVec3 vs, vc;
vecScale(vs, left, floatSin(radians));
vecScale(vc, up, floatCos(radians));
vecAdd(point, center, vs);
vecAdd(point, point, vc);
line(DD_EXPLICIT_CONTEXT_ONLY(ctx,) lastPoint, point, color, durationMillis, depthEnabled);
vecCopy(lastPoint, point);
}
}
void plane(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ddVec3_In center, ddVec3_In planeNormal, ddVec3_In planeColor,
ddVec3_In normalVecColor, const float planeScale, const float normalVecScale, const int durationMillis,
const bool depthEnabled)
{
if (!isInitialized(DD_EXPLICIT_CONTEXT_ONLY(ctx)))
{
return;
}
ddVec3 v1, v2, v3, v4;
ddVec3 tangent, bitangent;
vecOrthogonalBasis(tangent, bitangent, planeNormal);
// A little bit of preprocessor voodoo to make things more interesting :P
#define DD_PLANE_V(v, op1, op2) \
v[X] = (center[X] op1 (tangent[X] * planeScale) op2 (bitangent[X] * planeScale)); \
v[Y] = (center[Y] op1 (tangent[Y] * planeScale) op2 (bitangent[Y] * planeScale)); \
v[Z] = (center[Z] op1 (tangent[Z] * planeScale) op2 (bitangent[Z] * planeScale))
DD_PLANE_V(v1, -, -);
DD_PLANE_V(v2, +, -);
DD_PLANE_V(v3, +, +);
DD_PLANE_V(v4, -, +);
#undef DD_PLANE_V
// Draw the wireframe plane quadrilateral:
line(DD_EXPLICIT_CONTEXT_ONLY(ctx,) v1, v2, planeColor, durationMillis, depthEnabled);
line(DD_EXPLICIT_CONTEXT_ONLY(ctx,) v2, v3, planeColor, durationMillis, depthEnabled);
line(DD_EXPLICIT_CONTEXT_ONLY(ctx,) v3, v4, planeColor, durationMillis, depthEnabled);
line(DD_EXPLICIT_CONTEXT_ONLY(ctx,) v4, v1, planeColor, durationMillis, depthEnabled);
// Optionally add a line depicting the plane normal:
if (normalVecScale != 0.0f)
{
ddVec3 normalVec;
normalVec[X] = (planeNormal[X] * normalVecScale) + center[X];
normalVec[Y] = (planeNormal[Y] * normalVecScale) + center[Y];
normalVec[Z] = (planeNormal[Z] * normalVecScale) + center[Z];
line(DD_EXPLICIT_CONTEXT_ONLY(ctx,) center, normalVec, normalVecColor, durationMillis, depthEnabled);
}
}
void sphere(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ddVec3_In center, ddVec3_In color,
const float radius, const int durationMillis, const bool depthEnabled)
{
if (!isInitialized(DD_EXPLICIT_CONTEXT_ONLY(ctx)))
{
return;
}
static const int stepSize = 15;
ddVec3 cache[360 / stepSize];
ddVec3 radiusVec;
vecSet(radiusVec, 0.0f, 0.0f, radius);
vecAdd(cache[0], center, radiusVec);
for (int n = 1; n < arrayLength(cache); ++n)
{
vecCopy(cache[n], cache[0]);
}
ddVec3 lastPoint, temp;
for (int i = stepSize; i <= 360; i += stepSize)
{
const float s = floatSin(degreesToRadians(i));
const float c = floatCos(degreesToRadians(i));
lastPoint[X] = center[X];
lastPoint[Y] = center[Y] + radius * s;
lastPoint[Z] = center[Z] + radius * c;
for (int n = 0, j = stepSize; j <= 360; j += stepSize, ++n)
{
temp[X] = center[X] + floatSin(degreesToRadians(j)) * radius * s;
temp[Y] = center[Y] + floatCos(degreesToRadians(j)) * radius * s;
temp[Z] = lastPoint[Z];
line(DD_EXPLICIT_CONTEXT_ONLY(ctx,) lastPoint, temp, color, durationMillis, depthEnabled);
line(DD_EXPLICIT_CONTEXT_ONLY(ctx,) lastPoint, cache[n], color, durationMillis, depthEnabled);
vecCopy(cache[n], lastPoint);
vecCopy(lastPoint, temp);
}
}
}
void cone(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ddVec3_In apex, ddVec3_In dir, ddVec3_In color,
const float baseRadius, const float apexRadius, const int durationMillis, const bool depthEnabled)
{
if (!isInitialized(DD_EXPLICIT_CONTEXT_ONLY(ctx)))
{
return;
}
static const int stepSize = 20;
ddVec3 axis[3];
ddVec3 top, temp0, temp1, temp2;
ddVec3 p1, p2, lastP1, lastP2;
vecCopy(axis[2], dir);
vecNormalize(axis[2], axis[2]);
vecOrthogonalBasis(axis[0], axis[1], axis[2]);
axis[1][X] = -axis[1][X];
axis[1][Y] = -axis[1][Y];
axis[1][Z] = -axis[1][Z];
vecAdd(top, apex, dir);
vecScale(temp1, axis[1], baseRadius);
vecAdd(lastP2, top, temp1);
if (apexRadius == 0.0f)
{
for (int i = stepSize; i <= 360; i += stepSize)
{
vecScale(temp1, axis[0], floatSin(degreesToRadians(i)));
vecScale(temp2, axis[1], floatCos(degreesToRadians(i)));
vecAdd(temp0, temp1, temp2);
vecScale(temp0, temp0, baseRadius);
vecAdd(p2, top, temp0);
line(DD_EXPLICIT_CONTEXT_ONLY(ctx,) lastP2, p2, color, durationMillis, depthEnabled);
line(DD_EXPLICIT_CONTEXT_ONLY(ctx,) p2, apex, color, durationMillis, depthEnabled);
vecCopy(lastP2, p2);
}
}
else // A degenerate cone with open apex:
{
vecScale(temp1, axis[1], apexRadius);
vecAdd(lastP1, apex, temp1);
for (int i = stepSize; i <= 360; i += stepSize)
{
vecScale(temp1, axis[0], floatSin(degreesToRadians(i)));
vecScale(temp2, axis[1], floatCos(degreesToRadians(i)));
vecAdd(temp0, temp1, temp2);
vecScale(temp1, temp0, apexRadius);
vecScale(temp2, temp0, baseRadius);
vecAdd(p1, apex, temp1);
vecAdd(p2, top, temp2);
line(DD_EXPLICIT_CONTEXT_ONLY(ctx,) lastP1, p1, color, durationMillis, depthEnabled);
line(DD_EXPLICIT_CONTEXT_ONLY(ctx,) lastP2, p2, color, durationMillis, depthEnabled);
line(DD_EXPLICIT_CONTEXT_ONLY(ctx,) p1, p2, color, durationMillis, depthEnabled);
vecCopy(lastP1, p1);
vecCopy(lastP2, p2);
}
}
}
void box(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) const ddVec3 points[8], ddVec3_In color,
const int durationMillis, const bool depthEnabled)
{
// Build the lines from points using clever indexing tricks:
// (& 3 is a fancy way of doing % 4, but avoids the expensive modulo operation)
for (int i = 0; i < 4; ++i)
{
line(DD_EXPLICIT_CONTEXT_ONLY(ctx,) points[i], points[(i + 1) & 3], color, durationMillis, depthEnabled);
line(DD_EXPLICIT_CONTEXT_ONLY(ctx,) points[4 + i], points[4 + ((i + 1) & 3)], color, durationMillis, depthEnabled);
line(DD_EXPLICIT_CONTEXT_ONLY(ctx,) points[i], points[4 + i], color, durationMillis, depthEnabled);
}
}
void box(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ddVec3_In center, ddVec3_In color, const float width,
const float height, const float depth, const int durationMillis, const bool depthEnabled)
{
if (!isInitialized(DD_EXPLICIT_CONTEXT_ONLY(ctx)))
{
return;
}
const float cx = center[X];
const float cy = center[Y];
const float cz = center[Z];
const float w = width * 0.5f;
const float h = height * 0.5f;
const float d = depth * 0.5f;
// Create all the 8 points:
ddVec3 points[8];
#define DD_BOX_V(v, op1, op2, op3) \
v[X] = cx op1 w; \
v[Y] = cy op2 h; \
v[Z] = cz op3 d
DD_BOX_V(points[0], -, +, +);
DD_BOX_V(points[1], -, +, -);
DD_BOX_V(points[2], +, +, -);
DD_BOX_V(points[3], +, +, +);
DD_BOX_V(points[4], -, -, +);
DD_BOX_V(points[5], -, -, -);
DD_BOX_V(points[6], +, -, -);
DD_BOX_V(points[7], +, -, +);
#undef DD_BOX_V
box(DD_EXPLICIT_CONTEXT_ONLY(ctx,) points, color, durationMillis, depthEnabled);
}
void aabb(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ddVec3_In mins, ddVec3_In maxs,
ddVec3_In color, const int durationMillis, const bool depthEnabled)
{
if (!isInitialized(DD_EXPLICIT_CONTEXT_ONLY(ctx)))
{
return;
}
ddVec3 bb[2];
ddVec3 points[8];
vecCopy(bb[0], mins);
vecCopy(bb[1], maxs);
// Expand min/max bounds:
for (int i = 0; i < arrayLength(points); ++i)
{
points[i][X] = bb[(i ^ (i >> 1)) & 1][X];
points[i][Y] = bb[(i >> 1) & 1][Y];
points[i][Z] = bb[(i >> 2) & 1][Z];
}
// Build the lines:
box(DD_EXPLICIT_CONTEXT_ONLY(ctx,) points, color, durationMillis, depthEnabled);
}
void frustum(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ddMat4x4_In invClipMatrix,
ddVec3_In color, const int durationMillis, const bool depthEnabled)
{
if (!isInitialized(DD_EXPLICIT_CONTEXT_ONLY(ctx)))
{
return;
}
// Start with the standard clip volume, then bring it back to world space.
static const float planes[8][3] = {
// near plane
{ -1.0f, -1.0f, -1.0f }, { 1.0f, -1.0f, -1.0f },
{ 1.0f, 1.0f, -1.0f }, { -1.0f, 1.0f, -1.0f },
// far plane
{ -1.0f, -1.0f, 1.0f }, { 1.0f, -1.0f, 1.0f },
{ 1.0f, 1.0f, 1.0f }, { -1.0f, 1.0f, 1.0f }
};
ddVec3 points[8];
float wCoords[8];
// Transform the planes by the inverse clip matrix:
for (int i = 0; i < arrayLength(planes); ++i)
{
wCoords[i] = matTransformPointXYZW2(points[i], planes[i], invClipMatrix);
}
// Divide by the W component of each:
for (int i = 0; i < arrayLength(planes); ++i)
{
// But bail if any W ended up as zero.
if (floatAbs(wCoords[W]) < FloatEpsilon)
{
return;
}
points[i][X] /= wCoords[i];
points[i][Y] /= wCoords[i];
points[i][Z] /= wCoords[i];
}
// Connect the dots:
box(DD_EXPLICIT_CONTEXT_ONLY(ctx,) points, color, durationMillis, depthEnabled);
}
void vertexNormal(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ddVec3_In origin, ddVec3_In normal,
const float length, const int durationMillis, const bool depthEnabled)
{
if (!isInitialized(DD_EXPLICIT_CONTEXT_ONLY(ctx)))
{
return;
}
ddVec3 normalVec;
ddVec3 normalColor;
vecSet(normalColor, 1.0f, 1.0f, 1.0f);
normalVec[X] = (normal[X] * length) + origin[X];
normalVec[Y] = (normal[Y] * length) + origin[Y];
normalVec[Z] = (normal[Z] * length) + origin[Z];
line(DD_EXPLICIT_CONTEXT_ONLY(ctx,) origin, normalVec, normalColor, durationMillis, depthEnabled);
}
void tangentBasis(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ddVec3_In origin, ddVec3_In normal, ddVec3_In tangent,
ddVec3_In bitangent, const float lengths, const int durationMillis, const bool depthEnabled)
{
if (!isInitialized(DD_EXPLICIT_CONTEXT_ONLY(ctx)))
{
return;
}
ddVec3 cN, cT, cB;
ddVec3 vN, vT, vB;
vecSet(cN, 1.0f, 1.0f, 1.0f); // Vertex normals are WHITE
vecSet(cT, 1.0f, 1.0f, 0.0f); // Tangents are YELLOW
vecSet(cB, 1.0f, 0.0f, 1.0f); // Bi-tangents are MAGENTA
vN[X] = (normal[X] * lengths) + origin[X];
vN[Y] = (normal[Y] * lengths) + origin[Y];
vN[Z] = (normal[Z] * lengths) + origin[Z];
vT[X] = (tangent[X] * lengths) + origin[X];
vT[Y] = (tangent[Y] * lengths) + origin[Y];
vT[Z] = (tangent[Z] * lengths) + origin[Z];
vB[X] = (bitangent[X] * lengths) + origin[X];
vB[Y] = (bitangent[Y] * lengths) + origin[Y];
vB[Z] = (bitangent[Z] * lengths) + origin[Z];
line(DD_EXPLICIT_CONTEXT_ONLY(ctx,) origin, vN, cN, durationMillis, depthEnabled);
line(DD_EXPLICIT_CONTEXT_ONLY(ctx,) origin, vT, cT, durationMillis, depthEnabled);
line(DD_EXPLICIT_CONTEXT_ONLY(ctx,) origin, vB, cB, durationMillis, depthEnabled);
}
void xzSquareGrid(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) const float mins, const float maxs, const float y,
const float step, ddVec3_In color, const int durationMillis, const bool depthEnabled)
{
if (!isInitialized(DD_EXPLICIT_CONTEXT_ONLY(ctx)))
{
return;
}
ddVec3 from, to;
for (float i = mins; i <= maxs; i += step)
{
// Horizontal line (along the X)
vecSet(from, mins, y, i);
vecSet(to, maxs, y, i);
line(DD_EXPLICIT_CONTEXT_ONLY(ctx,) from, to, color, durationMillis, depthEnabled);
// Vertical line (along the Z)
vecSet(from, i, y, mins);
vecSet(to, i, y, maxs);
line(DD_EXPLICIT_CONTEXT_ONLY(ctx,) from, to, color, durationMillis, depthEnabled);
}
}
void capsule(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ddVec3_In center, ddVec3_In axis,
float length, float radius, ddVec3_In color, const int durationMillis, const bool depthEnabled)
{
if (!isInitialized(DD_EXPLICIT_CONTEXT_ONLY(ctx)))
{
return;
}
// Normalize the axis vector
float magnitude = sqrt(axis[X] * axis[X] + axis[Y] * axis[Y] + axis[Z] * axis[Z]);
if (magnitude == 0.0f)
{
return; // Invalid axis, exit gracefully
}
ddVec3 dir;
vecScale(dir, axis, 1.0f / magnitude);
// Compute endpoints (centers of the hemispheres)
ddVec3 temp;
vecScale(temp, dir, length / 2.0f);
ddVec3 p1, p2;
vecSub(p1, center, temp); // Start point
vecAdd(p2, center, temp); // End point
// Find vectors u and v perpendicular to dir for the cross-section plane
ddVec3 u, v, tempVec;
// Choose a vector not parallel to dir
if (fabs(dir[X]) <= fabs(dir[Y]) && fabs(dir[X]) <= fabs(dir[Z]))
{
vecSet(tempVec, 1.0f, 0.0f, 0.0f);
}
else if (fabs(dir[Y]) <= fabs(dir[Z]))
{
vecSet(tempVec, 0.0f, 1.0f, 0.0f);
}
else
{
vecSet(tempVec, 0.0f, 0.0f, 1.0f);
}
vecCross(u, tempVec, dir);
float uMag = sqrt(u[X] * u[X] + u[Y] * u[Y] + u[Z] * u[Z]);
vecScale(u, u, 1.0f / uMag);
vecCross(v, dir, u); // v is already unit length since dir and u are orthonormal
static const int stepSize = 15;
// Draw the cylinder
for (int j = 0; j < 360; j += stepSize)
{
float theta = degreesToRadians((float)j);
float theta2 = degreesToRadians((float)(j + stepSize));
ddVec3 point1, point2, point3, point4;
float c = floatCos(theta);
float s = floatSin(theta);
float c2 = floatCos(theta2);
float s2 = floatSin(theta2);
// Circle at p1
vecSet(point1, p1[X] + radius * (c * u[X] + s * v[X]),
p1[Y] + radius * (c * u[Y] + s * v[Y]),
p1[Z] + radius * (c * u[Z] + s * v[Z]));
vecSet(point2, p1[X] + radius * (c2 * u[X] + s2 * v[X]),
p1[Y] + radius * (c2 * u[Y] + s2 * v[Y]),
p1[Z] + radius * (c2 * u[Z] + s2 * v[Z]));
line(DD_EXPLICIT_CONTEXT_ONLY(ctx,) point1, point2, color, durationMillis, depthEnabled);
// Circle at p2
vecSet(point3, p2[X] + radius * (c * u[X] + s * v[X]),
p2[Y] + radius * (c * u[Y] + s * v[Y]),
p2[Z] + radius * (c * u[Z] + s * v[Z]));
vecSet(point4, p2[X] + radius * (c2 * u[X] + s2 * v[X]),
p2[Y] + radius * (c2 * u[Y] + s2 * v[Y]),
p2[Z] + radius * (c2 * u[Z] + s2 * v[Z]));
line(DD_EXPLICIT_CONTEXT_ONLY(ctx,) point3, point4, color, durationMillis, depthEnabled);
// Connecting line between circles
line(DD_EXPLICIT_CONTEXT_ONLY(ctx,) point1, point3, color, durationMillis, depthEnabled);
}
// Draw hemisphere at p1 (dome along -dir)
ddVec3 d1;
vecScale(d1, dir, -1.0f); // Direction for p1 hemisphere
for (int i = 0; i <= 90; i += stepSize)
{
float phi = degreesToRadians((float)i);
float s = floatSin(phi);
float c = floatCos(phi);
for (int j = 0; j < 360; j += stepSize)
{
float theta = degreesToRadians((float)j);
float theta2 = degreesToRadians((float)(j + stepSize));
ddVec3 point1, point2;
vecSet(point1, p1[X] + radius * (s * floatCos(theta) * u[X] + s * floatSin(theta) * v[X] + c * d1[X]),
p1[Y] + radius * (s * floatCos(theta) * u[Y] + s * floatSin(theta) * v[Y] + c * d1[Y]),
p1[Z] + radius * (s * floatCos(theta) * u[Z] + s * floatSin(theta) * v[Z] + c * d1[Z]));
vecSet(point2, p1[X] + radius * (s * floatCos(theta2) * u[X] + s * floatSin(theta2) * v[X] + c * d1[X]),
p1[Y] + radius * (s * floatCos(theta2) * u[Y] + s * floatSin(theta2) * v[Y] + c * d1[Y]),
p1[Z] + radius * (s * floatCos(theta2) * u[Z] + s * floatSin(theta2) * v[Z] + c * d1[Z]));
line(DD_EXPLICIT_CONTEXT_ONLY(ctx,) point1, point2, color, durationMillis, depthEnabled);
if (i < 90)
{
float phi2 = degreesToRadians((float)(i + stepSize));
float s2 = floatSin(phi2);
float c2 = floatCos(phi2);
ddVec3 point3;
vecSet(point3, p1[X] + radius * (s2 * floatCos(theta) * u[X] + s2 * floatSin(theta) * v[X] + c2 * d1[X]),
p1[Y] + radius * (s2 * floatCos(theta) * u[Y] + s2 * floatSin(theta) * v[Y] + c2 * d1[Y]),
p1[Z] + radius * (s2 * floatCos(theta) * u[Z] + s2 * floatSin(theta) * v[Z] + c2 * d1[Z]));
line(DD_EXPLICIT_CONTEXT_ONLY(ctx,) point1, point3, color, durationMillis, depthEnabled);
}
}
}
// Draw hemisphere at p2 (dome along +dir)
for (int i = 0; i <= 90; i += stepSize)
{
float phi = degreesToRadians((float)i);
float s = floatSin(phi);
float c = floatCos(phi);
for (int j = 0; j < 360; j += stepSize)
{
float theta = degreesToRadians((float)j);
float theta2 = degreesToRadians((float)(j + stepSize));
ddVec3 point1, point2;
vecSet(point1, p2[X] + radius * (s * floatCos(theta) * u[X] + s * floatSin(theta) * v[X] + c * dir[X]),
p2[Y] + radius * (s * floatCos(theta) * u[Y] + s * floatSin(theta) * v[Y] + c * dir[Y]),
p2[Z] + radius * (s * floatCos(theta) * u[Z] + s * floatSin(theta) * v[Z] + c * dir[Z]));
vecSet(point2, p2[X] + radius * (s * floatCos(theta2) * u[X] + s * floatSin(theta2) * v[X] + c * dir[X]),
p2[Y] + radius * (s * floatCos(theta2) * u[Y] + s * floatSin(theta2) * v[Y] + c * dir[Y]),
p2[Z] + radius * (s * floatCos(theta2) * u[Z] + s * floatSin(theta2) * v[Z] + c * dir[Z]));
line(DD_EXPLICIT_CONTEXT_ONLY(ctx,) point1, point2, color, durationMillis, depthEnabled);
if (i < 90)
{
float phi2 = degreesToRadians((float)(i + stepSize));
float s2 = floatSin(phi2);
float c2 = floatCos(phi2);
ddVec3 point3;
vecSet(point3, p2[X] + radius * (s2 * floatCos(theta) * u[X] + s2 * floatSin(theta) * v[X] + c2 * dir[X]),
p2[Y] + radius * (s2 * floatCos(theta) * u[Y] + s2 * floatSin(theta) * v[Y] + c2 * dir[Y]),
p2[Z] + radius * (s2 * floatCos(theta) * u[Z] + s2 * floatSin(theta) * v[Z] + c2 * dir[Z]));
line(DD_EXPLICIT_CONTEXT_ONLY(ctx,) point1, point3, color, durationMillis, depthEnabled);
}
}
}
}
// ========================================================
// RenderInterface stubs:
// ========================================================
RenderInterface::~RenderInterface() { }
void RenderInterface::beginDraw() { }
void RenderInterface::endDraw() { }
void RenderInterface::drawPointList(const DrawVertex *, int, bool) { }
void RenderInterface::drawLineList(const DrawVertex *, int, bool) { }
void RenderInterface::drawGlyphList(const DrawVertex *, int, GlyphTextureHandle) { }
void RenderInterface::destroyGlyphTexture(GlyphTextureHandle) { }
GlyphTextureHandle RenderInterface::createGlyphTexture(int, int, const void *) { return nullptr; }
} // namespace dd
#undef DD_CONTEXT
#undef DD_MALLOC
#undef DD_MFREE
// ================ End of implementation =================
#endif // DEBUG_DRAW_IMPLEMENTATION
// ================ End of implementation =================
================================================
FILE: samples/Makefile
================================================
#------------------------------------------------
# Brief: Makefile for the Debug Draw samples.
#
# Remarks:
# - Tested only on Mac OSX; Should work on Linux.
# - GLFW must be installed on the system.
# (http://www.glfw.org)
#------------------------------------------------
# Select the proper OpenGL library for Mac (-framework OpenGL)
# or use a default (-lGL) that should work on most Unix-like systems.
# This script also assumes GLFW is installed and available in the system path.
UNAME = $(shell uname -s)
ifeq ($(UNAME), Darwin)
OPENGL_LIB = -framework CoreFoundation -framework OpenGL
else
OPENGL_LIB = -lGL
endif
# GLFW Should be installed and visible in the system path!
ifeq ($(UNAME), Darwin)
CXXFLAGS += -Weffc++
GLFW_LIB = -L/usr/local/lib -lglfw
LIBRARIES = -framework Cocoa -framework IOKit -framework CoreVideo
endif
ifeq ($(UNAME), Linux)
CXXFLAGS += `pkg-config --cflags glfw3`
GLFW_LIB = `pkg-config --static --libs glfw3`
endif
# Compile an Address Sanitizer build if this flag is set
ifdef ASAN
CXXFLAGS += -g -fsanitize=address -fno-omit-frame-pointer
endif
# Define 'VERBOSE' to get the full console output.
# Otherwise we print a shorter message for each rule.
ifndef VERBOSE
QUIET = @
ECHO_COMPILING = @echo "-> Building Debug Draw samples ..."
ECHO_CLEANING = @echo "-> Cleaning ..."
endif
#------------------------------------------------
# Macros / source files:
#------------------------------------------------
LIBRARIES += $(OPENGL_LIB) $(GLFW_LIB)
INC_DIRS = -I. -I.. -Ivectormath -Igl3w/include
CXXFLAGS += $(INC_DIRS) -std=c++11 -O3 -Wall -Wextra -Winit-self -Wunused -Wshadow -Wno-strict-aliasing
CFLAGS = $(CXXFLAGS)
# Null renderer sample:
SRC_FILES_NULL_SAMP = sample_null_renderer.cpp
BIN_TARGET_NULL_SAMP = sample_null_renderer
# Legacy OpenGL sample:
SRC_FILES_GL_LEGACY_SAMP = sample_gl_legacy.cpp
BIN_TARGET_GL_LEGACY_SAMP = sample_gl_legacy
# Core OpenGL sample:
SRC_FILES_GL_CORE_SAMP = gl3w/src/gl3w.cpp sample_gl_core.cpp
BIN_TARGET_GL_CORE_SAMP = sample_gl_core
# Multi-threaded sample with explicit context:
SRC_FILES_GL_CORE_MT_SAMP_1 = gl3w/src/gl3w.cpp sample_gl_core_multithreaded_explicit.cpp
BIN_TARGET_GL_CORE_MT_SAMP_1 = sample_gl_core_multithreaded_explicit
# Multi-threaded sample with thread-local implicit context:
SRC_FILES_GL_CORE_MT_SAMP_2 = gl3w/src/gl3w.cpp sample_gl_core_multithreaded_tls.cpp
BIN_TARGET_GL_CORE_MT_SAMP_2 = sample_gl_core_multithreaded_tls
#------------------------------------------------
# Build rules:
#------------------------------------------------
all:
$(ECHO_COMPILING)
$(QUIET) $(CXX) $(CXXFLAGS) $(SRC_FILES_NULL_SAMP) -o $(BIN_TARGET_NULL_SAMP)
$(QUIET) $(CXX) $(CXXFLAGS) $(SRC_FILES_GL_LEGACY_SAMP) -o $(BIN_TARGET_GL_LEGACY_SAMP) $(LIBRARIES)
$(QUIET) $(CXX) $(CXXFLAGS) $(SRC_FILES_GL_CORE_SAMP) -o $(BIN_TARGET_GL_CORE_SAMP) $(LIBRARIES)
$(QUIET) $(CXX) $(CXXFLAGS) $(SRC_FILES_GL_CORE_MT_SAMP_1) -o $(BIN_TARGET_GL_CORE_MT_SAMP_1) $(LIBRARIES)
$(QUIET) $(CXX) $(CXXFLAGS) $(SRC_FILES_GL_CORE_MT_SAMP_2) -o $(BIN_TARGET_GL_CORE_MT_SAMP_2) $(LIBRARIES)
clean:
$(ECHO_CLEANING)
$(QUIET) rm -f $(BIN_TARGET_NULL_SAMP)
$(QUIET) rm -f $(BIN_TARGET_GL_LEGACY_SAMP)
$(QUIET) rm -f $(BIN_TARGET_GL_CORE_SAMP)
$(QUIET) rm -f $(BIN_TARGET_GL_CORE_MT_SAMP_1)
$(QUIET) rm -f $(BIN_TARGET_GL_CORE_MT_SAMP_2)
$(QUIET) rm -rf *.dSYM
================================================
FILE: samples/README.md
================================================
### Debug Draw Samples
Three sample programs showing basic usage of the Debug Draw library are currently provided:
- `sample_null_renderer.cpp`: Just a tiny `main()` that calls a couple functions and exists.
This sample is meant only to test if the library will compile without errors.
- `sample_gl_core.cpp`: Sample using core (shader-based) OpenGL that draws a handful of debug
shapes using the library. You can move around using `W,A,S,D` or the arrow keys. Click on the
window and drag the mouse to rotate the camera. This sample requires OpenGL version 3.2 or newer.
- `sample_gl_legacy.cpp`: Exact same as the core GL sample, but uses a legacy (AKA fixed-function)
OpenGL renderer instead.
- `sample_gl_core_multithreaded_tls.cpp` and `sample_gl_core_multithreaded_explicit.cpp` are
similar to the Core OpenGL sample but demonstrate how to use the TLS or explicit context modes.
- `sample_d3d11.cpp`: Windows sample using D3D11 as the renderer interface for Debug Draw.
- `samples_common.hpp`: Contains code shared by all samples, such as input handling and camera/controls.
----
To build the samples on Linux or MacOS, run the provided Makefile.
For Windows, Visual Studio projects are included for VS2015.
The only external dependency required to build the samples is [GLFW](http://www.glfw.org/). Make sure to install
it before attempting to build them. [GL3W](https://github.com/skaslev/gl3w) is our extension wrangler
for the Core OpenGL sample. It is included here and builds with DD. Sony's Vectormath library is also
a dependency, but it is included as well. Those libraries are only required for the samples and
not by Debug Draw itself.
The samples have only been officially tested on MacOS and Windows 7 & 10, though should build and run fine
on Linux, provided that you have GLFW installed. Running them requires at least OpenGL v3.2, but due
to hardware differences there's no guarantee that they will render the expected outputs, even if your machine supports GL3+.
Little to no handling is done to account for GL version and hardware differences, so the samples might not run properly on your hardware.
The main idea is that they serve as a rough guide on how to integrate Debug Draw into your own projects,
so there's more value in the code itself than in the demo applications, which are just drawing some line
shapes in the 3D world and some HUD text, nothing more.
================================================
FILE: samples/gl3w/README.rst
================================================
========================================
gl3w: Simple OpenGL core profile loading
========================================
Introduction
------------
gl3w_ is the easiest way to get your hands on the functionality offered by the
OpenGL core profile specification.
Its main part is a simple gl3w_gen.py_ Python script that downloads the
Khronos_ supported glcorearb.h_ header and generates gl3w.h and gl3w.c from it.
Those files can then be added and linked (statically or dynamically) into your
project.
Requirements
------------
gl3w_gen.py_ requires Python version 2.6 or newer, with SSL support.
It is also compatible with Python 3.x.
Example
-------
Here is a simple example of using gl3w_ with glut. Note that GL/gl3w.h must be
included before any other OpenGL related headers::
#include <stdio.h>
#include <GL/gl3w.h>
#include <GL/glut.h>
// ...
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE);
glutInitWindowSize(width, height);
glutCreateWindow("cookie");
glutReshapeFunc(reshape);
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutSpecialFunc(special);
glutMouseFunc(mouse);
glutMotionFunc(motion);
if (gl3wInit()) {
fprintf(stderr, "failed to initialize OpenGL\n");
return -1;
}
if (!gl3wIsSupported(3, 2)) {
fprintf(stderr, "OpenGL 3.2 not supported\n");
return -1;
}
printf("OpenGL %s, GLSL %s\n", glGetString(GL_VERSION),
glGetString(GL_SHADING_LANGUAGE_VERSION));
// ...
glutMainLoop();
return 0;
}
API Reference
-------------
The gl3w_ API consists of just three functions:
``int gl3wInit(void)``
Initializes the library. Should be called once after an OpenGL context has
been created. Returns ``0`` when gl3w_ was initialized successfully,
``-1`` if there was an error.
``int gl3wIsSupported(int major, int minor)``
Returns ``1`` when OpenGL core profile version *major.minor* is available
and ``0`` otherwise.
``GL3WglProc gl3wGetProcAddress(const char *proc)``
Returns the address of an OpenGL extension function. Generally, you won't
need to use it since gl3w_ loads all functions defined in the OpenGL core
profile on initialization. It allows you to load OpenGL extensions outside
of the core profile.
License
-------
gl3w_ is in the public domain. See the file UNLICENSE for more information.
Credits
-------
Slavomir Kaslev <slavomir.kaslev@gmail.com>
Initial implementation
Kelvin McDowell
Mac OS X support
Sjors Gielen
Mac OS X support
Travis Gesslein
Patches regarding glcorearb.h
Arthur Tombs
Port to Python 3
Rommel160 [github.com/Rommel160]
Code contributions
Copyright
---------
OpenGL_ is a registered trademark of SGI_.
.. _gl3w: https://github.com/skaslev/gl3w
.. _gl3w_gen.py: https://github.com/skaslev/gl3w/blob/master/gl3w_gen.py
.. _glcorearb.h: https://www.opengl.org/registry/api/GL/glcorearb.h
.. _OpenGL: http://www.opengl.org/
.. _Khronos: http://www.khronos.org/
.. _SGI: http://www.sgi.com/
================================================
FILE: samples/gl3w/UNLICENSE
================================================
This is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any
means.
In jurisdictions that recognize copyright laws, the author or authors
of this software dedicate any and all copyright interest in the
software to the public domain. We make this dedication for the benefit
of the public at large and to the detriment of our heirs and
successors. We intend this dedication to be an overt act of
relinquishment in perpetuity of all present and future rights to this
software under copyright law.
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 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.
================================================
FILE: samples/gl3w/gl3w_gen.py
================================================
#!/usr/bin/env python
# This file is part of gl3w, hosted at https://github.com/skaslev/gl3w
#
# This is free and unencumbered software released into the public domain.
#
# Anyone is free to copy, modify, publish, use, compile, sell, or
# distribute this software, either in source code form or as a compiled
# binary, for any purpose, commercial or non-commercial, and by any
# means.
#
# In jurisdictions that recognize copyright laws, the author or authors
# of this software dedicate any and all copyright interest in the
# software to the public domain. We make this dedication for the benefit
# of the public at large and to the detriment of our heirs and
# successors. We intend this dedication to be an overt act of
# relinquishment in perpetuity of all present and future rights to this
# software under copyright law.
#
# 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 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.
# Allow Python 2.6+ to use the print() function
from __future__ import print_function
import re
import os
# Try to import Python 3 library urllib.request
# and if it fails, fall back to Python 2 urllib2
try:
import urllib.request as urllib2
except ImportError:
import urllib2
# UNLICENSE copyright header
UNLICENSE = br'''/*
This file was generated with gl3w_gen.py, part of gl3w
(hosted at https://github.com/skaslev/gl3w)
This is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any
means.
In jurisdictions that recognize copyright laws, the author or authors
of this software dedicate any and all copyright interest in the
software to the public domain. We make this dedication for the benefit
of the public at large and to the detriment of our heirs and
successors. We intend this dedication to be an overt act of
relinquishment in perpetuity of all present and future rights to this
software under copyright law.
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 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.
*/
'''
# Create directories
if not os.path.exists('include/GL'):
os.makedirs('include/GL')
if not os.path.exists('src'):
os.makedirs('src')
# Download glcorearb.h
if not os.path.exists('include/GL/glcorearb.h'):
print('Downloading glcorearb.h to include/GL...')
web = urllib2.urlopen('https://www.opengl.org/registry/api/GL/glcorearb.h')
with open('include/GL/glcorearb.h', 'wb') as f:
f.writelines(web.readlines())
else:
print('Reusing glcorearb.h from include/GL...')
# Parse function names from glcorearb.h
print('Parsing glcorearb.h header...')
procs = []
p = re.compile(r'GLAPI.*APIENTRY\s+(\w+)')
with open('include/GL/glcorearb.h', 'r') as f:
for line in f:
m = p.match(line)
if m:
procs.append(m.group(1))
procs.sort()
def proc_t(proc):
return { 'p': proc,
'p_s': 'gl3w' + proc[2:],
'p_t': 'PFN' + proc.upper() + 'PROC' }
# Generate gl3w.h
print('Generating gl3w.h in include/GL...')
with open('include/GL/gl3w.h', 'wb') as f:
f.write(UNLICENSE)
f.write(br'''#ifndef __gl3w_h_
#define __gl3w_h_
#include <GL/glcorearb.h>
#ifndef __gl_h_
#define __gl_h_
#endif
typedef void (*GL3WglProc)(void);
/* gl3w API: */
int gl3wInit(void);
void gl3wShutdown(void);
int gl3wIsSupported(int major, int minor);
GL3WglProc gl3wGetProcAddress(const char *proc);
/* OpenGL functions: */
''')
for proc in procs:
f.write('extern {0[p_t]: <52} {0[p_s]};\n'.format(proc_t(proc)).encode("utf-8"))
f.write(b'\n')
for proc in procs:
f.write('#define {0[p]: <51} {0[p_s]}\n'.format(proc_t(proc)).encode("utf-8"))
f.write(br'''
#endif // __gl3w_h_
''')
# Generate gl3w.cpp
print('Generating gl3w.cpp in src...')
with open('src/gl3w.cpp', 'wb') as f:
f.write(UNLICENSE)
f.write(br'''#include <GL/gl3w.h>
/* --------------------------------------------------------------------------------------------- */
#ifdef _WIN32
/* ------------------------------------
* Windows
* ------------------------------------ */
#define WIN32_LEAN_AND_MEAN 1
#include <windows.h>
static HMODULE gl3w_libgl = NULL;
static int gl3w_open_libgl(void)
{
if (!gl3w_libgl)
{
gl3w_libgl = LoadLibraryA("opengl32.dll");
}
return gl3w_libgl != NULL;
}
static void gl3w_close_libgl(void)
{
if (gl3w_libgl)
{
FreeLibrary(gl3w_libgl);
gl3w_libgl = NULL;
}
}
static GL3WglProc gl3w_fn(const char *proc)
{
GL3WglProc res;
res = (GL3WglProc) wglGetProcAddress(proc);
if (!res)
{
res = (GL3WglProc) GetProcAddress(gl3w_libgl, proc);
}
return res;
}
#elif defined(__APPLE__) || defined(__APPLE_CC__)
/* ------------------------------------
* Mac OS
* ------------------------------------ */
#include <Carbon/Carbon.h>
static CFBundleRef gl3w_cfBundle = NULL;
static CFURLRef gl3w_cfBundleURL = NULL;
static int gl3w_open_libgl(void)
{
if (gl3w_cfBundle)
{
return 1; /* Already init */
}
gl3w_cfBundleURL = CFURLCreateWithFileSystemPath(
kCFAllocatorDefault,
CFSTR("/System/Library/Frameworks/OpenGL.framework"),
kCFURLPOSIXPathStyle, true);
if (!gl3w_cfBundleURL)
{
return 0;
}
gl3w_cfBundle = CFBundleCreate(kCFAllocatorDefault, gl3w_cfBundleURL);
if (!gl3w_cfBundle)
{
CFRelease(gl3w_cfBundleURL);
return 0;
}
return 1;
}
static void gl3w_close_libgl(void)
{
if (gl3w_cfBundle)
{
CFRelease(gl3w_cfBundle);
gl3w_cfBundle = NULL;
}
if (gl3w_cfBundleURL)
{
CFRelease(gl3w_cfBundleURL);
gl3w_cfBundleURL = NULL;
}
}
static GL3WglProc gl3w_fn(const char *proc)
{
GL3WglProc res;
CFStringRef procName;
procName = CFStringCreateWithCString(kCFAllocatorDefault, proc, kCFStringEncodingASCII);
res = (GL3WglProc) CFBundleGetFunctionPointerForName(gl3w_cfBundle, procName);
CFRelease(procName);
return res;
}
#else
/* ------------------------------------
* GLX
* ------------------------------------ */
#include <dlfcn.h>
#include <GL/glx.h>
static void *gl3w_libgl = NULL;
static int gl3w_open_libgl(void)
{
if (!gl3w_libgl)
{
gl3w_libgl = dlopen("libGL.so.1", RTLD_LAZY | RTLD_GLOBAL);
}
return gl3w_libgl != NULL;
}
static void gl3w_close_libgl(void)
{
if (gl3w_libgl)
{
dlclose(gl3w_libgl);
gl3w_libgl = NULL;
}
}
static GL3WglProc gl3w_fn(const char *proc)
{
GL3WglProc res;
res = (GL3WglProc) glXGetProcAddress((const GLubyte *) proc);
if (!res)
{
res = (GL3WglProc) dlsym(gl3w_libgl, proc);
}
return res;
}
#endif
/* ------------------------------------
* GL3W API
* ------------------------------------ */
static struct {
int major, minor;
} gl3w_version;
static void gl3w_load_all_functions(void);
static int gl3w_parse_version(void)
{
if (!glGetIntegerv)
{
return 0;
}
glGetIntegerv(GL_MAJOR_VERSION, &gl3w_version.major);
glGetIntegerv(GL_MINOR_VERSION, &gl3w_version.minor);
if (gl3w_version.major < 3)
{
return 0;
}
return 1;
}
int gl3wInit(void)
{
if (!gl3w_open_libgl())
{
return 0;
}
gl3w_load_all_functions();
return gl3w_parse_version();
}
void gl3wShutdown(void)
{
gl3w_close_libgl();
}
int gl3wIsSupported(int major, int minor)
{
if (major < 3)
{
return 0;
}
if (gl3w_version.major == major)
{
return gl3w_version.minor >= minor;
}
return gl3w_version.major >= major;
}
GL3WglProc gl3wGetProcAddress(const char *proc)
{
if (!proc)
{
return NULL;
}
return gl3w_fn(proc);
}
/* --------------------------------------------------------------------------------------------- */
''')
for proc in procs:
f.write('{0[p_t]: <52} {0[p_s]};\n'.format(proc_t(proc)).encode("utf-8"))
f.write(br'''
/* --------------------------------------------------------------------------------------------- */
static void gl3w_load_all_functions(void)
{
''')
for proc in procs:
f.write('\t{0[p_s]: <47} = ( {0[p_t]: <52} ) gl3w_fn("{0[p]}");\n'.format(proc_t(proc)).encode("utf-8"))
f.write(b'}\n')
================================================
FILE: samples/gl3w/include/GL/gl3w.h
================================================
/*
This file was generated with gl3w_gen.py, part of gl3w
(hosted at https://github.com/skaslev/gl3w)
This is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any
means.
In jurisdictions that recognize copyright laws, the author or authors
of this software dedicate any and all copyright interest in the
software to the public domain. We make this dedication for the benefit
of the public at large and to the detriment of our heirs and
successors. We intend this dedication to be an overt act of
relinquishment in perpetuity of all present and future rights to this
software under copyright law.
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 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.
*/
#ifndef __gl3w_h_
#define __gl3w_h_
#include <GL/glcorearb.h>
#ifndef __gl_h_
#define __gl_h_
#endif
typedef void (*GL3WglProc)(void);
/* gl3w API: */
int gl3wInit(void);
void gl3wShutdown(void);
int gl3wIsSupported(int major, int minor);
GL3WglProc gl3wGetProcAddress(const char *proc);
/* OpenGL functions: */
extern PFNGLACTIVESHADERPROGRAMPROC gl3wActiveShaderProgram;
extern PFNGLACTIVETEXTUREPROC gl3wActiveTexture;
extern PFNGLATTACHSHADERPROC gl3wAttachShader;
extern PFNGLBEGINCONDITIONALRENDERPROC gl3wBeginConditionalRender;
extern PFNGLBEGINQUERYPROC gl3wBeginQuery;
extern PFNGLBEGINQUERYINDEXEDPROC gl3wBeginQueryIndexed;
extern PFNGLBEGINTRANSFORMFEEDBACKPROC gl3wBeginTransformFeedback;
extern PFNGLBINDATTRIBLOCATIONPROC gl3wBindAttribLocation;
extern PFNGLBINDBUFFERPROC gl3wBindBuffer;
extern PFNGLBINDBUFFERBASEPROC gl3wBindBufferBase;
extern PFNGLBINDBUFFERRANGEPROC gl3wBindBufferRange;
extern PFNGLBINDBUFFERSBASEPROC gl3wBindBuffersBase;
extern PFNGLBINDBUFFERSRANGEPROC gl3wBindBuffersRange;
extern PFNGLBINDFRAGDATALOCATIONPROC gl3wBindFragDataLocation;
extern PFNGLBINDFRAGDATALOCATIONINDEXEDPROC gl3wBindFragDataLocationIndexed;
extern PFNGLBINDFRAMEBUFFERPROC gl3wBindFramebuffer;
extern PFNGLBINDIMAGETEXTUREPROC gl3wBindImageTexture;
extern PFNGLBINDIMAGETEXTURESPROC gl3wBindImageTextures;
extern PFNGLBINDPROGRAMPIPELINEPROC gl3wBindProgramPipeline;
extern PFNGLBINDRENDERBUFFERPROC gl3wBindRenderbuffer;
extern PFNGLBINDSAMPLERPROC gl3wBindSampler;
extern PFNGLBINDSAMPLERSPROC gl3wBindSamplers;
extern PFNGLBINDTEXTUREPROC gl3wBindTexture;
extern PFNGLBINDTEXTUREUNITPROC gl3wBindTextureUnit;
extern PFNGLBINDTEXTURESPROC gl3wBindTextures;
extern PFNGLBINDTRANSFORMFEEDBACKPROC gl3wBindTransformFeedback;
extern PFNGLBINDVERTEXARRAYPROC gl3wBindVertexArray;
extern PFNGLBINDVERTEXBUFFERPROC gl3wBindVertexBuffer;
extern PFNGLBINDVERTEXBUFFERSPROC gl3wBindVertexBuffers;
extern PFNGLBLENDCOLORPROC gl3wBlendColor;
extern PFNGLBLENDEQUATIONPROC gl3wBlendEquation;
extern PFNGLBLENDEQUATIONSEPARATEPROC gl3wBlendEquationSeparate;
extern PFNGLBLENDEQUATIONSEPARATEIPROC gl3wBlendEquationSeparatei;
extern PFNGLBLENDEQUATIONSEPARATEIARBPROC gl3wBlendEquationSeparateiARB;
extern PFNGLBLENDEQUATIONIPROC gl3wBlendEquationi;
extern PFNGLBLENDEQUATIONIARBPROC gl3wBlendEquationiARB;
extern PFNGLBLENDFUNCPROC gl3wBlendFunc;
extern PFNGLBLENDFUNCSEPARATEPROC gl3wBlendFuncSeparate;
extern PFNGLBLENDFUNCSEPARATEIPROC gl3wBlendFuncSeparatei;
extern PFNGLBLENDFUNCSEPARATEIARBPROC gl3wBlendFuncSeparateiARB;
extern PFNGLBLENDFUNCIPROC gl3wBlendFunci;
extern PFNGLBLENDFUNCIARBPROC gl3wBlendFunciARB;
extern PFNGLBLITFRAMEBUFFERPROC gl3wBlitFramebuffer;
extern PFNGLBLITNAMEDFRAMEBUFFERPROC gl3wBlitNamedFramebuffer;
extern PFNGLBUFFERDATAPROC gl3wBufferData;
extern PFNGLBUFFERPAGECOMMITMENTARBPROC gl3wBufferPageCommitmentARB;
extern PFNGLBUFFERSTORAGEPROC gl3wBufferStorage;
extern PFNGLBUFFERSUBDATAPROC gl3wBufferSubData;
extern PFNGLCHECKFRAMEBUFFERSTATUSPROC gl3wCheckFramebufferStatus;
extern PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC gl3wCheckNamedFramebufferStatus;
extern PFNGLCLAMPCOLORPROC gl3wClampColor;
extern PFNGLCLEARPROC gl3wClear;
extern PFNGLCLEARBUFFERDATAPROC gl3wClearBufferData;
extern PFNGLCLEARBUFFERSUBDATAPROC gl3wClearBufferSubData;
extern PFNGLCLEARBUFFERFIPROC gl3wClearBufferfi;
extern PFNGLCLEARBUFFERFVPROC gl3wClearBufferfv;
extern PFNGLCLEARBUFFERIVPROC gl3wClearBufferiv;
extern PFNGLCLEARBUFFERUIVPROC gl3wClearBufferuiv;
extern PFNGLCLEARCOLORPROC gl3wClearColor;
extern PFNGLCLEARDEPTHPROC gl3wClearDepth;
extern PFNGLCLEARDEPTHFPROC gl3wClearDepthf;
extern PFNGLCLEARNAMEDBUFFERDATAPROC gl3wClearNamedBufferData;
extern PFNGLCLEARNAMEDBUFFERSUBDATAPROC gl3wClearNamedBufferSubData;
extern PFNGLCLEARNAMEDFRAMEBUFFERFIPROC gl3wClearNamedFramebufferfi;
extern PFNGLCLEARNAMEDFRAMEBUFFERFVPROC gl3wClearNamedFramebufferfv;
extern PFNGLCLEARNAMEDFRAMEBUFFERIVPROC gl3wClearNamedFramebufferiv;
extern PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC gl3wClearNamedFramebufferuiv;
extern PFNGLCLEARSTENCILPROC gl3wClearStencil;
extern PFNGLCLEARTEXIMAGEPROC gl3wClearTexImage;
extern PFNGLCLEARTEXSUBIMAGEPROC gl3wClearTexSubImage;
extern PFNGLCLIENTWAITSYNCPROC gl3wClientWaitSync;
extern PFNGLCLIPCONTROLPROC gl3wClipControl;
extern PFNGLCOLORMASKPROC gl3wColorMask;
extern PFNGLCOLORMASKIPROC gl3wColorMaski;
extern PFNGLCOMPILESHADERPROC gl3wCompileShader;
extern PFNGLCOMPILESHADERINCLUDEARBPROC gl3wCompileShaderIncludeARB;
extern PFNGLCOMPRESSEDTEXIMAGE1DPROC gl3wCompressedTexImage1D;
extern PFNGLCOMPRESSEDTEXIMAGE2DPROC gl3wCompressedTexImage2D;
extern PFNGLCOMPRESSEDTEXIMAGE3DPROC gl3wCompressedTexImage3D;
extern PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC gl3wCompressedTexSubImage1D;
extern PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC gl3wCompressedTexSubImage2D;
extern PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC gl3wCompressedTexSubImage3D;
extern PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC gl3wCompressedTextureSubImage1D;
extern PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC gl3wCompressedTextureSubImage2D;
extern PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC gl3wCompressedTextureSubImage3D;
extern PFNGLCOPYBUFFERSUBDATAPROC gl3wCopyBufferSubData;
extern PFNGLCOPYIMAGESUBDATAPROC gl3wCopyImageSubData;
extern PFNGLCOPYNAMEDBUFFERSUBDATAPROC gl3wCopyNamedBufferSubData;
extern PFNGLCOPYTEXIMAGE1DPROC gl3wCopyTexImage1D;
extern PFNGLCOPYTEXIMAGE2DPROC gl3wCopyTexImage2D;
extern PFNGLCOPYTEXSUBIMAGE1DPROC gl3wCopyTexSubImage1D;
extern PFNGLCOPYTEXSUBIMAGE2DPROC gl3wCopyTexSubImage2D;
extern PFNGLCOPYTEXSUBIMAGE3DPROC gl3wCopyTexSubImage3D;
extern PFNGLCOPYTEXTURESUBIMAGE1DPROC gl3wCopyTextureSubImage1D;
extern PFNGLCOPYTEXTURESUBIMAGE2DPROC gl3wCopyTextureSubImage2D;
extern PFNGLCOPYTEXTURESUBIMAGE3DPROC gl3wCopyTextureSubImage3D;
extern PFNGLCREATEBUFFERSPROC gl3wCreateBuffers;
extern PFNGLCREATEFRAMEBUFFERSPROC gl3wCreateFramebuffers;
extern PFNGLCREATEPROGRAMPROC gl3wCreateProgram;
extern PFNGLCREATEPROGRAMPIPELINESPROC gl3wCreateProgramPipelines;
extern PFNGLCREATEQUERIESPROC gl3wCreateQueries;
extern PFNGLCREATERENDERBUFFERSPROC gl3wCreateRenderbuffers;
extern PFNGLCREATESAMPLERSPROC gl3wCreateSamplers;
extern PFNGLCREATESHADERPROC gl3wCreateShader;
extern PFNGLCREATESHADERPROGRAMVPROC gl3wCreateShaderProgramv;
extern PFNGLCREATESYNCFROMCLEVENTARBPROC gl3wCreateSyncFromCLeventARB;
extern PFNGLCREATETEXTURESPROC gl3wCreateTextures;
extern PFNGLCREATETRANSFORMFEEDBACKSPROC gl3wCreateTransformFeedbacks;
extern PFNGLCREATEVERTEXARRAYSPROC gl3wCreateVertexArrays;
extern PFNGLCULLFACEPROC gl3wCullFace;
extern PFNGLDEBUGMESSAGECALLBACKPROC gl3wDebugMessageCallback;
extern PFNGLDEBUGMESSAGECALLBACKARBPROC gl3wDebugMessageCallbackARB;
extern PFNGLDEBUGMESSAGECONTROLPROC gl3wDebugMessageControl;
extern PFNGLDEBUGMESSAGECONTROLARBPROC gl3wDebugMessageControlARB;
extern PFNGLDEBUGMESSAGEINSERTPROC gl3wDebugMessageInsert;
extern PFNGLDEBUGMESSAGEINSERTARBPROC gl3wDebugMessageInsertARB;
extern PFNGLDELETEBUFFERSPROC gl3wDeleteBuffers;
extern PFNGLDELETEFRAMEBUFFERSPROC gl3wDeleteFramebuffers;
extern PFNGLDELETENAMEDSTRINGARBPROC gl3wDeleteNamedStringARB;
extern PFNGLDELETEPROGRAMPROC gl3wDeleteProgram;
extern PFNGLDELETEPROGRAMPIPELINESPROC gl3wDeleteProgramPipelines;
extern PFNGLDELETEQUERIESPROC gl3wDeleteQueries;
extern PFNGLDELETERENDERBUFFERSPROC gl3wDeleteRenderbuffers;
extern PFNGLDELETESAMPLERSPROC gl3wDeleteSamplers;
extern PFNGLDELETESHADERPROC gl3wDeleteShader;
extern PFNGLDELETESYNCPROC gl3wDeleteSync;
extern PFNGLDELETETEXTURESPROC gl3wDeleteTextures;
extern PFNGLDELETETRANSFORMFEEDBACKSPROC gl3wDeleteTransformFeedbacks;
extern PFNGLDELETEVERTEXARRAYSPROC gl3wDeleteVertexArrays;
extern PFNGLDEPTHFUNCPROC gl3wDepthFunc;
extern PFNGLDEPTHMASKPROC gl3wDepthMask;
extern PFNGLDEPTHRANGEPROC gl3wDepthRange;
extern PFNGLDEPTHRANGEARRAYVPROC gl3wDepthRangeArrayv;
extern PFNGLDEPTHRANGEINDEXEDPROC gl3wDepthRangeIndexed;
extern PFNGLDEPTHRANGEFPROC gl3wDepthRangef;
extern PFNGLDETACHSHADERPROC gl3wDetachShader;
extern PFNGLDISABLEPROC gl3wDisable;
extern PFNGLDISABLEVERTEXARRAYATTRIBPROC gl3wDisableVertexArrayAttrib;
extern PFNGLDISABLEVERTEXATTRIBARRAYPROC gl3wDisableVertexAttribArray;
extern PFNGLDISABLEIPROC gl3wDisablei;
extern PFNGLDISPATCHCOMPUTEPROC gl3wDispatchCompute;
extern PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC gl3wDispatchComputeGroupSizeARB;
extern PFNGLDISPATCHCOMPUTEINDIRECTPROC gl3wDispatchComputeIndirect;
extern PFNGLDRAWARRAYSPROC gl3wDrawArrays;
extern PFNGLDRAWARRAYSINDIRECTPROC gl3wDrawArraysIndirect;
extern PFNGLDRAWARRAYSINSTANCEDPROC gl3wDrawArraysInstanced;
extern PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC gl3wDrawArraysInstancedBaseInstance;
extern PFNGLDRAWBUFFERPROC gl3wDrawBuffer;
extern PFNGLDRAWBUFFERSPROC gl3wDrawBuffers;
extern PFNGLDRAWELEMENTSPROC gl3wDrawElements;
extern PFNGLDRAWELEMENTSBASEVERTEXPROC gl3wDrawElementsBaseVertex;
extern PFNGLDRAWELEMENTSINDIRECTPROC gl3wDrawElementsIndirect;
extern PFNGLDRAWELEMENTSINSTANCEDPROC gl3wDrawElementsInstanced;
extern PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC gl3wDrawElementsInstancedBaseInstance;
extern PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC gl3wDrawElementsInstancedBaseVertex;
extern PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC gl3wDrawElementsInstancedBaseVertexBaseInstance;
extern PFNGLDRAWRANGEELEMENTSPROC gl3wDrawRangeElements;
extern PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC gl3wDrawRangeElementsBaseVertex;
extern PFNGLDRAWTRANSFORMFEEDBACKPROC gl3wDrawTransformFeedback;
extern PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC gl3wDrawTransformFeedbackInstanced;
extern PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC gl3wDrawTransformFeedbackStream;
extern PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC gl3wDrawTransformFeedbackStreamInstanced;
extern PFNGLENABLEPROC gl3wEnable;
extern PFNGLENABLEVERTEXARRAYATTRIBPROC gl3wEnableVertexArrayAttrib;
extern PFNGLENABLEVERTEXATTRIBARRAYPROC gl3wEnableVertexAttribArray;
extern PFNGLENABLEIPROC gl3wEnablei;
extern PFNGLENDCONDITIONALRENDERPROC gl3wEndConditionalRender;
extern PFNGLENDQUERYPROC gl3wEndQuery;
extern PFNGLENDQUERYINDEXEDPROC gl3wEndQueryIndexed;
extern PFNGLENDTRANSFORMFEEDBACKPROC gl3wEndTransformFeedback;
extern PFNGLFENCESYNCPROC gl3wFenceSync;
extern PFNGLFINISHPROC gl3wFinish;
extern PFNGLFLUSHPROC gl3wFlush;
extern PFNGLFLUSHMAPPEDBUFFERRANGEPROC gl3wFlushMappedBufferRange;
extern PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC gl3wFlushMappedNamedBufferRange;
extern PFNGLFRAMEBUFFERPARAMETERIPROC gl3wFramebufferParameteri;
extern PFNGLFRAMEBUFFERRENDERBUFFERPROC gl3wFramebufferRenderbuffer;
extern PFNGLFRAMEBUFFERTEXTUREPROC gl3wFramebufferTexture;
extern PFNGLFRAMEBUFFERTEXTURE1DPROC gl3wFramebufferTexture1D;
extern PFNGLFRAMEBUFFERTEXTURE2DPROC gl3wFramebufferTexture2D;
extern PFNGLFRAMEBUFFERTEXTURE3DPROC gl3wFramebufferTexture3D;
extern PFNGLFRAMEBUFFERTEXTURELAYERPROC gl3wFramebufferTextureLayer;
extern PFNGLFRONTFACEPROC gl3wFrontFace;
extern PFNGLGENBUFFERSPROC gl3wGenBuffers;
extern PFNGLGENFRAMEBUFFERSPROC gl3wGenFramebuffers;
extern PFNGLGENPROGRAMPIPELINESPROC gl3wGenProgramPipelines;
extern PFNGLGENQUERIESPROC gl3wGenQueries;
extern PFNGLGENRENDERBUFFERSPROC gl3wGenRenderbuffers;
extern PFNGLGENSAMPLERSPROC gl3wGenSamplers;
extern PFNGLGENTEXTURESPROC gl3wGenTextures;
extern PFNGLGENTRANSFORMFEEDBACKSPROC gl3wGenTransformFeedbacks;
extern PFNGLGENVERTEXARRAYSPROC gl3wGenVertexArrays;
extern PFNGLGENERATEMIPMAPPROC gl3wGenerateMipmap;
extern PFNGLGENERATETEXTUREMIPMAPPROC gl3wGenerateTextureMipmap;
extern PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC gl3wGetActiveAtomicCounterBufferiv;
extern PFNGLGETACTIVEATTRIBPROC gl3wGetActiveAttrib;
extern PFNGLGETACTIVESUBROUTINENAMEPROC gl3wGetActiveSubroutineName;
extern PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC gl3wGetActiveSubroutineUniformName;
extern PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC gl3wGetActiveSubroutineUniformiv;
extern PFNGLGETACTIVEUNIFORMPROC gl3wGetActiveUniform;
extern PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC gl3wGetActiveUniformBlockName;
extern PFNGLGETACTIVEUNIFORMBLOCKIVPROC gl3wGetActiveUniformBlockiv;
extern PFNGLGETACTIVEUNIFORMNAMEPROC gl3wGetActiveUniformName;
extern PFNGLGETACTIVEUNIFORMSIVPROC gl3wGetActiveUniformsiv;
extern PFNGLGETATTACHEDSHADERSPROC gl3wGetAttachedShaders;
extern PFNGLGETATTRIBLOCATIONPROC gl3wGetAttribLocation;
extern PFNGLGETBOOLEANI_VPROC gl3wGetBooleani_v;
extern PFNGLGETBOOLEANVPROC gl3wGetBooleanv;
extern PFNGLGETBUFFERPARAMETERI64VPROC gl3wGetBufferParameteri64v;
extern PFNGLGETBUFFERPARAMETERIVPROC gl3wGetBufferParameteriv;
extern PFNGLGETBUFFERPOINTERVPROC gl3wGetBufferPointerv;
extern PFNGLGETBUFFERSUBDATAPROC gl3wGetBufferSubData;
extern PFNGLGETCOMPRESSEDTEXIMAGEPROC gl3wGetCompressedTexImage;
extern PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC gl3wGetCompressedTextureImage;
extern PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC gl3wGetCompressedTextureSubImage;
extern PFNGLGETDEBUGMESSAGELOGPROC gl3wGetDebugMessageLog;
extern PFNGLGETDEBUGMESSAGELOGARBPROC gl3wGetDebugMessageLogARB;
extern PFNGLGETDOUBLEI_VPROC gl3wGetDoublei_v;
extern PFNGLGETDOUBLEVPROC gl3wGetDoublev;
extern PFNGLGETERRORPROC gl3wGetError;
extern PFNGLGETFLOATI_VPROC gl3wGetFloati_v;
extern PFNGLGETFLOATVPROC gl3wGetFloatv;
extern PFNGLGETFRAGDATAINDEXPROC gl3wGetFragDataIndex;
extern PFNGLGETFRAGDATALOCATIONPROC gl3wGetFragDataLocation;
extern PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC gl3wGetFramebufferAttachmentParameteriv;
extern PFNGLGETFRAMEBUFFERPARAMETERIVPROC gl3wGetFramebufferParameteriv;
extern PFNGLGETGRAPHICSRESETSTATUSPROC gl3wGetGraphicsResetStatus;
extern PFNGLGETGRAPHICSRESETSTATUSARBPROC gl3wGetGraphicsResetStatusARB;
extern PFNGLGETIMAGEHANDLEARBPROC gl3wGetImageHandleARB;
extern PFNGLGETINTEGER64I_VPROC gl3wGetInteger64i_v;
extern PFNGLGETINTEGER64VPROC gl3wGetInteger64v;
extern PFNGLGETINTEGERI_VPROC gl3wGetIntegeri_v;
extern PFNGLGETINTEGERVPROC gl3wGetIntegerv;
extern PFNGLGETINTERNALFORMATI64VPROC gl3wGetInternalformati64v;
extern PFNGLGETINTERNALFORMATIVPROC gl3wGetInternalformativ;
extern PFNGLGETMULTISAMPLEFVPROC gl3wGetMultisamplefv;
extern PFNGLGETNAMEDBUFFERPARAMETERI64VPROC gl3wGetNamedBufferParameteri64v;
extern PFNGLGETNAMEDBUFFERPARAMETERIVPROC gl3wGetNamedBufferParameteriv;
extern PFNGLGETNAMEDBUFFERPOINTERVPROC gl3wGetNamedBufferPointerv;
extern PFNGLGETNAMEDBUFFERSUBDATAPROC gl3wGetNamedBufferSubData;
extern PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC gl3wGetNamedFramebufferAttachmentParameteriv;
extern PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC gl3wGetNamedFramebufferParameteriv;
extern PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC gl3wGetNamedRenderbufferParameteriv;
extern PFNGLGETNAMEDSTRINGARBPROC gl3wGetNamedStringARB;
extern PFNGLGETNAMEDSTRINGIVARBPROC gl3wGetNamedStringivARB;
extern PFNGLGETOBJECTLABELPROC gl3wGetObjectLabel;
extern PFNGLGETOBJECTPTRLABELPROC gl3wGetObjectPtrLabel;
extern PFNGLGETPOINTERVPROC gl3wGetPointerv;
extern PFNGLGETPROGRAMBINARYPROC gl3wGetProgramBinary;
extern PFNGLGETPROGRAMINFOLOGPROC gl3wGetProgramInfoLog;
extern PFNGLGETPROGRAMINTERFACEIVPROC gl3wGetProgramInterfaceiv;
extern PFNGLGETPROGRAMPIPELINEINFOLOGPROC gl3wGetProgramPipelineInfoLog;
extern PFNGLGETPROGRAMPIPELINEIVPROC gl3wGetProgramPipelineiv;
extern PFNGLGETPROGRAMRESOURCEINDEXPROC gl3wGetProgramResourceIndex;
extern PFNGLGETPROGRAMRESOURCELOCATIONPROC gl3wGetProgramResourceLocation;
extern PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC gl3wGetProgramResourceLocationIndex;
extern PFNGLGETPROGRAMRESOURCENAMEPROC gl3wGetProgramResourceName;
extern PFNGLGETPROGRAMRESOURCEIVPROC gl3wGetProgramResourceiv;
extern PFNGLGETPROGRAMSTAGEIVPROC gl3wGetProgramStageiv;
extern PFNGLGETPROGRAMIVPROC gl3wGetProgramiv;
extern PFNGLGETQUERYBUFFEROBJECTI64VPROC gl3wGetQueryBufferObjecti64v;
extern PFNGLGETQUERYBUFFEROBJECTIVPROC gl3wGetQueryBufferObjectiv;
extern PFNGLGETQUERYBUFFEROBJECTUI64VPROC gl3wGetQueryBufferObjectui64v;
extern PFNGLGETQUERYBUFFEROBJECTUIVPROC gl3wGetQueryBufferObjectuiv;
extern PFNGLGETQUERYINDEXEDIVPROC gl3wGetQueryIndexediv;
extern PFNGLGETQUERYOBJECTI64VPROC gl3wGetQueryObjecti64v;
extern PFNGLGETQUERYOBJECTIVPROC gl3wGetQueryObjectiv;
extern PFNGLGETQUERYOBJECTUI64VPROC gl3wGetQueryObjectui64v;
extern PFNGLGETQUERYOBJECTUIVPROC gl3wGetQueryObjectuiv;
extern PFNGLGETQUERYIVPROC
gitextract_gyt1ey61/
├── .travis.yml
├── README.md
├── debug_draw.hpp
└── samples/
├── Makefile
├── README.md
├── gl3w/
│ ├── README.rst
│ ├── UNLICENSE
│ ├── gl3w_gen.py
│ ├── include/
│ │ └── GL/
│ │ ├── gl3w.h
│ │ └── glcorearb.h
│ └── src/
│ └── gl3w.cpp
├── sample_d3d11.cpp
├── sample_gl_core.cpp
├── sample_gl_core_multithreaded_explicit.cpp
├── sample_gl_core_multithreaded_tls.cpp
├── sample_gl_legacy.cpp
├── sample_null_renderer.cpp
├── samples_common.hpp
├── vectormath/
│ ├── LICENSE
│ ├── SSE/
│ │ └── cpp/
│ │ ├── boolInVec.h
│ │ ├── defines.h
│ │ ├── floatInVec.h
│ │ ├── mat_aos.h
│ │ ├── quat_aos.h
│ │ ├── vec_aos.h
│ │ ├── vecidx_aos.h
│ │ └── vectormath_aos.h
│ ├── c/
│ │ ├── vectormath_aos.h
│ │ ├── vectormath_aos_v.h
│ │ ├── vectormath_soa.h
│ │ └── vectormath_soa_v.h
│ ├── cpp/
│ │ ├── vectormath_aos.h
│ │ └── vectormath_soa.h
│ ├── ppu/
│ │ ├── c/
│ │ │ ├── mat_aos.h
│ │ │ ├── mat_aos_v.h
│ │ │ ├── mat_soa.h
│ │ │ ├── mat_soa_v.h
│ │ │ ├── quat_aos.h
│ │ │ ├── quat_aos_v.h
│ │ │ ├── quat_soa.h
│ │ │ ├── quat_soa_v.h
│ │ │ ├── vec_aos.h
│ │ │ ├── vec_aos_v.h
│ │ │ ├── vec_soa.h
│ │ │ ├── vec_soa_v.h
│ │ │ ├── vec_types.h
│ │ │ ├── vectormath_aos.h
│ │ │ ├── vectormath_aos_v.h
│ │ │ ├── vectormath_soa.h
│ │ │ └── vectormath_soa_v.h
│ │ └── cpp/
│ │ ├── boolInVec.h
│ │ ├── floatInVec.h
│ │ ├── mat_aos.h
│ │ ├── mat_soa.h
│ │ ├── quat_aos.h
│ │ ├── quat_soa.h
│ │ ├── vec_aos.h
│ │ ├── vec_soa.h
│ │ ├── vecidx_aos.h
│ │ ├── vectormath_aos.h
│ │ └── vectormath_soa.h
│ ├── scalar/
│ │ ├── c/
│ │ │ ├── mat_aos.h
│ │ │ ├── mat_aos_v.h
│ │ │ ├── quat_aos.h
│ │ │ ├── quat_aos_v.h
│ │ │ ├── vec_aos.h
│ │ │ ├── vec_aos_v.h
│ │ │ ├── vectormath_aos.h
│ │ │ └── vectormath_aos_v.h
│ │ └── cpp/
│ │ ├── mat_aos.h
│ │ ├── quat_aos.h
│ │ ├── vec_aos.h
│ │ └── vectormath_aos.h
│ ├── spu/
│ │ ├── c/
│ │ │ ├── mat_aos.h
│ │ │ ├── mat_aos_v.h
│ │ │ ├── mat_soa.h
│ │ │ ├── mat_soa_v.h
│ │ │ ├── quat_aos.h
│ │ │ ├── quat_aos_v.h
│ │ │ ├── quat_soa.h
│ │ │ ├── quat_soa_v.h
│ │ │ ├── vec_aos.h
│ │ │ ├── vec_aos_v.h
│ │ │ ├── vec_soa.h
│ │ │ ├── vec_soa_v.h
│ │ │ ├── vectormath_aos.h
│ │ │ ├── vectormath_aos_v.h
│ │ │ ├── vectormath_soa.h
│ │ │ └── vectormath_soa_v.h
│ │ └── cpp/
│ │ ├── boolInVec.h
│ │ ├── floatInVec.h
│ │ ├── mat_aos.h
│ │ ├── mat_soa.h
│ │ ├── quat_aos.h
│ │ ├── quat_soa.h
│ │ ├── vec_aos.h
│ │ ├── vec_soa.h
│ │ ├── vecidx_aos.h
│ │ ├── vectormath_aos.h
│ │ └── vectormath_soa.h
│ └── vectormath.h
└── vs2015/
├── ddSampleD3D11/
│ ├── ddSampleD3D11.filters
│ ├── ddSampleD3D11.sln
│ ├── ddSampleD3D11.vcxproj
│ └── ddShader.fx
├── ddSampleGLCore/
│ ├── ddSampleGLCore.sln
│ ├── ddSampleGLCore.vcxproj
│ └── ddSampleGLCore.vcxproj.filters
├── ddSampleGLLegacy/
│ ├── ddSampleGLCore.vcxproj
│ ├── ddSampleGLCore.vcxproj.filters
│ └── ddSampleGLLegacy.sln
├── ddSampleNullRenderer/
│ ├── ddSampleNullRenderer.sln
│ ├── ddSampleNullRenderer.vcxproj
│ └── ddSampleNullRenderer.vcxproj.filters
├── glfw-3.2-WIN32/
│ ├── COPYING.txt
│ ├── include/
│ │ └── GLFW/
│ │ ├── glfw3.h
│ │ └── glfw3native.h
│ └── lib-vc2015/
│ ├── glfw3.lib
│ └── glfw3dll.lib
└── glfw-3.2-WIN64/
├── COPYING.txt
├── include/
│ └── GLFW/
│ ├── glfw3.h
│ └── glfw3native.h
└── lib-vc2015/
├── glfw3.lib
└── glfw3dll.lib
Showing preview only (431K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (3944 symbols across 84 files)
FILE: debug_draw.hpp
type dd (line 312) | namespace dd
type colors (line 320) | namespace colors
type OpaqueContextType (line 469) | struct OpaqueContextType { }
type OpaqueTextureType (line 711) | struct OpaqueTextureType { }
class RenderInterface (line 720) | class RenderInterface
type FlushFlags (line 763) | enum FlushFlags
function degreesToRadians (line 843) | static inline float degreesToRadians(const T degrees)
function arrayLength (line 849) | static inline int arrayLength(const T (&)[Size])
type colors (line 859) | namespace colors
type FontChar (line 1007) | struct FontChar
type FontCharSet (line 1013) | struct FontCharSet
type LzwDictionary (line 1500) | struct LzwDictionary
type Entry (line 1503) | struct Entry
type LzwBitStreamReader (line 1518) | struct LzwBitStreamReader
function lzwOutputByte (line 1645) | static bool lzwOutputByte(int code, std::uint8_t *& output, int output...
function lzwOutputSequence (line 1660) | static bool lzwOutputSequence(const LzwDictionary & dict, int code,
function lzwDecompress (line 1685) | static int lzwDecompress(const void * compressedData, int compressedSi...
function FontCharSet (line 1780) | static inline const FontCharSet & getFontCharSet() { return s_f...
type DebugString (line 1823) | struct DebugString
type DebugPoint (line 1834) | struct DebugPoint
type DebugLine (line 1843) | struct DebugLine
function DD_EXPLICIT_CONTEXT_ONLY (line 1852) | struct InternalContext DD_EXPLICIT_CONTEXT_ONLY(: public OpaqueContext...
function floatAbs (line 1920) | static inline float floatAbs(float x) { return fabsf(x); }
function floatSin (line 1921) | static inline float floatSin(float radians) { return sinf(radians); }
function floatCos (line 1922) | static inline float floatCos(float radians) { return cosf(radians); }
function floatInvSqrt (line 1923) | static inline float floatInvSqrt(float x) { return (1.0f / sqrtf(x)); }
function floatRound (line 1937) | static inline float floatRound(float x)
function floatAbs (line 1945) | static inline float floatAbs(float x)
function floatInvSqrt (line 1954) | static inline float floatInvSqrt(float x)
function floatSin (line 1968) | static inline float floatSin(float radians)
function floatCos (line 1997) | static inline float floatCos(float radians)
type VecElements (line 2047) | enum VecElements { X, Y, Z, W }
function vecSet (line 2049) | static inline void vecSet(ddVec3_Out dest, const float x, const float ...
function vecCopy (line 2056) | static inline void vecCopy(ddVec3_Out dest, ddVec3_In src)
function vecAdd (line 2063) | static inline void vecAdd(ddVec3_Out result, ddVec3_In a, ddVec3_In b)
function vecSub (line 2070) | static inline void vecSub(ddVec3_Out result, ddVec3_In a, ddVec3_In b)
function vecScale (line 2077) | static inline void vecScale(ddVec3_Out result, ddVec3_In v, const floa...
function vecNormalize (line 2084) | static inline void vecNormalize(ddVec3_Out result, ddVec3_In v)
function vecCross (line 2093) | static inline void vecCross(ddVec3_Out result, ddVec3_In a, ddVec3_In b)
function vecOrthogonalBasis (line 2100) | static inline void vecOrthogonalBasis(ddVec3_Out left, ddVec3_Out up, ...
function matTransformPointXYZ (line 2132) | static inline void matTransformPointXYZ(ddVec3_Out result, ddVec3_In p...
function matTransformPointXYZW (line 2139) | static inline void matTransformPointXYZW(float result[4], ddVec3_In p,...
function matTransformPointXYZW2 (line 2147) | static inline float matTransformPointXYZW2(ddVec3_Out result, const fl...
type DrawMode (line 2160) | enum DrawMode
function flushDebugVerts (line 2167) | static void flushDebugVerts(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx...
function pushPointVert (line 2196) | static void pushPointVert(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,)...
function pushLineVert (line 2214) | static void pushLineVert(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ...
function pushGlyphVerts (line 2240) | static void pushGlyphVerts(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,...
function pushStringGlyphs (line 2256) | static void pushStringGlyphs(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ct...
function calcTextWidth (line 2334) | static float calcTextWidth(const char * text, const float scaling)
function drawDebugStrings (line 2357) | static void drawDebugStrings(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx))
function drawDebugPoints (line 2386) | static void drawDebugPoints(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx))
function drawDebugLines (line 2428) | static void drawDebugLines(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx))
function clearDebugQueue (line 2471) | static void clearDebugQueue(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx...
function setupGlyphTexture (line 2499) | static void setupGlyphTexture(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle c...
function initialize (line 2531) | bool initialize(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle * outCtx,) Rend...
function shutdown (line 2558) | void shutdown(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx))
function isInitialized (line 2591) | bool isInitialized(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx))
function hasPendingDraws (line 2596) | bool hasPendingDraws(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx))
function flush (line 2605) | void flush(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) const std::int...
function clear (line 2632) | void clear(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx))
function point (line 2653) | void point(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ddVec3_In pos,...
function line (line 2676) | void line(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ddVec3_In from,...
function screenText (line 2699) | void screenText(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) const cha...
function projectedText (line 2728) | void projectedText(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) const ...
function axisTriad (line 2785) | void axisTriad(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ddMat4x4_I...
function arrow (line 2816) | void arrow(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ddVec3_In from...
function cross (line 2878) | void cross(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ddVec3_In cent...
function circle (line 2914) | void circle(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ddVec3_In cen...
function plane (line 2947) | void plane(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ddVec3_In cent...
function sphere (line 2988) | void sphere(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ddVec3_In cen...
function cone (line 3033) | void cone(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ddVec3_In apex,...
function box (line 3102) | void box(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) const ddVec3 poi...
function box (line 3115) | void box(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ddVec3_In center...
function aabb (line 3149) | void aabb(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ddVec3_In mins,...
function frustum (line 3175) | void frustum(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ddMat4x4_In ...
function vertexNormal (line 3220) | void vertexNormal(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ddVec3_...
function tangentBasis (line 3240) | void tangentBasis(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ddVec3_...
function xzSquareGrid (line 3272) | void xzSquareGrid(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) const f...
function capsule (line 3295) | void capsule(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ddVec3_In ce...
function GlyphTextureHandle (line 3459) | GlyphTextureHandle RenderInterface::createGlyphTexture(int, int, const...
type dd (line 824) | namespace dd
type colors (line 320) | namespace colors
type OpaqueContextType (line 469) | struct OpaqueContextType { }
type OpaqueTextureType (line 711) | struct OpaqueTextureType { }
class RenderInterface (line 720) | class RenderInterface
type FlushFlags (line 763) | enum FlushFlags
function degreesToRadians (line 843) | static inline float degreesToRadians(const T degrees)
function arrayLength (line 849) | static inline int arrayLength(const T (&)[Size])
type colors (line 859) | namespace colors
type FontChar (line 1007) | struct FontChar
type FontCharSet (line 1013) | struct FontCharSet
type LzwDictionary (line 1500) | struct LzwDictionary
type Entry (line 1503) | struct Entry
type LzwBitStreamReader (line 1518) | struct LzwBitStreamReader
function lzwOutputByte (line 1645) | static bool lzwOutputByte(int code, std::uint8_t *& output, int output...
function lzwOutputSequence (line 1660) | static bool lzwOutputSequence(const LzwDictionary & dict, int code,
function lzwDecompress (line 1685) | static int lzwDecompress(const void * compressedData, int compressedSi...
function FontCharSet (line 1780) | static inline const FontCharSet & getFontCharSet() { return s_f...
type DebugString (line 1823) | struct DebugString
type DebugPoint (line 1834) | struct DebugPoint
type DebugLine (line 1843) | struct DebugLine
function DD_EXPLICIT_CONTEXT_ONLY (line 1852) | struct InternalContext DD_EXPLICIT_CONTEXT_ONLY(: public OpaqueContext...
function floatAbs (line 1920) | static inline float floatAbs(float x) { return fabsf(x); }
function floatSin (line 1921) | static inline float floatSin(float radians) { return sinf(radians); }
function floatCos (line 1922) | static inline float floatCos(float radians) { return cosf(radians); }
function floatInvSqrt (line 1923) | static inline float floatInvSqrt(float x) { return (1.0f / sqrtf(x)); }
function floatRound (line 1937) | static inline float floatRound(float x)
function floatAbs (line 1945) | static inline float floatAbs(float x)
function floatInvSqrt (line 1954) | static inline float floatInvSqrt(float x)
function floatSin (line 1968) | static inline float floatSin(float radians)
function floatCos (line 1997) | static inline float floatCos(float radians)
type VecElements (line 2047) | enum VecElements { X, Y, Z, W }
function vecSet (line 2049) | static inline void vecSet(ddVec3_Out dest, const float x, const float ...
function vecCopy (line 2056) | static inline void vecCopy(ddVec3_Out dest, ddVec3_In src)
function vecAdd (line 2063) | static inline void vecAdd(ddVec3_Out result, ddVec3_In a, ddVec3_In b)
function vecSub (line 2070) | static inline void vecSub(ddVec3_Out result, ddVec3_In a, ddVec3_In b)
function vecScale (line 2077) | static inline void vecScale(ddVec3_Out result, ddVec3_In v, const floa...
function vecNormalize (line 2084) | static inline void vecNormalize(ddVec3_Out result, ddVec3_In v)
function vecCross (line 2093) | static inline void vecCross(ddVec3_Out result, ddVec3_In a, ddVec3_In b)
function vecOrthogonalBasis (line 2100) | static inline void vecOrthogonalBasis(ddVec3_Out left, ddVec3_Out up, ...
function matTransformPointXYZ (line 2132) | static inline void matTransformPointXYZ(ddVec3_Out result, ddVec3_In p...
function matTransformPointXYZW (line 2139) | static inline void matTransformPointXYZW(float result[4], ddVec3_In p,...
function matTransformPointXYZW2 (line 2147) | static inline float matTransformPointXYZW2(ddVec3_Out result, const fl...
type DrawMode (line 2160) | enum DrawMode
function flushDebugVerts (line 2167) | static void flushDebugVerts(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx...
function pushPointVert (line 2196) | static void pushPointVert(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,)...
function pushLineVert (line 2214) | static void pushLineVert(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ...
function pushGlyphVerts (line 2240) | static void pushGlyphVerts(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,...
function pushStringGlyphs (line 2256) | static void pushStringGlyphs(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ct...
function calcTextWidth (line 2334) | static float calcTextWidth(const char * text, const float scaling)
function drawDebugStrings (line 2357) | static void drawDebugStrings(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx))
function drawDebugPoints (line 2386) | static void drawDebugPoints(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx))
function drawDebugLines (line 2428) | static void drawDebugLines(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx))
function clearDebugQueue (line 2471) | static void clearDebugQueue(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx...
function setupGlyphTexture (line 2499) | static void setupGlyphTexture(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle c...
function initialize (line 2531) | bool initialize(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle * outCtx,) Rend...
function shutdown (line 2558) | void shutdown(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx))
function isInitialized (line 2591) | bool isInitialized(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx))
function hasPendingDraws (line 2596) | bool hasPendingDraws(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx))
function flush (line 2605) | void flush(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) const std::int...
function clear (line 2632) | void clear(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx))
function point (line 2653) | void point(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ddVec3_In pos,...
function line (line 2676) | void line(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ddVec3_In from,...
function screenText (line 2699) | void screenText(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) const cha...
function projectedText (line 2728) | void projectedText(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) const ...
function axisTriad (line 2785) | void axisTriad(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ddMat4x4_I...
function arrow (line 2816) | void arrow(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ddVec3_In from...
function cross (line 2878) | void cross(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ddVec3_In cent...
function circle (line 2914) | void circle(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ddVec3_In cen...
function plane (line 2947) | void plane(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ddVec3_In cent...
function sphere (line 2988) | void sphere(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ddVec3_In cen...
function cone (line 3033) | void cone(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ddVec3_In apex,...
function box (line 3102) | void box(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) const ddVec3 poi...
function box (line 3115) | void box(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ddVec3_In center...
function aabb (line 3149) | void aabb(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ddVec3_In mins,...
function frustum (line 3175) | void frustum(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ddMat4x4_In ...
function vertexNormal (line 3220) | void vertexNormal(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ddVec3_...
function tangentBasis (line 3240) | void tangentBasis(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ddVec3_...
function xzSquareGrid (line 3272) | void xzSquareGrid(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) const f...
function capsule (line 3295) | void capsule(DD_EXPLICIT_CONTEXT_ONLY(ContextHandle ctx,) ddVec3_In ce...
function GlyphTextureHandle (line 3459) | GlyphTextureHandle RenderInterface::createGlyphTexture(int, int, const...
FILE: samples/gl3w/gl3w_gen.py
function proc_t (line 100) | def proc_t(proc):
FILE: samples/gl3w/include/GL/glcorearb.h
type GLvoid (line 82) | typedef void GLvoid;
type GLenum (line 83) | typedef unsigned int GLenum;
type GLfloat (line 84) | typedef float GLfloat;
type GLint (line 85) | typedef int GLint;
type GLsizei (line 86) | typedef int GLsizei;
type GLbitfield (line 87) | typedef unsigned int GLbitfield;
type GLdouble (line 88) | typedef double GLdouble;
type GLuint (line 89) | typedef unsigned int GLuint;
type GLboolean (line 90) | typedef unsigned char GLboolean;
type GLubyte (line 91) | typedef unsigned char GLubyte;
type GLubyte (line 131) | typedef const GLubyte *(APIENTRYP PFNGLGETSTRINGPROC) (GLenum name);
type GLclampf (line 194) | typedef float GLclampf;
type GLclampd (line 195) | typedef double GLclampd;
type GLsizeiptr (line 617) | typedef ptrdiff_t GLsizeiptr;
type GLintptr (line 618) | typedef ptrdiff_t GLintptr;
type GLchar (line 691) | typedef char GLchar;
type GLshort (line 692) | typedef short GLshort;
type GLbyte (line 693) | typedef signed char GLbyte;
type GLushort (line 694) | typedef unsigned short GLushort;
type GLhalf (line 1001) | typedef unsigned short GLhalf;
type GLubyte (line 1290) | typedef const GLubyte *(APIENTRYP PFNGLGETSTRINGIPROC) (GLenum name, GLu...
type __GLsync (line 1498) | struct __GLsync
type __int32 (line 1528) | typedef __int32 int32_t;
type __int64 (line 1529) | typedef __int64 int64_t;
type GLuint64 (line 1536) | typedef uint64_t GLuint64;
type GLint64 (line 1537) | typedef int64_t GLint64;
type const (line 1826) | typedef GLint (APIENTRYP PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC) (GLuint ...
type const (line 1827) | typedef GLuint (APIENTRYP PFNGLGETSUBROUTINEINDEXPROC) (GLuint program, ...
type const (line 2534) | typedef GLuint (APIENTRYP PFNGLGETPROGRAMRESOURCEINDEXPROC) (GLuint prog...
type const (line 2537) | typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONPROC) (GLuint pr...
type const (line 2538) | typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC) (GLui...
type GLuint64EXT (line 2920) | typedef uint64_t GLuint64EXT;
type _cl_context (line 2968) | struct _cl_context
type _cl_event (line 2969) | struct _cl_event
type struct (line 2972) | typedef GLsync (APIENTRYP PFNGLCREATESYNCFROMCLEVENTARBPROC) (struct _cl...
type _cl_context (line 2974) | struct _cl_context
type _cl_event (line 2974) | struct _cl_event
type GLchar (line 3353) | typedef GLboolean (APIENTRYP PFNGLISNAMEDSTRINGARBPROC) (GLint namelen, ...
FILE: samples/gl3w/src/gl3w.cpp
function gl3w_open_libgl (line 46) | static int gl3w_open_libgl(void)
function gl3w_close_libgl (line 56) | static void gl3w_close_libgl(void)
function GL3WglProc (line 65) | static GL3WglProc gl3w_fn(const char *proc)
function gl3w_open_libgl (line 89) | static int gl3w_open_libgl(void)
function gl3w_close_libgl (line 115) | static void gl3w_close_libgl(void)
function GL3WglProc (line 129) | static GL3WglProc gl3w_fn(const char *proc)
function gl3w_open_libgl (line 152) | static int gl3w_open_libgl(void)
function gl3w_close_libgl (line 162) | static void gl3w_close_libgl(void)
function GL3WglProc (line 171) | static GL3WglProc gl3w_fn(const char *proc)
function gl3w_parse_version (line 196) | static int gl3w_parse_version(void)
function gl3wInit (line 214) | int gl3wInit(void)
function gl3wShutdown (line 225) | void gl3wShutdown(void)
function gl3wIsSupported (line 230) | int gl3wIsSupported(int major, int minor)
function GL3WglProc (line 243) | GL3WglProc gl3wGetProcAddress(const char *proc)
function gl3w_load_all_functions (line 957) | static void gl3w_load_all_functions(void)
FILE: samples/sample_d3d11.cpp
function panicF (line 48) | static void panicF(const char * format, ...)
class Window (line 68) | class Window
method Window (line 75) | Window(HINSTANCE hInstance, int nCmdShow)
method runMessageLoop (line 94) | void runMessageLoop()
method onRender (line 108) | virtual void onRender() { }
method GetDpiAdjustedX (line 118) | static int GetDpiAdjustedX(int size) { return static_cast<int>(size * ...
method GetDpiAdjustedY (line 119) | static int GetDpiAdjustedY(int size) { return static_cast<int>(size * ...
method GetDpiXY (line 121) | static std::tuple<float, float> GetDpiXY()
method registerClass (line 137) | void registerClass()
method createWindow (line 152) | void createWindow(int nCmdShow)
method LRESULT (line 165) | static LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam...
class RenderWindowD3D11 (line 219) | class RenderWindowD3D11 final
method RenderWindowD3D11 (line 230) | RenderWindowD3D11(HINSTANCE hInstance, int nCmdShow)
method onRender (line 236) | void onRender() override
method initD3D (line 251) | void initD3D()
type ShaderSetD3D11 (line 359) | struct ShaderSetD3D11 final
method ShaderSetD3D11 (line 367) | ShaderSetD3D11() = default;
method loadFromFxFile (line 369) | void loadFromFxFile(ID3D11Device * device, const wchar_t * filename,
method compileShaderFromFile (line 416) | static void compileShaderFromFile(const wchar_t * fileName, const char...
class RenderInterfaceD3D11 (line 444) | class RenderInterfaceD3D11 final
method RenderInterfaceD3D11 (line 449) | RenderInterfaceD3D11(const ComPtr<ID3D11Device> & pDevice, const ComPt...
method setMvpMatrixPtr (line 457) | void setMvpMatrixPtr(const float * const mtx)
method setCameraFrame (line 462) | void setCameraFrame(const Vector3 & up, const Vector3 & right, const V...
method beginDraw (line 471) | void beginDraw() override
method endDraw (line 481) | void endDraw() override
method createGlyphTexture (line 486) | dd::GlyphTextureHandle createGlyphTexture(int width, int height, const...
method destroyGlyphTexture (line 541) | void destroyGlyphTexture(dd::GlyphTextureHandle glyphTex) override
method drawGlyphList (line 553) | void drawGlyphList(const dd::DrawVertex * glyphs, int count, dd::Glyph...
method drawPointList (line 605) | void drawPointList(const dd::DrawVertex * points, int count, bool dept...
method drawLineList (line 671) | void drawLineList(const dd::DrawVertex * lines, int count, bool depthE...
type ConstantBufferData (line 713) | struct ConstantBufferData
type Vertex (line 719) | struct Vertex
type TextureImpl (line 726) | struct TextureImpl : public dd::OpaqueTextureType
method initShaders (line 759) | void initShaders()
method initBuffers (line 814) | void initBuffers()
method drawHelper (line 850) | void drawHelper(const int numVerts, const ShaderSetD3D11 & ss,
function drawGrid (line 868) | static void drawGrid(dd::ContextHandle ctx)
function drawLabel (line 879) | static void drawLabel(dd::ContextHandle ctx, ddVec3_In pos, const char *...
function drawMiscObjects (line 895) | static void drawMiscObjects(dd::ContextHandle ctx)
function drawFrustum (line 981) | static void drawFrustum(dd::ContextHandle ctx)
function drawText (line 1001) | static void drawText(dd::ContextHandle ctx)
function inputUpdate (line 1012) | static void inputUpdate(const Window & win)
function WinMain (line 1039) | int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, L...
FILE: samples/sample_gl_core.cpp
class DDRenderInterfaceCoreGL (line 24) | class DDRenderInterfaceCoreGL final
method drawPointList (line 33) | void drawPointList(const dd::DrawVertex * points, int count, bool dept...
method drawLineList (line 66) | void drawLineList(const dd::DrawVertex * lines, int count, bool depthE...
method drawGlyphList (line 99) | void drawGlyphList(const dd::DrawVertex * glyphs, int count, dd::Glyph...
method createGlyphTexture (line 136) | dd::GlyphTextureHandle createGlyphTexture(int width, int height, const...
method destroyGlyphTexture (line 161) | void destroyGlyphTexture(dd::GlyphTextureHandle glyphTex) override
method DDRenderInterfaceCoreGL (line 182) | DDRenderInterfaceCoreGL()
method setupShaderPrograms (line 227) | void setupShaderPrograms()
method setupVertexBuffers (line 296) | void setupVertexBuffers()
method GLuint (line 401) | static GLuint handleToGL(dd::GlyphTextureHandle handle)
method GLToHandle (line 407) | static dd::GlyphTextureHandle GLToHandle(const GLuint id)
method checkGLError (line 413) | static void checkGLError(const char * file, const int line)
method compileShader (line 422) | static void compileShader(const GLuint shader)
method linkProgram (line 439) | static void linkProgram(const GLuint program)
function drawGrid (line 556) | static void drawGrid()
function drawLabel (line 565) | static void drawLabel(ddVec3_In pos, const char * name)
function drawMiscObjects (line 581) | static void drawMiscObjects()
function drawFrustum (line 667) | static void drawFrustum()
function drawText (line 687) | static void drawText()
function sampleAppDraw (line 698) | static void sampleAppDraw(DDRenderInterfaceCoreGL & ddRenderIfaceGL)
function sampleAppStart (line 721) | static void sampleAppStart()
function main (line 791) | int main()
FILE: samples/sample_gl_core_multithreaded_explicit.cpp
class DDRenderInterfaceCoreGL (line 28) | class DDRenderInterfaceCoreGL final
method drawPointList (line 37) | void drawPointList(const dd::DrawVertex * points, int count, bool dept...
method drawLineList (line 71) | void drawLineList(const dd::DrawVertex * lines, int count, bool depthE...
method drawGlyphList (line 105) | void drawGlyphList(const dd::DrawVertex * glyphs, int count, dd::Glyph...
method createGlyphTexture (line 143) | dd::GlyphTextureHandle createGlyphTexture(int width, int height, const...
method destroyGlyphTexture (line 169) | void destroyGlyphTexture(dd::GlyphTextureHandle glyphTex) override
method beginDraw (line 182) | void beginDraw() override { assert(isMainThread()); }
method endDraw (line 183) | void endDraw() override { assert(isMainThread()); }
method DDRenderInterfaceCoreGL (line 189) | DDRenderInterfaceCoreGL()
method prepareDraw (line 234) | void prepareDraw(const Matrix4 & mvp)
method setupShaderPrograms (line 243) | void setupShaderPrograms()
method setupVertexBuffers (line 312) | void setupVertexBuffers()
method GLuint (line 417) | static GLuint handleToGL(dd::GlyphTextureHandle handle)
method GLToHandle (line 423) | static dd::GlyphTextureHandle GLToHandle(const GLuint id)
method checkGLError (line 429) | static void checkGLError(const char * file, const int line)
method compileShader (line 438) | static void compileShader(const GLuint shader)
method linkProgram (line 455) | static void linkProgram(const GLuint program)
type ThreadData (line 572) | struct ThreadData
method init (line 578) | void init(void (*fn)(const ThreadData &), DDRenderInterfaceCoreGL * ri)
method shutdown (line 587) | void shutdown()
function drawLabel (line 599) | static void drawLabel(const ThreadData & td, ddVec3_In pos, const char *...
function drawGrid (line 615) | static void drawGrid(const ThreadData & td)
function drawMiscObjects (line 623) | static void drawMiscObjects(const ThreadData & td)
function drawFrustum (line 709) | static void drawFrustum(const ThreadData & td)
function drawText (line 729) | static void drawText(const ThreadData & td)
function sampleAppDraw (line 741) | static void sampleAppDraw(DDRenderInterfaceCoreGL & ddRenderIfaceGL, Thr...
function sampleAppStart (line 769) | static void sampleAppStart()
function main (line 855) | int main()
FILE: samples/sample_gl_core_multithreaded_tls.cpp
class DDRenderInterfaceCoreGL (line 27) | class DDRenderInterfaceCoreGL final
method drawPointList (line 36) | void drawPointList(const dd::DrawVertex * points, int count, bool dept...
method drawLineList (line 70) | void drawLineList(const dd::DrawVertex * lines, int count, bool depthE...
method drawGlyphList (line 104) | void drawGlyphList(const dd::DrawVertex * glyphs, int count, dd::Glyph...
method createGlyphTexture (line 142) | dd::GlyphTextureHandle createGlyphTexture(int width, int height, const...
method destroyGlyphTexture (line 168) | void destroyGlyphTexture(dd::GlyphTextureHandle glyphTex) override
method beginDraw (line 181) | void beginDraw() override { assert(isOwnerThreadCall()); }
method endDraw (line 182) | void endDraw() override { assert(isOwnerThreadCall()); }
method DDRenderInterfaceCoreGL (line 188) | DDRenderInterfaceCoreGL()
method prepareDraw (line 233) | void prepareDraw(const Matrix4 & mvp)
method setupShaderPrograms (line 242) | void setupShaderPrograms()
method setupVertexBuffers (line 311) | void setupVertexBuffers()
method GLuint (line 416) | static GLuint handleToGL(dd::GlyphTextureHandle handle)
method GLToHandle (line 422) | static dd::GlyphTextureHandle GLToHandle(const GLuint id)
method checkGLError (line 428) | static void checkGLError(const char * file, const int line)
method compileShader (line 437) | static void compileShader(const GLuint shader)
method linkProgram (line 454) | static void linkProgram(const GLuint program)
method setOwnerThread (line 471) | void setOwnerThread(std::thread::id tid)
method isOwnerThreadCall (line 476) | bool isOwnerThreadCall() const
class Semaphore (line 584) | class Semaphore final
method Semaphore (line 587) | Semaphore(int n = 0) : count(n)
method signal (line 590) | void signal()
method wait (line 597) | void wait()
type ThreadData (line 615) | struct ThreadData
method ThreadData (line 627) | ThreadData() : mainDone(0), renderDone(1)
method init (line 630) | void init(void (*fn)(ThreadData &), DDRenderInterfaceCoreGL * ri, GLFW...
method shutdown (line 639) | void shutdown()
function drawLabel (line 655) | static void drawLabel(ddVec3_In pos, const char * name)
function drawGrid (line 671) | static void drawGrid()
function drawMiscObjects (line 679) | static void drawMiscObjects()
function drawFrustum (line 765) | static void drawFrustum()
function drawText (line 785) | static void drawText()
function sampleAppRenderThread (line 796) | static void sampleAppRenderThread(ThreadData & td)
function sampleAppStart (line 828) | static void sampleAppStart()
function main (line 907) | int main()
FILE: samples/sample_gl_legacy.cpp
class DDRenderInterfaceLegacyGL (line 23) | class DDRenderInterfaceLegacyGL final
method drawPointList (line 32) | void drawPointList(const dd::DrawVertex * points, int count, bool dept...
method drawLineList (line 63) | void drawLineList(const dd::DrawVertex * lines, int count, bool depthE...
method drawGlyphList (line 89) | void drawGlyphList(const dd::DrawVertex * glyphs, int count, dd::Glyph...
method createGlyphTexture (line 155) | dd::GlyphTextureHandle createGlyphTexture(int width, int height, const...
method destroyGlyphTexture (line 205) | void destroyGlyphTexture(dd::GlyphTextureHandle glyphTex) override
method DDRenderInterfaceLegacyGL (line 226) | DDRenderInterfaceLegacyGL()
method GLuint (line 242) | static GLuint handleToGL(dd::GlyphTextureHandle handle)
method GLToHandle (line 248) | static dd::GlyphTextureHandle GLToHandle(const GLuint id)
method checkGLError (line 254) | static void checkGLError(const char * file, const int line)
function drawGrid (line 268) | static void drawGrid()
function drawLabel (line 277) | static void drawLabel(ddVec3_In pos, const char * name)
function drawMiscObjects (line 293) | static void drawMiscObjects()
function drawFrustum (line 379) | static void drawFrustum()
function drawText (line 399) | static void drawText()
function sampleAppDraw (line 410) | static void sampleAppDraw()
function sampleAppStart (line 436) | static void sampleAppStart()
function main (line 492) | int main()
FILE: samples/sample_null_renderer.cpp
class DDRenderInterfaceNull (line 16) | class DDRenderInterfaceNull final
function main (line 23) | int main()
FILE: samples/samples_common.hpp
type ddSamplesCommon (line 39) | namespace ddSamplesCommon
function degToRad (line 47) | static inline float degToRad(const float degrees)
function getTimeMilliseconds (line 55) | static inline std::int64_t getTimeMilliseconds()
function getTimeSeconds (line 62) | static inline double getTimeSeconds()
function getTimeMilliseconds (line 88) | static inline std::int64_t getTimeMilliseconds()
function getTimeSeconds (line 94) | static inline double getTimeSeconds()
function errorF (line 102) | static inline void errorF(const char * format, ...)
function printDDBuildConfig (line 115) | static inline void printDDBuildConfig()
type Keys (line 142) | struct Keys
type Mouse (line 154) | struct Mouse
type Time (line 165) | struct Time
type Camera (line 171) | struct Camera
type MoveDir (line 200) | enum MoveDir
method Camera (line 208) | Camera()
method pitch (line 227) | void pitch(const float angle)
method rotate (line 234) | void rotate(const float angle)
method move (line 260) | void move(const MoveDir dir, const float amount)
method checkKeyboardMovement (line 271) | void checkKeyboardMovement()
method checkMouseRotation (line 280) | void checkMouseRotation()
method updateMatrices (line 318) | void updateMatrices()
method Point3 (line 357) | Point3 getTarget() const
method isPointInsideFrustum (line 362) | bool isPointInsideFrustum(const float x, const float y, const float ...
method Vector3 (line 374) | static Vector3 rotateAroundAxis(const Vector3 & vec, const Vector3 &...
function mousePositionCallback (line 406) | static void mousePositionCallback(GLFWwindow * window, const double xP...
function mouseButtonCallback (line 431) | static void mouseButtonCallback(GLFWwindow * window, const int button,...
function keyCallback (line 447) | static void keyCallback(GLFWwindow * window, const int key, const int ...
function initInput (line 469) | static void initInput(GLFWwindow * window)
type MainThreadChecker (line 486) | struct MainThreadChecker
method MainThreadChecker (line 490) | MainThreadChecker()
class JobQueue (line 504) | class JobQueue final
method launch (line 524) | void launch()
method pushJob (line 531) | void pushJob(Job job)
method waitAll (line 539) | void waitAll()
method queueLoop (line 546) | void queueLoop()
FILE: samples/vectormath/SSE/cpp/boolInVec.h
function boolInVec (line 131) | inline
function boolInVec (line 137) | inline
function boolInVec (line 143) | inline
function getAsBool (line 151) | inline
function boolInVec (line 169) | inline
function boolInVec (line 184) | inline
function boolInVec (line 192) | inline
function boolInVec (line 200) | inline
function boolInVec (line 208) | inline
function boolInVec (line 215) | inline
function boolInVec (line 222) | inline
function boolInVec (line 229) | inline
function boolInVec (line 236) | inline
function boolInVec (line 243) | inline
FILE: samples/vectormath/SSE/cpp/floatInVec.h
function floatInVec (line 138) | inline
function floatInVec (line 144) | inline
function floatInVec (line 150) | inline
function floatInVec (line 158) | inline
function getAsFloat (line 165) | inline
function floatInVec (line 183) | inline
function floatInVec (line 192) | inline
function floatInVec (line 201) | inline
function floatInVec (line 209) | inline
function floatInVec (line 217) | inline
function floatInVec (line 232) | inline
function floatInVec (line 240) | inline
function floatInVec (line 248) | inline
function floatInVec (line 256) | inline
function floatInVec (line 264) | inline
function floatInVec (line 271) | inline
function floatInVec (line 278) | inline
function floatInVec (line 285) | inline
function boolInVec (line 292) | inline
function boolInVec (line 299) | inline
function boolInVec (line 306) | inline
function boolInVec (line 313) | inline
function boolInVec (line 320) | inline
function boolInVec (line 327) | inline
function floatInVec (line 334) | inline
FILE: samples/vectormath/SSE/cpp/mat_aos.h
function namespace (line 35) | namespace Vectormath {
FILE: samples/vectormath/SSE/cpp/quat_aos.h
function namespace (line 42) | namespace Vectormath {
FILE: samples/vectormath/SSE/cpp/vec_aos.h
function __m128 (line 70) | static inline __m128 _vmathVfDot3( __m128 vec0, __m128 vec1 )
function __m128 (line 76) | static inline __m128 _vmathVfDot4( __m128 vec0, __m128 vec1 )
function __m128 (line 84) | static inline __m128 _vmathVfCross( __m128 vec0, __m128 vec1 )
function __m128 (line 96) | static inline __m128 _vmathVfInsert(__m128 dst, __m128 src, int slot)
function __m128 (line 108) | static inline __m128 _vmathVfSplatScalar(float scalar)
function namespace (line 115) | namespace Vectormath {
FILE: samples/vectormath/SSE/cpp/vecidx_aos.h
function namespace (line 36) | namespace Vectormath {
FILE: samples/vectormath/SSE/cpp/vectormath_aos.h
type __m128 (line 39) | typedef __m128 vec_float4;
type __m128 (line 40) | typedef __m128 vec_uint4;
type __m128 (line 41) | typedef __m128 vec_int4;
type __m128i (line 42) | typedef __m128i vec_uchar16;
type __m128i (line 43) | typedef __m128i vec_ushort8;
function __m128 (line 59) | static inline __m128 vec_sel(__m128 a, __m128 b, __m128 mask)
function __m128 (line 64) | static inline __m128 vec_sel(__m128 a, __m128 b, const unsigned int *_mask)
function __m128 (line 69) | static inline __m128 vec_sel(__m128 a, __m128 b, unsigned int _mask)
function __m128 (line 74) | static inline __m128 toM128(unsigned int x)
function __m128 (line 79) | static inline __m128 fabsf4(__m128 x)
function __m128 (line 118) | static inline __m128 vec_cts(__m128 x, int a)
function __m128 (line 126) | static inline __m128 vec_ctf(__m128 x, int a)
function __m128 (line 149) | static inline __m128 newtonrapson_rsqrt4( const __m128 v )
function __m128 (line 158) | static inline __m128 acosf4(__m128 x)
function __m128 (line 189) | static inline __m128 sinf4(vec_float4 x)
function sincosf4 (line 259) | static inline void sincosf4(vec_float4 x, vec_float4* s, vec_float4* c)
FILE: samples/vectormath/ppu/c/mat_aos.h
function vmathM3Copy (line 65) | static inline void vmathM3Copy( VmathMatrix3 *result, const VmathMatrix3...
function vmathM3MakeFromScalar (line 72) | static inline void vmathM3MakeFromScalar( VmathMatrix3 *result, float sc...
function vmathM3MakeFromQ (line 79) | static inline void vmathM3MakeFromQ( VmathMatrix3 *result, const VmathQu...
function vmathM3MakeFromCols (line 105) | static inline void vmathM3MakeFromCols( VmathMatrix3 *result, const Vmat...
function vmathM3SetCol0 (line 112) | static inline void vmathM3SetCol0( VmathMatrix3 *result, const VmathVect...
function vmathM3SetCol1 (line 117) | static inline void vmathM3SetCol1( VmathMatrix3 *result, const VmathVect...
function vmathM3SetCol2 (line 122) | static inline void vmathM3SetCol2( VmathMatrix3 *result, const VmathVect...
function vmathM3SetCol (line 127) | static inline void vmathM3SetCol( VmathMatrix3 *result, int col, const V...
function vmathM3SetRow (line 132) | static inline void vmathM3SetRow( VmathMatrix3 *result, int row, const V...
function vmathM3SetElem (line 139) | static inline void vmathM3SetElem( VmathMatrix3 *result, int col, int ro...
function vmathM3GetElem (line 147) | static inline float vmathM3GetElem( const VmathMatrix3 *mat, int col, in...
function vmathM3GetCol0 (line 154) | static inline void vmathM3GetCol0( VmathVector3 *result, const VmathMatr...
function vmathM3GetCol1 (line 159) | static inline void vmathM3GetCol1( VmathVector3 *result, const VmathMatr...
function vmathM3GetCol2 (line 164) | static inline void vmathM3GetCol2( VmathVector3 *result, const VmathMatr...
function vmathM3GetCol (line 169) | static inline void vmathM3GetCol( VmathVector3 *result, const VmathMatri...
function vmathM3GetRow (line 174) | static inline void vmathM3GetRow( VmathVector3 *result, const VmathMatri...
function vmathM3Transpose (line 179) | static inline void vmathM3Transpose( VmathMatrix3 *result, const VmathMa...
function vmathM3Inverse (line 192) | static inline void vmathM3Inverse( VmathMatrix3 *result, const VmathMatr...
function vmathM3Determinant (line 215) | static inline float vmathM3Determinant( const VmathMatrix3 *mat )
function vmathM3Add (line 222) | static inline void vmathM3Add( VmathMatrix3 *result, const VmathMatrix3 ...
function vmathM3Sub (line 229) | static inline void vmathM3Sub( VmathMatrix3 *result, const VmathMatrix3 ...
function vmathM3Neg (line 236) | static inline void vmathM3Neg( VmathMatrix3 *result, const VmathMatrix3 ...
function vmathM3AbsPerElem (line 243) | static inline void vmathM3AbsPerElem( VmathMatrix3 *result, const VmathM...
function vmathM3ScalarMul (line 250) | static inline void vmathM3ScalarMul( VmathMatrix3 *result, const VmathMa...
function vmathM3MulV3 (line 257) | static inline void vmathM3MulV3( VmathVector3 *result, const VmathMatrix...
function vmathM3Mul (line 270) | static inline void vmathM3Mul( VmathMatrix3 *result, const VmathMatrix3 ...
function vmathM3MulPerElem (line 279) | static inline void vmathM3MulPerElem( VmathMatrix3 *result, const VmathM...
function vmathM3MakeIdentity (line 286) | static inline void vmathM3MakeIdentity( VmathMatrix3 *result )
function vmathM3MakeRotationX (line 293) | static inline void vmathM3MakeRotationX( VmathMatrix3 *result, float rad...
function vmathM3MakeRotationY (line 311) | static inline void vmathM3MakeRotationY( VmathMatrix3 *result, float rad...
function vmathM3MakeRotationZ (line 329) | static inline void vmathM3MakeRotationZ( VmathMatrix3 *result, float rad...
function vmathM3MakeRotationZYX (line 347) | static inline void vmathM3MakeRotationZYX( VmathMatrix3 *result, const V...
function vmathM3MakeRotationAxis (line 369) | static inline void vmathM3MakeRotationAxis( VmathMatrix3 *result, float ...
function vmathM3MakeRotationQ (line 392) | static inline void vmathM3MakeRotationQ( VmathMatrix3 *result, const Vma...
function vmathM3MakeScale (line 397) | static inline void vmathM3MakeScale( VmathMatrix3 *result, const VmathVe...
function vmathM3AppendScale (line 405) | static inline void vmathM3AppendScale( VmathMatrix3 *result, const Vmath...
function vmathM3PrependScale (line 412) | static inline void vmathM3PrependScale( VmathMatrix3 *result, const Vmat...
function vmathM3Select (line 419) | static inline void vmathM3Select( VmathMatrix3 *result, const VmathMatri...
function vmathM3Print (line 428) | static inline void vmathM3Print( const VmathMatrix3 *mat )
function vmathM3Prints (line 439) | static inline void vmathM3Prints( const VmathMatrix3 *mat, const char *n...
function vmathM4Copy (line 447) | static inline void vmathM4Copy( VmathMatrix4 *result, const VmathMatrix4...
function vmathM4MakeFromScalar (line 455) | static inline void vmathM4MakeFromScalar( VmathMatrix4 *result, float sc...
function vmathM4MakeFromT3 (line 463) | static inline void vmathM4MakeFromT3( VmathMatrix4 *result, const VmathT...
function vmathM4MakeFromCols (line 471) | static inline void vmathM4MakeFromCols( VmathMatrix4 *result, const Vmat...
function vmathM4MakeFromM3V3 (line 479) | static inline void vmathM4MakeFromM3V3( VmathMatrix4 *result, const Vmat...
function vmathM4MakeFromQV3 (line 487) | static inline void vmathM4MakeFromQV3( VmathMatrix4 *result, const Vmath...
function vmathM4SetCol0 (line 497) | static inline void vmathM4SetCol0( VmathMatrix4 *result, const VmathVect...
function vmathM4SetCol1 (line 502) | static inline void vmathM4SetCol1( VmathMatrix4 *result, const VmathVect...
function vmathM4SetCol2 (line 507) | static inline void vmathM4SetCol2( VmathMatrix4 *result, const VmathVect...
function vmathM4SetCol3 (line 512) | static inline void vmathM4SetCol3( VmathMatrix4 *result, const VmathVect...
function vmathM4SetCol (line 517) | static inline void vmathM4SetCol( VmathMatrix4 *result, int col, const V...
function vmathM4SetRow (line 522) | static inline void vmathM4SetRow( VmathMatrix4 *result, int row, const V...
function vmathM4SetElem (line 530) | static inline void vmathM4SetElem( VmathMatrix4 *result, int col, int ro...
function vmathM4GetElem (line 538) | static inline float vmathM4GetElem( const VmathMatrix4 *mat, int col, in...
function vmathM4GetCol0 (line 545) | static inline void vmathM4GetCol0( VmathVector4 *result, const VmathMatr...
function vmathM4GetCol1 (line 550) | static inline void vmathM4GetCol1( VmathVector4 *result, const VmathMatr...
function vmathM4GetCol2 (line 555) | static inline void vmathM4GetCol2( VmathVector4 *result, const VmathMatr...
function vmathM4GetCol3 (line 560) | static inline void vmathM4GetCol3( VmathVector4 *result, const VmathMatr...
function vmathM4GetCol (line 565) | static inline void vmathM4GetCol( VmathVector4 *result, const VmathMatri...
function vmathM4GetRow (line 570) | static inline void vmathM4GetRow( VmathVector4 *result, const VmathMatri...
function vmathM4Transpose (line 575) | static inline void vmathM4Transpose( VmathMatrix4 *result, const VmathMa...
function vmathM4Inverse (line 592) | static inline void vmathM4Inverse( VmathMatrix4 *result, const VmathMatr...
function vmathM4AffineInverse (line 717) | static inline void vmathM4AffineInverse( VmathMatrix4 *result, const Vma...
function vmathM4OrthoInverse (line 733) | static inline void vmathM4OrthoInverse( VmathMatrix4 *result, const Vmat...
function vmathM4Determinant (line 749) | static inline float vmathM4Determinant( const VmathMatrix4 *mat )
function vmathM4Add (line 821) | static inline void vmathM4Add( VmathMatrix4 *result, const VmathMatrix4 ...
function vmathM4Sub (line 829) | static inline void vmathM4Sub( VmathMatrix4 *result, const VmathMatrix4 ...
function vmathM4Neg (line 837) | static inline void vmathM4Neg( VmathMatrix4 *result, const VmathMatrix4 ...
function vmathM4AbsPerElem (line 845) | static inline void vmathM4AbsPerElem( VmathMatrix4 *result, const VmathM...
function vmathM4ScalarMul (line 853) | static inline void vmathM4ScalarMul( VmathMatrix4 *result, const VmathMa...
function vmathM4MulV4 (line 861) | static inline void vmathM4MulV4( VmathVector4 *result, const VmathMatrix...
function vmathM4MulV3 (line 878) | static inline void vmathM4MulV3( VmathVector4 *result, const VmathMatrix...
function vmathM4MulP3 (line 891) | static inline void vmathM4MulP3( VmathVector4 *result, const VmathMatrix...
function vmathM4Mul (line 907) | static inline void vmathM4Mul( VmathMatrix4 *result, const VmathMatrix4 ...
function vmathM4MulT3 (line 917) | static inline void vmathM4MulT3( VmathMatrix4 *result, const VmathMatrix...
function vmathM4MulPerElem (line 929) | static inline void vmathM4MulPerElem( VmathMatrix4 *result, const VmathM...
function vmathM4MakeIdentity (line 937) | static inline void vmathM4MakeIdentity( VmathMatrix4 *result )
function vmathM4SetUpper3x3 (line 945) | static inline void vmathM4SetUpper3x3( VmathMatrix4 *result, const Vmath...
function vmathM4GetUpper3x3 (line 952) | static inline void vmathM4GetUpper3x3( VmathMatrix3 *result, const Vmath...
function vmathM4SetTranslation (line 959) | static inline void vmathM4SetTranslation( VmathMatrix4 *result, const Vm...
function vmathM4GetTranslation (line 964) | static inline void vmathM4GetTranslation( VmathVector3 *result, const Vm...
function vmathM4MakeRotationX (line 969) | static inline void vmathM4MakeRotationX( VmathMatrix4 *result, float rad...
function vmathM4MakeRotationY (line 988) | static inline void vmathM4MakeRotationY( VmathMatrix4 *result, float rad...
function vmathM4MakeRotationZ (line 1007) | static inline void vmathM4MakeRotationZ( VmathMatrix4 *result, float rad...
function vmathM4MakeRotationZYX (line 1026) | static inline void vmathM4MakeRotationZYX( VmathMatrix4 *result, const V...
function vmathM4MakeRotationAxis (line 1049) | static inline void vmathM4MakeRotationAxis( VmathMatrix4 *result, float ...
function vmathM4MakeRotationQ (line 1078) | static inline void vmathM4MakeRotationQ( VmathMatrix4 *result, const Vma...
function vmathM4MakeScale (line 1085) | static inline void vmathM4MakeScale( VmathMatrix4 *result, const VmathVe...
function vmathM4AppendScale (line 1094) | static inline void vmathM4AppendScale( VmathMatrix4 *result, const Vmath...
function vmathM4PrependScale (line 1102) | static inline void vmathM4PrependScale( VmathMatrix4 *result, const Vmat...
function vmathM4MakeTranslation (line 1112) | static inline void vmathM4MakeTranslation( VmathMatrix4 *result, const V...
function vmathM4MakeLookAt (line 1120) | static inline void vmathM4MakeLookAt( VmathMatrix4 *result, const VmathP...
function vmathM4MakePerspective (line 1139) | static inline void vmathM4MakePerspective( VmathMatrix4 *result, float f...
function vmathM4MakeFrustum (line 1166) | static inline void vmathM4MakeFrustum( VmathMatrix4 *result, float left,...
function vmathM4MakeOrthographic (line 1208) | static inline void vmathM4MakeOrthographic( VmathMatrix4 *result, float ...
function vmathM4Select (line 1249) | static inline void vmathM4Select( VmathMatrix4 *result, const VmathMatri...
function vmathM4Print (line 1259) | static inline void vmathM4Print( const VmathMatrix4 *mat )
function vmathM4Prints (line 1272) | static inline void vmathM4Prints( const VmathMatrix4 *mat, const char *n...
function vmathT3Copy (line 1280) | static inline void vmathT3Copy( VmathTransform3 *result, const VmathTran...
function vmathT3MakeFromScalar (line 1288) | static inline void vmathT3MakeFromScalar( VmathTransform3 *result, float...
function vmathT3MakeFromCols (line 1296) | static inline void vmathT3MakeFromCols( VmathTransform3 *result, const V...
function vmathT3MakeFromM3V3 (line 1304) | static inline void vmathT3MakeFromM3V3( VmathTransform3 *result, const V...
function vmathT3MakeFromQV3 (line 1310) | static inline void vmathT3MakeFromQV3( VmathTransform3 *result, const Vm...
function vmathT3SetCol0 (line 1318) | static inline void vmathT3SetCol0( VmathTransform3 *result, const VmathV...
function vmathT3SetCol1 (line 1323) | static inline void vmathT3SetCol1( VmathTransform3 *result, const VmathV...
function vmathT3SetCol2 (line 1328) | static inline void vmathT3SetCol2( VmathTransform3 *result, const VmathV...
function vmathT3SetCol3 (line 1333) | static inline void vmathT3SetCol3( VmathTransform3 *result, const VmathV...
function vmathT3SetCol (line 1338) | static inline void vmathT3SetCol( VmathTransform3 *result, int col, cons...
function vmathT3SetRow (line 1343) | static inline void vmathT3SetRow( VmathTransform3 *result, int row, cons...
function vmathT3SetElem (line 1351) | static inline void vmathT3SetElem( VmathTransform3 *result, int col, int...
function vmathT3GetElem (line 1359) | static inline float vmathT3GetElem( const VmathTransform3 *tfrm, int col...
function vmathT3GetCol0 (line 1366) | static inline void vmathT3GetCol0( VmathVector3 *result, const VmathTran...
function vmathT3GetCol1 (line 1371) | static inline void vmathT3GetCol1( VmathVector3 *result, const VmathTran...
function vmathT3GetCol2 (line 1376) | static inline void vmathT3GetCol2( VmathVector3 *result, const VmathTran...
function vmathT3GetCol3 (line 1381) | static inline void vmathT3GetCol3( VmathVector3 *result, const VmathTran...
function vmathT3GetCol (line 1386) | static inline void vmathT3GetCol( VmathVector3 *result, const VmathTrans...
function vmathT3GetRow (line 1391) | static inline void vmathT3GetRow( VmathVector4 *result, const VmathTrans...
function vmathT3Inverse (line 1396) | static inline void vmathT3Inverse( VmathTransform3 *result, const VmathT...
function vmathT3OrthoInverse (line 1430) | static inline void vmathT3OrthoInverse( VmathTransform3 *result, const V...
function vmathT3AbsPerElem (line 1453) | static inline void vmathT3AbsPerElem( VmathTransform3 *result, const Vma...
function vmathT3MulV3 (line 1461) | static inline void vmathT3MulV3( VmathVector3 *result, const VmathTransf...
function vmathT3MulP3 (line 1474) | static inline void vmathT3MulP3( VmathPoint3 *result, const VmathTransfo...
function vmathT3Mul (line 1490) | static inline void vmathT3Mul( VmathTransform3 *result, const VmathTrans...
function vmathT3MulPerElem (line 1503) | static inline void vmathT3MulPerElem( VmathTransform3 *result, const Vma...
function vmathT3MakeIdentity (line 1511) | static inline void vmathT3MakeIdentity( VmathTransform3 *result )
function vmathT3SetUpper3x3 (line 1519) | static inline void vmathT3SetUpper3x3( VmathTransform3 *result, const Vm...
function vmathT3GetUpper3x3 (line 1526) | static inline void vmathT3GetUpper3x3( VmathMatrix3 *result, const Vmath...
function vmathT3SetTranslation (line 1531) | static inline void vmathT3SetTranslation( VmathTransform3 *result, const...
function vmathT3GetTranslation (line 1536) | static inline void vmathT3GetTranslation( VmathVector3 *result, const Vm...
function vmathT3MakeRotationX (line 1541) | static inline void vmathT3MakeRotationX( VmathTransform3 *result, float ...
function vmathT3MakeRotationY (line 1560) | static inline void vmathT3MakeRotationY( VmathTransform3 *result, float ...
function vmathT3MakeRotationZ (line 1579) | static inline void vmathT3MakeRotationZ( VmathTransform3 *result, float ...
function vmathT3MakeRotationZYX (line 1598) | static inline void vmathT3MakeRotationZYX( VmathTransform3 *result, cons...
function vmathT3MakeRotationAxis (line 1621) | static inline void vmathT3MakeRotationAxis( VmathTransform3 *result, flo...
function vmathT3MakeRotationQ (line 1630) | static inline void vmathT3MakeRotationQ( VmathTransform3 *result, const ...
function vmathT3MakeScale (line 1639) | static inline void vmathT3MakeScale( VmathTransform3 *result, const Vmat...
function vmathT3AppendScale (line 1648) | static inline void vmathT3AppendScale( VmathTransform3 *result, const Vm...
function vmathT3PrependScale (line 1656) | static inline void vmathT3PrependScale( VmathTransform3 *result, const V...
function vmathT3MakeTranslation (line 1664) | static inline void vmathT3MakeTranslation( VmathTransform3 *result, cons...
function vmathT3Select (line 1672) | static inline void vmathT3Select( VmathTransform3 *result, const VmathTr...
function vmathT3Print (line 1682) | static inline void vmathT3Print( const VmathTransform3 *tfrm )
function vmathT3Prints (line 1693) | static inline void vmathT3Prints( const VmathTransform3 *tfrm, const cha...
function vmathQMakeFromM3 (line 1701) | static inline void vmathQMakeFromM3( VmathQuat *result, const VmathMatri...
function vmathV3Outer (line 1772) | static inline void vmathV3Outer( VmathMatrix3 *result, const VmathVector...
function vmathV4Outer (line 1779) | static inline void vmathV4Outer( VmathMatrix4 *result, const VmathVector...
function vmathV3RowMul (line 1787) | static inline void vmathV3RowMul( VmathVector3 *result, const VmathVecto...
function vmathV3CrossMatrix (line 1805) | static inline void vmathV3CrossMatrix( VmathMatrix3 *result, const Vmath...
function vmathV3CrossMatrixMul (line 1820) | static inline void vmathV3CrossMatrixMul( VmathMatrix3 *result, const Vm...
FILE: samples/vectormath/ppu/c/mat_aos_v.h
function VmathMatrix3 (line 65) | static inline VmathMatrix3 vmathM3MakeFromScalar_V( float scalar )
function VmathMatrix3 (line 72) | static inline VmathMatrix3 vmathM3MakeFromQ_V( VmathQuat unitQuat )
function VmathMatrix3 (line 79) | static inline VmathMatrix3 vmathM3MakeFromCols_V( VmathVector3 _col0, Vm...
function vmathM3SetCol0_V (line 86) | static inline void vmathM3SetCol0_V( VmathMatrix3 *result, VmathVector3 ...
function vmathM3SetCol1_V (line 91) | static inline void vmathM3SetCol1_V( VmathMatrix3 *result, VmathVector3 ...
function vmathM3SetCol2_V (line 96) | static inline void vmathM3SetCol2_V( VmathMatrix3 *result, VmathVector3 ...
function vmathM3SetCol_V (line 101) | static inline void vmathM3SetCol_V( VmathMatrix3 *result, int col, Vmath...
function vmathM3SetRow_V (line 106) | static inline void vmathM3SetRow_V( VmathMatrix3 *result, int row, Vmath...
function vmathM3SetElem_V (line 111) | static inline void vmathM3SetElem_V( VmathMatrix3 *result, int col, int ...
function vmathM3GetElem_V (line 116) | static inline float vmathM3GetElem_V( VmathMatrix3 mat, int col, int row )
function VmathVector3 (line 121) | static inline VmathVector3 vmathM3GetCol0_V( VmathMatrix3 mat )
function VmathVector3 (line 128) | static inline VmathVector3 vmathM3GetCol1_V( VmathMatrix3 mat )
function VmathVector3 (line 135) | static inline VmathVector3 vmathM3GetCol2_V( VmathMatrix3 mat )
function VmathVector3 (line 142) | static inline VmathVector3 vmathM3GetCol_V( VmathMatrix3 mat, int col )
function VmathVector3 (line 149) | static inline VmathVector3 vmathM3GetRow_V( VmathMatrix3 mat, int row )
function VmathMatrix3 (line 156) | static inline VmathMatrix3 vmathM3Transpose_V( VmathMatrix3 mat )
function VmathMatrix3 (line 163) | static inline VmathMatrix3 vmathM3Inverse_V( VmathMatrix3 mat )
function vmathM3Determinant_V (line 170) | static inline float vmathM3Determinant_V( VmathMatrix3 mat )
function VmathMatrix3 (line 175) | static inline VmathMatrix3 vmathM3Add_V( VmathMatrix3 mat0, VmathMatrix3...
function VmathMatrix3 (line 182) | static inline VmathMatrix3 vmathM3Sub_V( VmathMatrix3 mat0, VmathMatrix3...
function VmathMatrix3 (line 189) | static inline VmathMatrix3 vmathM3Neg_V( VmathMatrix3 mat )
function VmathMatrix3 (line 196) | static inline VmathMatrix3 vmathM3AbsPerElem_V( VmathMatrix3 mat )
function VmathMatrix3 (line 203) | static inline VmathMatrix3 vmathM3ScalarMul_V( VmathMatrix3 mat, float s...
function VmathVector3 (line 210) | static inline VmathVector3 vmathM3MulV3_V( VmathMatrix3 mat, VmathVector...
function VmathMatrix3 (line 217) | static inline VmathMatrix3 vmathM3Mul_V( VmathMatrix3 mat0, VmathMatrix3...
function VmathMatrix3 (line 224) | static inline VmathMatrix3 vmathM3MulPerElem_V( VmathMatrix3 mat0, Vmath...
function VmathMatrix3 (line 231) | static inline VmathMatrix3 vmathM3MakeIdentity_V( )
function VmathMatrix3 (line 238) | static inline VmathMatrix3 vmathM3MakeRotationX_V( float radians )
function VmathMatrix3 (line 245) | static inline VmathMatrix3 vmathM3MakeRotationY_V( float radians )
function VmathMatrix3 (line 252) | static inline VmathMatrix3 vmathM3MakeRotationZ_V( float radians )
function VmathMatrix3 (line 259) | static inline VmathMatrix3 vmathM3MakeRotationZYX_V( VmathVector3 radian...
function VmathMatrix3 (line 266) | static inline VmathMatrix3 vmathM3MakeRotationAxis_V( float radians, Vma...
function VmathMatrix3 (line 273) | static inline VmathMatrix3 vmathM3MakeRotationQ_V( VmathQuat unitQuat )
function VmathMatrix3 (line 280) | static inline VmathMatrix3 vmathM3MakeScale_V( VmathVector3 scaleVec )
function VmathMatrix3 (line 287) | static inline VmathMatrix3 vmathM3AppendScale_V( VmathMatrix3 mat, Vmath...
function VmathMatrix3 (line 294) | static inline VmathMatrix3 vmathM3PrependScale_V( VmathVector3 scaleVec,...
function VmathMatrix3 (line 301) | static inline VmathMatrix3 vmathM3Select_V( VmathMatrix3 mat0, VmathMatr...
function vmathM3Print_V (line 310) | static inline void vmathM3Print_V( VmathMatrix3 mat )
function vmathM3Prints_V (line 315) | static inline void vmathM3Prints_V( VmathMatrix3 mat, const char *name )
function VmathMatrix4 (line 322) | static inline VmathMatrix4 vmathM4MakeFromScalar_V( float scalar )
function VmathMatrix4 (line 329) | static inline VmathMatrix4 vmathM4MakeFromT3_V( VmathTransform3 mat )
function VmathMatrix4 (line 336) | static inline VmathMatrix4 vmathM4MakeFromCols_V( VmathVector4 _col0, Vm...
function VmathMatrix4 (line 343) | static inline VmathMatrix4 vmathM4MakeFromM3V3_V( VmathMatrix3 mat, Vmat...
function VmathMatrix4 (line 350) | static inline VmathMatrix4 vmathM4MakeFromQV3_V( VmathQuat unitQuat, Vma...
function vmathM4SetCol0_V (line 357) | static inline void vmathM4SetCol0_V( VmathMatrix4 *result, VmathVector4 ...
function vmathM4SetCol1_V (line 362) | static inline void vmathM4SetCol1_V( VmathMatrix4 *result, VmathVector4 ...
function vmathM4SetCol2_V (line 367) | static inline void vmathM4SetCol2_V( VmathMatrix4 *result, VmathVector4 ...
function vmathM4SetCol3_V (line 372) | static inline void vmathM4SetCol3_V( VmathMatrix4 *result, VmathVector4 ...
function vmathM4SetCol_V (line 377) | static inline void vmathM4SetCol_V( VmathMatrix4 *result, int col, Vmath...
function vmathM4SetRow_V (line 382) | static inline void vmathM4SetRow_V( VmathMatrix4 *result, int row, Vmath...
function vmathM4SetElem_V (line 387) | static inline void vmathM4SetElem_V( VmathMatrix4 *result, int col, int ...
function vmathM4GetElem_V (line 392) | static inline float vmathM4GetElem_V( VmathMatrix4 mat, int col, int row )
function VmathVector4 (line 397) | static inline VmathVector4 vmathM4GetCol0_V( VmathMatrix4 mat )
function VmathVector4 (line 404) | static inline VmathVector4 vmathM4GetCol1_V( VmathMatrix4 mat )
function VmathVector4 (line 411) | static inline VmathVector4 vmathM4GetCol2_V( VmathMatrix4 mat )
function VmathVector4 (line 418) | static inline VmathVector4 vmathM4GetCol3_V( VmathMatrix4 mat )
function VmathVector4 (line 425) | static inline VmathVector4 vmathM4GetCol_V( VmathMatrix4 mat, int col )
function VmathVector4 (line 432) | static inline VmathVector4 vmathM4GetRow_V( VmathMatrix4 mat, int row )
function VmathMatrix4 (line 439) | static inline VmathMatrix4 vmathM4Transpose_V( VmathMatrix4 mat )
function VmathMatrix4 (line 446) | static inline VmathMatrix4 vmathM4Inverse_V( VmathMatrix4 mat )
function VmathMatrix4 (line 453) | static inline VmathMatrix4 vmathM4AffineInverse_V( VmathMatrix4 mat )
function VmathMatrix4 (line 460) | static inline VmathMatrix4 vmathM4OrthoInverse_V( VmathMatrix4 mat )
function vmathM4Determinant_V (line 467) | static inline float vmathM4Determinant_V( VmathMatrix4 mat )
function VmathMatrix4 (line 472) | static inline VmathMatrix4 vmathM4Add_V( VmathMatrix4 mat0, VmathMatrix4...
function VmathMatrix4 (line 479) | static inline VmathMatrix4 vmathM4Sub_V( VmathMatrix4 mat0, VmathMatrix4...
function VmathMatrix4 (line 486) | static inline VmathMatrix4 vmathM4Neg_V( VmathMatrix4 mat )
function VmathMatrix4 (line 493) | static inline VmathMatrix4 vmathM4AbsPerElem_V( VmathMatrix4 mat )
function VmathMatrix4 (line 500) | static inline VmathMatrix4 vmathM4ScalarMul_V( VmathMatrix4 mat, float s...
function VmathVector4 (line 507) | static inline VmathVector4 vmathM4MulV4_V( VmathMatrix4 mat, VmathVector...
function VmathVector4 (line 514) | static inline VmathVector4 vmathM4MulV3_V( VmathMatrix4 mat, VmathVector...
function VmathVector4 (line 521) | static inline VmathVector4 vmathM4MulP3_V( VmathMatrix4 mat, VmathPoint3...
function VmathMatrix4 (line 528) | static inline VmathMatrix4 vmathM4Mul_V( VmathMatrix4 mat0, VmathMatrix4...
function VmathMatrix4 (line 535) | static inline VmathMatrix4 vmathM4MulT3_V( VmathMatrix4 mat, VmathTransf...
function VmathMatrix4 (line 542) | static inline VmathMatrix4 vmathM4MulPerElem_V( VmathMatrix4 mat0, Vmath...
function VmathMatrix4 (line 549) | static inline VmathMatrix4 vmathM4MakeIdentity_V( )
function vmathM4SetUpper3x3_V (line 556) | static inline void vmathM4SetUpper3x3_V( VmathMatrix4 *result, VmathMatr...
function VmathMatrix3 (line 561) | static inline VmathMatrix3 vmathM4GetUpper3x3_V( VmathMatrix4 mat )
function vmathM4SetTranslation_V (line 568) | static inline void vmathM4SetTranslation_V( VmathMatrix4 *result, VmathV...
function VmathVector3 (line 573) | static inline VmathVector3 vmathM4GetTranslation_V( VmathMatrix4 mat )
function VmathMatrix4 (line 580) | static inline VmathMatrix4 vmathM4MakeRotationX_V( float radians )
function VmathMatrix4 (line 587) | static inline VmathMatrix4 vmathM4MakeRotationY_V( float radians )
function VmathMatrix4 (line 594) | static inline VmathMatrix4 vmathM4MakeRotationZ_V( float radians )
function VmathMatrix4 (line 601) | static inline VmathMatrix4 vmathM4MakeRotationZYX_V( VmathVector3 radian...
function VmathMatrix4 (line 608) | static inline VmathMatrix4 vmathM4MakeRotationAxis_V( float radians, Vma...
function VmathMatrix4 (line 615) | static inline VmathMatrix4 vmathM4MakeRotationQ_V( VmathQuat unitQuat )
function VmathMatrix4 (line 622) | static inline VmathMatrix4 vmathM4MakeScale_V( VmathVector3 scaleVec )
function VmathMatrix4 (line 629) | static inline VmathMatrix4 vmathM4AppendScale_V( VmathMatrix4 mat, Vmath...
function VmathMatrix4 (line 636) | static inline VmathMatrix4 vmathM4PrependScale_V( VmathVector3 scaleVec,...
function VmathMatrix4 (line 643) | static inline VmathMatrix4 vmathM4MakeTranslation_V( VmathVector3 transl...
function VmathMatrix4 (line 650) | static inline VmathMatrix4 vmathM4MakeLookAt_V( VmathPoint3 eyePos, Vmat...
function VmathMatrix4 (line 657) | static inline VmathMatrix4 vmathM4MakePerspective_V( float fovyRadians, ...
function VmathMatrix4 (line 664) | static inline VmathMatrix4 vmathM4MakeFrustum_V( float left, float right...
function VmathMatrix4 (line 671) | static inline VmathMatrix4 vmathM4MakeOrthographic_V( float left, float ...
function VmathMatrix4 (line 678) | static inline VmathMatrix4 vmathM4Select_V( VmathMatrix4 mat0, VmathMatr...
function vmathM4Print_V (line 687) | static inline void vmathM4Print_V( VmathMatrix4 mat )
function vmathM4Prints_V (line 692) | static inline void vmathM4Prints_V( VmathMatrix4 mat, const char *name )
function VmathTransform3 (line 699) | static inline VmathTransform3 vmathT3MakeFromScalar_V( float scalar )
function VmathTransform3 (line 706) | static inline VmathTransform3 vmathT3MakeFromCols_V( VmathVector3 _col0,...
function VmathTransform3 (line 713) | static inline VmathTransform3 vmathT3MakeFromM3V3_V( VmathMatrix3 tfrm, ...
function VmathTransform3 (line 720) | static inline VmathTransform3 vmathT3MakeFromQV3_V( VmathQuat unitQuat, ...
function vmathT3SetCol0_V (line 727) | static inline void vmathT3SetCol0_V( VmathTransform3 *result, VmathVecto...
function vmathT3SetCol1_V (line 732) | static inline void vmathT3SetCol1_V( VmathTransform3 *result, VmathVecto...
function vmathT3SetCol2_V (line 737) | static inline void vmathT3SetCol2_V( VmathTransform3 *result, VmathVecto...
function vmathT3SetCol3_V (line 742) | static inline void vmathT3SetCol3_V( VmathTransform3 *result, VmathVecto...
function vmathT3SetCol_V (line 747) | static inline void vmathT3SetCol_V( VmathTransform3 *result, int col, Vm...
function vmathT3SetRow_V (line 752) | static inline void vmathT3SetRow_V( VmathTransform3 *result, int row, Vm...
function vmathT3SetElem_V (line 757) | static inline void vmathT3SetElem_V( VmathTransform3 *result, int col, i...
function vmathT3GetElem_V (line 762) | static inline float vmathT3GetElem_V( VmathTransform3 tfrm, int col, int...
function VmathVector3 (line 767) | static inline VmathVector3 vmathT3GetCol0_V( VmathTransform3 tfrm )
function VmathVector3 (line 774) | static inline VmathVector3 vmathT3GetCol1_V( VmathTransform3 tfrm )
function VmathVector3 (line 781) | static inline VmathVector3 vmathT3GetCol2_V( VmathTransform3 tfrm )
function VmathVector3 (line 788) | static inline VmathVector3 vmathT3GetCol3_V( VmathTransform3 tfrm )
function VmathVector3 (line 795) | static inline VmathVector3 vmathT3GetCol_V( VmathTransform3 tfrm, int col )
function VmathVector4 (line 802) | static inline VmathVector4 vmathT3GetRow_V( VmathTransform3 tfrm, int row )
function VmathTransform3 (line 809) | static inline VmathTransform3 vmathT3Inverse_V( VmathTransform3 tfrm )
function VmathTransform3 (line 816) | static inline VmathTransform3 vmathT3OrthoInverse_V( VmathTransform3 tfrm )
function VmathTransform3 (line 823) | static inline VmathTransform3 vmathT3AbsPerElem_V( VmathTransform3 tfrm )
function VmathVector3 (line 830) | static inline VmathVector3 vmathT3MulV3_V( VmathTransform3 tfrm, VmathVe...
function VmathPoint3 (line 837) | static inline VmathPoint3 vmathT3MulP3_V( VmathTransform3 tfrm, VmathPoi...
function VmathTransform3 (line 844) | static inline VmathTransform3 vmathT3Mul_V( VmathTransform3 tfrm0, Vmath...
function VmathTransform3 (line 851) | static inline VmathTransform3 vmathT3MulPerElem_V( VmathTransform3 tfrm0...
function VmathTransform3 (line 858) | static inline VmathTransform3 vmathT3MakeIdentity_V( )
function vmathT3SetUpper3x3_V (line 865) | static inline void vmathT3SetUpper3x3_V( VmathTransform3 *result, VmathM...
function VmathMatrix3 (line 870) | static inline VmathMatrix3 vmathT3GetUpper3x3_V( VmathTransform3 tfrm )
function vmathT3SetTranslation_V (line 877) | static inline void vmathT3SetTranslation_V( VmathTransform3 *result, Vma...
function VmathVector3 (line 882) | static inline VmathVector3 vmathT3GetTranslation_V( VmathTransform3 tfrm )
function VmathTransform3 (line 889) | static inline VmathTransform3 vmathT3MakeRotationX_V( float radians )
function VmathTransform3 (line 896) | static inline VmathTransform3 vmathT3MakeRotationY_V( float radians )
function VmathTransform3 (line 903) | static inline VmathTransform3 vmathT3MakeRotationZ_V( float radians )
function VmathTransform3 (line 910) | static inline VmathTransform3 vmathT3MakeRotationZYX_V( VmathVector3 rad...
function VmathTransform3 (line 917) | static inline VmathTransform3 vmathT3MakeRotationAxis_V( float radians, ...
function VmathTransform3 (line 924) | static inline VmathTransform3 vmathT3MakeRotationQ_V( VmathQuat unitQuat )
function VmathTransform3 (line 931) | static inline VmathTransform3 vmathT3MakeScale_V( VmathVector3 scaleVec )
function VmathTransform3 (line 938) | static inline VmathTransform3 vmathT3AppendScale_V( VmathTransform3 tfrm...
function VmathTransform3 (line 945) | static inline VmathTransform3 vmathT3PrependScale_V( VmathVector3 scaleV...
function VmathTransform3 (line 952) | static inline VmathTransform3 vmathT3MakeTranslation_V( VmathVector3 tra...
function VmathTransform3 (line 959) | static inline VmathTransform3 vmathT3Select_V( VmathTransform3 tfrm0, Vm...
function vmathT3Print_V (line 968) | static inline void vmathT3Print_V( VmathTransform3 tfrm )
function vmathT3Prints_V (line 973) | static inline void vmathT3Prints_V( VmathTransform3 tfrm, const char *na...
function VmathQuat (line 980) | static inline VmathQuat vmathQMakeFromM3_V( VmathMatrix3 tfrm )
function VmathMatrix3 (line 987) | static inline VmathMatrix3 vmathV3Outer_V( VmathVector3 tfrm0, VmathVect...
function VmathMatrix4 (line 994) | static inline VmathMatrix4 vmathV4Outer_V( VmathVector4 tfrm0, VmathVect...
function VmathVector3 (line 1001) | static inline VmathVector3 vmathV3RowMul_V( VmathVector3 vec, VmathMatri...
function VmathMatrix3 (line 1008) | static inline VmathMatrix3 vmathV3CrossMatrix_V( VmathVector3 vec )
function VmathMatrix3 (line 1015) | static inline VmathMatrix3 vmathV3CrossMatrixMul_V( VmathVector3 vec, Vm...
FILE: samples/vectormath/ppu/c/mat_soa.h
function vmathSoaM3Copy (line 45) | static inline void vmathSoaM3Copy( VmathSoaMatrix3 *result, const VmathS...
function vmathSoaM3MakeFromScalar (line 52) | static inline void vmathSoaM3MakeFromScalar( VmathSoaMatrix3 *result, ve...
function vmathSoaM3MakeFromQ (line 59) | static inline void vmathSoaM3MakeFromQ( VmathSoaMatrix3 *result, const V...
function vmathSoaM3MakeFromCols (line 83) | static inline void vmathSoaM3MakeFromCols( VmathSoaMatrix3 *result, cons...
function vmathSoaM3MakeFromAos (line 90) | static inline void vmathSoaM3MakeFromAos( VmathSoaMatrix3 *result, const...
function vmathSoaM3MakeFrom4Aos (line 97) | static inline void vmathSoaM3MakeFrom4Aos( VmathSoaMatrix3 *result, cons...
function vmathSoaM3Get4Aos (line 104) | static inline void vmathSoaM3Get4Aos( const VmathSoaMatrix3 *mat, VmathM...
function vmathSoaM3SetCol0 (line 111) | static inline void vmathSoaM3SetCol0( VmathSoaMatrix3 *result, const Vma...
function vmathSoaM3SetCol1 (line 116) | static inline void vmathSoaM3SetCol1( VmathSoaMatrix3 *result, const Vma...
function vmathSoaM3SetCol2 (line 121) | static inline void vmathSoaM3SetCol2( VmathSoaMatrix3 *result, const Vma...
function vmathSoaM3SetCol (line 126) | static inline void vmathSoaM3SetCol( VmathSoaMatrix3 *result, int col, c...
function vmathSoaM3SetRow (line 131) | static inline void vmathSoaM3SetRow( VmathSoaMatrix3 *result, int row, c...
function vmathSoaM3SetElem (line 138) | static inline void vmathSoaM3SetElem( VmathSoaMatrix3 *result, int col, ...
function vec_float4 (line 146) | static inline vec_float4 vmathSoaM3GetElem( const VmathSoaMatrix3 *mat, ...
function vmathSoaM3GetCol0 (line 153) | static inline void vmathSoaM3GetCol0( VmathSoaVector3 *result, const Vma...
function vmathSoaM3GetCol1 (line 158) | static inline void vmathSoaM3GetCol1( VmathSoaVector3 *result, const Vma...
function vmathSoaM3GetCol2 (line 163) | static inline void vmathSoaM3GetCol2( VmathSoaVector3 *result, const Vma...
function vmathSoaM3GetCol (line 168) | static inline void vmathSoaM3GetCol( VmathSoaVector3 *result, const Vmat...
function vmathSoaM3GetRow (line 173) | static inline void vmathSoaM3GetRow( VmathSoaVector3 *result, const Vmat...
function vmathSoaM3Transpose (line 178) | static inline void vmathSoaM3Transpose( VmathSoaMatrix3 *result, const V...
function vmathSoaM3Inverse (line 187) | static inline void vmathSoaM3Inverse( VmathSoaMatrix3 *result, const Vma...
function vec_float4 (line 200) | static inline vec_float4 vmathSoaM3Determinant( const VmathSoaMatrix3 *m...
function vmathSoaM3Add (line 207) | static inline void vmathSoaM3Add( VmathSoaMatrix3 *result, const VmathSo...
function vmathSoaM3Sub (line 214) | static inline void vmathSoaM3Sub( VmathSoaMatrix3 *result, const VmathSo...
function vmathSoaM3Neg (line 221) | static inline void vmathSoaM3Neg( VmathSoaMatrix3 *result, const VmathSo...
function vmathSoaM3AbsPerElem (line 228) | static inline void vmathSoaM3AbsPerElem( VmathSoaMatrix3 *result, const ...
function vmathSoaM3ScalarMul (line 235) | static inline void vmathSoaM3ScalarMul( VmathSoaMatrix3 *result, const V...
function vmathSoaM3MulV3 (line 242) | static inline void vmathSoaM3MulV3( VmathSoaVector3 *result, const Vmath...
function vmathSoaM3Mul (line 251) | static inline void vmathSoaM3Mul( VmathSoaMatrix3 *result, const VmathSo...
function vmathSoaM3MulPerElem (line 260) | static inline void vmathSoaM3MulPerElem( VmathSoaMatrix3 *result, const ...
function vmathSoaM3MakeIdentity (line 267) | static inline void vmathSoaM3MakeIdentity( VmathSoaMatrix3 *result )
function vmathSoaM3MakeRotationX (line 274) | static inline void vmathSoaM3MakeRotationX( VmathSoaMatrix3 *result, vec...
function vmathSoaM3MakeRotationY (line 283) | static inline void vmathSoaM3MakeRotationY( VmathSoaMatrix3 *result, vec...
function vmathSoaM3MakeRotationZ (line 292) | static inline void vmathSoaM3MakeRotationZ( VmathSoaMatrix3 *result, vec...
function vmathSoaM3MakeRotationZYX (line 301) | static inline void vmathSoaM3MakeRotationZYX( VmathSoaMatrix3 *result, c...
function vmathSoaM3MakeRotationAxis (line 314) | static inline void vmathSoaM3MakeRotationAxis( VmathSoaMatrix3 *result, ...
function vmathSoaM3MakeRotationQ (line 330) | static inline void vmathSoaM3MakeRotationQ( VmathSoaMatrix3 *result, con...
function vmathSoaM3MakeScale (line 335) | static inline void vmathSoaM3MakeScale( VmathSoaMatrix3 *result, const V...
function vmathSoaM3AppendScale (line 342) | static inline void vmathSoaM3AppendScale( VmathSoaMatrix3 *result, const...
function vmathSoaM3PrependScale (line 349) | static inline void vmathSoaM3PrependScale( VmathSoaMatrix3 *result, cons...
function vmathSoaM3Select (line 356) | static inline void vmathSoaM3Select( VmathSoaMatrix3 *result, const Vmat...
function vmathSoaM3Print (line 365) | static inline void vmathSoaM3Print( const VmathSoaMatrix3 *mat )
function vmathSoaM3Prints (line 379) | static inline void vmathSoaM3Prints( const VmathSoaMatrix3 *mat, const c...
function vmathSoaM4Copy (line 387) | static inline void vmathSoaM4Copy( VmathSoaMatrix4 *result, const VmathS...
function vmathSoaM4MakeFromScalar (line 395) | static inline void vmathSoaM4MakeFromScalar( VmathSoaMatrix4 *result, ve...
function vmathSoaM4MakeFromT3 (line 403) | static inline void vmathSoaM4MakeFromT3( VmathSoaMatrix4 *result, const ...
function vmathSoaM4MakeFromCols (line 411) | static inline void vmathSoaM4MakeFromCols( VmathSoaMatrix4 *result, cons...
function vmathSoaM4MakeFromM3V3 (line 419) | static inline void vmathSoaM4MakeFromM3V3( VmathSoaMatrix4 *result, cons...
function vmathSoaM4MakeFromQV3 (line 427) | static inline void vmathSoaM4MakeFromQV3( VmathSoaMatrix4 *result, const...
function vmathSoaM4MakeFromAos (line 437) | static inline void vmathSoaM4MakeFromAos( VmathSoaMatrix4 *result, const...
function vmathSoaM4MakeFrom4Aos (line 445) | static inline void vmathSoaM4MakeFrom4Aos( VmathSoaMatrix4 *result, cons...
function vmathSoaM4Get4Aos (line 453) | static inline void vmathSoaM4Get4Aos( const VmathSoaMatrix4 *mat, VmathM...
function vmathSoaM4SetCol0 (line 461) | static inline void vmathSoaM4SetCol0( VmathSoaMatrix4 *result, const Vma...
function vmathSoaM4SetCol1 (line 466) | static inline void vmathSoaM4SetCol1( VmathSoaMatrix4 *result, const Vma...
function vmathSoaM4SetCol2 (line 471) | static inline void vmathSoaM4SetCol2( VmathSoaMatrix4 *result, const Vma...
function vmathSoaM4SetCol3 (line 476) | static inline void vmathSoaM4SetCol3( VmathSoaMatrix4 *result, const Vma...
function vmathSoaM4SetCol (line 481) | static inline void vmathSoaM4SetCol( VmathSoaMatrix4 *result, int col, c...
function vmathSoaM4SetRow (line 486) | static inline void vmathSoaM4SetRow( VmathSoaMatrix4 *result, int row, c...
function vmathSoaM4SetElem (line 494) | static inline void vmathSoaM4SetElem( VmathSoaMatrix4 *result, int col, ...
function vec_float4 (line 502) | static inline vec_float4 vmathSoaM4GetElem( const VmathSoaMatrix4 *mat, ...
function vmathSoaM4GetCol0 (line 509) | static inline void vmathSoaM4GetCol0( VmathSoaVector4 *result, const Vma...
function vmathSoaM4GetCol1 (line 514) | static inline void vmathSoaM4GetCol1( VmathSoaVector4 *result, const Vma...
function vmathSoaM4GetCol2 (line 519) | static inline void vmathSoaM4GetCol2( VmathSoaVector4 *result, const Vma...
function vmathSoaM4GetCol3 (line 524) | static inline void vmathSoaM4GetCol3( VmathSoaVector4 *result, const Vma...
function vmathSoaM4GetCol (line 529) | static inline void vmathSoaM4GetCol( VmathSoaVector4 *result, const Vmat...
function vmathSoaM4GetRow (line 534) | static inline void vmathSoaM4GetRow( VmathSoaVector4 *result, const Vmat...
function vmathSoaM4Transpose (line 539) | static inline void vmathSoaM4Transpose( VmathSoaMatrix4 *result, const V...
function vmathSoaM4Inverse (line 549) | static inline void vmathSoaM4Inverse( VmathSoaMatrix4 *result, const Vma...
function vmathSoaM4AffineInverse (line 616) | static inline void vmathSoaM4AffineInverse( VmathSoaMatrix4 *result, con...
function vmathSoaM4OrthoInverse (line 632) | static inline void vmathSoaM4OrthoInverse( VmathSoaMatrix4 *result, cons...
function vec_float4 (line 648) | static inline vec_float4 vmathSoaM4Determinant( const VmathSoaMatrix4 *m...
function vmathSoaM4Add (line 680) | static inline void vmathSoaM4Add( VmathSoaMatrix4 *result, const VmathSo...
function vmathSoaM4Sub (line 688) | static inline void vmathSoaM4Sub( VmathSoaMatrix4 *result, const VmathSo...
function vmathSoaM4Neg (line 696) | static inline void vmathSoaM4Neg( VmathSoaMatrix4 *result, const VmathSo...
function vmathSoaM4AbsPerElem (line 704) | static inline void vmathSoaM4AbsPerElem( VmathSoaMatrix4 *result, const ...
function vmathSoaM4ScalarMul (line 712) | static inline void vmathSoaM4ScalarMul( VmathSoaMatrix4 *result, const V...
function vmathSoaM4MulV4 (line 720) | static inline void vmathSoaM4MulV4( VmathSoaVector4 *result, const Vmath...
function vmathSoaM4MulV3 (line 730) | static inline void vmathSoaM4MulV3( VmathSoaVector4 *result, const Vmath...
function vmathSoaM4MulP3 (line 738) | static inline void vmathSoaM4MulP3( VmathSoaVector4 *result, const Vmath...
function vmathSoaM4Mul (line 746) | static inline void vmathSoaM4Mul( VmathSoaMatrix4 *result, const VmathSo...
function vmathSoaM4MulT3 (line 756) | static inline void vmathSoaM4MulT3( VmathSoaMatrix4 *result, const Vmath...
function vmathSoaM4MulPerElem (line 768) | static inline void vmathSoaM4MulPerElem( VmathSoaMatrix4 *result, const ...
function vmathSoaM4MakeIdentity (line 776) | static inline void vmathSoaM4MakeIdentity( VmathSoaMatrix4 *result )
function vmathSoaM4SetUpper3x3 (line 784) | static inline void vmathSoaM4SetUpper3x3( VmathSoaMatrix4 *result, const...
function vmathSoaM4GetUpper3x3 (line 791) | static inline void vmathSoaM4GetUpper3x3( VmathSoaMatrix3 *result, const...
function vmathSoaM4SetTranslation (line 798) | static inline void vmathSoaM4SetTranslation( VmathSoaMatrix4 *result, co...
function vmathSoaM4GetTranslation (line 803) | static inline void vmathSoaM4GetTranslation( VmathSoaVector3 *result, co...
function vmathSoaM4MakeRotationX (line 808) | static inline void vmathSoaM4MakeRotationX( VmathSoaMatrix4 *result, vec...
function vmathSoaM4MakeRotationY (line 818) | static inline void vmathSoaM4MakeRotationY( VmathSoaMatrix4 *result, vec...
function vmathSoaM4MakeRotationZ (line 828) | static inline void vmathSoaM4MakeRotationZ( VmathSoaMatrix4 *result, vec...
function vmathSoaM4MakeRotationZYX (line 838) | static inline void vmathSoaM4MakeRotationZYX( VmathSoaMatrix4 *result, c...
function vmathSoaM4MakeRotationAxis (line 852) | static inline void vmathSoaM4MakeRotationAxis( VmathSoaMatrix4 *result, ...
function vmathSoaM4MakeRotationQ (line 869) | static inline void vmathSoaM4MakeRotationQ( VmathSoaMatrix4 *result, con...
function vmathSoaM4MakeScale (line 876) | static inline void vmathSoaM4MakeScale( VmathSoaMatrix4 *result, const V...
function vmathSoaM4AppendScale (line 884) | static inline void vmathSoaM4AppendScale( VmathSoaMatrix4 *result, const...
function vmathSoaM4PrependScale (line 892) | static inline void vmathSoaM4PrependScale( VmathSoaMatrix4 *result, cons...
function vmathSoaM4MakeTranslation (line 902) | static inline void vmathSoaM4MakeTranslation( VmathSoaMatrix4 *result, c...
function vmathSoaM4MakeLookAt (line 910) | static inline void vmathSoaM4MakeLookAt( VmathSoaMatrix4 *result, const ...
function vmathSoaM4MakePerspective (line 929) | static inline void vmathSoaM4MakePerspective( VmathSoaMatrix4 *result, v...
function vmathSoaM4MakeFrustum (line 940) | static inline void vmathSoaM4MakeFrustum( VmathSoaMatrix4 *result, vec_f...
function vmathSoaM4MakeOrthographic (line 956) | static inline void vmathSoaM4MakeOrthographic( VmathSoaMatrix4 *result, ...
function vmathSoaM4Select (line 971) | static inline void vmathSoaM4Select( VmathSoaMatrix4 *result, const Vmat...
function vmathSoaM4Print (line 981) | static inline void vmathSoaM4Print( const VmathSoaMatrix4 *mat )
function vmathSoaM4Prints (line 995) | static inline void vmathSoaM4Prints( const VmathSoaMatrix4 *mat, const c...
function vmathSoaT3Copy (line 1003) | static inline void vmathSoaT3Copy( VmathSoaTransform3 *result, const Vma...
function vmathSoaT3MakeFromScalar (line 1011) | static inline void vmathSoaT3MakeFromScalar( VmathSoaTransform3 *result,...
function vmathSoaT3MakeFromCols (line 1019) | static inline void vmathSoaT3MakeFromCols( VmathSoaTransform3 *result, c...
function vmathSoaT3MakeFromM3V3 (line 1027) | static inline void vmathSoaT3MakeFromM3V3( VmathSoaTransform3 *result, c...
function vmathSoaT3MakeFromQV3 (line 1033) | static inline void vmathSoaT3MakeFromQV3( VmathSoaTransform3 *result, co...
function vmathSoaT3MakeFromAos (line 1041) | static inline void vmathSoaT3MakeFromAos( VmathSoaTransform3 *result, co...
function vmathSoaT3MakeFrom4Aos (line 1049) | static inline void vmathSoaT3MakeFrom4Aos( VmathSoaTransform3 *result, c...
function vmathSoaT3Get4Aos (line 1057) | static inline void vmathSoaT3Get4Aos( const VmathSoaTransform3 *tfrm, Vm...
function vmathSoaT3SetCol0 (line 1065) | static inline void vmathSoaT3SetCol0( VmathSoaTransform3 *result, const ...
function vmathSoaT3SetCol1 (line 1070) | static inline void vmathSoaT3SetCol1( VmathSoaTransform3 *result, const ...
function vmathSoaT3SetCol2 (line 1075) | static inline void vmathSoaT3SetCol2( VmathSoaTransform3 *result, const ...
function vmathSoaT3SetCol3 (line 1080) | static inline void vmathSoaT3SetCol3( VmathSoaTransform3 *result, const ...
function vmathSoaT3SetCol (line 1085) | static inline void vmathSoaT3SetCol( VmathSoaTransform3 *result, int col...
function vmathSoaT3SetRow (line 1090) | static inline void vmathSoaT3SetRow( VmathSoaTransform3 *result, int row...
function vmathSoaT3SetElem (line 1098) | static inline void vmathSoaT3SetElem( VmathSoaTransform3 *result, int co...
function vec_float4 (line 1106) | static inline vec_float4 vmathSoaT3GetElem( const VmathSoaTransform3 *tf...
function vmathSoaT3GetCol0 (line 1113) | static inline void vmathSoaT3GetCol0( VmathSoaVector3 *result, const Vma...
function vmathSoaT3GetCol1 (line 1118) | static inline void vmathSoaT3GetCol1( VmathSoaVector3 *result, const Vma...
function vmathSoaT3GetCol2 (line 1123) | static inline void vmathSoaT3GetCol2( VmathSoaVector3 *result, const Vma...
function vmathSoaT3GetCol3 (line 1128) | static inline void vmathSoaT3GetCol3( VmathSoaVector3 *result, const Vma...
function vmathSoaT3GetCol (line 1133) | static inline void vmathSoaT3GetCol( VmathSoaVector3 *result, const Vmat...
function vmathSoaT3GetRow (line 1138) | static inline void vmathSoaT3GetRow( VmathSoaVector4 *result, const Vmat...
function vmathSoaT3Inverse (line 1143) | static inline void vmathSoaT3Inverse( VmathSoaTransform3 *result, const ...
function vmathSoaT3OrthoInverse (line 1166) | static inline void vmathSoaT3OrthoInverse( VmathSoaTransform3 *result, c...
function vmathSoaT3AbsPerElem (line 1184) | static inline void vmathSoaT3AbsPerElem( VmathSoaTransform3 *result, con...
function vmathSoaT3MulV3 (line 1192) | static inline void vmathSoaT3MulV3( VmathSoaVector3 *result, const Vmath...
function vmathSoaT3MulP3 (line 1201) | static inline void vmathSoaT3MulP3( VmathSoaPoint3 *result, const VmathS...
function vmathSoaT3Mul (line 1210) | static inline void vmathSoaT3Mul( VmathSoaTransform3 *result, const Vmat...
function vmathSoaT3MulPerElem (line 1223) | static inline void vmathSoaT3MulPerElem( VmathSoaTransform3 *result, con...
function vmathSoaT3MakeIdentity (line 1231) | static inline void vmathSoaT3MakeIdentity( VmathSoaTransform3 *result )
function vmathSoaT3SetUpper3x3 (line 1239) | static inline void vmathSoaT3SetUpper3x3( VmathSoaTransform3 *result, co...
function vmathSoaT3GetUpper3x3 (line 1246) | static inline void vmathSoaT3GetUpper3x3( VmathSoaMatrix3 *result, const...
function vmathSoaT3SetTranslation (line 1251) | static inline void vmathSoaT3SetTranslation( VmathSoaTransform3 *result,...
function vmathSoaT3GetTranslation (line 1256) | static inline void vmathSoaT3GetTranslation( VmathSoaVector3 *result, co...
function vmathSoaT3MakeRotationX (line 1261) | static inline void vmathSoaT3MakeRotationX( VmathSoaTransform3 *result, ...
function vmathSoaT3MakeRotationY (line 1271) | static inline void vmathSoaT3MakeRotationY( VmathSoaTransform3 *result, ...
function vmathSoaT3MakeRotationZ (line 1281) | static inline void vmathSoaT3MakeRotationZ( VmathSoaTransform3 *result, ...
function vmathSoaT3MakeRotationZYX (line 1291) | static inline void vmathSoaT3MakeRotationZYX( VmathSoaTransform3 *result...
function vmathSoaT3MakeRotationAxis (line 1305) | static inline void vmathSoaT3MakeRotationAxis( VmathSoaTransform3 *resul...
function vmathSoaT3MakeRotationQ (line 1314) | static inline void vmathSoaT3MakeRotationQ( VmathSoaTransform3 *result, ...
function vmathSoaT3MakeScale (line 1323) | static inline void vmathSoaT3MakeScale( VmathSoaTransform3 *result, cons...
function vmathSoaT3AppendScale (line 1331) | static inline void vmathSoaT3AppendScale( VmathSoaTransform3 *result, co...
function vmathSoaT3PrependScale (line 1339) | static inline void vmathSoaT3PrependScale( VmathSoaTransform3 *result, c...
function vmathSoaT3MakeTranslation (line 1347) | static inline void vmathSoaT3MakeTranslation( VmathSoaTransform3 *result...
function vmathSoaT3Select (line 1355) | static inline void vmathSoaT3Select( VmathSoaTransform3 *result, const V...
function vmathSoaT3Print (line 1365) | static inline void vmathSoaT3Print( const VmathSoaTransform3 *tfrm )
function vmathSoaT3Prints (line 1379) | static inline void vmathSoaT3Prints( const VmathSoaTransform3 *tfrm, con...
function vmathSoaQMakeFromM3 (line 1387) | static inline void vmathSoaQMakeFromM3( VmathSoaQuat *result, const Vmat...
function vmathSoaV3Outer (line 1449) | static inline void vmathSoaV3Outer( VmathSoaMatrix3 *result, const Vmath...
function vmathSoaV4Outer (line 1456) | static inline void vmathSoaV4Outer( VmathSoaMatrix4 *result, const Vmath...
function vmathSoaV3RowMul (line 1464) | static inline void vmathSoaV3RowMul( VmathSoaVector3 *result, const Vmat...
function vmathSoaV3CrossMatrix (line 1473) | static inline void vmathSoaV3CrossMatrix( VmathSoaMatrix3 *result, const...
function vmathSoaV3CrossMatrixMul (line 1480) | static inline void vmathSoaV3CrossMatrixMul( VmathSoaMatrix3 *result, co...
FILE: samples/vectormath/ppu/c/mat_soa_v.h
function VmathSoaMatrix3 (line 45) | static inline VmathSoaMatrix3 vmathSoaM3MakeFromScalar_V( vec_float4 sca...
function VmathSoaMatrix3 (line 52) | static inline VmathSoaMatrix3 vmathSoaM3MakeFromQ_V( VmathSoaQuat unitQu...
function VmathSoaMatrix3 (line 59) | static inline VmathSoaMatrix3 vmathSoaM3MakeFromCols_V( VmathSoaVector3 ...
function VmathSoaMatrix3 (line 66) | static inline VmathSoaMatrix3 vmathSoaM3MakeFromAos_V( VmathMatrix3 mat )
function VmathSoaMatrix3 (line 73) | static inline VmathSoaMatrix3 vmathSoaM3MakeFrom4Aos_V( VmathMatrix3 mat...
function vmathSoaM3Get4Aos_V (line 80) | static inline void vmathSoaM3Get4Aos_V( VmathSoaMatrix3 mat, VmathMatrix...
function vmathSoaM3SetCol0_V (line 85) | static inline void vmathSoaM3SetCol0_V( VmathSoaMatrix3 *result, VmathSo...
function vmathSoaM3SetCol1_V (line 90) | static inline void vmathSoaM3SetCol1_V( VmathSoaMatrix3 *result, VmathSo...
function vmathSoaM3SetCol2_V (line 95) | static inline void vmathSoaM3SetCol2_V( VmathSoaMatrix3 *result, VmathSo...
function vmathSoaM3SetCol_V (line 100) | static inline void vmathSoaM3SetCol_V( VmathSoaMatrix3 *result, int col,...
function vmathSoaM3SetRow_V (line 105) | static inline void vmathSoaM3SetRow_V( VmathSoaMatrix3 *result, int row,...
function vmathSoaM3SetElem_V (line 110) | static inline void vmathSoaM3SetElem_V( VmathSoaMatrix3 *result, int col...
function vec_float4 (line 115) | static inline vec_float4 vmathSoaM3GetElem_V( VmathSoaMatrix3 mat, int c...
function VmathSoaVector3 (line 120) | static inline VmathSoaVector3 vmathSoaM3GetCol0_V( VmathSoaMatrix3 mat )
function VmathSoaVector3 (line 127) | static inline VmathSoaVector3 vmathSoaM3GetCol1_V( VmathSoaMatrix3 mat )
function VmathSoaVector3 (line 134) | static inline VmathSoaVector3 vmathSoaM3GetCol2_V( VmathSoaMatrix3 mat )
function VmathSoaVector3 (line 141) | static inline VmathSoaVector3 vmathSoaM3GetCol_V( VmathSoaMatrix3 mat, i...
function VmathSoaVector3 (line 148) | static inline VmathSoaVector3 vmathSoaM3GetRow_V( VmathSoaMatrix3 mat, i...
function VmathSoaMatrix3 (line 155) | static inline VmathSoaMatrix3 vmathSoaM3Transpose_V( VmathSoaMatrix3 mat )
function VmathSoaMatrix3 (line 162) | static inline VmathSoaMatrix3 vmathSoaM3Inverse_V( VmathSoaMatrix3 mat )
function vec_float4 (line 169) | static inline vec_float4 vmathSoaM3Determinant_V( VmathSoaMatrix3 mat )
function VmathSoaMatrix3 (line 174) | static inline VmathSoaMatrix3 vmathSoaM3Add_V( VmathSoaMatrix3 mat0, Vma...
function VmathSoaMatrix3 (line 181) | static inline VmathSoaMatrix3 vmathSoaM3Sub_V( VmathSoaMatrix3 mat0, Vma...
function VmathSoaMatrix3 (line 188) | static inline VmathSoaMatrix3 vmathSoaM3Neg_V( VmathSoaMatrix3 mat )
function VmathSoaMatrix3 (line 195) | static inline VmathSoaMatrix3 vmathSoaM3AbsPerElem_V( VmathSoaMatrix3 mat )
function VmathSoaMatrix3 (line 202) | static inline VmathSoaMatrix3 vmathSoaM3ScalarMul_V( VmathSoaMatrix3 mat...
function VmathSoaVector3 (line 209) | static inline VmathSoaVector3 vmathSoaM3MulV3_V( VmathSoaMatrix3 mat, Vm...
function VmathSoaMatrix3 (line 216) | static inline VmathSoaMatrix3 vmathSoaM3Mul_V( VmathSoaMatrix3 mat0, Vma...
function VmathSoaMatrix3 (line 223) | static inline VmathSoaMatrix3 vmathSoaM3MulPerElem_V( VmathSoaMatrix3 ma...
function VmathSoaMatrix3 (line 230) | static inline VmathSoaMatrix3 vmathSoaM3MakeIdentity_V( )
function VmathSoaMatrix3 (line 237) | static inline VmathSoaMatrix3 vmathSoaM3MakeRotationX_V( vec_float4 radi...
function VmathSoaMatrix3 (line 244) | static inline VmathSoaMatrix3 vmathSoaM3MakeRotationY_V( vec_float4 radi...
function VmathSoaMatrix3 (line 251) | static inline VmathSoaMatrix3 vmathSoaM3MakeRotationZ_V( vec_float4 radi...
function VmathSoaMatrix3 (line 258) | static inline VmathSoaMatrix3 vmathSoaM3MakeRotationZYX_V( VmathSoaVecto...
function VmathSoaMatrix3 (line 265) | static inline VmathSoaMatrix3 vmathSoaM3MakeRotationAxis_V( vec_float4 r...
function VmathSoaMatrix3 (line 272) | static inline VmathSoaMatrix3 vmathSoaM3MakeRotationQ_V( VmathSoaQuat un...
function VmathSoaMatrix3 (line 279) | static inline VmathSoaMatrix3 vmathSoaM3MakeScale_V( VmathSoaVector3 sca...
function VmathSoaMatrix3 (line 286) | static inline VmathSoaMatrix3 vmathSoaM3AppendScale_V( VmathSoaMatrix3 m...
function VmathSoaMatrix3 (line 293) | static inline VmathSoaMatrix3 vmathSoaM3PrependScale_V( VmathSoaVector3 ...
function VmathSoaMatrix3 (line 300) | static inline VmathSoaMatrix3 vmathSoaM3Select_V( VmathSoaMatrix3 mat0, ...
function vmathSoaM3Print_V (line 309) | static inline void vmathSoaM3Print_V( VmathSoaMatrix3 mat )
function vmathSoaM3Prints_V (line 314) | static inline void vmathSoaM3Prints_V( VmathSoaMatrix3 mat, const char *...
function VmathSoaMatrix4 (line 321) | static inline VmathSoaMatrix4 vmathSoaM4MakeFromScalar_V( vec_float4 sca...
function VmathSoaMatrix4 (line 328) | static inline VmathSoaMatrix4 vmathSoaM4MakeFromT3_V( VmathSoaTransform3...
function VmathSoaMatrix4 (line 335) | static inline VmathSoaMatrix4 vmathSoaM4MakeFromCols_V( VmathSoaVector4 ...
function VmathSoaMatrix4 (line 342) | static inline VmathSoaMatrix4 vmathSoaM4MakeFromM3V3_V( VmathSoaMatrix3 ...
function VmathSoaMatrix4 (line 349) | static inline VmathSoaMatrix4 vmathSoaM4MakeFromQV3_V( VmathSoaQuat unit...
function VmathSoaMatrix4 (line 356) | static inline VmathSoaMatrix4 vmathSoaM4MakeFromAos_V( VmathMatrix4 mat )
function VmathSoaMatrix4 (line 363) | static inline VmathSoaMatrix4 vmathSoaM4MakeFrom4Aos_V( VmathMatrix4 mat...
function vmathSoaM4Get4Aos_V (line 370) | static inline void vmathSoaM4Get4Aos_V( VmathSoaMatrix4 mat, VmathMatrix...
function vmathSoaM4SetCol0_V (line 375) | static inline void vmathSoaM4SetCol0_V( VmathSoaMatrix4 *result, VmathSo...
function vmathSoaM4SetCol1_V (line 380) | static inline void vmathSoaM4SetCol1_V( VmathSoaMatrix4 *result, VmathSo...
function vmathSoaM4SetCol2_V (line 385) | static inline void vmathSoaM4SetCol2_V( VmathSoaMatrix4 *result, VmathSo...
function vmathSoaM4SetCol3_V (line 390) | static inline void vmathSoaM4SetCol3_V( VmathSoaMatrix4 *result, VmathSo...
function vmathSoaM4SetCol_V (line 395) | static inline void vmathSoaM4SetCol_V( VmathSoaMatrix4 *result, int col,...
function vmathSoaM4SetRow_V (line 400) | static inline void vmathSoaM4SetRow_V( VmathSoaMatrix4 *result, int row,...
function vmathSoaM4SetElem_V (line 405) | static inline void vmathSoaM4SetElem_V( VmathSoaMatrix4 *result, int col...
function vec_float4 (line 410) | static inline vec_float4 vmathSoaM4GetElem_V( VmathSoaMatrix4 mat, int c...
function VmathSoaVector4 (line 415) | static inline VmathSoaVector4 vmathSoaM4GetCol0_V( VmathSoaMatrix4 mat )
function VmathSoaVector4 (line 422) | static inline VmathSoaVector4 vmathSoaM4GetCol1_V( VmathSoaMatrix4 mat )
function VmathSoaVector4 (line 429) | static inline VmathSoaVector4 vmathSoaM4GetCol2_V( VmathSoaMatrix4 mat )
function VmathSoaVector4 (line 436) | static inline VmathSoaVector4 vmathSoaM4GetCol3_V( VmathSoaMatrix4 mat )
function VmathSoaVector4 (line 443) | static inline VmathSoaVector4 vmathSoaM4GetCol_V( VmathSoaMatrix4 mat, i...
function VmathSoaVector4 (line 450) | static inline VmathSoaVector4 vmathSoaM4GetRow_V( VmathSoaMatrix4 mat, i...
function VmathSoaMatrix4 (line 457) | static inline VmathSoaMatrix4 vmathSoaM4Transpose_V( VmathSoaMatrix4 mat )
function VmathSoaMatrix4 (line 464) | static inline VmathSoaMatrix4 vmathSoaM4Inverse_V( VmathSoaMatrix4 mat )
function VmathSoaMatrix4 (line 471) | static inline VmathSoaMatrix4 vmathSoaM4AffineInverse_V( VmathSoaMatrix4...
function VmathSoaMatrix4 (line 478) | static inline VmathSoaMatrix4 vmathSoaM4OrthoInverse_V( VmathSoaMatrix4 ...
function vec_float4 (line 485) | static inline vec_float4 vmathSoaM4Determinant_V( VmathSoaMatrix4 mat )
function VmathSoaMatrix4 (line 490) | static inline VmathSoaMatrix4 vmathSoaM4Add_V( VmathSoaMatrix4 mat0, Vma...
function VmathSoaMatrix4 (line 497) | static inline VmathSoaMatrix4 vmathSoaM4Sub_V( VmathSoaMatrix4 mat0, Vma...
function VmathSoaMatrix4 (line 504) | static inline VmathSoaMatrix4 vmathSoaM4Neg_V( VmathSoaMatrix4 mat )
function VmathSoaMatrix4 (line 511) | static inline VmathSoaMatrix4 vmathSoaM4AbsPerElem_V( VmathSoaMatrix4 mat )
function VmathSoaMatrix4 (line 518) | static inline VmathSoaMatrix4 vmathSoaM4ScalarMul_V( VmathSoaMatrix4 mat...
function VmathSoaVector4 (line 525) | static inline VmathSoaVector4 vmathSoaM4MulV4_V( VmathSoaMatrix4 mat, Vm...
function VmathSoaVector4 (line 532) | static inline VmathSoaVector4 vmathSoaM4MulV3_V( VmathSoaMatrix4 mat, Vm...
function VmathSoaVector4 (line 539) | static inline VmathSoaVector4 vmathSoaM4MulP3_V( VmathSoaMatrix4 mat, Vm...
function VmathSoaMatrix4 (line 546) | static inline VmathSoaMatrix4 vmathSoaM4Mul_V( VmathSoaMatrix4 mat0, Vma...
function VmathSoaMatrix4 (line 553) | static inline VmathSoaMatrix4 vmathSoaM4MulT3_V( VmathSoaMatrix4 mat, Vm...
function VmathSoaMatrix4 (line 560) | static inline VmathSoaMatrix4 vmathSoaM4MulPerElem_V( VmathSoaMatrix4 ma...
function VmathSoaMatrix4 (line 567) | static inline VmathSoaMatrix4 vmathSoaM4MakeIdentity_V( )
function vmathSoaM4SetUpper3x3_V (line 574) | static inline void vmathSoaM4SetUpper3x3_V( VmathSoaMatrix4 *result, Vma...
function VmathSoaMatrix3 (line 579) | static inline VmathSoaMatrix3 vmathSoaM4GetUpper3x3_V( VmathSoaMatrix4 m...
function vmathSoaM4SetTranslation_V (line 586) | static inline void vmathSoaM4SetTranslation_V( VmathSoaMatrix4 *result, ...
function VmathSoaVector3 (line 591) | static inline VmathSoaVector3 vmathSoaM4GetTranslation_V( VmathSoaMatrix...
function VmathSoaMatrix4 (line 598) | static inline VmathSoaMatrix4 vmathSoaM4MakeRotationX_V( vec_float4 radi...
function VmathSoaMatrix4 (line 605) | static inline VmathSoaMatrix4 vmathSoaM4MakeRotationY_V( vec_float4 radi...
function VmathSoaMatrix4 (line 612) | static inline VmathSoaMatrix4 vmathSoaM4MakeRotationZ_V( vec_float4 radi...
function VmathSoaMatrix4 (line 619) | static inline VmathSoaMatrix4 vmathSoaM4MakeRotationZYX_V( VmathSoaVecto...
function VmathSoaMatrix4 (line 626) | static inline VmathSoaMatrix4 vmathSoaM4MakeRotationAxis_V( vec_float4 r...
function VmathSoaMatrix4 (line 633) | static inline VmathSoaMatrix4 vmathSoaM4MakeRotationQ_V( VmathSoaQuat un...
function VmathSoaMatrix4 (line 640) | static inline VmathSoaMatrix4 vmathSoaM4MakeScale_V( VmathSoaVector3 sca...
function VmathSoaMatrix4 (line 647) | static inline VmathSoaMatrix4 vmathSoaM4AppendScale_V( VmathSoaMatrix4 m...
function VmathSoaMatrix4 (line 654) | static inline VmathSoaMatrix4 vmathSoaM4PrependScale_V( VmathSoaVector3 ...
function VmathSoaMatrix4 (line 661) | static inline VmathSoaMatrix4 vmathSoaM4MakeTranslation_V( VmathSoaVecto...
function VmathSoaMatrix4 (line 668) | static inline VmathSoaMatrix4 vmathSoaM4MakeLookAt_V( VmathSoaPoint3 eye...
function VmathSoaMatrix4 (line 675) | static inline VmathSoaMatrix4 vmathSoaM4MakePerspective_V( vec_float4 fo...
function VmathSoaMatrix4 (line 682) | static inline VmathSoaMatrix4 vmathSoaM4MakeFrustum_V( vec_float4 left, ...
function VmathSoaMatrix4 (line 689) | static inline VmathSoaMatrix4 vmathSoaM4MakeOrthographic_V( vec_float4 l...
function VmathSoaMatrix4 (line 696) | static inline VmathSoaMatrix4 vmathSoaM4Select_V( VmathSoaMatrix4 mat0, ...
function vmathSoaM4Print_V (line 705) | static inline void vmathSoaM4Print_V( VmathSoaMatrix4 mat )
function vmathSoaM4Prints_V (line 710) | static inline void vmathSoaM4Prints_V( VmathSoaMatrix4 mat, const char *...
function VmathSoaTransform3 (line 717) | static inline VmathSoaTransform3 vmathSoaT3MakeFromScalar_V( vec_float4 ...
function VmathSoaTransform3 (line 724) | static inline VmathSoaTransform3 vmathSoaT3MakeFromCols_V( VmathSoaVecto...
function VmathSoaTransform3 (line 731) | static inline VmathSoaTransform3 vmathSoaT3MakeFromM3V3_V( VmathSoaMatri...
function VmathSoaTransform3 (line 738) | static inline VmathSoaTransform3 vmathSoaT3MakeFromQV3_V( VmathSoaQuat u...
function VmathSoaTransform3 (line 745) | static inline VmathSoaTransform3 vmathSoaT3MakeFromAos_V( VmathTransform...
function VmathSoaTransform3 (line 752) | static inline VmathSoaTransform3 vmathSoaT3MakeFrom4Aos_V( VmathTransfor...
function vmathSoaT3Get4Aos_V (line 759) | static inline void vmathSoaT3Get4Aos_V( VmathSoaTransform3 tfrm, VmathTr...
function vmathSoaT3SetCol0_V (line 764) | static inline void vmathSoaT3SetCol0_V( VmathSoaTransform3 *result, Vmat...
function vmathSoaT3SetCol1_V (line 769) | static inline void vmathSoaT3SetCol1_V( VmathSoaTransform3 *result, Vmat...
function vmathSoaT3SetCol2_V (line 774) | static inline void vmathSoaT3SetCol2_V( VmathSoaTransform3 *result, Vmat...
function vmathSoaT3SetCol3_V (line 779) | static inline void vmathSoaT3SetCol3_V( VmathSoaTransform3 *result, Vmat...
function vmathSoaT3SetCol_V (line 784) | static inline void vmathSoaT3SetCol_V( VmathSoaTransform3 *result, int c...
function vmathSoaT3SetRow_V (line 789) | static inline void vmathSoaT3SetRow_V( VmathSoaTransform3 *result, int r...
function vmathSoaT3SetElem_V (line 794) | static inline void vmathSoaT3SetElem_V( VmathSoaTransform3 *result, int ...
function vec_float4 (line 799) | static inline vec_float4 vmathSoaT3GetElem_V( VmathSoaTransform3 tfrm, i...
function VmathSoaVector3 (line 804) | static inline VmathSoaVector3 vmathSoaT3GetCol0_V( VmathSoaTransform3 tf...
function VmathSoaVector3 (line 811) | static inline VmathSoaVector3 vmathSoaT3GetCol1_V( VmathSoaTransform3 tf...
function VmathSoaVector3 (line 818) | static inline VmathSoaVector3 vmathSoaT3GetCol2_V( VmathSoaTransform3 tf...
function VmathSoaVector3 (line 825) | static inline VmathSoaVector3 vmathSoaT3GetCol3_V( VmathSoaTransform3 tf...
function VmathSoaVector3 (line 832) | static inline VmathSoaVector3 vmathSoaT3GetCol_V( VmathSoaTransform3 tfr...
function VmathSoaVector4 (line 839) | static inline VmathSoaVector4 vmathSoaT3GetRow_V( VmathSoaTransform3 tfr...
function VmathSoaTransform3 (line 846) | static inline VmathSoaTransform3 vmathSoaT3Inverse_V( VmathSoaTransform3...
function VmathSoaTransform3 (line 853) | static inline VmathSoaTransform3 vmathSoaT3OrthoInverse_V( VmathSoaTrans...
function VmathSoaTransform3 (line 860) | static inline VmathSoaTransform3 vmathSoaT3AbsPerElem_V( VmathSoaTransfo...
function VmathSoaVector3 (line 867) | static inline VmathSoaVector3 vmathSoaT3MulV3_V( VmathSoaTransform3 tfrm...
function VmathSoaPoint3 (line 874) | static inline VmathSoaPoint3 vmathSoaT3MulP3_V( VmathSoaTransform3 tfrm,...
function VmathSoaTransform3 (line 881) | static inline VmathSoaTransform3 vmathSoaT3Mul_V( VmathSoaTransform3 tfr...
function VmathSoaTransform3 (line 888) | static inline VmathSoaTransform3 vmathSoaT3MulPerElem_V( VmathSoaTransfo...
function VmathSoaTransform3 (line 895) | static inline VmathSoaTransform3 vmathSoaT3MakeIdentity_V( )
function vmathSoaT3SetUpper3x3_V (line 902) | static inline void vmathSoaT3SetUpper3x3_V( VmathSoaTransform3 *result, ...
function VmathSoaMatrix3 (line 907) | static inline VmathSoaMatrix3 vmathSoaT3GetUpper3x3_V( VmathSoaTransform...
function vmathSoaT3SetTranslation_V (line 914) | static inline void vmathSoaT3SetTranslation_V( VmathSoaTransform3 *resul...
function VmathSoaVector3 (line 919) | static inline VmathSoaVector3 vmathSoaT3GetTranslation_V( VmathSoaTransf...
function VmathSoaTransform3 (line 926) | static inline VmathSoaTransform3 vmathSoaT3MakeRotationX_V( vec_float4 r...
function VmathSoaTransform3 (line 933) | static inline VmathSoaTransform3 vmathSoaT3MakeRotationY_V( vec_float4 r...
function VmathSoaTransform3 (line 940) | static inline VmathSoaTransform3 vmathSoaT3MakeRotationZ_V( vec_float4 r...
function VmathSoaTransform3 (line 947) | static inline VmathSoaTransform3 vmathSoaT3MakeRotationZYX_V( VmathSoaVe...
function VmathSoaTransform3 (line 954) | static inline VmathSoaTransform3 vmathSoaT3MakeRotationAxis_V( vec_float...
function VmathSoaTransform3 (line 961) | static inline VmathSoaTransform3 vmathSoaT3MakeRotationQ_V( VmathSoaQuat...
function VmathSoaTransform3 (line 968) | static inline VmathSoaTransform3 vmathSoaT3MakeScale_V( VmathSoaVector3 ...
function VmathSoaTransform3 (line 975) | static inline VmathSoaTransform3 vmathSoaT3AppendScale_V( VmathSoaTransf...
function VmathSoaTransform3 (line 982) | static inline VmathSoaTransform3 vmathSoaT3PrependScale_V( VmathSoaVecto...
function VmathSoaTransform3 (line 989) | static inline VmathSoaTransform3 vmathSoaT3MakeTranslation_V( VmathSoaVe...
function VmathSoaTransform3 (line 996) | static inline VmathSoaTransform3 vmathSoaT3Select_V( VmathSoaTransform3 ...
function vmathSoaT3Print_V (line 1005) | static inline void vmathSoaT3Print_V( VmathSoaTransform3 tfrm )
function vmathSoaT3Prints_V (line 1010) | static inline void vmathSoaT3Prints_V( VmathSoaTransform3 tfrm, const ch...
function VmathSoaQuat (line 1017) | static inline VmathSoaQuat vmathSoaQMakeFromM3_V( VmathSoaMatrix3 tfrm )
function VmathSoaMatrix3 (line 1024) | static inline VmathSoaMatrix3 vmathSoaV3Outer_V( VmathSoaVector3 tfrm0, ...
function VmathSoaMatrix4 (line 1031) | static inline VmathSoaMatrix4 vmathSoaV4Outer_V( VmathSoaVector4 tfrm0, ...
function VmathSoaVector3 (line 1038) | static inline VmathSoaVector3 vmathSoaV3RowMul_V( VmathSoaVector3 vec, V...
function VmathSoaMatrix3 (line 1045) | static inline VmathSoaMatrix3 vmathSoaV3CrossMatrix_V( VmathSoaVector3 v...
function VmathSoaMatrix3 (line 1052) | static inline VmathSoaMatrix3 vmathSoaV3CrossMatrixMul_V( VmathSoaVector...
FILE: samples/vectormath/ppu/c/quat_aos.h
function vmathQCopy (line 44) | static inline void vmathQCopy( VmathQuat *result, const VmathQuat *quat )
function vmathQMakeFromElems (line 49) | static inline void vmathQMakeFromElems( VmathQuat *result, float _x, flo...
function vmathQMakeFromV3Scalar (line 63) | static inline void vmathQMakeFromV3Scalar( VmathQuat *result, const Vmat...
function vmathQMakeFromV4 (line 69) | static inline void vmathQMakeFromV4( VmathQuat *result, const VmathVecto...
function vmathQMakeFromScalar (line 74) | static inline void vmathQMakeFromScalar( VmathQuat *result, float scalar )
function vmathQMakeFrom128 (line 79) | static inline void vmathQMakeFrom128( VmathQuat *result, vec_float4 vf4 )
function vmathQMakeIdentity (line 84) | static inline void vmathQMakeIdentity( VmathQuat *result )
function vmathQLerp (line 89) | static inline void vmathQLerp( VmathQuat *result, float t, const VmathQu...
function vmathQSlerp (line 97) | static inline void vmathQSlerp( VmathQuat *result, float t, const VmathQ...
function vmathQSquad (line 121) | static inline void vmathQSquad( VmathQuat *result, float t, const VmathQ...
function vec_float4 (line 129) | static inline vec_float4 vmathQGet128( const VmathQuat *quat )
function vmathQSetXYZ (line 134) | static inline void vmathQSetXYZ( VmathQuat *result, const VmathVector3 *...
function vmathQGetXYZ (line 139) | static inline void vmathQGetXYZ( VmathVector3 *result, const VmathQuat *...
function vmathQSetX (line 144) | static inline void vmathQSetX( VmathQuat *result, float _x )
function vmathQGetX (line 149) | static inline float vmathQGetX( const VmathQuat *quat )
function vmathQSetY (line 154) | static inline void vmathQSetY( VmathQuat *result, float _y )
function vmathQGetY (line 159) | static inline float vmathQGetY( const VmathQuat *quat )
function vmathQSetZ (line 164) | static inline void vmathQSetZ( VmathQuat *result, float _z )
function vmathQGetZ (line 169) | static inline float vmathQGetZ( const VmathQuat *quat )
function vmathQSetW (line 174) | static inline void vmathQSetW( VmathQuat *result, float _w )
function vmathQGetW (line 179) | static inline float vmathQGetW( const VmathQuat *quat )
function vmathQSetElem (line 184) | static inline void vmathQSetElem( VmathQuat *result, int idx, float value )
function vmathQGetElem (line 189) | static inline float vmathQGetElem( const VmathQuat *quat, int idx )
function vmathQAdd (line 194) | static inline void vmathQAdd( VmathQuat *result, const VmathQuat *quat0,...
function vmathQSub (line 199) | static inline void vmathQSub( VmathQuat *result, const VmathQuat *quat0,...
function vmathQScalarMul (line 204) | static inline void vmathQScalarMul( VmathQuat *result, const VmathQuat *...
function vmathQScalarDiv (line 209) | static inline void vmathQScalarDiv( VmathQuat *result, const VmathQuat *...
function vmathQNeg (line 214) | static inline void vmathQNeg( VmathQuat *result, const VmathQuat *quat )
function vmathQDot (line 219) | static inline float vmathQDot( const VmathQuat *quat0, const VmathQuat *...
function vmathQNorm (line 225) | static inline float vmathQNorm( const VmathQuat *quat )
function vmathQLength (line 231) | static inline float vmathQLength( const VmathQuat *quat )
function vmathQNormalize (line 236) | static inline void vmathQNormalize( VmathQuat *result, const VmathQuat *...
function vmathQMakeRotationArc (line 242) | static inline void vmathQMakeRotationArc( VmathQuat *result, const Vmath...
function vmathQMakeRotationAxis (line 258) | static inline void vmathQMakeRotationAxis( VmathQuat *result, float radi...
function vmathQMakeRotationX (line 267) | static inline void vmathQMakeRotationX( VmathQuat *result, float radians )
function vmathQMakeRotationY (line 277) | static inline void vmathQMakeRotationY( VmathQuat *result, float radians )
function vmathQMakeRotationZ (line 287) | static inline void vmathQMakeRotationZ( VmathQuat *result, float radians )
function vmathQMul (line 297) | static inline void vmathQMul( VmathQuat *result, const VmathQuat *quat0,...
function vmathQRotate (line 320) | static inline void vmathQRotate( VmathVector3 *result, const VmathQuat *...
function vmathQConj (line 345) | static inline void vmathQConj( VmathQuat *result, const VmathQuat *quat )
function vmathQSelect (line 350) | static inline void vmathQSelect( VmathQuat *result, const VmathQuat *qua...
function vmathQPrint (line 359) | static inline void vmathQPrint( const VmathQuat *quat )
function vmathQPrints (line 366) | static inline void vmathQPrints( const VmathQuat *quat, const char *name )
FILE: samples/vectormath/ppu/c/quat_aos_v.h
function VmathQuat (line 44) | static inline VmathQuat vmathQMakeFromElems_V( float _x, float _y, float...
function VmathQuat (line 51) | static inline VmathQuat vmathQMakeFromV3Scalar_V( VmathVector3 xyz, floa...
function VmathQuat (line 58) | static inline VmathQuat vmathQMakeFromV4_V( VmathVector4 vec )
function VmathQuat (line 65) | static inline VmathQuat vmathQMakeFromScalar_V( float scalar )
function VmathQuat (line 72) | static inline VmathQuat vmathQMakeFrom128_V( vec_float4 vf4 )
function VmathQuat (line 79) | static inline VmathQuat vmathQMakeIdentity_V( )
function VmathQuat (line 86) | static inline VmathQuat vmathQLerp_V( float t, VmathQuat quat0, VmathQua...
function VmathQuat (line 93) | static inline VmathQuat vmathQSlerp_V( float t, VmathQuat unitQuat0, Vma...
function VmathQuat (line 100) | static inline VmathQuat vmathQSquad_V( float t, VmathQuat unitQuat0, Vma...
function vec_float4 (line 107) | static inline vec_float4 vmathQGet128_V( VmathQuat quat )
function vmathQSetXYZ_V (line 112) | static inline void vmathQSetXYZ_V( VmathQuat *result, VmathVector3 vec )
function VmathVector3 (line 117) | static inline VmathVector3 vmathQGetXYZ_V( VmathQuat quat )
function vmathQSetX_V (line 124) | static inline void vmathQSetX_V( VmathQuat *result, float _x )
function vmathQGetX_V (line 129) | static inline float vmathQGetX_V( VmathQuat quat )
function vmathQSetY_V (line 134) | static inline void vmathQSetY_V( VmathQuat *result, float _y )
function vmathQGetY_V (line 139) | static inline float vmathQGetY_V( VmathQuat quat )
function vmathQSetZ_V (line 144) | static inline void vmathQSetZ_V( VmathQuat *result, float _z )
function vmathQGetZ_V (line 149) | static inline float vmathQGetZ_V( VmathQuat quat )
function vmathQSetW_V (line 154) | static inline void vmathQSetW_V( VmathQuat *result, float _w )
function vmathQGetW_V (line 159) | static inline float vmathQGetW_V( VmathQuat quat )
function vmathQSetElem_V (line 164) | static inline void vmathQSetElem_V( VmathQuat *result, int idx, float va...
function vmathQGetElem_V (line 169) | static inline float vmathQGetElem_V( VmathQuat quat, int idx )
function VmathQuat (line 174) | static inline VmathQuat vmathQAdd_V( VmathQuat quat0, VmathQuat quat1 )
function VmathQuat (line 181) | static inline VmathQuat vmathQSub_V( VmathQuat quat0, VmathQuat quat1 )
function VmathQuat (line 188) | static inline VmathQuat vmathQScalarMul_V( VmathQuat quat, float scalar )
function VmathQuat (line 195) | static inline VmathQuat vmathQScalarDiv_V( VmathQuat quat, float scalar )
function VmathQuat (line 202) | static inline VmathQuat vmathQNeg_V( VmathQuat quat )
function vmathQDot_V (line 209) | static inline float vmathQDot_V( VmathQuat quat0, VmathQuat quat1 )
function vmathQNorm_V (line 214) | static inline float vmathQNorm_V( VmathQuat quat )
function vmathQLength_V (line 219) | static inline float vmathQLength_V( VmathQuat quat )
function VmathQuat (line 224) | static inline VmathQuat vmathQNormalize_V( VmathQuat quat )
function VmathQuat (line 231) | static inline VmathQuat vmathQMakeRotationArc_V( VmathVector3 unitVec0, ...
function VmathQuat (line 238) | static inline VmathQuat vmathQMakeRotationAxis_V( float radians, VmathVe...
function VmathQuat (line 245) | static inline VmathQuat vmathQMakeRotationX_V( float radians )
function VmathQuat (line 252) | static inline VmathQuat vmathQMakeRotationY_V( float radians )
function VmathQuat (line 259) | static inline VmathQuat vmathQMakeRotationZ_V( float radians )
function VmathQuat (line 266) | static inline VmathQuat vmathQMul_V( VmathQuat quat0, VmathQuat quat1 )
function VmathVector3 (line 273) | static inline VmathVector3 vmathQRotate_V( VmathQuat quat, VmathVector3 ...
function VmathQuat (line 280) | static inline VmathQuat vmathQConj_V( VmathQuat quat )
function VmathQuat (line 287) | static inline VmathQuat vmathQSelect_V( VmathQuat quat0, VmathQuat quat1...
function vmathQPrint_V (line 296) | static inline void vmathQPrint_V( VmathQuat quat )
function vmathQPrints_V (line 301) | static inline void vmathQPrints_V( VmathQuat quat, const char *name )
FILE: samples/vectormath/ppu/c/quat_soa.h
function vmathSoaQCopy (line 44) | static inline void vmathSoaQCopy( VmathSoaQuat *result, const VmathSoaQu...
function vmathSoaQMakeFromElems (line 52) | static inline void vmathSoaQMakeFromElems( VmathSoaQuat *result, vec_flo...
function vmathSoaQMakeFromV3Scalar (line 60) | static inline void vmathSoaQMakeFromV3Scalar( VmathSoaQuat *result, cons...
function vmathSoaQMakeFromV4 (line 66) | static inline void vmathSoaQMakeFromV4( VmathSoaQuat *result, const Vmat...
function vmathSoaQMakeFromScalar (line 74) | static inline void vmathSoaQMakeFromScalar( VmathSoaQuat *result, vec_fl...
function vmathSoaQMakeFromAos (line 82) | static inline void vmathSoaQMakeFromAos( VmathSoaQuat *result, const Vma...
function vmathSoaQMakeFrom4Aos (line 91) | static inline void vmathSoaQMakeFrom4Aos( VmathSoaQuat *result, const Vm...
function vmathSoaQMakeIdentity (line 104) | static inline void vmathSoaQMakeIdentity( VmathSoaQuat *result )
function vmathSoaQLerp (line 109) | static inline void vmathSoaQLerp( VmathSoaQuat *result, vec_float4 t, co...
function vmathSoaQSlerp (line 117) | static inline void vmathSoaQSlerp( VmathSoaQuat *result, vec_float4 t, c...
function vmathSoaQSquad (line 139) | static inline void vmathSoaQSquad( VmathSoaQuat *result, vec_float4 t, c...
function vmathSoaQGet4Aos (line 147) | static inline void vmathSoaQGet4Aos( const VmathSoaQuat *quat, VmathQuat...
function vmathSoaQSetXYZ (line 160) | static inline void vmathSoaQSetXYZ( VmathSoaQuat *result, const VmathSoa...
function vmathSoaQGetXYZ (line 167) | static inline void vmathSoaQGetXYZ( VmathSoaVector3 *result, const Vmath...
function vmathSoaQSetX (line 172) | static inline void vmathSoaQSetX( VmathSoaQuat *result, vec_float4 _x )
function vec_float4 (line 177) | static inline vec_float4 vmathSoaQGetX( const VmathSoaQuat *quat )
function vmathSoaQSetY (line 182) | static inline void vmathSoaQSetY( VmathSoaQuat *result, vec_float4 _y )
function vec_float4 (line 187) | static inline vec_float4 vmathSoaQGetY( const VmathSoaQuat *quat )
function vmathSoaQSetZ (line 192) | static inline void vmathSoaQSetZ( VmathSoaQuat *result, vec_float4 _z )
function vec_float4 (line 197) | static inline vec_float4 vmathSoaQGetZ( const VmathSoaQuat *quat )
function vmathSoaQSetW (line 202) | static inline void vmathSoaQSetW( VmathSoaQuat *result, vec_float4 _w )
function vec_float4 (line 207) | static inline vec_float4 vmathSoaQGetW( const VmathSoaQuat *quat )
function vmathSoaQSetElem (line 212) | static inline void vmathSoaQSetElem( VmathSoaQuat *result, int idx, vec_...
function vec_float4 (line 217) | static inline vec_float4 vmathSoaQGetElem( const VmathSoaQuat *quat, int...
function vmathSoaQAdd (line 222) | static inline void vmathSoaQAdd( VmathSoaQuat *result, const VmathSoaQua...
function vmathSoaQSub (line 230) | static inline void vmathSoaQSub( VmathSoaQuat *result, const VmathSoaQua...
function vmathSoaQScalarMul (line 238) | static inline void vmathSoaQScalarMul( VmathSoaQuat *result, const Vmath...
function vmathSoaQScalarDiv (line 246) | static inline void vmathSoaQScalarDiv( VmathSoaQuat *result, const Vmath...
function vmathSoaQNeg (line 254) | static inline void vmathSoaQNeg( VmathSoaQuat *result, const VmathSoaQua...
function vec_float4 (line 262) | static inline vec_float4 vmathSoaQDot( const VmathSoaQuat *quat0, const ...
function vec_float4 (line 272) | static inline vec_float4 vmathSoaQNorm( const VmathSoaQuat *quat )
function vec_float4 (line 282) | static inline vec_float4 vmathSoaQLength( const VmathSoaQuat *quat )
function vmathSoaQNormalize (line 287) | static inline void vmathSoaQNormalize( VmathSoaQuat *result, const Vmath...
function vmathSoaQMakeRotationArc (line 298) | static inline void vmathSoaQMakeRotationArc( VmathSoaQuat *result, const...
function vmathSoaQMakeRotationAxis (line 309) | static inline void vmathSoaQMakeRotationAxis( VmathSoaQuat *result, vec_...
function vmathSoaQMakeRotationX (line 319) | static inline void vmathSoaQMakeRotationX( VmathSoaQuat *result, vec_flo...
function vmathSoaQMakeRotationY (line 327) | static inline void vmathSoaQMakeRotationY( VmathSoaQuat *result, vec_flo...
function vmathSoaQMakeRotationZ (line 335) | static inline void vmathSoaQMakeRotationZ( VmathSoaQuat *result, vec_flo...
function vmathSoaQMul (line 343) | static inline void vmathSoaQMul( VmathSoaQuat *result, const VmathSoaQua...
function vmathSoaQRotate (line 353) | static inline void vmathSoaQRotate( VmathSoaVector3 *result, const Vmath...
function vmathSoaQConj (line 365) | static inline void vmathSoaQConj( VmathSoaQuat *result, const VmathSoaQu...
function vmathSoaQSelect (line 370) | static inline void vmathSoaQSelect( VmathSoaQuat *result, const VmathSoa...
function vmathSoaQPrint (line 380) | static inline void vmathSoaQPrint( const VmathSoaQuat *quat )
function vmathSoaQPrints (line 394) | static inline void vmathSoaQPrints( const VmathSoaQuat *quat, const char...
FILE: samples/vectormath/ppu/c/quat_soa_v.h
function VmathSoaQuat (line 44) | static inline VmathSoaQuat vmathSoaQMakeFromElems_V( vec_float4 _x, vec_...
function VmathSoaQuat (line 51) | static inline VmathSoaQuat vmathSoaQMakeFromV3Scalar_V( VmathSoaVector3 ...
function VmathSoaQuat (line 58) | static inline VmathSoaQuat vmathSoaQMakeFromV4_V( VmathSoaVector4 vec )
function VmathSoaQuat (line 65) | static inline VmathSoaQuat vmathSoaQMakeFromScalar_V( vec_float4 scalar )
function VmathSoaQuat (line 72) | static inline VmathSoaQuat vmathSoaQMakeFromAos_V( VmathQuat quat )
function VmathSoaQuat (line 79) | static inline VmathSoaQuat vmathSoaQMakeFrom4Aos_V( VmathQuat quat0, Vma...
function VmathSoaQuat (line 86) | static inline VmathSoaQuat vmathSoaQMakeIdentity_V( )
function VmathSoaQuat (line 93) | static inline VmathSoaQuat vmathSoaQLerp_V( vec_float4 t, VmathSoaQuat q...
function VmathSoaQuat (line 100) | static inline VmathSoaQuat vmathSoaQSlerp_V( vec_float4 t, VmathSoaQuat ...
function VmathSoaQuat (line 107) | static inline VmathSoaQuat vmathSoaQSquad_V( vec_float4 t, VmathSoaQuat ...
function vmathSoaQGet4Aos_V (line 114) | static inline void vmathSoaQGet4Aos_V( VmathSoaQuat quat, VmathQuat *res...
function vmathSoaQSetXYZ_V (line 119) | static inline void vmathSoaQSetXYZ_V( VmathSoaQuat *result, VmathSoaVect...
function VmathSoaVector3 (line 124) | static inline VmathSoaVector3 vmathSoaQGetXYZ_V( VmathSoaQuat quat )
function vmathSoaQSetX_V (line 131) | static inline void vmathSoaQSetX_V( VmathSoaQuat *result, vec_float4 _x )
function vec_float4 (line 136) | static inline vec_float4 vmathSoaQGetX_V( VmathSoaQuat quat )
function vmathSoaQSetY_V (line 141) | static inline void vmathSoaQSetY_V( VmathSoaQuat *result, vec_float4 _y )
function vec_float4 (line 146) | static inline vec_float4 vmathSoaQGetY_V( VmathSoaQuat quat )
function vmathSoaQSetZ_V (line 151) | static inline void vmathSoaQSetZ_V( VmathSoaQuat *result, vec_float4 _z )
function vec_float4 (line 156) | static inline vec_float4 vmathSoaQGetZ_V( VmathSoaQuat quat )
function vmathSoaQSetW_V (line 161) | static inline void vmathSoaQSetW_V( VmathSoaQuat *result, vec_float4 _w )
function vec_float4 (line 166) | static inline vec_float4 vmathSoaQGetW_V( VmathSoaQuat quat )
function vmathSoaQSetElem_V (line 171) | static inline void vmathSoaQSetElem_V( VmathSoaQuat *result, int idx, ve...
function vec_float4 (line 176) | static inline vec_float4 vmathSoaQGetElem_V( VmathSoaQuat quat, int idx )
function VmathSoaQuat (line 181) | static inline VmathSoaQuat vmathSoaQAdd_V( VmathSoaQuat quat0, VmathSoaQ...
function VmathSoaQuat (line 188) | static inline VmathSoaQuat vmathSoaQSub_V( VmathSoaQuat quat0, VmathSoaQ...
function VmathSoaQuat (line 195) | static inline VmathSoaQuat vmathSoaQScalarMul_V( VmathSoaQuat quat, vec_...
function VmathSoaQuat (line 202) | static inline VmathSoaQuat vmathSoaQScalarDiv_V( VmathSoaQuat quat, vec_...
function VmathSoaQuat (line 209) | static inline VmathSoaQuat vmathSoaQNeg_V( VmathSoaQuat quat )
function vec_float4 (line 216) | static inline vec_float4 vmathSoaQDot_V( VmathSoaQuat quat0, VmathSoaQua...
function vec_float4 (line 221) | static inline vec_float4 vmathSoaQNorm_V( VmathSoaQuat quat )
function vec_float4 (line 226) | static inline vec_float4 vmathSoaQLength_V( VmathSoaQuat quat )
function VmathSoaQuat (line 231) | static inline VmathSoaQuat vmathSoaQNormalize_V( VmathSoaQuat quat )
function VmathSoaQuat (line 238) | static inline VmathSoaQuat vmathSoaQMakeRotationArc_V( VmathSoaVector3 u...
function VmathSoaQuat (line 245) | static inline VmathSoaQuat vmathSoaQMakeRotationAxis_V( vec_float4 radia...
function VmathSoaQuat (line 252) | static inline VmathSoaQuat vmathSoaQMakeRotationX_V( vec_float4 radians )
function VmathSoaQuat (line 259) | static inline VmathSoaQuat vmathSoaQMakeRotationY_V( vec_float4 radians )
function VmathSoaQuat (line 266) | static inline VmathSoaQuat vmathSoaQMakeRotationZ_V( vec_float4 radians )
function VmathSoaQuat (line 273) | static inline VmathSoaQuat vmathSoaQMul_V( VmathSoaQuat quat0, VmathSoaQ...
function VmathSoaVector3 (line 280) | static inline VmathSoaVector3 vmathSoaQRotate_V( VmathSoaQuat quat, Vmat...
function VmathSoaQuat (line 287) | static inline VmathSoaQuat vmathSoaQConj_V( VmathSoaQuat quat )
function VmathSoaQuat (line 294) | static inline VmathSoaQuat vmathSoaQSelect_V( VmathSoaQuat quat0, VmathS...
function vmathSoaQPrint_V (line 303) | static inline void vmathSoaQPrint_V( VmathSoaQuat quat )
function vmathSoaQPrints_V (line 308) | static inline void vmathSoaQPrints_V( VmathSoaQuat quat, const char *name )
FILE: samples/vectormath/ppu/c/vec_aos.h
function vec_float4 (line 75) | static inline vec_float4 _vmathVfDot3( vec_float4 vec0, vec_float4 vec1 )
function vec_float4 (line 83) | static inline vec_float4 _vmathVfDot4( vec_float4 vec0, vec_float4 vec1 )
function vec_float4 (line 91) | static inline vec_float4 _vmathVfCross( vec_float4 vec0, vec_float4 vec1 )
function vec_uint4 (line 103) | static inline vec_uint4 _vmathVfToHalfFloatsUnpacked(vec_float4 v)
function vec_ushort8 (line 130) | static inline vec_ushort8 _vmath2VfToHalfFloats(vec_float4 u, vec_float4 v)
function vec_float4 (line 143) | static inline vec_float4 _vmathVfInsert(vec_float4 dst, vec_float4 src, ...
function vec_float4 (line 174) | static inline vec_float4 _vmathVfSplatScalar(float scalar)
function vec_uint4 (line 186) | static inline vec_uint4 _vmathVuiSplatScalar(unsigned int scalar)
function vmathV3Copy (line 200) | static inline void vmathV3Copy( VmathVector3 *result, const VmathVector3...
function vmathV3MakeFromElems (line 205) | static inline void vmathV3MakeFromElems( VmathVector3 *result, float _x,...
function vmathV3MakeFromP3 (line 217) | static inline void vmathV3MakeFromP3( VmathVector3 *result, const VmathP...
function vmathV3MakeFromScalar (line 222) | static inline void vmathV3MakeFromScalar( VmathVector3 *result, float sc...
function vmathV3MakeFrom128 (line 227) | static inline void vmathV3MakeFrom128( VmathVector3 *result, vec_float4 ...
function vmathV3MakeXAxis (line 232) | static inline void vmathV3MakeXAxis( VmathVector3 *result )
function vmathV3MakeYAxis (line 237) | static inline void vmathV3MakeYAxis( VmathVector3 *result )
function vmathV3MakeZAxis (line 242) | static inline void vmathV3MakeZAxis( VmathVector3 *result )
function vmathV3Lerp (line 247) | static inline void vmathV3Lerp( VmathVector3 *result, float t, const Vma...
function vmathV3Slerp (line 255) | static inline void vmathV3Slerp( VmathVector3 *result, float t, const Vm...
function vec_float4 (line 275) | static inline vec_float4 vmathV3Get128( const VmathVector3 *vec )
function vmathV3StoreXYZ (line 280) | static inline void vmathV3StoreXYZ( const VmathVector3 *vec, vec_float4 ...
function vmathV3LoadXYZArray (line 288) | static inline void vmathV3LoadXYZArray( VmathVector3 *vec0, VmathVector3...
function vmathV3StoreXYZArray (line 303) | static inline void vmathV3StoreXYZArray( const VmathVector3 *vec0, const...
function vmathV3StoreHalfFloats (line 314) | static inline void vmathV3StoreHalfFloats( const VmathVector3 *vec0, con...
function vmathV3SetX (line 325) | static inline void vmathV3SetX( VmathVector3 *result, float _x )
function vmathV3GetX (line 330) | static inline float vmathV3GetX( const VmathVector3 *vec )
function vmathV3SetY (line 335) | static inline void vmathV3SetY( VmathVector3 *result, float _y )
function vmathV3GetY (line 340) | static inline float vmathV3GetY( const VmathVector3 *vec )
function vmathV3SetZ (line 345) | static inline void vmathV3SetZ( VmathVector3 *result, float _z )
function vmathV3GetZ (line 350) | static inline float vmathV3GetZ( const VmathVector3 *vec )
function vmathV3SetElem (line 355) | static inline void vmathV3SetElem( VmathVector3 *result, int idx, float ...
function vmathV3GetElem (line 360) | static inline float vmathV3GetElem( const VmathVector3 *vec, int idx )
function vmathV3Add (line 365) | static inline void vmathV3Add( VmathVector3 *result, const VmathVector3 ...
function vmathV3Sub (line 370) | static inline void vmathV3Sub( VmathVector3 *result, const VmathVector3 ...
function vmathV3AddP3 (line 375) | static inline void vmathV3AddP3( VmathPoint3 *result, const VmathVector3...
function vmathV3ScalarMul (line 380) | static inline void vmathV3ScalarMul( VmathVector3 *result, const VmathVe...
function vmathV3ScalarDiv (line 385) | static inline void vmathV3ScalarDiv( VmathVector3 *result, const VmathVe...
function vmathV3Neg (line 390) | static inline void vmathV3Neg( VmathVector3 *result, const VmathVector3 ...
function vmathV3MulPerElem (line 395) | static inline void vmathV3MulPerElem( VmathVector3 *result, const VmathV...
function vmathV3DivPerElem (line 400) | static inline void vmathV3DivPerElem( VmathVector3 *result, const VmathV...
function vmathV3RecipPerElem (line 405) | static inline void vmathV3RecipPerElem( VmathVector3 *result, const Vmat...
function vmathV3SqrtPerElem (line 410) | static inline void vmathV3SqrtPerElem( VmathVector3 *result, const Vmath...
function vmathV3RsqrtPerElem (line 415) | static inline void vmathV3RsqrtPerElem( VmathVector3 *result, const Vmat...
function vmathV3AbsPerElem (line 420) | static inline void vmathV3AbsPerElem( VmathVector3 *result, const VmathV...
function vmathV3CopySignPerElem (line 425) | static inline void vmathV3CopySignPerElem( VmathVector3 *result, const V...
function vmathV3MaxPerElem (line 430) | static inline void vmathV3MaxPerElem( VmathVector3 *result, const VmathV...
function vmathV3MaxElem (line 435) | static inline float vmathV3MaxElem( const VmathVector3 *vec )
function vmathV3MinPerElem (line 443) | static inline void vmathV3MinPerElem( VmathVector3 *result, const VmathV...
function vmathV3MinElem (line 448) | static inline float vmathV3MinElem( const VmathVector3 *vec )
function vmathV3Sum (line 456) | static inline float vmathV3Sum( const VmathVector3 *vec )
function vmathV3Dot (line 464) | static inline float vmathV3Dot( const VmathVector3 *vec0, const VmathVec...
function vmathV3LengthSqr (line 470) | static inline float vmathV3LengthSqr( const VmathVector3 *vec )
function vmathV3Length (line 476) | static inline float vmathV3Length( const VmathVector3 *vec )
function vmathV3Normalize (line 481) | static inline void vmathV3Normalize( VmathVector3 *result, const VmathVe...
function vmathV3Cross (line 488) | static inline void vmathV3Cross( VmathVector3 *result, const VmathVector...
function vmathV3Select (line 493) | static inline void vmathV3Select( VmathVector3 *result, const VmathVecto...
function vmathV3Print (line 502) | static inline void vmathV3Print( const VmathVector3 *vec )
function vmathV3Prints (line 509) | static inline void vmathV3Prints( const VmathVector3 *vec, const char *n...
function vmathV4Copy (line 518) | static inline void vmathV4Copy( VmathVector4 *result, const VmathVector4...
function vmathV4MakeFromElems (line 523) | static inline void vmathV4MakeFromElems( VmathVector4 *result, float _x,...
function vmathV4MakeFromV3Scalar (line 537) | static inline void vmathV4MakeFromV3Scalar( VmathVector4 *result, const ...
function vmathV4MakeFromV3 (line 543) | static inline void vmathV4MakeFromV3( VmathVector4 *result, const VmathV...
function vmathV4MakeFromP3 (line 549) | static inline void vmathV4MakeFromP3( VmathVector4 *result, const VmathP...
function vmathV4MakeFromQ (line 555) | static inline void vmathV4MakeFromQ( VmathVector4 *result, const VmathQu...
function vmathV4MakeFromScalar (line 560) | static inline void vmathV4MakeFromScalar( VmathVector4 *result, float sc...
function vmathV4MakeFrom128 (line 565) | static inline void vmathV4MakeFrom128( VmathVector4 *result, vec_float4 ...
function vmathV4MakeXAxis (line 570) | static inline void vmathV4MakeXAxis( VmathVector4 *result )
function vmathV4MakeYAxis (line 575) | static inline void vmathV4MakeYAxis( VmathVector4 *result )
function vmathV4MakeZAxis (line 580) | static inline void vmathV4MakeZAxis( VmathVector4 *result )
function vmathV4MakeWAxis (line 585) | static inline void vmathV4MakeWAxis( VmathVector4 *result )
function vmathV4Lerp (line 590) | static inline void vmathV4Lerp( VmathVector4 *result, float t, const Vma...
function vmathV4Slerp (line 598) | static inline void vmathV4Slerp( VmathVector4 *result, float t, const Vm...
function vec_float4 (line 618) | static inline vec_float4 vmathV4Get128( const VmathVector4 *vec )
function vmathV4StoreHalfFloats (line 623) | static inline void vmathV4StoreHalfFloats( const VmathVector4 *vec0, con...
function vmathV4SetXYZ (line 629) | static inline void vmathV4SetXYZ( VmathVector4 *result, const VmathVecto...
function vmathV4GetXYZ (line 634) | static inline void vmathV4GetXYZ( VmathVector3 *result, const VmathVecto...
function vmathV4SetX (line 639) | static inline void vmathV4SetX( VmathVector4 *result, float _x )
function vmathV4GetX (line 644) | static inline float vmathV4GetX( const VmathVector4 *vec )
function vmathV4SetY (line 649) | static inline void vmathV4SetY( VmathVector4 *result, float _y )
function vmathV4GetY (line 654) | static inline float vmathV4GetY( const VmathVector4 *vec )
function vmathV4SetZ (line 659) | static inline void vmathV4SetZ( VmathVector4 *result, float _z )
function vmathV4GetZ (line 664) | static inline float vmathV4GetZ( const VmathVector4 *vec )
function vmathV4SetW (line 669) | static inline void vmathV4SetW( VmathVector4 *result, float _w )
function vmathV4GetW (line 674) | static inline float vmathV4GetW( const VmathVector4 *vec )
function vmathV4SetElem (line 679) | static inline void vmathV4SetElem( VmathVector4 *result, int idx, float ...
function vmathV4GetElem (line 684) | static inline float vmathV4GetElem( const VmathVector4 *vec, int idx )
function vmathV4Add (line 689) | static inline void vmathV4Add( VmathVector4 *result, const VmathVector4 ...
function vmathV4Sub (line 694) | static inline void vmathV4Sub( VmathVector4 *result, const VmathVector4 ...
function vmathV4ScalarMul (line 699) | static inline void vmathV4ScalarMul( VmathVector4 *result, const VmathVe...
function vmathV4ScalarDiv (line 704) | static inline void vmathV4ScalarDiv( VmathVector4 *result, const VmathVe...
function vmathV4Neg (line 709) | static inline void vmathV4Neg( VmathVector4 *result, const VmathVector4 ...
function vmathV4MulPerElem (line 714) | static inline void vmathV4MulPerElem( VmathVector4 *result, const VmathV...
function vmathV4DivPerElem (line 719) | static inline void vmathV4DivPerElem( VmathVector4 *result, const VmathV...
function vmathV4RecipPerElem (line 724) | static inline void vmathV4RecipPerElem( VmathVector4 *result, const Vmat...
function vmathV4SqrtPerElem (line 729) | static inline void vmathV4SqrtPerElem( VmathVector4 *result, const Vmath...
function vmathV4RsqrtPerElem (line 734) | static inline void vmathV4RsqrtPerElem( VmathVector4 *result, const Vmat...
function vmathV4AbsPerElem (line 739) | static inline void vmathV4AbsPerElem( VmathVector4 *result, const VmathV...
function vmathV4CopySignPerElem (line 744) | static inline void vmathV4CopySignPerElem( VmathVector4 *result, const V...
function vmathV4MaxPerElem (line 749) | static inline void vmathV4MaxPerElem( VmathVector4 *result, const VmathV...
function vmathV4MaxElem (line 754) | static inline float vmathV4MaxElem( const VmathVector4 *vec )
function vmathV4MinPerElem (line 763) | static inline void vmathV4MinPerElem( VmathVector4 *result, const VmathV...
function vmathV4MinElem (line 768) | static inline float vmathV4MinElem( const VmathVector4 *vec )
function vmathV4Sum (line 777) | static inline float vmathV4Sum( const VmathVector4 *vec )
function vmathV4Dot (line 786) | static inline float vmathV4Dot( const VmathVector4 *vec0, const VmathVec...
function vmathV4LengthSqr (line 792) | static inline float vmathV4LengthSqr( const VmathVector4 *vec )
function vmathV4Length (line 798) | static inline float vmathV4Length( const VmathVector4 *vec )
function vmathV4Normalize (line 803) | static inline void vmathV4Normalize( VmathVector4 *result, const VmathVe...
function vmathV4Select (line 809) | static inline void vmathV4Select( VmathVector4 *result, const VmathVecto...
function vmathV4Print (line 818) | static inline void vmathV4Print( const VmathVector4 *vec )
function vmathV4Prints (line 825) | static inline void vmathV4Prints( const VmathVector4 *vec, const char *n...
function vmathP3Copy (line 834) | static inline void vmathP3Copy( VmathPoint3 *result, const VmathPoint3 *...
function vmathP3MakeFromElems (line 839) | static inline void vmathP3MakeFromElems( VmathPoint3 *result, float _x, ...
function vmathP3MakeFromV3 (line 851) | static inline void vmathP3MakeFromV3( VmathPoint3 *result, const VmathVe...
function vmathP3MakeFromScalar (line 856) | static inline void vmathP3MakeFromScalar( VmathPoint3 *result, float sca...
function vmathP3MakeFrom128 (line 861) | static inline void vmathP3MakeFrom128( VmathPoint3 *result, vec_float4 v...
function vmathP3Lerp (line 866) | static inline void vmathP3Lerp( VmathPoint3 *result, float t, const Vmat...
function vec_float4 (line 874) | static inline vec_float4 vmathP3Get128( const VmathPoint3 *pnt )
function vmathP3StoreXYZ (line 879) | static inline void vmathP3StoreXYZ( const VmathPoint3 *pnt, vec_float4 *...
function vmathP3LoadXYZArray (line 887) | static inline void vmathP3LoadXYZArray( VmathPoint3 *pnt0, VmathPoint3 *...
function vmathP3StoreXYZArray (line 902) | static inline void vmathP3StoreXYZArray( const VmathPoint3 *pnt0, const ...
function vmathP3StoreHalfFloats (line 913) | static inline void vmathP3StoreHalfFloats( const VmathPoint3 *pnt0, cons...
function vmathP3SetX (line 924) | static inline void vmathP3SetX( VmathPoint3 *result, float _x )
function vmathP3GetX (line 929) | static inline float vmathP3GetX( const VmathPoint3 *pnt )
function vmathP3SetY (line 934) | static inline void vmathP3SetY( VmathPoint3 *result, float _y )
function vmathP3GetY (line 939) | static inline float vmathP3GetY( const VmathPoint3 *pnt )
function vmathP3SetZ (line 944) | static inline void vmathP3SetZ( VmathPoint3 *result, float _z )
function vmathP3GetZ (line 949) | static inline float vmathP3GetZ( const VmathPoint3 *pnt )
function vmathP3SetElem (line 954) | static inline void vmathP3SetElem( VmathPoint3 *result, int idx, float v...
function vmathP3GetElem (line 959) | static inline float vmathP3GetElem( const VmathPoint3 *pnt, int idx )
function vmathP3Sub (line 964) | static inline void vmathP3Sub( VmathVector3 *result, const VmathPoint3 *...
function vmathP3AddV3 (line 969) | static inline void vmathP3AddV3( VmathPoint3 *result, const VmathPoint3 ...
function vmathP3SubV3 (line 974) | static inline void vmathP3SubV3( VmathPoint3 *result, const VmathPoint3 ...
function vmathP3MulPerElem (line 979) | static inline void vmathP3MulPerElem( VmathPoint3 *result, const VmathPo...
function vmathP3DivPerElem (line 984) | static inline void vmathP3DivPerElem( VmathPoint3 *result, const VmathPo...
function vmathP3RecipPerElem (line 989) | static inline void vmathP3RecipPerElem( VmathPoint3 *result, const Vmath...
function vmathP3SqrtPerElem (line 994) | static inline void vmathP3SqrtPerElem( VmathPoint3 *result, const VmathP...
function vmathP3RsqrtPerElem (line 999) | static inline void vmathP3RsqrtPerElem( VmathPoint3 *result, const Vmath...
function vmathP3AbsPerElem (line 1004) | static inline void vmathP3AbsPerElem( VmathPoint3 *result, const VmathPo...
function vmathP3CopySignPerElem (line 1009) | static inline void vmathP3CopySignPerElem( VmathPoint3 *result, const Vm...
function vmathP3MaxPerElem (line 1014) | static inline void vmathP3MaxPerElem( VmathPoint3 *result, const VmathPo...
function vmathP3MaxElem (line 1019) | static inline float vmathP3MaxElem( const VmathPoint3 *pnt )
function vmathP3MinPerElem (line 1027) | static inline void vmathP3MinPerElem( VmathPoint3 *result, const VmathPo...
function vmathP3MinElem (line 1032) | static inline float vmathP3MinElem( const VmathPoint3 *pnt )
function vmathP3Sum (line 1040) | static inline float vmathP3Sum( const VmathPoint3 *pnt )
function vmathP3Scale (line 1048) | static inline void vmathP3Scale( VmathPoint3 *result, const VmathPoint3 ...
function vmathP3NonUniformScale (line 1055) | static inline void vmathP3NonUniformScale( VmathPoint3 *result, const Vm...
function vmathP3Projection (line 1062) | static inline float vmathP3Projection( const VmathPoint3 *pnt, const Vma...
function vmathP3DistSqrFromOrigin (line 1068) | static inline float vmathP3DistSqrFromOrigin( const VmathPoint3 *pnt )
function vmathP3DistFromOrigin (line 1075) | static inline float vmathP3DistFromOrigin( const VmathPoint3 *pnt )
function vmathP3DistSqr (line 1082) | static inline float vmathP3DistSqr( const VmathPoint3 *pnt0, const Vmath...
function vmathP3Dist (line 1089) | static inline float vmathP3Dist( const VmathPoint3 *pnt0, const VmathPoi...
function vmathP3Select (line 1096) | static inline void vmathP3Select( VmathPoint3 *result, const VmathPoint3...
function vmathP3Print (line 1105) | static inline void vmathP3Print( const VmathPoint3 *pnt )
function vmathP3Prints (line 1112) | static inline void vmathP3Prints( const VmathPoint3 *pnt, const char *na...
FILE: samples/vectormath/ppu/c/vec_aos_v.h
function VmathVector3 (line 73) | static inline VmathVector3 vmathV3MakeFromElems_V( float _x, float _y, f...
function VmathVector3 (line 80) | static inline VmathVector3 vmathV3MakeFromP3_V( VmathPoint3 pnt )
function VmathVector3 (line 87) | static inline VmathVector3 vmathV3MakeFromScalar_V( float scalar )
function VmathVector3 (line 94) | static inline VmathVector3 vmathV3MakeFrom128_V( vec_float4 vf4 )
function VmathVector3 (line 101) | static inline VmathVector3 vmathV3MakeXAxis_V( )
function VmathVector3 (line 108) | static inline VmathVector3 vmathV3MakeYAxis_V( )
function VmathVector3 (line 115) | static inline VmathVector3 vmathV3MakeZAxis_V( )
function VmathVector3 (line 122) | static inline VmathVector3 vmathV3Lerp_V( float t, VmathVector3 vec0, Vm...
function VmathVector3 (line 129) | static inline VmathVector3 vmathV3Slerp_V( float t, VmathVector3 unitVec...
function vec_float4 (line 136) | static inline vec_float4 vmathV3Get128_V( VmathVector3 vec )
function vmathV3StoreXYZ_V (line 141) | static inline void vmathV3StoreXYZ_V( VmathVector3 vec, vec_float4 *quad )
function vmathV3LoadXYZArray_V (line 146) | static inline void vmathV3LoadXYZArray_V( VmathVector3 *vec0, VmathVecto...
function vmathV3StoreXYZArray_V (line 151) | static inline void vmathV3StoreXYZArray_V( VmathVector3 vec0, VmathVecto...
function vmathV3StoreHalfFloats_V (line 156) | static inline void vmathV3StoreHalfFloats_V( VmathVector3 vec0, VmathVec...
function vmathV3SetX_V (line 161) | static inline void vmathV3SetX_V( VmathVector3 *result, float _x )
function vmathV3GetX_V (line 166) | static inline float vmathV3GetX_V( VmathVector3 vec )
function vmathV3SetY_V (line 171) | static inline void vmathV3SetY_V( VmathVector3 *result, float _y )
function vmathV3GetY_V (line 176) | static inline float vmathV3GetY_V( VmathVector3 vec )
function vmathV3SetZ_V (line 181) | static inline void vmathV3SetZ_V( VmathVector3 *result, float _z )
function vmathV3GetZ_V (line 186) | static inline float vmathV3GetZ_V( VmathVector3 vec )
function vmathV3SetElem_V (line 191) | static inline void vmathV3SetElem_V( VmathVector3 *result, int idx, floa...
function vmathV3GetElem_V (line 196) | static inline float vmathV3GetElem_V( VmathVector3 vec, int idx )
function VmathVector3 (line 201) | static inline VmathVector3 vmathV3Add_V( VmathVector3 vec0, VmathVector3...
function VmathVector3 (line 208) | static inline VmathVector3 vmathV3Sub_V( VmathVector3 vec0, VmathVector3...
function VmathPoint3 (line 215) | static inline VmathPoint3 vmathV3AddP3_V( VmathVector3 vec, VmathPoint3 ...
function VmathVector3 (line 222) | static inline VmathVector3 vmathV3ScalarMul_V( VmathVector3 vec, float s...
function VmathVector3 (line 229) | static inline VmathVector3 vmathV3ScalarDiv_V( VmathVector3 vec, float s...
function VmathVector3 (line 236) | static inline VmathVector3 vmathV3Neg_V( VmathVector3 vec )
function VmathVector3 (line 243) | static inline VmathVector3 vmathV3MulPerElem_V( VmathVector3 vec0, Vmath...
function VmathVector3 (line 250) | static inline VmathVector3 vmathV3DivPerElem_V( VmathVector3 vec0, Vmath...
function VmathVector3 (line 257) | static inline VmathVector3 vmathV3RecipPerElem_V( VmathVector3 vec )
function VmathVector3 (line 264) | static inline VmathVector3 vmathV3SqrtPerElem_V( VmathVector3 vec )
function VmathVector3 (line 271) | static inline VmathVector3 vmathV3RsqrtPerElem_V( VmathVector3 vec )
function VmathVector3 (line 278) | static inline VmathVector3 vmathV3AbsPerElem_V( VmathVector3 vec )
function VmathVector3 (line 285) | static inline VmathVector3 vmathV3CopySignPerElem_V( VmathVector3 vec0, ...
function VmathVector3 (line 292) | static inline VmathVector3 vmathV3MaxPerElem_V( VmathVector3 vec0, Vmath...
function vmathV3MaxElem_V (line 299) | static inline float vmathV3MaxElem_V( VmathVector3 vec )
function VmathVector3 (line 304) | static inline VmathVector3 vmathV3MinPerElem_V( VmathVector3 vec0, Vmath...
function vmathV3MinElem_V (line 311) | static inline float vmathV3MinElem_V( VmathVector3 vec )
function vmathV3Sum_V (line 316) | static inline float vmathV3Sum_V( VmathVector3 vec )
function vmathV3Dot_V (line 321) | static inline float vmathV3Dot_V( VmathVector3 vec0, VmathVector3 vec1 )
function vmathV3LengthSqr_V (line 326) | static inline float vmathV3LengthSqr_V( VmathVector3 vec )
function vmathV3Length_V (line 331) | static inline float vmathV3Length_V( VmathVector3 vec )
function VmathVector3 (line 336) | static inline VmathVector3 vmathV3Normalize_V( VmathVector3 vec )
function VmathVector3 (line 343) | static inline VmathVector3 vmathV3Cross_V( VmathVector3 vec0, VmathVecto...
function VmathVector3 (line 350) | static inline VmathVector3 vmathV3Select_V( VmathVector3 vec0, VmathVect...
function vmathV3Print_V (line 359) | static inline void vmathV3Print_V( VmathVector3 vec )
function vmathV3Prints_V (line 364) | static inline void vmathV3Prints_V( VmathVector3 vec, const char *name )
function VmathVector4 (line 371) | static inline VmathVector4 vmathV4MakeFromElems_V( float _x, float _y, f...
function VmathVector4 (line 378) | static inline VmathVector4 vmathV4MakeFromV3Scalar_V( VmathVector3 xyz, ...
function VmathVector4 (line 385) | static inline VmathVector4 vmathV4MakeFromV3_V( VmathVector3 vec )
function VmathVector4 (line 392) | static inline VmathVector4 vmathV4MakeFromP3_V( VmathPoint3 pnt )
function VmathVector4 (line 399) | static inline VmathVector4 vmathV4MakeFromQ_V( VmathQuat quat )
function VmathVector4 (line 406) | static inline VmathVector4 vmathV4MakeFromScalar_V( float scalar )
function VmathVector4 (line 413) | static inline VmathVector4 vmathV4MakeFrom128_V( vec_float4 vf4 )
function VmathVector4 (line 420) | static inline VmathVector4 vmathV4MakeXAxis_V( )
function VmathVector4 (line 427) | static inline VmathVector4 vmathV4MakeYAxis_V( )
function VmathVector4 (line 434) | static inline VmathVector4 vmathV4MakeZAxis_V( )
function VmathVector4 (line 441) | static inline VmathVector4 vmathV4MakeWAxis_V( )
function VmathVector4 (line 448) | static inline VmathVector4 vmathV4Lerp_V( float t, VmathVector4 vec0, Vm...
function VmathVector4 (line 455) | static inline VmathVector4 vmathV4Slerp_V( float t, VmathVector4 unitVec...
function vec_float4 (line 462) | static inline vec_float4 vmathV4Get128_V( VmathVector4 vec )
function vmathV4StoreHalfFloats_V (line 467) | static inline void vmathV4StoreHalfFloats_V( VmathVector4 vec0, VmathVec...
function vmathV4SetXYZ_V (line 472) | static inline void vmathV4SetXYZ_V( VmathVector4 *result, VmathVector3 v...
function VmathVector3 (line 477) | static inline VmathVector3 vmathV4GetXYZ_V( VmathVector4 vec )
function vmathV4SetX_V (line 484) | static inline void vmathV4SetX_V( VmathVector4 *result, float _x )
function vmathV4GetX_V (line 489) | static inline float vmathV4GetX_V( VmathVector4 vec )
function vmathV4SetY_V (line 494) | static inline void vmathV4SetY_V( VmathVector4 *result, float _y )
function vmathV4GetY_V (line 499) | static inline float vmathV4GetY_V( VmathVector4 vec )
function vmathV4SetZ_V (line 504) | static inline void vmathV4SetZ_V( VmathVector4 *result, float _z )
function vmathV4GetZ_V (line 509) | static inline float vmathV4GetZ_V( VmathVector4 vec )
function vmathV4SetW_V (line 514) | static inline void vmathV4SetW_V( VmathVector4 *result, float _w )
function vmathV4GetW_V (line 519) | static inline float vmathV4GetW_V( VmathVector4 vec )
function vmathV4SetElem_V (line 524) | static inline void vmathV4SetElem_V( VmathVector4 *result, int idx, floa...
function vmathV4GetElem_V (line 529) | static inline float vmathV4GetElem_V( VmathVector4 vec, int idx )
function VmathVector4 (line 534) | static inline VmathVector4 vmathV4Add_V( VmathVector4 vec0, VmathVector4...
function VmathVector4 (line 541) | static inline VmathVector4 vmathV4Sub_V( VmathVector4 vec0, VmathVector4...
function VmathVector4 (line 548) | static inline VmathVector4 vmathV4ScalarMul_V( VmathVector4 vec, float s...
function VmathVector4 (line 555) | static inline VmathVector4 vmathV4ScalarDiv_V( VmathVector4 vec, float s...
function VmathVector4 (line 562) | static inline VmathVector4 vmathV4Neg_V( VmathVector4 vec )
function VmathVector4 (line 569) | static inline VmathVector4 vmathV4MulPerElem_V( VmathVector4 vec0, Vmath...
function VmathVector4 (line 576) | static inline VmathVector4 vmathV4DivPerElem_V( VmathVector4 vec0, Vmath...
function VmathVector4 (line 583) | static inline VmathVector4 vmathV4RecipPerElem_V( VmathVector4 vec )
function VmathVector4 (line 590) | static inline VmathVector4 vmathV4SqrtPerElem_V( VmathVector4 vec )
function VmathVector4 (line 597) | static inline VmathVector4 vmathV4RsqrtPerElem_V( VmathVector4 vec )
function VmathVector4 (line 604) | static inline VmathVector4 vmathV4AbsPerElem_V( VmathVector4 vec )
function VmathVector4 (line 611) | static inline VmathVector4 vmathV4CopySignPerElem_V( VmathVector4 vec0, ...
function VmathVector4 (line 618) | static inline VmathVector4 vmathV4MaxPerElem_V( VmathVector4 vec0, Vmath...
function vmathV4MaxElem_V (line 625) | static inline float vmathV4MaxElem_V( VmathVector4 vec )
function VmathVector4 (line 630) | static inline VmathVector4 vmathV4MinPerElem_V( VmathVector4 vec0, Vmath...
function vmathV4MinElem_V (line 637) | static inline float vmathV4MinElem_V( VmathVector4 vec )
function vmathV4Sum_V (line 642) | static inline float vmathV4Sum_V( VmathVector4 vec )
function vmathV4Dot_V (line 647) | static inline float vmathV4Dot_V( VmathVector4 vec0, VmathVector4 vec1 )
function vmathV4LengthSqr_V (line 652) | static inline float vmathV4LengthSqr_V( VmathVector4 vec )
function vmathV4Length_V (line 657) | static inline float vmathV4Length_V( VmathVector4 vec )
function VmathVector4 (line 662) | static inline VmathVector4 vmathV4Normalize_V( VmathVector4 vec )
function VmathVector4 (line 669) | static inline VmathVector4 vmathV4Select_V( VmathVector4 vec0, VmathVect...
function vmathV4Print_V (line 678) | static inline void vmathV4Print_V( VmathVector4 vec )
function vmathV4Prints_V (line 683) | static inline void vmathV4Prints_V( VmathVector4 vec, const char *name )
function VmathPoint3 (line 690) | static inline VmathPoint3 vmathP3MakeFromElems_V( float _x, float _y, fl...
function VmathPoint3 (line 697) | static inline VmathPoint3 vmathP3MakeFromV3_V( VmathVector3 vec )
function VmathPoint3 (line 704) | static inline VmathPoint3 vmathP3MakeFromScalar_V( float scalar )
function VmathPoint3 (line 711) | static inline VmathPoint3 vmathP3MakeFrom128_V( vec_float4 vf4 )
function VmathPoint3 (line 718) | static inline VmathPoint3 vmathP3Lerp_V( float t, VmathPoint3 pnt0, Vmat...
function vec_float4 (line 725) | static inline vec_float4 vmathP3Get128_V( VmathPoint3 pnt )
function vmathP3StoreXYZ_V (line 730) | static inline void vmathP3StoreXYZ_V( VmathPoint3 pnt, vec_float4 *quad )
function vmathP3LoadXYZArray_V (line 735) | static inline void vmathP3LoadXYZArray_V( VmathPoint3 *pnt0, VmathPoint3...
function vmathP3StoreXYZArray_V (line 740) | static inline void vmathP3StoreXYZArray_V( VmathPoint3 pnt0, VmathPoint3...
function vmathP3StoreHalfFloats_V (line 745) | static inline void vmathP3StoreHalfFloats_V( VmathPoint3 pnt0, VmathPoin...
function vmathP3SetX_V (line 750) | static inline void vmathP3SetX_V( VmathPoint3 *result, float _x )
function vmathP3GetX_V (line 755) | static inline float vmathP3GetX_V( VmathPoint3 pnt )
function vmathP3SetY_V (line 760) | static inline void vmathP3SetY_V( VmathPoint3 *result, float _y )
function vmathP3GetY_V (line 765) | static inline float vmathP3GetY_V( VmathPoint3 pnt )
function vmathP3SetZ_V (line 770) | static inline void vmathP3SetZ_V( VmathPoint3 *result, float _z )
function vmathP3GetZ_V (line 775) | static inline float vmathP3GetZ_V( VmathPoint3 pnt )
function vmathP3SetElem_V (line 780) | static inline void vmathP3SetElem_V( VmathPoint3 *result, int idx, float...
function vmathP3GetElem_V (line 785) | static inline float vmathP3GetElem_V( VmathPoint3 pnt, int idx )
function VmathVector3 (line 790) | static inline VmathVector3 vmathP3Sub_V( VmathPoint3 pnt0, VmathPoint3 p...
function VmathPoint3 (line 797) | static inline VmathPoint3 vmathP3AddV3_V( VmathPoint3 pnt, VmathVector3 ...
function VmathPoint3 (line 804) | static inline VmathPoint3 vmathP3SubV3_V( VmathPoint3 pnt, VmathVector3 ...
function VmathPoint3 (line 811) | static inline VmathPoint3 vmathP3MulPerElem_V( VmathPoint3 pnt0, VmathPo...
function VmathPoint3 (line 818) | static inline VmathPoint3 vmathP3DivPerElem_V( VmathPoint3 pnt0, VmathPo...
function VmathPoint3 (line 825) | static inline VmathPoint3 vmathP3RecipPerElem_V( VmathPoint3 pnt )
function VmathPoint3 (line 832) | static inline VmathPoint3 vmathP3SqrtPerElem_V( VmathPoint3 pnt )
function VmathPoint3 (line 839) | static inline VmathPoint3 vmathP3RsqrtPerElem_V( VmathPoint3 pnt )
function VmathPoint3 (line 846) | static inline VmathPoint3 vmathP3AbsPerElem_V( VmathPoint3 pnt )
function VmathPoint3 (line 853) | static inline VmathPoint3 vmathP3CopySignPerElem_V( VmathPoint3 pnt0, Vm...
function VmathPoint3 (line 860) | static inline VmathPoint3 vmathP3MaxPerElem_V( VmathPoint3 pnt0, VmathPo...
function vmathP3MaxElem_V (line 867) | static inline float vmathP3MaxElem_V( VmathPoint3 pnt )
function VmathPoint3 (line 872) | static inline VmathPoint3 vmathP3MinPerElem_V( VmathPoint3 pnt0, VmathPo...
function vmathP3MinElem_V (line 879) | static inline float vmathP3MinElem_V( VmathPoint3 pnt )
function vmathP3Sum_V (line 884) | static inline float vmathP3Sum_V( VmathPoint3 pnt )
function VmathPoint3 (line 889) | static inline VmathPoint3 vmathP3Scale_V( VmathPoint3 pnt, float scaleVal )
function VmathPoint3 (line 896) | static inline VmathPoint3 vmathP3NonUniformScale_V( VmathPoint3 pnt, Vma...
function vmathP3Projection_V (line 903) | static inline float vmathP3Projection_V( VmathPoint3 pnt, VmathVector3 u...
function vmathP3DistSqrFromOrigin_V (line 908) | static inline float vmathP3DistSqrFromOrigin_V( VmathPoint3 pnt )
function vmathP3DistFromOrigin_V (line 913) | static inline float vmathP3DistFromOrigin_V( VmathPoint3 pnt )
function vmathP3DistSqr_V (line 918) | static inline float vmathP3DistSqr_V( VmathPoint3 pnt0, VmathPoint3 pnt1 )
function vmathP3Dist_V (line 923) | static inline float vmathP3Dist_V( VmathPoint3 pnt0, VmathPoint3 pnt1 )
function VmathPoint3 (line 928) | static inline VmathPoint3 vmathP3Select_V( VmathPoint3 pnt0, VmathPoint3...
function vmathP3Print_V (line 937) | static inline void vmathP3Print_V( VmathPoint3 pnt )
function vmathP3Prints_V (line 942) | static inline void vmathP3Prints_V( VmathPoint3 pnt, const char *name )
FILE: samples/vectormath/ppu/c/vec_soa.h
function vmathSoaV3Copy (line 67) | static inline void vmathSoaV3Copy( VmathSoaVector3 *result, const VmathS...
function vmathSoaV3MakeFromElems (line 74) | static inline void vmathSoaV3MakeFromElems( VmathSoaVector3 *result, vec...
function vmathSoaV3MakeFromP3 (line 81) | static inline void vmathSoaV3MakeFromP3( VmathSoaVector3 *result, const ...
function vmathSoaV3MakeFromScalar (line 88) | static inline void vmathSoaV3MakeFromScalar( VmathSoaVector3 *result, ve...
function vmathSoaV3MakeFromAos (line 95) | static inline void vmathSoaV3MakeFromAos( VmathSoaVector3 *result, const...
function vmathSoaV3MakeFrom4Aos (line 103) | static inline void vmathSoaV3MakeFrom4Aos( VmathSoaVector3 *result, cons...
function vmathSoaV3MakeXAxis (line 115) | static inline void vmathSoaV3MakeXAxis( VmathSoaVector3 *result )
function vmathSoaV3MakeYAxis (line 120) | static inline void vmathSoaV3MakeYAxis( VmathSoaVector3 *result )
function vmathSoaV3MakeZAxis (line 125) | static inline void vmathSoaV3MakeZAxis( VmathSoaVector3 *result )
function vmathSoaV3Lerp (line 130) | static inline void vmathSoaV3Lerp( VmathSoaVector3 *result, vec_float4 t...
function vmathSoaV3Slerp (line 138) | static inline void vmathSoaV3Slerp( VmathSoaVector3 *result, vec_float4 ...
function vmathSoaV3Get4Aos (line 154) | static inline void vmathSoaV3Get4Aos( const VmathSoaVector3 *vec, VmathV...
function vmathSoaV3LoadXYZArray (line 165) | static inline void vmathSoaV3LoadXYZArray( VmathSoaVector3 *vec, const v...
function vmathSoaV3StoreXYZArray (line 179) | static inline void vmathSoaV3StoreXYZArray( const VmathSoaVector3 *vec, ...
function vmathSoaV3StoreHalfFloats (line 193) | static inline void vmathSoaV3StoreHalfFloats( const VmathSoaVector3 *vec...
function vmathSoaV3SetX (line 204) | static inline void vmathSoaV3SetX( VmathSoaVector3 *result, vec_float4 _x )
function vec_float4 (line 209) | static inline vec_float4 vmathSoaV3GetX( const VmathSoaVector3 *vec )
function vmathSoaV3SetY (line 214) | static inline void vmathSoaV3SetY( VmathSoaVector3 *result, vec_float4 _y )
function vec_float4 (line 219) | static inline vec_float4 vmathSoaV3GetY( const VmathSoaVector3 *vec )
function vmathSoaV3SetZ (line 224) | static inline void vmathSoaV3SetZ( VmathSoaVector3 *result, vec_float4 _z )
function vec_float4 (line 229) | static inline vec_float4 vmathSoaV3GetZ( const VmathSoaVector3 *vec )
function vmathSoaV3SetElem (line 234) | static inline void vmathSoaV3SetElem( VmathSoaVector3 *result, int idx, ...
function vec_float4 (line 239) | static inline vec_float4 vmathSoaV3GetElem( const VmathSoaVector3 *vec, ...
function vmathSoaV3Add (line 244) | static inline void vmathSoaV3Add( VmathSoaVector3 *result, const VmathSo...
function vmathSoaV3Sub (line 251) | static inline void vmathSoaV3Sub( VmathSoaVector3 *result, const VmathSo...
function vmathSoaV3AddP3 (line 258) | static inline void vmathSoaV3AddP3( VmathSoaPoint3 *result, const VmathS...
function vmathSoaV3ScalarMul (line 265) | static inline void vmathSoaV3ScalarMul( VmathSoaVector3 *result, const V...
function vmathSoaV3ScalarDiv (line 272) | static inline void vmathSoaV3ScalarDiv( VmathSoaVector3 *result, const V...
function vmathSoaV3Neg (line 279) | static inline void vmathSoaV3Neg( VmathSoaVector3 *result, const VmathSo...
function vmathSoaV3MulPerElem (line 286) | static inline void vmathSoaV3MulPerElem( VmathSoaVector3 *result, const ...
function vmathSoaV3DivPerElem (line 293) | static inline void vmathSoaV3DivPerElem( VmathSoaVector3 *result, const ...
function vmathSoaV3RecipPerElem (line 300) | static inline void vmathSoaV3RecipPerElem( VmathSoaVector3 *result, cons...
function vmathSoaV3SqrtPerElem (line 307) | static inline void vmathSoaV3SqrtPerElem( VmathSoaVector3 *result, const...
function vmathSoaV3RsqrtPerElem (line 314) | static inline void vmathSoaV3RsqrtPerElem( VmathSoaVector3 *result, cons...
function vmathSoaV3AbsPerElem (line 321) | static inline void vmathSoaV3AbsPerElem( VmathSoaVector3 *result, const ...
function vmathSoaV3CopySignPerElem (line 328) | static inline void vmathSoaV3CopySignPerElem( VmathSoaVector3 *result, c...
function vmathSoaV3MaxPerElem (line 335) | static inline void vmathSoaV3MaxPerElem( VmathSoaVector3 *result, const ...
function vec_float4 (line 342) | static inline vec_float4 vmathSoaV3MaxElem( const VmathSoaVector3 *vec )
function vmathSoaV3MinPerElem (line 350) | static inline void vmathSoaV3MinPerElem( VmathSoaVector3 *result, const ...
function vec_float4 (line 357) | static inline vec_float4 vmathSoaV3MinElem( const VmathSoaVector3 *vec )
function vec_float4 (line 365) | static inline vec_float4 vmathSoaV3Sum( const VmathSoaVector3 *vec )
function vec_float4 (line 373) | static inline vec_float4 vmathSoaV3Dot( const VmathSoaVector3 *vec0, con...
function vec_float4 (line 382) | static inline vec_float4 vmathSoaV3LengthSqr( const VmathSoaVector3 *vec )
function vec_float4 (line 391) | static inline vec_float4 vmathSoaV3Length( const VmathSoaVector3 *vec )
function vmathSoaV3Normalize (line 396) | static inline void vmathSoaV3Normalize( VmathSoaVector3 *result, const V...
function vmathSoaV3Cross (line 406) | static inline void vmathSoaV3Cross( VmathSoaVector3 *result, const Vmath...
function vmathSoaV3Select (line 415) | static inline void vmathSoaV3Select( VmathSoaVector3 *result, const Vmat...
function vmathSoaV3Print (line 424) | static inline void vmathSoaV3Print( const VmathSoaVector3 *vec )
function vmathSoaV3Prints (line 438) | static inline void vmathSoaV3Prints( const VmathSoaVector3 *vec, const c...
function vmathSoaV4Copy (line 455) | static inline void vmathSoaV4Copy( VmathSoaVector4 *result, const VmathS...
function vmathSoaV4MakeFromElems (line 463) | static inline void vmathSoaV4MakeFromElems( VmathSoaVector4 *result, vec...
function vmathSoaV4MakeFromV3Scalar (line 471) | static inline void vmathSoaV4MakeFromV3Scalar( VmathSoaVector4 *result, ...
function vmathSoaV4MakeFromV3 (line 477) | static inline void vmathSoaV4MakeFromV3( VmathSoaVector4 *result, const ...
function vmathSoaV4MakeFromP3 (line 485) | static inline void vmathSoaV4MakeFromP3( VmathSoaVector4 *result, const ...
function vmathSoaV4MakeFromQ (line 493) | static inline void vmathSoaV4MakeFromQ( VmathSoaVector4 *result, const V...
function vmathSoaV4MakeFromScalar (line 501) | static inline void vmathSoaV4MakeFromScalar( VmathSoaVector4 *result, ve...
function vmathSoaV4MakeFromAos (line 509) | static inline void vmathSoaV4MakeFromAos( VmathSoaVector4 *result, const...
function vmathSoaV4MakeFrom4Aos (line 518) | static inline void vmathSoaV4MakeFrom4Aos( VmathSoaVector4 *result, cons...
function vmathSoaV4MakeXAxis (line 531) | static inline void vmathSoaV4MakeXAxis( VmathSoaVector4 *result )
function vmathSoaV4MakeYAxis (line 536) | static inline void vmathSoaV4MakeYAxis( VmathSoaVector4 *result )
function vmathSoaV4MakeZAxis (line 541) | static inline void vmathSoaV4MakeZAxis( VmathSoaVector4 *result )
function vmathSoaV4MakeWAxis (line 546) | static inline void vmathSoaV4MakeWAxis( VmathSoaVector4 *result )
function vmathSoaV4Lerp (line 551) | static inline void vmathSoaV4Lerp( VmathSoaVector4 *result, vec_float4 t...
function vmathSoaV4Slerp (line 559) | static inline void vmathSoaV4Slerp( VmathSoaVector4 *result, vec_float4 ...
function vmathSoaV4Get4Aos (line 575) | static inline void vmathSoaV4Get4Aos( const VmathSoaVector4 *vec, VmathV...
function vmathSoaV4StoreHalfFloats (line 588) | static inline void vmathSoaV4StoreHalfFloats( const VmathSoaVector4 *vec...
function vmathSoaV4SetXYZ (line 596) | static inline void vmathSoaV4SetXYZ( VmathSoaVector4 *result, const Vmat...
function vmathSoaV4GetXYZ (line 603) | static inline void vmathSoaV4GetXYZ( VmathSoaVector3 *result, const Vmat...
function vmathSoaV4SetX (line 608) | static inline void vmathSoaV4SetX( VmathSoaVector4 *result, vec_float4 _x )
function vec_float4 (line 613) | static inline vec_float4 vmathSoaV4GetX( const VmathSoaVector4 *vec )
function vmathSoaV4SetY (line 618) | static inline void vmathSoaV4SetY( VmathSoaVector4 *result, vec_float4 _y )
function vec_float4 (line 623) | static inline vec_float4 vmathSoaV4GetY( const VmathSoaVector4 *vec )
function vmathSoaV4SetZ (line 628) | static inline void vmathSoaV4SetZ( VmathSoaVector4 *result, vec_float4 _z )
function vec_float4 (line 633) | static inline vec_float4 vmathSoaV4GetZ( const VmathSoaVector4 *vec )
function vmathSoaV4SetW (line 638) | static inline void vmathSoaV4SetW( VmathSoaVector4 *result, vec_float4 _w )
function vec_float4 (line 643) | static inline vec_float4 vmathSoaV4GetW( const VmathSoaVector4 *vec )
function vmathSoaV4SetElem (line 648) | static inline void vmathSoaV4SetElem( VmathSoaVector4 *result, int idx, ...
function vec_float4 (line 653) | static inline vec_float4 vmathSoaV4GetElem( const VmathSoaVector4 *vec, ...
function vmathSoaV4Add (line 658) | static inline void vmathSoaV4Add( VmathSoaVector4 *result, const VmathSo...
function vmathSoaV4Sub (line 666) | static inline void vmathSoaV4Sub( VmathSoaVector4 *result, const VmathSo...
function vmathSoaV4ScalarMul (line 674) | static inline void vmathSoaV4ScalarMul( VmathSoaVector4 *result, const V...
function vmathSoaV4ScalarDiv (line 682) | static inline void vmathSoaV4ScalarDiv( VmathSoaVector4 *result, const V...
function vmathSoaV4Neg (line 690) | static inline void vmathSoaV4Neg( VmathSoaVector4 *result, const VmathSo...
function vmathSoaV4MulPerElem (line 698) | static inline void vmathSoaV4MulPerElem( VmathSoaVector4 *result, const ...
function vmathSoaV4DivPerElem (line 706) | static inline void vmathSoaV4DivPerElem( VmathSoaVector4 *result, const ...
function vmathSoaV4RecipPerElem (line 714) | static inline void vmathSoaV4RecipPerElem( VmathSoaVector4 *result, cons...
function vmathSoaV4SqrtPerElem (line 722) | static inline void vmathSoaV4SqrtPerElem( VmathSoaVector4 *result, const...
function vmathSoaV4RsqrtPerElem (line 730) | static inline void vmathSoaV4RsqrtPerElem( VmathSoaVector4 *result, cons...
function vmathSoaV4AbsPerElem (line 738) | static inline void vmathSoaV4AbsPerElem( VmathSoaVector4 *result, const ...
function vmathSoaV4CopySignPerElem (line 746) | static inline void vmathSoaV4CopySignPerElem( VmathSoaVector4 *result, c...
function vmathSoaV4MaxPerElem (line 754) | static inline void vmathSoaV4MaxPerElem( VmathSoaVector4 *result, const ...
function vec_float4 (line 762) | static inline vec_float4 vmathSoaV4MaxElem( const VmathSoaVector4 *vec )
function vmathSoaV4MinPerElem (line 771) | static inline void vmathSoaV4MinPerElem( VmathSoaVector4 *result, const ...
function vec_float4 (line 779) | static inline vec_float4 vmathSoaV4MinElem( const VmathSoaVector4 *vec )
function vec_float4 (line 788) | static inline vec_float4 vmathSoaV4Sum( const VmathSoaVector4 *vec )
function vec_float4 (line 797) | static inline vec_float4 vmathSoaV4Dot( const VmathSoaVector4 *vec0, con...
function vec_float4 (line 807) | static inline vec_float4 vmathSoaV4LengthSqr( const VmathSoaVector4 *vec )
function vec_float4 (line 817) | static inline vec_float4 vmathSoaV4Length( const VmathSoaVector4 *vec )
function vmathSoaV4Normalize (line 822) | static inline void vmathSoaV4Normalize( VmathSoaVector4 *result, const V...
function vmathSoaV4Select (line 833) | static inline void vmathSoaV4Select( VmathSoaVector4 *result, const Vmat...
function vmathSoaV4Print (line 843) | static inline void vmathSoaV4Print( const VmathSoaVector4 *vec )
function vmathSoaV4Prints (line 857) | static inline void vmathSoaV4Prints( const VmathSoaVector4 *vec, const c...
function vmathSoaP3Copy (line 874) | static inline void vmathSoaP3Copy( VmathSoaPoint3 *result, const VmathSo...
function vmathSoaP3MakeFromElems (line 881) | static inline void vmathSoaP3MakeFromElems( VmathSoaPoint3 *result, vec_...
function vmathSoaP3MakeFromV3 (line 888) | static inline void vmathSoaP3MakeFromV3( VmathSoaPoint3 *result, const V...
function vmathSoaP3MakeFromScalar (line 895) | static inline void vmathSoaP3MakeFromScalar( VmathSoaPoint3 *result, vec...
function vmathSoaP3MakeFromAos (line 902) | static inline void vmathSoaP3MakeFromAos( VmathSoaPoint3 *result, const ...
function vmathSoaP3MakeFrom4Aos (line 910) | static inline void vmathSoaP3MakeFrom4Aos( VmathSoaPoint3 *result, const...
function vmathSoaP3Lerp (line 922) | static inline void vmathSoaP3Lerp( VmathSoaPoint3 *result, vec_float4 t,...
function vmathSoaP3Get4Aos (line 930) | static inline void vmathSoaP3Get4Aos( const VmathSoaPoint3 *pnt, VmathPo...
function vmathSoaP3LoadXYZArray (line 941) | static inline void vmathSoaP3LoadXYZArray( VmathSoaPoint3 *vec, const ve...
function vmathSoaP3StoreXYZArray (line 955) | static inline void vmathSoaP3StoreXYZArray( const VmathSoaPoint3 *vec, v...
function vmathSoaP3StoreHalfFloats (line 969) | static inline void vmathSoaP3StoreHalfFloats( const VmathSoaPoint3 *pnt0...
function vmathSoaP3SetX (line 980) | static inline void vmathSoaP3SetX( VmathSoaPoint3 *result, vec_float4 _x )
function vec_float4 (line 985) | static inline vec_float4 vmathSoaP3GetX( const VmathSoaPoint3 *pnt )
function vmathSoaP3SetY (line 990) | static inline void vmathSoaP3SetY( VmathSoaPoint3 *result, vec_float4 _y )
function vec_float4 (line 995) | static inline vec_float4 vmathSoaP3GetY( const VmathSoaPoint3 *pnt )
function vmathSoaP3SetZ (line 1000) | static inline void vmathSoaP3SetZ( VmathSoaPoint3 *result, vec_float4 _z )
function vec_float4 (line 1005) | static inline vec_float4 vmathSoaP3GetZ( const VmathSoaPoint3 *pnt )
function vmathSoaP3SetElem (line 1010) | static inline void vmathSoaP3SetElem( VmathSoaPoint3 *result, int idx, v...
function vec_float4 (line 1015) | static inline vec_float4 vmathSoaP3GetElem( const VmathSoaPoint3 *pnt, i...
function vmathSoaP3Sub (line 1020) | static inline void vmathSoaP3Sub( VmathSoaVector3 *result, const VmathSo...
function vmathSoaP3AddV3 (line 1027) | static inline void vmathSoaP3AddV3( VmathSoaPoint3 *result, const VmathS...
function vmathSoaP3SubV3 (line 1034) | static inline void vmathSoaP3SubV3( VmathSoaPoint3 *result, const VmathS...
function vmathSoaP3MulPerElem (line 1041) | static inline void vmathSoaP3MulPerElem( VmathSoaPoint3 *result, const V...
function vmathSoaP3DivPerElem (line 1048) | static inline void vmathSoaP3DivPerElem( VmathSoaPoint3 *result, const V...
function vmathSoaP3RecipPerElem (line 1055) | static inline void vmathSoaP3RecipPerElem( VmathSoaPoint3 *result, const...
function vmathSoaP3SqrtPerElem (line 1062) | static inline void vmathSoaP3SqrtPerElem( VmathSoaPoint3 *result, const ...
function vmathSoaP3RsqrtPerElem (line 1069) | static inline void vmathSoaP3RsqrtPerElem( VmathSoaPoint3 *result, const...
function vmathSoaP3AbsPerElem (line 1076) | static inline void vmathSoaP3AbsPerElem( VmathSoaPoint3 *result, const V...
function vmathSoaP3CopySignPerElem (line 1083) | static inline void vmathSoaP3CopySignPerElem( VmathSoaPoint3 *result, co...
function vmathSoaP3MaxPerElem (line 1090) | static inline void vmathSoaP3MaxPerElem( VmathSoaPoint3 *result, const V...
function vec_float4 (line 1097) | static inline vec_float4 vmathSoaP3MaxElem( const VmathSoaPoint3 *pnt )
function vmathSoaP3MinPerElem (line 1105) | static inline void vmathSoaP3MinPerElem( VmathSoaPoint3 *result, const V...
function vec_float4 (line 1112) | static inline vec_float4 vmathSoaP3MinElem( const VmathSoaPoint3 *pnt )
function vec_float4 (line 1120) | static inline vec_float4 vmathSoaP3Sum( const VmathSoaPoint3 *pnt )
function vmathSoaP3Scale (line 1128) | static inline void vmathSoaP3Scale( VmathSoaPoint3 *result, const VmathS...
function vmathSoaP3NonUniformScale (line 1135) | static inline void vmathSoaP3NonUniformScale( VmathSoaPoint3 *result, co...
function vec_float4 (line 1142) | static inline vec_float4 vmathSoaP3Projection( const VmathSoaPoint3 *pnt...
function vec_float4 (line 1151) | static inline vec_float4 vmathSoaP3DistSqrFromOrigin( const VmathSoaPoin...
function vec_float4 (line 1158) | static inline vec_float4 vmathSoaP3DistFromOrigin( const VmathSoaPoint3 ...
function vec_float4 (line 1165) | static inline vec_float4 vmathSoaP3DistSqr( const VmathSoaPoint3 *pnt0, ...
function vec_float4 (line 1172) | static inline vec_float4 vmathSoaP3Dist( const VmathSoaPoint3 *pnt0, con...
function vmathSoaP3Select (line 1179) | static inline void vmathSoaP3Select( VmathSoaPoint3 *result, const Vmath...
function vmathSoaP3Print (line 1188) | static inline void vmathSoaP3Print( const VmathSoaPoint3 *pnt )
function vmathSoaP3Prints (line 1202) | static inline void vmathSoaP3Prints( const VmathSoaPoint3 *pnt, const ch...
FILE: samples/vectormath/ppu/c/vec_soa_v.h
function VmathSoaVector3 (line 67) | static inline VmathSoaVector3 vmathSoaV3MakeFromElems_V( vec_float4 _x, ...
function VmathSoaVector3 (line 74) | static inline VmathSoaVector3 vmathSoaV3MakeFromP3_V( VmathSoaPoint3 pnt )
function VmathSoaVector3 (line 81) | static inline VmathSoaVector3 vmathSoaV3MakeFromScalar_V( vec_float4 sca...
function VmathSoaVector3 (line 88) | static inline VmathSoaVector3 vmathSoaV3MakeFromAos_V( VmathVector3 vec )
function VmathSoaVector3 (line 95) | static inline VmathSoaVector3 vmathSoaV3MakeFrom4Aos_V( VmathVector3 vec...
function VmathSoaVector3 (line 102) | static inline VmathSoaVector3 vmathSoaV3MakeXAxis_V( )
function VmathSoaVector3 (line 109) | static inline VmathSoaVector3 vmathSoaV3MakeYAxis_V( )
function VmathSoaVector3 (line 116) | static inline VmathSoaVector3 vmathSoaV3MakeZAxis_V( )
function VmathSoaVector3 (line 123) | static inline VmathSoaVector3 vmathSoaV3Lerp_V( vec_float4 t, VmathSoaVe...
function VmathSoaVector3 (line 130) | static inline VmathSoaVector3 vmathSoaV3Slerp_V( vec_float4 t, VmathSoaV...
function vmathSoaV3Get4Aos_V (line 137) | static inline void vmathSoaV3Get4Aos_V( VmathSoaVector3 vec, VmathVector...
function vmathSoaV3LoadXYZArray_V (line 142) | static inline void vmathSoaV3LoadXYZArray_V( VmathSoaVector3 *vec, const...
function vmathSoaV3StoreXYZArray_V (line 147) | static inline void vmathSoaV3StoreXYZArray_V( VmathSoaVector3 vec, vec_f...
function vmathSoaV3StoreHalfFloats_V (line 152) | static inline void vmathSoaV3StoreHalfFloats_V( VmathSoaVector3 vec0, Vm...
function vmathSoaV3SetX_V (line 157) | static inline void vmathSoaV3SetX_V( VmathSoaVector3 *result, vec_float4...
function vec_float4 (line 162) | static inline vec_float4 vmathSoaV3GetX_V( VmathSoaVector3 vec )
function vmathSoaV3SetY_V (line 167) | static inline void vmathSoaV3SetY_V( VmathSoaVector3 *result, vec_float4...
function vec_float4 (line 172) | static inline vec_float4 vmathSoaV3GetY_V( VmathSoaVector3 vec )
function vmathSoaV3SetZ_V (line 177) | static inline void vmathSoaV3SetZ_V( VmathSoaVector3 *result, vec_float4...
function vec_float4 (line 182) | static inline vec_float4 vmathSoaV3GetZ_V( VmathSoaVector3 vec )
function vmathSoaV3SetElem_V (line 187) | static inline void vmathSoaV3SetElem_V( VmathSoaVector3 *result, int idx...
function vec_float4 (line 192) | static inline vec_float4 vmathSoaV3GetElem_V( VmathSoaVector3 vec, int i...
function VmathSoaVector3 (line 197) | static inline VmathSoaVector3 vmathSoaV3Add_V( VmathSoaVector3 vec0, Vma...
function VmathSoaVector3 (line 204) | static inline VmathSoaVector3 vmathSoaV3Sub_V( VmathSoaVector3 vec0, Vma...
function VmathSoaPoint3 (line 211) | static inline VmathSoaPoint3 vmathSoaV3AddP3_V( VmathSoaVector3 vec, Vma...
function VmathSoaVector3 (line 218) | static inline VmathSoaVector3 vmathSoaV3ScalarMul_V( VmathSoaVector3 vec...
function VmathSoaVector3 (line 225) | static inline VmathSoaVector3 vmathSoaV3ScalarDiv_V( VmathSoaVector3 vec...
function VmathSoaVector3 (line 232) | static inline VmathSoaVector3 vmathSoaV3Neg_V( VmathSoaVector3 vec )
function VmathSoaVector3 (line 239) | static inline VmathSoaVector3 vmathSoaV3MulPerElem_V( VmathSoaVector3 ve...
function VmathSoaVector3 (line 246) | static inline VmathSoaVector3 vmathSoaV3DivPerElem_V( VmathSoaVector3 ve...
function VmathSoaVector3 (line 253) | static inline VmathSoaVector3 vmathSoaV3RecipPerElem_V( VmathSoaVector3 ...
function VmathSoaVector3 (line 260) | static inline VmathSoaVector3 vmathSoaV3SqrtPerElem_V( VmathSoaVector3 v...
function VmathSoaVector3 (line 267) | static inline VmathSoaVector3 vmathSoaV3RsqrtPerElem_V( VmathSoaVector3 ...
function VmathSoaVector3 (line 274) | static inline VmathSoaVector3 vmathSoaV3AbsPerElem_V( VmathSoaVector3 vec )
function VmathSoaVector3 (line 281) | static inline VmathSoaVector3 vmathSoaV3CopySignPerElem_V( VmathSoaVecto...
function VmathSoaVector3 (line 288) | static inline VmathSoaVector3 vmathSoaV3MaxPerElem_V( VmathSoaVector3 ve...
function vec_float4 (line 295) | static inline vec_float4 vmathSoaV3MaxElem_V( VmathSoaVector3 vec )
function VmathSoaVector3 (line 300) | static inline VmathSoaVector3 vmathSoaV3MinPerElem_V( VmathSoaVector3 ve...
function vec_float4 (line 307) | static inline vec_float4 vmathSoaV3MinElem_V( VmathSoaVector3 vec )
function vec_float4 (line 312) | static inline vec_float4 vmathSoaV3Sum_V( VmathSoaVector3 vec )
function vec_float4 (line 317) | static inline vec_float4 vmathSoaV3Dot_V( VmathSoaVector3 vec0, VmathSoa...
function vec_float4 (line 322) | static inline vec_float4 vmathSoaV3LengthSqr_V( VmathSoaVector3 vec )
function vec_float4 (line 327) | static inline vec_float4 vmathSoaV3Length_V( VmathSoaVector3 vec )
function VmathSoaVector3 (line 332) | static inline VmathSoaVector3 vmathSoaV3Normalize_V( VmathSoaVector3 vec )
function VmathSoaVector3 (line 339) | static inline VmathSoaVector3 vmathSoaV3Cross_V( VmathSoaVector3 vec0, V...
function VmathSoaVector3 (line 346) | static inline VmathSoaVector3 vmathSoaV3Select_V( VmathSoaVector3 vec0, ...
function vmathSoaV3Print_V (line 355) | static inline void vmathSoaV3Print_V( VmathSoaVector3 vec )
function vmathSoaV3Prints_V (line 360) | static inline void vmathSoaV3Prints_V( VmathSoaVector3 vec, const char *...
function VmathSoaVector4 (line 367) | static inline VmathSoaVector4 vmathSoaV4MakeFromElems_V( vec_float4 _x, ...
function VmathSoaVector4 (line 374) | static inline VmathSoaVector4 vmathSoaV4MakeFromV3Scalar_V( VmathSoaVect...
function VmathSoaVector4 (line 381) | static inline VmathSoaVector4 vmathSoaV4MakeFromV3_V( VmathSoaVector3 vec )
function VmathSoaVector4 (line 388) | static inline VmathSoaVector4 vmathSoaV4MakeFromP3_V( VmathSoaPoint3 pnt )
function VmathSoaVector4 (line 395) | static inline VmathSoaVector4 vmathSoaV4MakeFromQ_V( VmathSoaQuat quat )
function VmathSoaVector4 (line 402) | static inline VmathSoaVector4 vmathSoaV4MakeFromScalar_V( vec_float4 sca...
function VmathSoaVector4 (line 409) | static inline VmathSoaVector4 vmathSoaV4MakeFromAos_V( VmathVector4 vec )
function VmathSoaVector4 (line 416) | static inline VmathSoaVector4 vmathSoaV4MakeFrom4Aos_V( VmathVector4 vec...
function VmathSoaVector4 (line 423) | static inline VmathSoaVector4 vmathSoaV4MakeXAxis_V( )
function VmathSoaVector4 (line 430) | static inline VmathSoaVector4 vmathSoaV4MakeYAxis_V( )
function VmathSoaVector4 (line 437) | static inline VmathSoaVector4 vmathSoaV4MakeZAxis_V( )
function VmathSoaVector4 (line 444) | static inline VmathSoaVector4 vmathSoaV4MakeWAxis_V( )
function VmathSoaVector4 (line 451) | static inline VmathSoaVector4 vmathSoaV4Lerp_V( vec_float4 t, VmathSoaVe...
function VmathSoaVector4 (line 458) | static inline VmathSoaVector4 vmathSoaV4Slerp_V( vec_float4 t, VmathSoaV...
function vmathSoaV4Get4Aos_V (line 465) | static inline void vmathSoaV4Get4Aos_V( VmathSoaVector4 vec, VmathVector...
function vmathSoaV4StoreHalfFloats_V (line 470) | static inline void vmathSoaV4StoreHalfFloats_V( VmathSoaVector4 vec, vec...
function vmathSoaV4SetXYZ_V (line 475) | static inline void vmathSoaV4SetXYZ_V( VmathSoaVector4 *result, VmathSoa...
function VmathSoaVector3 (line 480) | static inline VmathSoaVector3 vmathSoaV4GetXYZ_V( VmathSoaVector4 vec )
function vmathSoaV4SetX_V (line 487) | static inline void vmathSoaV4SetX_V( VmathSoaVector4 *result, vec_float4...
function vec_float4 (line 492) | static inline vec_float4 vmathSoaV4GetX_V( VmathSoaVector4 vec )
function vmathSoaV4SetY_V (line 497) | static inline void vmathSoaV4SetY_V( VmathSoaVector4 *result, vec_float4...
function vec_float4 (line 502) | static inline vec_float4 vmathSoaV4GetY_V( VmathSoaVector4 vec )
function vmathSoaV4SetZ_V (line 507) | static inline void vmathSoaV4SetZ_V( VmathSoaVector4 *result, vec_float4...
function vec_float4 (line 512) | static inline vec_float4 vmathSoaV4GetZ_V( VmathSoaVector4 vec )
function vmathSoaV4SetW_V (line 517) | static inline void vmathSoaV4SetW_V( VmathSoaVector4 *result, vec_float4...
function vec_float4 (line 522) | static inline vec_float4 vmathSoaV4GetW_V( VmathSoaVector4 vec )
function vmathSoaV4SetElem_V (line 527) | static inline void vmathSoaV4SetElem_V( VmathSoaVector4 *result, int idx...
function vec_float4 (line 532) | static inline vec_float4 vmathSoaV4GetElem_V( VmathSoaVector4 vec, int i...
function VmathSoaVector4 (line 537) | static inline VmathSoaVector4 vmathSoaV4Add_V( VmathSoaVector4 vec0, Vma...
function VmathSoaVector4 (line 544) | static inline VmathSoaVector4 vmathSoaV4Sub_V( VmathSoaVector4 vec0, Vma...
function VmathSoaVector4 (line 551) | static inline VmathSoaVector4 vmathSoaV4ScalarMul_V( VmathSoaVector4 vec...
function VmathSoaVector4 (line 558) | static inline VmathSoaVector4 vmathSoaV4ScalarDiv_V( VmathSoaVector4 vec...
function VmathSoaVector4 (line 565) | static inline VmathSoaVector4 vmathSoaV4Neg_V( VmathSoaVector4 vec )
function VmathSoaVector4 (line 572) | static inline VmathSoaVector4 vmathSoaV4MulPerElem_V( VmathSoaVector4 ve...
function VmathSoaVector4 (line 579) | static inline VmathSoaVector4 vmathSoaV4DivPerElem_V( VmathSoaVector4 ve...
function VmathSoaVector4 (line 586) | static inline VmathSoaVector4 vmathSoaV4RecipPerElem_V( VmathSoaVector4 ...
function VmathSoaVector4 (line 593) | static inline VmathSoaVector4 vmathSoaV4SqrtPerElem_V( VmathSoaVector4 v...
function VmathSoaVector4 (line 600) | static inline VmathSoaVector4 vmathSoaV4RsqrtPerElem_V( VmathSoaVector4 ...
function VmathSoaVector4 (line 607) | static inline VmathSoaVector4 vmathSoaV4AbsPerElem_V( VmathSoaVector4 vec )
function VmathSoaVector4 (line 614) | static inline VmathSoaVector4 vmathSoaV4CopySignPerElem_V( VmathSoaVecto...
function VmathSoaVector4 (line 621) | static inline VmathSoaVector4 vmathSoaV4MaxPerElem_V( VmathSoaVector4 ve...
function vec_float4 (line 628) | static inline vec_float4 vmathSoaV4MaxElem_V( VmathSoaVector4 vec )
function VmathSoaVector4 (line 633) | static inline VmathSoaVector4 vmathSoaV4MinPerElem_V( VmathSoaVector4 ve...
function vec_float4 (line 640) | static inline vec_float4 vmathSoaV4MinElem_V( VmathSoaVector4 vec )
function vec_float4 (line 645) | static inline vec_float4 vmathSoaV4Sum_V( VmathSoaVector4 vec )
function vec_float4 (line 650) | static inline vec_float4 vmathSoaV4Dot_V( VmathSoaVector4 vec0, VmathSoa...
function vec_float4 (line 655) | static inline vec_float4 vmathSoaV4LengthSqr_V( VmathSoaVector4 vec )
function vec_float4 (line 660) | static inline vec_float4 vmathSoaV4Length_V( VmathSoaVector4 vec )
function VmathSoaVector4 (line 665) | static inline VmathSoaVector4 vmathSoaV4Normalize_V( VmathSoaVector4 vec )
function VmathSoaVector4 (line 672) | static inline VmathSoaVector4 vmathSoaV4Select_V( VmathSoaVector4 vec0, ...
function vmathSoaV4Print_V (line 681) | static inline void vmathSoaV4Print_V( VmathSoaVector4 vec )
function vmathSoaV4Prints_V (line 686) | static inline void vmathSoaV4Prints_V( VmathSoaVector4 vec, const char *...
function VmathSoaPoint3 (line 693) | static inline VmathSoaPoint3 vmathSoaP3MakeFromElems_V( vec_float4 _x, v...
function VmathSoaPoint3 (line 700) | static inline VmathSoaPoint3 vmathSoaP3MakeFromV3_V( VmathSoaVector3 vec )
function VmathSoaPoint3 (line 707) | static inline VmathSoaPoint3 vmathSoaP3MakeFromScalar_V( vec_float4 scal...
function VmathSoaPoint3 (line 714) | static inline VmathSoaPoint3 vmathSoaP3MakeFromAos_V( VmathPoint3 pnt )
function VmathSoaPoint3 (line 721) | static inline VmathSoaPoint3 vmathSoaP3MakeFrom4Aos_V( VmathPoint3 pnt0,...
function VmathSoaPoint3 (line 728) | static inline VmathSoaPoint3 vmathSoaP3Lerp_V( vec_float4 t, VmathSoaPoi...
function vmathSoaP3Get4Aos_V (line 735) | static inline void vmathSoaP3Get4Aos_V( VmathSoaPoint3 pnt, VmathPoint3 ...
function vmathSoaP3LoadXYZArray_V (line 740) | static inline void vmathSoaP3LoadXYZArray_V( VmathSoaPoint3 *vec, const ...
function vmathSoaP3StoreXYZArray_V (line 745) | static inline void vmathSoaP3StoreXYZArray_V( VmathSoaPoint3 vec, vec_fl...
function vmathSoaP3StoreHalfFloats_V (line 750) | static inline void vmathSoaP3StoreHalfFloats_V( VmathSoaPoint3 pnt0, Vma...
function vmathSoaP3SetX_V (line 755) | static inline void vmathSoaP3SetX_V( VmathSoaPoint3 *result, vec_float4 ...
function vec_float4 (line 760) | static inline vec_float4 vmathSoaP3GetX_V( VmathSoaPoint3 pnt )
function vmathSoaP3SetY_V (line 765) | static inline void vmathSoaP3SetY_V( VmathSoaPoint3 *result, vec_float4 ...
function vec_float4 (line 770) | static inline vec_float4 vmathSoaP3GetY_V( VmathSoaPoint3 pnt )
function vmathSoaP3SetZ_V (line 775) | static inline void vmathSoaP3SetZ_V( VmathSoaPoint3 *result, vec_float4 ...
function vec_float4 (line 780) | static inline vec_float4 vmathSoaP3GetZ_V( VmathSoaPoint3 pnt )
function vmathSoaP3SetElem_V (line 785) | static inline void vmathSoaP3SetElem_V( VmathSoaPoint3 *result, int idx,...
function vec_float4 (line 790) | static inline vec_float4 vmathSoaP3GetElem_V( VmathSoaPoint3 pnt, int idx )
function VmathSoaVector3 (line 795) | static inline VmathSoaVector3 vmathSoaP3Sub_V( VmathSoaPoint3 pnt0, Vmat...
function VmathSoaPoint3 (line 802) | static inline VmathSoaPoint3 vmathSoaP3AddV3_V( VmathSoaPoint3 pnt, Vmat...
function VmathSoaPoint3 (line 809) | static inline VmathSoaPoint3 vmathSoaP3SubV3_V( VmathSoaPoint3 pnt, Vmat...
function VmathSoaPoint3 (line 816) | static inline VmathSoaPoint3 vmathSoaP3MulPerElem_V( VmathSoaPoint3 pnt0...
function VmathSoaPoint3 (line 823) | static inline VmathSoaPoint3 vmathSoaP3DivPerElem_V( VmathSoaPoint3 pnt0...
function VmathSoaPoint3 (line 830) | static inline VmathSoaPoint3 vmathSoaP3RecipPerElem_V( VmathSoaPoint3 pnt )
function VmathSoaPoint3 (line 837) | static inline VmathSoaPoint3 vmathSoaP3SqrtPerElem_V( VmathSoaPoint3 pnt )
function VmathSoaPoint3 (line 844) | static inline VmathSoaPoint3 vmathSoaP3RsqrtPerElem_V( VmathSoaPoint3 pnt )
function VmathSoaPoint3 (line 851) | static inline VmathSoaPoint3 vmathSoaP3AbsPerElem_V( VmathSoaPoint3 pnt )
function VmathSoaPoint3 (line 858) | static inline VmathSoaPoint3 vmathSoaP3CopySignPerElem_V( VmathSoaPoint3...
function VmathSoaPoint3 (line 865) | static inline VmathSoaPoint3 vmathSoaP3MaxPerElem_V( VmathSoaPoint3 pnt0...
function vec_float4 (line 872) | static inline vec_float4 vmathSoaP3MaxElem_V( VmathSoaPoint3 pnt )
function VmathSoaPoint3 (line 877) | static inline VmathSoaPoint3 vmathSoaP3MinPerElem_V( VmathSoaPoint3 pnt0...
function vec_float4 (line 884) | static inline vec_float4 vmathSoaP3MinElem_V( VmathSoaPoint3 pnt )
function vec_float4 (line 889) | static inline vec_float4 vmathSoaP3Sum_V( VmathSoaPoint3 pnt )
function VmathSoaPoint3 (line 894) | static inline VmathSoaPoint3 vmathSoaP3Scale_V( VmathSoaPoint3 pnt, vec_...
function VmathSoaPoint3 (line 901) | static inline VmathSoaPoint3 vmathSoaP3NonUniformScale_V( VmathSoaPoint3...
function vec_float4 (line 908) | static inline vec_float4 vmathSoaP3Projection_V( VmathSoaPoint3 pnt, Vma...
function vec_float4 (line 913) | static inline vec_float4 vmathSoaP3DistSqrFromOrigin_V( VmathSoaPoint3 p...
function vec_float4 (line 918) | static inline vec_float4 vmathSoaP3DistFromOrigin_V( VmathSoaPoint3 pnt )
function vec_float4 (line 923) | static inline vec_float4 vmathSoaP3DistSqr_V( VmathSoaPoint3 pnt0, Vmath...
function vec_float4 (line 928) | static inline vec_float4 vmathSoaP3Dist_V( VmathSoaPoint3 pnt0, VmathSoa...
function VmathSoaPoint3 (line 933) | static inline VmathSoaPoint3 vmathSoaP3Select_V( VmathSoaPoint3 pnt0, Vm...
function vmathSoaP3Print_V (line 942) | static inline void vmathSoaP3Print_V( VmathSoaPoint3 pnt )
function vmathSoaP3Prints_V (line 947) | static inline void vmathSoaP3Prints_V( VmathSoaPoint3 pnt, const char *n...
FILE: samples/vectormath/ppu/c/vectormath_aos.h
type VmathVector3 (line 51) | typedef struct _VmathVector3
type VmathVector4 (line 58) | typedef struct _VmathVector4
type VmathPoint3 (line 65) | typedef struct _VmathPoint3
type VmathQuat (line 72) | typedef struct _VmathQuat
type VmathMatrix3 (line 79) | typedef struct _VmathMatrix3
type VmathMatrix4 (line 88) | typedef struct _VmathMatrix4
type VmathTransform3 (line 98) | typedef struct _VmathTransform3
FILE: samples/vectormath/ppu/c/vectormath_aos_v.h
type VmathVector3 (line 50) | typedef struct _VmathVector3
type VmathVector4 (line 57) | typedef struct _VmathVector4
type VmathPoint3 (line 64) | typedef struct _VmathPoint3
type VmathQuat (line 71) | typedef struct _VmathQuat
type VmathMatrix3 (line 78) | typedef struct _VmathMatrix3
type VmathMatrix4 (line 87) | typedef struct _VmathMatrix4
type VmathTransform3 (line 97) | typedef struct _VmathTransform3
FILE: samples/vectormath/ppu/c/vectormath_soa.h
type VmathSoaVector3 (line 50) | typedef struct _VmathSoaVector3
type VmathSoaVector4 (line 59) | typedef struct _VmathSoaVector4
type VmathSoaPoint3 (line 69) | typedef struct _VmathSoaPoint3
type VmathSoaQuat (line 78) | typedef struct _VmathSoaQuat
type VmathSoaMatrix3 (line 88) | typedef struct _VmathSoaMatrix3
type VmathSoaMatrix4 (line 97) | typedef struct _VmathSoaMatrix4
type VmathSoaTransform3 (line 107) | typedef struct _VmathSoaTransform3
FILE: samples/vectormath/ppu/c/vectormath_soa_v.h
type VmathSoaVector3 (line 50) | typedef struct _VmathSoaVector3
type VmathSoaVector4 (line 59) | typedef struct _VmathSoaVector4
type VmathSoaPoint3 (line 69) | typedef struct _VmathSoaPoint3
type VmathSoaQuat (line 78) | typedef struct _VmathSoaQuat
type VmathSoaMatrix3 (line 88) | typedef struct _VmathSoaMatrix3
type VmathSoaMatrix4 (line 97) | typedef struct _VmathSoaMatrix4
type VmathSoaTransform3 (line 107) | typedef struct _VmathSoaTransform3
FILE: samples/vectormath/ppu/cpp/boolInVec.h
function boolInVec (line 129) | inline
function boolInVec (line 135) | inline
function boolInVec (line 141) | inline
function getAsBool (line 160) | inline
function boolInVec (line 217) | inline
function boolInVec (line 224) | inline
function boolInVec (line 231) | inline
function boolInVec (line 238) | inline
function boolInVec (line 245) | inline
function boolInVec (line 252) | inline
FILE: samples/vectormath/ppu/cpp/floatInVec.h
function floatInVec (line 138) | inline
function floatInVec (line 144) | inline
function floatInVec (line 150) | inline
function floatInVec (line 166) | inline
function getAsFloat (line 183) | inline
function floatInVec (line 201) | inline
function floatInVec (line 210) | inline
function floatInVec (line 219) | inline
function floatInVec (line 227) | inline
function floatInVec (line 235) | inline
function floatInVec (line 289) | inline
function floatInVec (line 296) | inline
function floatInVec (line 303) | inline
function boolInVec (line 310) | inline
function boolInVec (line 317) | inline
function boolInVec (line 324) | inline
function boolInVec (line 331) | inline
function boolInVec (line 338) | inline
function boolInVec (line 345) | inline
function floatInVec (line 352) | inline
FILE: samples/vectormath/ppu/cpp/mat_aos.h
function namespace (line 33) | namespace Vectormath {
FILE: samples/vectormath/ppu/cpp/mat_soa.h
function namespace (line 33) | namespace Vectormath {
FILE: samples/vectormath/ppu/cpp/quat_aos.h
function namespace (line 40) | namespace Vectormath {
FILE: samples/vectormath/ppu/cpp/quat_soa.h
function namespace (line 40) | namespace Vectormath {
FILE: samples/vectormath/ppu/cpp/vec_aos.h
function vec_float4 (line 67) | static inline vec_float4 _vmathVfDot3( vec_float4 vec0, vec_float4 vec1 )
function vec_float4 (line 75) | static inline vec_float4 _vmathVfDot4( vec_float4 vec0, vec_float4 vec1 )
function vec_float4 (line 83) | static inline vec_float4 _vmathVfCross( vec_float4 vec0, vec_float4 vec1 )
function vec_uint4 (line 95) | static inline vec_uint4 _vmathVfToHalfFloatsUnpacked(vec_float4 v)
function vec_ushort8 (line 122) | static inline vec_ushort8 _vmath2VfToHalfFloats(vec_float4 u, vec_float4 v)
function vec_float4 (line 135) | static inline vec_float4 _vmathVfInsert(vec_float4 dst, vec_float4 src, ...
function vec_float4 (line 166) | static inline vec_float4 _vmathVfSplatScalar(float scalar)
function vec_uint4 (line 178) | static inline vec_uint4 _vmathVuiSplatScalar(unsigned int scalar)
function namespace (line 192) | namespace Vectormath {
FILE: samples/vectormath/ppu/cpp/vec_soa.h
function namespace (line 63) | namespace Vectormath {
FILE: samples/vectormath/ppu/cpp/vecidx_aos.h
function namespace (line 36) | namespace Aos {
FILE: samples/vectormath/ppu/cpp/vectormath_soa.h
type vec_float4 (line 61) | typedef vec_float4 vec_float4_t;
type vec_float4 (line 348) | typedef vec_float4 vec_float4_t;
type vec_float4 (line 640) | typedef vec_float4 vec_float4_t;
type vec_float4 (line 872) | typedef vec_float4 vec_float4_t;
FILE: samples/vectormath/scalar/c/mat_aos.h
function vmathM3Copy (line 45) | static inline void vmathM3Copy( VmathMatrix3 *result, const VmathMatrix3...
function vmathM3MakeFromScalar (line 52) | static inline void vmathM3MakeFromScalar( VmathMatrix3 *result, float sc...
function vmathM3MakeFromQ (line 59) | static inline void vmathM3MakeFromQ( VmathMatrix3 *result, const VmathQu...
function vmathM3MakeFromCols (line 83) | static inline void vmathM3MakeFromCols( VmathMatrix3 *result, const Vmat...
function vmathM3SetCol0 (line 90) | static inline void vmathM3SetCol0( VmathMatrix3 *result, const VmathVect...
function vmathM3SetCol1 (line 95) | static inline void vmathM3SetCol1( VmathMatrix3 *result, const VmathVect...
function vmathM3SetCol2 (line 100) | static inline void vmathM3SetCol2( VmathMatrix3 *result, const VmathVect...
function vmathM3SetCol (line 105) | static inline void vmathM3SetCol( VmathMatrix3 *result, int col, const V...
function vmathM3SetRow (line 110) | static inline void vmathM3SetRow( VmathMatrix3 *result, int row, const V...
function vmathM3SetElem (line 117) | static inline void vmathM3SetElem( VmathMatrix3 *result, int col, int ro...
function vmathM3GetElem (line 125) | static inline float vmathM3GetElem( const VmathMatrix3 *mat, int col, in...
function vmathM3GetCol0 (line 132) | static inline void vmathM3GetCol0( VmathVector3 *result, const VmathMatr...
function vmathM3GetCol1 (line 137) | static inline void vmathM3GetCol1( VmathVector3 *result, const VmathMatr...
function vmathM3GetCol2 (line 142) | static inline void vmathM3GetCol2( VmathVector3 *result, const VmathMatr...
function vmathM3GetCol (line 147) | static inline void vmathM3GetCol( VmathVector3 *result, const VmathMatri...
function vmathM3GetRow (line 152) | static inline void vmathM3GetRow( VmathVector3 *result, const VmathMatri...
function vmathM3Transpose (line 157) | static inline void vmathM3Transpose( VmathMatrix3 *result, const VmathMa...
function vmathM3Inverse (line 166) | static inline void vmathM3Inverse( VmathMatrix3 *result, const VmathMatr...
function vmathM3Determinant (line 179) | static inline float vmathM3Determinant( const VmathMatrix3 *mat )
function vmathM3Add (line 186) | static inline void vmathM3Add( VmathMatrix3 *result, const VmathMatrix3 ...
function vmathM3Sub (line 193) | static inline void vmathM3Sub( VmathMatrix3 *result, const VmathMatrix3 ...
function vmathM3Neg (line 200) | static inline void vmathM3Neg( VmathMatrix3 *result, const VmathMatrix3 ...
function vmathM3AbsPerElem (line 207
Condensed preview — 124 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (3,994K chars).
[
{
"path": ".travis.yml",
"chars": 1017,
"preview": "language: cpp\n\nos:\n - linux\n - osx\n\ncompiler:\n - gcc\n - clang\n\nbefore_install:\n # GCC update for linux, to ensure"
},
{
"path": "README.md",
"chars": 8281,
"preview": "\n# Debug Draw\n\n[](https://travis-ci.org/glampert/debug-dra"
},
{
"path": "debug_draw.hpp",
"chars": 145634,
"preview": "\n// ================================================================================================\n// -*- C++ -*-\n// F"
},
{
"path": "samples/Makefile",
"chars": 3398,
"preview": "\n#------------------------------------------------\n# Brief: Makefile for the Debug Draw samples.\n#\n# Remarks:\n# - Tested"
},
{
"path": "samples/README.md",
"chars": 2414,
"preview": "\n### Debug Draw Samples\n\nThree sample programs showing basic usage of the Debug Draw library are currently provided:\n\n- "
},
{
"path": "samples/gl3w/README.rst",
"chars": 3347,
"preview": "========================================\ngl3w: Simple OpenGL core profile loading\n======================================"
},
{
"path": "samples/gl3w/UNLICENSE",
"chars": 1148,
"preview": "This is free and unencumbered software released into the public domain.\n\nAnyone is free to copy, modify, publish, use, c"
},
{
"path": "samples/gl3w/gl3w_gen.py",
"chars": 9334,
"preview": "#!/usr/bin/env python\n\n# This file is part of gl3w, hosted at https://github.com/skaslev/gl3w\n#\n# This is free and u"
},
{
"path": "samples/gl3w/include/GL/gl3w.h",
"chars": 117728,
"preview": "/*\n\n This file was generated with gl3w_gen.py, part of gl3w\n (hosted at https://github.com/skaslev/gl3w)\n\n This"
},
{
"path": "samples/gl3w/include/GL/glcorearb.h",
"chars": 240553,
"preview": "#ifndef __glcorearb_h_\n#define __glcorearb_h_ 1\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/*\n** Copyright (c) 2013-2015 T"
},
{
"path": "samples/gl3w/src/gl3w.cpp",
"chars": 157322,
"preview": "/*\n\n This file was generated with gl3w_gen.py, part of gl3w\n (hosted at https://github.com/skaslev/gl3w)\n\n This"
},
{
"path": "samples/sample_d3d11.cpp",
"chars": 38494,
"preview": "\n// ================================================================================================\n// -*- C++ -*-\n// F"
},
{
"path": "samples/sample_gl_core.cpp",
"chars": 26029,
"preview": "\n// ================================================================================================\n// -*- C++ -*-\n// F"
},
{
"path": "samples/sample_gl_core_multithreaded_explicit.cpp",
"chars": 28622,
"preview": "\n// ================================================================================================\n// -*- C++ -*-\n// F"
},
{
"path": "samples/sample_gl_core_multithreaded_tls.cpp",
"chars": 28639,
"preview": "\n// ================================================================================================\n// -*- C++ -*-\n// F"
},
{
"path": "samples/sample_gl_legacy.cpp",
"chars": 15692,
"preview": "\n// ================================================================================================\n// -*- C++ -*-\n// F"
},
{
"path": "samples/sample_null_renderer.cpp",
"chars": 880,
"preview": "\n// ================================================================================================\n// -*- C++ -*-\n// F"
},
{
"path": "samples/samples_common.hpp",
"chars": 17166,
"preview": "\n// ================================================================================================\n// -*- C++ -*-\n// F"
},
{
"path": "samples/vectormath/LICENSE",
"chars": 1793,
"preview": " Vector Math library for 3-D linear algebra (vector, matrix, quaternion)\n SIMD support for SSE, PowerPC (PPU) and the "
},
{
"path": "samples/vectormath/SSE/cpp/boolInVec.h",
"chars": 7277,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/SSE/cpp/defines.h",
"chars": 966,
"preview": "\n// ================================================================================================\n// -*- C++ -*-\n// F"
},
{
"path": "samples/vectormath/SSE/cpp/floatInVec.h",
"chars": 8892,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/SSE/cpp/mat_aos.h",
"chars": 71270,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/SSE/cpp/quat_aos.h",
"chars": 15536,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/SSE/cpp/vec_aos.h",
"chars": 35762,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/SSE/cpp/vecidx_aos.h",
"chars": 3175,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/SSE/cpp/vectormath_aos.h",
"chars": 80541,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/c/vectormath_aos.h",
"chars": 1926,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/c/vectormath_aos_v.h",
"chars": 1936,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/c/vectormath_soa.h",
"chars": 1907,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/c/vectormath_soa_v.h",
"chars": 1915,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/cpp/vectormath_aos.h",
"chars": 2020,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/cpp/vectormath_soa.h",
"chars": 1915,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/ppu/c/mat_aos.h",
"chars": 75282,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/ppu/c/mat_aos_v.h",
"chars": 28139,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/ppu/c/mat_soa.h",
"chars": 82896,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/ppu/c/mat_soa_v.h",
"chars": 29720,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/ppu/c/quat_aos.h",
"chars": 14342,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/ppu/c/quat_aos_v.h",
"chars": 7755,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/ppu/c/quat_soa.h",
"chars": 19041,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/ppu/c/quat_soa_v.h",
"chars": 8783,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/ppu/c/vec_aos.h",
"chars": 38442,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/ppu/c/vec_aos_v.h",
"chars": 24417,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/ppu/c/vec_soa.h",
"chars": 45063,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/ppu/c/vec_soa_v.h",
"chars": 26478,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/ppu/c/vec_types.h",
"chars": 2339,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/ppu/c/vectormath_aos.h",
"chars": 59166,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/ppu/c/vectormath_aos_v.h",
"chars": 53426,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/ppu/c/vectormath_soa.h",
"chars": 64060,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/ppu/c/vectormath_soa_v.h",
"chars": 58058,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/ppu/cpp/boolInVec.h",
"chars": 7083,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/ppu/cpp/floatInVec.h",
"chars": 8968,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/ppu/cpp/mat_aos.h",
"chars": 70087,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/ppu/cpp/mat_soa.h",
"chars": 70773,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/ppu/cpp/quat_aos.h",
"chars": 15856,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/ppu/cpp/quat_soa.h",
"chars": 17200,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/ppu/cpp/vec_aos.h",
"chars": 40346,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/ppu/cpp/vec_soa.h",
"chars": 40393,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/ppu/cpp/vecidx_aos.h",
"chars": 3172,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/ppu/cpp/vectormath_aos.h",
"chars": 70316,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/ppu/cpp/vectormath_soa.h",
"chars": 57697,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/scalar/c/mat_aos.h",
"chars": 56168,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/scalar/c/mat_aos_v.h",
"chars": 25438,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/scalar/c/quat_aos.h",
"chars": 11881,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/scalar/c/quat_aos_v.h",
"chars": 7515,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/scalar/c/vec_aos.h",
"chars": 28181,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/scalar/c/vec_aos_v.h",
"chars": 19865,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/scalar/c/vectormath_aos.h",
"chars": 54914,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/scalar/c/vectormath_aos_v.h",
"chars": 49456,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/scalar/cpp/mat_aos.h",
"chars": 46202,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/scalar/cpp/quat_aos.h",
"chars": 10813,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/scalar/cpp/vec_aos.h",
"chars": 26249,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/scalar/cpp/vectormath_aos.h",
"chars": 52208,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/spu/c/mat_aos.h",
"chars": 79274,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/spu/c/mat_aos_v.h",
"chars": 28556,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/spu/c/mat_soa.h",
"chars": 68321,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/spu/c/mat_soa_v.h",
"chars": 29720,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/spu/c/quat_aos.h",
"chars": 13732,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/spu/c/quat_aos_v.h",
"chars": 7755,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/spu/c/quat_soa.h",
"chars": 16618,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/spu/c/quat_soa_v.h",
"chars": 8783,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/spu/c/vec_aos.h",
"chars": 34907,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/spu/c/vec_aos_v.h",
"chars": 24325,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/spu/c/vec_soa.h",
"chars": 43889,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/spu/c/vec_soa_v.h",
"chars": 26933,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/spu/c/vectormath_aos.h",
"chars": 58436,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/spu/c/vectormath_aos_v.h",
"chars": 52705,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/spu/c/vectormath_soa.h",
"chars": 64048,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/spu/c/vectormath_soa_v.h",
"chars": 58046,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/spu/cpp/boolInVec.h",
"chars": 6693,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/spu/cpp/floatInVec.h",
"chars": 8303,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/spu/cpp/mat_aos.h",
"chars": 70157,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/spu/cpp/mat_soa.h",
"chars": 56198,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/spu/cpp/quat_aos.h",
"chars": 12702,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/spu/cpp/quat_soa.h",
"chars": 14777,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/spu/cpp/vec_aos.h",
"chars": 31497,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/spu/cpp/vec_soa.h",
"chars": 39219,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/spu/cpp/vecidx_aos.h",
"chars": 2551,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/spu/cpp/vectormath_aos.h",
"chars": 52926,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/spu/cpp/vectormath_soa.h",
"chars": 57751,
"preview": "/*\n Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.\n All rights reserved.\n\n Redistribution and use in so"
},
{
"path": "samples/vectormath/vectormath.h",
"chars": 2108,
"preview": "\n// ================================================================================================\n// -*- C++ -*-\n// F"
},
{
"path": "samples/vs2015/ddSampleD3D11/ddSampleD3D11.filters",
"chars": 1079,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
},
{
"path": "samples/vs2015/ddSampleD3D11/ddSampleD3D11.sln",
"chars": 921,
"preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 14\nVisualStudioVersion = 14.0.25420.1\nMini"
},
{
"path": "samples/vs2015/ddSampleD3D11/ddSampleD3D11.vcxproj",
"chars": 9058,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.micros"
},
{
"path": "samples/vs2015/ddSampleD3D11/ddShader.fx",
"chars": 1907,
"preview": "\n///////////////////////////////////////////////////////////////////////////////\n\nTexture2D glyphsTexture : register("
},
{
"path": "samples/vs2015/ddSampleGLCore/ddSampleGLCore.sln",
"chars": 1279,
"preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 14\nVisualStudioVersion = 14.0.23107.0\nMini"
},
{
"path": "samples/vs2015/ddSampleGLCore/ddSampleGLCore.vcxproj",
"chars": 9139,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.micros"
},
{
"path": "samples/vs2015/ddSampleGLCore/ddSampleGLCore.vcxproj.filters",
"chars": 1397,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
},
{
"path": "samples/vs2015/ddSampleGLLegacy/ddSampleGLCore.vcxproj",
"chars": 9137,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.micros"
},
{
"path": "samples/vs2015/ddSampleGLLegacy/ddSampleGLCore.vcxproj.filters",
"chars": 1296,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
},
{
"path": "samples/vs2015/ddSampleGLLegacy/ddSampleGLLegacy.sln",
"chars": 1279,
"preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 14\nVisualStudioVersion = 14.0.23107.0\nMini"
},
{
"path": "samples/vs2015/ddSampleNullRenderer/ddSampleNullRenderer.sln",
"chars": 1291,
"preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 14\nVisualStudioVersion = 14.0.23107.0\nMini"
},
{
"path": "samples/vs2015/ddSampleNullRenderer/ddSampleNullRenderer.vcxproj",
"chars": 7490,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.micros"
},
{
"path": "samples/vs2015/ddSampleNullRenderer/ddSampleNullRenderer.vcxproj.filters",
"chars": 1087,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
},
{
"path": "samples/vs2015/glfw-3.2-WIN32/COPYING.txt",
"chars": 928,
"preview": "Copyright (c) 2002-2006 Marcus Geelnard\nCopyright (c) 2006-2016 Camilla Berglund <elmindreda@glfw.org>\n\nThis software is"
},
{
"path": "samples/vs2015/glfw-3.2-WIN32/include/GLFW/glfw3.h",
"chars": 151829,
"preview": "/*************************************************************************\n * GLFW 3.2 - www.glfw.org\n * A library for O"
},
{
"path": "samples/vs2015/glfw-3.2-WIN32/include/GLFW/glfw3native.h",
"chars": 13594,
"preview": "/*************************************************************************\n * GLFW 3.2 - www.glfw.org\n * A library for O"
},
{
"path": "samples/vs2015/glfw-3.2-WIN64/COPYING.txt",
"chars": 928,
"preview": "Copyright (c) 2002-2006 Marcus Geelnard\nCopyright (c) 2006-2016 Camilla Berglund <elmindreda@glfw.org>\n\nThis software is"
},
{
"path": "samples/vs2015/glfw-3.2-WIN64/include/GLFW/glfw3.h",
"chars": 151829,
"preview": "/*************************************************************************\n * GLFW 3.2 - www.glfw.org\n * A library for O"
},
{
"path": "samples/vs2015/glfw-3.2-WIN64/include/GLFW/glfw3native.h",
"chars": 13594,
"preview": "/*************************************************************************\n * GLFW 3.2 - www.glfw.org\n * A library for O"
}
]
// ... and 4 more files (download for full content)
About this extraction
This page contains the full source code of the glampert/debug-draw GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 124 files (3.7 MB), approximately 971.6k tokens, and a symbol index with 3944 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.