X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=include%2Fipatch.h;h=300a0a751c200da62bfcbc3ecca26a9b39356249;hb=48d505dff553cb1e4e2af6b3634de6fee1ec9651;hp=48ce39b5b640a4aab5c15a660a4f4810d5918381;hpb=0d98822b3c7232c4859c9605653685a7dab86ba8;p=xonotic%2Fnetradiant.git diff --git a/include/ipatch.h b/include/ipatch.h index 48ce39b5..300a0a75 100644 --- a/include/ipatch.h +++ b/include/ipatch.h @@ -1,6 +1,6 @@ /* -Copyright (C) 2001-2006, William Joseph. -All Rights Reserved. +Copyright (C) 1999-2007 id Software, Inc. and contributors. +For a list of contributors, see the accompanying CONTRIBUTORS file. This file is part of GtkRadiant. @@ -19,274 +19,35 @@ along with GtkRadiant; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#if !defined(INCLUDED_IPATCH_H) -#define INCLUDED_IPATCH_H +#ifndef _IPATCH_H_ +#define _IPATCH_H_ -#include "generic/constant.h" -#include "generic/vector.h" +// +// API for patch stuff +// -namespace scene -{ - class Node; -} - -template -class ArrayReference -{ - std::size_t m_size; - Element* m_data; -public: - typedef Element value_type; - typedef value_type* iterator; - typedef const value_type* const_iterator; +#define PATCH_MAJOR "patch" +// {4715565b-ab3a-49fa-841f-ee965b6d88a5} +static const GUID QERPatchTable_GUID = +{ 0x4715565b, 0xab3a, 0x49fa, { 0x84, 0x1f, 0xee, 0x96, 0x5b, 0x6d, 0x88, 0xa5 } }; - ArrayReference() - : m_size(0), m_data(0) - { - } - ArrayReference(std::size_t size, Element* data) - : m_size(size), m_data(data) - { - } +typedef patchMesh_t* (* PFN_PATCHALLOC) (); +typedef patchMesh_t* (* PFN_MAKENEWPATCH) (); +typedef brush_t* (* PFN_ADDBRUSHFORPATCH) (patchMesh_t *pm, bool bLinkToWorld ); - iterator begin() - { - return m_data; - } - const_iterator begin() const - { - return m_data; - } - iterator end() - { - return m_data + m_size; - } - const_iterator end() const - { - return m_data + m_size; - } - - value_type& operator[](std::size_t index) - { -#if defined(_DEBUG) - ASSERT_MESSAGE(index < size(), "array index out of bounds"); -#endif - return m_data[index]; - } - const value_type& operator[](std::size_t index) const - { -#if defined(_DEBUG) - ASSERT_MESSAGE(index < size(), "array index out of bounds"); -#endif - return m_data[index]; - } - value_type* data() - { - return m_data; - } - const value_type* data() const - { - return m_data; - } - std::size_t size() const - { - return m_size; - } - bool empty() const - { - return m_size == 0; - } -}; - -#if 0 -template -class MatrixIterator +struct _QERPatchTable { - Element* m_position; - - void increment() - { - ++m_position; - } - -public: - typedef std::bidirectional_iterator_tag iterator_category; - typedef std::ptrdiff_t difference_type; - typedef difference_type distance_type; - typedef KeyValue value_type; - typedef value_type* pointer; - typedef value_type& reference; - - MatrixIterator(Element* position) : m_position(position) - { - } - - Element* position() - { - return m_position; - } - - bool operator==(const MatrixIterator& other) const - { - return m_position == other.m_position; - } - bool operator!=(const MatrixIterator& other) const - { - return !operator==(other); - } - MatrixIterator& operator++() - { - increment(); - return *this; - } - MatrixIterator operator++(int) - { - MatrixIterator tmp = *this; - increment(); - return tmp; - } - value_type& operator*() const - { - return m_position->m_value; - } - value_type* operator->() const - { - return &(operator*()); - } + int m_nSize; + PFN_PATCHALLOC m_pfnPatch_Alloc; + PFN_MAKENEWPATCH m_pfnMakeNewPatch; + PFN_ADDBRUSHFORPATCH m_pfnAddBrushForPatch; }; -#endif - -template -class Matrix -{ - std::size_t m_x, m_y; - Element* m_data; -public: - typedef Element value_type; - typedef value_type* iterator; - typedef const value_type* const_iterator; - - Matrix() - : m_x(0), m_y(0), m_data(0) - { - } - Matrix(std::size_t x, std::size_t y, Element* data) - : m_x(x), m_y(y), m_data(data) - { - } - - iterator begin() - { - return m_data; - } - const_iterator begin() const - { - return m_data; - } - iterator end() - { - return m_data + size(); - } - const_iterator end() const - { - return m_data + size(); - } - value_type& operator[](std::size_t index) - { -#if defined(_DEBUG) - ASSERT_MESSAGE(index < size(), "array index out of bounds"); +#ifdef USE_PATCHTABLE_DEFINE +#define __PATCHTABLENAME g_PatchTable +#define Patch_Alloc __PATCHTABLENAME.m_pfnPatch_Alloc +#define MakeNewPatch __PATCHTABLENAME.m_pfnMakeNewPatch +#define AddBrushForPatch __PATCHTABLENAME.m_pfnAddBrushForPatch #endif - return m_data[index]; - } - const value_type& operator[](std::size_t index) const - { -#if defined(_DEBUG) - ASSERT_MESSAGE(index < size(), "array index out of bounds"); -#endif - return m_data[index]; - } - value_type& operator()(std::size_t x, std::size_t y) - { -#if defined(_DEBUG) - ASSERT_MESSAGE(x < m_x && y < m_y, "array index out of bounds"); -#endif - return m_data[x * m_y + y]; - } - const value_type& operator()(std::size_t x, std::size_t y) const - { -#if defined(_DEBUG) - ASSERT_MESSAGE(x < m_x && y < m_y, "array index out of bounds"); -#endif - return m_data[x * m_y + y]; - } - value_type* data() - { - return m_data; - } - const value_type* data() const - { - return m_data; - } - std::size_t x() const - { - return m_x; - } - std::size_t y() const - { - return m_y; - } - std::size_t size() const - { - return m_x * m_y; - } - bool empty() const - { - return m_x == 0; - } -}; - -class PatchControl -{ -public: - Vector3 m_vertex; - Vector2 m_texcoord; -}; - -typedef Matrix PatchControlMatrix; - - -class PatchCreator -{ -public: - INTEGER_CONSTANT(Version, 1); - STRING_CONSTANT(Name, "patch"); - virtual scene::Node& createPatch() = 0; - virtual void Patch_undoSave(scene::Node& patch) const = 0; - virtual void Patch_resize(scene::Node& patch, std::size_t width, std::size_t height) const = 0; - virtual PatchControlMatrix Patch_getControlPoints(scene::Node& patch) const = 0; - virtual void Patch_controlPointsChanged(scene::Node& patch) const = 0; - virtual const char* Patch_getShader(scene::Node& patch) const = 0; - virtual void Patch_setShader(scene::Node& patch, const char* shader) const = 0; -}; - -#include "modulesystem.h" - -template -class ModuleRef; -typedef ModuleRef PatchModuleRef; - -template -class GlobalModule; -typedef GlobalModule GlobalPatchModule; - -template -class GlobalModuleRef; -typedef GlobalModuleRef GlobalPatchModuleRef; - -inline PatchCreator& GlobalPatchCreator() -{ - return GlobalPatchModule::getTable(); -} #endif