mirror of
https://github.com/dpethes/rerogue.git
synced 2025-06-07 18:58:32 +02:00
model viewer: include SDL2 headers
This commit is contained in:
parent
1aff4888ab
commit
87cfb0f1cf
@ -15,6 +15,8 @@ syntax: glob
|
|||||||
*.hmt
|
*.hmt
|
||||||
*.HOB
|
*.HOB
|
||||||
*.HMT
|
*.HMT
|
||||||
|
*_HOB
|
||||||
|
*_HMT
|
||||||
*.text
|
*.text
|
||||||
*.tex
|
*.tex
|
||||||
*.pgm
|
*.pgm
|
||||||
@ -22,4 +24,8 @@ syntax: glob
|
|||||||
*.pnm
|
*.pnm
|
||||||
*.tga
|
*.tga
|
||||||
*.raw
|
*.raw
|
||||||
|
*.dat
|
||||||
|
*.hdr
|
||||||
|
*.DAT
|
||||||
|
*.HDR
|
||||||
imgui.ini
|
imgui.ini
|
373
model_viewer/sdl2/LICENSE
Normal file
373
model_viewer/sdl2/LICENSE
Normal file
@ -0,0 +1,373 @@
|
|||||||
|
Mozilla Public License Version 2.0
|
||||||
|
==================================
|
||||||
|
|
||||||
|
1. Definitions
|
||||||
|
--------------
|
||||||
|
|
||||||
|
1.1. "Contributor"
|
||||||
|
means each individual or legal entity that creates, contributes to
|
||||||
|
the creation of, or owns Covered Software.
|
||||||
|
|
||||||
|
1.2. "Contributor Version"
|
||||||
|
means the combination of the Contributions of others (if any) used
|
||||||
|
by a Contributor and that particular Contributor's Contribution.
|
||||||
|
|
||||||
|
1.3. "Contribution"
|
||||||
|
means Covered Software of a particular Contributor.
|
||||||
|
|
||||||
|
1.4. "Covered Software"
|
||||||
|
means Source Code Form to which the initial Contributor has attached
|
||||||
|
the notice in Exhibit A, the Executable Form of such Source Code
|
||||||
|
Form, and Modifications of such Source Code Form, in each case
|
||||||
|
including portions thereof.
|
||||||
|
|
||||||
|
1.5. "Incompatible With Secondary Licenses"
|
||||||
|
means
|
||||||
|
|
||||||
|
(a) that the initial Contributor has attached the notice described
|
||||||
|
in Exhibit B to the Covered Software; or
|
||||||
|
|
||||||
|
(b) that the Covered Software was made available under the terms of
|
||||||
|
version 1.1 or earlier of the License, but not also under the
|
||||||
|
terms of a Secondary License.
|
||||||
|
|
||||||
|
1.6. "Executable Form"
|
||||||
|
means any form of the work other than Source Code Form.
|
||||||
|
|
||||||
|
1.7. "Larger Work"
|
||||||
|
means a work that combines Covered Software with other material, in
|
||||||
|
a separate file or files, that is not Covered Software.
|
||||||
|
|
||||||
|
1.8. "License"
|
||||||
|
means this document.
|
||||||
|
|
||||||
|
1.9. "Licensable"
|
||||||
|
means having the right to grant, to the maximum extent possible,
|
||||||
|
whether at the time of the initial grant or subsequently, any and
|
||||||
|
all of the rights conveyed by this License.
|
||||||
|
|
||||||
|
1.10. "Modifications"
|
||||||
|
means any of the following:
|
||||||
|
|
||||||
|
(a) any file in Source Code Form that results from an addition to,
|
||||||
|
deletion from, or modification of the contents of Covered
|
||||||
|
Software; or
|
||||||
|
|
||||||
|
(b) any new file in Source Code Form that contains any Covered
|
||||||
|
Software.
|
||||||
|
|
||||||
|
1.11. "Patent Claims" of a Contributor
|
||||||
|
means any patent claim(s), including without limitation, method,
|
||||||
|
process, and apparatus claims, in any patent Licensable by such
|
||||||
|
Contributor that would be infringed, but for the grant of the
|
||||||
|
License, by the making, using, selling, offering for sale, having
|
||||||
|
made, import, or transfer of either its Contributions or its
|
||||||
|
Contributor Version.
|
||||||
|
|
||||||
|
1.12. "Secondary License"
|
||||||
|
means either the GNU General Public License, Version 2.0, the GNU
|
||||||
|
Lesser General Public License, Version 2.1, the GNU Affero General
|
||||||
|
Public License, Version 3.0, or any later versions of those
|
||||||
|
licenses.
|
||||||
|
|
||||||
|
1.13. "Source Code Form"
|
||||||
|
means the form of the work preferred for making modifications.
|
||||||
|
|
||||||
|
1.14. "You" (or "Your")
|
||||||
|
means an individual or a legal entity exercising rights under this
|
||||||
|
License. For legal entities, "You" includes any entity that
|
||||||
|
controls, is controlled by, or is under common control with You. For
|
||||||
|
purposes of this definition, "control" means (a) the power, direct
|
||||||
|
or indirect, to cause the direction or management of such entity,
|
||||||
|
whether by contract or otherwise, or (b) ownership of more than
|
||||||
|
fifty percent (50%) of the outstanding shares or beneficial
|
||||||
|
ownership of such entity.
|
||||||
|
|
||||||
|
2. License Grants and Conditions
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
|
2.1. Grants
|
||||||
|
|
||||||
|
Each Contributor hereby grants You a world-wide, royalty-free,
|
||||||
|
non-exclusive license:
|
||||||
|
|
||||||
|
(a) under intellectual property rights (other than patent or trademark)
|
||||||
|
Licensable by such Contributor to use, reproduce, make available,
|
||||||
|
modify, display, perform, distribute, and otherwise exploit its
|
||||||
|
Contributions, either on an unmodified basis, with Modifications, or
|
||||||
|
as part of a Larger Work; and
|
||||||
|
|
||||||
|
(b) under Patent Claims of such Contributor to make, use, sell, offer
|
||||||
|
for sale, have made, import, and otherwise transfer either its
|
||||||
|
Contributions or its Contributor Version.
|
||||||
|
|
||||||
|
2.2. Effective Date
|
||||||
|
|
||||||
|
The licenses granted in Section 2.1 with respect to any Contribution
|
||||||
|
become effective for each Contribution on the date the Contributor first
|
||||||
|
distributes such Contribution.
|
||||||
|
|
||||||
|
2.3. Limitations on Grant Scope
|
||||||
|
|
||||||
|
The licenses granted in this Section 2 are the only rights granted under
|
||||||
|
this License. No additional rights or licenses will be implied from the
|
||||||
|
distribution or licensing of Covered Software under this License.
|
||||||
|
Notwithstanding Section 2.1(b) above, no patent license is granted by a
|
||||||
|
Contributor:
|
||||||
|
|
||||||
|
(a) for any code that a Contributor has removed from Covered Software;
|
||||||
|
or
|
||||||
|
|
||||||
|
(b) for infringements caused by: (i) Your and any other third party's
|
||||||
|
modifications of Covered Software, or (ii) the combination of its
|
||||||
|
Contributions with other software (except as part of its Contributor
|
||||||
|
Version); or
|
||||||
|
|
||||||
|
(c) under Patent Claims infringed by Covered Software in the absence of
|
||||||
|
its Contributions.
|
||||||
|
|
||||||
|
This License does not grant any rights in the trademarks, service marks,
|
||||||
|
or logos of any Contributor (except as may be necessary to comply with
|
||||||
|
the notice requirements in Section 3.4).
|
||||||
|
|
||||||
|
2.4. Subsequent Licenses
|
||||||
|
|
||||||
|
No Contributor makes additional grants as a result of Your choice to
|
||||||
|
distribute the Covered Software under a subsequent version of this
|
||||||
|
License (see Section 10.2) or under the terms of a Secondary License (if
|
||||||
|
permitted under the terms of Section 3.3).
|
||||||
|
|
||||||
|
2.5. Representation
|
||||||
|
|
||||||
|
Each Contributor represents that the Contributor believes its
|
||||||
|
Contributions are its original creation(s) or it has sufficient rights
|
||||||
|
to grant the rights to its Contributions conveyed by this License.
|
||||||
|
|
||||||
|
2.6. Fair Use
|
||||||
|
|
||||||
|
This License is not intended to limit any rights You have under
|
||||||
|
applicable copyright doctrines of fair use, fair dealing, or other
|
||||||
|
equivalents.
|
||||||
|
|
||||||
|
2.7. Conditions
|
||||||
|
|
||||||
|
Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
|
||||||
|
in Section 2.1.
|
||||||
|
|
||||||
|
3. Responsibilities
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
3.1. Distribution of Source Form
|
||||||
|
|
||||||
|
All distribution of Covered Software in Source Code Form, including any
|
||||||
|
Modifications that You create or to which You contribute, must be under
|
||||||
|
the terms of this License. You must inform recipients that the Source
|
||||||
|
Code Form of the Covered Software is governed by the terms of this
|
||||||
|
License, and how they can obtain a copy of this License. You may not
|
||||||
|
attempt to alter or restrict the recipients' rights in the Source Code
|
||||||
|
Form.
|
||||||
|
|
||||||
|
3.2. Distribution of Executable Form
|
||||||
|
|
||||||
|
If You distribute Covered Software in Executable Form then:
|
||||||
|
|
||||||
|
(a) such Covered Software must also be made available in Source Code
|
||||||
|
Form, as described in Section 3.1, and You must inform recipients of
|
||||||
|
the Executable Form how they can obtain a copy of such Source Code
|
||||||
|
Form by reasonable means in a timely manner, at a charge no more
|
||||||
|
than the cost of distribution to the recipient; and
|
||||||
|
|
||||||
|
(b) You may distribute such Executable Form under the terms of this
|
||||||
|
License, or sublicense it under different terms, provided that the
|
||||||
|
license for the Executable Form does not attempt to limit or alter
|
||||||
|
the recipients' rights in the Source Code Form under this License.
|
||||||
|
|
||||||
|
3.3. Distribution of a Larger Work
|
||||||
|
|
||||||
|
You may create and distribute a Larger Work under terms of Your choice,
|
||||||
|
provided that You also comply with the requirements of this License for
|
||||||
|
the Covered Software. If the Larger Work is a combination of Covered
|
||||||
|
Software with a work governed by one or more Secondary Licenses, and the
|
||||||
|
Covered Software is not Incompatible With Secondary Licenses, this
|
||||||
|
License permits You to additionally distribute such Covered Software
|
||||||
|
under the terms of such Secondary License(s), so that the recipient of
|
||||||
|
the Larger Work may, at their option, further distribute the Covered
|
||||||
|
Software under the terms of either this License or such Secondary
|
||||||
|
License(s).
|
||||||
|
|
||||||
|
3.4. Notices
|
||||||
|
|
||||||
|
You may not remove or alter the substance of any license notices
|
||||||
|
(including copyright notices, patent notices, disclaimers of warranty,
|
||||||
|
or limitations of liability) contained within the Source Code Form of
|
||||||
|
the Covered Software, except that You may alter any license notices to
|
||||||
|
the extent required to remedy known factual inaccuracies.
|
||||||
|
|
||||||
|
3.5. Application of Additional Terms
|
||||||
|
|
||||||
|
You may choose to offer, and to charge a fee for, warranty, support,
|
||||||
|
indemnity or liability obligations to one or more recipients of Covered
|
||||||
|
Software. However, You may do so only on Your own behalf, and not on
|
||||||
|
behalf of any Contributor. You must make it absolutely clear that any
|
||||||
|
such warranty, support, indemnity, or liability obligation is offered by
|
||||||
|
You alone, and You hereby agree to indemnify every Contributor for any
|
||||||
|
liability incurred by such Contributor as a result of warranty, support,
|
||||||
|
indemnity or liability terms You offer. You may include additional
|
||||||
|
disclaimers of warranty and limitations of liability specific to any
|
||||||
|
jurisdiction.
|
||||||
|
|
||||||
|
4. Inability to Comply Due to Statute or Regulation
|
||||||
|
---------------------------------------------------
|
||||||
|
|
||||||
|
If it is impossible for You to comply with any of the terms of this
|
||||||
|
License with respect to some or all of the Covered Software due to
|
||||||
|
statute, judicial order, or regulation then You must: (a) comply with
|
||||||
|
the terms of this License to the maximum extent possible; and (b)
|
||||||
|
describe the limitations and the code they affect. Such description must
|
||||||
|
be placed in a text file included with all distributions of the Covered
|
||||||
|
Software under this License. Except to the extent prohibited by statute
|
||||||
|
or regulation, such description must be sufficiently detailed for a
|
||||||
|
recipient of ordinary skill to be able to understand it.
|
||||||
|
|
||||||
|
5. Termination
|
||||||
|
--------------
|
||||||
|
|
||||||
|
5.1. The rights granted under this License will terminate automatically
|
||||||
|
if You fail to comply with any of its terms. However, if You become
|
||||||
|
compliant, then the rights granted under this License from a particular
|
||||||
|
Contributor are reinstated (a) provisionally, unless and until such
|
||||||
|
Contributor explicitly and finally terminates Your grants, and (b) on an
|
||||||
|
ongoing basis, if such Contributor fails to notify You of the
|
||||||
|
non-compliance by some reasonable means prior to 60 days after You have
|
||||||
|
come back into compliance. Moreover, Your grants from a particular
|
||||||
|
Contributor are reinstated on an ongoing basis if such Contributor
|
||||||
|
notifies You of the non-compliance by some reasonable means, this is the
|
||||||
|
first time You have received notice of non-compliance with this License
|
||||||
|
from such Contributor, and You become compliant prior to 30 days after
|
||||||
|
Your receipt of the notice.
|
||||||
|
|
||||||
|
5.2. If You initiate litigation against any entity by asserting a patent
|
||||||
|
infringement claim (excluding declaratory judgment actions,
|
||||||
|
counter-claims, and cross-claims) alleging that a Contributor Version
|
||||||
|
directly or indirectly infringes any patent, then the rights granted to
|
||||||
|
You by any and all Contributors for the Covered Software under Section
|
||||||
|
2.1 of this License shall terminate.
|
||||||
|
|
||||||
|
5.3. In the event of termination under Sections 5.1 or 5.2 above, all
|
||||||
|
end user license agreements (excluding distributors and resellers) which
|
||||||
|
have been validly granted by You or Your distributors under this License
|
||||||
|
prior to termination shall survive termination.
|
||||||
|
|
||||||
|
************************************************************************
|
||||||
|
* *
|
||||||
|
* 6. Disclaimer of Warranty *
|
||||||
|
* ------------------------- *
|
||||||
|
* *
|
||||||
|
* Covered Software is provided under this License on an "as is" *
|
||||||
|
* basis, without warranty of any kind, either expressed, implied, or *
|
||||||
|
* statutory, including, without limitation, warranties that the *
|
||||||
|
* Covered Software is free of defects, merchantable, fit for a *
|
||||||
|
* particular purpose or non-infringing. The entire risk as to the *
|
||||||
|
* quality and performance of the Covered Software is with You. *
|
||||||
|
* Should any Covered Software prove defective in any respect, You *
|
||||||
|
* (not any Contributor) assume the cost of any necessary servicing, *
|
||||||
|
* repair, or correction. This disclaimer of warranty constitutes an *
|
||||||
|
* essential part of this License. No use of any Covered Software is *
|
||||||
|
* authorized under this License except under this disclaimer. *
|
||||||
|
* *
|
||||||
|
************************************************************************
|
||||||
|
|
||||||
|
************************************************************************
|
||||||
|
* *
|
||||||
|
* 7. Limitation of Liability *
|
||||||
|
* -------------------------- *
|
||||||
|
* *
|
||||||
|
* Under no circumstances and under no legal theory, whether tort *
|
||||||
|
* (including negligence), contract, or otherwise, shall any *
|
||||||
|
* Contributor, or anyone who distributes Covered Software as *
|
||||||
|
* permitted above, be liable to You for any direct, indirect, *
|
||||||
|
* special, incidental, or consequential damages of any character *
|
||||||
|
* including, without limitation, damages for lost profits, loss of *
|
||||||
|
* goodwill, work stoppage, computer failure or malfunction, or any *
|
||||||
|
* and all other commercial damages or losses, even if such party *
|
||||||
|
* shall have been informed of the possibility of such damages. This *
|
||||||
|
* limitation of liability shall not apply to liability for death or *
|
||||||
|
* personal injury resulting from such party's negligence to the *
|
||||||
|
* extent applicable law prohibits such limitation. Some *
|
||||||
|
* jurisdictions do not allow the exclusion or limitation of *
|
||||||
|
* incidental or consequential damages, so this exclusion and *
|
||||||
|
* limitation may not apply to You. *
|
||||||
|
* *
|
||||||
|
************************************************************************
|
||||||
|
|
||||||
|
8. Litigation
|
||||||
|
-------------
|
||||||
|
|
||||||
|
Any litigation relating to this License may be brought only in the
|
||||||
|
courts of a jurisdiction where the defendant maintains its principal
|
||||||
|
place of business and such litigation shall be governed by laws of that
|
||||||
|
jurisdiction, without reference to its conflict-of-law provisions.
|
||||||
|
Nothing in this Section shall prevent a party's ability to bring
|
||||||
|
cross-claims or counter-claims.
|
||||||
|
|
||||||
|
9. Miscellaneous
|
||||||
|
----------------
|
||||||
|
|
||||||
|
This License represents the complete agreement concerning the subject
|
||||||
|
matter hereof. If any provision of this License is held to be
|
||||||
|
unenforceable, such provision shall be reformed only to the extent
|
||||||
|
necessary to make it enforceable. Any law or regulation which provides
|
||||||
|
that the language of a contract shall be construed against the drafter
|
||||||
|
shall not be used to construe this License against a Contributor.
|
||||||
|
|
||||||
|
10. Versions of the License
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
10.1. New Versions
|
||||||
|
|
||||||
|
Mozilla Foundation is the license steward. Except as provided in Section
|
||||||
|
10.3, no one other than the license steward has the right to modify or
|
||||||
|
publish new versions of this License. Each version will be given a
|
||||||
|
distinguishing version number.
|
||||||
|
|
||||||
|
10.2. Effect of New Versions
|
||||||
|
|
||||||
|
You may distribute the Covered Software under the terms of the version
|
||||||
|
of the License under which You originally received the Covered Software,
|
||||||
|
or under the terms of any subsequent version published by the license
|
||||||
|
steward.
|
||||||
|
|
||||||
|
10.3. Modified Versions
|
||||||
|
|
||||||
|
If you create software not governed by this License, and you want to
|
||||||
|
create a new license for such software, you may create and use a
|
||||||
|
modified version of this License if you rename the license and remove
|
||||||
|
any references to the name of the license steward (except to note that
|
||||||
|
such modified license differs from this License).
|
||||||
|
|
||||||
|
10.4. Distributing Source Code Form that is Incompatible With Secondary
|
||||||
|
Licenses
|
||||||
|
|
||||||
|
If You choose to distribute Source Code Form that is Incompatible With
|
||||||
|
Secondary Licenses under the terms of this version of the License, the
|
||||||
|
notice described in Exhibit B of this License must be attached.
|
||||||
|
|
||||||
|
Exhibit A - Source Code Form License Notice
|
||||||
|
-------------------------------------------
|
||||||
|
|
||||||
|
This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
If it is not possible or desirable to put the notice in a particular
|
||||||
|
file, then You may include the notice in a location (such as a LICENSE
|
||||||
|
file in a relevant directory) where a recipient would be likely to look
|
||||||
|
for such a notice.
|
||||||
|
|
||||||
|
You may add additional accurate notices of copyright ownership.
|
||||||
|
|
||||||
|
Exhibit B - "Incompatible With Secondary Licenses" Notice
|
||||||
|
---------------------------------------------------------
|
||||||
|
|
||||||
|
This Source Code Form is "Incompatible With Secondary Licenses", as
|
||||||
|
defined by the Mozilla Public License, v. 2.0.
|
4
model_viewer/sdl2/README.md
Normal file
4
model_viewer/sdl2/README.md
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
Pascal-SDL-2-Headers
|
||||||
|
====================
|
||||||
|
|
||||||
|
This are the Pascal SDL 2 Headers.
|
559
model_viewer/sdl2/SDL2_gfx.pas
Normal file
559
model_viewer/sdl2/SDL2_gfx.pas
Normal file
@ -0,0 +1,559 @@
|
|||||||
|
unit SDL2_gfx;
|
||||||
|
|
||||||
|
(*
|
||||||
|
|
||||||
|
SDL2_framerate.h: framerate manager
|
||||||
|
SDL2_gfxPrimitives.h: graphics primitives for SDL
|
||||||
|
SDL2_imageFilter.h: byte-image "filter" routines
|
||||||
|
SDL2_rotozoom.h: rotozoomer, zoomer and shrinker for 32bit or 8bit surfaces
|
||||||
|
|
||||||
|
Copyright (C) 2001-2012 Andreas Schiffler
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
|
||||||
|
3. This notice may not be removed or altered from any source
|
||||||
|
distribution.
|
||||||
|
|
||||||
|
Andreas Schiffler -- aschiffler at ferzkopp dot net
|
||||||
|
|
||||||
|
*)
|
||||||
|
|
||||||
|
{$INCLUDE jedi.inc}
|
||||||
|
|
||||||
|
interface
|
||||||
|
uses SDL2;
|
||||||
|
|
||||||
|
const
|
||||||
|
{$IFDEF WINDOWS}
|
||||||
|
GFX_LibName = 'SDL2_gfx.dll';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF UNIX}
|
||||||
|
{$IFDEF DARWIN}
|
||||||
|
GFX_LibName = 'libSDL2_gfx.dylib';
|
||||||
|
{$ELSE}
|
||||||
|
{$IFDEF FPC}
|
||||||
|
GFX_LibName = 'libSDL2_gfx.so';
|
||||||
|
{$ELSE}
|
||||||
|
GFX_LibName = 'libSDL2_gfx.so.0';
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF MACOS}
|
||||||
|
GFX_LibName = 'SDL2_gfx';
|
||||||
|
{$IFDEF FPC}
|
||||||
|
{$linklib libSDL2_gfx}
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IF DEFINED(DELPHI) AND DEFINED(MACOS)}
|
||||||
|
{$DEFINE DELMAC}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
Procedure SDL_GFX_VERSION(Out X: TSDL_Version);
|
||||||
|
|
||||||
|
{---< SDL2_framerate.h >---}
|
||||||
|
|
||||||
|
Const
|
||||||
|
{*!
|
||||||
|
\brief Highest possible rate supported by framerate controller in Hz (1/s).
|
||||||
|
*}
|
||||||
|
FPS_UPPER_LIMIT = 200;
|
||||||
|
|
||||||
|
{*!
|
||||||
|
\brief Lowest possible rate supported by framerate controller in Hz (1/s).
|
||||||
|
*}
|
||||||
|
FPS_LOWER_LIMIT = 1;
|
||||||
|
|
||||||
|
{*!
|
||||||
|
\brief Default rate of framerate controller in Hz (1/s).
|
||||||
|
*}
|
||||||
|
FPS_DEFAULT = 30;
|
||||||
|
|
||||||
|
Type
|
||||||
|
{*!
|
||||||
|
\brief Structure holding the state and timing information of the framerate controller.
|
||||||
|
*}
|
||||||
|
|
||||||
|
TFPSManager = record
|
||||||
|
framecount : uInt32;
|
||||||
|
rateticks : Single; // float rateticks;
|
||||||
|
baseticks : uInt32;
|
||||||
|
lastticks : uInt32;
|
||||||
|
rate : uInt32;
|
||||||
|
end;
|
||||||
|
|
||||||
|
PFPSManager = ^TFPSManager;
|
||||||
|
|
||||||
|
Procedure SDL_initFramerate(manager: PFPSManager);
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_SDL_initFramerate' {$ENDIF};
|
||||||
|
|
||||||
|
Function SDL_setFramerate(manager: PFPSManager; rate: uInt32):sInt32;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_SDL_setFramerate' {$ENDIF};
|
||||||
|
|
||||||
|
Function SDL_getFramerate(manager: PFPSManager):sInt32;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_SDL_getFramerate' {$ENDIF};
|
||||||
|
|
||||||
|
Function SDL_getFramecount(manager: PFPSManager):sInt32;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_SDL_getFramecount' {$ENDIF};
|
||||||
|
|
||||||
|
Function SDL_framerateDelay(manager: PFPSManager):uInt32;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_SDL_framerateDelay' {$ENDIF};
|
||||||
|
|
||||||
|
|
||||||
|
{---< SDL2_gfxPrimitives.h >---}
|
||||||
|
|
||||||
|
Const
|
||||||
|
SDL2_GFXPRIMITIVES_MAJOR = 1;
|
||||||
|
SDL2_GFXPRIMITIVES_MINOR = 0;
|
||||||
|
SDL2_GFXPRIMITIVES_MICRO = 1;
|
||||||
|
|
||||||
|
(* Note: all ___Color routines expect the colour to be in format 0xRRGGBBAA *)
|
||||||
|
|
||||||
|
|
||||||
|
{* Pixel *}
|
||||||
|
|
||||||
|
Function pixelColor(renderer: PSDL_Renderer; x, y: sInt16; colour: uInt32):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_pixelColor' {$ENDIF};
|
||||||
|
|
||||||
|
Function pixelRGBA(renderer: PSDL_Renderer; x, y: sInt16; r, g, b, a: uInt8):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_pixelRGBA' {$ENDIF};
|
||||||
|
|
||||||
|
{ Horizontal line }
|
||||||
|
|
||||||
|
Function hlineColor(renderer: PSDL_Renderer; x1, x2, y: sInt16; colour: uInt32):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_hlineColor' {$ENDIF};
|
||||||
|
|
||||||
|
Function hlineRGBA(renderer: PSDL_Renderer; x1, x2, y:sInt16; r, g, b, a: uInt8):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_hlineRGBA' {$ENDIF};
|
||||||
|
|
||||||
|
{ Vertical line }
|
||||||
|
|
||||||
|
Function vlineColor(renderer: PSDL_Renderer; x, y1, y2: sInt16; colour: uInt32):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_vlineColor' {$ENDIF};
|
||||||
|
|
||||||
|
Function vlineRGBA(renderer: PSDL_Renderer; x, y1, y2: sInt16; r, g, b, a: uInt8):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_vlineRGBA' {$ENDIF};
|
||||||
|
|
||||||
|
{ Rectangle }
|
||||||
|
|
||||||
|
Function rectangleColor(renderer: PSDL_Renderer; x1, y1, x2, y2: sInt16; colour: uInt32):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_rectangleColor' {$ENDIF};
|
||||||
|
|
||||||
|
Function rectangleRGBA(renderer: PSDL_Renderer; x1, y1, x2, y2: sInt16; r, g, b, a: uInt8):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_rectangleRGBA' {$ENDIF};
|
||||||
|
|
||||||
|
{ Rounded-Corner Rectangle }
|
||||||
|
|
||||||
|
Function roundedRectangleColor(renderer: PSDL_Renderer; x1, y1, x2, y2, rad: sInt16; colour: uInt32):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_roundedRectangleColor' {$ENDIF};
|
||||||
|
|
||||||
|
Function roundedRectangleRGBA(renderer: PSDL_Renderer; x1, y1, x2, y2, rad: sInt16; r, g, b, a: uInt8):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_roundedRectangleRGBA' {$ENDIF};
|
||||||
|
|
||||||
|
{ Filled rectangle (Box) }
|
||||||
|
|
||||||
|
Function boxColor(renderer: PSDL_Renderer; x1, y1, x2, y2: sInt16; colour: uInt32):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_boxColor' {$ENDIF};
|
||||||
|
|
||||||
|
Function boxRGBA(renderer: PSDL_Renderer; x1, y1, x2, y2: sInt16; r, g, b, a: uInt8):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_boxRGBA' {$ENDIF};
|
||||||
|
|
||||||
|
{ Rounded-Corner Filled rectangle (Box) }
|
||||||
|
|
||||||
|
Function roundedBoxColor(renderer: PSDL_Renderer; x1, y1, x2, y2, rad: sInt16; colour: uInt32):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_roundedBoxColor' {$ENDIF};
|
||||||
|
|
||||||
|
Function roundedBoxRGBA(renderer: PSDL_Renderer; x1, y1, x2, y2, rad: sInt16; r, g, b, a: uInt8):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_roundedBoxRGBA' {$ENDIF};
|
||||||
|
|
||||||
|
{ Line }
|
||||||
|
|
||||||
|
Function lineColor(renderer: PSDL_Renderer; x1, y1, x2, y2: sInt16; colour: uInt32):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_lineColor' {$ENDIF};
|
||||||
|
|
||||||
|
Function lineRGBA(renderer: PSDL_Renderer; x1, y1, x2, y2: sInt16; r, g, b, a: uInt8):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_lineRGBA' {$ENDIF};
|
||||||
|
|
||||||
|
{ AA Line }
|
||||||
|
|
||||||
|
Function aalineColor(renderer: PSDL_Renderer; x1, y1, x2, y2: sInt16; colour: uInt32):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_aalineColor' {$ENDIF};
|
||||||
|
|
||||||
|
Function aalineRGBA(renderer: PSDL_Renderer; x1, y1, x2, y2: sInt16; r, g, b, a: uInt8):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_aalineRGBA' {$ENDIF};
|
||||||
|
|
||||||
|
{ Thick Line }
|
||||||
|
Function thickLineColor(renderer: PSDL_Renderer; x1, y1, x2, y2: sInt16; width: uInt8; colour: uInt32):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_thickLineColor' {$ENDIF};
|
||||||
|
|
||||||
|
Function thickLineRGBA(renderer: PSDL_Renderer; x1, y1, x2, y2: sInt16; width, r, g, b, a: uInt8):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_thickLineRGBA' {$ENDIF};
|
||||||
|
|
||||||
|
{ Circle }
|
||||||
|
|
||||||
|
Function circleColor(renderer: PSDL_Renderer; x, y, rad: sInt16; colour: uInt32):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_circleColor' {$ENDIF};
|
||||||
|
|
||||||
|
Function circleRGBA(renderer: PSDL_Renderer; x, y, rad: sInt16; r, g, b, a: uInt8):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_circleRGBA' {$ENDIF};
|
||||||
|
|
||||||
|
{ Arc }
|
||||||
|
|
||||||
|
Function arcColor(renderer: PSDL_Renderer; x, y, rad, start, finish: sInt16; colour: uInt32):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_arcColor' {$ENDIF};
|
||||||
|
|
||||||
|
Function arcRGBA(renderer: PSDL_Renderer; x, y, rad, start, finish: sInt16; r, g, b, a: uInt8):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_arcRGBA' {$ENDIF};
|
||||||
|
|
||||||
|
{ AA Circle }
|
||||||
|
|
||||||
|
Function aacircleColor(renderer: PSDL_Renderer; x, y, rad: sInt16; colour: uInt32):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_aacircleColor' {$ENDIF};
|
||||||
|
|
||||||
|
Function aacircleRGBA(renderer: PSDL_Renderer; x, y, rad: sInt16; r, g, b, a: uInt8):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_aacircleRGBA' {$ENDIF};
|
||||||
|
|
||||||
|
{ Filled Circle }
|
||||||
|
|
||||||
|
Function filledCircleColor(renderer: PSDL_Renderer; x, y, rad: sInt16; colour: uInt32):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_filledCircleColor' {$ENDIF};
|
||||||
|
|
||||||
|
Function filledCircleRGBA(renderer: PSDL_Renderer; x, y, rad: sInt16; r, g, b, a: uInt8):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_filledCircleRGBA' {$ENDIF};
|
||||||
|
|
||||||
|
{ Ellipse }
|
||||||
|
|
||||||
|
Function ellipseColor(renderer: PSDL_Renderer; x, y, rx, ry: sInt16; colour: uInt32):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_ellipseColor' {$ENDIF};
|
||||||
|
|
||||||
|
Function ellipseRGBA(renderer: PSDL_Renderer; x, y, rx, ry: sInt16; r, g, b, a: uInt8):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_ellipseRGBA' {$ENDIF};
|
||||||
|
|
||||||
|
{ AA Ellipse }
|
||||||
|
|
||||||
|
Function aaellipseColor(renderer: PSDL_Renderer; x, y, rx, ry: sInt16; colour: uInt32):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_aaellipseColor' {$ENDIF};
|
||||||
|
|
||||||
|
Function aaellipseRGBA(renderer: PSDL_Renderer; x, y, rx, ry: sInt16; r, g, b, a: uInt8):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_aaellipseRGBA' {$ENDIF};
|
||||||
|
|
||||||
|
{ Filled Ellipse }
|
||||||
|
|
||||||
|
Function filledEllipseColor(renderer: PSDL_Renderer; x, y, rx, ry: sInt16; colour: uInt32):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_filledEllipseColor' {$ENDIF};
|
||||||
|
|
||||||
|
Function filledEllipseRGBA(renderer: PSDL_Renderer; x, y, rx, ry: sInt16; r, g, b, a: uInt8):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_filledEllipseRGBA' {$ENDIF};
|
||||||
|
|
||||||
|
{ Pie }
|
||||||
|
|
||||||
|
Function pieColor(renderer: PSDL_Renderer; x, y, rad, start, finish: sInt16; colour: uInt32):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_pieColor' {$ENDIF};
|
||||||
|
|
||||||
|
Function pieRGBA(renderer: PSDL_Renderer; x, y, rad, start, finish: sInt16; r, g, b, a: uInt8):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_pieRGBA' {$ENDIF};
|
||||||
|
|
||||||
|
{ Filled Pie }
|
||||||
|
|
||||||
|
Function filledPieColor(renderer: PSDL_Renderer; x, y, rad, start, finish: sInt16; colour: uInt32):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_filledPieColor' {$ENDIF};
|
||||||
|
|
||||||
|
Function filledPieRGBA(renderer: PSDL_Renderer; x, y, rad, start, finish: sInt16; r, g, b, a: uInt8):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_filledPieRGBA' {$ENDIF};
|
||||||
|
|
||||||
|
{ Trigon }
|
||||||
|
|
||||||
|
Function trigonColor(renderer: PSDL_Renderer; x1, y1, x2, y2, x3, y3: sInt16; colour: uInt32):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_trigonColor' {$ENDIF};
|
||||||
|
|
||||||
|
Function trigonRGBA(renderer: PSDL_Renderer; x1, y1, x2, y2, x3, y3: sInt16; r, g, b, a: uInt8):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_trigonRGBA' {$ENDIF};
|
||||||
|
|
||||||
|
{ AA-Trigon }
|
||||||
|
|
||||||
|
Function aatrigonColor(renderer: PSDL_Renderer; x1, y1, x2, y2, x3, y3: sInt16; colour: uInt32):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_aatrigonColor' {$ENDIF};
|
||||||
|
|
||||||
|
Function aatrigonRGBA(renderer: PSDL_Renderer; x1, y1, x2, y2, x3, y3: sInt16; r, g, b, a: uInt8):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_aatrigonRGBA' {$ENDIF};
|
||||||
|
|
||||||
|
{ Filled Trigon }
|
||||||
|
|
||||||
|
Function filledTrigonColor(renderer: PSDL_Renderer; x1, y1, x2, y2, x3, y3: sInt16; colour: uInt32):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_filledTrigonColor' {$ENDIF};
|
||||||
|
|
||||||
|
Function filledTrigonRGBA(renderer: PSDL_Renderer; x1, y1, x2, y2, x3, y3: sInt16; r, g, b, a: uInt8):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_filledTrigonRGBA' {$ENDIF};
|
||||||
|
|
||||||
|
{ Polygon }
|
||||||
|
|
||||||
|
Function polygonColor(renderer: PSDL_Renderer; Const vx, vy: PsInt16; n: sInt32; colour: uInt32):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_polygonColor' {$ENDIF};
|
||||||
|
|
||||||
|
Function polygonRGBA(renderer: PSDL_Renderer; Const vx, vy: PsInt16; n: sInt32; r, g, b, a: uInt8):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_polugonRGBA' {$ENDIF};
|
||||||
|
|
||||||
|
{ AA-Polygon }
|
||||||
|
|
||||||
|
Function aapolygonColor(renderer: PSDL_Renderer; Const vx, vy: PsInt16; n: sInt32; colour: uInt32):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_aapolygonColor' {$ENDIF};
|
||||||
|
|
||||||
|
Function aapolygonRGBA(renderer: PSDL_Renderer; Const vx, vy: PsInt16; n: sInt32; r, g, b, a: uInt8):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_aapolygonRGBA' {$ENDIF};
|
||||||
|
|
||||||
|
{ Filled Polygon }
|
||||||
|
|
||||||
|
Function filledPolygonColor(renderer: PSDL_Renderer; Const vx, vy: PsInt16; n: sInt32; colour: uInt32):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_filledPolygonColor' {$ENDIF};
|
||||||
|
|
||||||
|
Function filledPolygonRGBA(renderer: PSDL_Renderer; Const vx, vy: PsInt16; n: sInt32; r, g, b, a: uInt8):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_filledPolygonRGBA' {$ENDIF};
|
||||||
|
|
||||||
|
{ Textured Polygon }
|
||||||
|
|
||||||
|
Function texturedPolygon(renderer: PSDL_Renderer; Const vx, vy: PsInt16; n: sInt32; texture: PSDL_Surface; texture_dx, texture_dy: sInt32):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_texturedPolygon' {$ENDIF};
|
||||||
|
|
||||||
|
{ Bezier }
|
||||||
|
|
||||||
|
Function bezierColor(renderer: PSDL_Renderer; Const vx, vy: PsInt16; n, s: sInt32; colour: uInt32):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_bezierColor' {$ENDIF};
|
||||||
|
|
||||||
|
Function bezierRGBA(renderer: PSDL_Renderer; Const vx, vy: PsInt16; n, s: sInt32; r, g, b, a: uInt8):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_bezierRGBA' {$ENDIF};
|
||||||
|
|
||||||
|
{ Characters/Strings }
|
||||||
|
|
||||||
|
Procedure gfxPrimitivesSetFont(Const fontdata: Pointer; cw, ch: uInt32); cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_gfxPrimitivesSetFont' {$ENDIF};
|
||||||
|
|
||||||
|
Procedure gfxPrimitivesSetFontRotation(rotation: uInt32); cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_gfxPrimitivesSetFontRotation' {$ENDIF};
|
||||||
|
|
||||||
|
|
||||||
|
Function characterColor(renderer: PSDL_Renderer; x, y: sInt16; c: Char; colour: uInt32):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_characterColor' {$ENDIF};
|
||||||
|
|
||||||
|
Function characterRGBA(renderer: PSDL_Renderer; x, y: sInt16; c: Char; r, g, b, a: uInt8):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_characterRGBA' {$ENDIF};
|
||||||
|
|
||||||
|
|
||||||
|
Function stringColor(renderer: PSDL_Renderer; x, y: sInt16; Const str: PChar; colour: uInt32):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_stringColor' {$ENDIF};
|
||||||
|
|
||||||
|
Function stringRGBA(renderer: PSDL_Renderer; x, y: sInt16; Const syt: PChar; r, g, b, a: uInt8):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_stringRGBA' {$ENDIF};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{---< SDL2_imageFilter.h >---}
|
||||||
|
|
||||||
|
(* Comments: *
|
||||||
|
* 1.) MMX functions work best if all data blocks are aligned on a 32 bytes boundary. *
|
||||||
|
* 2.) Data that is not within an 8 byte boundary is processed using the C routine. *
|
||||||
|
* 3.) Convolution routines do not have C routines at this time. *)
|
||||||
|
|
||||||
|
// Detect MMX capability in CPU
|
||||||
|
Function SDL_imageFilterMMXdetect():sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_SDL_imageFilterMMXdetect' {$ENDIF};
|
||||||
|
|
||||||
|
// Force use of MMX off (or turn possible use back on)
|
||||||
|
Procedure SDL_imageFilterMMXoff(); cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_SDL_imageFilterMMXoff' {$ENDIF};
|
||||||
|
|
||||||
|
Procedure SDL_imageFilterMMXon(); cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_SDL_imageFilterMMXon' {$ENDIF};
|
||||||
|
|
||||||
|
|
||||||
|
// SDL_imageFilterAdd: D = saturation255(S1 + S2)
|
||||||
|
Function SDL_imageFilterAdd(Src1, Src2, Dest : PuInt8; Length : uInt32):sInt32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_SDL_imageFilterAdd' {$ENDIF};
|
||||||
|
|
||||||
|
// SDL_imageFilterMean: D = S1/2 + S2/2
|
||||||
|
Function SDL_imageFilterMean(Src1, Src2, Dest : PuInt8; Length:uInt32):Sint32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_SDL_imageFilterMean' {$ENDIF};
|
||||||
|
|
||||||
|
// SDL_imageFilterSub: D = saturation0(S1 - S2)
|
||||||
|
Function SDL_imageFilterSub(Src1, Src2, Dest : PuInt8; Length:uInt32):Sint32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_SDL_imageFilterSub' {$ENDIF};
|
||||||
|
|
||||||
|
// SDL_imageFilterAbsDiff: D = | S1 - S2 |
|
||||||
|
Function SDL_imageFilterAbsDiff(Src1, Src2, Dest : PuInt8; Length:uInt32):Sint32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_SDL_imageFilterAbsDiff' {$ENDIF};
|
||||||
|
|
||||||
|
|
||||||
|
// SDL_imageFilterMult: D = saturation(S1 * S2)
|
||||||
|
Function SDL_imageFilterMult(Src1, Src2, Dest : PuInt8; Length:uInt32):Sint32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_SDL_imageFilterMult' {$ENDIF};
|
||||||
|
|
||||||
|
// SDL_imageFilterMultNor: D = S1 * S2 (non-MMX)
|
||||||
|
Function SDL_imageFilterMultNor(Src1, Src2, Dest : PuInt8; Length:uInt32):Sint32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_SDL_imageFilterMultNor' {$ENDIF};
|
||||||
|
|
||||||
|
// SDL_imageFilterMultDivby2: D = saturation255(S1/2 * S2)
|
||||||
|
Function SDL_imageFilterMultDivby2(Src1, Src2, Dest : PuInt8; Length: uInt32):Sint32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_SDL_imageFilterMultDivby2' {$ENDIF};
|
||||||
|
|
||||||
|
// SDL_imageFilterMultDivby4: D = saturation255(S1/2 * S2/2)
|
||||||
|
Function SDL_imageFilterMultDivby4(Src1, Src2, Dest : PuInt8; Length : uInt32):Sint32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_SDL_imageFilterMultDivby4' {$ENDIF};
|
||||||
|
|
||||||
|
|
||||||
|
// SDL_imageFilterBitAnd: D = S1 & S2
|
||||||
|
Function SDL_imageFilterBitAnd(Src1, Src2, Dest : PuInt8; Length:uInt32):Sint32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_SDL_imageFilterBitAnd' {$ENDIF};
|
||||||
|
|
||||||
|
// SDL_imageFilterBitOr: D = S1 | S2
|
||||||
|
Function SDL_imageFilterBitOr(Src1, Src2, Dest : PuInt8; Length:uInt32):Sint32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_SDL_imageFilterBitOr' {$ENDIF};
|
||||||
|
|
||||||
|
|
||||||
|
// SDL_imageFilterDiv: D = S1 / S2 (non-MMX)
|
||||||
|
Function SDL_imageFilterDiv(Src1, Src2, Dest : PuInt8; Length:uInt32):Sint32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_SDL_imageFilterDiv' {$ENDIF};
|
||||||
|
|
||||||
|
// SDL_imageFilterBitNegation: D = !S
|
||||||
|
Function SDL_imageFilterBitNegation(Src1, Dest : PuInt8; Length:uInt32):Sint32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_SDL_imageFilterBitNegation' {$ENDIF};
|
||||||
|
|
||||||
|
|
||||||
|
// SDL_imageFilterAddByte: D = saturation255(S + C)
|
||||||
|
Function SDL_imageFilterAddByte(Src1, Dest : PuInt8; Length:uInt32; C : uInt8):Sint32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_SDL_imageFilterAddByte' {$ENDIF};
|
||||||
|
|
||||||
|
// SDL_imageFilterAddUsInt32: D = saturation255(S + (usInt32)C)
|
||||||
|
Function SDL_imageFilterAddUsInt32(Src1, Dest : PuInt8; Length:uInt32; C : uInt32):Sint32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_SDL_imageFilterAddUsInt32' {$ENDIF};
|
||||||
|
|
||||||
|
// SDL_imageFilterAddByteToHalf: D = saturation255(S/2 + C)
|
||||||
|
Function SDL_imageFilterAddByteToHalf(Src1, Dest : PuInt8; Length:uInt32; C : uInt8):Sint32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_SDL_imageFilterAddByteToHalf' {$ENDIF};
|
||||||
|
|
||||||
|
|
||||||
|
// SDL_imageFilterSubByte: D = saturation0(S - C)
|
||||||
|
Function SDL_imageFilterSubByte(Src1, Dest : PuInt8; Length:uInt32; C : uInt8):Sint32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_SDL_imageFilterSubByte' {$ENDIF};
|
||||||
|
|
||||||
|
// SDL_imageFilterSubUsInt32: D = saturation0(S - (usInt32)C)
|
||||||
|
Function SDL_imageFilterSubUsInt32(Src1, Dest : PuInt8; Length:uInt32; C : uInt32):Sint32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_SDL_imageFilterSubUsInt32' {$ENDIF};
|
||||||
|
|
||||||
|
|
||||||
|
// SDL_imageFilterShiftRight: D = saturation0(S >> N)
|
||||||
|
Function SDL_imageFilterShiftRight(Src1, Dest : PuInt8; Length:uInt32; N : uInt8):Sint32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_SDL_imageFilterShiftRight' {$ENDIF};
|
||||||
|
|
||||||
|
// SDL_imageFilterShiftRightUsInt32: D = saturation0((usInt32)S >> N)
|
||||||
|
Function SDL_imageFilterShiftRightUsInt32(Src1, Dest : PuInt8; Length:uInt32; N : uInt8):Sint32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_SDL_imageFilterShiftRightUsInt32' {$ENDIF};
|
||||||
|
|
||||||
|
|
||||||
|
// SDL_imageFilterMultByByte: D = saturation255(S * C)
|
||||||
|
Function SDL_imageFilterMultByByte(Src1, Dest : PuInt8; Length:uInt32; C : uInt8):Sint32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_SDL_imageFilterMultByByte' {$ENDIF};
|
||||||
|
|
||||||
|
// SDL_imageFilterShiftRightAndMultByByte: D = saturation255((S >> N) * C)
|
||||||
|
Function SDL_imageFilterShiftRightAndMultByByte(Src1, Dest : PuInt8; Length:uInt32; N, C : uInt8):Sint32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_SDL_imageFilterShiftRightAndMultByByte' {$ENDIF};
|
||||||
|
|
||||||
|
|
||||||
|
// SDL_imageFilterShiftLeftByte: D = (S << N)
|
||||||
|
Function SDL_imageFilterShiftLeftByte(Src1, Dest : PuInt8; Length:uInt32; N: uInt8):Sint32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_SDL_imageFilterShiftLeftByte' {$ENDIF};
|
||||||
|
|
||||||
|
// SDL_imageFilterShiftLeftUsInt32: D = ((usInt32)S << N)
|
||||||
|
Function SDL_imageFilterShiftLeftUsInt32(Src1, Dest : PuInt8; Length:uInt32; N:uInt8):Sint32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_SDL_imageFilterShiftLeftUsInt32' {$ENDIF};
|
||||||
|
|
||||||
|
// SDL_imageFilterShiftLeft: D = saturation255(S << N)
|
||||||
|
Function SDL_imageFilterShiftLeft(Src1, Dest : PuInt8; Length:uInt32; N : uInt8):Sint32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_SDL_imageFilterShiftLeft' {$ENDIF};
|
||||||
|
|
||||||
|
|
||||||
|
// SDL_imageFilterBinarizeUsingThreshold: D = S >= T ? 255:0
|
||||||
|
Function SDL_imageFilterBinarizeUsingThreshold(Src1, Dest : PuInt8; Length:uInt32; T: uInt8):Sint32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_SDL_imageFilterBinarizeUsingThreshold' {$ENDIF};
|
||||||
|
|
||||||
|
// SDL_imageFilterClipToRange: D = (S >= Tmin) & (S <= Tmax) 255:0
|
||||||
|
Function SDL_imageFilterClipToRange(Src1, Dest : PuInt8; Length:uInt32; Tmin, Tmax: uInt8):Sint32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_SDL_imageFilterClipToRange' {$ENDIF};
|
||||||
|
|
||||||
|
// SDL_imageFilterNormalizeLinear: D = saturation255((Nmax - Nmin)/(Cmax - Cmin)*(S - Cmin) + Nmin)
|
||||||
|
Function SDL_imageFilterNormalizeLinear(Src, Dest: PuInt8; Length, Cmin, Cmax, Nmin, Nmax: sInt32):Sint32; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_SDL_imageFilterNormalizeLinear' {$ENDIF};
|
||||||
|
|
||||||
|
|
||||||
|
{---< SDL2_rotozoom.h >---}
|
||||||
|
|
||||||
|
Const
|
||||||
|
{*!
|
||||||
|
\brief Disable anti-aliasing (no smoothing).
|
||||||
|
*}
|
||||||
|
SMOOTHING_OFF = 0;
|
||||||
|
|
||||||
|
{*!
|
||||||
|
\brief Enable anti-aliasing (smoothing).
|
||||||
|
*}
|
||||||
|
SMOOTHING_ON = 1;
|
||||||
|
|
||||||
|
{ Rotozoom functions }
|
||||||
|
|
||||||
|
Function rotozoomSurface(src: PSDL_Surface; angle, zoom: Double; smooth: sInt32):PSDL_Surface; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_rotozoomSurface' {$ENDIF};
|
||||||
|
|
||||||
|
Function rotozoomSurfaceXY(src: PSDL_Surface; angle, zoomx, zoomy: Double; smooth: sInt32):PSDL_Surface; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_rotozoomSurfaceXY' {$ENDIF};
|
||||||
|
|
||||||
|
|
||||||
|
Procedure rotozoomSurfaceSize(width, height: sInt32; angle, zoom: Double; dstwidth, dstheight: PuInt32); cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_rotozoomSurfaceSize' {$ENDIF};
|
||||||
|
|
||||||
|
Procedure rotozoomSurfaceSizeXY(width, height: sInt32; angle, zoomx, zoomy: Double; dstwidth, dstheight:PuInt32); cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_rotozoomSurfaceSizeXY' {$ENDIF};
|
||||||
|
|
||||||
|
|
||||||
|
{ Zooming functions }
|
||||||
|
|
||||||
|
Function zoomSurface(src: PSDL_Surface; zoomx, zoomy: Double; smooth: sInt32):PSDL_Surface; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_zoomSurface' {$ENDIF};
|
||||||
|
|
||||||
|
Procedure zoomSurfaceSize(width, height: sInt32; zoomx, zoomy: Double; dstwidth, dstheight: PuInt32); cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_zoomSurfaceSize' {$ENDIF};
|
||||||
|
|
||||||
|
{ Shrinking functions }
|
||||||
|
|
||||||
|
Function shrinkSurface(src: PSDL_Surface; factorx, factory: sInt32):PSDL_Surface; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_shrinkSurface' {$ENDIF};
|
||||||
|
|
||||||
|
{ Specialized rotation functions }
|
||||||
|
|
||||||
|
Function rotateSurface90Degrees(src: PSDL_Surface; numClockwiseTurns: sInt32):PSDL_Surface; cdecl;
|
||||||
|
external GFX_LibName {$IFDEF DELMAC} name '_rotateSurface90Degrees' {$ENDIF};
|
||||||
|
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
Procedure SDL_GFX_VERSION(Out X: TSDL_Version);
|
||||||
|
begin
|
||||||
|
X.Major := SDL2_GFXPRIMITIVES_MAJOR;
|
||||||
|
X.Minor := SDL2_GFXPRIMITIVES_MINOR;
|
||||||
|
X.Patch := SDL2_GFXPRIMITIVES_MICRO
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
188
model_viewer/sdl2/SDL2_image.pas
Normal file
188
model_viewer/sdl2/SDL2_image.pas
Normal file
@ -0,0 +1,188 @@
|
|||||||
|
unit sdl2_image;
|
||||||
|
|
||||||
|
{*
|
||||||
|
SDL_image: An example image loading library for use with SDL
|
||||||
|
Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
|
||||||
|
Pascal-Header-Translation 2013 by Tim Blume
|
||||||
|
|
||||||
|
Both, header translation and sdl_image, under following license:
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
|
||||||
|
ChangeLog (Header-Translation):
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
v.1.72-stable; 29.09.2013: fixed bug with procedure without parameters
|
||||||
|
(they must have brackets)
|
||||||
|
v.1.70-stable; 11.09.2013: MacOS compatibility (with Delphi)
|
||||||
|
v.1.33-Alpha; 31.07.2013: Initial Commit
|
||||||
|
|
||||||
|
*}
|
||||||
|
|
||||||
|
{$DEFINE SDL_IMAGE}
|
||||||
|
|
||||||
|
{$I jedi.inc}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
SDL2;
|
||||||
|
|
||||||
|
const
|
||||||
|
{$IFDEF WINDOWS}
|
||||||
|
IMG_LibName = 'SDL2_image.dll';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF UNIX}
|
||||||
|
{$IFDEF DARWIN}
|
||||||
|
IMG_LibName = 'libSDL2_image.dylib';
|
||||||
|
{$ELSE}
|
||||||
|
{$IFDEF FPC}
|
||||||
|
IMG_LibName = 'libSDL2_image.so';
|
||||||
|
{$ELSE}
|
||||||
|
IMG_LibName = 'libSDL2_image.so.0';
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF MACOS}
|
||||||
|
IMG_LibName = 'SDL2_image';
|
||||||
|
{$IFDEF FPC}
|
||||||
|
{$linklib libSDL2_image}
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{* Printable format: "%d.%d.%d", MAJOR, MINOR, PATCHLEVEL *}
|
||||||
|
SDL_IMAGE_MAJOR_VERSION = 2;
|
||||||
|
SDL_IMAGE_MINOR_VERSION = 0;
|
||||||
|
SDL_IMAGE_PATCHLEVEL = 0;
|
||||||
|
|
||||||
|
{* This macro can be used to fill a version structure with the compile-time
|
||||||
|
* version of the SDL_image library.
|
||||||
|
*}
|
||||||
|
|
||||||
|
procedure SDL_IMAGE_VERSION(Out X: TSDL_Version);
|
||||||
|
|
||||||
|
{* This function gets the version of the dynamically linked SDL_image library.
|
||||||
|
*
|
||||||
|
* Note that this function does NOT allocate a new TSDL_Version and fill it with info,
|
||||||
|
* but returns a pointer to a TSDL_Version residing inside dynlinked file.
|
||||||
|
*
|
||||||
|
* As such, attempting to Dispose() of this memory will result in access violation.
|
||||||
|
*}
|
||||||
|
function IMG_Linked_Version: PSDL_Version cdecl; external IMG_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_IMG_Linked_Version' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
const
|
||||||
|
IMG_INIT_JPG = $00000001;
|
||||||
|
IMG_INIT_PNG = $00000002;
|
||||||
|
IMG_INIT_TIF = $00000004;
|
||||||
|
IMG_INIT_WEBP = $00000008;
|
||||||
|
|
||||||
|
type
|
||||||
|
TIMG_InitFlags = DWord;
|
||||||
|
|
||||||
|
{* Loads dynamic libraries and prepares them for use. Flags should be
|
||||||
|
one or more flags from IMG_InitFlags OR'd together.
|
||||||
|
It returns the flags successfully initialized, or 0 on failure.
|
||||||
|
*}
|
||||||
|
function IMG_Init(flags: SInt32): SInt32 cdecl; external IMG_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_IMG_Init' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Unloads libraries loaded with IMG_Init *}
|
||||||
|
procedure IMG_Quit() cdecl; external IMG_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_IMG_Quit' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Load an image from an SDL data source.
|
||||||
|
The 'type' may be one of: "BMP", "GIF", "PNG", etc.
|
||||||
|
|
||||||
|
If the image format supports a transparent pixel, SDL will set the
|
||||||
|
colorkey for the surface. You can enable RLE acceleration on the
|
||||||
|
surface afterwards by calling:
|
||||||
|
SDL_SetColorKey(image, SDL_RLEACCEL, image->format->colorkey);
|
||||||
|
*}
|
||||||
|
function IMG_LoadTyped_RW(src: PSDL_RWops; freesrc: SInt32; _type: PAnsiChar): PSDL_Surface cdecl; external IMG_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_IMG_LoadTyped_RW' {$ENDIF} {$ENDIF};
|
||||||
|
{* Convenience functions *}
|
||||||
|
function IMG_Load(_file: PAnsiChar): PSDL_Surface cdecl; external IMG_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_IMG_Load' {$ENDIF} {$ENDIF};
|
||||||
|
function IMG_Load_RW(src: PSDL_RWops; freesrc: SInt32): PSDL_Surface cdecl; external IMG_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_IMG_Load_RW' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Load an image directly into a render texture. *}
|
||||||
|
function IMG_LoadTexture(renderer: PSDL_Renderer; _file: PAnsiChar): PSDL_Texture cdecl; external IMG_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_IMG_LoadTexture' {$ENDIF} {$ENDIF};
|
||||||
|
function IMG_LoadTexture_RW(renderer: PSDL_Renderer; src: PSDL_RWops; freesrc: SInt32): PSDL_Texture cdecl; external IMG_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_IMG_LoadTexture_RW' {$ENDIF} {$ENDIF};
|
||||||
|
function IMG_LoadTextureTyped_RW(renderer: PSDL_Renderer; src: PSDL_RWops; freesrc: SInt32; _type: PAnsiChar): PSDL_Texture cdecl; external IMG_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_IMG_LoadTextureTyped_RW' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Functions to detect a file type, given a seekable source *}
|
||||||
|
function IMG_isICO(src: PSDL_RWops): SInt32 cdecl; external IMG_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_IMG_isICO' {$ENDIF} {$ENDIF};
|
||||||
|
function IMG_isCUR(src: PSDL_RWops): SInt32 cdecl; external IMG_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_IMG_isCUR' {$ENDIF} {$ENDIF};
|
||||||
|
function IMG_isBMP(src: PSDL_RWops): SInt32 cdecl; external IMG_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_IMG_isBMP' {$ENDIF} {$ENDIF};
|
||||||
|
function IMG_isGIF(src: PSDL_RWops): SInt32 cdecl; external IMG_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_IMG_isGIF' {$ENDIF} {$ENDIF};
|
||||||
|
function IMG_isJPG(src: PSDL_RWops): SInt32 cdecl; external IMG_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_IMG_isJPG' {$ENDIF} {$ENDIF};
|
||||||
|
function IMG_isLBM(src: PSDL_RWops): SInt32 cdecl; external IMG_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_IMG_isLBM' {$ENDIF} {$ENDIF};
|
||||||
|
function IMG_isPCX(src: PSDL_RWops): SInt32 cdecl; external IMG_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_IMG_isPCX' {$ENDIF} {$ENDIF};
|
||||||
|
function IMG_isPNG(src: PSDL_RWops): SInt32 cdecl; external IMG_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_IMG_isPNG' {$ENDIF} {$ENDIF};
|
||||||
|
function IMG_isPNM(src: PSDL_RWops): SInt32 cdecl; external IMG_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_IMG_isPNM' {$ENDIF} {$ENDIF};
|
||||||
|
function IMG_isTIF(src: PSDL_RWops): SInt32 cdecl; external IMG_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_IMG_isTIF' {$ENDIF} {$ENDIF};
|
||||||
|
function IMG_isXCF(src: PSDL_RWops): SInt32 cdecl; external IMG_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '-IMG_isXCF' {$ENDIF} {$ENDIF};
|
||||||
|
function IMG_isXPM(src: PSDL_RWops): SInt32 cdecl; external IMG_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_IMG_isXPM' {$ENDIF} {$ENDIF};
|
||||||
|
function IMG_isXV(src: PSDL_RWops): SInt32 cdecl; external IMG_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_IMG_isXV' {$ENDIF} {$ENDIF};
|
||||||
|
function IMG_isWEBP(src: PSDL_RWops): SInt32 cdecl; external IMG_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_IMG_isWEBP' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Individual loading functions *}
|
||||||
|
function IMG_LoadICO_RW(src: PSDL_RWops): PSDL_Surface cdecl; external IMG_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_IMG_LoadICO_RW' {$ENDIF} {$ENDIF};
|
||||||
|
function IMG_LoadCUR_RW(src: PSDL_RWops): PSDL_Surface cdecl; external IMG_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_IMG_LoadCUR_RW' {$ENDIF} {$ENDIF};
|
||||||
|
function IMG_LoadBMP_RW(src: PSDL_RWops): PSDL_Surface cdecl; external IMG_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_IMG_LoadBMP_RW' {$ENDIF} {$ENDIF};
|
||||||
|
function IMG_LoadGIF_RW(src: PSDL_RWops): PSDL_Surface cdecl; external IMG_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_IMG_LoadGIF_RW' {$ENDIF} {$ENDIF};
|
||||||
|
function IMG_LoadJPG_RW(src: PSDL_RWops): PSDL_Surface cdecl; external IMG_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_IMG_LoadJPG_RW' {$ENDIF} {$ENDIF};
|
||||||
|
function IMG_LoadLBM_RW(src: PSDL_RWops): PSDL_Surface cdecl; external IMG_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_IMG_LoadLBM_RW' {$ENDIF} {$ENDIF};
|
||||||
|
function IMG_LoadPCX_RW(src: PSDL_RWops): PSDL_Surface cdecl; external IMG_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_IMG_LoadPCX_RW' {$ENDIF} {$ENDIF};
|
||||||
|
function IMG_LoadPNG_RW(src: PSDL_RWops): PSDL_Surface cdecl; external IMG_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_IMG_LoadPNG_RW' {$ENDIF} {$ENDIF};
|
||||||
|
function IMG_LoadPNM_RW(src: PSDL_RWops): PSDL_Surface cdecl; external IMG_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_IMG_LoadPNM_RW' {$ENDIF} {$ENDIF};
|
||||||
|
function IMG_LoadTGA_RW(src: PSDL_RWops): PSDL_Surface cdecl; external IMG_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_IMG_LoadTGA_RW' {$ENDIF} {$ENDIF};
|
||||||
|
function IMG_LoadTIF_RW(src: PSDL_RWops): PSDL_Surface cdecl; external IMG_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_IMG_LoadTIF_RW' {$ENDIF} {$ENDIF};
|
||||||
|
function IMG_LoadXCF_RW(src: PSDL_RWops): PSDL_Surface cdecl; external IMG_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_IMG_LoadXCF_RW' {$ENDIF} {$ENDIF};
|
||||||
|
function IMG_LoadXPM_RW(src: PSDL_RWops): PSDL_Surface cdecl; external IMG_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_IMG_LoadXMP_RW' {$ENDIF} {$ENDIF};
|
||||||
|
function IMG_LoadXV_RW(src: PSDL_RWops): PSDL_Surface cdecl; external IMG_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_IMG_LoadXV_RW' {$ENDIF} {$ENDIF};
|
||||||
|
function IMG_LoadWEBP_RW(src: PSDL_RWops): PSDL_Surface cdecl; external IMG_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_IMG_LoadWEBP_RW' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
function IMG_ReadXPMFromArray(xpm: PPChar): PSDL_Surface cdecl; external IMG_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_IMG_ReadXPMFromArray' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Individual saving functions *}
|
||||||
|
function IMG_SavePNG(surface: PSDL_Surface; const _file: PAnsiChar): SInt32 cdecl; external IMG_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_IMG_SavePNG' {$ENDIF} {$ENDIF};
|
||||||
|
function IMG_SavePNG_RW(surface: PSDL_Surface; dst: PSDL_RWops; freedst: SInt32): SInt32 cdecl; external IMG_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_IMG_SavePNG_RW' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* We'll use SDL for reporting errors *}
|
||||||
|
function IMG_SetError(fmt: PAnsiChar): SInt32; cdecl;
|
||||||
|
function IMG_GetError: PAnsiChar; cdecl;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
procedure SDL_IMAGE_VERSION(Out X: TSDL_Version);
|
||||||
|
begin
|
||||||
|
X.major := SDL_IMAGE_MAJOR_VERSION;
|
||||||
|
X.minor := SDL_IMAGE_MINOR_VERSION;
|
||||||
|
X.patch := SDL_IMAGE_PATCHLEVEL;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function IMG_SetError(fmt: PAnsiChar): SInt32; cdecl;
|
||||||
|
begin
|
||||||
|
Result := SDL_SetError(fmt);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function IMG_GetError: PAnsiChar; cdecl;
|
||||||
|
begin
|
||||||
|
Result := SDL_GetError();
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
696
model_viewer/sdl2/SDL2_mixer.pas
Normal file
696
model_viewer/sdl2/SDL2_mixer.pas
Normal file
@ -0,0 +1,696 @@
|
|||||||
|
unit SDL2_mixer;
|
||||||
|
|
||||||
|
{*
|
||||||
|
SDL_mixer: An audio mixer library based on the SDL library
|
||||||
|
Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*}
|
||||||
|
|
||||||
|
{* ChangeLog: (Header Translation)
|
||||||
|
----------
|
||||||
|
|
||||||
|
v.1.72-stable; 29.09.2013: fixed bug with procedures without parameters
|
||||||
|
(they must have brackets)
|
||||||
|
v.1.70-stable; 16.09.2013: Initial Commit
|
||||||
|
|
||||||
|
*}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
{$I jedi.inc}
|
||||||
|
|
||||||
|
uses
|
||||||
|
SDL2;
|
||||||
|
|
||||||
|
const
|
||||||
|
{$IFDEF WINDOWS}
|
||||||
|
MIX_LibName = 'SDL2_mixer.dll';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF UNIX}
|
||||||
|
{$IFDEF DARWIN}
|
||||||
|
MIX_LibName = 'libSDL2_mixer.dylib';
|
||||||
|
{$ELSE}
|
||||||
|
{$IFDEF FPC}
|
||||||
|
MIX_LibName = 'libSDL2_mixer.so';
|
||||||
|
{$ELSE}
|
||||||
|
MIX_LibName = 'libSDL2_mixer.so.0';
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF MACOS}
|
||||||
|
MIX_LibName = 'SDL2_mixer';
|
||||||
|
{$IFDEF FPC}
|
||||||
|
{$linklib libSDL2_mixer}
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{* Printable format: "%d.%d.%d", MAJOR, MINOR, PATCHLEVEL *}
|
||||||
|
const
|
||||||
|
SDL_MIXER_MAJOR_VERSION = 2;
|
||||||
|
SDL_MIXER_MINOR_VERSION = 0;
|
||||||
|
SDL_MIXER_PATCHLEVEL = 0;
|
||||||
|
|
||||||
|
{* This macro can be used to fill a version structure with the compile-time
|
||||||
|
* version of the SDL_mixer library.
|
||||||
|
*}
|
||||||
|
procedure SDL_MIXER_VERSION(Out X: TSDL_Version);
|
||||||
|
|
||||||
|
{* Backwards compatibility *}
|
||||||
|
const
|
||||||
|
MIX_MAJOR_VERSION = SDL_MIXER_MAJOR_VERSION;
|
||||||
|
MIX_MINOR_VERSION = SDL_MIXER_MINOR_VERSION;
|
||||||
|
MIX_PATCHLEVEL = SDL_MIXER_PATCHLEVEL;
|
||||||
|
|
||||||
|
procedure MIX_VERSION(Out X: TSDL_Version);
|
||||||
|
|
||||||
|
{* This function gets the version of the dynamically linked SDL_mixer library.
|
||||||
|
it should NOT be used to fill a version structure, instead you should
|
||||||
|
use the SDL_MIXER_VERSION() macro.
|
||||||
|
*}
|
||||||
|
function Mix_Linked_Version: PSDL_Version cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_Linked_Version' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
const
|
||||||
|
MIX_INIT_FLAC = $00000001;
|
||||||
|
MIX_INIT_MOD = $00000002;
|
||||||
|
MIX_INIT_MODPLUG = $00000004;
|
||||||
|
MIX_INIT_MP3 = $00000008;
|
||||||
|
MIX_INIT_OGG = $00000010;
|
||||||
|
MIX_INIT_FLUIDSYNTH = $00000020;
|
||||||
|
type
|
||||||
|
TMIX_InitFlags = Byte;
|
||||||
|
|
||||||
|
{* Loads dynamic libraries and prepares them for use. Flags should be
|
||||||
|
one or more flags from MIX_InitFlags OR'd together.
|
||||||
|
It returns the flags successfully initialized, or 0 on failure.
|
||||||
|
*}
|
||||||
|
function Mix_Init(flags: Integer): Integer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_Init' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Unloads libraries loaded with Mix_Init *}
|
||||||
|
procedure Mix_Quit() cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_Quit' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
|
||||||
|
{* The default mixer has 8 simultaneous mixing channels *}
|
||||||
|
{$IFNDEF MIX_CHANNELS}
|
||||||
|
const
|
||||||
|
MIX_CHANNELS = 8;
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{* Good default values for a PC soundcard *}
|
||||||
|
const
|
||||||
|
MIX_DEFAULT_FREQUENCY = 22050;
|
||||||
|
MIX_DEFAULT_CHANNELS = 2;
|
||||||
|
MIX_MAX_VOLUME = 128; {* Volume of a chunk *}
|
||||||
|
|
||||||
|
{$IFDEF FPC}
|
||||||
|
{$IF DEFINED(ENDIAN_LITTLE)}
|
||||||
|
MIX_DEFAULT_FORMAT = AUDIO_S16LSB;
|
||||||
|
{$ELSEIF DEFINED(ENDIAN_BIG)}
|
||||||
|
MIX_DEFAULT_FORMAT = AUDIO_S16MSB;
|
||||||
|
{$ELSE}
|
||||||
|
{$FATAL Unable to determine endianness.}
|
||||||
|
{$IFEND}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{* The internal format for an audio chunk *}
|
||||||
|
type
|
||||||
|
PMix_Chunk = ^TMix_Chunk;
|
||||||
|
TMix_Chunk = record
|
||||||
|
allocated: Integer;
|
||||||
|
abuf: PUInt8;
|
||||||
|
alen: UInt32;
|
||||||
|
volume: UInt8; {* Per-sample volume, 0-128 *}
|
||||||
|
end;
|
||||||
|
|
||||||
|
{* The different fading types supported *}
|
||||||
|
type
|
||||||
|
TMix_Fading = (MIX_NO_FADING, MIX_FADING_OUT, MIX_FADING_IN);
|
||||||
|
|
||||||
|
TMix_MusicType = (MUS_NONE,
|
||||||
|
MUS_CMD,
|
||||||
|
MUS_WAV,
|
||||||
|
MUS_MOD,
|
||||||
|
MUS_MID,
|
||||||
|
MUS_OGG,
|
||||||
|
MUS_MP3,
|
||||||
|
MUS_MP3_MAD,
|
||||||
|
MUS_FLAC,
|
||||||
|
MUS_MODPLUG);
|
||||||
|
|
||||||
|
{* The internal format for a music chunk interpreted via mikmod *}
|
||||||
|
PMix_Music = ^TMix_Music;
|
||||||
|
TMix_Music = record end;
|
||||||
|
|
||||||
|
{* Open the mixer with a certain audio format *}
|
||||||
|
function Mix_OpenAudio(frequency: Integer; format: UInt16; channels: Integer; chunksize: Integer): Integer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_OpenAudio' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Dynamically change the number of channels managed by the mixer.
|
||||||
|
If decreasing the number of channels, the upper channels are
|
||||||
|
stopped.
|
||||||
|
This function returns the new number of allocated channels.
|
||||||
|
*}
|
||||||
|
function Mix_AllocateChannels(numchans: Integer): Integer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_AllocateChannels' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Find out what the actual audio device parameters are.
|
||||||
|
This function returns 1 if the audio has been opened, 0 otherwise.
|
||||||
|
*}
|
||||||
|
function Mix_QuerySpec(frequency: PInt; format: PUInt16; channels: PInt): Integer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_QuerySpec' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Load a wave file or a music (.mod .s3m .it .xm) file *}
|
||||||
|
function Mix_LoadWAV_RW(src: PSDL_RWops; freesrc: Integer): PMix_Chunk cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_LoadWAV_RW' {$ENDIF} {$ENDIF};
|
||||||
|
function Mix_LoadWAV(_file: PAnsiChar): PMix_Chunk;
|
||||||
|
function Mix_LoadMUS(_file: PAnsiChar): PMix_Music cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_LoadMUS' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Load a music file from an SDL_RWop object (Ogg and MikMod specific currently)
|
||||||
|
Matt Campbell (matt@campbellhome.dhs.org) April 2000 *}
|
||||||
|
function Mix_LoadMUS_RW(src: PSDL_RWops; freesrc: Integer): PMix_Music cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_LoadMUS_RW' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Load a music file from an SDL_RWop object assuming a specific format *}
|
||||||
|
function Mix_LoadMUSType_RW(src: PSDL_RWops; _type: TMix_MusicType; freesrc: Integer): PMix_Music cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_LoadMUSType_RW' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Load a wave file of the mixer format from a memory buffer *}
|
||||||
|
function Mix_QuickLoad_WAV(mem: PUInt8): PMix_Chunk cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_QuickLoad_WAV' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Load raw audio data of the mixer format from a memory buffer *}
|
||||||
|
function Mix_QuickLoad_RAW(mem: PUInt8; len: UInt32): PMix_Chunk cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_QuickLoad_RAW' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Free an audio chunk previously loaded *}
|
||||||
|
procedure Mix_FreeChunk(chunk: PMix_Chunk) cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_FreeChunk' {$ENDIF} {$ENDIF};
|
||||||
|
procedure Mix_FreeMusic(music: PMix_Music) cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_FreeMusic' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Get a list of chunk/music decoders that this build of SDL_mixer provides.
|
||||||
|
This list can change between builds AND runs of the program, if external
|
||||||
|
libraries that add functionality become available.
|
||||||
|
You must successfully call Mix_OpenAudio() before calling these functions.
|
||||||
|
This API is only available in SDL_mixer 1.2.9 and later.
|
||||||
|
|
||||||
|
// usage...
|
||||||
|
int i;
|
||||||
|
const int total = Mix_GetNumChunkDecoders();
|
||||||
|
for (i = 0; i < total; i++)
|
||||||
|
printf("Supported chunk decoder: [%s]\n", Mix_GetChunkDecoder(i));
|
||||||
|
|
||||||
|
Appearing in this list doesn't promise your specific audio file will
|
||||||
|
decode...but it's handy to know if you have, say, a functioning Timidity
|
||||||
|
install.
|
||||||
|
|
||||||
|
These return values are static, read-only data; do not modify or free it.
|
||||||
|
The pointers remain valid until you call Mix_CloseAudio().
|
||||||
|
*}
|
||||||
|
function Mix_GetNumChunkDecoders: Integer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_GetNumChunkDecoders' {$ENDIF} {$ENDIF};
|
||||||
|
function Mix_GetChunkDecoder(index: Integer): PAnsiChar cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_GetChunkDecoder' {$ENDIF} {$ENDIF};
|
||||||
|
function Mix_GetNumMusicDecoders: Integer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_GetNumMusicDecoders' {$ENDIF} {$ENDIF};
|
||||||
|
function Mix_GetMusicDecoder(index: Integer): PAnsiChar cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_GetMusicDecoder' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Find out the music format of a mixer music, or the currently playing
|
||||||
|
music, if 'music' is NULL.
|
||||||
|
*}
|
||||||
|
function Mix_GetMusicType(music: TMix_Music): TMix_MusicType cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_GetMusicType' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Set a function that is called after all mixing is performed.
|
||||||
|
This can be used to provide real-time visual display of the audio stream
|
||||||
|
or add a custom mixer filter for the stream data.
|
||||||
|
*}
|
||||||
|
type
|
||||||
|
TMix_Func = procedure(udata: Pointer; stream: PUInt8; len: Integer);
|
||||||
|
|
||||||
|
procedure Mix_SetPostMix(func: TMix_Func; arg: Pointer) cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_SetPostMix' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Add your own music player or additional mixer function.
|
||||||
|
If 'mix_func' is NULL, the default music player is re-enabled.
|
||||||
|
*}
|
||||||
|
procedure Mix_HookMusic(func: TMix_Func; arg: Pointer) cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_HookMusic' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Add your own callback when the music has finished playing.
|
||||||
|
This callback is only called if the music finishes naturally.
|
||||||
|
*}
|
||||||
|
type
|
||||||
|
PMix_Music_Finished = ^TMix_Music_Finished;
|
||||||
|
TMix_Music_Finished = procedure();
|
||||||
|
procedure Mix_HookMusicFinished(music_finished: PMix_Music_Finished) cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_HookMusicFinished' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Get a pointer to the user data for the current music hook *}
|
||||||
|
function Mix_GetMusicHookData: Pointer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_GetMusicHookData' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{*
|
||||||
|
* Add your own callback when a channel has finished playing. NULL
|
||||||
|
* to disable callback. The callback may be called from the mixer's audio
|
||||||
|
* callback or it could be called as a result of Mix_HaltChannel(), etc.
|
||||||
|
* do not call SDL_LockAudio() from this callback; you will either be
|
||||||
|
* inside the audio callback, or SDL_mixer will explicitly lock the audio
|
||||||
|
* before calling your callback.
|
||||||
|
*}
|
||||||
|
type
|
||||||
|
TMix_Channel_Finished = procedure(channel: Integer);
|
||||||
|
procedure Mix_ChannelFinished(channel_finished: TMix_Channel_Finished) cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_ChannelFinished' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Special Effects API by ryan c. gordon. (icculus@icculus.org) *}
|
||||||
|
const
|
||||||
|
MIX_CHANNEL_POST = -2;
|
||||||
|
|
||||||
|
{* This is the format of a special effect callback:
|
||||||
|
*
|
||||||
|
* myeffect(int chan, void *stream, int len, void *udata);
|
||||||
|
*
|
||||||
|
* (chan) is the channel number that your effect is affecting. (stream) is
|
||||||
|
* the buffer of data to work upon. (len) is the size of (stream), and
|
||||||
|
* (udata) is a user-defined bit of data, which you pass as the last arg of
|
||||||
|
* Mix_RegisterEffect(), and is passed back unmolested to your callback.
|
||||||
|
* Your effect changes the contents of (stream) based on whatever parameters
|
||||||
|
* are significant, or just leaves it be, if you prefer. You can do whatever
|
||||||
|
* you like to the buffer, though, and it will continue in its changed state
|
||||||
|
* down the mixing pipeline, through any other effect functions, then finally
|
||||||
|
* to be mixed with the rest of the channels and music for the final output
|
||||||
|
* stream.
|
||||||
|
*
|
||||||
|
* DO NOT EVER call SDL_LockAudio() from your callback function!
|
||||||
|
*}
|
||||||
|
type
|
||||||
|
TMix_EffectFunc_t = procedure(chan: Integer; stream: Pointer; len: Integer; udata: Pointer);
|
||||||
|
|
||||||
|
{*
|
||||||
|
* This is a callback that signifies that a channel has finished all its
|
||||||
|
* loops and has completed playback. This gets called if the buffer
|
||||||
|
* plays out normally, or if you call Mix_HaltChannel(), implicitly stop
|
||||||
|
* a channel via Mix_AllocateChannels(), or unregister a callback while
|
||||||
|
* it's still playing.
|
||||||
|
*
|
||||||
|
* DO NOT EVER call SDL_LockAudio() from your callback function!
|
||||||
|
*}
|
||||||
|
type
|
||||||
|
TMix_EffectDone_t = procedure(chan: Integer; udata: Pointer);
|
||||||
|
|
||||||
|
{* Register a special effect function. At mixing time, the channel data is
|
||||||
|
* copied into a buffer and passed through each registered effect function.
|
||||||
|
* After it passes through all the functions, it is mixed into the final
|
||||||
|
* output stream. The copy to buffer is performed once, then each effect
|
||||||
|
* function performs on the output of the previous effect. Understand that
|
||||||
|
* this extra copy to a buffer is not performed if there are no effects
|
||||||
|
* registered for a given chunk, which saves CPU cycles, and any given
|
||||||
|
* effect will be extra cycles, too, so it is crucial that your code run
|
||||||
|
* fast. Also note that the data that your function is given is in the
|
||||||
|
* format of the sound device, and not the format you gave to Mix_OpenAudio(),
|
||||||
|
* although they may in reality be the same. This is an unfortunate but
|
||||||
|
* necessary speed concern. Use Mix_QuerySpec() to determine if you can
|
||||||
|
* handle the data before you register your effect, and take appropriate
|
||||||
|
* actions.
|
||||||
|
* You may also specify a callback (Mix_EffectDone_t) that is called when
|
||||||
|
* the channel finishes playing. This gives you a more fine-grained control
|
||||||
|
* than Mix_ChannelFinished(), in case you need to free effect-specific
|
||||||
|
* resources, etc. If you don't need this, you can specify NULL.
|
||||||
|
* You may set the callbacks before or after calling Mix_PlayChannel().
|
||||||
|
* Things like Mix_SetPanning() are just internal special effect functions,
|
||||||
|
* so if you are using that, you've already incurred the overhead of a copy
|
||||||
|
* to a separate buffer, and that these effects will be in the queue with
|
||||||
|
* any functions you've registered. The list of registered effects for a
|
||||||
|
* channel is reset when a chunk finishes playing, so you need to explicitly
|
||||||
|
* set them with each call to Mix_PlayChannel*().
|
||||||
|
* You may also register a special effect function that is to be run after
|
||||||
|
* final mixing occurs. The rules for these callbacks are identical to those
|
||||||
|
* in Mix_RegisterEffect, but they are run after all the channels and the
|
||||||
|
* music have been mixed into a single stream, whereas channel-specific
|
||||||
|
* effects run on a given channel before any other mixing occurs. These
|
||||||
|
* global effect callbacks are call "posteffects". Posteffects only have
|
||||||
|
* their Mix_EffectDone_t function called when they are unregistered (since
|
||||||
|
* the main output stream is never "done" in the same sense as a channel).
|
||||||
|
* You must unregister them manually when you've had enough. Your callback
|
||||||
|
* will be told that the channel being mixed is (MIX_CHANNEL_POST) if the
|
||||||
|
* processing is considered a posteffect.
|
||||||
|
*
|
||||||
|
* After all these effects have finished processing, the callback registered
|
||||||
|
* through Mix_SetPostMix() runs, and then the stream goes to the audio
|
||||||
|
* device.
|
||||||
|
*
|
||||||
|
* DO NOT EVER call SDL_LockAudio() from your callback function!
|
||||||
|
*
|
||||||
|
* returns zero if error (no such channel), nonzero if added.
|
||||||
|
* Error messages can be retrieved from Mix_GetError().
|
||||||
|
*}
|
||||||
|
function Mix_RegisterEffect(chan: Integer; f: TMix_EffectFunc_t; d: TMix_EffectDone_t; arg: Pointer): Integer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_RegisterEffect' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* You may not need to call this explicitly, unless you need to stop an
|
||||||
|
* effect from processing in the middle of a chunk's playback.
|
||||||
|
* Posteffects are never implicitly unregistered as they are for channels,
|
||||||
|
* but they may be explicitly unregistered through this function by
|
||||||
|
* specifying MIX_CHANNEL_POST for a channel.
|
||||||
|
* returns zero if error (no such channel or effect), nonzero if removed.
|
||||||
|
* Error messages can be retrieved from Mix_GetError().
|
||||||
|
*}
|
||||||
|
function Mix_UnregisterEffect(channel: Integer; f: TMix_EffectFunc_t): Integer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_UnregisterEffect' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* You may not need to call this explicitly, unless you need to stop all
|
||||||
|
* effects from processing in the middle of a chunk's playback. Note that
|
||||||
|
* this will also shut off some internal effect processing, since
|
||||||
|
* Mix_SetPanning() and others may use this API under the hood. This is
|
||||||
|
* called internally when a channel completes playback.
|
||||||
|
* Posteffects are never implicitly unregistered as they are for channels,
|
||||||
|
* but they may be explicitly unregistered through this function by
|
||||||
|
* specifying MIX_CHANNEL_POST for a channel.
|
||||||
|
* returns zero if error (no such channel), nonzero if all effects removed.
|
||||||
|
* Error messages can be retrieved from Mix_GetError().
|
||||||
|
*}
|
||||||
|
function Mix_UnregisterAllEffects(channel: Integer): Integer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_UnregisterEffects' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
const
|
||||||
|
MIX_EFFECTSMAXSPEED = 'MIX_EFFECTSMAXSPEED';
|
||||||
|
|
||||||
|
{*
|
||||||
|
* These are the internally-defined mixing effects. They use the same API that
|
||||||
|
* effects defined in the application use, but are provided here as a
|
||||||
|
* convenience. Some effects can reduce their quality or use more memory in
|
||||||
|
* the name of speed; to enable this, make sure the environment variable
|
||||||
|
* MIX_EFFECTSMAXSPEED (see above) is defined before you call
|
||||||
|
* Mix_OpenAudio().
|
||||||
|
*}
|
||||||
|
|
||||||
|
{* Set the panning of a channel. The left and right channels are specified
|
||||||
|
* as integers between 0 and 255, quietest to loudest, respectively.
|
||||||
|
*
|
||||||
|
* Technically, this is just individual volume control for a sample with
|
||||||
|
* two (stereo) channels, so it can be used for more than just panning.
|
||||||
|
* If you want real panning, call it like this:
|
||||||
|
*
|
||||||
|
* Mix_SetPanning(channel, left, 255 - left);
|
||||||
|
*
|
||||||
|
* ...which isn't so hard.
|
||||||
|
*
|
||||||
|
* Setting (channel) to MIX_CHANNEL_POST registers this as a posteffect, and
|
||||||
|
* the panning will be done to the final mixed stream before passing it on
|
||||||
|
* to the audio device.
|
||||||
|
*
|
||||||
|
* This uses the Mix_RegisterEffect() API internally, and returns without
|
||||||
|
* registering the effect function if the audio device is not configured
|
||||||
|
* for stereo output. Setting both (left) and (right) to 255 causes this
|
||||||
|
* effect to be unregistered, since that is the data's normal state.
|
||||||
|
*
|
||||||
|
* returns zero if error (no such channel or Mix_RegisterEffect() fails),
|
||||||
|
* nonzero if panning effect enabled. Note that an audio device in mono
|
||||||
|
* mode is a no-op, but this call will return successful in that case.
|
||||||
|
* Error messages can be retrieved from Mix_GetError().
|
||||||
|
*}
|
||||||
|
function Mix_SetPanning(channel: Integer; left: UInt8; right: UInt8): Integer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_SetPanning' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Set the position of a channel. (angle) is an integer from 0 to 360, that
|
||||||
|
* specifies the location of the sound in relation to the listener. (angle)
|
||||||
|
* will be reduced as neccesary (540 becomes 180 degrees, -100 becomes 260).
|
||||||
|
* Angle 0 is due north, and rotates clockwise as the value increases.
|
||||||
|
* For efficiency, the precision of this effect may be limited (angles 1
|
||||||
|
* through 7 might all produce the same effect, 8 through 15 are equal, etc).
|
||||||
|
* (distance) is an integer between 0 and 255 that specifies the space
|
||||||
|
* between the sound and the listener. The larger the number, the further
|
||||||
|
* away the sound is. Using 255 does not guarantee that the channel will be
|
||||||
|
* culled from the mixing process or be completely silent. For efficiency,
|
||||||
|
* the precision of this effect may be limited (distance 0 through 5 might
|
||||||
|
* all produce the same effect, 6 through 10 are equal, etc). Setting (angle)
|
||||||
|
* and (distance) to 0 unregisters this effect, since the data would be
|
||||||
|
* unchanged.
|
||||||
|
*
|
||||||
|
* If you need more precise positional audio, consider using OpenAL for
|
||||||
|
* spatialized effects instead of SDL_mixer. This is only meant to be a
|
||||||
|
* basic effect for simple "3D" games.
|
||||||
|
*
|
||||||
|
* If the audio device is configured for mono output, then you won't get
|
||||||
|
* any effectiveness from the angle; however, distance attenuation on the
|
||||||
|
* channel will still occur. While this effect will function with stereo
|
||||||
|
* voices, it makes more sense to use voices with only one channel of sound,
|
||||||
|
* so when they are mixed through this effect, the positioning will sound
|
||||||
|
* correct. You can convert them to mono through SDL before giving them to
|
||||||
|
* the mixer in the first place if you like.
|
||||||
|
*
|
||||||
|
* Setting (channel) to MIX_CHANNEL_POST registers this as a posteffect, and
|
||||||
|
* the positioning will be done to the final mixed stream before passing it
|
||||||
|
* on to the audio device.
|
||||||
|
*
|
||||||
|
* This is a convenience wrapper over Mix_SetDistance() and Mix_SetPanning().
|
||||||
|
*
|
||||||
|
* returns zero if error (no such channel or Mix_RegisterEffect() fails),
|
||||||
|
* nonzero if position effect is enabled.
|
||||||
|
* Error messages can be retrieved from Mix_GetError().
|
||||||
|
*}
|
||||||
|
function Mix_SetPosition(channel: Integer; angle: SInt16; distance: UInt8): Integer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_SetPosition' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Set the "distance" of a channel. (distance) is an integer from 0 to 255
|
||||||
|
* that specifies the location of the sound in relation to the listener.
|
||||||
|
* Distance 0 is overlapping the listener, and 255 is as far away as possible
|
||||||
|
* A distance of 255 does not guarantee silence; in such a case, you might
|
||||||
|
* want to try changing the chunk's volume, or just cull the sample from the
|
||||||
|
* mixing process with Mix_HaltChannel().
|
||||||
|
* For efficiency, the precision of this effect may be limited (distances 1
|
||||||
|
* through 7 might all produce the same effect, 8 through 15 are equal, etc).
|
||||||
|
* (distance) is an integer between 0 and 255 that specifies the space
|
||||||
|
* between the sound and the listener. The larger the number, the further
|
||||||
|
* away the sound is.
|
||||||
|
* Setting (distance) to 0 unregisters this effect, since the data would be
|
||||||
|
* unchanged.
|
||||||
|
* If you need more precise positional audio, consider using OpenAL for
|
||||||
|
* spatialized effects instead of SDL_mixer. This is only meant to be a
|
||||||
|
* basic effect for simple "3D" games.
|
||||||
|
*
|
||||||
|
* Setting (channel) to MIX_CHANNEL_POST registers this as a posteffect, and
|
||||||
|
* the distance attenuation will be done to the final mixed stream before
|
||||||
|
* passing it on to the audio device.
|
||||||
|
*
|
||||||
|
* This uses the Mix_RegisterEffect() API internally.
|
||||||
|
*
|
||||||
|
* returns zero if error (no such channel or Mix_RegisterEffect() fails),
|
||||||
|
* nonzero if position effect is enabled.
|
||||||
|
* Error messages can be retrieved from Mix_GetError().
|
||||||
|
*}
|
||||||
|
function Mix_SetDistance(channel: Integer; distance: UInt8): Integer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_SetDistance' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{*
|
||||||
|
* !!! FIXME : Haven't implemented, since the effect goes past the
|
||||||
|
* end of the sound buffer. Will have to think about this.
|
||||||
|
* --ryan.
|
||||||
|
*}
|
||||||
|
//#if 0
|
||||||
|
{* Causes an echo effect to be mixed into a sound. (echo) is the amount
|
||||||
|
* of echo to mix. 0 is no echo, 255 is infinite (and probably not
|
||||||
|
* what you want).
|
||||||
|
*
|
||||||
|
* Setting (channel) to MIX_CHANNEL_POST registers this as a posteffect, and
|
||||||
|
* the reverbing will be done to the final mixed stream before passing it on
|
||||||
|
* to the audio device.
|
||||||
|
*
|
||||||
|
* This uses the Mix_RegisterEffect() API internally. If you specify an echo
|
||||||
|
* of zero, the effect is unregistered, as the data is already in that state.
|
||||||
|
*
|
||||||
|
* returns zero if error (no such channel or Mix_RegisterEffect() fails),
|
||||||
|
* nonzero if reversing effect is enabled.
|
||||||
|
* Error messages can be retrieved from Mix_GetError().
|
||||||
|
*}
|
||||||
|
//extern no_parse_DECLSPEC int SDLCALL Mix_SetReverb(int channel, Uint8 echo);
|
||||||
|
//#endif
|
||||||
|
|
||||||
|
{* Causes a channel to reverse its stereo. This is handy if the user has his
|
||||||
|
* speakers hooked up backwards, or you would like to have a minor bit of
|
||||||
|
* psychedelia in your sound code. :) Calling this function with (flip)
|
||||||
|
* set to non-zero reverses the chunks's usual channels. If (flip) is zero,
|
||||||
|
* the effect is unregistered.
|
||||||
|
*
|
||||||
|
* This uses the Mix_RegisterEffect() API internally, and thus is probably
|
||||||
|
* more CPU intensive than having the user just plug in his speakers
|
||||||
|
* correctly. Mix_SetReverseStereo() returns without registering the effect
|
||||||
|
* function if the audio device is not configured for stereo output.
|
||||||
|
*
|
||||||
|
* If you specify MIX_CHANNEL_POST for (channel), then this the effect is used
|
||||||
|
* on the final mixed stream before sending it on to the audio device (a
|
||||||
|
* posteffect).
|
||||||
|
*
|
||||||
|
* returns zero if error (no such channel or Mix_RegisterEffect() fails),
|
||||||
|
* nonzero if reversing effect is enabled. Note that an audio device in mono
|
||||||
|
* mode is a no-op, but this call will return successful in that case.
|
||||||
|
* Error messages can be retrieved from Mix_GetError().
|
||||||
|
*}
|
||||||
|
function Mix_SetReverseStereo(channel: Integer; flip: Integer): Integer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_SetReverseStereo' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* end of effects API. --ryan. *}
|
||||||
|
|
||||||
|
{* Reserve the first channels (0 -> n-1) for the application, i.e. don't allocate
|
||||||
|
them dynamically to the next sample if requested with a -1 value below.
|
||||||
|
Returns the number of reserved channels.
|
||||||
|
*}
|
||||||
|
function Mix_ReserveChannels(num: Integer): Integer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_ReverseChannels' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Channel grouping functions *}
|
||||||
|
|
||||||
|
{* Attach a tag to a channel. A tag can be assigned to several mixer
|
||||||
|
channels, to form groups of channels.
|
||||||
|
If 'tag' is -1, the tag is removed (actually -1 is the tag used to
|
||||||
|
represent the group of all the channels).
|
||||||
|
Returns true if everything was OK.
|
||||||
|
*}
|
||||||
|
function Mix_GroupChannel(which: Integer; tag: Integer): Integer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_GroupChannel' {$ENDIF} {$ENDIF};
|
||||||
|
{* Assign several consecutive channels to a group *}
|
||||||
|
function Mix_GroupChannels(from: Integer; _to: Integer; tag: Integer): Integer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_GroupChannels' {$ENDIF} {$ENDIF};
|
||||||
|
{* Finds the first available channel in a group of channels,
|
||||||
|
returning -1 if none are available.
|
||||||
|
*}
|
||||||
|
function Mix_GroupAvailable(tag: Integer): Integer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_GroupAvailable' {$ENDIF} {$ENDIF};
|
||||||
|
{* Returns the number of channels in a group. This is also a subtle
|
||||||
|
way to get the total number of channels when 'tag' is -1
|
||||||
|
*}
|
||||||
|
function Mix_GroupCount(tag: Integer): Integer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_GroupCount' {$ENDIF} {$ENDIF};
|
||||||
|
{* Finds the "oldest" sample playing in a group of channels *}
|
||||||
|
function Mix_GroupOldest(tag: Integer): Integer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_GroupOldest' {$ENDIF} {$ENDIF};
|
||||||
|
{* Finds the "most recent" (i.e. last) sample playing in a group of channels *}
|
||||||
|
function Mix_GroupNewer(tag: Integer): Integer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_GroupNewer' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Play an audio chunk on a specific channel.
|
||||||
|
If the specified channel is -1, play on the first free channel.
|
||||||
|
If 'loops' is greater than zero, loop the sound that many times.
|
||||||
|
If 'loops' is -1, loop inifinitely (~65000 times).
|
||||||
|
Returns which channel was used to play the sound.
|
||||||
|
*}
|
||||||
|
function Mix_PlayChannel(channel: Integer; chunk: PMix_Chunk; loops: Integer): Integer;
|
||||||
|
{* The same as above, but the sound is played at most 'ticks' milliseconds *}
|
||||||
|
function Mix_PlayChannelTimed(channel: Integer; chunk: PMix_Chunk; loops: Integer; ticks: Integer): Integer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_PlayChannelTimed' {$ENDIF} {$ENDIF};
|
||||||
|
function Mix_PlayMusic(music: PMix_Music; loops: Integer): Integer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_PlayMusic' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Fade in music or a channel over "ms" milliseconds, same semantics as the "Play" functions *}
|
||||||
|
function Mix_FadeInMusic(music: PMix_Music; loops: Integer; ms: Integer): Integer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_FadeInMusic' {$ENDIF} {$ENDIF};
|
||||||
|
function Mix_FadeInMusicPos(music: PMix_Music; loops: Integer; ms: Integer; position: Double): Integer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_FadeInMusicPos' {$ENDIF} {$ENDIF};
|
||||||
|
function Mix_FadeInChannel(channel: Integer; chunk: PMix_Chunk; loops: Integer; ms: Integer): Integer;
|
||||||
|
function Mix_FadeInChannelTimed(channel: Integer; chunk: PMix_Chunk; loops: Integer; ms: Integer; ticks: Integer): Integer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_FadeInChannelTimed' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Set the volume in the range of 0-128 of a specific channel or chunk.
|
||||||
|
If the specified channel is -1, set volume for all channels.
|
||||||
|
Returns the original volume.
|
||||||
|
If the specified volume is -1, just return the current volume.
|
||||||
|
*}
|
||||||
|
function Mix_Volume(channel: Integer; volume: Integer): Integer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_Volume' {$ENDIF} {$ENDIF};
|
||||||
|
function Mix_VolumeChunk(chunk: PMix_Chunk; volume: Integer): Integer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_VolumeChunk' {$ENDIF} {$ENDIF};
|
||||||
|
function Mix_VolumeMusic(volume: Integer): Integer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_VolumeMusic' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Halt playing of a particular channel *}
|
||||||
|
function Mix_HaltChannel(channel: Integer): Integer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_HaltChannel' {$ENDIF} {$ENDIF};
|
||||||
|
function Mix_HaltGroup(tag: Integer): Integer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_HaltGroup' {$ENDIF} {$ENDIF};
|
||||||
|
function Mix_HaltMusic: Integer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_HaltMusic' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Change the expiration delay for a particular channel.
|
||||||
|
The sample will stop playing after the 'ticks' milliseconds have elapsed,
|
||||||
|
or remove the expiration if 'ticks' is -1
|
||||||
|
*}
|
||||||
|
function Mix_ExpireChannel(channel: Integer; ticks: Integer): Integer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_ExpireChannel' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Halt a channel, fading it out progressively till it's silent
|
||||||
|
The ms parameter indicates the number of milliseconds the fading
|
||||||
|
will take.
|
||||||
|
*}
|
||||||
|
function Mix_FadeOutChannel(which: Integer; ms: Integer): Integer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_FadeOutChannel' {$ENDIF} {$ENDIF};
|
||||||
|
function Mix_FadeOutGroup(tag: Integer; ms: Integer): Integer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_FadeOutGroup' {$ENDIF} {$ENDIF};
|
||||||
|
function Mix_FadeOutMusic(ms: Integer): Integer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_FadeOutMusic' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Query the fading status of a channel *}
|
||||||
|
function Mix_FadingMusic: TMix_Fading cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_FadingMusic' {$ENDIF} {$ENDIF};
|
||||||
|
function Mix_FadingChannel(which: Integer): TMix_Fading cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_FadingChannel' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Pause/Resume a particular channel *}
|
||||||
|
procedure Mix_Pause(channel: Integer) cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_Pause' {$ENDIF} {$ENDIF};
|
||||||
|
procedure Mix_Resume(channel: Integer) cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_Resume' {$ENDIF} {$ENDIF};
|
||||||
|
function Mix_Paused(channel: Integer): Integer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_Paused' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Pause/Resume the music stream *}
|
||||||
|
procedure Mix_PauseMusic cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_PauseMusic' {$ENDIF} {$ENDIF};
|
||||||
|
procedure Mix_ResumeMusic cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_ResumeMusic' {$ENDIF} {$ENDIF};
|
||||||
|
procedure Mix_RewindMusic cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_RewindMusic' {$ENDIF} {$ENDIF};
|
||||||
|
function Mix_PausedMusic: Integer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_PausedMusic' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Set the current position in the music stream.
|
||||||
|
This returns 0 if successful, or -1 if it failed or isn't implemented.
|
||||||
|
This function is only implemented for MOD music formats (set pattern
|
||||||
|
order number) and for OGG, FLAC, MP3_MAD, and MODPLUG music (set
|
||||||
|
position in seconds), at the moment.
|
||||||
|
*}
|
||||||
|
function Mix_SetMusicPosition(position: Double): Integer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_SetMusicPosition' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Check the status of a specific channel.
|
||||||
|
If the specified channel is -1, check all channels.
|
||||||
|
*}
|
||||||
|
function Mix_Playing(channel: Integer): Integer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_Playing' {$ENDIF} {$ENDIF};
|
||||||
|
function Mix_PlayingMusic: Integer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_PlayingMusic' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Stop music and set external music playback command *}
|
||||||
|
function Mix_SetMusicCMD(command: PAnsiChar): Integer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_SetMusicCMD' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Synchro value is set by MikMod from modules while playing *}
|
||||||
|
function Mix_SetSynchroValue(value: Integer): Integer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_SetSynchroValue' {$ENDIF} {$ENDIF};
|
||||||
|
function Mix_GetSynchroValue: Integer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_GetSynchroValue' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Set/Get/Iterate SoundFonts paths to use by supported MIDI backends *}
|
||||||
|
function Mix_SetSoundFonts(paths: PAnsiChar): Integer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_SetSoundFonts' {$ENDIF} {$ENDIF};
|
||||||
|
function Mix_GetSoundFonts: PAnsiChar cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_GetSoundFonts' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
type
|
||||||
|
TMix_SoundFunc = function(c: PAnsiChar; p: Pointer): Integer;
|
||||||
|
|
||||||
|
function Mix_EachSoundFont(func: TMix_SoundFunc; data: Pointer): Integer cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_EachSoundFont' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Get the Mix_Chunk currently associated with a mixer channel
|
||||||
|
Returns NULL if it's an invalid channel, or there's no chunk associated.
|
||||||
|
*}
|
||||||
|
function Mix_GetChunk(channel: Integer): PMix_Chunk cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_GetChunk' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Close the mixer, halting all playing audio *}
|
||||||
|
procedure Mix_CloseAudio cdecl; external MIX_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_MIX_CloseAudio' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* We'll use SDL for reporting errors *}
|
||||||
|
function Mix_SetError(const fmt: PAnsiChar): SInt32; cdecl;
|
||||||
|
function Mix_GetError: PAnsiChar; cdecl;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
procedure SDL_MIXER_VERSION(Out X: TSDL_Version);
|
||||||
|
begin
|
||||||
|
X.major := SDL_MIXER_MAJOR_VERSION;
|
||||||
|
X.minor := SDL_MIXER_MINOR_VERSION;
|
||||||
|
X.patch := SDL_MIXER_PATCHLEVEL;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure MIX_VERSION(Out X: TSDL_Version);
|
||||||
|
begin
|
||||||
|
SDL_MIXER_VERSION(X);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function Mix_FadeInChannel(channel: Integer; chunk: PMix_Chunk; loops: Integer; ms: Integer): Integer;
|
||||||
|
begin
|
||||||
|
Result := Mix_FadeInChannelTimed(channel, chunk, loops, ms, -1);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function Mix_PlayChannel(channel: Integer; chunk: PMix_Chunk; loops: Integer): Integer;
|
||||||
|
begin
|
||||||
|
Result := Mix_PlayChannelTimed(channel, chunk, loops, -1);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function Mix_LoadWAV(_file: PAnsiChar): PMix_Chunk;
|
||||||
|
begin
|
||||||
|
Result := Mix_LoadWAV_RW(SDL_RWFromFile(_file, 'rb'), 1);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function Mix_SetError(const fmt: PAnsiChar): SInt32; cdecl;
|
||||||
|
begin
|
||||||
|
Result := SDL_SetError(fmt);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function Mix_GetError: PAnsiChar; cdecl;
|
||||||
|
begin
|
||||||
|
Result := SDL_GetError();
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
429
model_viewer/sdl2/SDL2_net.pas
Normal file
429
model_viewer/sdl2/SDL2_net.pas
Normal file
@ -0,0 +1,429 @@
|
|||||||
|
|
||||||
|
|
||||||
|
{*
|
||||||
|
SDL_net: An example cross-platform network library for use with SDL
|
||||||
|
Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
Copyright (C) 2012 Simeon Maxein <smaxein@googlemail.com>
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*}
|
||||||
|
unit SDL2_net;
|
||||||
|
|
||||||
|
{$INCLUDE jedi.inc}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses SDL2;
|
||||||
|
|
||||||
|
const
|
||||||
|
{$IFDEF WINDOWS}
|
||||||
|
SDLNet_LibName = 'SDL2_net.dll';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF UNIX}
|
||||||
|
{$IFDEF DARWIN}
|
||||||
|
SDLNet_LibName = 'libSDL2_net.dylib';
|
||||||
|
{$ELSE}
|
||||||
|
{$IFDEF FPC}
|
||||||
|
SDLNet_LibName = 'libSDL2_net.so';
|
||||||
|
{$ELSE}
|
||||||
|
SDLNet_LibName = 'libSDL2_net-2.0.so.0';
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF MACOS}
|
||||||
|
SDLNet_LibName = 'SDL2_net';
|
||||||
|
{$IFDEF FPC}
|
||||||
|
{$linklib libSDL2_net}
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
|
||||||
|
type
|
||||||
|
TSDLNet_Version = TSDL_Version;
|
||||||
|
|
||||||
|
const
|
||||||
|
{* Printable format: "%d.%d.%d", MAJOR, MINOR, PATCHLEVEL *}
|
||||||
|
SDL_NET_MAJOR_VERSION = 2;
|
||||||
|
SDL_NET_MINOR_VERSION = 0;
|
||||||
|
SDL_NET_PATCHLEVEL = 0;
|
||||||
|
|
||||||
|
{* This macro can be used to fill a version structure with the compile-time
|
||||||
|
* version of the SDL_net library.
|
||||||
|
*}
|
||||||
|
procedure SDL_NET_VERSION(Out X: TSDL_Version);
|
||||||
|
|
||||||
|
{* This function gets the version of the dynamically linked SDL_net library.
|
||||||
|
it should NOT be used to fill a version structure, instead you should
|
||||||
|
use the SDL_NET_VERSION() macro.
|
||||||
|
*}
|
||||||
|
procedure SDLNet_Linked_Version() cdecl; external SDLNet_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDLNet_Linked_Version' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Initialize/Cleanup the network API
|
||||||
|
SDL must be initialized before calls to functions in this library,
|
||||||
|
because this library uses utility functions from the SDL library.
|
||||||
|
*}
|
||||||
|
function SDLNet_Init(): Integer cdecl; external SDLNet_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDLNet_Init' {$ENDIF} {$ENDIF};
|
||||||
|
procedure SDLNet_Quit() cdecl; external SDLNet_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDLNet_Quit' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
type
|
||||||
|
{***********************************************************************}
|
||||||
|
{* IPv4 hostname resolution API *}
|
||||||
|
{***********************************************************************}
|
||||||
|
TIPaddress = record
|
||||||
|
host: UInt32; {* 32-bit IPv4 host address *}
|
||||||
|
port: UInt16; {* 16-bit protocol port *}
|
||||||
|
end;
|
||||||
|
PIPaddress = ^TIPaddress;
|
||||||
|
|
||||||
|
{* Resolve a host name and port to an IP address in network form.
|
||||||
|
If the function succeeds, it will return 0.
|
||||||
|
If the host couldn't be resolved, the host portion of the returned
|
||||||
|
address will be INADDR_NONE, and the function will return -1.
|
||||||
|
If 'host' is NULL, the resolved host will be set to INADDR_ANY.
|
||||||
|
*}
|
||||||
|
const
|
||||||
|
INADDR_ANY = $00000000;
|
||||||
|
INADDR_NONE = $FFFFFFFF;
|
||||||
|
INADDR_LOOPBACK = $7f000001;
|
||||||
|
INADDR_BROADCAST = $FFFFFFFF;
|
||||||
|
|
||||||
|
function SDLNet_ResolveHost(address: PIPaddress; const host: PAnsiChar; port: UInt16): Integer cdecl; external SDLNet_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDLNet_ResolveHost' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Resolve an ip address to a host name in canonical form.
|
||||||
|
If the ip couldn't be resolved, this function returns NULL,
|
||||||
|
otherwise a pointer to a static buffer containing the hostname
|
||||||
|
is returned. Note that this function is not thread-safe.
|
||||||
|
*}
|
||||||
|
function SDLNet_ResolveIP(const ip: PIPaddress): PAnsiChar cdecl; external SDLNet_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDLNet_ResolveIP' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Get the addresses of network interfaces on this system.
|
||||||
|
This returns the number of addresses saved in 'addresses'
|
||||||
|
*}
|
||||||
|
function SDLNet_GetLocalAddresses(addresses: PIPaddress; maxcount: Integer): Integer cdecl; external SDLNet_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDLNet_GetLocalAddresses' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{***********************************************************************}
|
||||||
|
{* TCP network API *}
|
||||||
|
{***********************************************************************}
|
||||||
|
type
|
||||||
|
_TCPSocket = record
|
||||||
|
end;
|
||||||
|
TTCPSocket = ^_TCPSocket;
|
||||||
|
|
||||||
|
{* Open a TCP network socket
|
||||||
|
If ip.host is INADDR_NONE or INADDR_ANY, this creates a local server
|
||||||
|
socket on the given port, otherwise a TCP connection to the remote
|
||||||
|
host and port is attempted. The address passed in should already be
|
||||||
|
swapped to network byte order (addresses returned from
|
||||||
|
SDLNet_ResolveHost() are already in the correct form).
|
||||||
|
The newly created socket is returned, or NULL if there was an error.
|
||||||
|
*}
|
||||||
|
function SDLNet_TCP_Open(ip: PIPaddress): TTCPSocket cdecl; external SDLNet_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDLNet_TCP_Open' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Accept an incoming connection on the given server socket.
|
||||||
|
The newly created socket is returned, or NULL if there was an error.
|
||||||
|
*}
|
||||||
|
function SDLNet_TCP_Accept(server: TTCPSocket): TTCPSocket cdecl; external SDLNet_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDLNet_TCP_Accept' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Get the IP address of the remote system associated with the socket.
|
||||||
|
If the socket is a server socket, this function returns NULL.
|
||||||
|
*}
|
||||||
|
function SDLNet_TCP_GetPeerAddress(sock: TTCPSocket): PIPaddress cdecl; external SDLNet_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDLNet_TCP_GetPeerAddress' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Send 'len' bytes of 'data' over the non-server socket 'sock'
|
||||||
|
This function returns the actual amount of data sent. If the return value
|
||||||
|
is less than the amount of data sent, then either the remote connection was
|
||||||
|
closed, or an unknown socket error occurred.
|
||||||
|
*}
|
||||||
|
function SDLNet_TCP_Send(sock: TTCPSocket; const data: Pointer; len: Integer): Integer cdecl; external SDLNet_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDLNet_TCP_Send' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Receive up to 'maxlen' bytes of data over the non-server socket 'sock',
|
||||||
|
and store them in the buffer pointed to by 'data'.
|
||||||
|
This function returns the actual amount of data received. If the return
|
||||||
|
value is less than or equal to zero, then either the remote connection was
|
||||||
|
closed, or an unknown socket error occurred.
|
||||||
|
*}
|
||||||
|
function SDLNet_TCP_Recv(sock: TTCPSocket; data: Pointer; maxlen: Integer): Integer cdecl; external SDLNet_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDLNet_TCP_Recv' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Close a TCP network socket *}
|
||||||
|
procedure SDLNet_TCP_Close(sock: TTCPSocket) cdecl; external SDLNet_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDLNet_TCP_Close' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{***********************************************************************}
|
||||||
|
{* UDP network API *}
|
||||||
|
{***********************************************************************}
|
||||||
|
|
||||||
|
const
|
||||||
|
{* The maximum channels on a a UDP socket *}
|
||||||
|
SDLNET_MAX_UDPCHANNELS = 32;
|
||||||
|
{* The maximum addresses bound to a single UDP socket channel *}
|
||||||
|
SDLNET_MAX_UDPADDRESSES = 4;
|
||||||
|
|
||||||
|
type
|
||||||
|
TUDPSocket = record
|
||||||
|
end;
|
||||||
|
PUDPSocket = ^TUDPSocket;
|
||||||
|
|
||||||
|
TUDPPacket = record
|
||||||
|
channel: Integer; {* The src/dst channel of the packet *}
|
||||||
|
data: PUInt8; {* The packet data *}
|
||||||
|
len: Integer; {* The length of the packet data *}
|
||||||
|
maxlen: Integer; {* The size of the data buffer *}
|
||||||
|
status: Integer; {* packet status after sending *}
|
||||||
|
address: TIPaddress; {* The source/dest address of an incoming/outgoing packet *}
|
||||||
|
end;
|
||||||
|
PUDPPacket = ^TUDPPacket;
|
||||||
|
PPUDPPacket = ^PUDPPacket;
|
||||||
|
|
||||||
|
{* Allocate/resize/free a single UDP packet 'size' bytes long.
|
||||||
|
The new packet is returned, or NULL if the function ran out of memory.
|
||||||
|
*}
|
||||||
|
function SDLNet_AllocPacket(size: Integer): PUDPPacket cdecl; external SDLNet_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDLNet_AllocPacket' {$ENDIF} {$ENDIF};
|
||||||
|
function SDLNet_ResizePacket(packet: PUDPPacket; newsize: Integer): Integer cdecl; external SDLNet_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDLNet_ResizePacket' {$ENDIF} {$ENDIF};
|
||||||
|
procedure SDLNet_FreePacket(packet: PUDPPacket) cdecl; external SDLNet_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDLNet_FreePacket' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Allocate/Free a UDP packet vector (array of packets) of 'howmany' packets,
|
||||||
|
each 'size' bytes long.
|
||||||
|
A pointer to the first packet in the array is returned, or NULL if the
|
||||||
|
function ran out of memory.
|
||||||
|
*}
|
||||||
|
function SDLNet_AllocPacketV(howmany: Integer; size: Integer): PPUDPPacket cdecl; external SDLNet_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDLNet_AllocPacketV' {$ENDIF} {$ENDIF};
|
||||||
|
procedure SDLNet_FreePacketV(packetV: PPUDPPacket) cdecl; external SDLNet_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDLNet_FreePacketV' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Open a UDP network socket
|
||||||
|
If 'port' is non-zero, the UDP socket is bound to a local port.
|
||||||
|
The 'port' should be given in native byte order, but is used
|
||||||
|
internally in network (big endian) byte order, in addresses, etc.
|
||||||
|
This allows other systems to send to this socket via a known port.
|
||||||
|
*}
|
||||||
|
function SDLNet_UDP_Open(port: UInt16): TUDPSocket cdecl; external SDLNet_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDLNet_UDP_Open' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Set the percentage of simulated packet loss for packets sent on the socket. *}
|
||||||
|
procedure SDLNet_UDP_SetPacketLoss(sock: TUDPSocket; percent: Integer) cdecl; external SDLNet_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDLNet_UDP_SetPacketLoss' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Bind the address 'address' to the requested channel on the UDP socket.
|
||||||
|
If the channel is -1, then the first unbound channel that has not yet
|
||||||
|
been bound to the maximum number of addresses will be bound with
|
||||||
|
the given address as it's primary address.
|
||||||
|
If the channel is already bound, this new address will be added to the
|
||||||
|
list of valid source addresses for packets arriving on the channel.
|
||||||
|
If the channel is not already bound, then the address becomes the primary
|
||||||
|
address, to which all outbound packets on the channel are sent.
|
||||||
|
This function returns the channel which was bound, or -1 on error.
|
||||||
|
*}
|
||||||
|
function SDLNet_UDP_Bind(sock: TUDPSocket; channel: Integer; const address: PIPaddress): Integer cdecl; external SDLNet_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDLNet_UDP_Bind' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Unbind all addresses from the given channel *}
|
||||||
|
procedure SDLNet_UDP_Unbind(sock: TUDPSocket; channel: Integer) cdecl; external SDLNet_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDLNet_UDP_Unbind' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Get the primary IP address of the remote system associated with the
|
||||||
|
socket and channel. If the channel is -1, then the primary IP port
|
||||||
|
of the UDP socket is returned -- this is only meaningful for sockets
|
||||||
|
opened with a specific port.
|
||||||
|
If the channel is not bound and not -1, this function returns NULL.
|
||||||
|
*}
|
||||||
|
function SDLNet_UDP_GetPeerAddress(sock: TUDPSocket; channel: Integer): PIPaddress cdecl; external SDLNet_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDLNet_UDP_GetPeerAddress' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Send a vector of packets to the the channels specified within the packet.
|
||||||
|
If the channel specified in the packet is -1, the packet will be sent to
|
||||||
|
the address in the 'src' member of the packet.
|
||||||
|
Each packet will be updated with the status of the packet after it has
|
||||||
|
been sent, -1 if the packet send failed.
|
||||||
|
This function returns the number of packets sent.
|
||||||
|
*}
|
||||||
|
function SDLNet_UDP_SendV(sock: TUDPSocket; packets: PPUDPPacket; npackets: Integer): Integer cdecl; external SDLNet_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDLNet_UDP_SendV' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Send a single packet to the specified channel.
|
||||||
|
If the channel specified in the packet is -1, the packet will be sent to
|
||||||
|
the address in the 'src' member of the packet.
|
||||||
|
The packet will be updated with the status of the packet after it has
|
||||||
|
been sent.
|
||||||
|
This function returns 1 if the packet was sent, or 0 on error.
|
||||||
|
|
||||||
|
NOTE:
|
||||||
|
The maximum size of the packet is limited by the MTU (Maximum Transfer Unit)
|
||||||
|
of the transport medium. It can be as low as 250 bytes for some PPP links,
|
||||||
|
and as high as 1500 bytes for ethernet.
|
||||||
|
*}
|
||||||
|
function SDLNet_UDP_Send(sock: TUDPSocket; channel: Integer; packet: PUDPPacket): Integer cdecl; external SDLNet_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDLNet_UDP_Send' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Receive a vector of pending packets from the UDP socket.
|
||||||
|
The returned packets contain the source address and the channel they arrived
|
||||||
|
on. If they did not arrive on a bound channel, the the channel will be set
|
||||||
|
to -1.
|
||||||
|
The channels are checked in highest to lowest order, so if an address is
|
||||||
|
bound to multiple channels, the highest channel with the source address
|
||||||
|
bound will be returned.
|
||||||
|
This function returns the number of packets read from the network, or -1
|
||||||
|
on error. This function does not block, so can return 0 packets pending.
|
||||||
|
*}
|
||||||
|
function SDLNet_UDP_RecvV(sock: TUDPSocket; packets: PPUDPPacket): Integer cdecl; external SDLNet_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDLNet_UDP_RecvV' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Receive a single packet from the UDP socket.
|
||||||
|
The returned packet contains the source address and the channel it arrived
|
||||||
|
on. If it did not arrive on a bound channel, the the channel will be set
|
||||||
|
to -1.
|
||||||
|
The channels are checked in highest to lowest order, so if an address is
|
||||||
|
bound to multiple channels, the highest channel with the source address
|
||||||
|
bound will be returned.
|
||||||
|
This function returns the number of packets read from the network, or -1
|
||||||
|
on error. This function does not block, so can return 0 packets pending.
|
||||||
|
*}
|
||||||
|
function SDLNet_UDP_Recv(sock: TUDPSocket; packet: PUDPPacket): Integer cdecl; external SDLNet_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDLNet_UDP_Recv' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Close a UDP network socket *}
|
||||||
|
procedure SDLNet_UDP_Close(sock: TUDPSocket) cdecl; external SDLNet_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDLNet_UDP_Close' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{***********************************************************************}
|
||||||
|
{* Hooks for checking sockets for available data *}
|
||||||
|
{***********************************************************************}
|
||||||
|
|
||||||
|
type
|
||||||
|
TSDLNet_SocketSet = record
|
||||||
|
end;
|
||||||
|
PSDLNet_SocketSet = ^TSDLNet_SocketSet;
|
||||||
|
|
||||||
|
{* Any network socket can be safely cast to this socket type *}
|
||||||
|
TSDLNet_GenericSocket = record
|
||||||
|
ready: Integer;
|
||||||
|
end;
|
||||||
|
PSDLNet_GenericSocket = ^TSDLNet_GenericSocket;
|
||||||
|
|
||||||
|
{* Allocate a socket set for use with SDLNet_CheckSockets()
|
||||||
|
This returns a socket set for up to 'maxsockets' sockets, or NULL if
|
||||||
|
the function ran out of memory.
|
||||||
|
*}
|
||||||
|
function SDLNet_AllocSocketSet(maxsockets: Integer): TSDLNet_GenericSocket cdecl; external SDLNet_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDLNet_AllocSocketSet' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Add a socket to a set of sockets to be checked for available data *}
|
||||||
|
function SDLNet_AddSocket(set_: TSDLNet_SocketSet; sock: TSDLNet_GenericSocket): Integer cdecl; external SDLNet_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDLNet_AddSocket' {$ENDIF} {$ENDIF};
|
||||||
|
//function SDLNet_TCP_AddSocket(set_: TSDLNet_SocketSet; sock: TTCPSocket): Integer; inline;
|
||||||
|
//function SDLNet_UDP_AddSocket(set_: TSDLNet_SocketSet; sock: TUDPSocket): Integer; inline;
|
||||||
|
|
||||||
|
{* Remove a socket from a set of sockets to be checked for available data *}
|
||||||
|
function SDLNet_DelSocket(set_: TSDLNet_SocketSet; sock: TSDLNet_GenericSocket): Integer cdecl; external SDLNet_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDLNet_DelSocket' {$ENDIF} {$ENDIF};
|
||||||
|
//function SDLNet_TCP_DelSocket(set_: TSDLNet_SocketSet; sock: TTCPSocket): Integer; inline;
|
||||||
|
//function SDLNet_UDP_DelSocket(set_: TSDLNet_SocketSet; sock: TUDPSocket): Integer; inline;
|
||||||
|
|
||||||
|
{* This function checks to see if data is available for reading on the
|
||||||
|
given set of sockets. If 'timeout' is 0, it performs a quick poll,
|
||||||
|
otherwise the function returns when either data is available for
|
||||||
|
reading, or the timeout in milliseconds has elapsed, which ever occurs
|
||||||
|
first. This function returns the number of sockets ready for reading,
|
||||||
|
or -1 if there was an error with the select() system call.
|
||||||
|
*}
|
||||||
|
function SDLNet_CheckSockets(set_: TSDLNet_SocketSet; timeout: UInt32): Integer cdecl; external SDLNet_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDLNet_CheckSockets' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* After calling SDLNet_CheckSockets(), you can use this function on a
|
||||||
|
socket that was in the socket set, to find out if data is available
|
||||||
|
for reading.
|
||||||
|
*}
|
||||||
|
function SDLNet_SocketReady(sock: TSDLNet_GenericSocket): Integer; {$IFNDEF DELPHI} inline; {$ELSE} {$IFDEF DELPHI10UP} inline; {$ENDIF} {$ENDIF}
|
||||||
|
|
||||||
|
{* Free a set of sockets allocated by SDL_NetAllocSocketSet() *}
|
||||||
|
procedure SDLNet_FreeSocketSet(set_: TSDLNet_SocketSet) cdecl; external SDLNet_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDLNet_FreeSocketSet' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{***********************************************************************}
|
||||||
|
{* Error reporting functions *}
|
||||||
|
{***********************************************************************}
|
||||||
|
|
||||||
|
procedure SDLNet_SetError(const fmt: PAnsiChar); cdecl;
|
||||||
|
function SDLNet_GetError(): PAnsiChar; cdecl;
|
||||||
|
|
||||||
|
{***********************************************************************}
|
||||||
|
{* Inline functions to read/write network data *}
|
||||||
|
{***********************************************************************}
|
||||||
|
|
||||||
|
{* Write a 16/32-bit value to network packet buffer *}
|
||||||
|
|
||||||
|
//procedure SDLNet_Write16(value: UInt16; areap: Pointer); inline;
|
||||||
|
//procedure SDLNet_Write32(value: UInt32; areap: Pointer); inline;
|
||||||
|
|
||||||
|
{* Read a 16/32-bit value from network packet buffer *}
|
||||||
|
//function SDLNet_Read16(const areap: Pointer): UInt16; inline;
|
||||||
|
//function SDLNet_Read32(const areap: Pointer): UInt32; inline;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
procedure SDL_NET_VERSION(Out X: TSDL_Version);
|
||||||
|
begin
|
||||||
|
X.major := SDL_NET_MAJOR_VERSION;
|
||||||
|
X.minor := SDL_NET_MINOR_VERSION;
|
||||||
|
X.patch := SDL_NET_PATCHLEVEL;
|
||||||
|
end;
|
||||||
|
|
||||||
|
(*
|
||||||
|
function SDLNet_TCP_AddSocket(set_: TSDLNet_SocketSet; sock: TTCPSocket): Integer;
|
||||||
|
begin
|
||||||
|
Result := SDLNet_AddSocket(set_, TSDLNet_GenericSocket(sock));
|
||||||
|
end;
|
||||||
|
|
||||||
|
function SDLNet_UDP_AddSocket(set_: TSDLNet_SocketSet; sock: TUDPSocket): Integer;
|
||||||
|
begin
|
||||||
|
Result := SDLNet_AddSocket(set_, TSDLNet_GenericSocket(sock));
|
||||||
|
end;
|
||||||
|
|
||||||
|
function SDLNet_TCP_DelSocket(set_: TSDLNet_SocketSet; sock: TTCPSocket): Integer;
|
||||||
|
begin
|
||||||
|
Result := SDLNet_DelSocket(set_, TSDLNet_GenericSocket(sock));
|
||||||
|
end;
|
||||||
|
|
||||||
|
function SDLNet_UDP_DelSocket(set_: TSDLNet_SocketSet; sock: TUDPSocket): Integer;
|
||||||
|
begin
|
||||||
|
Result := SDLNet_DelSocket(set_, TSDLNet_GenericSocket(sock));
|
||||||
|
end;
|
||||||
|
*)
|
||||||
|
|
||||||
|
function SDLNet_SocketReady(sock: TSDLNet_GenericSocket): Integer;
|
||||||
|
begin
|
||||||
|
Result := sock.ready;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure SDLNet_SetError(const fmt: PAnsiChar); cdecl;
|
||||||
|
begin
|
||||||
|
SDL_SetError(fmt);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function SDLNet_GetError(): PAnsiChar; cdecl;
|
||||||
|
begin
|
||||||
|
Result := SDL_GetError();
|
||||||
|
end;
|
||||||
|
|
||||||
|
(*
|
||||||
|
procedure SDLNet_Write16(value: UInt16; areap: Pointer);
|
||||||
|
begin
|
||||||
|
PUInt16(areap) := SDL_SwapBE16(value);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure SDLNet_Write32(value: UInt32; areap: Pointer);
|
||||||
|
begin
|
||||||
|
PUInt32(areap) := SDL_SwapBE32(value);
|
||||||
|
end;
|
||||||
|
|
||||||
|
{* Read a 16/32-bit value from network packet buffer *}
|
||||||
|
function SDLNet_Read16(const areap: Pointer): UInt16;
|
||||||
|
begin
|
||||||
|
Result := SDL_SwapBE16(PUInt16(areap));
|
||||||
|
end;
|
||||||
|
|
||||||
|
function SDLNet_Read32(const areap: Pointer): UInt32;
|
||||||
|
begin
|
||||||
|
Result := SDL_SwapBE32(PUInt32(areap));
|
||||||
|
end;
|
||||||
|
*)
|
||||||
|
end.
|
||||||
|
|
306
model_viewer/sdl2/SDL2_ttf.pas
Normal file
306
model_viewer/sdl2/SDL2_ttf.pas
Normal file
@ -0,0 +1,306 @@
|
|||||||
|
unit sdl2_ttf;
|
||||||
|
|
||||||
|
{*
|
||||||
|
SDL_ttf: A companion library to SDL for working with TrueType (tm) fonts
|
||||||
|
Copyright (C) 2001-2013 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgement in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*}
|
||||||
|
|
||||||
|
{* This library is a wrapper around the excellent FreeType 2.0 library,
|
||||||
|
available at:
|
||||||
|
http://www.freetype.org/
|
||||||
|
*}
|
||||||
|
|
||||||
|
{* ChangeLog: (Header Translation)
|
||||||
|
----------
|
||||||
|
|
||||||
|
v.1.72-stable; 29.09.2013: fixed bug with procedures without parameters
|
||||||
|
(they must have brackets)
|
||||||
|
v.1.70-stable; 11.09.2013: Initial Commit
|
||||||
|
|
||||||
|
*}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
{$I jedi.inc}
|
||||||
|
|
||||||
|
uses
|
||||||
|
SDL2;
|
||||||
|
|
||||||
|
const
|
||||||
|
{$IFDEF WINDOWS}
|
||||||
|
TTF_LibName = 'SDL2_ttf.dll';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF UNIX}
|
||||||
|
{$IFDEF DARWIN}
|
||||||
|
TTF_LibName = 'libSDL2_tff.dylib';
|
||||||
|
{$ELSE}
|
||||||
|
{$IFDEF FPC}
|
||||||
|
TTF_LibName = 'libSDL2_ttf.so';
|
||||||
|
{$ELSE}
|
||||||
|
TTF_LibName = 'libSDL2_ttf.so.0';
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF MACOS}
|
||||||
|
TTF_LibName = 'SDL2_ttf';
|
||||||
|
{$IFDEF FPC}
|
||||||
|
{$linklib libSDL2_ttf}
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{* Set up for C function definitions, even when using C++ *}
|
||||||
|
|
||||||
|
{* Printable format: "%d.%d.%d", MAJOR, MINOR, PATCHLEVEL *}
|
||||||
|
const
|
||||||
|
SDL_TTF_MAJOR_VERSION = 2;
|
||||||
|
SDL_TTF_MINOR_VERSION = 0;
|
||||||
|
SDL_TTF_PATCHLEVEL = 12;
|
||||||
|
|
||||||
|
Procedure SDL_TTF_VERSION(Out X:TSDL_Version);
|
||||||
|
|
||||||
|
{* Backwards compatibility *}
|
||||||
|
const
|
||||||
|
TTF_MAJOR_VERSION = SDL_TTF_MAJOR_VERSION;
|
||||||
|
TTF_MINOR_VERSION = SDL_TTF_MINOR_VERSION;
|
||||||
|
TTF_PATCHLEVEL = SDL_TTF_PATCHLEVEL;
|
||||||
|
//TTF_VERSION(X) = SDL_TTF_VERSION(X);
|
||||||
|
|
||||||
|
{* This function gets the version of the dynamically linked SDL_ttf library.
|
||||||
|
it should NOT be used to fill a version structure, instead you should
|
||||||
|
use the SDL_TTF_VERSION() macro.
|
||||||
|
*}
|
||||||
|
function TTF_Linked_Version: TSDL_Version cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_Linked_Version' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* ZERO WIDTH NO-BREAKSPACE (Unicode byte order mark) *}
|
||||||
|
const
|
||||||
|
UNICODE_BOM_NATIVE = $FEFF;
|
||||||
|
UNICODE_BOM_SWAPPED = $FFFE;
|
||||||
|
|
||||||
|
{* This function tells the library whether UNICODE text is generally
|
||||||
|
byteswapped. A UNICODE BOM character in a string will override
|
||||||
|
this setting for the remainder of that string.
|
||||||
|
*}
|
||||||
|
procedure TTF_ByteSwappedUNICODE(swapped: Integer) cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_ByteSwappedUNICODE' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* The internal structure containing font information *}
|
||||||
|
type
|
||||||
|
PTTF_Font = ^TTTF_Font;
|
||||||
|
TTTF_Font = record end; //todo?
|
||||||
|
|
||||||
|
{* Initialize the TTF engine - returns 0 if successful, -1 on error *}
|
||||||
|
function TTF_Init(): Integer cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_Init' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Open a font file and create a font of the specified point size.
|
||||||
|
* Some .fon fonts will have several sizes embedded in the file, so the
|
||||||
|
* point size becomes the index of choosing which size. If the value
|
||||||
|
* is too high, the last indexed size will be the default. *}
|
||||||
|
function TTF_OpenFont(_file: PAnsiChar; ptsize: Integer): PTTF_Font cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_OpenFont' {$ENDIF} {$ENDIF};
|
||||||
|
function TTF_OpenFontIndex(_file: PAnsiChar; ptsize: Integer; index: LongInt): PTTF_Font cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_OpenFontIndex' {$ENDIF} {$ENDIF};
|
||||||
|
function TTF_OpenFontRW(src: PSDL_RWops; freesrc: Integer; ptsize: LongInt): PTTF_Font cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_OpenFontRW' {$ENDIF} {$ENDIF};
|
||||||
|
function TTF_OpenFontIndexRW(src: PSDL_RWops; freesrc: Integer; ptsize: Integer; index: LongInt): PTTF_Font cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_OpenFontIndexRW' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Set and retrieve the font style *}
|
||||||
|
const
|
||||||
|
TTF_STYLE_NORMAL = $00;
|
||||||
|
TTF_STYLE_BOLD = $01;
|
||||||
|
TTF_STYLE_ITALIC = $02;
|
||||||
|
TTF_STYLE_UNDERLINE = $04;
|
||||||
|
TTF_STYLE_STRIKETHROUGH = $08;
|
||||||
|
|
||||||
|
function TTF_GetFontStyle(font: PTTF_Font): Integer cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_GetFontStyle' {$ENDIF} {$ENDIF};
|
||||||
|
procedure TTF_SetFontStyle(font: PTTF_Font; style: Integer) cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_SetFontStyle' {$ENDIF} {$ENDIF};
|
||||||
|
function TTF_GetFontOutline(font: PTTF_Font): Integer cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_GetFontOutline' {$ENDIF} {$ENDIF};
|
||||||
|
procedure TTF_SetFontOutline(font: PTTF_Font; outline: Integer) cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_SetFontOutline' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Set and retrieve FreeType hinter settings *}
|
||||||
|
const
|
||||||
|
TTF_HINTING_NORMAL = 0;
|
||||||
|
TTF_HINTING_LIGHT = 1;
|
||||||
|
TTF_HINTING_MONO = 2;
|
||||||
|
TTF_HINTING_NONE = 3;
|
||||||
|
|
||||||
|
function TTF_GetFontHinting(font: PTTF_Font): Integer cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_GetFontHinting' {$ENDIF} {$ENDIF};
|
||||||
|
procedure TTF_SetFontHinting(font: PTTF_Font; hinting: Integer) cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_SetFontHinting' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Get the total height of the font - usually equal to point size *}
|
||||||
|
function TTF_FontHeight(font: PTTF_Font): Integer cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_FontHeight' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Get the offset from the baseline to the top of the font
|
||||||
|
This is a positive value, relative to the baseline.
|
||||||
|
*}
|
||||||
|
function TTF_FontAscent(font: PTTF_Font): Integer cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_FontAscent' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Get the offset from the baseline to the bottom of the font
|
||||||
|
This is a negative value, relative to the baseline.
|
||||||
|
*}
|
||||||
|
function TTF_FontDescent(font: PTTF_Font): Integer cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_FontDescent' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Get the recommended spacing between lines of text for this font *}
|
||||||
|
function TTF_FontLineSkip(font: PTTF_Font): Integer cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_FontLineSkip' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Get/Set whether or not kerning is allowed for this font *}
|
||||||
|
function TTF_GetFontKerning(font: PTTF_Font): Integer cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_GetFontKerning' {$ENDIF} {$ENDIF};
|
||||||
|
procedure TTF_SetFontKerning(font: PTTF_Font; allowed: Integer) cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_SetFontKerning' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Get the number of faces of the font *}
|
||||||
|
function TTF_FontFaces(font: PTTF_Font): LongInt cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_FontFaces' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Get the font face attributes, if any *}
|
||||||
|
function TTF_FontFaceIsFixedWidth(font: PTTF_Font): Integer cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_FontFaceIsFixedWidth' {$ENDIF} {$ENDIF};
|
||||||
|
function TTF_FontFaceFamilyName(font: PTTF_Font): PAnsiChar cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_FontFaceFamilyName' {$ENDIF} {$ENDIF};
|
||||||
|
function TTF_FontFaceStyleName(font: PTTF_Font): PAnsiChar cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_FontFaceStyleName' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Check wether a glyph is provided by the font or not *}
|
||||||
|
function TTF_GlyphIsProvided(font: PTTF_Font; ch: UInt16): Integer cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_GlyphIsProvided' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Get the metrics (dimensions) of a glyph
|
||||||
|
To understand what these metrics mean, here is a useful link:
|
||||||
|
http://freetype.sourceforge.net/freetype2/docs/tutorial/step2.html
|
||||||
|
*}
|
||||||
|
function TTF_GlyphMetrics(font: PTTF_Font; ch: UInt16;
|
||||||
|
minx, maxx: PInt;
|
||||||
|
miny, maxy: PInt; advance: PInt): Integer cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_GlyphMetrics' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Get the dimensions of a rendered string of text *}
|
||||||
|
function TTF_SizeText(font: PTTF_Font; text: PAnsiChar; w, h: PInt): Integer cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_SizeText' {$ENDIF} {$ENDIF};
|
||||||
|
function TTF_SizeUTF8(font: PTTF_Font; text: PAnsiChar; w, h: PInt): Integer cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_SizeUTF8' {$ENDIF} {$ENDIF};
|
||||||
|
function TTF_SizeUNICODE(font: PTTF_Font; text: PUInt16; w, h: PInt): Integer cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_SizeUNICODE' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Create an 8-bit palettized surface and render the given text at
|
||||||
|
fast quality with the given font and color. The 0 pixel is the
|
||||||
|
colorkey, giving a transparent background, and the 1 pixel is set
|
||||||
|
to the text color.
|
||||||
|
This function returns the new surface, or NULL if there was an error.
|
||||||
|
*}
|
||||||
|
function TTF_RenderText_Solid(font: PTTF_Font; text: PAnsiChar; fg: TSDL_Color): PSDL_Surface cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_RenderText_Solid' {$ENDIF} {$ENDIF};
|
||||||
|
function TTF_RenderUTF8_Solid(font: PTTF_Font; text: PAnsiChar; fg: TSDL_Color): PSDL_Surface cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_RenderUTF8_Solid' {$ENDIF} {$ENDIF};
|
||||||
|
function TTF_RenderUNICODE_Solid(font: PTTF_Font; text: PUInt16; fg: TSDL_Color): PSDL_Surface cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_RenderUNICODE_Solid' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Create an 8-bit palettized surface and render the given glyph at
|
||||||
|
fast quality with the given font and color. The 0 pixel is the
|
||||||
|
colorkey, giving a transparent background, and the 1 pixel is set
|
||||||
|
to the text color. The glyph is rendered without any padding or
|
||||||
|
centering in the X direction, and aligned normally in the Y direction.
|
||||||
|
This function returns the new surface, or NULL if there was an error.
|
||||||
|
*}
|
||||||
|
function TTF_RenderGlyph_Solid(font: PTTF_Font; ch: UInt16; fg: TSDL_Color): PSDL_Surface cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_RenderGlyph_Solid' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Create an 8-bit palettized surface and render the given text at
|
||||||
|
high quality with the given font and colors. The 0 pixel is background,
|
||||||
|
while other pixels have varying degrees of the foreground color.
|
||||||
|
This function returns the new surface, or NULL if there was an error.
|
||||||
|
*}
|
||||||
|
function TTF_RenderText_Shaded(font: PTTF_Font; text: PAnsiChar; fg, bg: TSDL_Color): PSDL_Surface cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_RenderText_Shaded' {$ENDIF} {$ENDIF};
|
||||||
|
function TTF_RenderUTF8_Shaded(font: PTTF_Font; text: PAnsiChar; fg, bg: TSDL_Color): PSDL_Surface cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_RenderUTF8_Shaded' {$ENDIF} {$ENDIF};
|
||||||
|
function TTF_RenderUNICODE_Shaded(font: PTTF_Font; text: PUInt16; fg, bg: TSDL_Color): PSDL_Surface cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_RenderUNICODE_Shaded' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Create an 8-bit palettized surface and render the given glyph at
|
||||||
|
high quality with the given font and colors. The 0 pixel is background,
|
||||||
|
while other pixels have varying degrees of the foreground color.
|
||||||
|
The glyph is rendered without any padding or centering in the X
|
||||||
|
direction, and aligned normally in the Y direction.
|
||||||
|
This function returns the new surface, or NULL if there was an error.
|
||||||
|
*}
|
||||||
|
function TTF_RenderGlyph_Shaded(font: PTTF_Font; ch: UInt16; fg, bg: TSDL_Color): PSDL_Surface cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_RenderGlyph_Shaded' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Create a 32-bit ARGB surface and render the given text at high quality,
|
||||||
|
using alpha blending to dither the font with the given color.
|
||||||
|
This function returns the new surface, or NULL if there was an error.
|
||||||
|
*}
|
||||||
|
function TTF_RenderText_Blended(font: PTTF_Font; text: PAnsiChar; fg: TSDL_Color): PSDL_Surface cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_RenderText_Blended' {$ENDIF} {$ENDIF};
|
||||||
|
function TTF_RenderUTF8_Blended(font: PTTF_Font; text: PAnsiChar; fg: TSDL_Color): PSDL_Surface cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_RenderUTF8_Blended' {$ENDIF} {$ENDIF};
|
||||||
|
function TTF_RenderUNICODE_Blended(font: PTTF_Font; text: UInt16; fg: TSDL_Color): PSDL_Surface cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_RenderUNICODE_Blended' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Create a 32-bit ARGB surface and render the given text at high quality,
|
||||||
|
using alpha blending to dither the font with the given color.
|
||||||
|
Text is wrapped to multiple lines on line endings and on word boundaries
|
||||||
|
if it extends beyond wrapLength in pixels.
|
||||||
|
This function returns the new surface, or NULL if there was an error.
|
||||||
|
*}
|
||||||
|
function TTF_RenderText_Blended_Wrapped(font: PTTF_Font; text: PAnsiChar; fg: TSDL_Color; wrapLength: UInt32): PSDL_Surface cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_RenderText_Blended_Wrapped' {$ENDIF} {$ENDIF};
|
||||||
|
function TTF_RenderUTF8_Blended_Wrapped(font: PTTF_Font; text: PAnsiChar; fg: TSDL_Color; wrapLength: UInt32): PSDL_Surface cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_RenderUTF8_Blended_Wrapped' {$ENDIF} {$ENDIF};
|
||||||
|
function TTF_RenderUNICODE_Blended_Wrapped(font: PTTF_Font; text: PUInt16; fg: TSDL_Color; wrapLength: UInt32): PSDL_Surface cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_RenderUNICODE_Blended_Wrapped' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Create a 32-bit ARGB surface and render the given glyph at high quality,
|
||||||
|
using alpha blending to dither the font with the given color.
|
||||||
|
The glyph is rendered without any padding or centering in the X
|
||||||
|
direction, and aligned normally in the Y direction.
|
||||||
|
This function returns the new surface, or NULL if there was an error.
|
||||||
|
*}
|
||||||
|
function TTF_RenderGlyph_Blended(font: PTTF_Font; ch: UInt16; fg: TSDL_Color): PSDL_Surface cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_RenderGlyph_Blended' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* For compatibility with previous versions, here are the old functions *}
|
||||||
|
function TTF_RenderText(font: PTTF_Font; text: PAnsiChar; fg, bg: TSDL_Color): PSDL_Surface;
|
||||||
|
function TTF_RenderUTF8(font: PTTF_Font; text: PAnsiChar; fg, bg: TSDL_Color): PSDL_Surface;
|
||||||
|
function TTF_RenderUNICODE(font: PTTF_Font; text: PUInt16; fg, bg: TSDL_Color): PSDL_Surface;
|
||||||
|
|
||||||
|
{* Close an opened font file *}
|
||||||
|
procedure TTF_CloseFont(font: PTTF_Font) cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_CloseFont' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* De-initialize the TTF engine *}
|
||||||
|
procedure TTF_Quit() cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_Quit' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Check if the TTF engine is initialized *}
|
||||||
|
function TTF_WasInit: Boolean cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_WasInit' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* Get the kerning size of two glyphs *}
|
||||||
|
function TTF_GetFontKerningSize(font: PTTF_Font; prev_index, index: Integer): Integer cdecl; external TTF_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_TTF_GetFontKerningSize' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{* We'll use SDL for reporting errors *}
|
||||||
|
function TTF_SetError(const fmt: PAnsiChar): SInt32; cdecl;
|
||||||
|
function TTF_GetError: PAnsiChar; cdecl;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
Procedure SDL_TTF_VERSION(Out X:TSDL_Version);
|
||||||
|
begin
|
||||||
|
x.major := SDL_TTF_MAJOR_VERSION;
|
||||||
|
x.minor := SDL_TTF_MINOR_VERSION;
|
||||||
|
x.patch := SDL_TTF_PATCHLEVEL;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TTF_SetError(const fmt: PAnsiChar): SInt32; cdecl;
|
||||||
|
begin
|
||||||
|
Result := SDL_SetError(fmt);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TTF_GetError: PAnsiChar; cdecl;
|
||||||
|
begin
|
||||||
|
Result := SDL_GetError();
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TTF_RenderText(font: PTTF_Font; text: PAnsiChar; fg, bg: TSDL_Color): PSDL_Surface;
|
||||||
|
begin
|
||||||
|
Result := TTF_RenderText_Shaded(font, text, fg, bg);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TTF_RenderUTF8(font: PTTF_Font; text: PAnsiChar; fg, bg: TSDL_Color): PSDL_Surface;
|
||||||
|
begin
|
||||||
|
Result := TTF_RenderUTF8_Shaded(font, text, fg, bg);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TTF_RenderUNICODE(font: PTTF_Font; text: PUInt16; fg, bg: TSDL_Color): PSDL_Surface;
|
||||||
|
begin
|
||||||
|
Result := TTF_RenderUNICODE_Shaded(font, text, fg, bg);
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
||||||
|
|
526
model_viewer/sdl2/jedi.inc
Normal file
526
model_viewer/sdl2/jedi.inc
Normal file
@ -0,0 +1,526 @@
|
|||||||
|
{
|
||||||
|
Simple DirectMedia Layer
|
||||||
|
Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
|
||||||
|
Pascal-Header-Conversion
|
||||||
|
Copyright (c) 2012/13 Tim Blume aka End
|
||||||
|
|
||||||
|
sdl.inc is based on the files:
|
||||||
|
"begin_code.h",
|
||||||
|
"close_code.h",
|
||||||
|
"sdl_config.h",
|
||||||
|
"sdl_config_windows.h",
|
||||||
|
...
|
||||||
|
it defines some variables for several Pascal-Compilers and OS-versions.
|
||||||
|
|
||||||
|
It is based on mine updated version of jedi-sdl.inc from the SDL 1.2 Headers,
|
||||||
|
they can be found at delphigl.com or on my github-repository:
|
||||||
|
|
||||||
|
https://github.com/ev1313/
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
Changelog:
|
||||||
|
----------
|
||||||
|
v. 1.63-stable; 16.09.13: since GPC isn't supported anymore, i've deleted it from here, too.
|
||||||
|
v. 1.22-alpha; 24.07.13: fixed some bugs. special thanks to kotai from pascalgamedevelopment.com
|
||||||
|
v. 1.00-alpha; 05.07.13: Initial Alpha-Release
|
||||||
|
}
|
||||||
|
|
||||||
|
{.$define Debug} { uncomment for debugging }
|
||||||
|
|
||||||
|
{$IFNDEF FPC}
|
||||||
|
{$IFDEF Debug}
|
||||||
|
{$F+,D+,Q-,L+,R+,I-,S+,Y+,A+}
|
||||||
|
{$ELSE}
|
||||||
|
{$F+,Q-,R-,S-,I-,A+}
|
||||||
|
{$ENDIF}
|
||||||
|
{$ELSE}
|
||||||
|
{$MODE DELPHI}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF LINUX}
|
||||||
|
{$DEFINE UNIX}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF ver70}
|
||||||
|
{$IFDEF Windows}
|
||||||
|
{$DEFINE Win16}
|
||||||
|
{$ENDIF Windows}
|
||||||
|
{$IFDEF MSDOS}
|
||||||
|
{$DEFINE NO_EXPORTS}
|
||||||
|
{$ENDIF MSDOS}
|
||||||
|
{$IFDEF DPMI}
|
||||||
|
{$DEFINE BP_DPMI}
|
||||||
|
{$ENDIF}
|
||||||
|
{$DEFINE OS_16_BIT}
|
||||||
|
{$DEFINE __OS_DOS__}
|
||||||
|
{$ENDIF ver70}
|
||||||
|
|
||||||
|
{$IFDEF ver80}
|
||||||
|
{$DEFINE Delphi} {Delphi 1.x}
|
||||||
|
{$DEFINE Delphi16}
|
||||||
|
{$DEFINE Win16}
|
||||||
|
{$DEFINE OS_16_BIT}
|
||||||
|
{$DEFINE __OS_DOS__}
|
||||||
|
{$ENDIF ver80}
|
||||||
|
|
||||||
|
{$IFDEF ver90}
|
||||||
|
{$DEFINE Delphi} {Delphi 2.x}
|
||||||
|
{$DEFINE WIN32}
|
||||||
|
{$DEFINE WINDOWS}
|
||||||
|
{$ENDIF ver90}
|
||||||
|
|
||||||
|
{$IFDEF ver100}
|
||||||
|
{$DEFINE Delphi} {Delphi 3.x}
|
||||||
|
{$DEFINE WIN32}
|
||||||
|
{$DEFINE WINDOWS}
|
||||||
|
{$ENDIF ver100}
|
||||||
|
|
||||||
|
{$IFDEF ver93}
|
||||||
|
{$DEFINE Delphi} {C++ Builder 1.x}
|
||||||
|
{$DEFINE WINDOWS}
|
||||||
|
{$ENDIF ver93}
|
||||||
|
|
||||||
|
{$IFDEF ver110}
|
||||||
|
{$DEFINE Delphi} {C++ Builder 3.x}
|
||||||
|
{$DEFINE WINDOWS}
|
||||||
|
{$ENDIF ver110}
|
||||||
|
|
||||||
|
{$IFDEF ver120}
|
||||||
|
{$DEFINE Delphi} {Delphi 4.x}
|
||||||
|
{$DEFINE Delphi4UP}
|
||||||
|
{$DEFINE Has_Int64}
|
||||||
|
{$DEFINE WINDOWS}
|
||||||
|
{$ENDIF ver120}
|
||||||
|
|
||||||
|
{$IFDEF ver130}
|
||||||
|
{$DEFINE Delphi} {Delphi / C++ Builder 5.x}
|
||||||
|
{$DEFINE Delphi4UP}
|
||||||
|
{$DEFINE Delphi5UP}
|
||||||
|
{$DEFINE Has_Int64}
|
||||||
|
{$DEFINE WINDOWS}
|
||||||
|
{$ENDIF ver130}
|
||||||
|
|
||||||
|
{$IFDEF ver140}
|
||||||
|
{$DEFINE Delphi} {Delphi / C++ Builder 6.x}
|
||||||
|
{$DEFINE Delphi4UP}
|
||||||
|
{$DEFINE Delphi5UP}
|
||||||
|
{$DEFINE Delphi6UP}
|
||||||
|
{$DEFINE Has_Int64}
|
||||||
|
{$DEFINE HAS_TYPES}
|
||||||
|
{$ENDIF ver140}
|
||||||
|
|
||||||
|
{$IFDEF ver150}
|
||||||
|
{$DEFINE Delphi} {Delphi 7.x}
|
||||||
|
{$DEFINE Delphi4UP}
|
||||||
|
{$DEFINE Delphi5UP}
|
||||||
|
{$DEFINE Delphi6UP}
|
||||||
|
{$DEFINE Delphi7UP}
|
||||||
|
{$WARN UNSAFE_TYPE OFF} {Disable warning for unsafe types}
|
||||||
|
{$DEFINE Has_Int64}
|
||||||
|
{$DEFINE Has_UInt64}
|
||||||
|
{$DEFINE Has_Native}
|
||||||
|
{$DEFINE HAS_TYPES}
|
||||||
|
{$ENDIF ver150}
|
||||||
|
|
||||||
|
{$IFDEF ver160}
|
||||||
|
{$DEFINE Delphi} {Delphi 8.x}
|
||||||
|
{$DEFINE Delphi4UP}
|
||||||
|
{$DEFINE Delphi5UP}
|
||||||
|
{$DEFINE Delphi6UP}
|
||||||
|
{$DEFINE Delphi7UP}
|
||||||
|
{$DEFINE Delphi8UP}
|
||||||
|
{$DEFINE Has_Int64}
|
||||||
|
{$DEFINE Has_UInt64}
|
||||||
|
{$DEFINE Has_Native}
|
||||||
|
{$DEFINE HAS_TYPES}
|
||||||
|
{$ENDIF ver160}
|
||||||
|
|
||||||
|
{$IFDEF ver170}
|
||||||
|
{$DEFINE Delphi} {Delphi / C++ Builder 2005}
|
||||||
|
{$DEFINE Delphi4UP}
|
||||||
|
{$DEFINE Delphi5UP}
|
||||||
|
{$DEFINE Delphi6UP}
|
||||||
|
{$DEFINE Delphi7UP}
|
||||||
|
{$DEFINE Delphi8UP}
|
||||||
|
{$DEFINE Delphi9UP}
|
||||||
|
{$WARN UNSAFE_TYPE OFF} {Disable warning for unsafe types}
|
||||||
|
{$DEFINE Has_Int64}
|
||||||
|
{$DEFINE Has_UInt64}
|
||||||
|
{$DEFINE Has_Native}
|
||||||
|
{$DEFINE HAS_TYPES}
|
||||||
|
{$ENDIF ver170}
|
||||||
|
|
||||||
|
{$IFDEF ver180}
|
||||||
|
{$DEFINE Delphi} {Delphi / C++ Builder 2006 / 2007}
|
||||||
|
{$DEFINE Delphi4UP}
|
||||||
|
{$DEFINE Delphi5UP}
|
||||||
|
{$DEFINE Delphi6UP}
|
||||||
|
{$DEFINE Delphi7UP}
|
||||||
|
{$DEFINE Delphi8UP}
|
||||||
|
{$DEFINE Delphi9UP}
|
||||||
|
{$DEFINE Delphi10UP}
|
||||||
|
{$WARN UNSAFE_TYPE OFF} {Disable warning for unsafe types}
|
||||||
|
{$DEFINE Has_Int64}
|
||||||
|
{$DEFINE Has_UInt64}
|
||||||
|
{$DEFINE Has_Native}
|
||||||
|
{$DEFINE HAS_TYPES}
|
||||||
|
{$ENDIF ver180}
|
||||||
|
|
||||||
|
{$IFDEF ver185}
|
||||||
|
{$DEFINE Delphi} {Delphi / C++ Builder 2007}
|
||||||
|
{$DEFINE Delphi4UP}
|
||||||
|
{$DEFINE Delphi5UP}
|
||||||
|
{$DEFINE Delphi6UP}
|
||||||
|
{$DEFINE Delphi7UP}
|
||||||
|
{$DEFINE Delphi8UP}
|
||||||
|
{$DEFINE Delphi9UP}
|
||||||
|
{$DEFINE Delphi10UP}
|
||||||
|
{$DEFINE Delphi11UP}
|
||||||
|
{$WARN UNSAFE_TYPE OFF} {Disable warning for unsafe types}
|
||||||
|
{$DEFINE Has_Int64}
|
||||||
|
{$DEFINE Has_UInt64}
|
||||||
|
{$DEFINE Has_Native}
|
||||||
|
{$DEFINE HAS_TYPES}
|
||||||
|
{$ENDIF ver185}
|
||||||
|
|
||||||
|
{$IFDEF ver190}
|
||||||
|
{$DEFINE Delphi} {Delphi / C++ Builder 2007 }
|
||||||
|
{$DEFINE Delphi4UP}
|
||||||
|
{$DEFINE Delphi5UP}
|
||||||
|
{$DEFINE Delphi6UP}
|
||||||
|
{$DEFINE Delphi7UP}
|
||||||
|
{$DEFINE Delphi8UP}
|
||||||
|
{$DEFINE Delphi9UP}
|
||||||
|
{$DEFINE Delphi10UP}
|
||||||
|
{$DEFINE Delphi11UP}
|
||||||
|
{$DEFINE Delphi12UP}
|
||||||
|
{$WARN UNSAFE_TYPE OFF} {Disable warning for unsafe types}
|
||||||
|
{$DEFINE Has_Int64}
|
||||||
|
{$DEFINE Has_UInt64}
|
||||||
|
{$DEFINE Has_Native}
|
||||||
|
{$DEFINE HAS_TYPES}
|
||||||
|
{$ENDIF ver190}
|
||||||
|
|
||||||
|
{$IFDEF ver200}
|
||||||
|
{$DEFINE Delphi} {Delphi / C++ Builder 2009 }
|
||||||
|
{$DEFINE Delphi4UP}
|
||||||
|
{$DEFINE Delphi5UP}
|
||||||
|
{$DEFINE Delphi6UP}
|
||||||
|
{$DEFINE Delphi7UP}
|
||||||
|
{$DEFINE Delphi8UP}
|
||||||
|
{$DEFINE Delphi9UP}
|
||||||
|
{$DEFINE Delphi10UP}
|
||||||
|
{$DEFINE Delphi11UP}
|
||||||
|
{$DEFINE Delphi12UP}
|
||||||
|
{$DEFINE Delphi13UP}
|
||||||
|
{$WARN UNSAFE_TYPE OFF} {Disable warning for unsafe types}
|
||||||
|
{$DEFINE Has_Int64}
|
||||||
|
{$DEFINE Has_UInt64}
|
||||||
|
{$DEFINE Has_Native}
|
||||||
|
{$DEFINE HAS_TYPES}
|
||||||
|
{$ENDIF ver200}
|
||||||
|
|
||||||
|
{$IFDEF ver210}
|
||||||
|
{$DEFINE Delphi} {Delphi / C++ Builder 2010}
|
||||||
|
{$DEFINE Delphi4UP}
|
||||||
|
{$DEFINE Delphi5UP}
|
||||||
|
{$DEFINE Delphi6UP}
|
||||||
|
{$DEFINE Delphi7UP}
|
||||||
|
{$DEFINE Delphi8UP}
|
||||||
|
{$DEFINE Delphi9UP}
|
||||||
|
{$DEFINE Delphi10UP}
|
||||||
|
{$DEFINE Delphi11UP}
|
||||||
|
{$DEFINE Delphi12UP}
|
||||||
|
{$DEFINE Delphi13UP}
|
||||||
|
{$DEFINE Delphi14UP}
|
||||||
|
{$WARN UNSAFE_TYPE OFF} {Disable warning for unsafe types}
|
||||||
|
{$DEFINE Has_Int64}
|
||||||
|
{$DEFINE Has_UInt64}
|
||||||
|
{$DEFINE Has_Native}
|
||||||
|
{$DEFINE HAS_TYPES}
|
||||||
|
{$ENDIF ver210}
|
||||||
|
|
||||||
|
{$IFDEF ver220}
|
||||||
|
{$DEFINE Delphi} {Delphi / C++ Builder XE}
|
||||||
|
{$DEFINE Delphi4UP}
|
||||||
|
{$DEFINE Delphi5UP}
|
||||||
|
{$DEFINE Delphi6UP}
|
||||||
|
{$DEFINE Delphi7UP}
|
||||||
|
{$DEFINE Delphi8UP}
|
||||||
|
{$DEFINE Delphi9UP}
|
||||||
|
{$DEFINE Delphi10UP}
|
||||||
|
{$DEFINE Delphi11UP}
|
||||||
|
{$DEFINE Delphi12UP}
|
||||||
|
{$DEFINE Delphi13UP}
|
||||||
|
{$DEFINE Delphi14UP}
|
||||||
|
{$DEFINE Delphi15UP}
|
||||||
|
{$WARN UNSAFE_TYPE OFF} {Disable warning for unsafe types}
|
||||||
|
{$DEFINE Has_Int64}
|
||||||
|
{$DEFINE Has_UInt64}
|
||||||
|
{$DEFINE Has_Native}
|
||||||
|
{$DEFINE HAS_TYPES}
|
||||||
|
{$ENDIF ver220}
|
||||||
|
|
||||||
|
{$IFDEF ver230}
|
||||||
|
{$DEFINE Delphi} {Delphi / C++ Builder XE2}
|
||||||
|
{$DEFINE Delphi4UP}
|
||||||
|
{$DEFINE Delphi5UP}
|
||||||
|
{$DEFINE Delphi6UP}
|
||||||
|
{$DEFINE Delphi7UP}
|
||||||
|
{$DEFINE Delphi8UP}
|
||||||
|
{$DEFINE Delphi9UP}
|
||||||
|
{$DEFINE Delphi10UP}
|
||||||
|
{$DEFINE Delphi11UP}
|
||||||
|
{$DEFINE Delphi12UP}
|
||||||
|
{$DEFINE Delphi13UP}
|
||||||
|
{$DEFINE Delphi14UP}
|
||||||
|
{$DEFINE Delphi15UP}
|
||||||
|
{$DEFINE Delphi16UP}
|
||||||
|
{$WARN UNSAFE_TYPE OFF} {Disable warning for unsafe types}
|
||||||
|
{$DEFINE Has_Int64}
|
||||||
|
{$DEFINE Has_UInt64}
|
||||||
|
{$DEFINE Has_Native}
|
||||||
|
{$DEFINE HAS_TYPES}
|
||||||
|
{$ENDIF ver230}
|
||||||
|
|
||||||
|
{$IFDEF ver240}
|
||||||
|
{$DEFINE Delphi} {Delphi / C++ Builder XE4}
|
||||||
|
{$DEFINE Delphi4UP}
|
||||||
|
{$DEFINE Delphi5UP}
|
||||||
|
{$DEFINE Delphi6UP}
|
||||||
|
{$DEFINE Delphi7UP}
|
||||||
|
{$DEFINE Delphi8UP}
|
||||||
|
{$DEFINE Delphi9UP}
|
||||||
|
{$DEFINE Delphi10UP}
|
||||||
|
{$DEFINE Delphi11UP}
|
||||||
|
{$DEFINE Delphi12UP}
|
||||||
|
{$DEFINE Delphi13UP}
|
||||||
|
{$DEFINE Delphi14UP}
|
||||||
|
{$DEFINE Delphi15UP}
|
||||||
|
{$DEFINE Delphi16UP}
|
||||||
|
{$DEFINE Delphi17UP}
|
||||||
|
{$WARN UNSAFE_TYPE OFF} {Disable warning for unsafe types}
|
||||||
|
{$DEFINE Has_Int64}
|
||||||
|
{$DEFINE Has_UInt64}
|
||||||
|
{$DEFINE Has_Native}
|
||||||
|
{$DEFINE HAS_TYPES}
|
||||||
|
{$ENDIF ver240}
|
||||||
|
|
||||||
|
{$IFDEF ver250}
|
||||||
|
{$DEFINE Delphi} {Delphi / C++ Builder XE5}
|
||||||
|
{$DEFINE Delphi4UP}
|
||||||
|
{$DEFINE Delphi5UP}
|
||||||
|
{$DEFINE Delphi6UP}
|
||||||
|
{$DEFINE Delphi7UP}
|
||||||
|
{$DEFINE Delphi8UP}
|
||||||
|
{$DEFINE Delphi9UP}
|
||||||
|
{$DEFINE Delphi10UP}
|
||||||
|
{$DEFINE Delphi11UP}
|
||||||
|
{$DEFINE Delphi12UP}
|
||||||
|
{$DEFINE Delphi13UP}
|
||||||
|
{$DEFINE Delphi14UP}
|
||||||
|
{$DEFINE Delphi15UP}
|
||||||
|
{$DEFINE Delphi16UP}
|
||||||
|
{$DEFINE Delphi17UP}
|
||||||
|
{$WARN UNSAFE_TYPE OFF} {Disable warning for unsafe types}
|
||||||
|
{$DEFINE Has_Int64}
|
||||||
|
{$DEFINE Has_UInt64}
|
||||||
|
{$DEFINE Has_Native}
|
||||||
|
{$DEFINE HAS_TYPES}
|
||||||
|
{$ENDIF ver250}
|
||||||
|
|
||||||
|
{$IFDEF ver260}
|
||||||
|
{$DEFINE Delphi} {Delphi / C++ Builder XE6}
|
||||||
|
{$DEFINE Delphi4UP}
|
||||||
|
{$DEFINE Delphi5UP}
|
||||||
|
{$DEFINE Delphi6UP}
|
||||||
|
{$DEFINE Delphi7UP}
|
||||||
|
{$DEFINE Delphi8UP}
|
||||||
|
{$DEFINE Delphi9UP}
|
||||||
|
{$DEFINE Delphi10UP}
|
||||||
|
{$DEFINE Delphi11UP}
|
||||||
|
{$DEFINE Delphi12UP}
|
||||||
|
{$DEFINE Delphi13UP}
|
||||||
|
{$DEFINE Delphi14UP}
|
||||||
|
{$DEFINE Delphi15UP}
|
||||||
|
{$DEFINE Delphi16UP}
|
||||||
|
{$DEFINE Delphi17UP}
|
||||||
|
{$WARN UNSAFE_TYPE OFF} {Disable warning for unsafe types}
|
||||||
|
{$DEFINE Has_Int64}
|
||||||
|
{$DEFINE Has_UInt64}
|
||||||
|
{$DEFINE Has_Native}
|
||||||
|
{$DEFINE HAS_TYPES}
|
||||||
|
{$ENDIF ver260}
|
||||||
|
|
||||||
|
{$IFDEF ver270}
|
||||||
|
{$DEFINE Delphi} {Delphi / C++ Builder XE7}
|
||||||
|
{$DEFINE Delphi4UP}
|
||||||
|
{$DEFINE Delphi5UP}
|
||||||
|
{$DEFINE Delphi6UP}
|
||||||
|
{$DEFINE Delphi7UP}
|
||||||
|
{$DEFINE Delphi8UP}
|
||||||
|
{$DEFINE Delphi9UP}
|
||||||
|
{$DEFINE Delphi10UP}
|
||||||
|
{$DEFINE Delphi11UP}
|
||||||
|
{$DEFINE Delphi12UP}
|
||||||
|
{$DEFINE Delphi13UP}
|
||||||
|
{$DEFINE Delphi14UP}
|
||||||
|
{$DEFINE Delphi15UP}
|
||||||
|
{$DEFINE Delphi16UP}
|
||||||
|
{$DEFINE Delphi17UP}
|
||||||
|
{$WARN UNSAFE_TYPE OFF} {Disable warning for unsafe types}
|
||||||
|
{$DEFINE Has_Int64}
|
||||||
|
{$DEFINE Has_UInt64}
|
||||||
|
{$DEFINE Has_Native}
|
||||||
|
{$DEFINE HAS_TYPES}
|
||||||
|
{$ENDIF ver270}
|
||||||
|
|
||||||
|
{$IFNDEF FPC}
|
||||||
|
{$IF CompilerVersion > 27}
|
||||||
|
{$DEFINE Delphi} {Delphi / C++ Builder}
|
||||||
|
{$DEFINE Delphi4UP}
|
||||||
|
{$DEFINE Delphi5UP}
|
||||||
|
{$DEFINE Delphi6UP}
|
||||||
|
{$DEFINE Delphi7UP}
|
||||||
|
{$DEFINE Delphi8UP}
|
||||||
|
{$DEFINE Delphi9UP}
|
||||||
|
{$DEFINE Delphi10UP}
|
||||||
|
{$DEFINE Delphi11UP}
|
||||||
|
{$DEFINE Delphi12UP}
|
||||||
|
{$DEFINE Delphi13UP}
|
||||||
|
{$DEFINE Delphi14UP}
|
||||||
|
{$DEFINE Delphi15UP}
|
||||||
|
{$DEFINE Delphi16UP}
|
||||||
|
{$DEFINE Delphi17UP}
|
||||||
|
{$WARN UNSAFE_TYPE OFF} {Disable warning for unsafe types}
|
||||||
|
{$DEFINE Has_Int64}
|
||||||
|
{$DEFINE Has_UInt64}
|
||||||
|
{$DEFINE Has_Native}
|
||||||
|
{$DEFINE HAS_TYPES}
|
||||||
|
{$IFEND}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{*************** define 16/32/64 Bit ********************}
|
||||||
|
|
||||||
|
{$IFDEF WIN16}
|
||||||
|
{$DEFINE 16BIT}
|
||||||
|
{$DEFINE WINDOWS}
|
||||||
|
{$ELSE}
|
||||||
|
{$IFDEF WIN32}
|
||||||
|
{$DEFINE 32BIT}
|
||||||
|
{$DEFINE WINDOWS}
|
||||||
|
{$ELSE}
|
||||||
|
{$IFDEF WIN64}
|
||||||
|
{$DEFINE 64BIT}
|
||||||
|
{$DEFINE WINDOWS}
|
||||||
|
{$ELSE}
|
||||||
|
//TODO!!
|
||||||
|
{$DEFINE 32BIT}
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF Delphi}
|
||||||
|
{$DEFINE USE_STDCALL}
|
||||||
|
{$IFDEF 32Bit}
|
||||||
|
{$DEFINE DELPHI32}
|
||||||
|
{$ELSE}
|
||||||
|
{$IFDEF 64Bit}
|
||||||
|
{$DEFINE DELPHI64}
|
||||||
|
{$ELSE}
|
||||||
|
{$DEFINE DELPHI16}
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
//{$ALIGN ON}
|
||||||
|
{$ENDIF Delphi}
|
||||||
|
|
||||||
|
{$IFDEF FPC}
|
||||||
|
{$H+}
|
||||||
|
{$PACKRECORDS C} // Added for record
|
||||||
|
{$MACRO ON} // Added For OpenGL
|
||||||
|
{$DEFINE Delphi}
|
||||||
|
{$DEFINE UseAT}
|
||||||
|
{$UNDEF USE_STDCALL}
|
||||||
|
{$DEFINE OS_BigMem}
|
||||||
|
{$DEFINE NO_EXPORTS}
|
||||||
|
{$DEFINE Has_UInt64}
|
||||||
|
{$DEFINE Has_Int64}
|
||||||
|
{$DEFINE Has_Native}
|
||||||
|
{$DEFINE NOCRT}
|
||||||
|
{$IFDEF UNIX}
|
||||||
|
{$DEFINE fpc_unix}
|
||||||
|
{$ELSE}
|
||||||
|
{$DEFINE __OS_DOS__}
|
||||||
|
{$ENDIF}
|
||||||
|
{$IFDEF WIN32}
|
||||||
|
{$DEFINE UseWin}
|
||||||
|
{$ENDIF}
|
||||||
|
{$DEFINE HAS_TYPES}
|
||||||
|
{$ENDIF FPC}
|
||||||
|
|
||||||
|
{$IFDEF Win16}
|
||||||
|
{$K+} {smart callbacks}
|
||||||
|
{$ENDIF Win16}
|
||||||
|
|
||||||
|
{$IFDEF Win32}
|
||||||
|
{$DEFINE OS_BigMem}
|
||||||
|
{$ENDIF Win32}
|
||||||
|
|
||||||
|
{ ************************** dos/dos-like platforms **************}
|
||||||
|
{$IFDEF Windows}
|
||||||
|
{$DEFINE __OS_DOS__}
|
||||||
|
{$DEFINE UseWin}
|
||||||
|
{$DEFINE MSWINDOWS}
|
||||||
|
{$ENDIF Delphi}
|
||||||
|
|
||||||
|
{$IFDEF OS2}
|
||||||
|
{$DEFINE __OS_DOS__}
|
||||||
|
{$DEFINE Can_Use_DLL}
|
||||||
|
{$ENDIF Delphi}
|
||||||
|
|
||||||
|
{$IFDEF UseWin}
|
||||||
|
{$DEFINE Can_Use_DLL}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF Win16}
|
||||||
|
{$DEFINE Can_Use_DLL}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF BP_DPMI}
|
||||||
|
{$DEFINE Can_Use_DLL}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF USE_STDCALL}
|
||||||
|
{$DEFINE BY_NAME}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{*************** define LITTLE ENDIAN platforms ********************}
|
||||||
|
|
||||||
|
|
||||||
|
{$IFDEF Delphi}
|
||||||
|
{$DEFINE IA32}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF FPC}
|
||||||
|
{$IFDEF FPC_LITTLE_ENDIAN}
|
||||||
|
{$DEFINE IA32}
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
62
model_viewer/sdl2/sdl.inc
Normal file
62
model_viewer/sdl2/sdl.inc
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
//from "sdl.h"
|
||||||
|
|
||||||
|
const
|
||||||
|
|
||||||
|
SDL_INIT_TIMER = $00000001;
|
||||||
|
{$EXTERNALSYM SDL_INIT_TIMER}
|
||||||
|
SDL_INIT_AUDIO = $00000010;
|
||||||
|
{$EXTERNALSYM SDL_INIT_AUDIO}
|
||||||
|
SDL_INIT_VIDEO = $00000020;
|
||||||
|
{$EXTERNALSYM SDL_INIT_VIDEO}
|
||||||
|
SDL_INIT_JOYSTICK = $00000200;
|
||||||
|
{$EXTERNALSYM SDL_INIT_JOYSTICK}
|
||||||
|
SDL_INIT_HAPTIC = $00001000;
|
||||||
|
{$EXTERNALSYM SDL_INIT_HAPTIC}
|
||||||
|
SDL_INIT_GAMECONTROLLER = $00002000; //turn on game controller also implicitly does JOYSTICK
|
||||||
|
{$EXTERNALSYM SDL_INIT_GAMECONTROLLER}
|
||||||
|
SDL_INIT_NOPARACHUTE = $00100000; //Don't catch fatal signals
|
||||||
|
{$EXTERNALSYM SDL_INIT_NOPARACHUTE}
|
||||||
|
SDL_INIT_EVERYTHING = SDL_INIT_TIMER or
|
||||||
|
SDL_INIT_AUDIO or
|
||||||
|
SDL_INIT_VIDEO or
|
||||||
|
SDL_INIT_JOYSTICK or
|
||||||
|
SDL_INIT_HAPTIC or
|
||||||
|
SDL_INIT_GAMECONTROLLER;
|
||||||
|
{$EXTERNALSYM SDL_INIT_EVERYTHING}
|
||||||
|
|
||||||
|
{**
|
||||||
|
* This function initializes the subsystems specified by flags
|
||||||
|
* Unless the SDL_INIT_NOPARACHUTE flag is set, it will install cleanup
|
||||||
|
* signal handlers for some commonly ignored fatal signals (like SIGSEGV).
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_Init(flags: UInt32): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_Init' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* This function initializes specific SDL subsystems
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_InitSubSystem(flags: UInt32): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_InitSubSystem' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* This function cleans up specific SDL subsystems
|
||||||
|
*}
|
||||||
|
|
||||||
|
procedure SDL_QuitSubSystem(flags: UInt32) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_QuitSubSystem' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* This function returns a mask of the specified subsystems which have
|
||||||
|
* previously been initialized.
|
||||||
|
*
|
||||||
|
* If flags is 0, it returns a mask of all initialized subsystems.
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_WasInit(flags: UInt32): UInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_WasInit' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* This function cleans up all initialized subsystems. You should
|
||||||
|
* call it upon all exit conditions.
|
||||||
|
*}
|
||||||
|
|
||||||
|
procedure SDL_Quit() cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_Quit' {$ENDIF} {$ENDIF};
|
||||||
|
|
435
model_viewer/sdl2/sdl2.pas
Normal file
435
model_viewer/sdl2/sdl2.pas
Normal file
@ -0,0 +1,435 @@
|
|||||||
|
unit SDL2;
|
||||||
|
|
||||||
|
{
|
||||||
|
Simple DirectMedia Layer
|
||||||
|
Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
|
||||||
|
Pascal-Header-Conversion
|
||||||
|
Copyright (C) 2012-2014 Tim Blume aka End/EV1313
|
||||||
|
|
||||||
|
SDL.pas is based on the files:
|
||||||
|
"sdl.h",
|
||||||
|
"sdl_audio.h",
|
||||||
|
"sdl_blendmode.h",
|
||||||
|
"sdl_clipboard.h",
|
||||||
|
"sdl_cpuinfo.h",
|
||||||
|
"sdl_events.h",
|
||||||
|
"sdl_error.h",
|
||||||
|
"sdl_filesystem.h",
|
||||||
|
"sdl_gamecontroller.h",
|
||||||
|
"sdl_gesture.h",
|
||||||
|
"sdl_haptic.h",
|
||||||
|
"sdl_hints.h",
|
||||||
|
"sdl_joystick.h",
|
||||||
|
"sdl_keyboard.h",
|
||||||
|
"sdl_keycode.h",
|
||||||
|
"sdl_loadso.h",
|
||||||
|
"sdl_log.h",
|
||||||
|
"sdl_pixels.h",
|
||||||
|
"sdl_power.h",
|
||||||
|
"sdl_main.h",
|
||||||
|
"sdl_messagebox.h",
|
||||||
|
"sdl_mouse.h",
|
||||||
|
"sdl_mutex.h",
|
||||||
|
"sdl_rect.h",
|
||||||
|
"sdl_render.h",
|
||||||
|
"sdl_rwops.h",
|
||||||
|
"sdl_scancode.h",
|
||||||
|
"sdl_shape.h",
|
||||||
|
"sdl_stdinc.h",
|
||||||
|
"sdl_surface.h",
|
||||||
|
"sdl_system.h",
|
||||||
|
"sdl_syswm.h",
|
||||||
|
"sdl_thread.h",
|
||||||
|
"sdl_timer.h",
|
||||||
|
"sdl_touch.h",
|
||||||
|
"sdl_version.h",
|
||||||
|
"sdl_video.h",
|
||||||
|
"sdl_types.h"
|
||||||
|
|
||||||
|
I will not translate:
|
||||||
|
"sdl_opengl.h",
|
||||||
|
"sdl_opengles.h"
|
||||||
|
"sdl_opengles2.h"
|
||||||
|
|
||||||
|
cause there's a much better OpenGL-Header avaible at delphigl.com:
|
||||||
|
|
||||||
|
the dglopengl.pas
|
||||||
|
|
||||||
|
Parts of the SDL.pas are from the SDL-1.2-Headerconversion from the JEDI-Team,
|
||||||
|
written by Domenique Louis and others.
|
||||||
|
|
||||||
|
I've changed the names of the dll for 32 & 64-Bit, so theres no conflict
|
||||||
|
between 32 & 64 bit Libraries.
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no case will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
|
||||||
|
Special Thanks to:
|
||||||
|
|
||||||
|
- DelphiGL.com - Community
|
||||||
|
- Domenique Louis and everyone else from the JEDI-Team
|
||||||
|
- Sam Latinga and everyone else from the SDL-Team
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
Changelog:
|
||||||
|
----------
|
||||||
|
? 31.01.2016: updated sdlevents.inc to SDL2 2.0.4, adressing issue #24 (thx to imantsg)
|
||||||
|
? 16.01.2016: Delphi 6+ bugfixes/compatibility. Thx to Peter Karpov for identifiying and testing.
|
||||||
|
v.1.80-stable; 09.10.2014: added sdl_cpuinfo.h and sdl_clipboard.h
|
||||||
|
v.1.74-stable; 10.11.2013: added sdl_gamecontroller.h
|
||||||
|
v.1.73-stable; 08.11.2013: added sdl_hints.h and some keystate helpers
|
||||||
|
thx to Cybermonkey!
|
||||||
|
v.1.72-stable; 23.09.2013: fixed bug with procedures without parameters
|
||||||
|
(they must have brakets)
|
||||||
|
v.1.70-stable; 17.09.2013: added "sdl_messagebox.h" and "sdl_haptic.h"
|
||||||
|
v.1.63-stable; 16.09.2013: added libs sdl2_image and sdl2_ttf and added sdl_audio.h
|
||||||
|
v.1.62-stable; 03.09.2013: fixed.
|
||||||
|
v.1.61-stable; 02.09.2013: now it should REALLY work with Mac...
|
||||||
|
v.1.60-stable; 01.09.2013: now it should work with Delphi XE4 for Windows and
|
||||||
|
MacOS and of course Lazarus. thx to kotai :D
|
||||||
|
v.1.55-Alpha; 24.08.2013: fixed bug with SDL_GetEventState thx to d.l.i.w.
|
||||||
|
v.1.54-Alpha; 24.08.2013: added sdl_loadso.h
|
||||||
|
v.1.53-Alpha; 24.08.2013: renamed *really* and fixed linux comp.
|
||||||
|
v.1.52-Alpha; 24.08.2013: renamed sdl.pas to sdl2.pas
|
||||||
|
v.1.51-Alpha; 24.08.2013: added sdl_platform.h
|
||||||
|
v.1.50-Alpha; 24.08.2013: the header is now modular. thx for the hint from d.l.i.w.
|
||||||
|
v.1.40-Alpha; 13.08.2013: Added MacOS compatibility (thx to stoney-fd)
|
||||||
|
v.1.34-Alpha; 05.08.2013: Added missing functions from sdl_thread.h
|
||||||
|
v.1.33-Alpha; 31.07.2013: Added missing units for Linux. thx to Cybermonkey
|
||||||
|
v.1.32-Alpha; 31.07.2013: Fixed three bugs, thx to grieferatwork
|
||||||
|
v.1.31-Alpha; 30.07.2013: Added "sdl_power.h"
|
||||||
|
v.1.30-Alpha; 26.07.2013: Added "sdl_thread.h" and "sdl_mutex.h"
|
||||||
|
v.1.25-Alpha; 29.07.2013: Added Makros for SDL_RWops
|
||||||
|
v.1.24-Alpha; 28.07.2013: Fixed bug with RWops and size_t
|
||||||
|
v.1.23-Alpha; 27.07.2013: Fixed two bugs, thx to GrieferAtWork
|
||||||
|
v.1.22-Alpha; 24.07.2013: Added "sdl_shape.h" and TSDL_Window
|
||||||
|
(and ordered the translated header list ^^)
|
||||||
|
v.1.21-Alpha; 23.07.2013: Added TSDL_Error
|
||||||
|
v.1.20-Alpha; 19.07.2013: Added "sdl_timer.h"
|
||||||
|
v.1.10-Alpha; 09.07.2013: Added "sdl_render.h"
|
||||||
|
v.1.00-Alpha; 05.07.2013: Initial Alpha-Release.
|
||||||
|
}
|
||||||
|
|
||||||
|
{$DEFINE SDL}
|
||||||
|
|
||||||
|
{$I jedi.inc}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
{$IFDEF WINDOWS}
|
||||||
|
uses
|
||||||
|
Windows;
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF LINUX}
|
||||||
|
uses
|
||||||
|
X,
|
||||||
|
XLib;
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF DARWIN}
|
||||||
|
uses
|
||||||
|
X,
|
||||||
|
XLib,
|
||||||
|
CocoaAll;
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
const
|
||||||
|
|
||||||
|
{$IFDEF WINDOWS}
|
||||||
|
SDL_LibName = 'SDL2.dll';
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF UNIX}
|
||||||
|
{$IFDEF DARWIN}
|
||||||
|
SDL_LibName = 'libSDL2.dylib';
|
||||||
|
{$ELSE}
|
||||||
|
{$IFDEF FPC}
|
||||||
|
SDL_LibName = 'libSDL2.so';
|
||||||
|
{$ELSE}
|
||||||
|
SDL_LibName = 'libSDL2.so.0';
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF MACOS}
|
||||||
|
SDL_LibName = 'SDL2';
|
||||||
|
{$IFDEF FPC}
|
||||||
|
{$linklib libSDL2}
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$I sdltype.inc}
|
||||||
|
{$I sdlversion.inc}
|
||||||
|
{$I sdlerror.inc}
|
||||||
|
{$I sdlplatform.inc}
|
||||||
|
{$I sdlpower.inc}
|
||||||
|
{$I sdlthread.inc}
|
||||||
|
{$I sdlmutex.inc}
|
||||||
|
{$I sdltimer.inc}
|
||||||
|
{$I sdlpixels.inc}
|
||||||
|
{$I sdlrect.inc}
|
||||||
|
{$I sdlrwops.inc}
|
||||||
|
{$I sdlaudio.inc}
|
||||||
|
{$I sdlblendmode.inc}
|
||||||
|
{$I sdlsurface.inc}
|
||||||
|
{$I sdlshape.inc}
|
||||||
|
{$I sdlvideo.inc}
|
||||||
|
{$I sdlhints.inc}
|
||||||
|
{$I sdlloadso.inc}
|
||||||
|
{$I sdlmessagebox.inc}
|
||||||
|
{$I sdlrenderer.inc}
|
||||||
|
{$I sdlscancode.inc}
|
||||||
|
{$I sdlkeyboard.inc}
|
||||||
|
{$I sdlmouse.inc}
|
||||||
|
{$I sdljoystick.inc}
|
||||||
|
{$I sdlgamecontroller.inc}
|
||||||
|
{$I sdlhaptic.inc}
|
||||||
|
{$I sdltouch.inc}
|
||||||
|
{$I sdlgesture.inc}
|
||||||
|
{$I sdlsyswm.inc}
|
||||||
|
{$I sdlevents.inc}
|
||||||
|
{$I sdlclipboard.inc}
|
||||||
|
{$I sdlcpuinfo.inc}
|
||||||
|
{$I sdlfilesystem.inc}
|
||||||
|
{$I sdllog.inc}
|
||||||
|
{$I sdlsystem.inc}
|
||||||
|
{$I sdl.inc}
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
//from "sdl_version.h"
|
||||||
|
procedure SDL_VERSION(Out x: TSDL_Version);
|
||||||
|
begin
|
||||||
|
x.major := SDL_MAJOR_VERSION;
|
||||||
|
x.minor := SDL_MINOR_VERSION;
|
||||||
|
x.patch := SDL_PATCHLEVEL;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function SDL_VERSIONNUM(X,Y,Z: UInt32): Cardinal;
|
||||||
|
begin
|
||||||
|
Result := X*1000 + Y*100 + Z;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function SDL_COMPILEDVERSION: Cardinal;
|
||||||
|
begin
|
||||||
|
Result := SDL_VERSIONNUM(SDL_MAJOR_VERSION,
|
||||||
|
SDL_MINOR_VERSION,
|
||||||
|
SDL_PATCHLEVEL);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function SDL_VERSION_ATLEAST(X,Y,Z: Cardinal): Boolean;
|
||||||
|
begin
|
||||||
|
Result := SDL_COMPILEDVERSION >= SDL_VERSIONNUM(X,Y,Z);
|
||||||
|
end;
|
||||||
|
|
||||||
|
//from "sdl_mouse.h"
|
||||||
|
function SDL_Button(button: SInt32): SInt32;
|
||||||
|
begin
|
||||||
|
Result := 1 shl (button - 1);
|
||||||
|
end;
|
||||||
|
|
||||||
|
{$IFDEF WINDOWS}
|
||||||
|
//from "sdl_thread.h"
|
||||||
|
|
||||||
|
function SDL_CreateThread(fn: TSDL_ThreadFunction; name: PAnsiChar; data: Pointer): PSDL_Thread; overload;
|
||||||
|
begin
|
||||||
|
Result := SDL_CreateThread(fn,name,data,nil,nil);
|
||||||
|
end;
|
||||||
|
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
//from "sdl_rect.h"
|
||||||
|
function SDL_RectEmpty(X: TSDL_Rect): Boolean;
|
||||||
|
begin
|
||||||
|
Result := (X.w <= 0) or (X.h <= 0);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function SDL_RectEquals(A: TSDL_Rect; B: TSDL_Rect): Boolean;
|
||||||
|
begin
|
||||||
|
Result := (A.x = B.x) and (A.y = B.y) and (A.w = B.w) and (A.h = B.h);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function SDL_PointInRect(const p: PSDL_Point; const r: PSDL_Rect): Boolean; Inline;
|
||||||
|
begin
|
||||||
|
Result :=
|
||||||
|
(p^.x >= r^.x) and (p^.x < (r^.x + r^.w))
|
||||||
|
and
|
||||||
|
(p^.y >= r^.y) and (p^.y < (r^.y + r^.h))
|
||||||
|
end;
|
||||||
|
|
||||||
|
//from "sdl_rwops.h"
|
||||||
|
|
||||||
|
function SDL_RWsize(ctx: PSDL_RWops): SInt64;
|
||||||
|
begin
|
||||||
|
Result := ctx^.size(ctx);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function SDL_RWseek(ctx: PSDL_RWops; offset: SInt64; whence: SInt32): SInt64;
|
||||||
|
begin
|
||||||
|
Result := ctx^.seek(ctx,offset,whence);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function SDL_RWtell(ctx: PSDL_RWops): SInt64;
|
||||||
|
begin
|
||||||
|
Result := ctx^.seek(ctx, 0, RW_SEEK_CUR);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function SDL_RWread(ctx: PSDL_RWops; ptr: Pointer; size: size_t; n: size_t): size_t;
|
||||||
|
begin
|
||||||
|
Result := ctx^.read(ctx, ptr, size, n);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function SDL_RWwrite(ctx: PSDL_RWops; ptr: Pointer; size: size_t; n: size_t): size_t;
|
||||||
|
begin
|
||||||
|
Result := ctx^.write(ctx, ptr, size, n);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function SDL_RWclose(ctx: PSDL_RWops): SInt32;
|
||||||
|
begin
|
||||||
|
Result := ctx^.close(ctx);
|
||||||
|
end;
|
||||||
|
|
||||||
|
//from "sdl_audio.h"
|
||||||
|
|
||||||
|
function SDL_LoadWAV(_file: PAnsiChar; spec: PSDL_AudioSpec; audio_buf: PPUInt8; audio_len: PUInt32): PSDL_AudioSpec;
|
||||||
|
begin
|
||||||
|
Result := SDL_LoadWAV_RW(SDL_RWFromFile(_file, 'rb'), 1, spec, audio_buf, audio_len);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function SDL_AUDIO_BITSIZE(x: Cardinal): Cardinal;
|
||||||
|
begin
|
||||||
|
Result := x and SDL_AUDIO_MASK_BITSIZE;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function SDL_AUDIO_ISFLOAT(x: Cardinal): Cardinal;
|
||||||
|
begin
|
||||||
|
Result := x and SDL_AUDIO_MASK_DATATYPE;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function SDL_AUDIO_ISBIGENDIAN(x: Cardinal): Cardinal;
|
||||||
|
begin
|
||||||
|
Result := x and SDL_AUDIO_MASK_ENDIAN;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function SDL_AUDIO_ISSIGNED(x: Cardinal): Cardinal;
|
||||||
|
begin
|
||||||
|
Result := x and SDL_AUDIO_MASK_SIGNED;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function SDL_AUDIO_ISINT(x: Cardinal): Cardinal;
|
||||||
|
begin
|
||||||
|
Result := not SDL_AUDIO_ISFLOAT(x);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function SDL_AUDIO_ISLITTLEENDIAN(x: Cardinal): Cardinal;
|
||||||
|
begin
|
||||||
|
Result := not SDL_AUDIO_ISLITTLEENDIAN(x);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function SDL_AUDIO_ISUNSIGNED(x: Cardinal): Cardinal;
|
||||||
|
begin
|
||||||
|
Result := not SDL_AUDIO_ISSIGNED(x);
|
||||||
|
end;
|
||||||
|
|
||||||
|
//from "sdl_pixels.h"
|
||||||
|
|
||||||
|
function SDL_PIXELFLAG(X: Cardinal): Cardinal;
|
||||||
|
begin
|
||||||
|
Result := (X shr 28) and $0F;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function SDL_PIXELTYPE(X: Cardinal): Cardinal;
|
||||||
|
begin
|
||||||
|
Result := (X shr 24) and $0F;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function SDL_PIXELORDER(X: Cardinal): Cardinal;
|
||||||
|
begin
|
||||||
|
Result := (X shr 20) and $0F;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function SDL_PIXELLAYOUT(X: Cardinal): Cardinal;
|
||||||
|
begin
|
||||||
|
Result := (X shr 16) and $0F;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function SDL_BITSPERPIXEL(X: Cardinal): Cardinal;
|
||||||
|
begin
|
||||||
|
Result := (X shr 8) and $FF;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function SDL_IsPixelFormat_FOURCC(format: Variant): Boolean;
|
||||||
|
begin
|
||||||
|
{* The flag is set to 1 because 0x1? is not in the printable ASCII range *}
|
||||||
|
Result := format and SDL_PIXELFLAG(format) <> 1;
|
||||||
|
end;
|
||||||
|
|
||||||
|
//from "sdl_surface.h"
|
||||||
|
function SDL_LoadBMP(_file: PAnsiChar): PSDL_Surface;
|
||||||
|
begin
|
||||||
|
Result := SDL_LoadBMP_RW(SDL_RWFromFile(_file, 'rb'), 1);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function SDL_SaveBMP(Const surface:PSDL_Surface; Const filename:AnsiString):sInt32;
|
||||||
|
begin
|
||||||
|
Result := SDL_SaveBMP_RW(surface, SDL_RWFromFile(PAnsiChar(filename), 'wb'), 1)
|
||||||
|
end;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Evaluates to true if the surface needs to be locked before access.
|
||||||
|
*}
|
||||||
|
function SDL_MUSTLOCK(Const S:PSDL_Surface):Boolean;
|
||||||
|
begin
|
||||||
|
Result := ((S^.flags and SDL_RLEACCEL) <> 0)
|
||||||
|
end;
|
||||||
|
|
||||||
|
//from "sdl_video.h"
|
||||||
|
function SDL_WindowPos_IsUndefined(X: Variant): Variant;
|
||||||
|
begin
|
||||||
|
Result := (X and $FFFF0000) = SDL_WINDOWPOS_UNDEFINED_MASK;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function SDL_WindowPos_IsCentered(X: Variant): Variant;
|
||||||
|
begin
|
||||||
|
Result := (X and $FFFF0000) = SDL_WINDOWPOS_CENTERED_MASK;
|
||||||
|
end;
|
||||||
|
|
||||||
|
//from "sdl_events.h"
|
||||||
|
|
||||||
|
function SDL_GetEventState(type_: UInt32): UInt8;
|
||||||
|
begin
|
||||||
|
Result := SDL_EventState(type_, SDL_QUERY);
|
||||||
|
end;
|
||||||
|
|
||||||
|
// from "sdl_timer.h"
|
||||||
|
function SDL_TICKS_PASSED(Const A, B:UInt32):Boolean;
|
||||||
|
begin
|
||||||
|
Result := ((Int64(B) - Int64(A)) <= 0)
|
||||||
|
end;
|
||||||
|
|
||||||
|
// from "sdl_gamecontroller.h"
|
||||||
|
{**
|
||||||
|
* Load a set of mappings from a file, filtered by the current SDL_GetPlatform()
|
||||||
|
*}
|
||||||
|
function SDL_GameControllerAddMappingsFromFile(Const FilePath:PAnsiChar):SInt32;
|
||||||
|
begin
|
||||||
|
Result := SDL_GameControllerAddMappingsFromRW(SDL_RWFromFile(FilePath, 'rb'), 1)
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
568
model_viewer/sdl2/sdlaudio.inc
Normal file
568
model_viewer/sdl2/sdlaudio.inc
Normal file
@ -0,0 +1,568 @@
|
|||||||
|
//from sdl_audio.h
|
||||||
|
{**
|
||||||
|
* Audio format flags.
|
||||||
|
*
|
||||||
|
* These are what the 16 bits in SDL_AudioFormat currently mean...
|
||||||
|
* (Unspecified bits are always zero).
|
||||||
|
*
|
||||||
|
*
|
||||||
|
++-----------------------sample is signed if set
|
||||||
|
||
|
||||||
|
|| ++-----------sample is bigendian if set
|
||||||
|
|| ||
|
||||||
|
|| || ++---sample is float if set
|
||||||
|
|| || ||
|
||||||
|
|| || || +---sample bit size---+
|
||||||
|
|| || || | |
|
||||||
|
15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
|
||||||
|
*
|
||||||
|
* There are macros in SDL 2.0 and later to query these bits.
|
||||||
|
*}
|
||||||
|
type
|
||||||
|
TSDL_AudioFormat = UInt16;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Audio flags
|
||||||
|
*}
|
||||||
|
const
|
||||||
|
SDL_AUDIO_MASK_BITSIZE = ($FF);
|
||||||
|
SDL_AUDIO_MASK_DATATYPE = (1 shl 8);
|
||||||
|
SDL_AUDIO_MASK_ENDIAN = (1 shl 12);
|
||||||
|
SDL_AUDIO_MASK_SIGNED = (1 shl 15);
|
||||||
|
|
||||||
|
function SDL_AUDIO_BITSIZE(x: Cardinal): Cardinal;
|
||||||
|
function SDL_AUDIO_ISFLOAT(x: Cardinal): Cardinal;
|
||||||
|
function SDL_AUDIO_ISBIGENDIAN(x: Cardinal): Cardinal;
|
||||||
|
function SDL_AUDIO_ISSIGNED(x: Cardinal): Cardinal;
|
||||||
|
function SDL_AUDIO_ISINT(x: Cardinal): Cardinal;
|
||||||
|
function SDL_AUDIO_ISLITTLEENDIAN(x: Cardinal): Cardinal;
|
||||||
|
function SDL_AUDIO_ISUNSIGNED(x: Cardinal): Cardinal;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Audio format flags
|
||||||
|
*
|
||||||
|
* Defaults to LSB byte order.
|
||||||
|
*}
|
||||||
|
const
|
||||||
|
AUDIO_U8 = $0008; {**< Unsigned 8-bit samples *}
|
||||||
|
AUDIO_S8 = $8008; {**< Signed 8-bit samples *}
|
||||||
|
AUDIO_U16LSB = $0010; {**< Unsigned 16-bit samples *}
|
||||||
|
AUDIO_S16LSB = $8010; {**< Signed 16-bit samples *}
|
||||||
|
AUDIO_U16MSB = $1010; {**< As above, but big-endian byte order *}
|
||||||
|
AUDIO_S16MSB = $9010; {**< As above, but big-endian byte order *}
|
||||||
|
AUDIO_U16 = AUDIO_U16LSB;
|
||||||
|
AUDIO_S16 = AUDIO_S16LSB;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* int32 support
|
||||||
|
*}
|
||||||
|
const
|
||||||
|
AUDIO_S32LSB = $8020; {**< 32-bit integer samples *}
|
||||||
|
AUDIO_S32MSB = $9020; {**< As above, but big-endian byte order *}
|
||||||
|
AUDIO_S32 = AUDIO_S32LSB;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* float32 support
|
||||||
|
*}
|
||||||
|
const
|
||||||
|
AUDIO_F32LSB = $8120; {**< 32-bit floating point samples *}
|
||||||
|
AUDIO_F32MSB = $9120; {**< As above, but big-endian byte order *}
|
||||||
|
AUDIO_F32 = AUDIO_F32LSB;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Native audio byte ordering
|
||||||
|
*}
|
||||||
|
{$IFDEF FPC}
|
||||||
|
{$IF DEFINED(ENDIAN_LITTLE)}
|
||||||
|
AUDIO_U16SYS = AUDIO_U16LSB;
|
||||||
|
AUDIO_S16SYS = AUDIO_S16LSB;
|
||||||
|
AUDIO_S32SYS = AUDIO_S32LSB;
|
||||||
|
AUDIO_F32SYS = AUDIO_F32LSB;
|
||||||
|
{$ELSEIF DEFINED(ENDIAN_BIG)}
|
||||||
|
AUDIO_U16SYS = AUDIO_U16MSB;
|
||||||
|
AUDIO_S16SYS = AUDIO_S16MSB;
|
||||||
|
AUDIO_S32SYS = AUDIO_S32MSB;
|
||||||
|
AUDIO_F32SYS = AUDIO_F32MSB;
|
||||||
|
{$ELSE}
|
||||||
|
{$FATAL Cannot determine endianness.}
|
||||||
|
{$IFEND}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Allow change flags
|
||||||
|
*
|
||||||
|
* Which audio format changes are allowed when opening a device.
|
||||||
|
*}
|
||||||
|
const
|
||||||
|
SDL_AUDIO_ALLOW_FREQUENCY_CHANGE = $00000001;
|
||||||
|
SDL_AUDIO_ALLOW_FORMAT_CHANGE = $00000002;
|
||||||
|
SDL_AUDIO_ALLOW_CHANNELS_CHANGE = $00000004;
|
||||||
|
SDL_AUDIO_ALLOW_ANY_CHANGE = (SDL_AUDIO_ALLOW_FREQUENCY_CHANGE or
|
||||||
|
SDL_AUDIO_ALLOW_FORMAT_CHANGE or
|
||||||
|
SDL_AUDIO_ALLOW_CHANNELS_CHANGE);
|
||||||
|
|
||||||
|
{*Audio flags*}
|
||||||
|
|
||||||
|
{**
|
||||||
|
* This function is called when the audio device needs more data.
|
||||||
|
*
|
||||||
|
* userdata An application-specific parameter saved in
|
||||||
|
* the SDL_AudioSpec structure
|
||||||
|
* stream A pointer to the audio data buffer.
|
||||||
|
* len The length of that buffer in bytes.
|
||||||
|
*
|
||||||
|
* Once the callback returns, the buffer will no longer be valid.
|
||||||
|
* Stereo samples are stored in a LRLRLR ordering.
|
||||||
|
*}
|
||||||
|
type
|
||||||
|
TSDL_AudioCallback = procedure(userdata: Pointer; stream: PUInt8; len: Integer) cdecl;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* The calculated values in this structure are calculated by SDL_OpenAudio().
|
||||||
|
*}
|
||||||
|
type
|
||||||
|
PSDL_AudioSpec = ^TSDL_AudioSpec;
|
||||||
|
TSDL_AudioSpec = record
|
||||||
|
freq: Integer; {**< DSP frequency -- samples per second *}
|
||||||
|
format: TSDL_AudioFormat; {**< Audio data format *}
|
||||||
|
channels: UInt8; {**< Number of channels: 1 mono, 2 stereo *}
|
||||||
|
silence: UInt8; {**< Audio buffer silence value (calculated) *}
|
||||||
|
samples: UInt16; {**< Audio buffer size in samples (power of 2) *}
|
||||||
|
padding: UInt16; {**< Necessary for some compile environments *}
|
||||||
|
size: UInt32; {**< Audio buffer size in bytes (calculated) *}
|
||||||
|
callback: TSDL_AudioCallback;
|
||||||
|
userdata: Pointer;
|
||||||
|
end;
|
||||||
|
|
||||||
|
PSDL_AudioCVT = ^TSDL_AudioCVT;
|
||||||
|
TSDL_AudioFilter = procedure(cvt: PSDL_AudioCVT; format: TSDL_AudioFormat) cdecl;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* A structure to hold a set of audio conversion filters and buffers.
|
||||||
|
*}
|
||||||
|
TSDL_AudioCVT = record
|
||||||
|
needed: Integer; {**< Set to 1 if conversion possible *}
|
||||||
|
src_format: TSDL_AudioFormat; {**< Source audio format *}
|
||||||
|
dst_format: TSDL_AudioFormat; {**< Target audio format *}
|
||||||
|
rate_incr: Double; {**< Rate conversion increment *}
|
||||||
|
buf: PUInt8; {**< Buffer to hold entire audio data *}
|
||||||
|
len: Integer; {**< Length of original audio buffer *}
|
||||||
|
len_cvt: Integer; {**< Length of converted audio buffer *}
|
||||||
|
len_mult: Integer; {**< buffer must be len*len_mult big *}
|
||||||
|
len_ratio: Double; {**< Given len, final size is len*len_ratio *}
|
||||||
|
filters: array[0..9] of TSDL_AudioFilter; {**< Filter list *}
|
||||||
|
filter_index: Integer; {**< Current audio conversion function *}
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{* Function prototypes *}
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Driver discovery functions
|
||||||
|
*
|
||||||
|
* These functions return the list of built in audio drivers, in the
|
||||||
|
* order that they are normally initialized by default.
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_GetNumAudioDrivers: Integer cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetNumAudioDrivers' {$ENDIF} {$ENDIF};
|
||||||
|
function SDL_GetAudioDriver(index: Integer): PAnsiChar cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetAudioDriver' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Initialization and cleanup
|
||||||
|
*
|
||||||
|
* These functions are used internally, and should not be used unless
|
||||||
|
* you have a specific need to specify the audio driver you want to
|
||||||
|
* use. You should normally use SDL_Init() or SDL_InitSubSystem().
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_AudioInit(driver_name: PAnsiChar): Integer cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_AudioInit' {$ENDIF} {$ENDIF};
|
||||||
|
procedure SDL_AudioQuit cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_AudioQuit' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* This function returns the name of the current audio driver, or NULL
|
||||||
|
* if no driver has been initialized.
|
||||||
|
*}
|
||||||
|
function SDL_GetCurrentAudioDriver: PAnsiChar cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetCurrentAudioDriver' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* This function opens the audio device with the desired parameters, and
|
||||||
|
* returns 0 if successful, placing the actual hardware parameters in the
|
||||||
|
* structure pointed to by obtained. If obtained is NULL, the audio
|
||||||
|
* data passed to the callback function will be guaranteed to be in the
|
||||||
|
* requested format, and will be automatically converted to the hardware
|
||||||
|
* audio format if necessary. This function returns -1 if it failed
|
||||||
|
* to open the audio device, or couldn't set up the audio thread.
|
||||||
|
*
|
||||||
|
* When filling in the desired audio spec structure,
|
||||||
|
* - desired->freq should be the desired audio frequency in samples-per-
|
||||||
|
* second.
|
||||||
|
* - desired->format should be the desired audio format.
|
||||||
|
* - desired->samples is the desired size of the audio buffer, in
|
||||||
|
* samples. This number should be a power of two, and may be adjusted by
|
||||||
|
* the audio driver to a value more suitable for the hardware. Good values
|
||||||
|
* seem to range between 512 and 8096 inclusive, depending on the
|
||||||
|
* application and CPU speed. Smaller values yield faster response time,
|
||||||
|
* but can lead to underflow if the application is doing heavy processing
|
||||||
|
* and cannot fill the audio buffer in time. A stereo sample consists of
|
||||||
|
* both right and left channels in LR ordering.
|
||||||
|
* Note that the number of samples is directly related to time by the
|
||||||
|
* following formula: ms := (samples*1000)/freq;
|
||||||
|
* - desired->size is the size in bytes of the audio buffer, and is
|
||||||
|
* calculated by SDL_OpenAudio().
|
||||||
|
* - desired->silence is the value used to set the buffer to silence,
|
||||||
|
* and is calculated by SDL_OpenAudio().
|
||||||
|
* - desired->callback should be set to a function that will be called
|
||||||
|
* when the audio device is ready for more data. It is passed a pointer
|
||||||
|
* to the audio buffer, and the length in bytes of the audio buffer.
|
||||||
|
* This function usually runs in a separate thread, and so you should
|
||||||
|
* protect data structures that it accesses by calling SDL_LockAudio()
|
||||||
|
* and SDL_UnlockAudio() in your code.
|
||||||
|
* - desired->userdata is passed as the first parameter to your callback
|
||||||
|
* function.
|
||||||
|
*
|
||||||
|
* The audio device starts out playing silence when it's opened, and should
|
||||||
|
* be enabled for playing by calling SDL_PauseAudio(0) when you are ready
|
||||||
|
* for your audio callback function to be called. Since the audio driver
|
||||||
|
* may modify the requested size of the audio buffer, you should allocate
|
||||||
|
* any local mixing buffers after you open the audio device.
|
||||||
|
*}
|
||||||
|
function SDL_OpenAudio(desired: PSDL_AudioSpec; obtained: PSDL_AudioSpec): Integer cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_OpenAudio' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* SDL Audio Device IDs.
|
||||||
|
*
|
||||||
|
* A successful call to SDL_OpenAudio() is always device id 1, and legacy
|
||||||
|
* SDL audio APIs assume you want this device ID. SDL_OpenAudioDevice() calls
|
||||||
|
* always returns devices >= 2 on success. The legacy calls are good both
|
||||||
|
* for backwards compatibility and when you don't care about multiple,
|
||||||
|
* specific, or capture devices.
|
||||||
|
*}
|
||||||
|
type
|
||||||
|
TSDL_AudioDeviceID = UInt32;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the number of available devices exposed by the current driver.
|
||||||
|
* Only valid after a successfully initializing the audio subsystem.
|
||||||
|
* Returns -1 if an explicit list of devices can't be determined; this is
|
||||||
|
* not an error. For example, if SDL is set up to talk to a remote audio
|
||||||
|
* server, it can't list every one available on the Internet, but it will
|
||||||
|
* still allow a specific host to be specified to SDL_OpenAudioDevice().
|
||||||
|
*
|
||||||
|
* In many common cases, when this function returns a value <= 0, it can still
|
||||||
|
* successfully open the default device (NULL for first argument of
|
||||||
|
* SDL_OpenAudioDevice()).
|
||||||
|
*}
|
||||||
|
function SDL_GetNumAudioDevices(iscapture: Integer): Integer cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetNumAudioDevices' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the human-readable name of a specific audio device.
|
||||||
|
* Must be a value between 0 and (number of audio devices-1).
|
||||||
|
* Only valid after a successfully initializing the audio subsystem.
|
||||||
|
* The values returned by this function reflect the latest call to
|
||||||
|
* SDL_GetNumAudioDevices(); recall that function to redetect available
|
||||||
|
* hardware.
|
||||||
|
*
|
||||||
|
* The string returned by this function is UTF-8 encoded, read-only, and
|
||||||
|
* managed internally. You are not to free it. If you need to keep the
|
||||||
|
* string for any length of time, you should make your own copy of it, as it
|
||||||
|
* will be invalid next time any of several other SDL functions is called.
|
||||||
|
*}
|
||||||
|
function SDL_GetAudioDeviceName(index: Integer; iscapture: Integer): PAnsiChar cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetAudioDeviceName' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Open a specific audio device. Passing in a device name of NULL requests
|
||||||
|
* the most reasonable default (and is equivalent to calling SDL_OpenAudio()).
|
||||||
|
*
|
||||||
|
* The device name is a UTF-8 string reported by SDL_GetAudioDeviceName(), but
|
||||||
|
* some drivers allow arbitrary and driver-specific strings, such as a
|
||||||
|
* hostname/IP address for a remote audio server, or a filename in the
|
||||||
|
* diskaudio driver.
|
||||||
|
*
|
||||||
|
* 0 on error, a valid device ID that is >= 2 on success.
|
||||||
|
*
|
||||||
|
* SDL_OpenAudio(), unlike this function, always acts on device ID 1.
|
||||||
|
*}
|
||||||
|
function SDL_OpenAudioDevice(device: PAnsiChar;
|
||||||
|
iscapture: Integer;
|
||||||
|
desired: PSDL_AudioSpec;
|
||||||
|
obtained: PSDL_AudioSpec;
|
||||||
|
allowed_changes: Integer): TSDL_AudioDeviceID cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_OpenAudioDevice' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Audio state
|
||||||
|
*
|
||||||
|
* Get the current audio state.
|
||||||
|
*}
|
||||||
|
|
||||||
|
type
|
||||||
|
TSDL_AudioStatus = (SDL_AUDIO_STOPPED,SDL_AUDIO_PLAYING,SDL_AUDIO_PAUSED);
|
||||||
|
|
||||||
|
function SDL_GetAudioStatus: TSDL_AudioStatus cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetAudioStatus' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
function SDL_GetAudioDeviceStatus(dev: TSDL_AudioDeviceID): TSDL_AudioStatus cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetAudioDeviceStatus' {$ENDIF} {$ENDIF};
|
||||||
|
{*Audio State*}
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Pause audio functions
|
||||||
|
*
|
||||||
|
* These functions pause and unpause the audio callback processing.
|
||||||
|
* They should be called with a parameter of 0 after opening the audio
|
||||||
|
* device to start playing sound. This is so you can safely initialize
|
||||||
|
* data for your callback function after opening the audio device.
|
||||||
|
* Silence will be written to the audio device during the pause.
|
||||||
|
*}
|
||||||
|
|
||||||
|
procedure SDL_PauseAudio(pause_on: Integer) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_PauseAudio' {$ENDIF} {$ENDIF};
|
||||||
|
procedure SDL_PauseAudioDevice(dev: TSDL_AudioDeviceID; pause_on: Integer) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_PauseAudioDevice' {$ENDIF} {$ENDIF};
|
||||||
|
{*Pause audio functions*}
|
||||||
|
|
||||||
|
{**
|
||||||
|
* This function loads a WAVE from the data source, automatically freeing
|
||||||
|
* that source if freesrc is non-zero. For example, to load a WAVE file,
|
||||||
|
* you could do:
|
||||||
|
*
|
||||||
|
* SDL_LoadWAV_RW(SDL_RWFromFile("sample.wav", "rb"), 1, ...);
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* If this function succeeds, it returns the given SDL_AudioSpec,
|
||||||
|
* filled with the audio data format of the wave data, and sets
|
||||||
|
* *audio_buf to a malloc()'d buffer containing the audio data,
|
||||||
|
* and sets *audio_len to the length of that audio buffer, in bytes.
|
||||||
|
* You need to free the audio buffer with SDL_FreeWAV() when you are
|
||||||
|
* done with it.
|
||||||
|
*
|
||||||
|
* This function returns NULL and sets the SDL error message if the
|
||||||
|
* wave file cannot be opened, uses an unknown data format, or is
|
||||||
|
* corrupt. Currently raw and MS-ADPCM WAVE files are supported.
|
||||||
|
*}
|
||||||
|
function SDL_LoadWAV_RW(src: PSDL_RWops; freesrc: Integer; spec: PSDL_AudioSpec; audio_buf: PPUInt8; audio_len: PUInt32): PSDL_AudioSpec cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_LoadWAV_RW' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Loads a WAV from a file.
|
||||||
|
* Compatibility convenience function.
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_LoadWAV(_file: PAnsiChar; spec: PSDL_AudioSpec; audio_buf: PPUInt8; audio_len: PUInt32): PSDL_AudioSpec;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* This function frees data previously allocated with SDL_LoadWAV_RW()
|
||||||
|
*}
|
||||||
|
procedure SDL_FreeWAV(audio_buf: PUInt8) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_FreeWAV' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* This function takes a source format and rate and a destination format
|
||||||
|
* and rate, and initializes the cvt structure with information needed
|
||||||
|
* by SDL_ConvertAudio() to convert a buffer of audio data from one format
|
||||||
|
* to the other.
|
||||||
|
*
|
||||||
|
* -1 if the format conversion is not supported, 0 if there's
|
||||||
|
* no conversion needed, or 1 if the audio filter is set up.
|
||||||
|
*}
|
||||||
|
function SDL_BuildAudioCVT(cvt: PSDL_AudioCVT;
|
||||||
|
src_format: TSDL_AudioFormat;
|
||||||
|
src_channels: UInt8;
|
||||||
|
src_rate: Integer;
|
||||||
|
dst_format: TSDL_AudioFormat;
|
||||||
|
dst_channels: UInt8;
|
||||||
|
dst_rate: Integer): Integer cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_BuildAudioCVT' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Once you have initialized the cvt structure using SDL_BuildAudioCVT(),
|
||||||
|
* created an audio buffer cvt->buf, and filled it with cvt->len bytes of
|
||||||
|
* audio data in the source format, this function will convert it in-place
|
||||||
|
* to the desired format.
|
||||||
|
*
|
||||||
|
* The data conversion may expand the size of the audio data, so the buffer
|
||||||
|
* cvt->buf should be allocated after the cvt structure is initialized by
|
||||||
|
* SDL_BuildAudioCVT(), and should be cvt->len*cvt->len_mult bytes long.
|
||||||
|
*}
|
||||||
|
function SDL_ConvertAudio(cvt: PSDL_AudioCVT): Integer cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_ConvertAudio' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
const
|
||||||
|
SDL_MIX_MAXVOLUME = 128;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* This takes two audio buffers of the playing audio format and mixes
|
||||||
|
* them, performing addition, volume adjustment, and overflow clipping.
|
||||||
|
* The volume ranges from 0 - 128, and should be set to ::SDL_MIX_MAXVOLUME
|
||||||
|
* for full audio volume. Note this does not change hardware volume.
|
||||||
|
* This is provided for convenience -- you can mix your own audio data.
|
||||||
|
*}
|
||||||
|
procedure SDL_MixAudio(dst: PUInt8; src: PUInt8; len: UInt32; volume: Integer) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_MixAudio' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* This works like SDL_MixAudio(), but you specify the audio format instead of
|
||||||
|
* using the format of audio device 1. Thus it can be used when no audio
|
||||||
|
* device is open at all.
|
||||||
|
*}
|
||||||
|
procedure SDL_MixAudioFormat(dst: PUInt8; src: PUInt8; format: TSDL_AudioFormat; len: UInt32; volume: Integer) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_MixAudioFormat' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Queue more audio on non-callback devices.
|
||||||
|
*
|
||||||
|
* SDL offers two ways to feed audio to the device: you can either supply a
|
||||||
|
* callback that SDL triggers with some frequency to obtain more audio
|
||||||
|
* (pull method), or you can supply no callback, and then SDL will expect
|
||||||
|
* you to supply data at regular intervals (push method) with this function.
|
||||||
|
*
|
||||||
|
* There are no limits on the amount of data you can queue, short of
|
||||||
|
* exhaustion of address space. Queued data will drain to the device as
|
||||||
|
* necessary without further intervention from you. If the device needs
|
||||||
|
* audio but there is not enough queued, it will play silence to make up
|
||||||
|
* the difference. This means you will have skips in your audio playback
|
||||||
|
* if you aren't routinely queueing sufficient data.
|
||||||
|
*
|
||||||
|
* This function copies the supplied data, so you are safe to free it when
|
||||||
|
* the function returns. This function is thread-safe, but queueing to the
|
||||||
|
* same device from two threads at once does not promise which buffer will
|
||||||
|
* be queued first.
|
||||||
|
*
|
||||||
|
* You may not queue audio on a device that is using an application-supplied
|
||||||
|
* callback; doing so returns an error. You have to use the audio callback
|
||||||
|
* or queue audio with this function, but not both.
|
||||||
|
*
|
||||||
|
* You should not call SDL_LockAudio() on the device before queueing; SDL
|
||||||
|
* handles locking internally for this function.
|
||||||
|
*
|
||||||
|
* \param dev The device ID to which we will queue audio.
|
||||||
|
* \param data The data to queue to the device for later playback.
|
||||||
|
* \param len The number of bytes (not samples!) to which (data) points.
|
||||||
|
* \return zero on success, -1 on error.
|
||||||
|
*
|
||||||
|
* \sa SDL_GetQueuedAudioSize
|
||||||
|
* \sa SDL_ClearQueuedAudio
|
||||||
|
*}
|
||||||
|
function SDL_QueueAudio(dev: TSDL_AudioDeviceID; data: Pointer; len: UInt32): SInt32; cdecl;
|
||||||
|
external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_QueueAudio' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Dequeue more audio on non-callback devices.
|
||||||
|
*
|
||||||
|
* (If you are looking to queue audio for output on a non-callback playback
|
||||||
|
* device, you want SDL_QueueAudio() instead. This will always return 0
|
||||||
|
* if you use it with playback devices.)
|
||||||
|
*
|
||||||
|
* SDL offers two ways to retrieve audio from a capture device: you can
|
||||||
|
* either supply a callback that SDL triggers with some frequency as the
|
||||||
|
* device records more audio data, (push method), or you can supply no
|
||||||
|
* callback, and then SDL will expect you to retrieve data at regular
|
||||||
|
* intervals (pull method) with this function.
|
||||||
|
*
|
||||||
|
* There are no limits on the amount of data you can queue, short of
|
||||||
|
* exhaustion of address space. Data from the device will keep queuing as
|
||||||
|
* necessary without further intervention from you. This means you will
|
||||||
|
* eventually run out of memory if you aren't routinely dequeueing data.
|
||||||
|
*
|
||||||
|
* Capture devices will not queue data when paused; if you are expecting
|
||||||
|
* to not need captured audio for some length of time, use
|
||||||
|
* SDL_PauseAudioDevice() to stop the capture device from queueing more
|
||||||
|
* data. This can be useful during, say, level loading times. When
|
||||||
|
* unpaused, capture devices will start queueing data from that point,
|
||||||
|
* having flushed any capturable data available while paused.
|
||||||
|
*
|
||||||
|
* This function is thread-safe, but dequeueing from the same device from
|
||||||
|
* two threads at once does not promise which thread will dequeued data
|
||||||
|
* first.
|
||||||
|
*
|
||||||
|
* You may not dequeue audio from a device that is using an
|
||||||
|
* application-supplied callback; doing so returns an error. You have to use
|
||||||
|
* the audio callback, or dequeue audio with this function, but not both.
|
||||||
|
*
|
||||||
|
* You should not call SDL_LockAudio() on the device before queueing; SDL
|
||||||
|
* handles locking internally for this function.
|
||||||
|
*
|
||||||
|
* \param dev The device ID from which we will dequeue audio.
|
||||||
|
* \param data A pointer into where audio data should be copied.
|
||||||
|
* \param len The number of bytes (not samples!) to which (data) points.
|
||||||
|
* \return number of bytes dequeued, which could be less than requested.
|
||||||
|
*
|
||||||
|
* \sa SDL_GetQueuedAudioSize
|
||||||
|
* \sa SDL_ClearQueuedAudio
|
||||||
|
*}
|
||||||
|
function SDL_DequeueAudio(dev: TSDL_AudioDeviceID; data: Pointer; len:Uint32):Uint32; cdecl;
|
||||||
|
external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_DequeueAudio' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the number of bytes of still-queued audio.
|
||||||
|
*
|
||||||
|
* This is the number of bytes that have been queued for playback with
|
||||||
|
* SDL_QueueAudio(), but have not yet been sent to the hardware.
|
||||||
|
*
|
||||||
|
* Once we've sent it to the hardware, this function can not decide the exact
|
||||||
|
* byte boundary of what has been played. It's possible that we just gave the
|
||||||
|
* hardware several kilobytes right before you called this function, but it
|
||||||
|
* hasn't played any of it yet, or maybe half of it, etc.
|
||||||
|
*
|
||||||
|
* You may not queue audio on a device that is using an application-supplied
|
||||||
|
* callback; calling this function on such a device always returns 0.
|
||||||
|
* You have to use the audio callback or queue audio with SDL_QueueAudio(),
|
||||||
|
* but not both.
|
||||||
|
*
|
||||||
|
* You should not call SDL_LockAudio() on the device before querying; SDL
|
||||||
|
* handles locking internally for this function.
|
||||||
|
*
|
||||||
|
* \param dev The device ID of which we will query queued audio size.
|
||||||
|
* \return Number of bytes (not samples!) of queued audio.
|
||||||
|
*
|
||||||
|
* \sa SDL_QueueAudio
|
||||||
|
* \sa SDL_ClearQueuedAudio
|
||||||
|
*}
|
||||||
|
function SDL_GetQueuedAudioSize(dev: TSDL_AudioDeviceID): UInt32; cdecl;
|
||||||
|
external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetQueuedAudioSize' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Drop any queued audio data waiting to be sent to the hardware.
|
||||||
|
*
|
||||||
|
* Immediately after this call, SDL_GetQueuedAudioSize() will return 0 and
|
||||||
|
* the hardware will start playing silence if more audio isn't queued.
|
||||||
|
*
|
||||||
|
* This will not prevent playback of queued audio that's already been sent
|
||||||
|
* to the hardware, as we can not undo that, so expect there to be some
|
||||||
|
* fraction of a second of audio that might still be heard. This can be
|
||||||
|
* useful if you want to, say, drop any pending music during a level change
|
||||||
|
* in your game.
|
||||||
|
*
|
||||||
|
* You may not queue audio on a device that is using an application-supplied
|
||||||
|
* callback; calling this function on such a device is always a no-op.
|
||||||
|
* You have to use the audio callback or queue audio with SDL_QueueAudio(),
|
||||||
|
* but not both.
|
||||||
|
*
|
||||||
|
* You should not call SDL_LockAudio() on the device before clearing the
|
||||||
|
* queue; SDL handles locking internally for this function.
|
||||||
|
*
|
||||||
|
* This function always succeeds and thus returns void.
|
||||||
|
*
|
||||||
|
* \param dev The device ID of which to clear the audio queue.
|
||||||
|
*
|
||||||
|
* \sa SDL_QueueAudio
|
||||||
|
* \sa SDL_GetQueuedAudioSize
|
||||||
|
*}
|
||||||
|
procedure SDL_ClearQueuedAudio(dev: TSDL_AudioDeviceID); cdecl;
|
||||||
|
external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_ClearQueuedAudio' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Audio lock functions
|
||||||
|
*
|
||||||
|
* The lock manipulated by these functions protects the callback function.
|
||||||
|
* During a SDL_LockAudio()/SDL_UnlockAudio() pair, you can be guaranteed that
|
||||||
|
* the callback function is not running. Do not call these from the callback
|
||||||
|
* function or you will cause deadlock.
|
||||||
|
*}
|
||||||
|
|
||||||
|
procedure SDL_LockAudio cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_LockAudio' {$ENDIF} {$ENDIF};
|
||||||
|
procedure SDL_LockAudioDevice(dev: TSDL_AudioDeviceID) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_LockAudioDevice' {$ENDIF} {$ENDIF};
|
||||||
|
procedure SDL_UnlockAudio cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_Unlock' {$ENDIF} {$ENDIF};
|
||||||
|
procedure SDL_UnlockAudioDevice(dev: TSDL_AudioDeviceID) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_UnlockAudioDevice' {$ENDIF} {$ENDIF};
|
||||||
|
{*Audio lock functions*}
|
||||||
|
|
||||||
|
{**
|
||||||
|
* This function shuts down audio processing and closes the audio device.
|
||||||
|
*}
|
||||||
|
procedure SDL_CloseAudio cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_CloseAudio' {$ENDIF} {$ENDIF};
|
||||||
|
procedure SDL_CloseAudioDevice(dev: TSDL_AudioDeviceID) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_CloseAudioDevice' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* 1 if audio device is still functioning, zero if not, -1 on error.
|
||||||
|
*}
|
||||||
|
function SDL_AudioDeviceConnected(dev: TSDL_AudioDeviceID): Integer cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_AudioDeviceConnected' {$ENDIF} {$ENDIF};
|
||||||
|
|
15
model_viewer/sdl2/sdlblendmode.inc
Normal file
15
model_viewer/sdl2/sdlblendmode.inc
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
//from "sdl_blendmode.h"
|
||||||
|
|
||||||
|
{**
|
||||||
|
* The blend mode used in SDL_RenderCopy() and drawing operations.
|
||||||
|
*}
|
||||||
|
|
||||||
|
type
|
||||||
|
PSDL_BlendMode = ^TSDL_BlendMode;
|
||||||
|
TSDL_BlendMode = DWord;
|
||||||
|
|
||||||
|
const
|
||||||
|
SDL_BLENDMODE_NONE = $00000000; {**< No blending *}
|
||||||
|
SDL_BLENDMODE_BLEND = $00000001; {**< dst = (src * A) + (dst * (1-A)) *}
|
||||||
|
SDL_BLENDMODE_ADD = $00000002; {**< dst = (src * A) + dst *}
|
||||||
|
SDL_BLENDMODE_MOD = $00000004; {**< dst = src * dst *}
|
24
model_viewer/sdl2/sdlclipboard.inc
Normal file
24
model_viewer/sdl2/sdlclipboard.inc
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
|
||||||
|
{* Function prototypes *}
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief Put UTF-8 text into the clipboard
|
||||||
|
*
|
||||||
|
* \sa SDL_GetClipboardText()
|
||||||
|
*}
|
||||||
|
function SDL_SetClipboardText(const text: PAnsiChar): Integer cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_SetClipboardText' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief Get UTF-8 text from the clipboard, which must be freed with SDL_free()
|
||||||
|
*
|
||||||
|
* \sa SDL_SetClipboardText()
|
||||||
|
*}
|
||||||
|
function SDL_GetClipboardText(): PAnsiChar cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetClipboardText' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief Returns a flag indicating whether the clipboard exists and contains a text string that is non-empty
|
||||||
|
*
|
||||||
|
* \sa SDL_GetClipboardText()
|
||||||
|
*}
|
||||||
|
function SDL_HasClipboardText(): TSDL_Bool cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_HasClipboardText' {$ENDIF} {$ENDIF};
|
||||||
|
|
82
model_viewer/sdl2/sdlcpuinfo.inc
Normal file
82
model_viewer/sdl2/sdlcpuinfo.inc
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
|
||||||
|
{* This is a guess for the cacheline size used for padding.
|
||||||
|
* Most x86 processors have a 64 byte cache line.
|
||||||
|
* The 64-bit PowerPC processors have a 128 byte cache line.
|
||||||
|
* We'll use the larger value to be generally safe.
|
||||||
|
*}
|
||||||
|
const
|
||||||
|
SDL_CACHELINE_SIZE = 128;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* This function returns the number of CPU cores available.
|
||||||
|
*}
|
||||||
|
function SDL_GetCPUCount(): Integer; cdecl external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetCPUCount' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* This function returns the L1 cache line size of the CPU
|
||||||
|
*
|
||||||
|
* This is useful for determining multi-threaded structure padding
|
||||||
|
* or SIMD prefetch sizes.
|
||||||
|
*}
|
||||||
|
function SDL_GetCPUCacheLineSize(): Integer cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetCPUCacheLineSize' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* This function returns true if the CPU has the RDTSC instruction.
|
||||||
|
*}
|
||||||
|
function SDL_HasRDTSC(): TSDL_Bool cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_HasRDTSC' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* This function returns true if the CPU has AltiVec features.
|
||||||
|
*}
|
||||||
|
function SDL_HasAltiVec(): TSDL_Bool cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_HasAltiVec' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* This function returns true if the CPU has MMX features.
|
||||||
|
*}
|
||||||
|
function SDL_HasMMX(): TSDL_Bool cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_HasMMX' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* This function returns true if the CPU has 3DNow! features.
|
||||||
|
*}
|
||||||
|
function SDL_Has3DNow(): TSDL_Bool cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_Has3DNow' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* This function returns true if the CPU has SSE features.
|
||||||
|
*}
|
||||||
|
function SDL_HasSSE(): TSDL_Bool cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_HasSSE' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* This function returns true if the CPU has SSE2 features.
|
||||||
|
*}
|
||||||
|
function SDL_HasSSE2(): TSDL_Bool cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_HasSSE2' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* This function returns true if the CPU has SSE3 features.
|
||||||
|
*}
|
||||||
|
function SDL_HasSSE3(): TSDL_Bool cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_HasSSE3' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* This function returns true if the CPU has SSE4.1 features.
|
||||||
|
*}
|
||||||
|
function SDL_HasSSE41(): TSDL_Bool cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_HasSSE41' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* This function returns true if the CPU has SSE4.2 features.
|
||||||
|
*}
|
||||||
|
function SDL_HasSSE42(): TSDL_Bool cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_HasSSE42' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* This function returns true if the CPU has AVX features.
|
||||||
|
*}
|
||||||
|
function SDL_HasAVX(): TSDL_Bool cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_HasAVX' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* This function returns true if the CPU has AVX2 features.
|
||||||
|
*}
|
||||||
|
function SDL_HasAVX2(): TSDL_Bool cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_HasAVX2' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* This function returns the amount of RAM configured in the system, in MB.
|
||||||
|
*}
|
||||||
|
function SDL_GetSystemRAM(): Integer cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetSystemRAM' {$ENDIF} {$ENDIF};
|
||||||
|
|
55
model_viewer/sdl2/sdlerror.inc
Normal file
55
model_viewer/sdl2/sdlerror.inc
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
//from "sdl_error.h"
|
||||||
|
const
|
||||||
|
ERR_MAX_STRLEN = 128;
|
||||||
|
ERR_MAX_ARGS = 5;
|
||||||
|
|
||||||
|
{* Public functions *}
|
||||||
|
|
||||||
|
{* SDL_SetError() unconditionally returns -1. *}
|
||||||
|
function SDL_SetError(const fmt: PAnsiChar): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_SetError' {$ENDIF} {$ENDIF};
|
||||||
|
function SDL_GetError: PAnsiChar cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetError' {$ENDIF} {$ENDIF};
|
||||||
|
procedure SDL_ClearError cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_ClearError' {$ENDIF} {$ENDIF};
|
||||||
|
{*Internal error functions*}
|
||||||
|
{**
|
||||||
|
* Internal error functions
|
||||||
|
*
|
||||||
|
* Private error reporting function - used internally.
|
||||||
|
*}
|
||||||
|
|
||||||
|
{
|
||||||
|
#define SDL_OutOfMemory() SDL_Error(SDL_ENOMEM)
|
||||||
|
#define SDL_Unsupported() SDL_Error(SDL_UNSUPPORTED)
|
||||||
|
#define SDL_InvalidParamError(param) SDL_SetError("Parameter '%s' is invalid", (param))
|
||||||
|
}
|
||||||
|
type
|
||||||
|
TSDL_ErrorCode = (SDL_ENOMEM,
|
||||||
|
SDL_EFREAD,
|
||||||
|
SDL_EFWRITE,
|
||||||
|
SDL_EFSEEK,
|
||||||
|
SDL_UNSUPPORTED,
|
||||||
|
SDL_LASTERROR);
|
||||||
|
|
||||||
|
TSDL_Error = record
|
||||||
|
{* This is a numeric value corresponding to the current error *}
|
||||||
|
error: SInt32;
|
||||||
|
|
||||||
|
{* This is a key used to index into a language hashtable containing
|
||||||
|
internationalized versions of the SDL error messages. If the key
|
||||||
|
is not in the hashtable, or no hashtable is available, the key is
|
||||||
|
used directly as an error message format string.
|
||||||
|
*}
|
||||||
|
key: String[ERR_MAX_STRLEN];
|
||||||
|
|
||||||
|
{* These are the arguments for the error functions *}
|
||||||
|
argc: SInt32;
|
||||||
|
case SInt32 of
|
||||||
|
{* What is a character anyway? (UNICODE issues) *}
|
||||||
|
0: (value_c: Byte;);
|
||||||
|
1: (value_ptr: Pointer;);
|
||||||
|
2: (value_i: SInt32;);
|
||||||
|
3: (value_f: Double;);
|
||||||
|
4: (buf: String[ERR_MAX_STRLEN];);
|
||||||
|
end;
|
||||||
|
|
||||||
|
{* SDL_Error() unconditionally returns -1. *}
|
||||||
|
function SDL_Error(code: TSDL_ErrorCode): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_Error' {$ENDIF} {$ENDIF};
|
705
model_viewer/sdl2/sdlevents.inc
Normal file
705
model_viewer/sdl2/sdlevents.inc
Normal file
@ -0,0 +1,705 @@
|
|||||||
|
//from "sdl_events.h"
|
||||||
|
|
||||||
|
{**
|
||||||
|
* The types of events that can be delivered.
|
||||||
|
*}
|
||||||
|
|
||||||
|
const
|
||||||
|
|
||||||
|
SDL_FIRSTEVENT = 0; // Unused (do not remove) (needed in pascal?)
|
||||||
|
|
||||||
|
SDL_COMMONEVENT = 1; //added for pascal-compatibility
|
||||||
|
|
||||||
|
{ Application events }
|
||||||
|
SDL_QUITEV = $100; // User-requested quit (originally SDL_QUIT, but changed, cause theres a method called SDL_QUIT)
|
||||||
|
|
||||||
|
|
||||||
|
{* These application events have special meaning on iOS, see README.iOS for details *}
|
||||||
|
SDL_APP_TERMINATING = $101; {**< The application is being terminated by the OS
|
||||||
|
Called on iOS in applicationWillTerminate()
|
||||||
|
Called on Android in onDestroy()
|
||||||
|
*}
|
||||||
|
SDL_APP_LOWMEMORY = $102; {**< The application is low on memory, free memory if possible.
|
||||||
|
Called on iOS in applicationDidReceiveMemoryWarning()
|
||||||
|
Called on Android in onLowMemory()
|
||||||
|
*}
|
||||||
|
SDL_APP_WILLENTERBACKGROUND = $103; {**< The application is about to enter the background
|
||||||
|
Called on iOS in applicationWillResignActive()
|
||||||
|
Called on Android in onPause()
|
||||||
|
*}
|
||||||
|
SDL_APP_DIDENTERBACKGROUND = $104; {**< The application did enter the background and may not get CPU for some time
|
||||||
|
Called on iOS in applicationDidEnterBackground()
|
||||||
|
Called on Android in onPause()
|
||||||
|
*}
|
||||||
|
SDL_APP_WILLENTERFOREGROUND = $105; {**< The application is about to enter the foreground
|
||||||
|
Called on iOS in applicationWillEnterForeground()
|
||||||
|
Called on Android in onResume()
|
||||||
|
*}
|
||||||
|
SDL_APP_DIDENTERFOREGROUND = $106; {**< The application is now interactive
|
||||||
|
Called on iOS in applicationDidBecomeActive()
|
||||||
|
Called on Android in onResume()
|
||||||
|
*}
|
||||||
|
|
||||||
|
{ Window events }
|
||||||
|
SDL_WINDOWEVENT = $200; // Window state change
|
||||||
|
SDL_SYSWMEVENT = $201; // System specific event
|
||||||
|
|
||||||
|
{ Keyboard events }
|
||||||
|
SDL_KEYDOWN = $300; // Key pressed
|
||||||
|
SDL_KEYUP = $301; // Key released
|
||||||
|
SDL_TEXTEDITING = $302; // Keyboard text editing (composition)
|
||||||
|
SDL_TEXTINPUT = $303; // Keyboard text input
|
||||||
|
SDL_KEYMAPCHANGED = $304; // Keymap changed due to a system event such as an
|
||||||
|
// input language or keyboard layout change.
|
||||||
|
|
||||||
|
{ Mouse events }
|
||||||
|
SDL_MOUSEMOTION = $400; // Mouse moved
|
||||||
|
SDL_MOUSEBUTTONDOWN = $401; // Mouse button pressed
|
||||||
|
SDL_MOUSEBUTTONUP = $402; // Mouse button released
|
||||||
|
SDL_MOUSEWHEEL = $403; // Mouse wheel motion
|
||||||
|
|
||||||
|
{ Joystick events }
|
||||||
|
SDL_JOYAXISMOTION = $600; // Joystick axis motion
|
||||||
|
SDL_JOYBALLMOTION = $601; // Joystick trackball motion
|
||||||
|
SDL_JOYHATMOTION = $602; // Joystick hat position change
|
||||||
|
SDL_JOYBUTTONDOWN = $603; // Joystick button pressed
|
||||||
|
SDL_JOYBUTTONUP = $604; // Joystick button released
|
||||||
|
SDL_JOYDEVICEADDED = $605; // A new joystick has been inserted into the system
|
||||||
|
SDL_JOYDEVICEREMOVED = $606; // An opened joystick has been removed
|
||||||
|
|
||||||
|
{ Game controller events }
|
||||||
|
SDL_CONTROLLERAXISMOTION = $650; // Game controller axis motion
|
||||||
|
SDL_CONTROLLERBUTTONDOWN = $651; // Game controller button pressed
|
||||||
|
SDL_CONTROLLERBUTTONUP = $652; // Game controller button released
|
||||||
|
SDL_CONTROLLERDEVICEADDED = $653; // A new Game controller has been inserted into the system
|
||||||
|
SDL_CONTROLLERDEVICEREMOVED = $654; // An opened Game controller has been removed
|
||||||
|
SDL_CONTROLLERDEVICEREMAPPED = $655; // The controller mapping was updated
|
||||||
|
|
||||||
|
{ Touch events }
|
||||||
|
SDL_FINGERDOWN = $700;
|
||||||
|
SDL_FINGERUP = $701;
|
||||||
|
SDL_FINGERMOTION = $702;
|
||||||
|
|
||||||
|
{ Gesture events }
|
||||||
|
SDL_DOLLARGESTURE = $800;
|
||||||
|
SDL_DOLLARRECORD = $801;
|
||||||
|
SDL_MULTIGESTURE = $802;
|
||||||
|
|
||||||
|
{ Clipboard events }
|
||||||
|
SDL_CLIPBOARDUPDATE = $900; // The clipboard changed
|
||||||
|
|
||||||
|
{ Drag and drop events }
|
||||||
|
SDL_DROPFILE = $1000; // The system requests a file open
|
||||||
|
SDL_DROPTEXT = $1001; // text/plain drag-and-drop event
|
||||||
|
SDL_DROPBEGIN = $1002; // A new set of drops is beginning (NULL filename)
|
||||||
|
SDL_DROPCOMPLETE = $1003; // Current set of drops is now complete (NULL filename)
|
||||||
|
|
||||||
|
{ Audio hotplug events }
|
||||||
|
SDL_AUDIODEVICEADDED = $1100; // A new audio device is available
|
||||||
|
SDL_AUDIODEVICEREMOVED = $1101; // An audio device has been removed.
|
||||||
|
|
||||||
|
{ Render events }
|
||||||
|
SDL_RENDER_TARGETS_RESET = $2000; // The render targets have been reset
|
||||||
|
SDL_RENDER_DEVICE_RESET = $2001; // The device has been reset and all textures need to be recreated
|
||||||
|
|
||||||
|
{** Events SDL_USEREVENT through SDL_LASTEVENT are for your use,
|
||||||
|
* and should be allocated with SDL_RegisterEvents()
|
||||||
|
*}
|
||||||
|
SDL_USEREVENT = $8000;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* This last event is only for bounding internal arrays (needed in pascal ??)
|
||||||
|
*}
|
||||||
|
SDL_LASTEVENT = $FFFF;
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
|
TSDL_EventType = Word;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Fields shared by every event
|
||||||
|
*}
|
||||||
|
|
||||||
|
TSDL_CommonEvent = record
|
||||||
|
type_: UInt32;
|
||||||
|
timestamp: UInt32;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Window state change event data (event.window.*)
|
||||||
|
*}
|
||||||
|
|
||||||
|
TSDL_WindowEvent = record
|
||||||
|
type_: UInt32; // SDL_WINDOWEVENT
|
||||||
|
timestamp: UInt32;
|
||||||
|
windowID: UInt32; // The associated window
|
||||||
|
event: UInt8; // SDL_WindowEventID
|
||||||
|
padding1: UInt8;
|
||||||
|
padding2: UInt8;
|
||||||
|
padding3: UInt8;
|
||||||
|
data1: SInt32; // event dependent data
|
||||||
|
data2: SInt32; // event dependent data
|
||||||
|
end;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Keyboard button event structure (event.key.*)
|
||||||
|
*}
|
||||||
|
TSDL_KeyboardEvent = record
|
||||||
|
type_: UInt32; // SDL_KEYDOWN or SDL_KEYUP
|
||||||
|
timestamp: UInt32;
|
||||||
|
windowID: UInt32; // The window with keyboard focus, if any
|
||||||
|
state: UInt8; // SDL_PRESSED or SDL_RELEASED
|
||||||
|
_repeat: UInt8; // Non-zero if this is a key repeat
|
||||||
|
padding2: UInt8;
|
||||||
|
padding3: UInt8;
|
||||||
|
keysym: TSDL_KeySym; // The key that was pressed or released
|
||||||
|
end;
|
||||||
|
|
||||||
|
const
|
||||||
|
SDL_TEXTEDITINGEVENT_TEXT_SIZE = 32;
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Keyboard text editing event structure (event.edit.*)
|
||||||
|
*}
|
||||||
|
|
||||||
|
TSDL_TextEditingEvent = record
|
||||||
|
type_: UInt32; // SDL_TEXTEDITING
|
||||||
|
timestamp: UInt32;
|
||||||
|
windowID: UInt32; // The window with keyboard focus, if any
|
||||||
|
text: array[0..SDL_TEXTEDITINGEVENT_TEXT_SIZE] of Char; // The editing text
|
||||||
|
start: SInt32; // The start cursor of selected editing text
|
||||||
|
length: SInt32; // The length of selected editing text
|
||||||
|
end;
|
||||||
|
|
||||||
|
const
|
||||||
|
SDL_TEXTINPUTEVENT_TEXT_SIZE = 32;
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Keyboard text input event structure (event.text.*)
|
||||||
|
*}
|
||||||
|
|
||||||
|
TSDL_TextInputEvent = record
|
||||||
|
type_: UInt32; // SDL_TEXTINPUT
|
||||||
|
timestamp: UInt32;
|
||||||
|
windowID: UInt32; // The window with keyboard focus, if any
|
||||||
|
text: array[0..SDL_TEXTINPUTEVENT_TEXT_SIZE] of Char; // The input text
|
||||||
|
end;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Mouse motion event structure (event.motion.*)
|
||||||
|
*}
|
||||||
|
|
||||||
|
TSDL_MouseMotionEvent = record
|
||||||
|
type_: UInt32; // SDL_MOUSEMOTION
|
||||||
|
timestamp: UInt32;
|
||||||
|
windowID: UInt32; // The window with mouse focus, if any
|
||||||
|
which: UInt32; // The mouse instance id, or SDL_TOUCH_MOUSEID
|
||||||
|
state: UInt8; // The current button state
|
||||||
|
padding1: UInt8;
|
||||||
|
padding2: UInt8;
|
||||||
|
padding3: UInt8;
|
||||||
|
x: SInt32; // X coordinate, relative to window
|
||||||
|
y: SInt32; // Y coordinate, relative to window
|
||||||
|
xrel: SInt32; // The relative motion in the X direction
|
||||||
|
yrel: SInt32; // The relative motion in the Y direction
|
||||||
|
end;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Mouse button event structure (event.button.*)
|
||||||
|
*}
|
||||||
|
|
||||||
|
TSDL_MouseButtonEvent = record
|
||||||
|
type_: UInt32; // SDL_MOUSEBUTTONDOWN or SDL_MOUSEBUTTONUP
|
||||||
|
timestamp: UInt32;
|
||||||
|
windowID: UInt32; // The window with mouse focus, if any
|
||||||
|
which: UInt32; // The mouse instance id, or SDL_TOUCH_MOUSEID
|
||||||
|
button: UInt8; // The mouse button index
|
||||||
|
state: UInt8; // SDL_PRESSED or SDL_RELEASED
|
||||||
|
clicks: UInt8; // 1 for single-click, 2 for double-click, etc.
|
||||||
|
padding1: UInt8;
|
||||||
|
x: SInt32; // X coordinate, relative to window
|
||||||
|
y: SInt32; // Y coordinate, relative to window
|
||||||
|
end;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Mouse wheel event structure (event.wheel.*)
|
||||||
|
*}
|
||||||
|
|
||||||
|
TSDL_MouseWheelEvent = record
|
||||||
|
type_: UInt32; // SDL_MOUSEWHEEL
|
||||||
|
timestamp: UInt32;
|
||||||
|
windowID: UInt32; // The window with mouse focus, if any
|
||||||
|
which: UInt32; // The mouse instance id, or SDL_TOUCH_MOUSEID
|
||||||
|
x: SInt32; // The amount scrolled horizontally
|
||||||
|
y: SInt32; // The amount scrolled vertically
|
||||||
|
direction: UInt32; // Set to one of the SDL_MOUSEWHEEL_* defines. When FLIPPED the values in X and Y will be opposite. Multiply by -1 to change them back
|
||||||
|
end;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Joystick axis motion event structure (event.jaxis.*)
|
||||||
|
*}
|
||||||
|
|
||||||
|
TSDL_JoyAxisEvent = record
|
||||||
|
type_: UInt32; // SDL_JOYAXISMOTION
|
||||||
|
timestamp: UInt32;
|
||||||
|
which: TSDL_JoystickID; // The joystick instance id
|
||||||
|
axis: UInt8; // The joystick axis index
|
||||||
|
padding1: UInt8;
|
||||||
|
padding2: UInt8;
|
||||||
|
padding3: UInt8;
|
||||||
|
value: SInt16; // The axis value (range: -32768 to 32767)
|
||||||
|
padding4: UInt16;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Joystick trackball motion event structure (event.jball.*)
|
||||||
|
*}
|
||||||
|
|
||||||
|
TSDL_JoyBallEvent = record
|
||||||
|
type_: UInt32; // SDL_JOYBALLMOTION
|
||||||
|
timestamp: UInt32;
|
||||||
|
which: TSDL_JoystickID; // The joystick instance id
|
||||||
|
ball: UInt8; // The joystick trackball index
|
||||||
|
padding1: UInt8;
|
||||||
|
padding2: UInt8;
|
||||||
|
padding3: UInt8;
|
||||||
|
xrel: SInt16; // The relative motion in the X direction
|
||||||
|
yrel: SInt16; // The relative motion in the Y direction
|
||||||
|
end;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Joystick hat position change event structure (event.jhat.*)
|
||||||
|
*}
|
||||||
|
|
||||||
|
TSDL_JoyHatEvent = record
|
||||||
|
type_: UInt32; // SDL_JOYHATMOTION
|
||||||
|
timestamp: UInt32;
|
||||||
|
which: TSDL_JoystickID; // The joystick instance id
|
||||||
|
hat: UInt8; // The joystick hat index
|
||||||
|
value: UInt8; {* The hat position value.
|
||||||
|
* SDL_HAT_LEFTUP SDL_HAT_UP SDL_HAT_RIGHTUP
|
||||||
|
* SDL_HAT_LEFT SDL_HAT_CENTERED SDL_HAT_RIGHT
|
||||||
|
* SDL_HAT_LEFTDOWN SDL_HAT_DOWN SDL_HAT_RIGHTDOWN
|
||||||
|
*
|
||||||
|
* Note that zero means the POV is centered.
|
||||||
|
*}
|
||||||
|
padding1: UInt8;
|
||||||
|
padding2: UInt8;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Joystick button event structure (event.jbutton.*)
|
||||||
|
*}
|
||||||
|
|
||||||
|
TSDL_JoyButtonEvent = record
|
||||||
|
type_: UInt32; // SDL_JOYBUTTONDOWN or SDL_JOYBUTTONUP
|
||||||
|
timestamp: UInt32;
|
||||||
|
which: TSDL_JoystickID; // The joystick instance id
|
||||||
|
button: UInt8; // The joystick button index
|
||||||
|
state: UInt8; // SDL_PRESSED or SDL_RELEASED
|
||||||
|
padding1: UInt8;
|
||||||
|
padding2: UInt8;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Joystick device event structure (event.jdevice.*)
|
||||||
|
*}
|
||||||
|
|
||||||
|
TSDL_JoyDeviceEvent = record
|
||||||
|
type_: UInt32; // SDL_JOYDEVICEADDED or SDL_JOYDEVICEREMOVED
|
||||||
|
timestamp: UInt32;
|
||||||
|
which: SInt32; // The joystick device index for the ADDED event, instance id for the REMOVED event
|
||||||
|
end;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Game controller axis motion event structure (event.caxis.*)
|
||||||
|
*}
|
||||||
|
|
||||||
|
TSDL_ControllerAxisEvent = record
|
||||||
|
type_: UInt32; // SDL_CONTROLLERAXISMOTION
|
||||||
|
timestamp: UInt32;
|
||||||
|
which: TSDL_JoystickID; // The joystick instance id
|
||||||
|
axis: UInt8; // The controller axis (SDL_GameControllerAxis)
|
||||||
|
padding1: UInt8;
|
||||||
|
padding2: UInt8;
|
||||||
|
padding3: UInt8;
|
||||||
|
value: SInt16; // The axis value (range: -32768 to 32767)
|
||||||
|
padding4: UInt16;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Game controller button event structure (event.cbutton.*)
|
||||||
|
*}
|
||||||
|
|
||||||
|
TSDL_ControllerButtonEvent = record
|
||||||
|
type_: UInt32; // SDL_CONTROLLERBUTTONDOWN or SDL_CONTROLLERBUTTONUP
|
||||||
|
timestamp: UInt32;
|
||||||
|
which: TSDL_JoystickID; // The joystick instance id
|
||||||
|
button: UInt8; // The controller button (SDL_GameControllerButton)
|
||||||
|
state: UInt8; // SDL_PRESSED or SDL_RELEASED
|
||||||
|
padding1: UInt8;
|
||||||
|
padding2: UInt8;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Controller device event structure (event.cdevice.*)
|
||||||
|
*}
|
||||||
|
|
||||||
|
TSDL_ControllerDeviceEvent = record
|
||||||
|
type_: UInt32; // SDL_CONTROLLERDEVICEADDED, SDL_CONTROLLERDEVICEREMOVED, or SDL_CONTROLLERDEVICEREMAPPED
|
||||||
|
timestamp: UInt32;
|
||||||
|
which: SInt32; // The joystick device index for the ADDED event, instance id for the REMOVED or REMAPPED event
|
||||||
|
end;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Audio device event structure (event.adevice.*)
|
||||||
|
*}
|
||||||
|
|
||||||
|
TSDL_AudioDeviceEvent = record
|
||||||
|
type_: UInt32; // ::SDL_AUDIODEVICEADDED, or ::SDL_AUDIODEVICEREMOVED
|
||||||
|
timestamp: UInt32;
|
||||||
|
which: UInt32; // The audio device index for the ADDED event (valid until next SDL_GetNumAudioDevices() call), SDL_AudioDeviceID for the REMOVED event
|
||||||
|
iscapture: UInt8; // zero if an output device, non-zero if a capture device.
|
||||||
|
padding1: UInt8;
|
||||||
|
padding2: UInt8;
|
||||||
|
padding3: UInt8;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Touch finger event structure (event.tfinger.*)
|
||||||
|
*}
|
||||||
|
|
||||||
|
TSDL_TouchFingerEvent = record
|
||||||
|
type_: UInt32; // SDL_FINGERMOTION or SDL_FINGERDOWN or SDL_FINGERUP
|
||||||
|
timestamp: UInt32;
|
||||||
|
touchId: TSDL_TouchID; // The touch device id
|
||||||
|
fingerId: TSDL_FingerID;
|
||||||
|
x: Float; // Normalized in the range 0...1
|
||||||
|
y: Float; // Normalized in the range 0...1
|
||||||
|
dx: Float; // Normalized in the range 0...1
|
||||||
|
dy: Float; // Normalized in the range 0...1
|
||||||
|
pressure: Float; // Normalized in the range 0...1
|
||||||
|
end;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Multiple Finger Gesture Event (event.mgesture.*)
|
||||||
|
*}
|
||||||
|
TSDL_MultiGestureEvent = record
|
||||||
|
type_: UInt32; // SDL_MULTIGESTURE
|
||||||
|
timestamp: UInt32;
|
||||||
|
touchId: TSDL_TouchID; // The touch device index
|
||||||
|
dTheta: Float;
|
||||||
|
dDist: Float;
|
||||||
|
x: Float;
|
||||||
|
y: Float;
|
||||||
|
numFingers: UInt16;
|
||||||
|
padding: UInt16;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{* (event.dgesture.*) *}
|
||||||
|
TSDL_DollarGestureEvent = record
|
||||||
|
type_: UInt32; // SDL_DOLLARGESTURE
|
||||||
|
timestamp: UInt32;
|
||||||
|
touchId: TSDL_TouchID; // The touch device id
|
||||||
|
gestureId: TSDL_GestureID;
|
||||||
|
numFingers: UInt32;
|
||||||
|
error: Float;
|
||||||
|
x: Float; // Normalized center of gesture
|
||||||
|
y: Float; // Normalized center of gesture
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{**
|
||||||
|
* An event used to request a file open by the system (event.drop.*)
|
||||||
|
* This event is disabled by default, you can enable it with SDL_EventState()
|
||||||
|
* If you enable this event, you must free the filename in the event.
|
||||||
|
*}
|
||||||
|
|
||||||
|
TSDL_DropEvent = record
|
||||||
|
type_: UInt32; // SDL_DROPFILE
|
||||||
|
timestamp: UInt32;
|
||||||
|
_file: PAnsiChar; // The file name, which should be freed with SDL_free()
|
||||||
|
end;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* The "quit requested" event
|
||||||
|
*}
|
||||||
|
|
||||||
|
TSDL_QuitEvent = record
|
||||||
|
type_: UInt32; // SDL_QUIT
|
||||||
|
timestamp: UInt32;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* A user-defined event type (event.user.*)
|
||||||
|
*}
|
||||||
|
|
||||||
|
TSDL_UserEvent = record
|
||||||
|
type_: UInt32; // SDL_USEREVENT through SDL_NUMEVENTS-1
|
||||||
|
timestamp: UInt32;
|
||||||
|
windowID: UInt32; // The associated window if any
|
||||||
|
code: SInt32; // User defined event code
|
||||||
|
data1: Pointer; // User defined data pointer
|
||||||
|
data2: Pointer; // User defined data pointer
|
||||||
|
end;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* A video driver dependent system event (event.syswm.*)
|
||||||
|
* This event is disabled by default, you can enable it with SDL_EventState()
|
||||||
|
*
|
||||||
|
* If you want to use this event, you should include SDL_syswm.h.
|
||||||
|
*}
|
||||||
|
|
||||||
|
PSDL_SysWMEvent = ^TSDL_SysWMEvent;
|
||||||
|
TSDL_SysWMEvent = record
|
||||||
|
type_: UInt32; // SDL_SYSWMEVENT
|
||||||
|
timestamp: UInt32;
|
||||||
|
msg: PSDL_SysWMmsg; // driver dependent data (defined in SDL_syswm.h)
|
||||||
|
end;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* General event structure
|
||||||
|
*}
|
||||||
|
|
||||||
|
PSDL_Event = ^TSDL_Event;
|
||||||
|
TSDL_Event = record
|
||||||
|
case Integer of
|
||||||
|
0: (type_: UInt32);
|
||||||
|
|
||||||
|
SDL_COMMONEVENT: (common: TSDL_CommonEvent);
|
||||||
|
SDL_WINDOWEVENT: (window: TSDL_WindowEvent);
|
||||||
|
|
||||||
|
SDL_KEYUP,
|
||||||
|
SDL_KEYDOWN: (key: TSDL_KeyboardEvent);
|
||||||
|
SDL_TEXTEDITING: (edit: TSDL_TextEditingEvent);
|
||||||
|
SDL_TEXTINPUT: (text: TSDL_TextInputEvent);
|
||||||
|
|
||||||
|
SDL_MOUSEMOTION: (motion: TSDL_MouseMotionEvent);
|
||||||
|
SDL_MOUSEBUTTONUP,
|
||||||
|
SDL_MOUSEBUTTONDOWN: (button: TSDL_MouseButtonEvent);
|
||||||
|
SDL_MOUSEWHEEL: (wheel: TSDL_MouseWheelEvent);
|
||||||
|
|
||||||
|
SDL_JOYAXISMOTION: (jaxis: TSDL_JoyAxisEvent);
|
||||||
|
SDL_JOYBALLMOTION: (jball: TSDL_JoyBallEvent);
|
||||||
|
SDL_JOYHATMOTION: (jhat: TSDL_JoyHatEvent);
|
||||||
|
SDL_JOYBUTTONDOWN,
|
||||||
|
SDL_JOYBUTTONUP: (jbutton: TSDL_JoyButtonEvent);
|
||||||
|
SDL_JOYDEVICEADDED,
|
||||||
|
SDL_JOYDEVICEREMOVED: (jdevice: TSDL_JoyDeviceEvent);
|
||||||
|
|
||||||
|
SDL_CONTROLLERAXISMOTION: (caxis: TSDL_ControllerAxisEvent);
|
||||||
|
SDL_CONTROLLERBUTTONUP,
|
||||||
|
SDL_CONTROLLERBUTTONDOWN: (cbutton: TSDL_ControllerButtonEvent);
|
||||||
|
SDL_CONTROLLERDEVICEADDED,
|
||||||
|
SDL_CONTROLLERDEVICEREMOVED,
|
||||||
|
SDL_CONTROLLERDEVICEREMAPPED: (cdevice: TSDL_ControllerDeviceEvent);
|
||||||
|
|
||||||
|
SDL_AUDIODEVICEADDED,
|
||||||
|
SDL_AUDIODEVICEREMOVED: (adevice: TSDL_AudioDeviceEvent);
|
||||||
|
|
||||||
|
SDL_QUITEV: (quit: TSDL_QuitEvent);
|
||||||
|
|
||||||
|
SDL_USEREVENT: (user: TSDL_UserEvent);
|
||||||
|
SDL_SYSWMEVENT: (syswm: TSDL_SysWMEvent);
|
||||||
|
|
||||||
|
SDL_FINGERDOWN,
|
||||||
|
SDL_FINGERUP,
|
||||||
|
SDL_FINGERMOTION: (tfinger: TSDL_TouchFingerEvent);
|
||||||
|
SDL_MULTIGESTURE: (mgesture: TSDL_MultiGestureEvent);
|
||||||
|
SDL_DOLLARGESTURE,SDL_DOLLARRECORD: (dgesture: TSDL_DollarGestureEvent);
|
||||||
|
|
||||||
|
SDL_DROPFILE: (drop: TSDL_DropEvent);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{* Function prototypes *}
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Pumps the event loop, gathering events from the input devices.
|
||||||
|
*
|
||||||
|
* This function updates the event queue and internal input device state.
|
||||||
|
*
|
||||||
|
* This should only be run in the thread that sets the video mode.
|
||||||
|
*}
|
||||||
|
procedure SDL_PumpEvents cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_PumpEvents' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
const
|
||||||
|
SDL_ADDEVENT = 0;
|
||||||
|
SDL_PEEKEVENT = 1;
|
||||||
|
SDL_GETEVENT = 2;
|
||||||
|
|
||||||
|
type
|
||||||
|
TSDL_EventAction = Word;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Checks the event queue for messages and optionally returns them.
|
||||||
|
*
|
||||||
|
* If action is SDL_ADDEVENT, up to numevents events will be added to
|
||||||
|
* the back of the event queue.
|
||||||
|
*
|
||||||
|
* If action is SDL_PEEKEVENT, up to numevents events at the front
|
||||||
|
* of the event queue, within the specified minimum and maximum type,
|
||||||
|
* will be returned and will not be removed from the queue.
|
||||||
|
*
|
||||||
|
* If action is SDL_GETEVENT, up to numevents events at the front
|
||||||
|
* of the event queue, within the specified minimum and maximum type,
|
||||||
|
* will be returned and will be removed from the queue.
|
||||||
|
*
|
||||||
|
* Result: The number of events actually stored, or -1 if there was an error.
|
||||||
|
*
|
||||||
|
* This function is thread-safe.
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_PeepEvents(events: PSDL_Event; numevents: SInt32; action: TSDL_EventAction; minType: UInt32; maxType: UInt32): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_PeepEvents' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Checks to see if certain event types are in the event queue.
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_HasEvent(type_: UInt32): TSDL_Bool cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_HasEvent' {$ENDIF} {$ENDIF};
|
||||||
|
function SDL_HasEvents(minType: UInt32; maxType: UInt32): TSDL_Bool cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_HasEvents' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* This function clears events from the event queue
|
||||||
|
*}
|
||||||
|
|
||||||
|
procedure SDL_FlushEvent(type_: UInt32) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_FlushEvent' {$ENDIF} {$ENDIF};
|
||||||
|
procedure SDL_FlushEvents(minType: UInt32; maxType: UInt32) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_FlushEvents' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Polls for currently pending events.
|
||||||
|
*
|
||||||
|
* 1 if there are any pending events, or 0 if there are none available.
|
||||||
|
*
|
||||||
|
* event - If not nil, the next event is removed from the queue and
|
||||||
|
* stored in that area.
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_PollEvent(event: PSDL_Event): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_PollEvent' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Waits indefinitely for the next available event.
|
||||||
|
*
|
||||||
|
* 1, or 0 if there was an error while waiting for events.
|
||||||
|
*
|
||||||
|
* event - If not nil, the next event is removed from the queue and
|
||||||
|
* stored in that area.
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_WaitEvent(event: PSDL_Event): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_WaitEvent' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Waits until the specified timeout (in milliseconds) for the next
|
||||||
|
* available event.
|
||||||
|
*
|
||||||
|
* 1, or 0 if there was an error while waiting for events.
|
||||||
|
*
|
||||||
|
* event - If not nil, the next event is removed from the queue and
|
||||||
|
* stored in that area.
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_WaitEventTimeout(event: PSDL_Event; timeout: SInt32): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_WaitEventTimeout' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Add an event to the event queue.
|
||||||
|
*
|
||||||
|
* 1 on success, 0 if the event was filtered, or -1 if the event queue
|
||||||
|
* was full or there was some other error.
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_PushEvent(event: PSDL_Event): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_PumpEvents' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
type
|
||||||
|
PSDL_EventFilter = ^TSDL_EventFilter;
|
||||||
|
{$IFNDEF GPC}
|
||||||
|
TSDL_EventFilter = function( userdata: Pointer; event: PSDL_Event ): Integer; cdecl;
|
||||||
|
{$ELSE}
|
||||||
|
TSDL_EventFilter = function( userdata: Pointer; event: PSDL_Event ): Integer;
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Sets up a filter to process all events before they change internal state and
|
||||||
|
* are posted to the internal event queue.
|
||||||
|
*
|
||||||
|
* If the filter returns 1, then the event will be added to the internal queue.
|
||||||
|
* If it returns 0, then the event will be dropped from the queue, but the
|
||||||
|
* internal state will still be updated. This allows selective filtering of
|
||||||
|
* dynamically arriving events.
|
||||||
|
*
|
||||||
|
* Be very careful of what you do in the event filter function, as
|
||||||
|
* it may run in a different thread!
|
||||||
|
*
|
||||||
|
* There is one caveat when dealing with the SDL_QUITEVENT event type. The
|
||||||
|
* event filter is only called when the window manager desires to close the
|
||||||
|
* application window. If the event filter returns 1, then the window will
|
||||||
|
* be closed, otherwise the window will remain open if possible.
|
||||||
|
*
|
||||||
|
* If the quit event is generated by an interrupt signal, it will bypass the
|
||||||
|
* internal queue and be delivered to the application at the next event poll.
|
||||||
|
*}
|
||||||
|
|
||||||
|
procedure SDL_SetEventFilter(filter: TSDL_EventFilter; userdata: Pointer) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_SetEventFilter' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Return the current event filter - can be used to "chain" filters.
|
||||||
|
* If there is no event filter set, this function returns SDL_FALSE.
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_GetEventFilter(var filter: PSDL_EventFilter; var userdata: PPointer): TSDL_Bool cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetEventFilter' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Add a function which is called when an event is added to the queue.
|
||||||
|
*}
|
||||||
|
|
||||||
|
procedure SDL_AddEventWatch(filter: TSDL_EventFilter; userdata: Pointer) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_AddEventWatch' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Remove an event watch function added with SDL_AddEventWatch()
|
||||||
|
*}
|
||||||
|
|
||||||
|
procedure SDL_DelEventWatch(filter: TSDL_EventFilter; userdata: Pointer) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_DelEventWatch' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Run the filter function on the current event queue, removing any
|
||||||
|
* events for which the filter returns 0.
|
||||||
|
*}
|
||||||
|
|
||||||
|
procedure SDL_FilterEvents(filter: TSDL_EventFilter; userdata: Pointer) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_FilterEvents' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
const
|
||||||
|
|
||||||
|
SDL_QUERY = -1;
|
||||||
|
SDL_IGNORE = 0;
|
||||||
|
SDL_DISABLE = 0;
|
||||||
|
SDL_ENABLE = 1;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* This function allows you to set the state of processing certain events.
|
||||||
|
* - If state is set to SDL_IGNORE, that event will be automatically
|
||||||
|
* dropped from the event queue and will not event be filtered.
|
||||||
|
* - If state is set to SDL_ENABLE, that event will be processed
|
||||||
|
* normally.
|
||||||
|
* - If state is set to SDL_QUERY, SDL_EventState() will return the
|
||||||
|
* current processing state of the specified event.
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_EventState(type_: UInt32; state: SInt32): UInt8 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_EventState' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
function SDL_GetEventState(type_: UInt32): UInt8;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* This function allocates a set of user-defined events, and returns
|
||||||
|
* the beginning event number for that set of events.
|
||||||
|
*
|
||||||
|
* If there aren't enough user-defined events left, this function
|
||||||
|
* returns (Uint32)-1
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_RegisterEvents(numevents: SInt32): UInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_RegisterEvents' {$ENDIF} {$ENDIF};
|
88
model_viewer/sdl2/sdlfilesystem.inc
Normal file
88
model_viewer/sdl2/sdlfilesystem.inc
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
|
||||||
|
{**
|
||||||
|
* \brief Get the path where the application resides.
|
||||||
|
*
|
||||||
|
* Get the "base path". This is the directory where the application was run
|
||||||
|
* from, which is probably the installation directory, and may or may not
|
||||||
|
* be the process's current working directory.
|
||||||
|
*
|
||||||
|
* This returns an absolute path in UTF-8 encoding, and is guaranteed to
|
||||||
|
* end with a path separator ('\\' on Windows, '/' most other places).
|
||||||
|
*
|
||||||
|
* The pointer returned by this function is owned by you. Please call
|
||||||
|
* SDL_free() on the pointer when you are done with it, or it will be a
|
||||||
|
* memory leak. This is not necessarily a fast call, though, so you should
|
||||||
|
* call this once near startup and save the string if you need it.
|
||||||
|
*
|
||||||
|
* Some platforms can't determine the application's path, and on other
|
||||||
|
* platforms, this might be meaningless. In such cases, this function will
|
||||||
|
* return NULL.
|
||||||
|
*
|
||||||
|
* \return String of base dir in UTF-8 encoding, or NULL on error.
|
||||||
|
*
|
||||||
|
* \sa SDL_GetPrefPath
|
||||||
|
*}
|
||||||
|
function SDL_GetBasePath(): PChar cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetBasePath' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief Get the user-and-app-specific path where files can be written.
|
||||||
|
*
|
||||||
|
* Get the "pref dir". This is meant to be where users can write personal
|
||||||
|
* files (preferences and save games, etc) that are specific to your
|
||||||
|
* application. This directory is unique per user, per application.
|
||||||
|
*
|
||||||
|
* This function will decide the appropriate location in the native filesystem,
|
||||||
|
* create the directory if necessary, and return a string of the absolute
|
||||||
|
* path to the directory in UTF-8 encoding.
|
||||||
|
*
|
||||||
|
* On Windows, the string might look like:
|
||||||
|
* "C:\\Users\\bob\\AppData\\Roaming\\My Company\\My Program Name\\"
|
||||||
|
*
|
||||||
|
* On Linux, the string might look like:
|
||||||
|
* "/home/bob/.local/share/My Program Name/"
|
||||||
|
*
|
||||||
|
* On Mac OS X, the string might look like:
|
||||||
|
* "/Users/bob/Library/Application Support/My Program Name/"
|
||||||
|
*
|
||||||
|
* (etc.)
|
||||||
|
*
|
||||||
|
* You specify the name of your organization (if it's not a real organization,
|
||||||
|
* your name or an Internet domain you own might do) and the name of your
|
||||||
|
* application. These should be untranslated proper names.
|
||||||
|
*
|
||||||
|
* Both the org and app strings may become part of a directory name, so
|
||||||
|
* please follow these rules:
|
||||||
|
*
|
||||||
|
* - Try to use the same org string (including case-sensitivity) for
|
||||||
|
* all your applications that use this function.
|
||||||
|
* - Always use a unique app string for each one, and make sure it never
|
||||||
|
* changes for an app once you've decided on it.
|
||||||
|
* - Unicode characters are legal, as long as it's UTF-8 encoded, but...
|
||||||
|
* - ...only use letters, numbers, and spaces. Avoid punctuation like
|
||||||
|
* "Game Name 2: Bad Guy's Revenge!" ... "Game Name 2" is sufficient.
|
||||||
|
*
|
||||||
|
* This returns an absolute path in UTF-8 encoding, and is guaranteed to
|
||||||
|
* end with a path separator ('\\' on Windows, '/' most other places).
|
||||||
|
*
|
||||||
|
* The pointer returned by this function is owned by you. Please call
|
||||||
|
* SDL_free() on the pointer when you are done with it, or it will be a
|
||||||
|
* memory leak. This is not necessarily a fast call, though, so you should
|
||||||
|
* call this once near startup and save the string if you need it.
|
||||||
|
*
|
||||||
|
* You should assume the path returned by this function is the only safe
|
||||||
|
* place to write files (and that SDL_GetBasePath(), while it might be
|
||||||
|
* writable, or even the parent of the returned path, aren't where you
|
||||||
|
* should be writing things).
|
||||||
|
*
|
||||||
|
* Some platforms can't determine the pref path, and on other
|
||||||
|
* platforms, this might be meaningless. In such cases, this function will
|
||||||
|
* return NULL.
|
||||||
|
*
|
||||||
|
* \param org The name of your organization.
|
||||||
|
* \param app The name of your application.
|
||||||
|
* \return UTF-8 string of user dir in platform-dependent notation. NULL
|
||||||
|
* if there's a problem (creating directory failed, etc).
|
||||||
|
*
|
||||||
|
* \sa SDL_GetBasePath
|
||||||
|
*}
|
||||||
|
function SDL_GetPrefPath(const org: PAnsiChar; const app: PAnsiChar): PChar cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetPrefPath' {$ENDIF} {$ENDIF};
|
255
model_viewer/sdl2/sdlgamecontroller.inc
Normal file
255
model_viewer/sdl2/sdlgamecontroller.inc
Normal file
@ -0,0 +1,255 @@
|
|||||||
|
//from sdl_gamecontroller.h
|
||||||
|
|
||||||
|
{**
|
||||||
|
* SDL_gamecontroller.h
|
||||||
|
*
|
||||||
|
* In order to use these functions, SDL_Init() must have been called
|
||||||
|
* with the ::SDL_INIT_JOYSTICK flag. This causes SDL to scan the system
|
||||||
|
* for game controllers, and load appropriate drivers.
|
||||||
|
*
|
||||||
|
* If you would like to receive controller updates while the application
|
||||||
|
* is in the background, you should set the following hint before calling
|
||||||
|
* SDL_Init(): SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS
|
||||||
|
*}
|
||||||
|
|
||||||
|
{* The gamecontroller structure used to identify an SDL game controller *}
|
||||||
|
type
|
||||||
|
PSDL_GameController = ^TSDL_GameController;
|
||||||
|
TSDL_GameController = Pointer; //todo
|
||||||
|
|
||||||
|
TSDL_GameControllerBindType = (SDL_CONTROLLER_BINDTYPE_NONE,
|
||||||
|
SDL_CONTROLLER_BINDTYPE_BUTTON,
|
||||||
|
SDL_CONTROLLER_BINDTYPE_AXIS,
|
||||||
|
SDL_CONTROLLER_BINDTYPE_HAT);
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the SDL joystick layer binding for this controller button/axis mapping
|
||||||
|
*}
|
||||||
|
THat = record
|
||||||
|
hat: Integer;
|
||||||
|
hat_mask: Integer;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TSDL_GameControllerButtonBind = record
|
||||||
|
bindType: TSDL_GameControllerBindType;
|
||||||
|
case Integer of
|
||||||
|
0: ( button: Integer; );
|
||||||
|
1: ( axis: Integer; );
|
||||||
|
2: ( hat: THat; );
|
||||||
|
end;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* To count the number of game controllers in the system for the following:
|
||||||
|
* int nJoysticks = SDL_NumJoysticks();
|
||||||
|
* int nGameControllers = 0;
|
||||||
|
* for ( int i = 0; i < nJoysticks; i++ ) {
|
||||||
|
* if ( SDL_IsGameController(i) ) {
|
||||||
|
* nGameControllers++;
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Using the SDL_HINT_GAMECONTROLLERCONFIG hint or the SDL_GameControllerAddMapping you can add support for controllers SDL is unaware of or cause an existing controller to have a different binding. The format is:
|
||||||
|
* guid,name,mappings
|
||||||
|
*
|
||||||
|
* Where GUID is the string value from SDL_JoystickGetGUIDString(), name is the human readable string for the device and mappings are controller mappings to joystick ones.
|
||||||
|
* Under Windows there is a reserved GUID of "xinput" that covers any XInput devices.
|
||||||
|
* The mapping format for joystick is:
|
||||||
|
* bX - a joystick button, index X
|
||||||
|
* hX.Y - hat X with value Y
|
||||||
|
* aX - axis X of the joystick
|
||||||
|
* Buttons can be used as a controller axis and vice versa.
|
||||||
|
*
|
||||||
|
* This string shows an example of a valid mapping for a controller
|
||||||
|
* "341a3608000000000000504944564944,Afterglow PS3 Controller,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftshoulder:b4,rightshoulder:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7",
|
||||||
|
*
|
||||||
|
*}
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Add or update an existing mapping configuration
|
||||||
|
*
|
||||||
|
* 1 if mapping is added, 0 if updated, -1 on error
|
||||||
|
*}
|
||||||
|
function SDL_GameControllerAddMapping( mappingString: PAnsiChar ): Integer cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GameControllerAddMapping' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Load a set of mappings from a seekable SDL data stream (memory or file), filtered by the current SDL_GetPlatform()
|
||||||
|
* A community sourced database of controllers is available at https://raw.github.com/gabomdq/SDL_GameControllerDB/master/gamecontrollerdb.txt
|
||||||
|
*
|
||||||
|
* If freerw is non-zero, the stream will be closed after being read.
|
||||||
|
*
|
||||||
|
* Returns number of mappings added, -1 on error
|
||||||
|
*}
|
||||||
|
function SDL_GameControllerAddMappingsFromRW(rw: PSDL_RWops; freerw: SInt32):SInt32;
|
||||||
|
cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GameControllerAddMappingsFromRW' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get a mapping string for a GUID
|
||||||
|
*
|
||||||
|
* the mapping string. Must be freed with SDL_free. Returns NULL if no mapping is available
|
||||||
|
*}
|
||||||
|
function SDL_GameControllerMappingForGUID( guid: TSDL_JoystickGUID ): PAnsiChar cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GameControllerMappingForGUID' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get a mapping string for an open GameController
|
||||||
|
*
|
||||||
|
* the mapping string. Must be freed with SDL_free. Returns NULL if no mapping is available
|
||||||
|
*}
|
||||||
|
function SDL_GameControllerMapping( gamecontroller: PSDL_GameController ): PAnsiChar cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GameControllerMapping' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Is the joystick on this index supported by the game controller interface?
|
||||||
|
*}
|
||||||
|
function SDL_IsGameController(joystick_index: Integer): TSDL_Bool cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_IsGameController' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the implementation dependent name of a game controller.
|
||||||
|
* This can be called before any controllers are opened.
|
||||||
|
* If no name can be found, this function returns NULL.
|
||||||
|
*}
|
||||||
|
function SDL_GameControllerNameForIndex(joystick_index: Integer): PAnsiChar cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GameControllerNameForIndex' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Open a game controller for use.
|
||||||
|
* The index passed as an argument refers to the N'th game controller on the system.
|
||||||
|
* This index is the value which will identify this controller in future controller
|
||||||
|
* events.
|
||||||
|
*
|
||||||
|
* A controller identifier, or NULL if an error occurred.
|
||||||
|
*}
|
||||||
|
function SDL_GameControllerOpen(joystick_index: Integer): PSDL_GameController cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GameControllerOpen' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Return the SDL_GameController associated with an instance id.
|
||||||
|
*}
|
||||||
|
function SDL_GameControllerFromInstanceID(joyid: TSDL_JoystickID): PSDL_GameController; cdecl;
|
||||||
|
external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GameControllerFromInstanceID' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Return the name for this currently opened controller
|
||||||
|
*}
|
||||||
|
function SDL_GameControllerName(gamecontroller: PSDL_GameController): PAnsiChar cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GameControllerName' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Returns SDL_TRUE if the controller has been opened and currently connected,
|
||||||
|
* or SDL_FALSE if it has not.
|
||||||
|
*}
|
||||||
|
function SDL_GameControllerGetAttached(gamecontroller: PSDL_GameController): TSDL_Bool cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GameControllerGetAttached' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the underlying joystick object used by a controller
|
||||||
|
*}
|
||||||
|
function SDL_GameControllerGetJoystick(gamecontroller: PSDL_GameController): PSDL_Joystick cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GameControllerGetJoystick' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Enable/disable controller event polling.
|
||||||
|
*
|
||||||
|
* If controller events are disabled, you must call SDL_GameControllerUpdate()
|
||||||
|
* yourself and check the state of the controller when you want controller
|
||||||
|
* information.
|
||||||
|
*
|
||||||
|
* The state can be one of ::SDL_QUERY, ::SDL_ENABLE or ::SDL_IGNORE.
|
||||||
|
*}
|
||||||
|
function SDL_GameControllerEventState(state: Integer): Integer cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GameControllerEventState' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Update the current state of the open game controllers.
|
||||||
|
*
|
||||||
|
* This is called automatically by the event loop if any game controller
|
||||||
|
* events are enabled.
|
||||||
|
*}
|
||||||
|
procedure SDL_GameControllerUpdate() cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GameControllerUpdate' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* The list of axes available from a controller
|
||||||
|
*}
|
||||||
|
|
||||||
|
const
|
||||||
|
SDL_CONTROLLER_AXIS_INVALID = -1;
|
||||||
|
SDL_CONTROLLER_AXIS_LEFTX = 0;
|
||||||
|
SDL_CONTROLLER_AXIS_LEFTY = 1;
|
||||||
|
SDL_CONTROLLER_AXIS_RIGHTX = 2;
|
||||||
|
SDL_CONTROLLER_AXIS_RIGHTY = 3;
|
||||||
|
SDL_CONTROLLER_AXIS_TRIGGERLEFT = 4;
|
||||||
|
SDL_CONTROLLER_AXIS_TRIGGERRIGHT = 5;
|
||||||
|
SDL_CONTROLLER_AXIS_MAX = 6;
|
||||||
|
type
|
||||||
|
TSDL_GameControllerAxis = Byte;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* turn this string into a axis mapping
|
||||||
|
*}
|
||||||
|
function SDL_GameControllerGetAxisFromString(pchString: PAnsiChar): TSDL_GameControllerAxis cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GameControllerGetAxisFromString' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* turn this axis enum into a string mapping
|
||||||
|
*}
|
||||||
|
function SDL_GameControllerGetStringForAxis(axis: TSDL_GameControllerAxis): PAnsiChar cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GameControllerGetStringForAxis' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the SDL joystick layer binding for this controller button mapping
|
||||||
|
*}
|
||||||
|
function SDL_GameControllerGetBindForAxis(gamecontroller: PSDL_GameController; axis: TSDL_GameControllerAxis): TSDL_GameControllerButtonBind cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GameControllerGetBindForAxis' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the current state of an axis control on a game controller.
|
||||||
|
*
|
||||||
|
* The state is a value ranging from -32768 to 32767.
|
||||||
|
*
|
||||||
|
* The axis indices start at index 0.
|
||||||
|
*}
|
||||||
|
function SDL_GameControllerGetAxis(gamecontroller: PSDL_GameController; axis: TSDL_GameControllerAxis): SInt16 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GameControllerGetAxis' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* The list of buttons available from a controller
|
||||||
|
*}
|
||||||
|
const
|
||||||
|
SDL_CONTROLLER_BUTTON_INVALID = -1;
|
||||||
|
SDL_CONTROLLER_BUTTON_A = 0;
|
||||||
|
SDL_CONTROLLER_BUTTON_B = 1;
|
||||||
|
SDL_CONTROLLER_BUTTON_X = 2;
|
||||||
|
SDL_CONTROLLER_BUTTON_Y = 3;
|
||||||
|
SDL_CONTROLLER_BUTTON_BACK = 4;
|
||||||
|
SDL_CONTROLLER_BUTTON_GUIDE = 5;
|
||||||
|
SDL_CONTROLLER_BUTTON_START = 6;
|
||||||
|
SDL_CONTROLLER_BUTTON_LEFTSTICK = 7;
|
||||||
|
SDL_CONTROLLER_BUTTON_RIGHTSTICK = 8;
|
||||||
|
SDL_CONTROLLER_BUTTON_LEFTSHOULDER = 9;
|
||||||
|
SDL_CONTROLLER_BUTTON_RIGHTSHOULDER = 10;
|
||||||
|
SDL_CONTROLLER_BUTTON_DPAD_UP = 11;
|
||||||
|
SDL_CONTROLLER_BUTTON_DPAD_DOWN = 12;
|
||||||
|
SDL_CONTROLLER_BUTTON_DPAD_LEFT = 13;
|
||||||
|
SDL_CONTROLLER_BUTTON_DPAD_RIGHT = 14;
|
||||||
|
SDL_CONTROLLER_BUTTON_MAX = 15;
|
||||||
|
type
|
||||||
|
TSDL_GameControllerButton = Byte;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* turn this string into a button mapping
|
||||||
|
*}
|
||||||
|
function SDL_GameControllerGetButtonFromString(pchString: PAnsiChar): TSDL_GameControllerButton cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GameControllerGetButtonFromString' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* turn this button enum into a string mapping
|
||||||
|
*}
|
||||||
|
function SDL_GameControllerGetStringForButton(button: TSDL_GameControllerButton): PAnsiChar cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GameControllerGetStringForButton' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the SDL joystick layer binding for this controller button mapping
|
||||||
|
*}
|
||||||
|
function SDL_GameControllerGetBindForButton(gamecontroller: PSDL_GameController; button: TSDL_GameControllerButton): TSDL_GameControllerButtonBind cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GameControllerGetBindForButton' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the current state of a button on a game controller.
|
||||||
|
*
|
||||||
|
* The button indices start at index 0.
|
||||||
|
*}
|
||||||
|
function SDL_GameControllerGetButton(gamecontroller: PSDL_GameController; button: TSDL_GameControllerButton): UInt8 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GameControllerGetButton' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Close a controller previously opened with SDL_GameControllerOpen().
|
||||||
|
*}
|
||||||
|
procedure SDL_GameControllerClose(gamecontroller: PSDL_GameController) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GameControllerClose' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
|
||||||
|
function SDL_GameControllerAddMappingsFromFile(Const FilePath:PAnsiChar):SInt32;
|
35
model_viewer/sdl2/sdlgesture.inc
Normal file
35
model_viewer/sdl2/sdlgesture.inc
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
//from "sdl_gesture.h"
|
||||||
|
|
||||||
|
type
|
||||||
|
TSDL_GestureID = SInt64;
|
||||||
|
|
||||||
|
{* Function prototypes *}
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Begin Recording a gesture on the specified touch, or all touches (-1)
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*}
|
||||||
|
function SDL_RecordGesture(touchId: TSDL_TouchID): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_RecordGesture' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Save all currently loaded Dollar Gesture templates
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*}
|
||||||
|
function SDL_SaveAllDollarTemplates(src: PSDL_RWops): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_SaveAllDollarTemplates' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Save a currently loaded Dollar Gesture template
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*}
|
||||||
|
function SDL_SaveDollarTemplate(gestureId: TSDL_GestureID; src: PSDL_RWops): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_SaveDollarTemplate' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Load Dollar Gesture templates from a file
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*}
|
||||||
|
function SDL_LoadDollarTemplates(touchId: TSDL_TouchID; src: PSDL_RWops): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_LoadDollarTemplates' {$ENDIF} {$ENDIF};
|
1157
model_viewer/sdl2/sdlhaptic.inc
Normal file
1157
model_viewer/sdl2/sdlhaptic.inc
Normal file
File diff suppressed because it is too large
Load Diff
671
model_viewer/sdl2/sdlhints.inc
Normal file
671
model_viewer/sdl2/sdlhints.inc
Normal file
@ -0,0 +1,671 @@
|
|||||||
|
{// from "SDL_hints.h"
|
||||||
|
/*
|
||||||
|
Simple DirectMedia Layer
|
||||||
|
Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \file SDL_hints.h
|
||||||
|
*
|
||||||
|
* Official documentation for SDL configuration variables
|
||||||
|
*
|
||||||
|
* This file contains functions to set and get configuration hints,
|
||||||
|
* as well as listing each of them alphabetically.
|
||||||
|
*
|
||||||
|
* The convention for naming hints is SDL_HINT_X, where "SDL_X" is
|
||||||
|
* the environment variable that can be used to override the default.
|
||||||
|
*
|
||||||
|
* In general these hints are just that - they may or may not be
|
||||||
|
* supported or applicable on any given platform, but they provide
|
||||||
|
* a way for an application or user to give the library a hint as
|
||||||
|
* to how they would like the library to work.
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
(**
|
||||||
|
* \brief A variable controlling how 3D acceleration is used to accelerate the SDL screen surface.
|
||||||
|
*
|
||||||
|
* SDL can try to accelerate the SDL screen surface by using streaming
|
||||||
|
* textures with a 3D rendering engine. This variable controls whether and
|
||||||
|
* how this is done.
|
||||||
|
*
|
||||||
|
* This variable can be set to the following values:
|
||||||
|
* "0" - Disable 3D acceleration
|
||||||
|
* "1" - Enable 3D acceleration, using the default renderer.
|
||||||
|
* "X" - Enable 3D acceleration, using X where X is one of the valid rendering drivers. (e.g. "direct3d", "opengl", etc.)
|
||||||
|
*
|
||||||
|
* By default SDL tries to make a best guess for each platform whether
|
||||||
|
* to use acceleration or not.
|
||||||
|
*)
|
||||||
|
const
|
||||||
|
SDL_HINT_FRAMEBUFFER_ACCELERATION = 'SDL_FRAMEBUFFER_ACCELERATION';
|
||||||
|
|
||||||
|
{/**
|
||||||
|
* \brief A variable specifying which render driver to use.
|
||||||
|
*
|
||||||
|
* If the application doesn't pick a specific renderer to use, this variable
|
||||||
|
* specifies the name of the preferred renderer. If the preferred renderer
|
||||||
|
* can't be initialized, the normal default renderer is used.
|
||||||
|
*
|
||||||
|
* This variable is case insensitive and can be set to the following values:
|
||||||
|
* "direct3d"
|
||||||
|
* "opengl"
|
||||||
|
* "opengles2"
|
||||||
|
* "opengles"
|
||||||
|
* "software"
|
||||||
|
*
|
||||||
|
* The default varies by platform, but it's the first one in the list that
|
||||||
|
* is available on the current platform.
|
||||||
|
*/}
|
||||||
|
SDL_HINT_RENDER_DRIVER = 'SDL_RENDER_DRIVER';
|
||||||
|
|
||||||
|
{/**
|
||||||
|
* \brief A variable controlling whether the OpenGL render driver uses shaders if they are available.
|
||||||
|
*
|
||||||
|
* This variable can be set to the following values:
|
||||||
|
* "0" - Disable shaders
|
||||||
|
* "1" - Enable shaders
|
||||||
|
*
|
||||||
|
* By default shaders are used if OpenGL supports them.
|
||||||
|
*/}
|
||||||
|
SDL_HINT_RENDER_OPENGL_SHADERS = 'SDL_RENDER_OPENGL_SHADERS';
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief A variable controlling whether the Direct3D device is initialized for thread-safe operations.
|
||||||
|
*
|
||||||
|
* This variable can be set to the following values:
|
||||||
|
* "0" - Thread-safety is not enabled (faster)
|
||||||
|
* "1" - Thread-safety is enabled
|
||||||
|
*
|
||||||
|
* By default the Direct3D device is created with thread-safety disabled.
|
||||||
|
*}
|
||||||
|
SDL_HINT_RENDER_DIRECT3D_THREADSAFE = 'SDL_RENDER_DIRECT3D_THREADSAFE';
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief A variable controlling whether to enable Direct3D 11+'s Debug Layer.
|
||||||
|
*
|
||||||
|
* This variable does not have any effect on the Direct3D 9 based renderer.
|
||||||
|
*
|
||||||
|
* This variable can be set to the following values:
|
||||||
|
* "0" - Disable Debug Layer use
|
||||||
|
* "1" - Enable Debug Layer use
|
||||||
|
*
|
||||||
|
* By default, SDL does not use Direct3D Debug Layer.
|
||||||
|
*}
|
||||||
|
SDL_HINT_RENDER_DIRECT3D11_DEBUG = 'SDL_HINT_RENDER_DIRECT3D11_DEBUG';
|
||||||
|
|
||||||
|
{/**
|
||||||
|
* \brief A variable controlling the scaling quality
|
||||||
|
*
|
||||||
|
* This variable can be set to the following values:
|
||||||
|
* "0" or "nearest" - Nearest pixel sampling
|
||||||
|
* "1" or "linear" - Linear filtering (supported by OpenGL and Direct3D)
|
||||||
|
* "2" or "best" - Currently this is the same as "linear"
|
||||||
|
*
|
||||||
|
* By default nearest pixel sampling is used
|
||||||
|
*/}
|
||||||
|
SDL_HINT_RENDER_SCALE_QUALITY = 'SDL_RENDER_SCALE_QUALITY';
|
||||||
|
|
||||||
|
{/**
|
||||||
|
* \brief A variable controlling whether updates to the SDL screen surface should be synchronized with the vertical refresh, to avoid tearing.
|
||||||
|
*
|
||||||
|
* This variable can be set to the following values:
|
||||||
|
* "0" - Disable vsync
|
||||||
|
* "1" - Enable vsync
|
||||||
|
*
|
||||||
|
* By default SDL does not sync screen surface updates with vertical refresh.
|
||||||
|
*/}
|
||||||
|
SDL_HINT_RENDER_VSYNC = 'SDL_RENDER_VSYNC';
|
||||||
|
|
||||||
|
{/**
|
||||||
|
* \brief A variable controlling whether the screensaver is enabled.
|
||||||
|
*
|
||||||
|
* This variable can be set to the following values:
|
||||||
|
* "0" - Disable screensaver
|
||||||
|
* "1" - Enable screensaver
|
||||||
|
*
|
||||||
|
* By default SDL will disable the screensaver.
|
||||||
|
*/}
|
||||||
|
SDL_HINT_VIDEO_ALLOW_SCREENSAVER = 'SDL_VIDEO_ALLOW_SCREENSAVER';
|
||||||
|
|
||||||
|
{/**
|
||||||
|
* \brief A variable controlling whether the X11 VidMode extension should be used.
|
||||||
|
*
|
||||||
|
* This variable can be set to the following values:
|
||||||
|
* "0" - Disable XVidMode
|
||||||
|
* "1" - Enable XVidMode
|
||||||
|
*
|
||||||
|
* By default SDL will use XVidMode if it is available.
|
||||||
|
*/}
|
||||||
|
SDL_HINT_VIDEO_X11_XVIDMODE = 'SDL_VIDEO_X11_XVIDMODE';
|
||||||
|
|
||||||
|
{/**
|
||||||
|
* \brief A variable controlling whether the X11 Xinerama extension should be used.
|
||||||
|
*
|
||||||
|
* This variable can be set to the following values:
|
||||||
|
* "0" - Disable Xinerama
|
||||||
|
* "1" - Enable Xinerama
|
||||||
|
*
|
||||||
|
* By default SDL will use Xinerama if it is available.
|
||||||
|
*/}
|
||||||
|
SDL_HINT_VIDEO_X11_XINERAMA = 'SDL_VIDEO_X11_XINERAMA';
|
||||||
|
|
||||||
|
{/**
|
||||||
|
* \brief A variable controlling whether the X11 XRandR extension should be used.
|
||||||
|
*
|
||||||
|
* This variable can be set to the following values:
|
||||||
|
* "0" - Disable XRandR
|
||||||
|
* "1" - Enable XRandR
|
||||||
|
*
|
||||||
|
* By default SDL will not use XRandR because of window manager issues.
|
||||||
|
*/}
|
||||||
|
SDL_HINT_VIDEO_X11_XRANDR = 'SDL_VIDEO_X11_XRANDR';
|
||||||
|
|
||||||
|
{/**
|
||||||
|
* \brief A variable controlling whether grabbing input grabs the keyboard
|
||||||
|
*
|
||||||
|
* This variable can be set to the following values:
|
||||||
|
* "0" - Grab will affect only the mouse
|
||||||
|
* "1" - Grab will affect mouse and keyboard
|
||||||
|
*
|
||||||
|
* By default SDL will not grab the keyboard so system shortcuts still work.
|
||||||
|
*/}
|
||||||
|
SDL_HINT_GRAB_KEYBOARD = 'SDL_GRAB_KEYBOARD';
|
||||||
|
|
||||||
|
{/**
|
||||||
|
* \brief A variable controlling whether relative mouse mode is implemented using mouse warping
|
||||||
|
*
|
||||||
|
* This variable can be set to the following values:
|
||||||
|
* "0" - Relative mouse mode uses raw input
|
||||||
|
* "1" - Relative mouse mode uses mouse warping
|
||||||
|
*
|
||||||
|
* By default SDL will use raw input for relative mouse mode
|
||||||
|
*/}
|
||||||
|
SDL_HINT_MOUSE_RELATIVE_MODE_WARP = 'SDL_MOUSE_RELATIVE_MODE_WARP';
|
||||||
|
|
||||||
|
{/**
|
||||||
|
* \brief Minimize your SDL_Window if it loses key focus when in Fullscreen mode. Defaults to true.
|
||||||
|
*
|
||||||
|
*/}
|
||||||
|
SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS = 'SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS';
|
||||||
|
|
||||||
|
|
||||||
|
{/**
|
||||||
|
* \brief A variable controlling whether the idle timer is disabled on iOS.
|
||||||
|
*
|
||||||
|
* When an iOS app does not receive touches for some time, the screen is
|
||||||
|
* dimmed automatically. For games where the accelerometer is the only input
|
||||||
|
* this is problematic. This functionality can be disabled by setting this
|
||||||
|
* hint.
|
||||||
|
*
|
||||||
|
* This variable can be set to the following values:
|
||||||
|
* "0" - Enable idle timer
|
||||||
|
* "1" - Disable idle timer
|
||||||
|
*/}
|
||||||
|
SDL_HINT_IDLE_TIMER_DISABLED = 'SDL_IOS_IDLE_TIMER_DISABLED';
|
||||||
|
|
||||||
|
{/**
|
||||||
|
* \brief A variable controlling which orientations are allowed on iOS.
|
||||||
|
*
|
||||||
|
* In some circumstances it is necessary to be able to explicitly control
|
||||||
|
* which UI orientations are allowed.
|
||||||
|
*
|
||||||
|
* This variable is a space delimited list of the following values:
|
||||||
|
* "LandscapeLeft", "LandscapeRight", "Portrait" "PortraitUpsideDown"
|
||||||
|
*/}
|
||||||
|
SDL_HINT_ORIENTATIONS = 'SDL_IOS_ORIENTATIONS';
|
||||||
|
|
||||||
|
{/**
|
||||||
|
* \brief A variable controlling whether an Android built-in accelerometer should be
|
||||||
|
* listed as a joystick device, rather than listing actual joysticks only.
|
||||||
|
*
|
||||||
|
* This variable can be set to the following values:
|
||||||
|
* "0" - List only real joysticks and accept input from them
|
||||||
|
* "1" - List real joysticks along with the accelerometer as if it were a 3 axis joystick (the default).
|
||||||
|
*/}
|
||||||
|
SDL_HINT_ACCELEROMETER_AS_JOYSTICK = 'SDL_ACCELEROMETER_AS_JOYSTICK';
|
||||||
|
|
||||||
|
{/**
|
||||||
|
* \brief A variable that lets you disable the detection and use of Xinput gamepad devices
|
||||||
|
*
|
||||||
|
* The variable can be set to the following values:
|
||||||
|
* "0" - Disable XInput timer (only uses direct input)
|
||||||
|
* "1" - Enable XInput timer (the default)
|
||||||
|
*/}
|
||||||
|
SDL_HINT_XINPUT_ENABLED = 'SDL_XINPUT_ENABLED';
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief A hint that specifies that SDL should use the old axis and button mapping for XInput devices.
|
||||||
|
*
|
||||||
|
* The variable can be set to the following values:
|
||||||
|
* 0 use the old axis and button mapping for XInput devices
|
||||||
|
* 1 do not use old axis and button mapping for XInput devices
|
||||||
|
*
|
||||||
|
* By default SDL does not use the old axis and button mapping for XInput devices.
|
||||||
|
*}
|
||||||
|
SDL_HINT_XINPUT_USE_OLD_JOYSTICK_MAPPING = 'SDL_HINT_XINPUT_USE_OLD_JOYSTICK_MAPPING';
|
||||||
|
|
||||||
|
{/**
|
||||||
|
* \brief A variable that lets you manually hint extra gamecontroller db entries
|
||||||
|
*
|
||||||
|
* The variable should be newline delimited rows of gamecontroller config data, see SDL_gamecontroller.h
|
||||||
|
*
|
||||||
|
* This hint must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER)
|
||||||
|
* You can update mappings after the system is initialized with SDL_GameControllerMappingForGUID() and SDL_GameControllerAddMapping()
|
||||||
|
*/}
|
||||||
|
SDL_HINT_GAMECONTROLLERCONFIG = 'SDL_GAMECONTROLLERCONFIG';
|
||||||
|
|
||||||
|
|
||||||
|
{/**
|
||||||
|
* \brief A variable that lets you enable joystick (and gamecontroller) events even when your app is in the background.
|
||||||
|
*
|
||||||
|
* The variable can be set to the following values:
|
||||||
|
* "0" - Disable joystick & gamecontroller input events when the
|
||||||
|
* application is in the background.
|
||||||
|
* "1" - Enable joystick & gamecontroller input events when the
|
||||||
|
* application is in the backgroumd.
|
||||||
|
*
|
||||||
|
* The default value is "0". This hint may be set at any time.
|
||||||
|
*/}
|
||||||
|
SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS = 'SDL_JOYSTICK_ALLOW_BACKGROUND_EVENTS';
|
||||||
|
|
||||||
|
|
||||||
|
{/**
|
||||||
|
* \brief If set to 0 then never set the top most bit on a SDL Window, even if the video mode expects it.
|
||||||
|
* This is a debugging aid for developers and not expected to be used by end users. The default is "1"
|
||||||
|
*
|
||||||
|
* This variable can be set to the following values:
|
||||||
|
* "0" - don't allow topmost
|
||||||
|
* "1" - allow topmost
|
||||||
|
*/}
|
||||||
|
SDL_HINT_ALLOW_TOPMOST = 'SDL_ALLOW_TOPMOST';
|
||||||
|
|
||||||
|
|
||||||
|
{/**
|
||||||
|
* \brief A variable that controls the timer resolution, in milliseconds.
|
||||||
|
*
|
||||||
|
* The higher resolution the timer, the more frequently the CPU services
|
||||||
|
* timer interrupts, and the more precise delays are, but this takes up
|
||||||
|
* power and CPU time. This hint is only used on Windows 7 and earlier.
|
||||||
|
*
|
||||||
|
* See this blog post for more information:
|
||||||
|
* http://randomascii.wordpress.com/2013/07/08/windows-timer-resolution-megawatts-wasted/
|
||||||
|
*
|
||||||
|
* If this variable is set to "0", the system timer resolution is not set.
|
||||||
|
*
|
||||||
|
* The default value is "1". This hint may be set at any time.
|
||||||
|
*/}
|
||||||
|
SDL_HINT_TIMER_RESOLUTION = 'SDL_TIMER_RESOLUTION';
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief If set to 1, then do not allow high-DPI windows. ("Retina" on Mac)
|
||||||
|
*}
|
||||||
|
SDL_HINT_VIDEO_HIGHDPI_DISABLED = 'SDL_VIDEO_HIGHDPI_DISABLED';
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief A hint that specifies if the SDL app should not be forced to become a foreground process on Mac OS X.
|
||||||
|
*
|
||||||
|
* Possible values:
|
||||||
|
* 0 force the SDL app to become a foreground process (default)
|
||||||
|
* 1 do not force the SDL app to become a foreground process
|
||||||
|
*}
|
||||||
|
SDL_HINT_MAC_BACKGROUND_APP = 'SDL_HINT_MAC_BACKGROUND_APP';
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief A variable that determines whether ctrl+click should generate a right-click event on Mac
|
||||||
|
*
|
||||||
|
* If present, holding ctrl while left clicking will generate a right click
|
||||||
|
* event when on Mac.
|
||||||
|
*}
|
||||||
|
SDL_HINT_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK = 'SDL_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK';
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief A variable specifying which shader compiler to preload when using the Chrome ANGLE binaries
|
||||||
|
*
|
||||||
|
* SDL has EGL and OpenGL ES2 support on Windows via the ANGLE project. It
|
||||||
|
* can use two different sets of binaries, those compiled by the user from source
|
||||||
|
* or those provided by the Chrome browser. In the later case, these binaries require
|
||||||
|
* that SDL loads a DLL providing the shader compiler.
|
||||||
|
*
|
||||||
|
* This variable can be set to the following values:
|
||||||
|
* "d3dcompiler_46.dll" - default, best for Vista or later.
|
||||||
|
* "d3dcompiler_43.dll" - for XP support.
|
||||||
|
* "none" - do not load any library, useful if you compiled ANGLE from source and included the compiler in your binaries.
|
||||||
|
*
|
||||||
|
*}
|
||||||
|
SDL_HINT_VIDEO_WIN_D3DCOMPILER = 'SDL_VIDEO_WIN_D3DCOMPILER';
|
||||||
|
|
||||||
|
{/**
|
||||||
|
* \brief A variable that is the address of another SDL_Window* (as a hex string formatted with "%p").
|
||||||
|
*
|
||||||
|
* If this hint is set before SDL_CreateWindowFrom() and the SDL_Window* it is set to has
|
||||||
|
* SDL_WINDOW_OPENGL set (and running on WGL only, currently), then two things will occur on the newly
|
||||||
|
* created SDL_Window:
|
||||||
|
*
|
||||||
|
* 1. Its pixel format will be set to the same pixel format as this SDL_Window. This is
|
||||||
|
* needed for example when sharing an OpenGL context across multiple windows.
|
||||||
|
*
|
||||||
|
* 2. The flag SDL_WINDOW_OPENGL will be set on the new window so it can be used for
|
||||||
|
* OpenGL rendering.
|
||||||
|
*
|
||||||
|
* This variable can be set to the following values:
|
||||||
|
* The address (as a string "%p") of the SDL_Window* that new windows created with SDL_CreateWindowFrom() should
|
||||||
|
* share a pixel format with.
|
||||||
|
*/}
|
||||||
|
SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT = 'SDL_VIDEO_WINDOW_SHARE_PIXEL_FORMAT';
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief A URL to a WinRT app's privacy policy
|
||||||
|
*
|
||||||
|
* All network-enabled WinRT apps must make a privacy policy available to its
|
||||||
|
* users. On Windows 8, 8.1, and RT, Microsoft mandates that this policy be
|
||||||
|
* be available in the Windows Settings charm, as accessed from within the app.
|
||||||
|
* SDL provides code to add a URL-based link there, which can point to the app's
|
||||||
|
* privacy policy.
|
||||||
|
*
|
||||||
|
* To setup a URL to an app's privacy policy, set SDL_HINT_WINRT_PRIVACY_POLICY_URL
|
||||||
|
* before calling any SDL_Init functions. The contents of the hint should
|
||||||
|
* be a valid URL. For example, "http://www.example.com".
|
||||||
|
*
|
||||||
|
* The default value is "", which will prevent SDL from adding a privacy policy
|
||||||
|
* link to the Settings charm. This hint should only be set during app init.
|
||||||
|
*
|
||||||
|
* The label text of an app's "Privacy Policy" link may be customized via another
|
||||||
|
* hint, SDL_HINT_WINRT_PRIVACY_POLICY_LABEL.
|
||||||
|
*
|
||||||
|
* Please note that on Windows Phone, Microsoft does not provide standard UI
|
||||||
|
* for displaying a privacy policy link, and as such, SDL_HINT_WINRT_PRIVACY_POLICY_URL
|
||||||
|
* will not get used on that platform. Network-enabled phone apps should display
|
||||||
|
* their privacy policy through some other, in-app means.
|
||||||
|
*}
|
||||||
|
SDL_HINT_WINRT_PRIVACY_POLICY_URL = 'SDL_HINT_WINRT_PRIVACY_POLICY_URL';
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief Label text for a WinRT app's privacy policy link
|
||||||
|
*
|
||||||
|
* Network-enabled WinRT apps must include a privacy policy. On Windows 8, 8.1, and RT,
|
||||||
|
* Microsoft mandates that this policy be available via the Windows Settings charm.
|
||||||
|
* SDL provides code to add a link there, with it's label text being set via the
|
||||||
|
* optional hint, SDL_HINT_WINRT_PRIVACY_POLICY_LABEL.
|
||||||
|
*
|
||||||
|
* Please note that a privacy policy's contents are not set via this hint. A separate
|
||||||
|
* hint, SDL_HINT_WINRT_PRIVACY_POLICY_URL, is used to link to the actual text of the
|
||||||
|
* policy.
|
||||||
|
*
|
||||||
|
* The contents of this hint should be encoded as a UTF8 string.
|
||||||
|
*
|
||||||
|
* The default value is "Privacy Policy". This hint should only be set during app
|
||||||
|
* initialization, preferably before any calls to SDL_Init.
|
||||||
|
*
|
||||||
|
* For additional information on linking to a privacy policy, see the documentation for
|
||||||
|
* SDL_HINT_WINRT_PRIVACY_POLICY_URL.
|
||||||
|
*}
|
||||||
|
SDL_HINT_WINRT_PRIVACY_POLICY_LABEL = 'SDL_HINT_WINRT_PRIVACY_POLICY_LABEL';
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief If set to 1, back button press events on Windows Phone 8+ will be marked as handled.
|
||||||
|
*
|
||||||
|
* TODO, WinRT: document SDL_HINT_WINRT_HANDLE_BACK_BUTTON need and use
|
||||||
|
* For now, more details on why this is needed can be found at the
|
||||||
|
* beginning of the following web page:
|
||||||
|
* http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj247550(v=vs.105).aspx
|
||||||
|
*}
|
||||||
|
SDL_HINT_WINRT_HANDLE_BACK_BUTTON = 'SDL_HINT_WINRT_HANDLE_BACK_BUTTON';
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief A variable that dictates policy for fullscreen Spaces on Mac OS X.
|
||||||
|
*
|
||||||
|
* This hint only applies to Mac OS X.
|
||||||
|
*
|
||||||
|
* The variable can be set to the following values:
|
||||||
|
* "0" - Disable Spaces support (FULLSCREEN_DESKTOP won't use them and
|
||||||
|
* SDL_WINDOW_RESIZABLE windows won't offer the "fullscreen"
|
||||||
|
* button on their titlebars).
|
||||||
|
* "1" - Enable Spaces support (FULLSCREEN_DESKTOP will use them and
|
||||||
|
* SDL_WINDOW_RESIZABLE windows will offer the "fullscreen"
|
||||||
|
* button on their titlebars.
|
||||||
|
*
|
||||||
|
* The default value is "1". Spaces are disabled regardless of this hint if
|
||||||
|
* the OS isn't at least Mac OS X Lion (10.7). This hint must be set before
|
||||||
|
* any windows are created.
|
||||||
|
*}
|
||||||
|
SDL_HINT_VIDEO_MAC_FULLSCREEN_SPACES = 'SDL_VIDEO_MAC_FULLSCREEN_SPACES';
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief A hint that specifies the Android APK expansion main file version.
|
||||||
|
*
|
||||||
|
* The variable should specify the Android APK expansion main file version (a string number like "1", "2" etc.).
|
||||||
|
* This hint must be set together with the hint SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION.
|
||||||
|
*
|
||||||
|
* If both hints were set then SDL_RWFromFile() will look into expansion files
|
||||||
|
* after a given relative path was not found in the internal storage and assets.
|
||||||
|
* By default this hint is not set and the APK expansion files are not searched.
|
||||||
|
*}
|
||||||
|
SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION = 'SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION';
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief A hint that specifies the Android APK expansion patch file version.
|
||||||
|
*
|
||||||
|
* The variable should specify the Android APK expansion patch file version (a string number like "1", "2" etc.).
|
||||||
|
* This hint must be set together with the hint SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION.
|
||||||
|
*
|
||||||
|
* If both hints were set then SDL_RWFromFile() will look into expansion files
|
||||||
|
* after a given relative path was not found in the internal storage and assets.
|
||||||
|
* By default this hint is not set and the APK expansion files are not searched.
|
||||||
|
*}
|
||||||
|
SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION = 'SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION';
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief A hint that specifies a variable to control whether mouse and touch events are to be treated together or separately.
|
||||||
|
*
|
||||||
|
* Possible values:
|
||||||
|
* 0 mouse events will be handled as touch events and touch will raise fake mouse events
|
||||||
|
* 1 mouse events will be handled separately from pure touch events
|
||||||
|
*
|
||||||
|
* By default mouse events will be handled as touch events and touch will raise fake mouse events.
|
||||||
|
* The value of this hint is used at runtime, so it can be changed at any time.
|
||||||
|
*}
|
||||||
|
SDL_HINT_ANDROID_SEPARATE_MOUSE_AND_TOUCH = 'SDL_HINT_ANDROID_SEPARATE_MOUSE_AND_TOUCH';
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief A hint that specifies a value to override the binding element for keyboard inputs for Emscripten builds.
|
||||||
|
*
|
||||||
|
* Possible values:
|
||||||
|
* #window the JavaScript window object (this is the default)
|
||||||
|
* #document the JavaScript document object
|
||||||
|
* #screen the JavaScript window.screen object
|
||||||
|
* #canvas the default WebGL canvas element
|
||||||
|
*
|
||||||
|
* Any other string without a leading # sign applies to the element on the page with that ID.
|
||||||
|
* This hint only applies to the Emscripten platform.
|
||||||
|
*}
|
||||||
|
SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT = 'SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT';
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief A hint that specifies whether certain IMEs should handle text editing internally instead of sending SDL_TEXTEDITING events.
|
||||||
|
*
|
||||||
|
* Possible values:
|
||||||
|
* 0 SDL_TEXTEDITING events are sent, and it is the application's responsibility
|
||||||
|
* to render the text from these events and differentiate it somehow from committed text. (default)
|
||||||
|
*
|
||||||
|
* 1 If supported by the IME then SDL_TEXTEDITING events are not sent,
|
||||||
|
* and text that is being composed will be rendered in its own UI.
|
||||||
|
*}
|
||||||
|
SDL_HINT_IME_INTERNAL_EDITING = 'SDL_HINT_IME_INTERNAL_EDITING';
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief A hint that specifies not to catch the SIGINT or SIGTERM signals.
|
||||||
|
*
|
||||||
|
* Possible values:
|
||||||
|
* 0 SDL will install a SIGINT and SIGTERM handler, and when it catches a signal, convert it into an SDL_QUIT event (default)
|
||||||
|
* 1 SDL will not install a signal handler at all
|
||||||
|
*
|
||||||
|
* This hint only applies to Unix-like platforms.
|
||||||
|
*}
|
||||||
|
SDL_HINT_NO_SIGNAL_HANDLERS = 'SDL_HINT_NO_SIGNAL_HANDLERS';
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief A hint that specifies a variable specifying SDL's threads stack size in bytes or "0" for the backend's default size.
|
||||||
|
*
|
||||||
|
* Possible values for this hint are:
|
||||||
|
* 0 use the backend's default threads stack size (default)
|
||||||
|
* X use the provided positive threads stack size
|
||||||
|
*
|
||||||
|
* Use this hint in case you need to set SDL's threads stack size to other than the default.
|
||||||
|
* This is specially useful if you build SDL against a non glibc libc library (such as musl)
|
||||||
|
* which provides a relatively small default thread stack size (a few kilobytes versus the default 8 MB glibc uses).
|
||||||
|
*
|
||||||
|
* Support for this hint is currently available only in the pthread backend.
|
||||||
|
*}
|
||||||
|
SDL_HINT_THREAD_STACK_SIZE = 'SDL_HINT_THREAD_STACK_SIZE';
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief A hint that specifies whether the windows message loop is processed by SDL.
|
||||||
|
*
|
||||||
|
* Possible values for this hint:
|
||||||
|
* 0 the window message loop is not run
|
||||||
|
* 1 the window message loop is processed in SDL_PumpEvents() [default]
|
||||||
|
*}
|
||||||
|
SDL_HINT_WINDOWS_ENABLE_MESSAGELOOP = 'SDL_HINT_WINDOWS_ENABLE_MESSAGELOOP';
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief A hint that specifies that SDL should not to generate SDL_WINDOWEVENT_CLOSE events for Alt+F4 on Microsoft Windows.
|
||||||
|
*
|
||||||
|
* Possible values for this hint:
|
||||||
|
* 0 generate an SDL_WINDOWEVENT_CLOSE event for Alt+F4 (default)
|
||||||
|
* 1 do not generate event and only do normal key handling for Alt+F4
|
||||||
|
*}
|
||||||
|
SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4 = 'SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4';
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief Prevent SDL from using version 4 of the bitmap header when saving BMPs.
|
||||||
|
*
|
||||||
|
* The bitmap header version 4 is required for proper alpha channel support and
|
||||||
|
* SDL will use it when required. Should this not be desired, this hint can
|
||||||
|
* force the use of the 40 byte header version which is supported everywhere.
|
||||||
|
*
|
||||||
|
* The variable can be set to the following values:
|
||||||
|
* "0" - Surfaces with a colorkey or an alpha channel are saved to a
|
||||||
|
* 32-bit BMP file with an alpha mask. SDL will use the bitmap
|
||||||
|
* header version 4 and set the alpha mask accordingly.
|
||||||
|
* "1" - Surfaces with a colorkey or an alpha channel are saved to a
|
||||||
|
* 32-bit BMP file without an alpha mask. The alpha channel data
|
||||||
|
* will be in the file, but applications are going to ignore it.
|
||||||
|
*
|
||||||
|
* The default value is "0".
|
||||||
|
*}
|
||||||
|
SDL_HINT_BMP_SAVE_LEGACY_FORMAT = 'SDL_BMP_SAVE_LEGACY_FORMAT';
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief Tell SDL not to name threads on Windows.
|
||||||
|
*
|
||||||
|
* The variable can be set to the following values:
|
||||||
|
* "0" - SDL will raise the 0x406D1388 Exception to name threads.
|
||||||
|
* This is the default behavior of SDL <= 2.0.4. (default)
|
||||||
|
* "1" - SDL will not raise this exception, and threads will be unnamed.
|
||||||
|
* For .NET languages this is required when running under a debugger.
|
||||||
|
*}
|
||||||
|
SDL_HINT_WINDOWS_DISABLE_THREAD_NAMING = 'SDL_WINDOWS_DISABLE_THREAD_NAMING';
|
||||||
|
{**
|
||||||
|
* \brief A hint that specifies whether the window frame and title bar are interactive when the cursor is hidden.
|
||||||
|
*
|
||||||
|
* Possible values for this hint:
|
||||||
|
* 0 the window frame is not interactive when the cursor is hidden (no move, resize, etc)
|
||||||
|
* 1 the window frame is interactive when the cursor is hidden
|
||||||
|
*
|
||||||
|
* By default SDL will allow interaction with the window frame when the cursor is hidden.
|
||||||
|
*}
|
||||||
|
SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN = 'SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN';
|
||||||
|
|
||||||
|
{/**
|
||||||
|
* \brief An enumeration of hint priorities
|
||||||
|
*/}
|
||||||
|
type
|
||||||
|
SDL_HintPriority = (SDL_HINT_DEFAULT, SDL_HINT_NORMAL, SDL_HINT_OVERRIDE);
|
||||||
|
|
||||||
|
|
||||||
|
{/**
|
||||||
|
* \brief Set a hint with a specific priority
|
||||||
|
*
|
||||||
|
* The priority controls the behavior when setting a hint that already
|
||||||
|
* has a value. Hints will replace existing hints of their priority and
|
||||||
|
* lower. Environment variables are considered to have override priority.
|
||||||
|
*
|
||||||
|
* \return SDL_TRUE if the hint was set, SDL_FALSE otherwise
|
||||||
|
*/}
|
||||||
|
function SDL_SetHintWithPriority( const name: PChar; const value: PChar; priority: SDL_HintPriority) : boolean; cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_SetHintWithPriority' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
// extern DECLSPEC SDL_bool SDLCALL SDL_SetHintWithPriority(const char *name,
|
||||||
|
// const char *value,
|
||||||
|
// SDL_HintPriority priority);
|
||||||
|
{/**
|
||||||
|
* \brief Set a hint with normal priority
|
||||||
|
*
|
||||||
|
* \return SDL_TRUE if the hint was set, SDL_FALSE otherwise
|
||||||
|
*/}
|
||||||
|
function SDL_SetHint( const name: PChar; const value: PChar) : boolean; cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_SetHint' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
//extern DECLSPEC SDL_bool SDLCALL SDL_SetHint(const char *name,
|
||||||
|
// const char *value);
|
||||||
|
|
||||||
|
{/**
|
||||||
|
* \brief Get a hint
|
||||||
|
*
|
||||||
|
* \return The string value of a hint variable.
|
||||||
|
*/}
|
||||||
|
function SDL_GetHint( const name: PChar): PChar; cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetHint' {$ENDIF} {$ENDIF};
|
||||||
|
//extern DECLSPEC const char * SDLCALL SDL_GetHint(const char *name);
|
||||||
|
|
||||||
|
|
||||||
|
{/**
|
||||||
|
* \brief Add a function to watch a particular hint
|
||||||
|
*
|
||||||
|
* \param name The hint to watch
|
||||||
|
* \param callback The function to call when the hint value changes
|
||||||
|
* \param userdata A pointer to pass to the callback function
|
||||||
|
*/}
|
||||||
|
type
|
||||||
|
TSDL_HintCallback = procedure(userdata: Pointer; const name: PChar; const oldValue: PChar; const newValue: PChar);
|
||||||
|
procedure SDL_AddHintCallback(const name: PChar; callback: TSDL_HintCallback; userdata: Pointer); cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_AddHintCallback' {$ENDIF} {$ENDIF};
|
||||||
|
//typedef void (*SDL_HintCallback)(void *userdata, const char *name, const char *oldValue, const char *newValue);
|
||||||
|
//extern DECLSPEC void SDLCALL SDL_AddHintCallback(const char *name,
|
||||||
|
// SDL_HintCallback callback,
|
||||||
|
// void *userdata);
|
||||||
|
|
||||||
|
{/**
|
||||||
|
* \brief Remove a function watching a particular hint
|
||||||
|
*
|
||||||
|
* \param name The hint being watched
|
||||||
|
* \param callback The function being called when the hint value changes
|
||||||
|
* \param userdata A pointer being passed to the callback function
|
||||||
|
*/}
|
||||||
|
procedure SDL_DelHintCallback(const name: PChar; callback: TSDL_HintCallback; userdata: Pointer); cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_DelHintCallback' {$ENDIF} {$ENDIF};
|
||||||
|
//extern DECLSPEC void SDLCALL SDL_DelHintCallback(const char *name,
|
||||||
|
// SDL_HintCallback callback,
|
||||||
|
// void *userdata);
|
||||||
|
|
||||||
|
{/**
|
||||||
|
* \brief Clear all hints
|
||||||
|
*
|
||||||
|
* This function is called during SDL_Quit() to free stored hints.
|
||||||
|
*/}
|
||||||
|
//extern DECLSPEC void SDLCALL SDL_ClearHints(void);
|
||||||
|
procedure SDL_ClearHints(); cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_ClearHints' {$ENDIF} {$ENDIF};
|
||||||
|
|
208
model_viewer/sdl2/sdljoystick.inc
Normal file
208
model_viewer/sdl2/sdljoystick.inc
Normal file
@ -0,0 +1,208 @@
|
|||||||
|
//from "sdl_joystick.h"
|
||||||
|
|
||||||
|
{**
|
||||||
|
* SDL_joystick.h
|
||||||
|
*
|
||||||
|
* In order to use these functions, SDL_Init() must have been called
|
||||||
|
* with the ::SDL_INIT_JOYSTICK flag. This causes SDL to scan the system
|
||||||
|
* for joysticks, and load appropriate drivers.
|
||||||
|
*}
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
|
{* The joystick structure used to identify an SDL joystick *}
|
||||||
|
PSDL_Joystick = Pointer; // todo!!
|
||||||
|
|
||||||
|
{* A structure that encodes the stable unique id for a joystick device *}
|
||||||
|
|
||||||
|
TSDL_JoystickGUID = record
|
||||||
|
data: array[0..15] of UInt8;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TSDL_JoystickID = SInt32;
|
||||||
|
|
||||||
|
TSDL_JoystickPowerLevel = (
|
||||||
|
SDL_JOYSTICK_POWER_UNKNOWN = -1,
|
||||||
|
SDL_JOYSTICK_POWER_EMPTY,
|
||||||
|
SDL_JOYSTICK_POWER_LOW,
|
||||||
|
SDL_JOYSTICK_POWER_MEDIUM,
|
||||||
|
SDL_JOYSTICK_POWER_FULL,
|
||||||
|
SDL_JOYSTICK_POWER_WIRED,
|
||||||
|
SDL_JOYSTICK_POWER_MAX
|
||||||
|
);
|
||||||
|
|
||||||
|
{* Function prototypes *}
|
||||||
|
{**
|
||||||
|
* Count the number of joysticks attached to the system right now
|
||||||
|
*}
|
||||||
|
function SDL_NumJoysticks: SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_NumJoysticks' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the implementation dependent name of a joystick.
|
||||||
|
* This can be called before any joysticks are opened.
|
||||||
|
* If no name can be found, this function returns NULL.
|
||||||
|
*}
|
||||||
|
function SDL_JoystickNameForIndex(device_index: SInt32): PAnsiChar cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_JoystickNameForIndex' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Open a joystick for use.
|
||||||
|
* The index passed as an argument refers tothe N'th joystick on the system.
|
||||||
|
* This index is the value which will identify this joystick in future joystick
|
||||||
|
* events.
|
||||||
|
*
|
||||||
|
* A joystick identifier, or NULL if an error occurred.
|
||||||
|
*}
|
||||||
|
function SDL_JoystickOpen(device_index: SInt32): PSDL_Joystick cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_JoystickOpen' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Return the SDL_Joystick associated with an instance id.
|
||||||
|
*}
|
||||||
|
function SDL_JoystickFromInstanceID(joyid: TSDL_JoystickID): PSDL_Joystick; cdecl;
|
||||||
|
external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_JoystickFromInstanceID' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Return the name for this currently opened joystick.
|
||||||
|
* If no name can be found, this function returns NULL.
|
||||||
|
*}
|
||||||
|
function SDL_JoystickName(joystick: PSDL_Joystick): PAnsiChar cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_JoystickName' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Return the GUID for the joystick at this index
|
||||||
|
*}
|
||||||
|
function SDL_JoystickGetDeviceGUID(device_index: SInt32): TSDL_JoystickGUID cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_JoystickGetDeviceGUID' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Return the GUID for this opened joystick
|
||||||
|
*}
|
||||||
|
function SDL_JoystickGetGUID(joystick: PSDL_Joystick): TSDL_JoystickGUID cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_JoystickGetGUID' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Return a string representation for this guid. pszGUID must point to at least 33 bytes
|
||||||
|
* (32 for the string plus a NULL terminator).
|
||||||
|
*}
|
||||||
|
procedure SDL_JoystickGetGUIDString(guid: TSDL_JoystickGUID; pszGUID: PAnsiChar; cbGUID: SInt32) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_JoystickGetGUIDString' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* convert a string into a joystick formatted guid
|
||||||
|
*}
|
||||||
|
function SDL_JoystickGetGUIDFromString(const pchGUID: PAnsiChar): TSDL_JoystickGUID cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_JoystickGetGUIDFromString' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Returns SDL_TRUE if the joystick has been opened and currently connected, or SDL_FALSE if it has not.
|
||||||
|
*}
|
||||||
|
function SDL_JoystickGetAttached(joystick: PSDL_Joystick): TSDL_Bool cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_JoystickGetAttached' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the instance ID of an opened joystick or -1 if the joystick is invalid.
|
||||||
|
*}
|
||||||
|
function SDL_JoystickInstanceID(joystick: PSDL_Joystick): TSDL_JoystickID cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_JoystickInstanceID' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the number of general axis controls on a joystick.
|
||||||
|
*}
|
||||||
|
function SDL_JoystickNumAxes(joystick: PSDL_Joystick): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_JoystickNumAxes' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the number of trackballs on a joystick.
|
||||||
|
*
|
||||||
|
* Joystick trackballs have only relative motion events associated
|
||||||
|
* with them and their state cannot be polled.
|
||||||
|
*}
|
||||||
|
function SDL_JoystickNumBalls(joystick: PSDL_Joystick): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_JoystickNumBalls' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the number of POV hats on a joystick.
|
||||||
|
*}
|
||||||
|
function SDL_JoystickNumHats(joystick: PSDL_Joystick): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_JoystickNumHats' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the number of buttons on a joystick.
|
||||||
|
*}
|
||||||
|
function SDL_JoystickNumButtons(joystick: PSDL_Joystick): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_JoystickNumButtons' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Update the current state of the open joysticks.
|
||||||
|
*
|
||||||
|
* This is called automatically by the event loop if any joystick
|
||||||
|
* events are enabled.
|
||||||
|
*}
|
||||||
|
procedure SDL_JoystickUpdate cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_JoystickUpdate' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Enable/disable joystick event polling.
|
||||||
|
*
|
||||||
|
* If joystick events are disabled, you must call SDL_JoystickUpdate()
|
||||||
|
* yourself and check the state of the joystick when you want joystick
|
||||||
|
* information.
|
||||||
|
*
|
||||||
|
* The state can be one of ::SDL_QUERY, ::SDL_ENABLE or ::SDL_IGNORE.
|
||||||
|
*}
|
||||||
|
function SDL_JoystickEventState(state: SInt32): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_JoystickEventState' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the current state of an axis control on a joystick.
|
||||||
|
*
|
||||||
|
* The state is a value ranging from -32768 to 32767.
|
||||||
|
*
|
||||||
|
* The axis indices start at index 0.
|
||||||
|
*}
|
||||||
|
function SDL_JoystickGetAxis(joystick: PSDL_Joystick; axis: SInt32): SInt16 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_JoystickGetAxis' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Hat positions
|
||||||
|
*}
|
||||||
|
const
|
||||||
|
SDL_HAT_CENTERED = $00;
|
||||||
|
SDL_HAT_UP = $01;
|
||||||
|
SDL_HAT_RIGHT = $02;
|
||||||
|
SDL_HAT_DOWN = $04;
|
||||||
|
SDL_HAT_LEFT = $08;
|
||||||
|
SDL_HAT_RIGHTUP = SDL_HAT_RIGHT or SDL_HAT_UP;
|
||||||
|
SDL_HAT_RIGHTDOWN = SDL_HAT_RIGHT or SDL_HAT_DOWN;
|
||||||
|
SDL_HAT_LEFTUP = SDL_HAT_LEFT or SDL_HAT_UP;
|
||||||
|
SDL_HAT_LEFTDOWN = SDL_HAT_LEFT or SDL_HAT_DOWN;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the current state of a POV hat on a joystick.
|
||||||
|
*
|
||||||
|
* The hat indices start at index 0.
|
||||||
|
*
|
||||||
|
* The return value is one of the following positions:
|
||||||
|
* - SDL_HAT_CENTERED
|
||||||
|
* - SDL_HAT_UP
|
||||||
|
* - SDL_HAT_RIGHT
|
||||||
|
* - SDL_HAT_DOWN
|
||||||
|
* - SDL_HAT_LEFT
|
||||||
|
* - SDL_HAT_RIGHTUP
|
||||||
|
* - SDL_HAT_RIGHTDOWN
|
||||||
|
* - SDL_HAT_LEFTUP
|
||||||
|
* - SDL_HAT_LEFTDOWN
|
||||||
|
*}
|
||||||
|
function SDL_JoystickGetHat(joystick: PSDL_Joystick; hat: SInt32): UInt8 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_JoystickGetHat' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the ball axis change since the last poll.
|
||||||
|
*
|
||||||
|
* 0, or -1 if you passed it invalid parameters.
|
||||||
|
*
|
||||||
|
* The ball indices start at index 0.
|
||||||
|
*}
|
||||||
|
function SDL_JoystickGetBall(joystick: PSDL_Joystick; ball: SInt32; dx: PInt; dy: PInt): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_JoystickGetBall' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the current state of a button on a joystick.
|
||||||
|
*
|
||||||
|
* The button indices start at index 0.
|
||||||
|
*}
|
||||||
|
function SDL_JoystickGetButton(joystick: PSDL_Joystick; button: SInt32): UInt8 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_JoystickGetButton' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Close a joystick previously opened with SDL_JoystickOpen().
|
||||||
|
*}
|
||||||
|
procedure SDL_JoystickClose(joystick: PSDL_Joystick) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_JoystickClose' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Return the battery level of this joystick
|
||||||
|
*}
|
||||||
|
function SDL_JoystickCurrentPowerLevel(joystick: PSDL_Joystick): TSDL_JoystickPowerLevel; cdecl;
|
||||||
|
external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_JoystickCurrentPowerLevel' {$ENDIF} {$ENDIF};
|
177
model_viewer/sdl2/sdlkeyboard.inc
Normal file
177
model_viewer/sdl2/sdlkeyboard.inc
Normal file
@ -0,0 +1,177 @@
|
|||||||
|
//from "sdl_keyboard.h"
|
||||||
|
|
||||||
|
type
|
||||||
|
PKeyStateArr = ^TKeyStateArr;
|
||||||
|
TKeyStateArr = array[0..65000] of UInt8;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* The SDL keysym structure, used in key events.
|
||||||
|
*}
|
||||||
|
PSDL_Keysym = ^TSDL_Keysym;
|
||||||
|
TSDL_Keysym = record
|
||||||
|
scancode: TSDL_ScanCode; // SDL physical key code - see SDL_Scancode for details
|
||||||
|
sym: TSDL_KeyCode; // SDL virtual key code - see SDL_Keycode for details
|
||||||
|
_mod: UInt16; // current key modifiers
|
||||||
|
unicode: UInt32; // (deprecated) use SDL_TextInputEvent instead
|
||||||
|
end;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the window which currently has keyboard focus.
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_GetKeyboardFocus: PSDL_Window cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetKeyboardFocus' {$ENDIF}{$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get a snapshot of the current state of the keyboard.
|
||||||
|
*
|
||||||
|
* numkeys if non-nil, receives the length of the returned array.
|
||||||
|
*
|
||||||
|
* An array of key states. Indexes into this array are obtained by using SDL_Scancode values.
|
||||||
|
*
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_GetKeyboardState(numkeys: PInt): PUInt8 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetKeyboardState' {$ENDIF}{$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the current key modifier state for the keyboard.
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_GetModState: TSDL_KeyMod cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetModState' {$ENDIF}{$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Set the current key modifier state for the keyboard.
|
||||||
|
*
|
||||||
|
* This does not change the keyboard state, only the key modifier flags.
|
||||||
|
*}
|
||||||
|
|
||||||
|
procedure SDL_SetModState(modstate: TSDL_KeyMod) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_SetModState' {$ENDIF}{$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the key code corresponding to the given scancode according
|
||||||
|
* to the current keyboard layout.
|
||||||
|
*
|
||||||
|
* See SDL_Keycode for details.
|
||||||
|
*
|
||||||
|
* SDL_GetKeyName()
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_GetKeyFromScancode(scancode: TSDL_ScanCode): TSDL_KeyCode cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetKeyFromScancode' {$ENDIF}{$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the scancode corresponding to the given key code according to the
|
||||||
|
* current keyboard layout.
|
||||||
|
*
|
||||||
|
* See SDL_Scancode for details.
|
||||||
|
*
|
||||||
|
* SDL_GetScancodeName()
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_GetScancodeFromKey(key: TSDL_KeyCode): TSDL_ScanCode cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetScancodeFromKey' {$ENDIF}{$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get a human-readable name for a scancode.
|
||||||
|
*
|
||||||
|
* A pointer to the name for the scancode.
|
||||||
|
*
|
||||||
|
* If the scancode doesn't have a name, this function returns
|
||||||
|
* an empty string ("").
|
||||||
|
*
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_GetScancodeName(scancode: TSDL_ScanCode): PAnsiChar cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetScancodeName' {$ENDIF}{$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get a scancode from a human-readable name
|
||||||
|
*
|
||||||
|
* scancode, or SDL_SCANCODE_UNKNOWN if the name wasn't recognized
|
||||||
|
*
|
||||||
|
* SDL_Scancode
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_GetScancodeFromName(const name: PAnsiChar): TSDL_ScanCode cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetScancodeFromName' {$ENDIF}{$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get a human-readable name for a key.
|
||||||
|
*
|
||||||
|
* A pointer to a UTF-8 string that stays valid at least until the next
|
||||||
|
* call to this function. If you need it around any longer, you must
|
||||||
|
* copy it. If the key doesn't have a name, this function returns an
|
||||||
|
* empty string ("").
|
||||||
|
*
|
||||||
|
* SDL_Key
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_GetKeyName(key: TSDL_ScanCode): PAnsiChar cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetKeyName' {$ENDIF}{$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get a key code from a human-readable name
|
||||||
|
*
|
||||||
|
* key code, or SDLK_UNKNOWN if the name wasn't recognized
|
||||||
|
*
|
||||||
|
* SDL_Keycode
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_GetKeyFromName(const name: PAnsiChar): TSDL_KeyCode cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetKeyFromName' {$ENDIF}{$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Start accepting Unicode text input events.
|
||||||
|
* This function will show the on-screen keyboard if supported.
|
||||||
|
*
|
||||||
|
* SDL_StopTextInput()
|
||||||
|
* SDL_SetTextInputRect()
|
||||||
|
* SDL_HasScreenKeyboardSupport()
|
||||||
|
*}
|
||||||
|
|
||||||
|
procedure SDL_StartTextInput cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_StartTextInput' {$ENDIF}{$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Return whether or not Unicode text input events are enabled.
|
||||||
|
*
|
||||||
|
* SDL_StartTextInput()
|
||||||
|
* SDL_StopTextInput()
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_IsTextInputActive: TSDL_Bool cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_IsTextInputActive' {$ENDIF}{$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Stop receiving any text input events.
|
||||||
|
* This function will hide the on-screen keyboard if supported.
|
||||||
|
*
|
||||||
|
* SDL_StartTextInput()
|
||||||
|
* SDL_HasScreenKeyboardSupport()
|
||||||
|
*}
|
||||||
|
|
||||||
|
procedure SDL_StopTextInput cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_StopTextInput' {$ENDIF}{$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Set the rectangle used to type Unicode text inputs.
|
||||||
|
* This is used as a hint for IME and on-screen keyboard placement.
|
||||||
|
*
|
||||||
|
* SDL_StartTextInput()
|
||||||
|
*}
|
||||||
|
|
||||||
|
procedure SDL_SetTextInputRect(rect: PSDL_Rect) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_SetTextInputRect' {$ENDIF}{$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Returns whether the platform has some screen keyboard support.
|
||||||
|
*
|
||||||
|
* SDL_TRUE if some keyboard support is available else SDL_FALSE.
|
||||||
|
*
|
||||||
|
* Not all screen keyboard functions are supported on all platforms.
|
||||||
|
*
|
||||||
|
* SDL_IsScreenKeyboardShown()
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_HasScreenKeyboardSupport: TSDL_Bool cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_HasScreenKeyboardSupport' {$ENDIF}{$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Returns whether the screen keyboard is shown for given window.
|
||||||
|
*
|
||||||
|
* window The window for which screen keyboard should be queried.
|
||||||
|
*
|
||||||
|
* Result - SDL_TRUE if screen keyboard is shown else SDL_FALSE.
|
||||||
|
*
|
||||||
|
* SDL_HasScreenKeyboardSupport()
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_IsScreenKeyboardShown(window: PSDL_Window): TSDL_Bool cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_IsScreenKeyboardShown' {$ENDIF}{$ENDIF};
|
23
model_viewer/sdl2/sdlloadso.inc
Normal file
23
model_viewer/sdl2/sdlloadso.inc
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
//from sdl_loadso.h
|
||||||
|
|
||||||
|
{**
|
||||||
|
* This function dynamically loads a shared object and returns a pointer
|
||||||
|
* to the object handle (or NULL if there was an error).
|
||||||
|
* The 'sofile' parameter is a system dependent name of the object file.
|
||||||
|
*}
|
||||||
|
function SDL_LoadObject(Const sofile: PAnsiChar): Pointer; cdecl;
|
||||||
|
external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_LoadObject' {$ENDIF}{$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Given an object handle, this function looks up the address of the
|
||||||
|
* named function in the shared object and returns it. This address
|
||||||
|
* is no longer valid after calling SDL_UnloadObject().
|
||||||
|
*}
|
||||||
|
function SDL_LoadFunction(handle: Pointer; Const name: PAnsiChar): Pointer; cdecl;
|
||||||
|
external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_LoadFunction' {$ENDIF}{$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Unload a shared object from memory.
|
||||||
|
*}
|
||||||
|
procedure SDL_UnloadObject(handle: Pointer); cdecl;
|
||||||
|
external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_UnloadObject' {$ENDIF}{$ENDIF};
|
147
model_viewer/sdl2/sdllog.inc
Normal file
147
model_viewer/sdl2/sdllog.inc
Normal file
@ -0,0 +1,147 @@
|
|||||||
|
|
||||||
|
//since the array of const in delphi is not C compatible:
|
||||||
|
{$IFDEF FPC}
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief The maximum size of a log message
|
||||||
|
*
|
||||||
|
* Messages longer than the maximum size will be truncated
|
||||||
|
*}
|
||||||
|
const
|
||||||
|
SDL_MAX_LOG_MESSAGE = 4096;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief The predefined log categories
|
||||||
|
*
|
||||||
|
* By default the application category is enabled at the INFO level,
|
||||||
|
* the assert category is enabled at the WARN level, test is enabled
|
||||||
|
* at the VERBOSE level and all other categories are enabled at the
|
||||||
|
* CRITICAL level.
|
||||||
|
*}
|
||||||
|
type
|
||||||
|
TSDL_LogCategory = (SDL_LOG_CATEGORY_APPLICATION,
|
||||||
|
SDL_LOG_CATEGORY_ERROR,
|
||||||
|
SDL_LOG_CATEGORY_ASSERT,
|
||||||
|
SDL_LOG_CATEGORY_SYSTEM,
|
||||||
|
SDL_LOG_CATEGORY_AUDIO,
|
||||||
|
SDL_LOG_CATEGORY_VIDEO,
|
||||||
|
SDL_LOG_CATEGORY_RENDER,
|
||||||
|
SDL_LOG_CATEGORY_INPUT,
|
||||||
|
SDL_LOG_CATEGORY_TEST,
|
||||||
|
|
||||||
|
{* Reserved for future SDL library use *}
|
||||||
|
SDL_LOG_CATEGORY_RESERVED1,
|
||||||
|
SDL_LOG_CATEGORY_RESERVED2,
|
||||||
|
SDL_LOG_CATEGORY_RESERVED3,
|
||||||
|
SDL_LOG_CATEGORY_RESERVED4,
|
||||||
|
SDL_LOG_CATEGORY_RESERVED5,
|
||||||
|
SDL_LOG_CATEGORY_RESERVED6,
|
||||||
|
SDL_LOG_CATEGORY_RESERVED7,
|
||||||
|
SDL_LOG_CATEGORY_RESERVED8,
|
||||||
|
SDL_LOG_CATEGORY_RESERVED9,
|
||||||
|
SDL_LOG_CATEGORY_RESERVED10,
|
||||||
|
|
||||||
|
{* Beyond this point is reserved for application use *}
|
||||||
|
SDL_LOG_CATEGORY_CUSTOM);
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief The predefined log priorities
|
||||||
|
*}
|
||||||
|
const
|
||||||
|
SDL_LOG_PRIORITY_VERBOSE = 1;
|
||||||
|
SDL_LOG_PRIORITY_DEBUG = 2;
|
||||||
|
SDL_LOG_PRIORITY_INFO = 3;
|
||||||
|
SDL_LOG_PRIORITY_WARN = 4;
|
||||||
|
SDL_LOG_PRIORITY_ERROR = 5;
|
||||||
|
SDL_LOG_PRIORITY_CRITICAL = 6;
|
||||||
|
SDL_NUM_LOG_PRIORITIES = 7;
|
||||||
|
type
|
||||||
|
TSDL_LogPriority = Integer;
|
||||||
|
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief Set the priority of all log categories
|
||||||
|
*}
|
||||||
|
procedure SDL_LogSetAllPriority(priority: TSDL_LogPriority) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_LogSetAllPriority' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief Set the priority of a particular log category
|
||||||
|
*}
|
||||||
|
procedure SDL_LogSetPriority(category: Integer; priority: TSDL_LogPriority) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_LogSetPriority' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief Get the priority of a particular log category
|
||||||
|
*}
|
||||||
|
function SDL_LogGetPriority(category: Integer): TSDL_LogPriority cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_LogGetPriority' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief Reset all priorities to default.
|
||||||
|
*
|
||||||
|
* \note This is called in SDL_Quit().
|
||||||
|
*}
|
||||||
|
procedure SDL_LogResetPriorities() cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_LogResetPriorities' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief Log a message with SDL_LOG_CATEGORY_APPLICATION and SDL_LOG_PRIORITY_INFO
|
||||||
|
*}
|
||||||
|
procedure SDL_Log(const fmt: PAnsiChar; pars: array of const) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_Log' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief Log a message with SDL_LOG_PRIORITY_VERBOSE
|
||||||
|
*}
|
||||||
|
procedure SDL_LogVerbose(category: Integer; const fmt: PAnsiChar; pars: array of const) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_LogVerbose' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief Log a message with SDL_LOG_PRIORITY_DEBUG
|
||||||
|
*}
|
||||||
|
procedure SDL_LogDebug(category: Integer; const fmt: PAnsiChar; pars: array of const) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_LogDebug' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief Log a message with SDL_LOG_PRIORITY_INFO
|
||||||
|
*}
|
||||||
|
procedure SDL_LogInfo(category: Integer; const fmt: PAnsiChar; pars: array of const) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_LogInfo' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief Log a message with SDL_LOG_PRIORITY_WARN
|
||||||
|
*}
|
||||||
|
procedure SDL_LogWarn(category: Integer; const fmt: PAnsiChar; pars: array of const) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_LogWarn' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief Log a message with SDL_LOG_PRIORITY_ERROR
|
||||||
|
*}
|
||||||
|
procedure SDL_LogError(category: Integer; const fmt: PAnsiChar; pars: array of const) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_LogError' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief Log a message with SDL_LOG_PRIORITY_CRITICAL
|
||||||
|
*}
|
||||||
|
procedure SDL_LogCritical(category: Integer; const fmt: PAnsiChar; pars: array of const) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_LogCritical' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief Log a message with the specified category and priority.
|
||||||
|
*}
|
||||||
|
procedure SDL_LogMessage(category: Integer; priority: TSDL_LogPriority; const fmt: PAnsiChar; pars: array of const) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_LogMessage' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief Log a message with the specified category and priority.
|
||||||
|
*}
|
||||||
|
procedure SDL_LogMessageV(category: Integer; priority: TSDL_LogPriority; const fmt: PAnsiChar; ap: array of const) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_LogMessageV' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief The prototype for the log output function
|
||||||
|
*}
|
||||||
|
type
|
||||||
|
TSDL_LogOutputFunction = procedure(userdata: Pointer; category: Integer; priority: TSDL_LogPriority; const msg: PAnsiChar);
|
||||||
|
PSDL_LogOutputFunction = ^TSDL_LogOutputFunction;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief Get the current log output function.
|
||||||
|
*}
|
||||||
|
procedure SDL_LogGetOutputFunction(callback: PSDL_LogOutputFunction; userdata: PPointer) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_LogGetOutputFunction' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief This function allows you to replace the default log output
|
||||||
|
* function with one of your own.
|
||||||
|
*}
|
||||||
|
procedure SDL_LogSetOutputFunction(callback: TSDL_LogOutputFunction; userdata: Pointer) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_LogSetOutputFunction' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{$ENDIF}
|
108
model_viewer/sdl2/sdlmessagebox.inc
Normal file
108
model_viewer/sdl2/sdlmessagebox.inc
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
//from "sdl_messagebox.h"
|
||||||
|
|
||||||
|
{**
|
||||||
|
* SDL_MessageBox flags. If supported will display warning icon, etc.
|
||||||
|
*}
|
||||||
|
|
||||||
|
const
|
||||||
|
SDL_MESSAGEBOX_ERROR = $00000010; {**< error dialog *}
|
||||||
|
SDL_MESSAGEBOX_WARNING = $00000020; {**< warning dialog *}
|
||||||
|
SDL_MESSAGEBOX_INFORMATION = $00000040; {**< informational dialog *}
|
||||||
|
|
||||||
|
type
|
||||||
|
TSDL_MessageBoxFlags = Byte;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Flags for SDL_MessageBoxButtonData.
|
||||||
|
*}
|
||||||
|
const
|
||||||
|
SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT = $00000001; {**< Marks the default button when return is hit *}
|
||||||
|
SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT = $00000002; {**< Marks the default button when escape is hit *}
|
||||||
|
type
|
||||||
|
TSDL_MessageBoxButtonFlags = Byte;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Individual button data.
|
||||||
|
*}
|
||||||
|
type
|
||||||
|
PSDL_MessageBoxButtonData = ^TSDL_MessageBoxButtonData;
|
||||||
|
TSDL_MessageBoxButtonData = record
|
||||||
|
flags: UInt32; {**< ::SDL_MessageBoxButtonFlags *}
|
||||||
|
buttonid: Integer; {**< User defined button id (value returned via SDL_ShowMessageBox) *}
|
||||||
|
text: PAnsiChar; {**< The UTF-8 button text *}
|
||||||
|
end;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* RGB value used in a message box color scheme
|
||||||
|
*}
|
||||||
|
type
|
||||||
|
PSDL_MessageBoxColor = ^TSDL_MessageBoxColor;
|
||||||
|
TSDL_MessageBoxColor = record
|
||||||
|
r, g, b: UInt8;
|
||||||
|
end;
|
||||||
|
|
||||||
|
PSDL_MessageBoxColorType = ^TSDL_MessageBoxColorType;
|
||||||
|
TSDL_MessageBoxColorType = (SDL_MESSAGEBOX_COLOR_BACKGROUND,
|
||||||
|
SDL_MESSAGEBOX_COLOR_TEXT,
|
||||||
|
SDL_MESSAGEBOX_COLOR_BUTTON_BORDER,
|
||||||
|
SDL_MESSAGEBOX_COLOR_BUTTON_BACKGROUND,
|
||||||
|
SDL_MESSAGEBOX_COLOR_BUTTON_SELECTED,
|
||||||
|
SDL_MESSAGEBOX_COLOR_MAX);
|
||||||
|
|
||||||
|
{**
|
||||||
|
* A set of colors to use for message box dialogs
|
||||||
|
*}
|
||||||
|
type
|
||||||
|
PSDL_MessageBoxColorScheme = ^TSDL_MessageBoxColorScheme;
|
||||||
|
TSDL_MessageBoxColorScheme = record
|
||||||
|
//colors: array[0..SDL_MESSAGEBOX_COLOR_MAX-1] of TSDL_MessageBoxColor;
|
||||||
|
colors: array[0..4] of TSDL_MessageBoxColor; //right?!
|
||||||
|
end;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* MessageBox structure containing title, text, window, etc.
|
||||||
|
*}
|
||||||
|
type
|
||||||
|
PSDL_MessageBoxData = ^TSDL_MessageBoxData;
|
||||||
|
TSDL_MessageBoxData = record
|
||||||
|
flags: UInt32; {**< SDL_MessageBoxFlags *}
|
||||||
|
window: PSDL_Window; {**< Parent window, can be NULL *}
|
||||||
|
title: PAnsiChar; {**< UTF-8 title *}
|
||||||
|
_message: PAnsiChar; {**< UTF-8 message text *}
|
||||||
|
|
||||||
|
numbuttons: Integer;
|
||||||
|
buttons: PSDL_MessageBoxButtonData;
|
||||||
|
|
||||||
|
colorScheme: PSDL_MessageBoxColorScheme; {**< SDL_MessageBoxColorScheme, can be NULL to use system settings *}
|
||||||
|
end;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Create a modal message box.
|
||||||
|
*
|
||||||
|
* messageboxdata The SDL_MessageBoxData structure with title, text, etc.
|
||||||
|
* buttonid The pointer to which user id of hit button should be copied.
|
||||||
|
*
|
||||||
|
* -1 on error, otherwise 0 and buttonid contains user id of button
|
||||||
|
* hit or -1 if dialog was closed.
|
||||||
|
*
|
||||||
|
* This function should be called on the thread that created the parent
|
||||||
|
* window, or on the main thread if the messagebox has no parent. It will
|
||||||
|
* block execution of that thread until the user clicks a button or
|
||||||
|
* closes the messagebox.
|
||||||
|
*}
|
||||||
|
function SDL_ShowMessageBox(messageboxdata: PSDL_MessageBoxData; buttonid: PInt): Integer cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_ShowMessageBox' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Create a simple modal message box
|
||||||
|
*
|
||||||
|
* flags SDL_MessageBoxFlags
|
||||||
|
* title UTF-8 title text
|
||||||
|
* message UTF-8 message text
|
||||||
|
* window The parent window, or NULL for no parent
|
||||||
|
*
|
||||||
|
* 0 on success, -1 on error
|
||||||
|
*
|
||||||
|
* SDL_ShowMessageBox
|
||||||
|
*}
|
||||||
|
function SDL_ShowSimpleMessageBox(flags: UInt32; title: PAnsiChar; _message: PAnsiChar; window: PSDL_Window): Integer cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_ShowSimpleMessageBox' {$ENDIF} {$ENDIF};
|
||||||
|
|
258
model_viewer/sdl2/sdlmouse.inc
Normal file
258
model_viewer/sdl2/sdlmouse.inc
Normal file
@ -0,0 +1,258 @@
|
|||||||
|
//from "sdl_mouse.h"
|
||||||
|
|
||||||
|
type
|
||||||
|
PSDL_Cursor = Pointer;
|
||||||
|
|
||||||
|
const
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Cursor types for SDL_CreateSystemCursor.
|
||||||
|
*}
|
||||||
|
|
||||||
|
SDL_SYSTEM_CURSOR_ARROW = 0; // Arrow
|
||||||
|
SDL_SYSTEM_CURSOR_IBEAM = 1; // I-beam
|
||||||
|
SDL_SYSTEM_CURSOR_WAIT = 2; // Wait
|
||||||
|
SDL_SYSTEM_CURSOR_CROSSHAIR = 3; // Crosshair
|
||||||
|
SDL_SYSTEM_CURSOR_WAITARROW = 4; // Small wait cursor (or Wait if not available)
|
||||||
|
SDL_SYSTEM_CURSOR_SIZENWSE = 5; // Double arrow pointing northwest and southeast
|
||||||
|
SDL_SYSTEM_CURSOR_SIZENESW = 6; // Double arrow pointing northeast and southwest
|
||||||
|
SDL_SYSTEM_CURSOR_SIZEWE = 7; // Double arrow pointing west and east
|
||||||
|
SDL_SYSTEM_CURSOR_SIZENS = 8; // Double arrow pointing north and south
|
||||||
|
SDL_SYSTEM_CURSOR_SIZEALL = 9; // Four pointed arrow pointing north, south, east, and west
|
||||||
|
SDL_SYSTEM_CURSOR_NO = 10; // Slashed circle or crossbones
|
||||||
|
SDL_SYSTEM_CURSOR_HAND = 11; // Hand
|
||||||
|
SDL_NUM_SYSTEM_CURSORS = 12;
|
||||||
|
|
||||||
|
type
|
||||||
|
PSDL_SystemCursor = ^TSDL_SystemCursor;
|
||||||
|
TSDL_SystemCursor = Word;
|
||||||
|
|
||||||
|
{* Function prototypes *}
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the window which currently has mouse focus.
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_GetMouseFocus: PSDL_Window cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetMouseFocus' {$ENDIF}{$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Retrieve the current state of the mouse.
|
||||||
|
*
|
||||||
|
* The current button state is returned as a button bitmask, which can
|
||||||
|
* be tested using the SDL_BUTTON(X) macros, and x and y are set to the
|
||||||
|
* mouse cursor position relative to the focus window for the currently
|
||||||
|
* selected mouse. You can pass nil for either x or y.
|
||||||
|
*
|
||||||
|
* SDL_Button = 1 shl ((X)-1)
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_GetMouseState(x: PInt; y: PInt): UInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetMouseState' {$ENDIF}{$ENDIF};
|
||||||
|
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief Get the current state of the mouse, in relation to the desktop
|
||||||
|
*
|
||||||
|
* This works just like SDL_GetMouseState(), but the coordinates will be
|
||||||
|
* reported relative to the top-left of the desktop. This can be useful if
|
||||||
|
* you need to track the mouse outside of a specific window and
|
||||||
|
* SDL_CaptureMouse() doesn't fit your needs. For example, it could be
|
||||||
|
* useful if you need to track the mouse while dragging a window, where
|
||||||
|
* coordinates relative to a window might not be in sync at all times.
|
||||||
|
*
|
||||||
|
* \note SDL_GetMouseState() returns the mouse position as SDL understands
|
||||||
|
* it from the last pump of the event queue. This function, however,
|
||||||
|
* queries the OS for the current mouse position, and as such, might
|
||||||
|
* be a slightly less efficient function. Unless you know what you're
|
||||||
|
* doing and have a good reason to use this function, you probably want
|
||||||
|
* SDL_GetMouseState() instead.
|
||||||
|
*
|
||||||
|
* \param x Returns the current X coord, relative to the desktop. Can be NULL.
|
||||||
|
* \param y Returns the current Y coord, relative to the desktop. Can be NULL.
|
||||||
|
* \return The current button state as a bitmask, which can be tested using the SDL_BUTTON(X) macros.
|
||||||
|
*
|
||||||
|
* \sa SDL_GetMouseState
|
||||||
|
*}
|
||||||
|
function SDL_GetGlobalMouseState(x, y: PSInt32): UInt32; cdecl;
|
||||||
|
external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetGlobalMouseState' {$ENDIF}{$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Retrieve the relative state of the mouse.
|
||||||
|
*
|
||||||
|
* The current button state is returned as a button bitmask, which can
|
||||||
|
* be tested using the SDL_BUTTON(X) macros, and x and y are set to the
|
||||||
|
* mouse deltas since the last call to SDL_GetRelativeMouseState().
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_GetRelativeMouseState(x: PInt; y: PInt): UInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetRelativeMouseState' {$ENDIF}{$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Moves the mouse to the given position within the window.
|
||||||
|
*
|
||||||
|
* window The window to move the mouse into, or nil for the current mouse focus
|
||||||
|
* x The x coordinate within the window
|
||||||
|
* y The y coordinate within the window
|
||||||
|
*
|
||||||
|
* This function generates a mouse motion event
|
||||||
|
*}
|
||||||
|
|
||||||
|
procedure SDL_WarpMouseInWindow(window: PSDL_Window; x: SInt32; y: SInt32) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_WarpMouseInWindow' {$ENDIF}{$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief Moves the mouse to the given position in global screen space.
|
||||||
|
*
|
||||||
|
* \param x The x coordinate
|
||||||
|
* \param y The y coordinate
|
||||||
|
* \return 0 on success, -1 on error (usually: unsupported by a platform).
|
||||||
|
*
|
||||||
|
* \note This function generates a mouse motion event
|
||||||
|
*}
|
||||||
|
Function SDL_WarpMouseGlobal(x, y: SInt32): SInt32; cdecl;
|
||||||
|
external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_WarpMouseGlobal' {$ENDIF}{$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Set relative mouse mode.
|
||||||
|
*
|
||||||
|
* enabled Whether or not to enable relative mode
|
||||||
|
*
|
||||||
|
* 0 on success, or -1 if relative mode is not supported.
|
||||||
|
*
|
||||||
|
* While the mouse is in relative mode, the cursor is hidden, and the
|
||||||
|
* driver will try to report continuous motion in the current window.
|
||||||
|
* Only relative motion events will be delivered, the mouse position
|
||||||
|
* will not change.
|
||||||
|
*
|
||||||
|
* This function will flush any pending mouse motion.
|
||||||
|
*
|
||||||
|
* SDL_GetRelativeMouseMode()
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_SetRelativeMouseMode(enabled: TSDL_Bool): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_SetRelativeMouseMode' {$ENDIF}{$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief Capture the mouse, to track input outside an SDL window.
|
||||||
|
*
|
||||||
|
* \param enabled Whether or not to enable capturing
|
||||||
|
*
|
||||||
|
* Capturing enables your app to obtain mouse events globally, instead of
|
||||||
|
* just within your window. Not all video targets support this function.
|
||||||
|
* When capturing is enabled, the current window will get all mouse events,
|
||||||
|
* but unlike relative mode, no change is made to the cursor and it is
|
||||||
|
* not restrained to your window.
|
||||||
|
*
|
||||||
|
* This function may also deny mouse input to other windows--both those in
|
||||||
|
* your application and others on the system--so you should use this
|
||||||
|
* function sparingly, and in small bursts. For example, you might want to
|
||||||
|
* track the mouse while the user is dragging something, until the user
|
||||||
|
* releases a mouse button. It is not recommended that you capture the mouse
|
||||||
|
* for long periods of time, such as the entire time your app is running.
|
||||||
|
*
|
||||||
|
* While captured, mouse events still report coordinates relative to the
|
||||||
|
* current (foreground) window, but those coordinates may be outside the
|
||||||
|
* bounds of the window (including negative values). Capturing is only
|
||||||
|
* allowed for the foreground window. If the window loses focus while
|
||||||
|
* capturing, the capture will be disabled automatically.
|
||||||
|
*
|
||||||
|
* While capturing is enabled, the current window will have the
|
||||||
|
* SDL_WINDOW_MOUSE_CAPTURE flag set.
|
||||||
|
*
|
||||||
|
* \return 0 on success, or -1 if not supported.
|
||||||
|
*}
|
||||||
|
function SDL_CaptureMouse(enabled: TSDL_Bool): SInt32; cdecl;
|
||||||
|
external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_CaptureMouse' {$ENDIF}{$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Query whether relative mouse mode is enabled.
|
||||||
|
*
|
||||||
|
* SDL_SetRelativeMouseMode()
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_GetRelativeMouseMode: TSDL_Bool cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetRelativeMouseMode' {$ENDIF}{$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Create a cursor, using the specified bitmap data and
|
||||||
|
* mask (in MSB format).
|
||||||
|
*
|
||||||
|
* The cursor width must be a multiple of 8 bits.
|
||||||
|
*
|
||||||
|
* The cursor is created in black and white according to the following:
|
||||||
|
* <table>
|
||||||
|
* <tr><td> data </td><td> mask </td><td> resulting pixel on screen </td></tr>
|
||||||
|
* <tr><td> 0 </td><td> 1 </td><td> White </td></tr>
|
||||||
|
* <tr><td> 1 </td><td> 1 </td><td> Black </td></tr>
|
||||||
|
* <tr><td> 0 </td><td> 0 </td><td> Transparent </td></tr>
|
||||||
|
* <tr><td> 1 </td><td> 0 </td><td> Inverted color if possible, black
|
||||||
|
* if not. </td></tr>
|
||||||
|
* </table>
|
||||||
|
*
|
||||||
|
* SDL_FreeCursor()
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_CreateCursor(const data: PUInt8; const mask: PUInt8; w: SInt32; h: SInt32; hot_x: SInt32; hot_y: SInt32): PSDL_Cursor cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_CreateCursor' {$ENDIF}{$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Create a color cursor.
|
||||||
|
*
|
||||||
|
* SDL_FreeCursor()
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_CreateColorCursor(surface: PSDL_Surface; hot_x: SInt32; hot_y: SInt32): PSDL_Cursor cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_CreateColorCursor' {$ENDIF}{$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Create a system cursor.
|
||||||
|
*
|
||||||
|
* SDL_FreeCursor()
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_CreateSystemCursor(id: TSDL_SystemCursor): PSDL_Cursor cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_CreateSystemCursor' {$ENDIF}{$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Set the active cursor.
|
||||||
|
*}
|
||||||
|
|
||||||
|
procedure SDL_SetCursor(cursor: PSDL_Cursor) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_SetCursor' {$ENDIF}{$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Return the active cursor.
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_GetCursor: PSDL_Cursor cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetCursor' {$ENDIF}{$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Frees a cursor created with SDL_CreateCursor().
|
||||||
|
*
|
||||||
|
* SDL_CreateCursor()
|
||||||
|
*}
|
||||||
|
|
||||||
|
procedure SDL_FreeCursor(cursor: PSDL_Cursor) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_FreeCursor' {$ENDIF}{$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Toggle whether or not the cursor is shown.
|
||||||
|
*
|
||||||
|
* toggle 1 to show the cursor, 0 to hide it, -1 to query the current
|
||||||
|
* state.
|
||||||
|
*
|
||||||
|
* 1 if the cursor is shown, or 0 if the cursor is hidden.
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_ShowCursor(toggle: SInt32): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_ShowCursor' {$ENDIF}{$ENDIF};
|
||||||
|
|
||||||
|
function SDL_Button(button: SInt32): SInt32; {$IFNDEF DELPHI} inline; {$ELSE} {$IFDEF DELPHI10UP} inline; {$ENDIF} {$ENDIF}
|
||||||
|
|
||||||
|
const
|
||||||
|
{**
|
||||||
|
* Used as a mask when testing buttons in buttonstate.
|
||||||
|
* - Button 1: Left mouse button
|
||||||
|
* - Button 2: Middle mouse button
|
||||||
|
* - Button 3: Right mouse button
|
||||||
|
*}
|
||||||
|
|
||||||
|
SDL_BUTTON_LEFT = 1;
|
||||||
|
SDL_BUTTON_MIDDLE = 2;
|
||||||
|
SDL_BUTTON_RIGHT = 3;
|
||||||
|
SDL_BUTTON_X1 = 4;
|
||||||
|
SDL_BUTTON_X2 = 5;
|
||||||
|
SDL_BUTTON_LMASK = 1 shl ((SDL_BUTTON_LEFT) - 1);
|
||||||
|
SDL_BUTTON_MMASK = 1 shl ((SDL_BUTTON_MIDDLE) - 1);
|
||||||
|
SDL_BUTTON_RMASK = 1 shl ((SDL_BUTTON_RIGHT) - 1);
|
||||||
|
SDL_BUTTON_X1MASK = 1 shl ((SDL_BUTTON_X1) - 1);
|
||||||
|
SDL_BUTTON_X2MASK = 1 shl ((SDL_BUTTON_X2) - 1);
|
194
model_viewer/sdl2/sdlmutex.inc
Normal file
194
model_viewer/sdl2/sdlmutex.inc
Normal file
@ -0,0 +1,194 @@
|
|||||||
|
//from "sdl_mutex.h"
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Synchronization functions which can time out return this value
|
||||||
|
* if they time out.
|
||||||
|
*}
|
||||||
|
const
|
||||||
|
SDL_MUTEX_TIMEDOUT = 1;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* This is the timeout value which corresponds to never time out.
|
||||||
|
*}
|
||||||
|
//SDL_MUTEX_MAXWAIT (~(Uint32)0)
|
||||||
|
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Mutex functions
|
||||||
|
*}
|
||||||
|
type
|
||||||
|
{* The SDL mutex structure, defined in SDL_mutex.c *}
|
||||||
|
PSDL_Mutex = Pointer; //todo!
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Create a mutex, initialized unlocked.
|
||||||
|
*}
|
||||||
|
function SDL_CreateMutex: PSDL_Mutex cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_CreateMutex' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Lock the mutex.
|
||||||
|
*
|
||||||
|
* 0, or -1 on error.
|
||||||
|
*}
|
||||||
|
//#define SDL_mutexP(m) SDL_LockMutex(m)
|
||||||
|
function SDL_LockMutex(mutex: PSDL_Mutex): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_LockMutex' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Try to lock the mutex
|
||||||
|
*
|
||||||
|
* 0, SDL_MUTEX_TIMEDOUT, or -1 on error
|
||||||
|
*}
|
||||||
|
function SDL_TryLockMutex(mutex: PSDL_Mutex): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_TryLockMutex' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Unlock the mutex.
|
||||||
|
*
|
||||||
|
* 0, or -1 on error.
|
||||||
|
*
|
||||||
|
* It is an error to unlock a mutex that has not been locked by
|
||||||
|
* the current thread, and doing so results in undefined behavior.
|
||||||
|
*}
|
||||||
|
//#define SDL_mutexV(m) SDL_UnlockMutex(m)
|
||||||
|
function SDL_UnlockMutex(mutex: PSDL_Mutex): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_UnlockMutex' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Destroy a mutex.
|
||||||
|
*}
|
||||||
|
procedure SDL_DestroyMutex(mutex: PSDL_Mutex) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_DestroyMutex' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{*Mutex functions*}
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Semaphore functions
|
||||||
|
*}
|
||||||
|
type
|
||||||
|
{* The SDL semaphore structure, defined in SDL_sem.c *}
|
||||||
|
PSDL_Sem = Pointer; //todo!
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Create a semaphore, initialized with value, returns NULL on failure.
|
||||||
|
*}
|
||||||
|
function SDL_CreateSemaphore(initial_value: UInt32): PSDL_sem cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_CreateSemaphore' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Destroy a semaphore.
|
||||||
|
*}
|
||||||
|
procedure SDL_DestroySemaphore(sem: PSDL_Sem) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_DestroySemaphore' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* This function suspends the calling thread until the semaphore pointed
|
||||||
|
* to by sem has a positive count. It then atomically decreases the
|
||||||
|
* semaphore count.
|
||||||
|
*}
|
||||||
|
function SDL_SemWait(sem: PSDL_Sem): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_SemWait' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Non-blocking variant of SDL_SemWait().
|
||||||
|
*
|
||||||
|
* 0 if the wait succeeds, SDL_MUTEX_TIMEDOUT if the wait would
|
||||||
|
* block, and -1 on error.
|
||||||
|
*}
|
||||||
|
function SDL_SemTryWait(sem: PSDL_Sem): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_SemTryWait' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Variant of SDL_SemWait() with a timeout in milliseconds.
|
||||||
|
*
|
||||||
|
* 0 if the wait succeeds, ::SDL_MUTEX_TIMEDOUT if the wait does not
|
||||||
|
* succeed in the allotted time, and -1 on error.
|
||||||
|
*
|
||||||
|
* On some platforms this function is implemented by looping with a
|
||||||
|
* delay of 1 ms, and so should be avoided if possible.
|
||||||
|
*}
|
||||||
|
function SDL_SemWaitTimeout(sem: PSDL_Sem; ms: UInt32): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_SemWaitTimeout' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Atomically increases the semaphore'_S count (not blocking).
|
||||||
|
*
|
||||||
|
* 0, or -1 on error.
|
||||||
|
*}
|
||||||
|
function SDL_SemPost(sem: PSDL_Sem): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_SemPost' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Returns the current count of the semaphore.
|
||||||
|
*}
|
||||||
|
function SDL_SemValue(sem: PSDL_Sem): UInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_SemValue' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{*Semaphore functions*}
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Condition variable functions
|
||||||
|
* }
|
||||||
|
type
|
||||||
|
{* The SDL condition variable structure, defined in SDL_cond.c *}
|
||||||
|
PSDL_Cond = Pointer; //todo!!
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Create a condition variable.
|
||||||
|
*
|
||||||
|
* Typical use of condition variables:
|
||||||
|
*
|
||||||
|
* Thread A:
|
||||||
|
* SDL_LockMutex(lock);
|
||||||
|
* while ( not condition )
|
||||||
|
* begin
|
||||||
|
* SDL_CondWait(cond, lock);
|
||||||
|
* end;
|
||||||
|
* SDL_UnlockMutex(lock);
|
||||||
|
*
|
||||||
|
* Thread B:
|
||||||
|
* SDL_LockMutex(lock);
|
||||||
|
* ...
|
||||||
|
* condition := true;
|
||||||
|
* ...
|
||||||
|
* SDL_CondSignal(cond);
|
||||||
|
* SDL_UnlockMutex(lock);
|
||||||
|
*
|
||||||
|
* There is some discussion whether to signal the condition variable
|
||||||
|
* with the mutex locked or not. There is some potential performance
|
||||||
|
* benefit to unlocking first on some platforms, but there are some
|
||||||
|
* potential race conditions depending on how your code is structured.
|
||||||
|
*
|
||||||
|
* In general it'_S safer to signal the condition variable while the
|
||||||
|
* mutex is locked.
|
||||||
|
*}
|
||||||
|
function SDL_CreateCond: PSDL_Cond cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_CreateCond' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Destroy a condition variable.
|
||||||
|
*}
|
||||||
|
procedure SDL_DestroyCond(cond: PSDL_Cond) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_DestroyCond' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Restart one of the threads that are waiting on the condition variable.
|
||||||
|
*
|
||||||
|
* 0 or -1 on error.
|
||||||
|
*}
|
||||||
|
function SDL_CondSignal(cond: PSDL_Cond): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_CondSignal' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Restart all threads that are waiting on the condition variable.
|
||||||
|
*
|
||||||
|
* 0 or -1 on error.
|
||||||
|
*}
|
||||||
|
function SDL_CondBroadcast(cond: PSDL_Cond): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_CondBroadcast' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Wait on the condition variable, unlocking the provided mutex.
|
||||||
|
*
|
||||||
|
* The mutex must be locked before entering this function!
|
||||||
|
*
|
||||||
|
* The mutex is re-locked once the condition variable is signaled.
|
||||||
|
*
|
||||||
|
* 0 when it is signaled, or -1 on error.
|
||||||
|
*}
|
||||||
|
function SDL_CondWait(cond: PSDL_Cond; mutex: PSDL_Mutex): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_CondWait' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Waits for at most ms milliseconds, and returns 0 if the condition
|
||||||
|
* variable is signaled, SDL_MUTEX_TIMEDOUT if the condition is not
|
||||||
|
* signaled in the allotted time, and -1 on error.
|
||||||
|
*
|
||||||
|
* On some platforms this function is implemented by looping with a
|
||||||
|
* delay of 1 ms, and so should be avoided if possible.
|
||||||
|
*}
|
||||||
|
function SDL_CondWaitTimeout(cond: PSDL_Cond; mutex: PSDL_Mutex; ms: UInt32): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_CondWaitTimeout' {$ENDIF} {$ENDIF};
|
521
model_viewer/sdl2/sdlpixels.inc
Normal file
521
model_viewer/sdl2/sdlpixels.inc
Normal file
@ -0,0 +1,521 @@
|
|||||||
|
//from "sdl_pixels.h"
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Transparency definitions
|
||||||
|
*
|
||||||
|
* These define alpha as the opacity of a surface.
|
||||||
|
*}
|
||||||
|
|
||||||
|
const
|
||||||
|
SDL_ALPHA_OPAQUE = 255;
|
||||||
|
SDL_ALPHA_TRANSPARENT = 0;
|
||||||
|
|
||||||
|
{** Pixel type. *}
|
||||||
|
SDL_PIXELTYPE_UNKNOWN = 0;
|
||||||
|
SDL_PIXELTYPE_INDEX1 = 1;
|
||||||
|
SDL_PIXELTYPE_INDEX4 = 2;
|
||||||
|
SDL_PIXELTYPE_INDEX8 = 3;
|
||||||
|
SDL_PIXELTYPE_PACKED8 = 4;
|
||||||
|
SDL_PIXELTYPE_PACKED16 = 5;
|
||||||
|
SDL_PIXELTYPE_PACKED32 = 6;
|
||||||
|
SDL_PIXELTYPE_ARRAYU8 = 7;
|
||||||
|
SDL_PIXELTYPE_ARRAYU16 = 8;
|
||||||
|
SDL_PIXELTYPE_ARRAYU32 = 9;
|
||||||
|
SDL_PIXELTYPE_ARRAYF16 = 10;
|
||||||
|
SDL_PIXELTYPE_ARRAYF32 = 11;
|
||||||
|
|
||||||
|
{** Bitmap pixel order, high bit -> low bit. *}
|
||||||
|
SDL_BITMAPORDER_NONE = 0;
|
||||||
|
SDL_BITMAPORDER_4321 = 1;
|
||||||
|
SDL_BITMAPORDER_1234 = 2;
|
||||||
|
|
||||||
|
{** Packed component order, high bit -> low bit. *}
|
||||||
|
|
||||||
|
SDL_PACKEDORDER_NONE = 0;
|
||||||
|
SDL_PACKEDORDER_XRGB = 1;
|
||||||
|
SDL_PACKEDORDER_RGBX = 2;
|
||||||
|
SDL_PACKEDORDER_ARGB = 3;
|
||||||
|
SDL_PACKEDORDER_RGBA = 4;
|
||||||
|
SDL_PACKEDORDER_XBGR = 5;
|
||||||
|
SDL_PACKEDORDER_BGRX = 6;
|
||||||
|
SDL_PACKEDORDER_ABGR = 7;
|
||||||
|
SDL_PACKEDORDER_BGRA = 8;
|
||||||
|
|
||||||
|
{** Array component order, low byte -> high byte. *}
|
||||||
|
SDL_ARRAYORDER_NONE = 0;
|
||||||
|
SDL_ARRAYORDER_RGB = 1;
|
||||||
|
SDL_ARRAYORDER_RGBA = 2;
|
||||||
|
SDL_ARRAYORDER_ARGB = 3;
|
||||||
|
SDL_ARRAYORDER_BGR = 4;
|
||||||
|
SDL_ARRAYORDER_BGRA = 5;
|
||||||
|
SDL_ARRAYORDER_ABGR = 6;
|
||||||
|
|
||||||
|
{** Packed component layout. *}
|
||||||
|
SDL_PACKEDLAYOUT_NONE = 0;
|
||||||
|
SDL_PACKEDLAYOUT_332 = 1;
|
||||||
|
SDL_PACKEDLAYOUT_4444 = 2;
|
||||||
|
SDL_PACKEDLAYOUT_1555 = 3;
|
||||||
|
SDL_PACKEDLAYOUT_5551 = 4;
|
||||||
|
SDL_PACKEDLAYOUT_565 = 5;
|
||||||
|
SDL_PACKEDLAYOUT_8888 = 6;
|
||||||
|
SDL_PACKEDLAYOUT_2101010 = 7;
|
||||||
|
SDL_PACKEDLAYOUT_1010102 = 8;
|
||||||
|
|
||||||
|
{
|
||||||
|
//todo!!
|
||||||
|
function SDL_DEFINE_PIXELFORMAT(type, order, layour, bit, bytes: UInt32): Result;
|
||||||
|
|
||||||
|
function SDL_DEFINE_PIXELFOURCC(A,B,C,D: Variant): Variant;
|
||||||
|
|
||||||
|
#define SDL_DEFINE_PIXELFORMAT(type, order, layout, bits, bytes) \
|
||||||
|
((1 << 28) | ((type) << 24) | ((order) << 20) | ((layout) << 16) | \
|
||||||
|
((bits) << 8) | ((bytes) << 0))
|
||||||
|
}
|
||||||
|
|
||||||
|
function SDL_PIXELFLAG(X: Cardinal): Cardinal;
|
||||||
|
function SDL_PIXELTYPE(X: Cardinal): Cardinal;
|
||||||
|
function SDL_PIXELORDER(X: Cardinal): Cardinal;
|
||||||
|
function SDL_PIXELLAYOUT(X: Cardinal): Cardinal;
|
||||||
|
function SDL_BITSPERPIXEL(X: Cardinal): Cardinal;
|
||||||
|
{
|
||||||
|
#define SDL_BYTESPERPIXEL(X) \
|
||||||
|
(SDL_ISPIXELFORMAT_FOURCC(X) ? \
|
||||||
|
((((X) == SDL_PIXELFORMAT_YUY2) || \
|
||||||
|
((X) == SDL_PIXELFORMAT_UYVY) || \
|
||||||
|
((X) == SDL_PIXELFORMAT_YVYU)) ? 2 : 1) : (((X) >> 0) & 0xFF))
|
||||||
|
|
||||||
|
#define SDL_ISPIXELFORMAT_INDEXED(format) \
|
||||||
|
(!SDL_ISPIXELFORMAT_FOURCC(format) && \
|
||||||
|
((SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX1) || \
|
||||||
|
(SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX4) || \
|
||||||
|
(SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX8)))
|
||||||
|
|
||||||
|
#define SDL_ISPIXELFORMAT_ALPHA(format) \
|
||||||
|
(!SDL_ISPIXELFORMAT_FOURCC(format) && \
|
||||||
|
((SDL_PIXELORDER(format) == SDL_PACKEDORDER_ARGB) || \
|
||||||
|
(SDL_PIXELORDER(format) == SDL_PACKEDORDER_RGBA) || \
|
||||||
|
(SDL_PIXELORDER(format) == SDL_PACKEDORDER_ABGR) || \
|
||||||
|
(SDL_PIXELORDER(format) == SDL_PACKEDORDER_BGRA)))
|
||||||
|
|
||||||
|
function SDL_IsPixelFormat_FOURCC(format: Variant);
|
||||||
|
|
||||||
|
{* Note: If you modify this list, update SDL_GetPixelFormatName() *}
|
||||||
|
|
||||||
|
const
|
||||||
|
SDL_PIXELFORMAT_UNKNOWN = 0;
|
||||||
|
SDL_PIXELFORMAT_INDEX1LSB = (1 shl 28) or
|
||||||
|
(SDL_PIXELTYPE_INDEX1 shl 24) or
|
||||||
|
(SDL_BITMAPORDER_4321 shl 20) or
|
||||||
|
(0 shl 16) or
|
||||||
|
(1 shl 8) or
|
||||||
|
(0 shl 0);
|
||||||
|
|
||||||
|
SDL_PIXELFORMAT_INDEX1MSB = (1 shl 28) or
|
||||||
|
(SDL_PIXELTYPE_INDEX1 shl 24) or
|
||||||
|
(SDL_BITMAPORDER_1234 shl 20) or
|
||||||
|
(0 shl 16) or
|
||||||
|
(1 shl 8) or
|
||||||
|
(0 shl 0);
|
||||||
|
|
||||||
|
SDL_PIXELFORMAT_INDEX4LSB = (1 shl 28) or
|
||||||
|
(SDL_PIXELTYPE_INDEX4 shl 24) or
|
||||||
|
(SDL_BITMAPORDER_4321 shl 20) or
|
||||||
|
(0 shl 16) or
|
||||||
|
(4 shl 8) or
|
||||||
|
(0 shl 0);
|
||||||
|
|
||||||
|
SDL_PIXELFORMAT_INDEX4MSB = (1 shl 28) or
|
||||||
|
(SDL_PIXELTYPE_INDEX4 shl 24) or
|
||||||
|
(SDL_BITMAPORDER_1234 shl 20) or
|
||||||
|
(0 shl 16) or
|
||||||
|
(4 shl 8) or
|
||||||
|
(0 shl 0);
|
||||||
|
|
||||||
|
SDL_PIXELFORMAT_INDEX8 = (1 shl 28) or
|
||||||
|
(SDL_PIXELTYPE_PACKED8 shl 24) or
|
||||||
|
(0 shl 20) or
|
||||||
|
(0 shl 16) or
|
||||||
|
(8 shl 8) or
|
||||||
|
(1 shl 0);
|
||||||
|
|
||||||
|
SDL_PIXELFORMAT_RGB332 = (1 shl 28) or
|
||||||
|
(SDL_PIXELTYPE_PACKED8 shl 24) or
|
||||||
|
(SDL_PACKEDORDER_XRGB shl 20) or
|
||||||
|
(SDL_PACKEDLAYOUT_332 shl 16) or
|
||||||
|
(8 shl 8) or
|
||||||
|
(1 shl 0);
|
||||||
|
|
||||||
|
SDL_PIXELFORMAT_RGB444 = (1 shl 28) or
|
||||||
|
(SDL_PIXELTYPE_PACKED16 shl 24) or
|
||||||
|
(SDL_PACKEDORDER_XRGB shl 20) or
|
||||||
|
(SDL_PACKEDLAYOUT_4444 shl 16) or
|
||||||
|
(12 shl 8) or
|
||||||
|
(2 shl 0);
|
||||||
|
|
||||||
|
SDL_PIXELFORMAT_RGB555 = (1 shl 28) or
|
||||||
|
(SDL_PIXELTYPE_PACKED16 shl 24) or
|
||||||
|
(SDL_PACKEDORDER_XRGB shl 20) or
|
||||||
|
(SDL_PACKEDLAYOUT_1555 shl 16) or
|
||||||
|
(15 shl 8) or
|
||||||
|
(2 shl 0);
|
||||||
|
|
||||||
|
SDL_PIXELFORMAT_BGR555 = (1 shl 28) or
|
||||||
|
(SDL_PIXELTYPE_PACKED16 shl 24) or
|
||||||
|
(SDL_PACKEDORDER_XBGR shl 20) or
|
||||||
|
(SDL_PACKEDLAYOUT_1555 shl 16) or
|
||||||
|
(15 shl 8) or
|
||||||
|
(2 shl 0);
|
||||||
|
|
||||||
|
SDL_PIXELFORMAT_ARGB4444 = (1 shl 28) or
|
||||||
|
(SDL_PIXELTYPE_PACKED16 shl 24) or
|
||||||
|
(SDL_PACKEDORDER_ARGB shl 20) or
|
||||||
|
(SDL_PACKEDLAYOUT_4444 shl 16) or
|
||||||
|
(16 shl 8) or
|
||||||
|
(2 shl 0);
|
||||||
|
|
||||||
|
SDL_PIXELFORMAT_RGBA4444 = (1 shl 28) or
|
||||||
|
(SDL_PIXELTYPE_PACKED16 shl 24) or
|
||||||
|
(SDL_PACKEDORDER_RGBA shl 20) or
|
||||||
|
(SDL_PACKEDLAYOUT_4444 shl 16) or
|
||||||
|
(16 shl 8) or
|
||||||
|
(2 shl 0);
|
||||||
|
|
||||||
|
SDL_PIXELFORMAT_ABGR4444 = (1 shl 28) or
|
||||||
|
(SDL_PIXELTYPE_PACKED16 shl 24) or
|
||||||
|
(SDL_PACKEDORDER_ABGR shl 20) or
|
||||||
|
(SDL_PACKEDLAYOUT_4444 shl 16) or
|
||||||
|
(16 shl 8) or
|
||||||
|
(2 shl 0);
|
||||||
|
|
||||||
|
SDL_PIXELFORMAT_BGRA4444 = (1 shl 28) or
|
||||||
|
(SDL_PIXELTYPE_PACKED16 shl 24) or
|
||||||
|
(SDL_PACKEDORDER_BGRA shl 20) or
|
||||||
|
(SDL_PACKEDLAYOUT_4444 shl 16) or
|
||||||
|
(16 shl 8) or
|
||||||
|
(2 shl 0);
|
||||||
|
|
||||||
|
SDL_PIXELFORMAT_ARGB1555 = (1 shl 28) or
|
||||||
|
(SDL_PIXELTYPE_PACKED16 shl 24) or
|
||||||
|
(SDL_PACKEDORDER_ARGB shl 20) or
|
||||||
|
(SDL_PACKEDLAYOUT_1555 shl 16) or
|
||||||
|
(16 shl 8) or
|
||||||
|
(2 shl 0);
|
||||||
|
|
||||||
|
SDL_PIXELFORMAT_RGBA5551 = (1 shl 28) or
|
||||||
|
(SDL_PIXELTYPE_PACKED16 shl 24) or
|
||||||
|
(SDL_PACKEDORDER_RGBA shl 20) or
|
||||||
|
(SDL_PACKEDLAYOUT_5551 shl 16) or
|
||||||
|
(16 shl 8) or
|
||||||
|
(2 shl 0);
|
||||||
|
|
||||||
|
SDL_PIXELFORMAT_ABGR1555 = (1 shl 28) or
|
||||||
|
(SDL_PIXELTYPE_PACKED16 shl 24) or
|
||||||
|
(SDL_PACKEDORDER_ABGR shl 20) or
|
||||||
|
(SDL_PACKEDLAYOUT_1555 shl 16) or
|
||||||
|
(16 shl 8) or
|
||||||
|
(2 shl 0);
|
||||||
|
|
||||||
|
SDL_PIXELFORMAT_BGRA5551 = (1 shl 28) or
|
||||||
|
(SDL_PIXELTYPE_PACKED16 shl 24) or
|
||||||
|
(SDL_PACKEDORDER_BGRA shl 20) or
|
||||||
|
(SDL_PACKEDLAYOUT_5551 shl 16) or
|
||||||
|
(16 shl 8) or
|
||||||
|
(2 shl 0);
|
||||||
|
|
||||||
|
SDL_PIXELFORMAT_RGB565 = (1 shl 28) or
|
||||||
|
(SDL_PIXELTYPE_PACKED16 shl 24) or
|
||||||
|
(SDL_PACKEDORDER_XRGB shl 20) or
|
||||||
|
(SDL_PACKEDLAYOUT_565 shl 16) or
|
||||||
|
(16 shl 8) or
|
||||||
|
(2 shl 0);
|
||||||
|
|
||||||
|
SDL_PIXELFORMAT_BGR565 = (1 shl 28) or
|
||||||
|
(SDL_PIXELTYPE_PACKED16 shl 24) or
|
||||||
|
(SDL_PACKEDORDER_XBGR shl 20) or
|
||||||
|
(SDL_PACKEDLAYOUT_1555 shl 16) or
|
||||||
|
(16 shl 8) or
|
||||||
|
(2 shl 0);
|
||||||
|
|
||||||
|
SDL_PIXELFORMAT_RGB24 = (1 shl 28) or
|
||||||
|
(SDL_PIXELTYPE_ARRAYU8 shl 24) or
|
||||||
|
(SDL_ARRAYORDER_RGB shl 20) or
|
||||||
|
(0 shl 16) or
|
||||||
|
(24 shl 8) or
|
||||||
|
(3 shl 0);
|
||||||
|
|
||||||
|
SDL_PIXELFORMAT_BGR24 = (1 shl 28) or
|
||||||
|
(SDL_PIXELTYPE_ARRAYU8 shl 24) or
|
||||||
|
(SDL_ARRAYORDER_BGR shl 20) or
|
||||||
|
(0 shl 16) or
|
||||||
|
(24 shl 8) or
|
||||||
|
(3 shl 0);
|
||||||
|
|
||||||
|
SDL_PIXELFORMAT_RGB888 = (1 shl 28) or
|
||||||
|
(SDL_PIXELTYPE_PACKED32 shl 24) or
|
||||||
|
(SDL_PACKEDORDER_XRGB shl 20) or
|
||||||
|
(SDL_PACKEDLAYOUT_8888 shl 16) or
|
||||||
|
(24 shl 8) or
|
||||||
|
(4 shl 0);
|
||||||
|
|
||||||
|
SDL_PIXELFORMAT_RGBX8888 = (1 shl 28) or
|
||||||
|
(SDL_PIXELTYPE_PACKED32 shl 24) or
|
||||||
|
(SDL_PACKEDORDER_RGBX shl 20) or
|
||||||
|
(SDL_PACKEDLAYOUT_8888 shl 16) or
|
||||||
|
(24 shl 8) or
|
||||||
|
(4 shl 0);
|
||||||
|
|
||||||
|
SDL_PIXELFORMAT_BGR888 = (1 shl 28) or
|
||||||
|
(SDL_PIXELTYPE_PACKED32 shl 24) or
|
||||||
|
(SDL_PACKEDORDER_XBGR shl 20) or
|
||||||
|
(SDL_PACKEDLAYOUT_8888 shl 16) or
|
||||||
|
(24 shl 8) or
|
||||||
|
(4 shl 0);
|
||||||
|
|
||||||
|
SDL_PIXELFORMAT_BGRX8888 = (1 shl 28) or
|
||||||
|
(SDL_PIXELTYPE_PACKED32 shl 24) or
|
||||||
|
(SDL_PACKEDORDER_BGRX shl 20) or
|
||||||
|
(SDL_PACKEDLAYOUT_8888 shl 16) or
|
||||||
|
(24 shl 8) or
|
||||||
|
(4 shl 0);
|
||||||
|
|
||||||
|
SDL_PIXELFORMAT_ARGB8888 = (1 shl 28) or
|
||||||
|
(SDL_PIXELTYPE_PACKED32 shl 24) or
|
||||||
|
(SDL_PACKEDORDER_ARGB shl 20) or
|
||||||
|
(SDL_PACKEDLAYOUT_8888 shl 16) or
|
||||||
|
(32 shl 8) or
|
||||||
|
(4 shl 0);
|
||||||
|
|
||||||
|
SDL_PIXELFORMAT_RGBA8888 = (1 shl 28) or
|
||||||
|
(SDL_PIXELTYPE_PACKED32 shl 24) or
|
||||||
|
(SDL_PACKEDORDER_RGBA shl 20) or
|
||||||
|
(SDL_PACKEDLAYOUT_8888 shl 16) or
|
||||||
|
(32 shl 8) or
|
||||||
|
(4 shl 0);
|
||||||
|
|
||||||
|
SDL_PIXELFORMAT_ABGR8888 = (1 shl 28) or
|
||||||
|
(SDL_PIXELTYPE_PACKED32 shl 24) or
|
||||||
|
(SDL_PACKEDORDER_ABGR shl 20) or
|
||||||
|
(SDL_PACKEDLAYOUT_8888 shl 16) or
|
||||||
|
(32 shl 8) or
|
||||||
|
(4 shl 0);
|
||||||
|
|
||||||
|
SDL_PIXELFORMAT_BGRA8888 = (1 shl 28) or
|
||||||
|
(SDL_PIXELTYPE_PACKED32 shl 24) or
|
||||||
|
(SDL_PACKEDORDER_RGBX shl 20) or
|
||||||
|
(SDL_PACKEDLAYOUT_8888 shl 16) or
|
||||||
|
(32 shl 8) or
|
||||||
|
(4 shl 0);
|
||||||
|
|
||||||
|
SDL_PIXELFORMAT_ARGB2101010 = (1 shl 28) or
|
||||||
|
(SDL_PIXELTYPE_PACKED32 shl 24) or
|
||||||
|
(SDL_PACKEDORDER_ARGB shl 20) or
|
||||||
|
(SDL_PACKEDLAYOUT_2101010 shl 16)or
|
||||||
|
(32 shl 8) or
|
||||||
|
(4 shl 0);
|
||||||
|
|
||||||
|
(* Aliases for RGBA byte arrays of color data, for the current platform *)
|
||||||
|
{$IFDEF FPC}
|
||||||
|
{$IF DEFINED(ENDIAN_LITTLE)}
|
||||||
|
SDL_PIXELFORMAT_RGBA32 = SDL_PIXELFORMAT_ABGR8888;
|
||||||
|
SDL_PIXELFORMAT_ARGB32 = SDL_PIXELFORMAT_BGRA8888;
|
||||||
|
SDL_PIXELFORMAT_BGRA32 = SDL_PIXELFORMAT_ARGB8888;
|
||||||
|
SDL_PIXELFORMAT_ABGR32 = SDL_PIXELFORMAT_RGBA8888;
|
||||||
|
{$ELSEIF DEFINED(ENDIAN_BIG)}
|
||||||
|
SDL_PIXELFORMAT_RGBA32 = SDL_PIXELFORMAT_RGBA8888;
|
||||||
|
SDL_PIXELFORMAT_ARGB32 = SDL_PIXELFORMAT_ARGB8888;
|
||||||
|
SDL_PIXELFORMAT_BGRA32 = SDL_PIXELFORMAT_BGRA8888;
|
||||||
|
SDL_PIXELFORMAT_ABGR32 = SDL_PIXELFORMAT_ABGR8888;
|
||||||
|
{$ELSE}
|
||||||
|
{$FATAL Cannot determine endianness.}
|
||||||
|
{$IFEND}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{**< Planar mode: Y + V + U (3 planes) *}
|
||||||
|
SDL_PIXELFORMAT_YV12 = (Integer('Y') ) or
|
||||||
|
(Integer('V') shl 8) or
|
||||||
|
(Integer('1') shl 16) or
|
||||||
|
(Integer('2') shl 24);
|
||||||
|
{**< Planar mode: Y + U + V (3 planes) *}
|
||||||
|
SDL_PIXELFORMAT_IYUV = (Integer('I') ) or
|
||||||
|
(Integer('Y') shl 8) or
|
||||||
|
(Integer('U') shl 16) or
|
||||||
|
(Integer('V') shl 24);
|
||||||
|
{**< Packed mode: Y0+U0+Y1+V0 (1 plane) *}
|
||||||
|
SDL_PIXELFORMAT_YUY2 = (Integer('Y') ) or
|
||||||
|
(Integer('U') shl 8) or
|
||||||
|
(Integer('Y') shl 16) or
|
||||||
|
(Integer('2') shl 24);
|
||||||
|
{**< Packed mode: U0+Y0+V0+Y1 (1 plane) *}
|
||||||
|
SDL_PIXELFORMAT_UYVY = (Integer('U') ) or
|
||||||
|
(Integer('Y') shl 8) or
|
||||||
|
(Integer('V') shl 16) or
|
||||||
|
(Integer('Y') shl 24);
|
||||||
|
{**< Packed mode: Y0+V0+Y1+U0 (1 plane) *}
|
||||||
|
SDL_PIXELFORMAT_YVYU = (Integer('Y') ) or
|
||||||
|
(Integer('V') shl 8) or
|
||||||
|
(Integer('Y') shl 16) or
|
||||||
|
(Integer('U') shl 24);
|
||||||
|
|
||||||
|
type
|
||||||
|
PSDL_Color = ^TSDL_Color;
|
||||||
|
TSDL_Color = record
|
||||||
|
r: UInt8;
|
||||||
|
g: UInt8;
|
||||||
|
b: UInt8;
|
||||||
|
a: UInt8;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TSDL_Colour = TSDL_Color;
|
||||||
|
PSDL_Colour = ^TSDL_Colour;
|
||||||
|
|
||||||
|
PSDL_Palette = ^TSDL_Palette;
|
||||||
|
TSDL_Palette = record
|
||||||
|
ncolors: SInt32;
|
||||||
|
colors: PSDL_Color;
|
||||||
|
version: UInt32;
|
||||||
|
refcount: SInt32;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Everything in the pixel format structure is read-only.
|
||||||
|
*}
|
||||||
|
|
||||||
|
PSDL_PixelFormat = ^TSDL_PixelFormat;
|
||||||
|
TSDL_PixelFormat = record
|
||||||
|
format: UInt32;
|
||||||
|
palette: PSDL_Palette;
|
||||||
|
BitsPerPixel: UInt8;
|
||||||
|
BytesPerPixel: UInt8;
|
||||||
|
padding: array[0..1] of UInt8;
|
||||||
|
Rmask: UInt32;
|
||||||
|
Gmask: UInt32;
|
||||||
|
Bmask: UInt32;
|
||||||
|
Amask: UInt32;
|
||||||
|
Rloss: UInt8;
|
||||||
|
Gloss: UInt8;
|
||||||
|
Bloss: UInt8;
|
||||||
|
Aloss: UInt8;
|
||||||
|
Rshift: UInt8;
|
||||||
|
Gshift: UInt8;
|
||||||
|
Bshift: UInt8;
|
||||||
|
Ashift: UInt8;
|
||||||
|
refcount: SInt32;
|
||||||
|
next: PSDL_PixelFormat;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the human readable name of a pixel format
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_GetPixelFormatName(format: UInt32): PAnsiChar cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetPixelFormatName' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Convert one of the enumerated pixel formats to a bpp and RGBA masks.
|
||||||
|
*
|
||||||
|
* SDL_TRUE, or SDL_FALSE if the conversion wasn't possible.
|
||||||
|
*
|
||||||
|
* SDL_MasksToPixelFormatEnum()
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_PixelFormatEnumToMasks(format: UInt32; bpp: PInt; Rmask: PUInt32; Gmask: PUInt32; Bmask: PUInt32; Amask: PUInt32): TSDL_Bool cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_PixelFormatEnumToMasks' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Convert a bpp and RGBA masks to an enumerated pixel format.
|
||||||
|
*
|
||||||
|
* The pixel format, or SDL_PIXELFORMAT_UNKNOWN if the conversion
|
||||||
|
* wasn't possible.
|
||||||
|
*
|
||||||
|
* SDL_PixelFormatEnumToMasks()
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_MasksToPixelFormatEnum(bpp: SInt32; Rmask: UInt32; Gmask: UInt32; Bmask: UInt32; Amask: UInt32): UInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_MasksToPixelFormatEnum' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Create an SDL_PixelFormat structure from a pixel format enum.
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_AllocFormat(pixel_format: UInt32): PSDL_PixelFormat cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_AllocFormat' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Free an SDL_PixelFormat structure.
|
||||||
|
*}
|
||||||
|
|
||||||
|
procedure SDL_FreeFormat(format: PSDL_PixelFormat) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_FreeFormat' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Create a palette structure with the specified number of color
|
||||||
|
* entries.
|
||||||
|
*
|
||||||
|
* A new palette, or nil if there wasn't enough memory.
|
||||||
|
*
|
||||||
|
* The palette entries are initialized to white.
|
||||||
|
*
|
||||||
|
* SDL_FreePalette()
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_AllocPalette(ncolors: SInt32): PSDL_Palette cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_AllocPalette' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Set the palette for a pixel format structure.
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_SetPixelFormatPalette(format: PSDL_PixelFormat; palette: PSDL_Palette): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_SetPixelFormatPalette' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Set a range of colors in a palette.
|
||||||
|
*
|
||||||
|
* palette The palette to modify.
|
||||||
|
* colors An array of colors to copy into the palette.
|
||||||
|
* firstcolor The index of the first palette entry to modify.
|
||||||
|
* ncolors The number of entries to modify.
|
||||||
|
*
|
||||||
|
* 0 on success, or -1 if not all of the colors could be set.
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_SetPaletteColors(palette: PSDL_Palette; const colors: PSDL_Color; firstcolor: SInt32; ncolors: SInt32): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_SetPaletteColors' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Free a palette created with SDL_AllocPalette().
|
||||||
|
*
|
||||||
|
* SDL_AllocPalette()
|
||||||
|
*}
|
||||||
|
|
||||||
|
procedure SDL_FreePalette(palette: PSDL_Palette) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_FreePalette' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Maps an RGB triple to an opaque pixel value for a given pixel format.
|
||||||
|
*
|
||||||
|
* SDL_MapRGBA
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_MapRGB(const format: PSDL_PixelFormat; r: UInt8; g: UInt8; b: UInt8): UInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_MapRGB' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Maps an RGBA quadruple to a pixel value for a given pixel format.
|
||||||
|
*
|
||||||
|
* SDL_MapRGB
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_MapRGBA(const format: PSDL_PixelFormat; r: UInt8; g: UInt8; b: UInt8; a: UInt8): UInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_MapRGBA' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the RGB components from a pixel of the specified format.
|
||||||
|
*
|
||||||
|
* SDL_GetRGBA
|
||||||
|
*}
|
||||||
|
|
||||||
|
procedure SDL_GetRGB(pixel: UInt32; const format: PSDL_PixelFormat; r: PUInt8; g: PUInt8; b: PUInt8) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetRGB' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the RGBA components from a pixel of the specified format.
|
||||||
|
*
|
||||||
|
* SDL_GetRGB
|
||||||
|
*}
|
||||||
|
|
||||||
|
procedure SDL_GetRGBA(pixel: UInt32; const format: PSDL_PixelFormat; r: PUInt8; g: PUInt8; b: PUInt8; a: PUInt8) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetRGBA' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Calculate a 256 entry gamma ramp for a gamma value.
|
||||||
|
*}
|
||||||
|
|
||||||
|
procedure SDL_CalculateGammaRamp(gamma: Float; ramp: PUInt16) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_CalculateGammaRamp' {$ENDIF} {$ENDIF};
|
6
model_viewer/sdl2/sdlplatform.inc
Normal file
6
model_viewer/sdl2/sdlplatform.inc
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
//from sdl_platform.h
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Gets the name of the platform.
|
||||||
|
*}
|
||||||
|
function SDL_GetPlatform: PAnsiChar cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetPlatform' {$ENDIF} {$ENDIF};
|
26
model_viewer/sdl2/sdlpower.inc
Normal file
26
model_viewer/sdl2/sdlpower.inc
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
//from "sdl_power.h"
|
||||||
|
|
||||||
|
{**
|
||||||
|
* The basic state for the system's power supply.
|
||||||
|
*}
|
||||||
|
type
|
||||||
|
TSDL_PowerState = (SDL_POWERSTATE_UNKNOWN, {**< cannot determine power status *}
|
||||||
|
SDL_POWERSTATE_ON_BATTERY, {**< Not plugged in, running on the battery *}
|
||||||
|
SDL_POWERSTATE_NO_BATTERY, {**< Plugged in, no battery available *}
|
||||||
|
SDL_POWERSTATE_CHARGING, {**< Plugged in, charging battery *}
|
||||||
|
SDL_POWERSTATE_CHARGED); {**< Plugged in, battery charged *}
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the current power supply details.
|
||||||
|
*
|
||||||
|
* secs Seconds of battery life left. You can pass a NULL here if
|
||||||
|
* you don't care. Will return -1 if we can't determine a
|
||||||
|
* value, or we're not running on a battery.
|
||||||
|
*
|
||||||
|
* pct Percentage of battery life left, between 0 and 100. You can
|
||||||
|
* pass a NULL here if you don't care. Will return -1 if we
|
||||||
|
* can't determine a value, or we're not running on a battery.
|
||||||
|
*
|
||||||
|
* The state of the battery (if any).
|
||||||
|
*}
|
||||||
|
function SDL_GetPowerInfo(secs: PInt; pct: PInt): TSDL_PowerState cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetPowerInfo' {$ENDIF} {$ENDIF};
|
88
model_viewer/sdl2/sdlrect.inc
Normal file
88
model_viewer/sdl2/sdlrect.inc
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
//from "sdl_rect.h"
|
||||||
|
|
||||||
|
type
|
||||||
|
{**
|
||||||
|
* The structure that defines a point
|
||||||
|
*
|
||||||
|
* SDL_EnclosePoints
|
||||||
|
*}
|
||||||
|
|
||||||
|
PSDL_Point = ^TSDL_Point;
|
||||||
|
TSDL_Point = record
|
||||||
|
x: SInt32;
|
||||||
|
y: SInt32;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* A rectangle, with the origin at the upper left.
|
||||||
|
*
|
||||||
|
* SDL_RectEmpty
|
||||||
|
* SDL_RectEquals
|
||||||
|
* SDL_HasIntersection
|
||||||
|
* SDL_IntersectRect
|
||||||
|
* SDL_UnionRect
|
||||||
|
* SDL_EnclosePoints
|
||||||
|
*}
|
||||||
|
|
||||||
|
PSDL_Rect = ^TSDL_Rect;
|
||||||
|
TSDL_Rect = record
|
||||||
|
x,y: SInt32;
|
||||||
|
w,h: SInt32;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief Returns true if point resides inside a rectangle.
|
||||||
|
*}
|
||||||
|
function SDL_PointInRect(const p: PSDL_Point; const r: PSDL_Rect): Boolean; Inline;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Returns true if the rectangle has no area.
|
||||||
|
*}
|
||||||
|
|
||||||
|
//changed from variant(b<><62><EFBFBD><EFBFBD><EFBFBD>h!) to TSDL_Rect
|
||||||
|
//maybe PSDL_Rect?
|
||||||
|
function SDL_RectEmpty(X: TSDL_Rect): Boolean;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Returns true if the two rectangles are equal.
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_RectEquals(A: TSDL_Rect; B: TSDL_Rect): Boolean;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Determine whether two rectangles intersect.
|
||||||
|
*
|
||||||
|
* SDL_TRUE if there is an intersection, SDL_FALSE otherwise.
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_HasIntersection(const A: PSDL_Rect; const B: PSDL_Rect): TSDL_Bool cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_HasIntersection' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Calculate the intersection of two rectangles.
|
||||||
|
*
|
||||||
|
* SDL_TRUE if there is an intersection, SDL_FALSE otherwise.
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_IntersectRect(const A: PSDL_Rect; const B: PSDL_Rect; result: PSDL_Rect): TSDL_Bool cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_IntersectRect' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Calculate the union of two rectangles.
|
||||||
|
*}
|
||||||
|
|
||||||
|
procedure SDL_UnionRect(const A: PSDL_Rect; const B: PSDL_Rect; result: PSDL_Rect) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_UnionRect' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Calculate a minimal rectangle enclosing a set of points
|
||||||
|
*
|
||||||
|
* SDL_TRUE if any points were within the clipping rect
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_EnclosePoints(const points: PSDL_Point; count: SInt32; const clip: PSDL_Rect; result: PSDL_Rect): TSDL_Bool cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_EnclosePoints' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Calculate the intersection of a rectangle and line segment.
|
||||||
|
*
|
||||||
|
* SDL_TRUE if there is an intersection, SDL_FALSE otherwise.
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_IntersectRectAndLine(const rect: PSDL_Rect; X1: PInt; Y1: PInt; X2: PInt; Y2: PInt): TSDL_Bool cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_IntersectRectAndLine' {$ENDIF} {$ENDIF};
|
753
model_viewer/sdl2/sdlrenderer.inc
Normal file
753
model_viewer/sdl2/sdlrenderer.inc
Normal file
@ -0,0 +1,753 @@
|
|||||||
|
//from "sdl_renderer.h"
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Flags used when creating a rendering context
|
||||||
|
*}
|
||||||
|
const
|
||||||
|
SDL_RENDERER_SOFTWARE = $00000001; {**< The renderer is a software fallback *}
|
||||||
|
SDL_RENDERER_ACCELERATED = $00000002; {**< The renderer uses hardware
|
||||||
|
acceleration *}
|
||||||
|
SDL_RENDERER_PRESENTVSYNC = $00000004; {**< Present is synchronized
|
||||||
|
with the refresh rate *}
|
||||||
|
SDL_RENDERER_TARGETTEXTURE = $00000008; {**< The renderer supports
|
||||||
|
rendering to texture *}
|
||||||
|
|
||||||
|
type
|
||||||
|
PSDL_RendererFlags = ^TSDL_RendererFlags;
|
||||||
|
TSDL_RendererFlags = Word;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Information on the capabilities of a render driver or context.
|
||||||
|
*}
|
||||||
|
PSDL_RendererInfo = ^TSDL_RendererInfo;
|
||||||
|
TSDL_RendererInfo = record
|
||||||
|
name: PAnsiChar; {**< The name of the renderer *}
|
||||||
|
flags: UInt32; {**< Supported ::SDL_RendererFlags *}
|
||||||
|
num_texture_formats: UInt32; {**< The number of available texture formats *}
|
||||||
|
texture_formats: array[0..15] of UInt32; {**< The available texture formats *}
|
||||||
|
max_texture_width: SInt32; {**< The maximimum texture width *}
|
||||||
|
max_texture_height: SInt32; {**< The maximimum texture height *}
|
||||||
|
end;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* The access pattern allowed for a texture.
|
||||||
|
*}
|
||||||
|
type
|
||||||
|
PSDL_TextureAccess = ^TSDL_TextureAccess;
|
||||||
|
TSDL_TextureAccess = SInt32;
|
||||||
|
|
||||||
|
const
|
||||||
|
SDL_TEXTUREACCESS_STATIC = 0; {**< Changes rarely, not lockable *}
|
||||||
|
SDL_TEXTUREACCESS_STREAMING = 1; {**< Changes frequently, lockable *}
|
||||||
|
SDL_TEXTUREACCESS_TARGET = 2; {**< Texture can be used as a render target *}
|
||||||
|
|
||||||
|
type
|
||||||
|
{**
|
||||||
|
* The texture channel modulation used in SDL_RenderCopy().
|
||||||
|
*}
|
||||||
|
PSDL_TextureModulate = ^TSDL_TextureModulate;
|
||||||
|
TSDL_TextureModulate = (
|
||||||
|
SDL_TEXTUREMODULATE_NONE, {**< No modulation *}
|
||||||
|
SDL_TEXTUREMODULATE_COLOR, {**< srcC = srcC * color *}
|
||||||
|
SDL_TEXTUREMODULATE_ALPHA {**< srcA = srcA * alpha *}
|
||||||
|
);
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Flip constants for SDL_RenderCopyEx
|
||||||
|
*}
|
||||||
|
type
|
||||||
|
PSDL_RendererFlip = ^TSDL_RendererFlip;
|
||||||
|
TSDL_RendererFlip = (SDL_FLIP_NONE, {**< Do not flip *}
|
||||||
|
SDL_FLIP_HORIZONTAL, {**< flip horizontally *}
|
||||||
|
SDL_FLIP_VERTICAL {**< flip vertically *}
|
||||||
|
);
|
||||||
|
|
||||||
|
{**
|
||||||
|
* A structure representing rendering state
|
||||||
|
*}
|
||||||
|
|
||||||
|
PPSDL_Renderer = ^PSDL_Renderer;
|
||||||
|
PSDL_Renderer = ^TSDL_Renderer;
|
||||||
|
TSDL_Renderer = record
|
||||||
|
end;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* An efficient driver-specific representation of pixel data
|
||||||
|
*}
|
||||||
|
PSDL_Texture = ^TSDL_Texture;
|
||||||
|
TSDL_Texture = record
|
||||||
|
end;
|
||||||
|
|
||||||
|
{* Function prototypes *}
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the number of 2D rendering drivers available for the current
|
||||||
|
* display.
|
||||||
|
*
|
||||||
|
* A render driver is a set of code that handles rendering and texture
|
||||||
|
* management on a particular display. Normally there is only one, but
|
||||||
|
* some drivers may have several available with different capabilities.
|
||||||
|
*
|
||||||
|
* SDL_GetRenderDriverInfo()
|
||||||
|
* SDL_CreateRenderer()
|
||||||
|
*}
|
||||||
|
function SDL_GetNumRenderDrivers: SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetNumRenderDrivers' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get information about a specific 2D rendering driver for the current
|
||||||
|
* display.
|
||||||
|
*
|
||||||
|
* index The index of the driver to query information about.
|
||||||
|
* info A pointer to an SDL_RendererInfo struct to be filled with
|
||||||
|
* information on the rendering driver.
|
||||||
|
*
|
||||||
|
* 0 on success, -1 if the index was out of range.
|
||||||
|
*
|
||||||
|
* SDL_CreateRenderer()
|
||||||
|
*}
|
||||||
|
function SDL_GetRenderDriverInfo(index: SInt32; info: PSDL_RendererInfo): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetRenderDriverInfo' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Create a window and default renderer
|
||||||
|
*
|
||||||
|
* width The width of the window
|
||||||
|
* height The height of the window
|
||||||
|
* window_flags The flags used to create the window
|
||||||
|
* window A pointer filled with the window, or NULL on error
|
||||||
|
* renderer A pointer filled with the renderer, or NULL on error
|
||||||
|
*
|
||||||
|
* 0 on success, or -1 on error
|
||||||
|
*}
|
||||||
|
function SDL_CreateWindowAndRenderer(width: SInt32; height: SInt32; window_flags: UInt32; window: PPSDL_Window; renderer: PPSDL_Renderer): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_CreateWindowAndRenderer' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Create a 2D rendering context for a window.
|
||||||
|
*
|
||||||
|
* window The window where rendering is displayed.
|
||||||
|
* index The index of the rendering driver to initialize, or -1 to
|
||||||
|
* initialize the first one supporting the requested flags.
|
||||||
|
* flags ::SDL_RendererFlags.
|
||||||
|
*
|
||||||
|
* A valid rendering context or NULL if there was an error.
|
||||||
|
*
|
||||||
|
* SDL_CreateSoftwareRenderer()
|
||||||
|
* SDL_GetRendererInfo()
|
||||||
|
* SDL_DestroyRenderer()
|
||||||
|
*}
|
||||||
|
function SDL_CreateRenderer(window: PSDL_Window; index: SInt32; flags: UInt32): PSDL_Renderer cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_CreateRenderer' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Create a 2D software rendering context for a surface.
|
||||||
|
*
|
||||||
|
* surface The surface where rendering is done.
|
||||||
|
*
|
||||||
|
* A valid rendering context or NULL if there was an error.
|
||||||
|
*
|
||||||
|
* SDL_CreateRenderer()
|
||||||
|
* SDL_DestroyRenderer()
|
||||||
|
*}
|
||||||
|
function SDL_CreateSoftwareRenderer(surface: PSDL_Surface): PSDL_Renderer cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_CreateSoftwareRenderer' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the renderer associated with a window.
|
||||||
|
*}
|
||||||
|
function SDL_GetRenderer(window: PSDL_Window): PSDL_Renderer cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetRenderer' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get information about a rendering context.
|
||||||
|
*}
|
||||||
|
function SDL_GetRendererInfo(renderer: PSDL_Renderer; info: PSDL_RendererInfo): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetRendererInfo' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the output size of a rendering context.
|
||||||
|
*}
|
||||||
|
function SDL_GetRendererOutputSize(renderer: PSDL_Renderer; w: PInt; h: PInt): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetRendererOutputSize' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Create a texture for a rendering context.
|
||||||
|
*
|
||||||
|
* renderer The renderer.
|
||||||
|
* format The format of the texture.
|
||||||
|
* access One of the enumerated values in ::SDL_TextureAccess.
|
||||||
|
* w The width of the texture in pixels.
|
||||||
|
* h The height of the texture in pixels.
|
||||||
|
*
|
||||||
|
* The created texture is returned, or 0 if no rendering context was
|
||||||
|
* active, the format was unsupported, or the width or height were out
|
||||||
|
* of range.
|
||||||
|
*
|
||||||
|
* SDL_QueryTexture()
|
||||||
|
* SDL_UpdateTexture()
|
||||||
|
* SDL_DestroyTexture()
|
||||||
|
*}
|
||||||
|
function SDL_CreateTexture(renderer: PSDL_Renderer; format: UInt32; access: SInt32; w: SInt32; h: SInt32): PSDL_Texture cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_CreateTexture' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Create a texture from an existing surface.
|
||||||
|
*
|
||||||
|
* renderer The renderer.
|
||||||
|
* surface The surface containing pixel data used to fill the texture.
|
||||||
|
*
|
||||||
|
* The created texture is returned, or 0 on error.
|
||||||
|
*
|
||||||
|
* The surface is not modified or freed by this function.
|
||||||
|
*
|
||||||
|
* SDL_QueryTexture()
|
||||||
|
* SDL_DestroyTexture()
|
||||||
|
*}
|
||||||
|
function SDL_CreateTextureFromSurface(renderer: PSDL_Renderer; surface: PSDL_Surface): PSDL_Texture cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_CreateTextureFromSurface' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Query the attributes of a texture
|
||||||
|
*
|
||||||
|
* texture A texture to be queried.
|
||||||
|
* format A pointer filled in with the raw format of the texture. The
|
||||||
|
* actual format may differ, but pixel transfers will use this
|
||||||
|
* format.
|
||||||
|
* access A pointer filled in with the actual access to the texture.
|
||||||
|
* w A pointer filled in with the width of the texture in pixels.
|
||||||
|
* h A pointer filled in with the height of the texture in pixels.
|
||||||
|
*
|
||||||
|
* 0 on success, or -1 if the texture is not valid.
|
||||||
|
*}
|
||||||
|
function SDL_QueryTexture(texture: PSDL_Texture; format: PUInt32; access: PInt; w: PInt; h: PInt): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_QueryTexture' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Set an additional color value used in render copy operations.
|
||||||
|
*
|
||||||
|
* texture The texture to update.
|
||||||
|
* r The red color value multiplied into copy operations.
|
||||||
|
* g The green color value multiplied into copy operations.
|
||||||
|
* b The blue color value multiplied into copy operations.
|
||||||
|
*
|
||||||
|
* 0 on success, or -1 if the texture is not valid or color modulation
|
||||||
|
* is not supported.
|
||||||
|
*
|
||||||
|
* SDL_GetTextureColorMod()
|
||||||
|
*}
|
||||||
|
function SDL_SetTextureColorMod(texture: PSDL_Texture; r: UInt8; g: UInt8; b: UInt8): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_SetTextureColorMod' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the additional color value used in render copy operations.
|
||||||
|
*
|
||||||
|
* texture The texture to query.
|
||||||
|
* r A pointer filled in with the current red color value.
|
||||||
|
* g A pointer filled in with the current green color value.
|
||||||
|
* b A pointer filled in with the current blue color value.
|
||||||
|
*
|
||||||
|
* 0 on success, or -1 if the texture is not valid.
|
||||||
|
*
|
||||||
|
* SDL_SetTextureColorMod()
|
||||||
|
*}
|
||||||
|
function SDL_GetTextureColorMod(texture: PSDL_Texture; r: PUInt8; g: PUInt8; b: PUInt8): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetTextureColorMod' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Set an additional alpha value used in render copy operations.
|
||||||
|
*
|
||||||
|
* texture The texture to update.
|
||||||
|
* alpha The alpha value multiplied into copy operations.
|
||||||
|
*
|
||||||
|
* 0 on success, or -1 if the texture is not valid or alpha modulation
|
||||||
|
* is not supported.
|
||||||
|
*
|
||||||
|
* SDL_GetTextureAlphaMod()
|
||||||
|
*}
|
||||||
|
function SDL_SetTextureAlphaMod(texture: PSDL_Texture; alpha: UInt8): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_SetTextureAlphaMod' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the additional alpha value used in render copy operations.
|
||||||
|
*
|
||||||
|
* texture The texture to query.
|
||||||
|
* alpha A pointer filled in with the current alpha value.
|
||||||
|
*
|
||||||
|
* 0 on success, or -1 if the texture is not valid.
|
||||||
|
*
|
||||||
|
* SDL_SetTextureAlphaMod()
|
||||||
|
*}
|
||||||
|
function SDL_GetTextureAlphaMod(texture: PSDL_Texture; alpha: PUInt8): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetTextureAlphaMod' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Set the blend mode used for texture copy operations.
|
||||||
|
*
|
||||||
|
* texture The texture to update.
|
||||||
|
* blendMode ::SDL_BlendMode to use for texture blending.
|
||||||
|
*
|
||||||
|
* 0 on success, or -1 if the texture is not valid or the blend mode is
|
||||||
|
* not supported.
|
||||||
|
*
|
||||||
|
* If the blend mode is not supported, the closest supported mode is
|
||||||
|
* chosen.
|
||||||
|
*
|
||||||
|
* SDL_GetTextureBlendMode()
|
||||||
|
*}
|
||||||
|
function SDL_SetTextureBlendMode(texture: PSDL_Texture; blendMode: TSDL_BlendMode): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_SetTextureBlendMode' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the blend mode used for texture copy operations.
|
||||||
|
*
|
||||||
|
* texture The texture to query.
|
||||||
|
* blendMode A pointer filled in with the current blend mode.
|
||||||
|
*
|
||||||
|
* 0 on success, or -1 if the texture is not valid.
|
||||||
|
*
|
||||||
|
* SDL_SetTextureBlendMode()
|
||||||
|
*}
|
||||||
|
function SDL_GetTextureBlendMode(texture: PSDL_Texture; blendMode: PSDL_BlendMode): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetTextureBlendMode' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Update the given texture rectangle with new pixel data.
|
||||||
|
*
|
||||||
|
* texture The texture to update
|
||||||
|
* rect A pointer to the rectangle of pixels to update, or NULL to
|
||||||
|
* update the entire texture.
|
||||||
|
* pixels The raw pixel data.
|
||||||
|
* pitch The number of bytes between rows of pixel data.
|
||||||
|
*
|
||||||
|
* 0 on success, or -1 if the texture is not valid.
|
||||||
|
*
|
||||||
|
* This is a fairly slow function.
|
||||||
|
*}
|
||||||
|
function SDL_UpdateTexture(texture: PSDL_Texture; rect: PSDL_Rect; pixels: Pointer; pitch: SInt32): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_UpdateTexture' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Lock a portion of the texture for write-only pixel access.
|
||||||
|
*
|
||||||
|
* texture The texture to lock for access, which was created with
|
||||||
|
* SDL_TEXTUREACCESS_STREAMING.
|
||||||
|
* rect A pointer to the rectangle to lock for access. If the rect
|
||||||
|
* is NULL, the entire texture will be locked.
|
||||||
|
* pixels This is filled in with a pointer to the locked pixels,
|
||||||
|
* appropriately offset by the locked area.
|
||||||
|
* pitch This is filled in with the pitch of the locked pixels.
|
||||||
|
*
|
||||||
|
* 0 on success, or -1 if the texture is not valid or was not created with ::SDL_TEXTUREACCESS_STREAMING.
|
||||||
|
*
|
||||||
|
* SDL_UnlockTexture()
|
||||||
|
*}
|
||||||
|
function SDL_LockTexture(texture: PSDL_Texture; rect: PSDL_Rect; pixels: PPointer; pitch: PInt): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_LockTexture' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Unlock a texture, uploading the changes to video memory, if needed.
|
||||||
|
*
|
||||||
|
* SDL_LockTexture()
|
||||||
|
*}
|
||||||
|
procedure SDL_UnlockTexture(texture: PSDL_Texture) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_LockTexture' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Determines whether a window supports the use of render targets
|
||||||
|
*
|
||||||
|
* renderer The renderer that will be checked
|
||||||
|
*
|
||||||
|
* SDL_TRUE if supported, SDL_FALSE if not.
|
||||||
|
*}
|
||||||
|
function SDL_RenderTargetSupported(renderer: PSDL_Renderer): Boolean cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_RenderTargetSupported' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Set a texture as the current rendering target.
|
||||||
|
*
|
||||||
|
* renderer The renderer.
|
||||||
|
* texture The targeted texture, which must be created with the SDL_TEXTUREACCESS_TARGET flag, or NULL for the default render target
|
||||||
|
*
|
||||||
|
* 0 on success, or -1 on error
|
||||||
|
*
|
||||||
|
* SDL_GetRenderTarget()
|
||||||
|
*}
|
||||||
|
function SDL_SetRenderTarget(renderer: PSDL_Renderer; texture: PSDL_Texture): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_SetRenderTarget' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the current render target or NULL for the default render target.
|
||||||
|
*
|
||||||
|
* The current render target
|
||||||
|
*
|
||||||
|
* SDL_SetRenderTarget()
|
||||||
|
*}
|
||||||
|
function SDL_GetRenderTarget(renderer: PSDL_Renderer): PSDL_Texture cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetRenderTarget' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Set device independent resolution for rendering
|
||||||
|
*
|
||||||
|
* renderer The renderer for which resolution should be set.
|
||||||
|
* w The width of the logical resolution
|
||||||
|
* h The height of the logical resolution
|
||||||
|
*
|
||||||
|
* This function uses the viewport and scaling functionality to allow a fixed logical
|
||||||
|
* resolution for rendering, regardless of the actual output resolution. If the actual
|
||||||
|
* output resolution doesn't have the same aspect ratio the output rendering will be
|
||||||
|
* centered within the output display.
|
||||||
|
*
|
||||||
|
* If the output display is a window, mouse events in the window will be filtered
|
||||||
|
* and scaled so they seem to arrive within the logical resolution.
|
||||||
|
*
|
||||||
|
* If this function results in scaling or subpixel drawing by the
|
||||||
|
* rendering backend, it will be handled using the appropriate
|
||||||
|
* quality hints.
|
||||||
|
*
|
||||||
|
* SDL_RenderGetLogicalSize()
|
||||||
|
* SDL_RenderSetScale()
|
||||||
|
* SDL_RenderSetViewport()
|
||||||
|
*}
|
||||||
|
function SDL_RenderSetLogicalSize(renderer: PSDL_Renderer; w: SInt32; h: SInt32): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_RenderSetLogicalSize' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get device independent resolution for rendering
|
||||||
|
*
|
||||||
|
* renderer The renderer from which resolution should be queried.
|
||||||
|
* w A pointer filled with the width of the logical resolution
|
||||||
|
* h A pointer filled with the height of the logical resolution
|
||||||
|
*
|
||||||
|
* SDL_RenderSetLogicalSize()
|
||||||
|
*}
|
||||||
|
procedure SDL_RenderGetLogicalSize(renderer: PSDL_Renderer; w: PInt; h: PInt) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_RenderGetLogicalSize' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Set the drawing area for rendering on the current target.
|
||||||
|
*
|
||||||
|
* renderer The renderer for which the drawing area should be set.
|
||||||
|
* rect The rectangle representing the drawing area, or NULL to set the viewport to the entire target.
|
||||||
|
*
|
||||||
|
* The x,y of the viewport rect represents the origin for rendering.
|
||||||
|
*
|
||||||
|
* 0 on success, or -1 on error
|
||||||
|
*
|
||||||
|
* If the window associated with the renderer is resized, the viewport is automatically reset.
|
||||||
|
*
|
||||||
|
* SDL_RenderGetViewport()
|
||||||
|
* SDL_RenderSetLogicalSize()
|
||||||
|
*}
|
||||||
|
function SDL_RenderSetViewport(renderer: PSDL_Renderer; const rect: PSDL_Rect): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_RenderSetViewport' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the drawing area for the current target.
|
||||||
|
*
|
||||||
|
* SDL_RenderSetViewport()
|
||||||
|
*}
|
||||||
|
procedure SDL_RenderGetViewport(renderer: PSDL_Renderer; rect: PSDL_Rect) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_RenderGetViewport' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Set the clip rectangle for the current target.
|
||||||
|
*
|
||||||
|
* renderer The renderer for which clip rectangle should be set.
|
||||||
|
* rect A pointer to the rectangle to set as the clip rectangle, or
|
||||||
|
* NULL to disable clipping.
|
||||||
|
*
|
||||||
|
* 0 on success, or -1 on error
|
||||||
|
*
|
||||||
|
* SDL_RenderGetClipRect()
|
||||||
|
*}
|
||||||
|
function SDL_RenderSetClipRect(renderer: PSDL_Renderer; rect: PSDL_Rect): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_RenderSetClipRect' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the clip rectangle for the current target.
|
||||||
|
*
|
||||||
|
* renderer The renderer from which clip rectangle should be queried.
|
||||||
|
* rect A pointer filled in with the current clip rectangle, or
|
||||||
|
* an empty rectangle if clipping is disabled.
|
||||||
|
*
|
||||||
|
* SDL_RenderSetClipRect()
|
||||||
|
*}
|
||||||
|
procedure SDL_RenderGetClipRect(renderer: PSDL_Renderer; rect: PSDL_Rect) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_RenderGetClipRect' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief Get whether clipping is enabled on the given renderer.
|
||||||
|
*
|
||||||
|
* \param renderer The renderer from which clip state should be queried.
|
||||||
|
*
|
||||||
|
* \sa SDL_RenderGetClipRect()
|
||||||
|
*}
|
||||||
|
function SDL_RenderIsClipEnabled(renderer: PSDL_Renderer): TSDL_Bool; cdecl;
|
||||||
|
external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_RenderIsClipEnabled' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Set the drawing scale for rendering on the current target.
|
||||||
|
*
|
||||||
|
* renderer The renderer for which the drawing scale should be set.
|
||||||
|
* scaleX The horizontal scaling factor
|
||||||
|
* scaleY The vertical scaling factor
|
||||||
|
*
|
||||||
|
* The drawing coordinates are scaled by the x/y scaling factors
|
||||||
|
* before they are used by the renderer. This allows resolution
|
||||||
|
* independent drawing with a single coordinate system.
|
||||||
|
*
|
||||||
|
* If this results in scaling or subpixel drawing by the
|
||||||
|
* rendering backend, it will be handled using the appropriate
|
||||||
|
* quality hints. For best results use integer scaling factors.
|
||||||
|
*
|
||||||
|
* SDL_RenderGetScale()
|
||||||
|
* SDL_RenderSetLogicalSize()
|
||||||
|
*}
|
||||||
|
function SDL_RenderSetScale(renderer: PSDL_Renderer; scaleX: Float; scaleY: Float): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_RenderSetScale' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the drawing scale for the current target.
|
||||||
|
*
|
||||||
|
* renderer The renderer from which drawing scale should be queried.
|
||||||
|
* scaleX A pointer filled in with the horizontal scaling factor
|
||||||
|
* scaleY A pointer filled in with the vertical scaling factor
|
||||||
|
*
|
||||||
|
* SDL_RenderSetScale()
|
||||||
|
*}
|
||||||
|
procedure SDL_RenderGetScale(renderer: PSDL_Renderer; scaleX: PFloat; scaleY: PFloat) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_RenderGetScale' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Set the color used for drawing operations (Rect, Line and Clear).
|
||||||
|
*
|
||||||
|
* renderer The renderer for which drawing color should be set.
|
||||||
|
* r The red value used to draw on the rendering target.
|
||||||
|
* g The green value used to draw on the rendering target.
|
||||||
|
* b The blue value used to draw on the rendering target.
|
||||||
|
* a The alpha value used to draw on the rendering target, usually
|
||||||
|
* SDL_ALPHA_OPAQUE (255).
|
||||||
|
*
|
||||||
|
* 0 on success, or -1 on error
|
||||||
|
*}
|
||||||
|
function SDL_SetRenderDrawColor(renderer: PSDL_Renderer; r: UInt8; g: UInt8; b: UInt8; a: UInt8): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_SetRenderDrawColor' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the color used for drawing operations (Rect, Line and Clear).
|
||||||
|
*
|
||||||
|
* renderer The renderer from which drawing color should be queried.
|
||||||
|
* r A pointer to the red value used to draw on the rendering target.
|
||||||
|
* g A pointer to the green value used to draw on the rendering target.
|
||||||
|
* b A pointer to the blue value used to draw on the rendering target.
|
||||||
|
* a A pointer to the alpha value used to draw on the rendering target,
|
||||||
|
* usually SDL_ALPHA_OPAQUE (255).
|
||||||
|
*
|
||||||
|
* 0 on success, or -1 on error
|
||||||
|
*}
|
||||||
|
function SDL_GetRenderDrawColor(renderer: PSDL_Renderer; r: PUInt8; g: PUInt8; b: PUInt8; a: PUInt8): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetRenderDrawColor' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Set the blend mode used for drawing operations (Fill and Line).
|
||||||
|
*
|
||||||
|
* renderer The renderer for which blend mode should be set.
|
||||||
|
* blendMode SDL_BlendMode to use for blending.
|
||||||
|
*
|
||||||
|
* 0 on success, or -1 on error
|
||||||
|
*
|
||||||
|
* If the blend mode is not supported, the closest supported mode is
|
||||||
|
* chosen.
|
||||||
|
*
|
||||||
|
* SDL_GetRenderDrawBlendMode()
|
||||||
|
*}
|
||||||
|
function SDL_SetRenderDrawBlendMode(renderer: PSDL_Renderer; blendMode: TSDL_BlendMode): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_SetRenderDrawBlendMode' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the blend mode used for drawing operations.
|
||||||
|
*
|
||||||
|
* renderer The renderer from which blend mode should be queried.
|
||||||
|
* blendMode A pointer filled in with the current blend mode.
|
||||||
|
*
|
||||||
|
* 0 on success, or -1 on error
|
||||||
|
*
|
||||||
|
* SDL_SetRenderDrawBlendMode()
|
||||||
|
*}
|
||||||
|
function SDL_GetRenderDrawBlendMode(renderer: PSDL_Renderer; blendMode: PSDL_BlendMode): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetRenderDrawBlendMode' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Clear the current rendering target with the drawing color
|
||||||
|
*
|
||||||
|
* This function clears the entire rendering target, ignoring the viewport.
|
||||||
|
*
|
||||||
|
* 0 on success, or -1 on error
|
||||||
|
*}
|
||||||
|
function SDL_RenderClear(renderer: PSDL_Renderer): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_RenderClear' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Draw a point on the current rendering target.
|
||||||
|
*
|
||||||
|
* renderer The renderer which should draw a point.
|
||||||
|
* x The x coordinate of the point.
|
||||||
|
* y The y coordinate of the point.
|
||||||
|
*
|
||||||
|
* 0 on success, or -1 on error
|
||||||
|
*}
|
||||||
|
function SDL_RenderDrawPoint(renderer: PSDL_Renderer; x: SInt32; y: SInt32): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_RenderDrawPoint' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Draw multiple points on the current rendering target.
|
||||||
|
*
|
||||||
|
* renderer The renderer which should draw multiple points.
|
||||||
|
* points The points to draw
|
||||||
|
* count The number of points to draw
|
||||||
|
*
|
||||||
|
* 0 on success, or -1 on error
|
||||||
|
*}
|
||||||
|
function SDL_RenderDrawPoints(renderer: PSDL_Renderer; points: PSDL_Point; count: SInt32): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_RenderDrawPoints' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Draw a line on the current rendering target.
|
||||||
|
*
|
||||||
|
* renderer The renderer which should draw a line.
|
||||||
|
* x1 The x coordinate of the start point.
|
||||||
|
* y1 The y coordinate of the start point.
|
||||||
|
* x2 The x coordinate of the end point.
|
||||||
|
* y2 The y coordinate of the end point.
|
||||||
|
*
|
||||||
|
* 0 on success, or -1 on error
|
||||||
|
*}
|
||||||
|
function SDL_RenderDrawLine(renderer: PSDL_Renderer; x1: SInt32; y1: SInt32; x2: SInt32; y2: SInt32): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_RenderDrawLine' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief Draw a series of connected lines on the current rendering target.
|
||||||
|
*
|
||||||
|
* \param renderer The renderer which should draw multiple lines.
|
||||||
|
* \param points The points along the lines
|
||||||
|
* \param count The number of points, drawing count-1 lines
|
||||||
|
*
|
||||||
|
* \return 0 on success, or -1 on error
|
||||||
|
*}
|
||||||
|
function SDL_RenderDrawLines(renderer: PSDL_Renderer; points: PSDL_Point; count: SInt32): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_RenderDrawLines' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Draw a rectangle on the current rendering target.
|
||||||
|
*
|
||||||
|
* renderer The renderer which should draw a rectangle.
|
||||||
|
* rect A pointer to the destination rectangle, or NULL to outline the entire rendering target.
|
||||||
|
*
|
||||||
|
* 0 on success, or -1 on error
|
||||||
|
*}
|
||||||
|
function SDL_RenderDrawRect(renderer: PSDL_Renderer; rect: PSDL_Rect): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_RenderDrawRect' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Draw some number of rectangles on the current rendering target.
|
||||||
|
*
|
||||||
|
* renderer The renderer which should draw multiple rectangles.
|
||||||
|
* rects A pointer to an array of destination rectangles.
|
||||||
|
* count The number of rectangles.
|
||||||
|
*
|
||||||
|
* 0 on success, or -1 on error
|
||||||
|
*}
|
||||||
|
function SDL_RenderDrawRects(renderer: PSDL_Renderer; rects: PSDL_Rect; count: SInt32): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_RenderDrawRects' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Fill a rectangle on the current rendering target with the drawing color.
|
||||||
|
*
|
||||||
|
* renderer The renderer which should fill a rectangle.
|
||||||
|
* rect A pointer to the destination rectangle, or NULL for the entire
|
||||||
|
* rendering target.
|
||||||
|
*
|
||||||
|
* 0 on success, or -1 on error
|
||||||
|
*}
|
||||||
|
function SDL_RenderFillRect(renderer: PSDL_Renderer; rect: PSDL_Rect): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_RenderFillRect' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Fill some number of rectangles on the current rendering target with the drawing color.
|
||||||
|
*
|
||||||
|
* renderer The renderer which should fill multiple rectangles.
|
||||||
|
* rects A pointer to an array of destination rectangles.
|
||||||
|
* count The number of rectangles.
|
||||||
|
*
|
||||||
|
* 0 on success, or -1 on error
|
||||||
|
*}
|
||||||
|
function SDL_RenderFillRects(renderer: PSDL_Renderer; rects: PSDL_Rect; count: SInt32): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_RenderFillRects' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Copy a portion of the texture to the current rendering target.
|
||||||
|
*
|
||||||
|
* renderer The renderer which should copy parts of a texture.
|
||||||
|
* texture The source texture.
|
||||||
|
* srcrect A pointer to the source rectangle, or NULL for the entire
|
||||||
|
* texture.
|
||||||
|
* dstrect A pointer to the destination rectangle, or NULL for the
|
||||||
|
* entire rendering target.
|
||||||
|
*
|
||||||
|
* 0 on success, or -1 on error
|
||||||
|
*}
|
||||||
|
function SDL_RenderCopy(renderer: PSDL_Renderer; texture: PSDL_Texture; srcrect: PSDL_Rect; dstrect: PSDL_Rect): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_RenderCopy' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Copy a portion of the source texture to the current rendering target, rotating it by angle around the given center
|
||||||
|
*
|
||||||
|
* renderer The renderer which should copy parts of a texture.
|
||||||
|
* texture The source texture.
|
||||||
|
* srcrect A pointer to the source rectangle, or NULL for the entire
|
||||||
|
* texture.
|
||||||
|
* dstrect A pointer to the destination rectangle, or NULL for the
|
||||||
|
* entire rendering target.
|
||||||
|
* angle An angle in degrees that indicates the rotation that will be applied to dstrect
|
||||||
|
* center A pointer to a point indicating the point around which dstrect will be rotated (if NULL, rotation will be done aroud dstrect.w/2, dstrect.h/2)
|
||||||
|
* flip An SDL_RendererFlip value stating which flipping actions should be performed on the texture
|
||||||
|
*
|
||||||
|
* 0 on success, or -1 on error
|
||||||
|
*}
|
||||||
|
function SDL_RenderCopyEx(renderer: PSDL_Renderer; texture: PSDL_Texture; const srcrect: PSDL_Rect; dstrect: PSDL_Rect; angle: Double; center: PSDL_Point; flip: TSDL_RendererFlip): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_RenderCopyEx' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Read pixels from the current rendering target.
|
||||||
|
*
|
||||||
|
* renderer The renderer from which pixels should be read.
|
||||||
|
* rect A pointer to the rectangle to read, or NULL for the entire
|
||||||
|
* render target.
|
||||||
|
* format The desired format of the pixel data, or 0 to use the format
|
||||||
|
* of the rendering target
|
||||||
|
* pixels A pointer to be filled in with the pixel data
|
||||||
|
* pitch The pitch of the pixels parameter.
|
||||||
|
*
|
||||||
|
* 0 on success, or -1 if pixel reading is not supported.
|
||||||
|
*
|
||||||
|
* This is a very slow operation, and should not be used frequently.
|
||||||
|
*}
|
||||||
|
function SDL_RenderReadPixels(renderer: PSDL_Renderer; rect: PSDL_Rect; format: UInt32; pixels: Pointer; pitch: SInt32): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_RenderReadPixels' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Update the screen with rendering performed.
|
||||||
|
*}
|
||||||
|
procedure SDL_RenderPresent(renderer: PSDL_Renderer) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_RenderPresent' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Destroy the specified texture.
|
||||||
|
*
|
||||||
|
* SDL_CreateTexture()
|
||||||
|
* SDL_CreateTextureFromSurface()
|
||||||
|
*}
|
||||||
|
procedure SDL_DestroyTexture(texture: PSDL_Texture) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_DestroyTexture' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Destroy the rendering context for a window and free associated
|
||||||
|
* textures.
|
||||||
|
*
|
||||||
|
* SDL_CreateRenderer()
|
||||||
|
*}
|
||||||
|
procedure SDL_DestroyRenderer(renderer: PSDL_Renderer) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_DestroyRenderer' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Bind the texture to the current OpenGL/ES/ES2 context for use with
|
||||||
|
* OpenGL instructions.
|
||||||
|
*
|
||||||
|
* texture The SDL texture to bind
|
||||||
|
* texw A pointer to a float that will be filled with the texture width
|
||||||
|
* texh A pointer to a float that will be filled with the texture height
|
||||||
|
*
|
||||||
|
* 0 on success, or -1 if the operation is not supported
|
||||||
|
*}
|
||||||
|
function SDL_GL_BindTexture(texture: PSDL_Texture; texw: PFloat; texh: PFloat): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GL_BindTexture' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Unbind a texture from the current OpenGL/ES/ES2 context.
|
||||||
|
*
|
||||||
|
* texture The SDL texture to unbind
|
||||||
|
*
|
||||||
|
* 0 on success, or -1 if the operation is not supported
|
||||||
|
*}
|
||||||
|
function SDL_GL_UnbindTexture(texture: PSDL_Texture): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GL_UnbindTexture' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Update a rectangle within a planar YV12 or IYUV texture with new pixel data.
|
||||||
|
*
|
||||||
|
* texture The texture to update
|
||||||
|
* rect A pointer to the rectangle of pixels to update, or NULL to update the entire texture.
|
||||||
|
* Yplane The raw pixel data for the Y plane.
|
||||||
|
* Ypitch The number of bytes between rows of pixel data for the Y plane.
|
||||||
|
* Uplane The raw pixel data for the U plane.
|
||||||
|
* Upitch The number of bytes between rows of pixel data for the U plane.
|
||||||
|
* Vplane The raw pixel data for the V plane.
|
||||||
|
* Vpitch The number of bytes between rows of pixel data for the V plane.
|
||||||
|
*
|
||||||
|
* 0 on success, or -1 if the texture is not valid.
|
||||||
|
*
|
||||||
|
* You can use SDL_UpdateTexture() as long as your pixel data is
|
||||||
|
* a contiguous block of Y and U/V planes in the proper order, but
|
||||||
|
* this function is available if your pixel data is not contiguous.
|
||||||
|
*}
|
||||||
|
function SDL_UpdateYUVTexture(texture: PSDL_Texture; rect: PSDL_Rect; Yplane: PUInt8; Ypitch: SInt32; Uplane: PUInt8; UPitch: SInt32; Vplane: UInt8; VPitch: SInt32):SInt32;
|
||||||
|
cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_UpdateYUVTexture' {$ENDIF} {$ENDIF};
|
188
model_viewer/sdl2/sdlrwops.inc
Normal file
188
model_viewer/sdl2/sdlrwops.inc
Normal file
@ -0,0 +1,188 @@
|
|||||||
|
//from "sdl_rwops"
|
||||||
|
|
||||||
|
const
|
||||||
|
{* RWops Types *}
|
||||||
|
SDL_RWOPS_UNKNOWN = 0; {* Unknown stream type *}
|
||||||
|
SDL_RWOPS_WINFILE = 1; {* Win32 file *}
|
||||||
|
SDL_RWOPS_STDFILE = 2; {* Stdio file *}
|
||||||
|
SDL_RWOPS_JNIFILE = 3; {* Android asset *}
|
||||||
|
SDL_RWOPS_MEMORY = 4; {* Memory stream *}
|
||||||
|
SDL_RWOPS_MEMORY_RO = 5; {* Read-Only memory stream *}
|
||||||
|
|
||||||
|
type
|
||||||
|
PSDL_RWops = ^TSDL_RWops;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* This is the read/write operation structure -- very basic.
|
||||||
|
*}
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Return the size of the file in this rwops, or -1 if unknown
|
||||||
|
*}
|
||||||
|
TSize = function(context: PSDL_RWops): SInt64; {$IFNDEF GPC} cdecl; {$ENDIF}
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Seek to offset relative to whence, one of stdio's whence values:
|
||||||
|
* RW_SEEK_SET, RW_SEEK_CUR, RW_SEEK_END
|
||||||
|
*
|
||||||
|
* the final offset in the data stream, or -1 on error.
|
||||||
|
*}
|
||||||
|
TSeek = function(context: PSDL_RWops; offset: SInt64; whence: SInt32): SInt64; {$IFNDEF GPC} cdecl; {$ENDIF}
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Read up to maxnum objects each of size size from the data
|
||||||
|
* stream to the area pointed at by ptr.
|
||||||
|
*
|
||||||
|
* the number of objects read, or 0 at error or end of file.
|
||||||
|
*}
|
||||||
|
|
||||||
|
TRead = function(context: PSDL_RWops; ptr: Pointer; size: size_t; maxnum: size_t): size_t; {$IFNDEF GPC} cdecl; {$ENDIF}
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Write exactly num objects each of size size from the area
|
||||||
|
* pointed at by ptr to data stream.
|
||||||
|
*
|
||||||
|
* the number of objects written, or 0 at error or end of file.
|
||||||
|
*}
|
||||||
|
|
||||||
|
TWrite = function(context: PSDL_RWops; const ptr: Pointer; size: size_t; num: size_t): size_t; {$IFNDEF GPC} cdecl; {$ENDIF}
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Close and free an allocated SDL_RWops structure.
|
||||||
|
*
|
||||||
|
* 0 if successful or -1 on write error when flushing data.
|
||||||
|
*}
|
||||||
|
|
||||||
|
TClose = function(context: PSDL_RWops): SInt32; {$IFNDEF GPC} cdecl; {$ENDIF}
|
||||||
|
|
||||||
|
TStdio = record
|
||||||
|
autoclose: TSDL_Bool;
|
||||||
|
fp: file;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TMem = record
|
||||||
|
base: PUInt8;
|
||||||
|
here: PUInt8;
|
||||||
|
stop: PUInt8;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TUnknown = record
|
||||||
|
data1: Pointer;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TAndroidIO = record
|
||||||
|
fileNameRef: Pointer;
|
||||||
|
inputStreamRef: Pointer;
|
||||||
|
readableByteChannelRef: Pointer;
|
||||||
|
readMethod: Pointer;
|
||||||
|
assetFileDescriptorRef: Pointer;
|
||||||
|
position: LongInt;
|
||||||
|
size: LongInt;
|
||||||
|
offset: LongInt;
|
||||||
|
fd: SInt32;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TWindowsIOBuffer = record
|
||||||
|
data: Pointer;
|
||||||
|
size: size_t;
|
||||||
|
left: size_t;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TWindowsIO = record
|
||||||
|
append: TSDL_Bool;
|
||||||
|
h: Pointer;
|
||||||
|
buffer: TWindowsIOBuffer;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TSDL_RWops = packed record
|
||||||
|
size: TSize;
|
||||||
|
seek: TSeek;
|
||||||
|
read: TRead;
|
||||||
|
write: TWrite;
|
||||||
|
close: TClose;
|
||||||
|
|
||||||
|
_type: UInt32;
|
||||||
|
|
||||||
|
case Integer of
|
||||||
|
0: (stdio: TStdio);
|
||||||
|
1: (mem: TMem);
|
||||||
|
2: (unknown: TUnknown);
|
||||||
|
{$IFDEF ANDROID}
|
||||||
|
3: (androidio: TAndroidIO);
|
||||||
|
{$ENDIF}
|
||||||
|
{$IFDEF WINDOWS}
|
||||||
|
3: (windowsio: TWindowsIO);
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* RWFrom functions
|
||||||
|
*
|
||||||
|
* Functions to create SDL_RWops structures from various data streams.
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_RWFromFile(const _file: PAnsiChar; const mode: PAnsiChar): PSDL_RWops; cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_RWFromFile' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{function SDL_RWFromFP(fp: file; autoclose: TSDL_Bool): PSDL_RWops; cdecl; external SDL_LibName;} //don't know if this works
|
||||||
|
|
||||||
|
function SDL_RWFromFP(fp: Pointer; autoclose: TSDL_Bool): PSDL_RWops; cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_RWFromFP' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
function SDL_RWFromMem(mem: Pointer; size: SInt32): PSDL_RWops; cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_RWFromMem' {$ENDIF} {$ENDIF};
|
||||||
|
function SDL_RWFromConstMem(const mem: Pointer; size: SInt32): PSDL_RWops; cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_RWFromConstMem' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{*RWFrom functions*}
|
||||||
|
|
||||||
|
|
||||||
|
function SDL_AllocRW: PSDL_RWops; cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_AllocRW' {$ENDIF} {$ENDIF};
|
||||||
|
procedure SDL_FreeRW(area: PSDL_RWops); cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_FreeRW' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
const
|
||||||
|
RW_SEEK_SET = 0; {**< Seek from the beginning of data *}
|
||||||
|
RW_SEEK_CUR = 1; {**< Seek relative to current read point *}
|
||||||
|
RW_SEEK_END = 2; {**< Seek relative to the end of data *}
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Read/write macros
|
||||||
|
*
|
||||||
|
* Macros to easily read and write from an SDL_RWops structure.
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_RWsize(ctx: PSDL_RWops): SInt64; {$IFNDEF DELPHI} inline; {$ELSE} {$IFDEF DELPHI10UP} inline; {$ENDIF} {$ENDIF}
|
||||||
|
function SDL_RWseek(ctx: PSDL_RWops; offset: SInt64; whence: SInt32): SInt64; {$IFNDEF DELPHI} inline; {$ELSE} {$IFDEF DELPHI10UP} inline; {$ENDIF} {$ENDIF}
|
||||||
|
function SDL_RWtell(ctx: PSDL_RWops): SInt64; {$IFNDEF DELPHI} inline; {$ELSE} {$IFDEF DELPHI10UP} inline; {$ENDIF} {$ENDIF}
|
||||||
|
function SDL_RWread(ctx: PSDL_RWops; ptr: Pointer; size: size_t; n: size_t): size_t; {$IFNDEF DELPHI} inline; {$ELSE} {$IFDEF DELPHI10UP} inline; {$ENDIF} {$ENDIF}
|
||||||
|
function SDL_RWwrite(ctx: PSDL_RWops; ptr: Pointer; size: size_t; n: size_t): size_t; {$IFNDEF DELPHI} inline; {$ELSE} {$IFDEF DELPHI10UP} inline; {$ENDIF} {$ENDIF}
|
||||||
|
function SDL_RWclose(ctx: PSDL_RWops): SInt32; {$IFNDEF DELPHI} inline; {$ELSE} {$IFDEF DELPHI10UP} inline; {$ENDIF} {$ENDIF}
|
||||||
|
{ Read/write macros }
|
||||||
|
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Read endian functions
|
||||||
|
*
|
||||||
|
* Read an item of the specified endianness and return in native format.
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_ReadU8(src: PSDL_RWops): UInt8 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_ReadU8' {$ENDIF} {$ENDIF};
|
||||||
|
function SDL_ReadLE16(src: PSDL_RWops): UInt16 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_ReadLE16' {$ENDIF} {$ENDIF};
|
||||||
|
function SDL_ReadBE16(src: PSDL_RWops): UInt16 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_ReadBE16' {$ENDIF} {$ENDIF};
|
||||||
|
function SDL_ReadLE32(src: PSDL_RWops): UInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_ReadLE32' {$ENDIF} {$ENDIF};
|
||||||
|
function SDL_ReadBE32(src: PSDL_RWops): UInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_ReadBE32' {$ENDIF} {$ENDIF};
|
||||||
|
function SDL_ReadLE64(src: PSDL_RWops): UInt64 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_ReadLE64' {$ENDIF} {$ENDIF};
|
||||||
|
function SDL_ReadBE64(src: PSDL_RWops): UInt64 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_ReadBE64' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{*Read endian functions*}
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Write endian functions
|
||||||
|
*
|
||||||
|
* Write an item of native format to the specified endianness.
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_WriteU8(dst: PSDL_RWops; value: UInt8): size_t cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_WriteU8' {$ENDIF} {$ENDIF};
|
||||||
|
function SDL_WriteLE16(dst: PSDL_RWops; value: UInt16): size_t cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_WriteLE16' {$ENDIF} {$ENDIF};
|
||||||
|
function SDL_WriteBE16(dst: PSDL_RWops; value: UInt16): size_t cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_WriteBE16' {$ENDIF} {$ENDIF};
|
||||||
|
function SDL_WriteLE32(dst: PSDL_RWops; value: UInt32): size_t cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_WriteLE32' {$ENDIF} {$ENDIF};
|
||||||
|
function SDL_WriteBE32(dst: PSDL_RWops; value: UInt32): size_t cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_WriteBE32' {$ENDIF} {$ENDIF};
|
||||||
|
function SDL_WriteLE64(dst: PSDL_RWops; value: UInt64): size_t cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_WriteLE64' {$ENDIF} {$ENDIF};
|
||||||
|
function SDL_WriteBE64(dst: PSDL_RWops; value: UInt64): size_t cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_WriteBE64' {$ENDIF} {$ENDIF};
|
||||||
|
{ Write endian functions }
|
662
model_viewer/sdl2/sdlscancode.inc
Normal file
662
model_viewer/sdl2/sdlscancode.inc
Normal file
@ -0,0 +1,662 @@
|
|||||||
|
//from "sdl_scancode.h"
|
||||||
|
|
||||||
|
{**
|
||||||
|
* The SDL keyboard scancode representation.
|
||||||
|
*
|
||||||
|
* Values of this type are used to represent keyboard keys, among other places
|
||||||
|
* in the SDL_Keysym.scancode key.keysym.scancode \endlink field of the
|
||||||
|
* SDL_Event structure.
|
||||||
|
*
|
||||||
|
* The values in this enumeration are based on the USB usage page standard:
|
||||||
|
* http://www.usb.org/developers/devclass_docs/Hut1_12v2.pdf
|
||||||
|
*}
|
||||||
|
|
||||||
|
const
|
||||||
|
SDL_SCANCODE_UNKNOWN = 0;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Usage page $07
|
||||||
|
*
|
||||||
|
* These values are from usage page $07 (USB keyboard page).
|
||||||
|
*}
|
||||||
|
|
||||||
|
SDL_SCANCODE_A = 4;
|
||||||
|
SDL_SCANCODE_B = 5;
|
||||||
|
SDL_SCANCODE_C = 6;
|
||||||
|
SDL_SCANCODE_D = 7;
|
||||||
|
SDL_SCANCODE_E = 8;
|
||||||
|
SDL_SCANCODE_F = 9;
|
||||||
|
SDL_SCANCODE_G = 10;
|
||||||
|
SDL_SCANCODE_H = 11;
|
||||||
|
SDL_SCANCODE_I = 12;
|
||||||
|
SDL_SCANCODE_J = 13;
|
||||||
|
SDL_SCANCODE_K = 14;
|
||||||
|
SDL_SCANCODE_L = 15;
|
||||||
|
SDL_SCANCODE_M = 16;
|
||||||
|
SDL_SCANCODE_N = 17;
|
||||||
|
SDL_SCANCODE_O = 18;
|
||||||
|
SDL_SCANCODE_P = 19;
|
||||||
|
SDL_SCANCODE_Q = 20;
|
||||||
|
SDL_SCANCODE_R = 21;
|
||||||
|
SDL_SCANCODE_S = 22;
|
||||||
|
SDL_SCANCODE_T = 23;
|
||||||
|
SDL_SCANCODE_U = 24;
|
||||||
|
SDL_SCANCODE_V = 25;
|
||||||
|
SDL_SCANCODE_W = 26;
|
||||||
|
SDL_SCANCODE_X = 27;
|
||||||
|
SDL_SCANCODE_Y = 28;
|
||||||
|
SDL_SCANCODE_Z = 29;
|
||||||
|
|
||||||
|
SDL_SCANCODE_1 = 30;
|
||||||
|
SDL_SCANCODE_2 = 31;
|
||||||
|
SDL_SCANCODE_3 = 32;
|
||||||
|
SDL_SCANCODE_4 = 33;
|
||||||
|
SDL_SCANCODE_5 = 34;
|
||||||
|
SDL_SCANCODE_6 = 35;
|
||||||
|
SDL_SCANCODE_7 = 36;
|
||||||
|
SDL_SCANCODE_8 = 37;
|
||||||
|
SDL_SCANCODE_9 = 38;
|
||||||
|
SDL_SCANCODE_0 = 39;
|
||||||
|
|
||||||
|
SDL_SCANCODE_RETURN = 40;
|
||||||
|
SDL_SCANCODE_ESCAPE = 41;
|
||||||
|
SDL_SCANCODE_BACKSPACE = 42;
|
||||||
|
SDL_SCANCODE_TAB = 43;
|
||||||
|
SDL_SCANCODE_SPACE = 44;
|
||||||
|
|
||||||
|
SDL_SCANCODE_MINUS = 45;
|
||||||
|
SDL_SCANCODE_EQUALS = 46;
|
||||||
|
SDL_SCANCODE_LEFTBRACKET = 47;
|
||||||
|
SDL_SCANCODE_RIGHTBRACKET = 48;
|
||||||
|
SDL_SCANCODE_BACKSLASH = 49; {**< Located at the lower left of the return
|
||||||
|
* key on ISO keyboards and at the right end
|
||||||
|
* of the QWERTY row on ANSI keyboards.
|
||||||
|
* Produces REVERSE SOLIDUS (backslash) and
|
||||||
|
* VERTICAL LINE in a US layout; REVERSE
|
||||||
|
* SOLIDUS and VERTICAL LINE in a UK Mac
|
||||||
|
* layout; NUMBER SIGN and TILDE in a UK
|
||||||
|
* Windows layout; DOLLAR SIGN and POUND SIGN
|
||||||
|
* in a Swiss German layout; NUMBER SIGN and
|
||||||
|
* APOSTROPHE in a German layout; GRAVE
|
||||||
|
* ACCENT and POUND SIGN in a French Mac
|
||||||
|
* layout; and ASTERISK and MICRO SIGN in a
|
||||||
|
* French Windows layout.
|
||||||
|
*}
|
||||||
|
SDL_SCANCODE_NONUSHASH = 50; {**< ISO USB keyboards actually use this code
|
||||||
|
* instead of 49 for the same key; but all
|
||||||
|
* OSes I've seen treat the two codes
|
||||||
|
* identically. So; as an implementor; unless
|
||||||
|
* your keyboard generates both of those
|
||||||
|
* codes and your OS treats them differently;
|
||||||
|
* you should generate SDL_SCANCODE_BACKSLASH
|
||||||
|
* instead of this code. As a user; you
|
||||||
|
* should not rely on this code because SDL
|
||||||
|
* will never generate it with most (all?)
|
||||||
|
* keyboards.
|
||||||
|
*}
|
||||||
|
SDL_SCANCODE_SEMICOLON = 51;
|
||||||
|
SDL_SCANCODE_APOSTROPHE = 52;
|
||||||
|
SDL_SCANCODE_GRAVE = 53; {**< Located in the top left corner (on both ANSI
|
||||||
|
* and ISO keyboards). Produces GRAVE ACCENT and
|
||||||
|
* TILDE in a US Windows layout and in US and UK
|
||||||
|
* Mac layouts on ANSI keyboards; GRAVE ACCENT
|
||||||
|
* and NOT SIGN in a UK Windows layout; SECTION
|
||||||
|
* SIGN and PLUS-MINUS SIGN in US and UK Mac
|
||||||
|
* layouts on ISO keyboards; SECTION SIGN and
|
||||||
|
* DEGREE SIGN in a Swiss German layout (Mac:
|
||||||
|
* only on ISO keyboards); CIRCUMFLEX ACCENT and
|
||||||
|
* DEGREE SIGN in a German layout (Mac: only on
|
||||||
|
* ISO keyboards); SUPERSCRIPT TWO and TILDE in a
|
||||||
|
* French Windows layout; COMMERCIAL AT and
|
||||||
|
* NUMBER SIGN in a French Mac layout on ISO
|
||||||
|
* keyboards; and LESS-THAN SIGN and GREATER-THAN
|
||||||
|
* SIGN in a Swiss German; German; or French Mac
|
||||||
|
* layout on ANSI keyboards.
|
||||||
|
*}
|
||||||
|
SDL_SCANCODE_COMMA = 54;
|
||||||
|
SDL_SCANCODE_PERIOD = 55;
|
||||||
|
SDL_SCANCODE_SLASH = 56;
|
||||||
|
|
||||||
|
SDL_SCANCODE_CAPSLOCK = 57;
|
||||||
|
|
||||||
|
SDL_SCANCODE_F1 = 58;
|
||||||
|
SDL_SCANCODE_F2 = 59;
|
||||||
|
SDL_SCANCODE_F3 = 60;
|
||||||
|
SDL_SCANCODE_F4 = 61;
|
||||||
|
SDL_SCANCODE_F5 = 62;
|
||||||
|
SDL_SCANCODE_F6 = 63;
|
||||||
|
SDL_SCANCODE_F7 = 64;
|
||||||
|
SDL_SCANCODE_F8 = 65;
|
||||||
|
SDL_SCANCODE_F9 = 66;
|
||||||
|
SDL_SCANCODE_F10 = 67;
|
||||||
|
SDL_SCANCODE_F11 = 68;
|
||||||
|
SDL_SCANCODE_F12 = 69;
|
||||||
|
|
||||||
|
SDL_SCANCODE_PRINTSCREEN = 70;
|
||||||
|
SDL_SCANCODE_SCROLLLOCK = 71;
|
||||||
|
SDL_SCANCODE_PAUSE = 72;
|
||||||
|
SDL_SCANCODE_INSERT = 73; {**< insert on PC; help on some Mac keyboards (but
|
||||||
|
does send code 73; not 117) *}
|
||||||
|
SDL_SCANCODE_HOME = 74;
|
||||||
|
SDL_SCANCODE_PAGEUP = 75;
|
||||||
|
SDL_SCANCODE_DELETE = 76;
|
||||||
|
SDL_SCANCODE_END = 77;
|
||||||
|
SDL_SCANCODE_PAGEDOWN = 78;
|
||||||
|
SDL_SCANCODE_RIGHT = 79;
|
||||||
|
SDL_SCANCODE_LEFT = 80;
|
||||||
|
SDL_SCANCODE_DOWN = 81;
|
||||||
|
SDL_SCANCODE_UP = 82;
|
||||||
|
|
||||||
|
SDL_SCANCODE_NUMLOCKCLEAR = 83; {**< num lock on PC; clear on Mac keyboards
|
||||||
|
*}
|
||||||
|
SDL_SCANCODE_KP_DIVIDE = 84;
|
||||||
|
SDL_SCANCODE_KP_MULTIPLY = 85;
|
||||||
|
SDL_SCANCODE_KP_MINUS = 86;
|
||||||
|
SDL_SCANCODE_KP_PLUS = 87;
|
||||||
|
SDL_SCANCODE_KP_ENTER = 88;
|
||||||
|
SDL_SCANCODE_KP_1 = 89;
|
||||||
|
SDL_SCANCODE_KP_2 = 90;
|
||||||
|
SDL_SCANCODE_KP_3 = 91;
|
||||||
|
SDL_SCANCODE_KP_4 = 92;
|
||||||
|
SDL_SCANCODE_KP_5 = 93;
|
||||||
|
SDL_SCANCODE_KP_6 = 94;
|
||||||
|
SDL_SCANCODE_KP_7 = 95;
|
||||||
|
SDL_SCANCODE_KP_8 = 96;
|
||||||
|
SDL_SCANCODE_KP_9 = 97;
|
||||||
|
SDL_SCANCODE_KP_0 = 98;
|
||||||
|
SDL_SCANCODE_KP_PERIOD = 99;
|
||||||
|
|
||||||
|
SDL_SCANCODE_NONUSBACKSLASH = 100; {**< This is the additional key that ISO
|
||||||
|
* keyboards have over ANSI ones;
|
||||||
|
* located between left shift and Y.
|
||||||
|
* Produces GRAVE ACCENT and TILDE in a
|
||||||
|
* US or UK Mac layout; REVERSE SOLIDUS
|
||||||
|
* (backslash) and VERTICAL LINE in a
|
||||||
|
* US or UK Windows layout; and
|
||||||
|
* LESS-THAN SIGN and GREATER-THAN SIGN
|
||||||
|
* in a Swiss German; German; or French
|
||||||
|
* layout. *}
|
||||||
|
SDL_SCANCODE_APPLICATION = 101; {**< windows contextual menu; compose *}
|
||||||
|
SDL_SCANCODE_POWER = 102; {**< The USB document says this is a status flag;
|
||||||
|
* not a physical key - but some Mac keyboards
|
||||||
|
* do have a power key. *}
|
||||||
|
SDL_SCANCODE_KP_EQUALS = 103;
|
||||||
|
SDL_SCANCODE_F13 = 104;
|
||||||
|
SDL_SCANCODE_F14 = 105;
|
||||||
|
SDL_SCANCODE_F15 = 106;
|
||||||
|
SDL_SCANCODE_F16 = 107;
|
||||||
|
SDL_SCANCODE_F17 = 108;
|
||||||
|
SDL_SCANCODE_F18 = 109;
|
||||||
|
SDL_SCANCODE_F19 = 110;
|
||||||
|
SDL_SCANCODE_F20 = 111;
|
||||||
|
SDL_SCANCODE_F21 = 112;
|
||||||
|
SDL_SCANCODE_F22 = 113;
|
||||||
|
SDL_SCANCODE_F23 = 114;
|
||||||
|
SDL_SCANCODE_F24 = 115;
|
||||||
|
SDL_SCANCODE_EXECUTE = 116;
|
||||||
|
SDL_SCANCODE_HELP = 117;
|
||||||
|
SDL_SCANCODE_MENU = 118;
|
||||||
|
SDL_SCANCODE_SELECT = 119;
|
||||||
|
SDL_SCANCODE_STOP = 120;
|
||||||
|
SDL_SCANCODE_AGAIN = 121; {**< redo *}
|
||||||
|
SDL_SCANCODE_UNDO = 122;
|
||||||
|
SDL_SCANCODE_CUT = 123;
|
||||||
|
SDL_SCANCODE_COPY = 124;
|
||||||
|
SDL_SCANCODE_PASTE = 125;
|
||||||
|
SDL_SCANCODE_FIND = 126;
|
||||||
|
SDL_SCANCODE_MUTE = 127;
|
||||||
|
SDL_SCANCODE_VOLUMEUP = 128;
|
||||||
|
SDL_SCANCODE_VOLUMEDOWN = 129;
|
||||||
|
{* not sure whether there's a reason to enable these *}
|
||||||
|
{* SDL_SCANCODE_LOCKINGCAPSLOCK = 130; *}
|
||||||
|
{* SDL_SCANCODE_LOCKINGNUMLOCK = 131; *}
|
||||||
|
{* SDL_SCANCODE_LOCKINGSCROLLLOCK = 132; *}
|
||||||
|
SDL_SCANCODE_KP_COMMA = 133;
|
||||||
|
SDL_SCANCODE_KP_EQUALSAS400 = 134;
|
||||||
|
|
||||||
|
SDL_SCANCODE_INTERNATIONAL1 = 135; {**< used on Asian keyboards; see footnotes in USB doc *}
|
||||||
|
SDL_SCANCODE_INTERNATIONAL2 = 136;
|
||||||
|
SDL_SCANCODE_INTERNATIONAL3 = 137; {**< Yen *}
|
||||||
|
SDL_SCANCODE_INTERNATIONAL4 = 138;
|
||||||
|
SDL_SCANCODE_INTERNATIONAL5 = 139;
|
||||||
|
SDL_SCANCODE_INTERNATIONAL6 = 140;
|
||||||
|
SDL_SCANCODE_INTERNATIONAL7 = 141;
|
||||||
|
SDL_SCANCODE_INTERNATIONAL8 = 142;
|
||||||
|
SDL_SCANCODE_INTERNATIONAL9 = 143;
|
||||||
|
SDL_SCANCODE_LANG1 = 144; {**< Hangul/English toggle *}
|
||||||
|
SDL_SCANCODE_LANG2 = 145; {**< Hanja conversion *}
|
||||||
|
SDL_SCANCODE_LANG3 = 146; {**< Katakana *}
|
||||||
|
SDL_SCANCODE_LANG4 = 147; {**< Hiragana *}
|
||||||
|
SDL_SCANCODE_LANG5 = 148; {**< Zenkaku/Hankaku *}
|
||||||
|
SDL_SCANCODE_LANG6 = 149; {**< reserved *}
|
||||||
|
SDL_SCANCODE_LANG7 = 150; {**< reserved *}
|
||||||
|
SDL_SCANCODE_LANG8 = 151; {**< reserved *}
|
||||||
|
SDL_SCANCODE_LANG9 = 152; {**< reserved *}
|
||||||
|
|
||||||
|
SDL_SCANCODE_ALTERASE = 153; {**< Erase-Eaze *}
|
||||||
|
SDL_SCANCODE_SYSREQ = 154;
|
||||||
|
SDL_SCANCODE_CANCEL = 155;
|
||||||
|
SDL_SCANCODE_CLEAR = 156;
|
||||||
|
SDL_SCANCODE_PRIOR = 157;
|
||||||
|
SDL_SCANCODE_RETURN2 = 158;
|
||||||
|
SDL_SCANCODE_SEPARATOR = 159;
|
||||||
|
SDL_SCANCODE_OUT = 160;
|
||||||
|
SDL_SCANCODE_OPER = 161;
|
||||||
|
SDL_SCANCODE_CLEARAGAIN = 162;
|
||||||
|
SDL_SCANCODE_CRSEL = 163;
|
||||||
|
SDL_SCANCODE_EXSEL = 164;
|
||||||
|
|
||||||
|
SDL_SCANCODE_KP_00 = 176;
|
||||||
|
SDL_SCANCODE_KP_000 = 177;
|
||||||
|
SDL_SCANCODE_THOUSANDSSEPARATOR = 178;
|
||||||
|
SDL_SCANCODE_DECIMALSEPARATOR = 179;
|
||||||
|
SDL_SCANCODE_CURRENCYUNIT = 180;
|
||||||
|
SDL_SCANCODE_CURRENCYSUBUNIT = 181;
|
||||||
|
SDL_SCANCODE_KP_LEFTPAREN = 182;
|
||||||
|
SDL_SCANCODE_KP_RIGHTPAREN = 183;
|
||||||
|
SDL_SCANCODE_KP_LEFTBRACE = 184;
|
||||||
|
SDL_SCANCODE_KP_RIGHTBRACE = 185;
|
||||||
|
SDL_SCANCODE_KP_TAB = 186;
|
||||||
|
SDL_SCANCODE_KP_BACKSPACE = 187;
|
||||||
|
SDL_SCANCODE_KP_A = 188;
|
||||||
|
SDL_SCANCODE_KP_B = 189;
|
||||||
|
SDL_SCANCODE_KP_C = 190;
|
||||||
|
SDL_SCANCODE_KP_D = 191;
|
||||||
|
SDL_SCANCODE_KP_E = 192;
|
||||||
|
SDL_SCANCODE_KP_F = 193;
|
||||||
|
SDL_SCANCODE_KP_XOR = 194;
|
||||||
|
SDL_SCANCODE_KP_POWER = 195;
|
||||||
|
SDL_SCANCODE_KP_PERCENT = 196;
|
||||||
|
SDL_SCANCODE_KP_LESS = 197;
|
||||||
|
SDL_SCANCODE_KP_GREATER = 198;
|
||||||
|
SDL_SCANCODE_KP_AMPERSAND = 199;
|
||||||
|
SDL_SCANCODE_KP_DBLAMPERSAND = 200;
|
||||||
|
SDL_SCANCODE_KP_VERTICALBAR = 201;
|
||||||
|
SDL_SCANCODE_KP_DBLVERTICALBAR = 202;
|
||||||
|
SDL_SCANCODE_KP_COLON = 203;
|
||||||
|
SDL_SCANCODE_KP_HASH = 204;
|
||||||
|
SDL_SCANCODE_KP_SPACE = 205;
|
||||||
|
SDL_SCANCODE_KP_AT = 206;
|
||||||
|
SDL_SCANCODE_KP_EXCLAM = 207;
|
||||||
|
SDL_SCANCODE_KP_MEMSTORE = 208;
|
||||||
|
SDL_SCANCODE_KP_MEMRECALL = 209;
|
||||||
|
SDL_SCANCODE_KP_MEMCLEAR = 210;
|
||||||
|
SDL_SCANCODE_KP_MEMADD = 211;
|
||||||
|
SDL_SCANCODE_KP_MEMSUBTRACT = 212;
|
||||||
|
SDL_SCANCODE_KP_MEMMULTIPLY = 213;
|
||||||
|
SDL_SCANCODE_KP_MEMDIVIDE = 214;
|
||||||
|
SDL_SCANCODE_KP_PLUSMINUS = 215;
|
||||||
|
SDL_SCANCODE_KP_CLEAR = 216;
|
||||||
|
SDL_SCANCODE_KP_CLEARENTRY = 217;
|
||||||
|
SDL_SCANCODE_KP_BINARY = 218;
|
||||||
|
SDL_SCANCODE_KP_OCTAL = 219;
|
||||||
|
SDL_SCANCODE_KP_DECIMAL = 220;
|
||||||
|
SDL_SCANCODE_KP_HEXADECIMAL = 221;
|
||||||
|
|
||||||
|
SDL_SCANCODE_LCTRL = 224;
|
||||||
|
SDL_SCANCODE_LSHIFT = 225;
|
||||||
|
SDL_SCANCODE_LALT = 226; {**< alt; option *}
|
||||||
|
SDL_SCANCODE_LGUI = 227; {**< windows; command (apple); meta *}
|
||||||
|
SDL_SCANCODE_RCTRL = 228;
|
||||||
|
SDL_SCANCODE_RSHIFT = 229;
|
||||||
|
SDL_SCANCODE_RALT = 230; {**< alt gr; option *}
|
||||||
|
SDL_SCANCODE_RGUI = 231; {**< windows; command (apple); meta *}
|
||||||
|
|
||||||
|
SDL_SCANCODE_MODE = 257; {**< I'm not sure if this is really not covered
|
||||||
|
* by any of the above; but since there's a
|
||||||
|
* special KMOD_MODE for it I'm adding it here
|
||||||
|
*}
|
||||||
|
|
||||||
|
{*Usage page $07*}
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Usage page $0C
|
||||||
|
*
|
||||||
|
* These values are mapped from usage page $0C (USB consumer page).
|
||||||
|
*}
|
||||||
|
|
||||||
|
SDL_SCANCODE_AUDIONEXT = 258;
|
||||||
|
SDL_SCANCODE_AUDIOPREV = 259;
|
||||||
|
SDL_SCANCODE_AUDIOSTOP = 260;
|
||||||
|
SDL_SCANCODE_AUDIOPLAY = 261;
|
||||||
|
SDL_SCANCODE_AUDIOMUTE = 262;
|
||||||
|
SDL_SCANCODE_MEDIASELECT = 263;
|
||||||
|
SDL_SCANCODE_WWW = 264;
|
||||||
|
SDL_SCANCODE_MAIL = 265;
|
||||||
|
SDL_SCANCODE_CALCULATOR = 266;
|
||||||
|
SDL_SCANCODE_COMPUTER = 267;
|
||||||
|
SDL_SCANCODE_AC_SEARCH = 268;
|
||||||
|
SDL_SCANCODE_AC_HOME = 269;
|
||||||
|
SDL_SCANCODE_AC_BACK = 270;
|
||||||
|
SDL_SCANCODE_AC_FORWARD = 271;
|
||||||
|
SDL_SCANCODE_AC_STOP = 272;
|
||||||
|
SDL_SCANCODE_AC_REFRESH = 273;
|
||||||
|
SDL_SCANCODE_AC_BOOKMARKS = 274;
|
||||||
|
|
||||||
|
{*Usage page $0C*}
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Walther keys
|
||||||
|
*
|
||||||
|
* These are values that Christian Walther added (for mac keyboard?).
|
||||||
|
*}
|
||||||
|
|
||||||
|
SDL_SCANCODE_BRIGHTNESSDOWN = 275;
|
||||||
|
SDL_SCANCODE_BRIGHTNESSUP = 276;
|
||||||
|
SDL_SCANCODE_DISPLAYSWITCH = 277; {**< display mirroring/dual display
|
||||||
|
switch; video mode switch *}
|
||||||
|
SDL_SCANCODE_KBDILLUMTOGGLE = 278;
|
||||||
|
SDL_SCANCODE_KBDILLUMDOWN = 279;
|
||||||
|
SDL_SCANCODE_KBDILLUMUP = 280;
|
||||||
|
SDL_SCANCODE_EJECT = 281;
|
||||||
|
SDL_SCANCODE_SLEEP = 282;
|
||||||
|
|
||||||
|
SDL_SCANCODE_APP1 = 283;
|
||||||
|
SDL_SCANCODE_APP2 = 284;
|
||||||
|
|
||||||
|
{*Walther keys*}
|
||||||
|
|
||||||
|
{* Add any other keys here. *}
|
||||||
|
|
||||||
|
SDL_NUM_SCANCODES = 512; {**< not a key, just marks the number of scancodes
|
||||||
|
for array bounds *}
|
||||||
|
|
||||||
|
type
|
||||||
|
PSDL_ScanCode = ^TSDL_ScanCode;
|
||||||
|
TSDL_ScanCode = DWord;
|
||||||
|
|
||||||
|
//from "sdl_keycode.h"
|
||||||
|
|
||||||
|
{**
|
||||||
|
* The SDL virtual key representation.
|
||||||
|
*
|
||||||
|
* Values of this type are used to represent keyboard keys using the current
|
||||||
|
* layout of the keyboard. These values include Unicode values representing
|
||||||
|
* the unmodified character that would be generated by pressing the key, or
|
||||||
|
* an SDLK_* constant for those keys that do not generate characters.
|
||||||
|
*}
|
||||||
|
PSDL_KeyCode = ^TSDL_KeyCode;
|
||||||
|
TSDL_KeyCode = SInt32;
|
||||||
|
|
||||||
|
const
|
||||||
|
SDLK_SCANCODE_MASK = 1 shl 30;
|
||||||
|
|
||||||
|
SDLK_UNKNOWN = 0;
|
||||||
|
|
||||||
|
SDLK_RETURN = SInt32(#13); // C: '\r'
|
||||||
|
SDLK_ESCAPE = SInt32(#27); // C: '\033'
|
||||||
|
SDLK_BACKSPACE = SInt32(#8); // C: '\b'
|
||||||
|
SDLK_TAB = SInt32(#9); // C: '\t'
|
||||||
|
SDLK_SPACE = SInt32(' ');
|
||||||
|
SDLK_EXCLAIM = SInt32('!');
|
||||||
|
SDLK_QUOTEDBL = SInt32('"');
|
||||||
|
SDLK_HASH = SInt32('#');
|
||||||
|
SDLK_PERCENT = SInt32('%');
|
||||||
|
SDLK_DOLLAR = SInt32('$');
|
||||||
|
SDLK_AMPERSAND = SInt32('&');
|
||||||
|
SDLK_QUOTE = SInt32('\');
|
||||||
|
SDLK_LEFTPAREN = SInt32('(');
|
||||||
|
SDLK_RIGHTPAREN = SInt32(')');
|
||||||
|
SDLK_ASTERISK = SInt32('*');
|
||||||
|
SDLK_PLUS = SInt32('+');
|
||||||
|
SDLK_COMMA = SInt32(',');
|
||||||
|
SDLK_MINUS = SInt32('-');
|
||||||
|
SDLK_PERIOD = SInt32('.');
|
||||||
|
SDLK_SLASH = SInt32('/');
|
||||||
|
SDLK_0 = SInt32('0');
|
||||||
|
SDLK_1 = SInt32('1');
|
||||||
|
SDLK_2 = SInt32('2');
|
||||||
|
SDLK_3 = SInt32('3');
|
||||||
|
SDLK_4 = SInt32('4');
|
||||||
|
SDLK_5 = SInt32('5');
|
||||||
|
SDLK_6 = SInt32('6');
|
||||||
|
SDLK_7 = SInt32('7');
|
||||||
|
SDLK_8 = SInt32('8');
|
||||||
|
SDLK_9 = SInt32('9');
|
||||||
|
SDLK_COLON = SInt32(':');
|
||||||
|
SDLK_SEMICOLON = SInt32(';');
|
||||||
|
SDLK_LESS = SInt32('<');
|
||||||
|
SDLK_EQUALS = SInt32('=');
|
||||||
|
SDLK_GREATER = SInt32('>');
|
||||||
|
SDLK_QUESTION = SInt32('?');
|
||||||
|
SDLK_AT = SInt32('@');
|
||||||
|
{*
|
||||||
|
Skip uppercase letters
|
||||||
|
*}
|
||||||
|
SDLK_LEFTBRACKET = SInt32('[');
|
||||||
|
SDLK_BACKSLASH = SInt32('\');
|
||||||
|
SDLK_RIGHTBRACKET = SInt32(']');
|
||||||
|
SDLK_CARET = SInt32('^');
|
||||||
|
SDLK_UNDERSCORE = SInt32('_');
|
||||||
|
SDLK_BACKQUOTE = SInt32('`');
|
||||||
|
SDLK_a = SInt32('a');
|
||||||
|
SDLK_b = SInt32('b');
|
||||||
|
SDLK_c = SInt32('c');
|
||||||
|
SDLK_d = SInt32('d');
|
||||||
|
SDLK_e = SInt32('e');
|
||||||
|
SDLK_f = SInt32('f');
|
||||||
|
SDLK_g = SInt32('g');
|
||||||
|
SDLK_h = SInt32('h');
|
||||||
|
SDLK_i = SInt32('i');
|
||||||
|
SDLK_j = SInt32('j');
|
||||||
|
SDLK_k = SInt32('k');
|
||||||
|
SDLK_l = SInt32('l');
|
||||||
|
SDLK_m = SInt32('m');
|
||||||
|
SDLK_n = SInt32('n');
|
||||||
|
SDLK_o = SInt32('o');
|
||||||
|
SDLK_p = SInt32('p');
|
||||||
|
SDLK_q = SInt32('q');
|
||||||
|
SDLK_r = SInt32('r');
|
||||||
|
SDLK_s = SInt32('s');
|
||||||
|
SDLK_t = SInt32('t');
|
||||||
|
SDLK_u = SInt32('u');
|
||||||
|
SDLK_v = SInt32('v');
|
||||||
|
SDLK_w = SInt32('w');
|
||||||
|
SDLK_x = SInt32('x');
|
||||||
|
SDLK_y = SInt32('y');
|
||||||
|
SDLK_z = SInt32('z');
|
||||||
|
|
||||||
|
SDLK_CAPSLOCK = SDL_SCANCODE_CAPSLOCK or SDLK_SCANCODE_MASK;
|
||||||
|
|
||||||
|
SDLK_F1 = SDL_SCANCODE_F1 or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_F2 = SDL_SCANCODE_F2 or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_F3 = SDL_SCANCODE_F3 or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_F4 = SDL_SCANCODE_F4 or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_F5 = SDL_SCANCODE_F5 or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_F6 = SDL_SCANCODE_F6 or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_F7 = SDL_SCANCODE_F7 or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_F8 = SDL_SCANCODE_F8 or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_F9 = SDL_SCANCODE_F9 or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_F10 = SDL_SCANCODE_F10 or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_F11 = SDL_SCANCODE_F11 or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_F12 = SDL_SCANCODE_F12 or SDLK_SCANCODE_MASK;
|
||||||
|
|
||||||
|
SDLK_PRINTSCREEN = SDL_SCANCODE_PRINTSCREEN or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_SCROLLLOCK = SDL_SCANCODE_SCROLLLOCK or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_PAUSE = SDL_SCANCODE_PAUSE or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_INSERT = SDL_SCANCODE_INSERT or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_HOME = SDL_SCANCODE_HOME or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_PAGEUP = SDL_SCANCODE_PAGEUP or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_DELETE = SInt32(#127); // C: '\177'
|
||||||
|
SDLK_END = SDL_SCANCODE_END or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_PAGEDOWN = SDL_SCANCODE_PAGEDOWN or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_RIGHT = SDL_SCANCODE_RIGHT or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_LEFT = SDL_SCANCODE_LEFT or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_DOWN = SDL_SCANCODE_DOWN or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_UP = SDL_SCANCODE_UP or SDLK_SCANCODE_MASK;
|
||||||
|
|
||||||
|
SDLK_NUMLOCKCLEAR = SDL_SCANCODE_NUMLOCKCLEAR or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_DIVIDE = SDL_SCANCODE_KP_DIVIDE or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_MULTIPLY = SDL_SCANCODE_KP_MULTIPLY or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_MINUS = SDL_SCANCODE_KP_MINUS or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_PLUS = SDL_SCANCODE_KP_PLUS or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_ENTER = SDL_SCANCODE_KP_ENTER or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_1 = SDL_SCANCODE_KP_1 or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_2 = SDL_SCANCODE_KP_2 or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_3 = SDL_SCANCODE_KP_3 or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_4 = SDL_SCANCODE_KP_4 or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_5 = SDL_SCANCODE_KP_5 or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_6 = SDL_SCANCODE_KP_6 or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_7 = SDL_SCANCODE_KP_7 or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_8 = SDL_SCANCODE_KP_8 or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_9 = SDL_SCANCODE_KP_9 or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_0 = SDL_SCANCODE_KP_0 or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_PERIOD = SDL_SCANCODE_KP_PERIOD or SDLK_SCANCODE_MASK;
|
||||||
|
|
||||||
|
SDLK_APPLICATION = SDL_SCANCODE_APPLICATION or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_POWER = SDL_SCANCODE_POWER or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_EQUALS = SDL_SCANCODE_KP_EQUALS or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_F13 = SDL_SCANCODE_F13 or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_F14 = SDL_SCANCODE_F14 or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_F15 = SDL_SCANCODE_F15 or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_F16 = SDL_SCANCODE_F16 or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_F17 = SDL_SCANCODE_F17 or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_F18 = SDL_SCANCODE_F18 or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_F19 = SDL_SCANCODE_F19 or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_F20 = SDL_SCANCODE_F20 or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_F21 = SDL_SCANCODE_F21 or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_F22 = SDL_SCANCODE_F22 or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_F23 = SDL_SCANCODE_F23 or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_F24 = SDL_SCANCODE_F24 or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_EXECUTE = SDL_SCANCODE_EXECUTE or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_HELP = SDL_SCANCODE_HELP or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_MENU = SDL_SCANCODE_MENU or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_SELECT = SDL_SCANCODE_SELECT or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_STOP = SDL_SCANCODE_STOP or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_AGAIN = SDL_SCANCODE_AGAIN or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_UNDO = SDL_SCANCODE_UNDO or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_CUT = SDL_SCANCODE_CUT or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_COPY = SDL_SCANCODE_COPY or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_PASTE = SDL_SCANCODE_PASTE or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_FIND = SDL_SCANCODE_FIND or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_MUTE = SDL_SCANCODE_MUTE or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_VOLUMEUP = SDL_SCANCODE_VOLUMEUP or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_VOLUMEDOWN = SDL_SCANCODE_VOLUMEDOWN or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_COMMA = SDL_SCANCODE_KP_COMMA or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_EQUALSAS400 = SDL_SCANCODE_KP_EQUALSAS400 or SDLK_SCANCODE_MASK;
|
||||||
|
|
||||||
|
SDLK_ALTERASE = SDL_SCANCODE_ALTERASE or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_SYSREQ = SDL_SCANCODE_SYSREQ or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_CANCEL = SDL_SCANCODE_CANCEL or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_CLEAR = SDL_SCANCODE_CLEAR or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_PRIOR = SDL_SCANCODE_PRIOR or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_RETURN2 = SDL_SCANCODE_RETURN2 or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_SEPARATOR = SDL_SCANCODE_SEPARATOR or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_OUT = SDL_SCANCODE_OUT or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_OPER = SDL_SCANCODE_OPER or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_CLEARAGAIN = SDL_SCANCODE_CLEARAGAIN or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_CRSEL = SDL_SCANCODE_CRSEL or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_EXSEL = SDL_SCANCODE_EXSEL or SDLK_SCANCODE_MASK;
|
||||||
|
|
||||||
|
SDLK_KP_00 = SDL_SCANCODE_KP_00 or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_000 = SDL_SCANCODE_KP_000 or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_THOUSANDSSEPARATOR = SDL_SCANCODE_THOUSANDSSEPARATOR or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_DECIMALSEPARATOR = SDL_SCANCODE_DECIMALSEPARATOR or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_CURRENCYUNIT = SDL_SCANCODE_CURRENCYUNIT or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_CURRENCYSUBUNIT = SDL_SCANCODE_CURRENCYSUBUNIT or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_LEFTPAREN = SDL_SCANCODE_KP_LEFTPAREN or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_RIGHTPAREN = SDL_SCANCODE_KP_RIGHTPAREN or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_LEFTBRACE = SDL_SCANCODE_KP_LEFTBRACE or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_RIGHTBRACE = SDL_SCANCODE_KP_RIGHTBRACE or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_TAB = SDL_SCANCODE_KP_TAB or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_BACKSPACE = SDL_SCANCODE_KP_BACKSPACE or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_A = SDL_SCANCODE_KP_A or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_B = SDL_SCANCODE_KP_B or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_C = SDL_SCANCODE_KP_C or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_D = SDL_SCANCODE_KP_D or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_E = SDL_SCANCODE_KP_E or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_F = SDL_SCANCODE_KP_F or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_XOR = SDL_SCANCODE_KP_XOR or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_POWER = SDL_SCANCODE_KP_POWER or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_PERCENT = SDL_SCANCODE_KP_PERCENT or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_LESS = SDL_SCANCODE_KP_LESS or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_GREATER = SDL_SCANCODE_KP_GREATER or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_AMPERSAND = SDL_SCANCODE_KP_AMPERSAND or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_DBLAMPERSAND = SDL_SCANCODE_KP_DBLAMPERSAND or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_VERTICALBAR = SDL_SCANCODE_KP_VERTICALBAR or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_DBLVERTICALBAR = SDL_SCANCODE_KP_DBLVERTICALBAR or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_COLON = SDL_SCANCODE_KP_COLON or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_HASH = SDL_SCANCODE_KP_HASH or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_SPACE = SDL_SCANCODE_KP_SPACE or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_AT = SDL_SCANCODE_KP_AT or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_EXCLAM = SDL_SCANCODE_KP_EXCLAM or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_MEMSTORE = SDL_SCANCODE_KP_MEMSTORE or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_MEMRECALL = SDL_SCANCODE_KP_MEMRECALL or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_MEMCLEAR = SDL_SCANCODE_KP_MEMCLEAR or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_MEMADD = SDL_SCANCODE_KP_MEMADD or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_MEMSUBTRACT = SDL_SCANCODE_KP_MEMSUBTRACT or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_MEMMULTIPLY = SDL_SCANCODE_KP_MEMMULTIPLY or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_MEMDIVIDE = SDL_SCANCODE_KP_MEMDIVIDE or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_PLUSMINUS = SDL_SCANCODE_KP_PLUSMINUS or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_CLEAR = SDL_SCANCODE_KP_CLEAR or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_CLEARENTRY = SDL_SCANCODE_KP_CLEARENTRY or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_BINARY = SDL_SCANCODE_KP_BINARY or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_OCTAL = SDL_SCANCODE_KP_OCTAL or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_DECIMAL = SDL_SCANCODE_KP_DECIMAL or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KP_HEXADECIMAL = SDL_SCANCODE_KP_HEXADECIMAL or SDLK_SCANCODE_MASK;
|
||||||
|
|
||||||
|
SDLK_LCTRL = SDL_SCANCODE_LCTRL or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_LSHIFT = SDL_SCANCODE_LSHIFT or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_LALT = SDL_SCANCODE_LALT or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_LGUI = SDL_SCANCODE_LGUI or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_RCTRL = SDL_SCANCODE_RCTRL or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_RSHIFT = SDL_SCANCODE_RSHIFT or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_RALT = SDL_SCANCODE_RALT or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_RGUI = SDL_SCANCODE_RGUI or SDLK_SCANCODE_MASK;
|
||||||
|
|
||||||
|
SDLK_MODE = SDL_SCANCODE_MODE or SDLK_SCANCODE_MASK;
|
||||||
|
|
||||||
|
SDLK_AUDIONEXT = SDL_SCANCODE_AUDIONEXT or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_AUDIOPREV = SDL_SCANCODE_AUDIOPREV or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_AUDIOSTOP = SDL_SCANCODE_AUDIOSTOP or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_AUDIOPLAY = SDL_SCANCODE_AUDIOPLAY or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_AUDIOMUTE = SDL_SCANCODE_AUDIOMUTE or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_MEDIASELECT = SDL_SCANCODE_MEDIASELECT or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_WWW = SDL_SCANCODE_WWW or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_MAIL = SDL_SCANCODE_MAIL or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_CALCULATOR = SDL_SCANCODE_CALCULATOR or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_COMPUTER = SDL_SCANCODE_COMPUTER or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_AC_SEARCH = SDL_SCANCODE_AC_SEARCH or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_AC_HOME = SDL_SCANCODE_AC_HOME or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_AC_BACK = SDL_SCANCODE_AC_BACK or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_AC_FORWARD = SDL_SCANCODE_AC_FORWARD or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_AC_STOP = SDL_SCANCODE_AC_STOP or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_AC_REFRESH = SDL_SCANCODE_AC_REFRESH or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_AC_BOOKMARKS = SDL_SCANCODE_AC_BOOKMARKS or SDLK_SCANCODE_MASK;
|
||||||
|
|
||||||
|
SDLK_BRIGHTNESSDOWN = SDL_SCANCODE_BRIGHTNESSDOWN or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_BRIGHTNESSUP = SDL_SCANCODE_BRIGHTNESSUP or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_DISPLAYSWITCH = SDL_SCANCODE_DISPLAYSWITCH or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KBDILLUMTOGGLE = SDL_SCANCODE_KBDILLUMTOGGLE or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KBDILLUMDOWN = SDL_SCANCODE_KBDILLUMDOWN or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_KBDILLUMUP = SDL_SCANCODE_KBDILLUMUP or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_EJECT = SDL_SCANCODE_EJECT or SDLK_SCANCODE_MASK;
|
||||||
|
SDLK_SLEEP = SDL_SCANCODE_SLEEP or SDLK_SCANCODE_MASK;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Enumeration of valid key mods (possibly OR'd together).
|
||||||
|
*}
|
||||||
|
|
||||||
|
KMOD_NONE = $0000;
|
||||||
|
KMOD_LSHIFT = $0001;
|
||||||
|
KMOD_RSHIFT = $0002;
|
||||||
|
KMOD_LCTRL = $0040;
|
||||||
|
KMOD_RCTRL = $0080;
|
||||||
|
KMOD_LALT = $0100;
|
||||||
|
KMOD_RALT = $0200;
|
||||||
|
KMOD_LGUI = $0400;
|
||||||
|
KMOD_RGUI = $0800;
|
||||||
|
KMOD_NUM = $1000;
|
||||||
|
KMOD_CAPS = $2000;
|
||||||
|
KMOD_MODE = $4000;
|
||||||
|
KMOD_RESERVED = $8000;
|
||||||
|
|
||||||
|
type
|
||||||
|
PSDL_KeyMod = ^TSDL_KeyMod;
|
||||||
|
TSDL_KeyMod = Word;
|
||||||
|
|
||||||
|
const
|
||||||
|
KMOD_CTRL = KMOD_LCTRL or KMOD_RCTRL;
|
||||||
|
KMOD_SHIFT = KMOD_LSHIFT or KMOD_RSHIFT;
|
||||||
|
KMOD_ALT = KMOD_LALT or KMOD_RALT;
|
||||||
|
KMOD_GUI = KMOD_LGUI or KMOD_RGUI;
|
43
model_viewer/sdl2/sdlshape.inc
Normal file
43
model_viewer/sdl2/sdlshape.inc
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
//from "sdl_shape.h"
|
||||||
|
|
||||||
|
{** SDL_shape.h
|
||||||
|
*
|
||||||
|
* Header file for the shaped window API.
|
||||||
|
*}
|
||||||
|
const
|
||||||
|
SDL_NONSHAPEABLE_WINDOW = -1;
|
||||||
|
SDL_INVALID_SHAPE_ARGUMENT = -2;
|
||||||
|
SDL_WINDOW_LACKS_SHAPE = -3;
|
||||||
|
|
||||||
|
type
|
||||||
|
PPSDL_Window = ^PSDL_Window;
|
||||||
|
PSDL_Window = ^TSDL_Window;
|
||||||
|
|
||||||
|
{** An enum denoting the specific type of contents present in an SDL_WindowShapeParams union. *}
|
||||||
|
TWindowShapeMode = ({** The default mode, a binarized alpha cutoff of 1. *}
|
||||||
|
ShapeModeDefault,
|
||||||
|
{** A binarized alpha cutoff with a given integer value. *}
|
||||||
|
ShapeModeBinarizeAlpha,
|
||||||
|
{** A binarized alpha cutoff with a given integer value, but with the opposite comparison. *}
|
||||||
|
ShapeModeReverseBinarizeAlpha,
|
||||||
|
{** A color key is applied. *}
|
||||||
|
ShapeModeColorKey);
|
||||||
|
|
||||||
|
//#define SDL_SHAPEMODEALPHA(mode) (mode == ShapeModeDefault || mode == ShapeModeBinarizeAlpha || mode == ShapeModeReverseBinarizeAlpha)
|
||||||
|
|
||||||
|
{** A union containing parameters for shaped windows. *}
|
||||||
|
TSDL_WindowShapeParams = record
|
||||||
|
case Integer of
|
||||||
|
{** a cutoff alpha value for binarization of the window shape's alpha channel. *}
|
||||||
|
0: (binarizationCutoff: UInt8;);
|
||||||
|
1: (colorKey: TSDL_Color;);
|
||||||
|
end;
|
||||||
|
|
||||||
|
{** A struct that tags the SDL_WindowShapeParams union with an enum describing the type of its contents. *}
|
||||||
|
PSDL_WindowShapeMode = ^TSDL_WindowShapeMode;
|
||||||
|
TSDL_WindowShapeMode = record
|
||||||
|
{** The mode of these window-shape parameters. *}
|
||||||
|
mode: TWindowShapeMode;
|
||||||
|
{** Window-shape parameters. *}
|
||||||
|
parameters: TSDL_WindowShapeParams;
|
||||||
|
end;
|
441
model_viewer/sdl2/sdlsurface.inc
Normal file
441
model_viewer/sdl2/sdlsurface.inc
Normal file
@ -0,0 +1,441 @@
|
|||||||
|
//from "sdl_surface.h"
|
||||||
|
|
||||||
|
const
|
||||||
|
{**
|
||||||
|
* Surface flags
|
||||||
|
*
|
||||||
|
* These are the currently supported flags for the ::SDL_surface.
|
||||||
|
*
|
||||||
|
* Used internally (read-only).
|
||||||
|
*}
|
||||||
|
|
||||||
|
SDL_SWSURFACE = 0; {**< Just here for compatibility *}
|
||||||
|
SDL_PREALLOC = $00000001; {**< Surface uses preallocated memory *}
|
||||||
|
SDL_RLEACCEL = $00000002; {**< Surface is RLE encoded *}
|
||||||
|
SDL_DONTFREE = $00000004; {**< Surface is referenced internally *}
|
||||||
|
|
||||||
|
type
|
||||||
|
{**
|
||||||
|
* A collection of pixels used in software blitting.
|
||||||
|
*
|
||||||
|
* This structure should be treated as read-only, except for \c pixels,
|
||||||
|
* which, if not NULL, contains the raw pixel data for the surface.
|
||||||
|
*}
|
||||||
|
|
||||||
|
PSDL_BlitMap = ^TSDL_BlitMap;
|
||||||
|
TSDL_BlitMap = record
|
||||||
|
map: Pointer;
|
||||||
|
end;
|
||||||
|
|
||||||
|
PSDL_Surface = ^TSDL_Surface;
|
||||||
|
TSDL_Surface = record
|
||||||
|
flags: UInt32; {**< Read-only *}
|
||||||
|
format: PSDL_PixelFormat; {**< Read-only *}
|
||||||
|
w, h: SInt32; {**< Read-only *}
|
||||||
|
pitch: SInt32; {**< Read-only *}
|
||||||
|
pixels: Pointer; {**< Read-write *}
|
||||||
|
|
||||||
|
{** Application data associated with the surface *}
|
||||||
|
userdata: Pointer; {**< Read-write *}
|
||||||
|
|
||||||
|
{** information needed for surfaces requiring locks *}
|
||||||
|
locked: SInt32; {**< Read-only *}
|
||||||
|
lock_data: Pointer; {**< Read-only *}
|
||||||
|
|
||||||
|
{** clipping information *}
|
||||||
|
clip_rect: PSDL_Rect; {**< Read-only *}
|
||||||
|
|
||||||
|
{** info for fast blit mapping to other surfaces *}
|
||||||
|
map: Pointer; {**< Private *} //SDL_BlitMap
|
||||||
|
|
||||||
|
{** Reference count -- used when freeing surface *}
|
||||||
|
refcount: SInt32; {**< Read-mostly *}
|
||||||
|
end;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* The type of function used for surface blitting functions.
|
||||||
|
*}
|
||||||
|
|
||||||
|
TSDL_Blit = function(src: PSDL_Surface; srcrect: PSDL_Rect; dst: PSDL_Surface; dstrect: PSDL_Rect): SInt32;
|
||||||
|
|
||||||
|
// Evaluates to true if the surface needs to be locked before access.
|
||||||
|
function SDL_MUSTLOCK(Const S:PSDL_Surface):Boolean;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Allocate and free an RGB surface.
|
||||||
|
*
|
||||||
|
* If the depth is 4 or 8 bits, an empty palette is allocated for the surface.
|
||||||
|
* If the depth is greater than 8 bits, the pixel format is set using the
|
||||||
|
* flags '[RGB]mask'.
|
||||||
|
*
|
||||||
|
* If the function runs out of memory, it will return NULL.
|
||||||
|
*
|
||||||
|
* flags The flags are obsolete and should be set to 0.
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_CreateRGBSurface(flags: UInt32; width: SInt32; height: SInt32; depth: SInt32; Rmask: UInt32; Gmask: UInt32; Bmask: UInt32; Amask: UInt32): PSDL_Surface cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_CreateRGBSurface' {$ENDIF} {$ENDIF};
|
||||||
|
function SDL_CreateRGBSurfaceWithFormat(flags: Uint32; width, height, depth: sInt32; format: Uint32):PSDL_Surface; cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_CreateRGBSurfaceWithFormat' {$ENDIF} {$ENDIF};
|
||||||
|
function SDL_CreateRGBSurfaceFrom(pixels: Pointer; width: SInt32; height: SInt32; depth: SInt32; pitch: SInt32; Rmask: UInt32; Gmask: UInt32; Bmask: UInt32; Amask: UInt32): PSDL_Surface cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_CreateRGBSurfaceFrom' {$ENDIF} {$ENDIF};
|
||||||
|
function SDL_CreateRGBSurfaceWithFormatFrom(pixels: Pointer; width, height, depth, pitch: sInt32; format: Uint32):PSDL_Surface; cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_CreateRGBSurfaceWithFormatFrom' {$ENDIF} {$ENDIF};
|
||||||
|
procedure SDL_FreeSurface(surface: PSDL_Surface) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_FreeSurface' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Set the palette used by a surface.
|
||||||
|
*
|
||||||
|
* 0, or -1 if the surface format doesn't use a palette.
|
||||||
|
*
|
||||||
|
* A single palette can be shared with many surfaces.
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_SetSurfacePalette(surface: PSDL_Surface; palette: PSDL_Palette): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_SetSurfacePalette' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Sets up a surface for directly accessing the pixels.
|
||||||
|
*
|
||||||
|
* Between calls to SDL_LockSurface() / SDL_UnlockSurface(), you can write
|
||||||
|
* to and read from surface.pixels, using the pixel format stored in
|
||||||
|
* surface.format. Once you are done accessing the surface, you should
|
||||||
|
* use SDL_UnlockSurface() to release it.
|
||||||
|
*
|
||||||
|
* Not all surfaces require locking. If SDL_MUSTLOCK(surface) evaluates
|
||||||
|
* to 0, then you can read and write to the surface at any time, and the
|
||||||
|
* pixel format of the surface will not change.
|
||||||
|
*
|
||||||
|
* No operating system or library calls should be made between lock/unlock
|
||||||
|
* pairs, as critical system locks may be held during this time.
|
||||||
|
*
|
||||||
|
* SDL_LockSurface() returns 0, or -1 if the surface couldn't be locked.
|
||||||
|
*
|
||||||
|
* SDL_UnlockSurface()
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_LockSurface(surface: PSDL_Surface): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_LockSurface' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{** SDL_LockSurface() *}
|
||||||
|
|
||||||
|
procedure SDL_UnlockSurface(surface: PSDL_Surface) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_UnlockSurface' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Load a surface from a seekable SDL data stream (memory or file).
|
||||||
|
*
|
||||||
|
* If freesrc is non-zero, the stream will be closed after being read.
|
||||||
|
*
|
||||||
|
* The new surface should be freed with SDL_FreeSurface().
|
||||||
|
*
|
||||||
|
* the new surface, or NULL if there was an error.
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_LoadBMP_RW(src: PSDL_RWops; freesrc: SInt32): PSDL_Surface cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_LoadBMP_RW' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Load a surface from a file.
|
||||||
|
*
|
||||||
|
* Convenience macro.
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_LoadBMP(_file: PAnsiChar): PSDL_Surface;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Save a surface to a seekable SDL data stream (memory or file).
|
||||||
|
*
|
||||||
|
* If freedst is non-zero, the stream will be closed after being written.
|
||||||
|
*
|
||||||
|
* 0 if successful or -1 if there was an error.
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_SaveBMP_RW(surface: PSDL_Surface; dst: PSDL_RWops; freedst: SInt32): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_LoadBMP_RW' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Save a surface to a file.
|
||||||
|
*
|
||||||
|
* Convenience macro.
|
||||||
|
*}
|
||||||
|
function SDL_SaveBMP(Const surface:PSDL_Surface; Const filename:AnsiString):sInt32;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Sets the RLE acceleration hint for a surface.
|
||||||
|
*
|
||||||
|
* 0 on success, or -1 if the surface is not valid
|
||||||
|
*
|
||||||
|
* If RLE is enabled, colorkey and alpha blending blits are much faster,
|
||||||
|
* but the surface must be locked before directly accessing the pixels.
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_SetSurfaceRLE(surface: PSDL_Surface; flag: SInt32): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_SetSurfaceRLE' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Sets the color key (transparent pixel) in a blittable surface.
|
||||||
|
*
|
||||||
|
* surface The surface to update
|
||||||
|
* flag Non-zero to enable colorkey and 0 to disable colorkey
|
||||||
|
* key The transparent pixel in the native surface format
|
||||||
|
*
|
||||||
|
* 0 on success, or -1 if the surface is not valid
|
||||||
|
*
|
||||||
|
* You can pass SDL_RLEACCEL to enable RLE accelerated blits.
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_SetColorKey(surface: PSDL_Surface; flag: SInt32; key: UInt32): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_SetColorKey' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Gets the color key (transparent pixel) in a blittable surface.
|
||||||
|
*
|
||||||
|
* surface The surface to update
|
||||||
|
* key A pointer filled in with the transparent pixel in the native
|
||||||
|
* surface format
|
||||||
|
*
|
||||||
|
* 0 on success, or -1 if the surface is not valid or colorkey is not
|
||||||
|
* enabled.
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_GetColorKey(surface: PSDL_Surface; key: PUInt32): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetColorKey' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Set an additional color value used in blit operations.
|
||||||
|
*
|
||||||
|
* surface The surface to update.
|
||||||
|
* r The red color value multiplied into blit operations.
|
||||||
|
* g The green color value multiplied into blit operations.
|
||||||
|
* b The blue color value multiplied into blit operations.
|
||||||
|
*
|
||||||
|
* 0 on success, or -1 if the surface is not valid.
|
||||||
|
*
|
||||||
|
* SDL_GetSurfaceColorMod()
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_SetSurfaceColorMod(surface: PSDL_Surface; r: UInt8; g: UInt8; b: UInt8): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_SetSurfaceColorMod' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the additional color value used in blit operations.
|
||||||
|
*
|
||||||
|
* surface The surface to query.
|
||||||
|
* r A pointer filled in with the current red color value.
|
||||||
|
* g A pointer filled in with the current green color value.
|
||||||
|
* b A pointer filled in with the current blue color value.
|
||||||
|
*
|
||||||
|
* 0 on success, or -1 if the surface is not valid.
|
||||||
|
*
|
||||||
|
* SDL_SetSurfaceColorMod()
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_GetSurfaceColorMod(surface: PSDL_Surface; r: PUInt8; g: PUInt8; b: PUInt8): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetSurfaceColorMod' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Set an additional alpha value used in blit operations.
|
||||||
|
*
|
||||||
|
* surface The surface to update.
|
||||||
|
* alpha The alpha value multiplied into blit operations.
|
||||||
|
*
|
||||||
|
* 0 on success, or -1 if the surface is not valid.
|
||||||
|
*
|
||||||
|
* SDL_GetSurfaceAlphaMod()
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_SetSurfaceAlphaMod(surface: PSDL_Surface; alpha: UInt8): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_SetSurfaceAlphaMod' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the additional alpha value used in blit operations.
|
||||||
|
*
|
||||||
|
* surface The surface to query.
|
||||||
|
* alpha A pointer filled in with the current alpha value.
|
||||||
|
*
|
||||||
|
* 0 on success, or -1 if the surface is not valid.
|
||||||
|
*
|
||||||
|
* SDL_SetSurfaceAlphaMod()
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_GetSurfaceAlphaMod(surface: PSDL_Surface; alpha: PUInt8): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetSurfaceAlphaMod' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Set the blend mode used for blit operations.
|
||||||
|
*
|
||||||
|
* surface The surface to update.
|
||||||
|
* blendMode ::SDL_BlendMode to use for blit blending.
|
||||||
|
*
|
||||||
|
* 0 on success, or -1 if the parameters are not valid.
|
||||||
|
*
|
||||||
|
* SDL_GetSurfaceBlendMode()
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_SetSurfaceBlendMode(surface: PSDL_Surface; blendMode: TSDL_BlendMode): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_SetSurfaceBlendMode' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the blend mode used for blit operations.
|
||||||
|
*
|
||||||
|
* surface The surface to query.
|
||||||
|
* blendMode A pointer filled in with the current blend mode.
|
||||||
|
*
|
||||||
|
* 0 on success, or -1 if the surface is not valid.
|
||||||
|
*
|
||||||
|
* SDL_SetSurfaceBlendMode()
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_GetSurfaceBlendMode(surface: PSDL_Surface; blendMode: PSDL_BlendMode): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetSurfaceBlendMode' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Sets the clipping rectangle for the destination surface in a blit.
|
||||||
|
*
|
||||||
|
* If the clip rectangle is NULL, clipping will be disabled.
|
||||||
|
*
|
||||||
|
* If the clip rectangle doesn't intersect the surface, the function will
|
||||||
|
* return SDL_FALSE and blits will be completely clipped. Otherwise the
|
||||||
|
* function returns SDL_TRUE and blits to the surface will be clipped to
|
||||||
|
* the intersection of the surface area and the clipping rectangle.
|
||||||
|
*
|
||||||
|
* Note that blits are automatically clipped to the edges of the source
|
||||||
|
* and destination surfaces.
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_SetClipRect(surface: PSDL_Surface; const rect: PSDL_Rect): TSDL_Bool cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_SetClipRect' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Gets the clipping rectangle for the destination surface in a blit.
|
||||||
|
*
|
||||||
|
* rect must be a pointer to a valid rectangle which will be filled
|
||||||
|
* with the correct values.
|
||||||
|
*}
|
||||||
|
|
||||||
|
procedure SDL_GetClipRect(surface: PSDL_Surface; rect: PSDL_Rect) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetClipRect' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Creates a new surface of the specified format, and then copies and maps
|
||||||
|
* the given surface to it so the blit of the converted surface will be as
|
||||||
|
* fast as possible. If this function fails, it returns NULL.
|
||||||
|
*
|
||||||
|
* The flags parameter is passed to SDL_CreateRGBSurface() and has those
|
||||||
|
* semantics. You can also pass SDL_RLEACCEL in the flags parameter and
|
||||||
|
* SDL will try to RLE accelerate colorkey and alpha blits in the resulting
|
||||||
|
* surface.
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_ConvertSurface(src: PSDL_Surface; fmt: PSDL_PixelFormat; flags: UInt32): PSDL_Surface cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_ConvertSurface' {$ENDIF} {$ENDIF};
|
||||||
|
function SDL_ConvertSurfaceFormat(src: PSDL_Surface; pixel_format: UInt32; flags: UInt32): PSDL_Surface cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_ConvertSurfaceFormat' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Copy a block of pixels of one format to another format
|
||||||
|
*
|
||||||
|
* 0 on success, or -1 if there was an error
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_ConvertPixels(width: SInt32; height: SInt32; src_format: UInt32; const src: Pointer; src_pitch: SInt32; dst_format: UInt32; dst: Pointer; dst_pitch: SInt32): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_ConvertPixels' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Performs a fast fill of the given rectangle with color.
|
||||||
|
*
|
||||||
|
* If rect is NULL, the whole surface will be filled with color.
|
||||||
|
*
|
||||||
|
* The color should be a pixel of the format used by the surface, and
|
||||||
|
* can be generated by the SDL_MapRGB() function.
|
||||||
|
*
|
||||||
|
* 0 on success, or -1 on error.
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_FillRect(dst: PSDL_Surface; const rect: PSDL_Rect; color: UInt32): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_FillRect' {$ENDIF} {$ENDIF};
|
||||||
|
function SDL_FillRects(dst: PSDL_Surface; const rects: PSDL_Rect; count: SInt32; color: UInt32): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_FillRects' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Performs a fast blit from the source surface to the destination surface.
|
||||||
|
*
|
||||||
|
* This assumes that the source and destination rectangles are
|
||||||
|
* the same size. If either \c srcrect or \c dstrect are NULL, the entire
|
||||||
|
* surface ( src or dst) is copied. The final blit rectangles are saved
|
||||||
|
* in srcrect and dstrect after all clipping is performed.
|
||||||
|
*
|
||||||
|
* If the blit is successful, it returns 0, otherwise it returns -1.
|
||||||
|
*
|
||||||
|
* The blit function should not be called on a locked surface.
|
||||||
|
*
|
||||||
|
* The blit semantics for surfaces with and without alpha and colorkey
|
||||||
|
* are defined as follows:
|
||||||
|
*
|
||||||
|
RGBA->RGB:
|
||||||
|
SDL_SRCALPHA set:
|
||||||
|
alpha-blend (using alpha-channel).
|
||||||
|
SDL_SRCCOLORKEY ignored.
|
||||||
|
SDL_SRCALPHA not set:
|
||||||
|
copy RGB.
|
||||||
|
if SDL_SRCCOLORKEY set, only copy the pixels matching the
|
||||||
|
RGB values of the source colour key, ignoring alpha in the
|
||||||
|
comparison.
|
||||||
|
|
||||||
|
RGB->RGBA:
|
||||||
|
SDL_SRCALPHA set:
|
||||||
|
alpha-blend (using the source per-surface alpha value);
|
||||||
|
set destination alpha to opaque.
|
||||||
|
SDL_SRCALPHA not set:
|
||||||
|
copy RGB, set destination alpha to source per-surface alpha value.
|
||||||
|
both:
|
||||||
|
if SDL_SRCCOLORKEY set, only copy the pixels matching the
|
||||||
|
source colour key.
|
||||||
|
|
||||||
|
RGBA->RGBA:
|
||||||
|
SDL_SRCALPHA set:
|
||||||
|
alpha-blend (using the source alpha channel) the RGB values;
|
||||||
|
leave destination alpha untouched. [Note: is this correct?]
|
||||||
|
SDL_SRCCOLORKEY ignored.
|
||||||
|
SDL_SRCALPHA not set:
|
||||||
|
copy all of RGBA to the destination.
|
||||||
|
if SDL_SRCCOLORKEY set, only copy the pixels matching the
|
||||||
|
RGB values of the source colour key, ignoring alpha in the
|
||||||
|
comparison.
|
||||||
|
|
||||||
|
RGB->RGB:
|
||||||
|
SDL_SRCALPHA set:
|
||||||
|
alpha-blend (using the source per-surface alpha value).
|
||||||
|
SDL_SRCALPHA not set:
|
||||||
|
copy RGB.
|
||||||
|
both:
|
||||||
|
if SDL_SRCCOLORKEY set, only copy the pixels matching the
|
||||||
|
source colour key.r
|
||||||
|
*
|
||||||
|
* You should call SDL_BlitSurface() unless you know exactly how SDL
|
||||||
|
* blitting works internally and how to use the other blit functions.
|
||||||
|
*}
|
||||||
|
|
||||||
|
(* SDL_surface.h uses #define to change all SDL_BlitSurface() calls into SDL_UpperBlit() calls. *
|
||||||
|
* Since Pascal macro support is very limited, we workaround by outright pointing SDL_BlitSurface() to SDL_UpperBlit(). *)
|
||||||
|
function SDL_BlitSurface(src: PSDL_Surface; const srcrect: PSDL_Rect; dst: PSDL_Surface; dstrect: PSDL_Rect): SInt32 cdecl;
|
||||||
|
external SDL_LibName name {$IF DEFINED(DELPHI) AND DEFINED(MACOS)} '_SDL_UpperBlit' {$ELSE} 'SDL_UpperBlit' {$IFEND};
|
||||||
|
|
||||||
|
|
||||||
|
{**
|
||||||
|
* This is the public blit function, SDL_BlitSurface(), and it performs
|
||||||
|
* rectangle validation and clipping before passing it to SDL_LowerBlit()
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_UpperBlit(src: PSDL_Surface; const srcrect: PSDL_Rect; dst: PSDL_Surface; dstrect: PSDL_Rect): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_UpperBlit' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* This is a semi-private blit function and it performs low-level surface
|
||||||
|
* blitting only.
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_LowerBlit(src: PSDL_Surface; srcrect: PSDL_Rect; dst: PSDL_Surface; dstrect: PSDL_Rect): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_LowerBlit' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Perform a fast, low quality, stretch blit between two surfaces of the
|
||||||
|
* same pixel format.
|
||||||
|
*
|
||||||
|
* This function uses a static buffer, and is not thread-safe.
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_SoftStretch(src: PSDL_Surface; const srcrect: PSDL_Rect; dst: PSDL_Surface; const dstrect: PSDL_Surface): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_SoftStretch' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
(* SDL_surface.h uses #define to change all SDL_BlitSurfaceScaled() calls into SDL_UpperBlitScaled() calls. *
|
||||||
|
* Since Pascal macro support is very limited, we workaround by outright pointing SDL_BlitSurfaceScaled() to SDL_UpperBlitScaled(). *)
|
||||||
|
function SDL_BlitSurfaceScaled(src: PSDL_Surface; const srcrect: PSDL_Rect; dst: PSDL_Surface; dstrect: PSDL_Rect): SInt32 cdecl;
|
||||||
|
external SDL_LibName name {$IF DEFINED(DELPHI) AND DEFINED(MACOS)} '_SDL_UpperBlitScaled' {$ELSE} 'SDL_UpperBlitScaled' {$IFEND};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* This is the public scaled blit function, SDL_BlitScaled(), and it performs
|
||||||
|
* rectangle validation and clipping before passing it to SDL_LowerBlitScaled()
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_UpperBlitScaled(src: PSDL_Surface; const srcrect: PSDL_Rect; dst: PSDL_Surface; dstrect: PSDL_Rect): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_UpperBlitScaled' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* This is a semi-private blit function and it performs low-level surface
|
||||||
|
* scaled blitting only.
|
||||||
|
*}
|
||||||
|
|
||||||
|
function SDL_LowerBlitScaled(src: PSDL_Surface; srcrect: PSDL_Rect; dst: PSDL_Surface; dstrect: PSDL_Rect): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_LowerBlitScaled' {$ENDIF} {$ENDIF};
|
105
model_viewer/sdl2/sdlsystem.inc
Normal file
105
model_viewer/sdl2/sdlsystem.inc
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
// from "SDL_system.h"
|
||||||
|
|
||||||
|
(* Platform specific functions for Windows *)
|
||||||
|
{$IF DEFINED(WIN32) OR DEFINED(WIN64)}
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief Set a function that is called for every windows message, before TranslateMessage()
|
||||||
|
*}
|
||||||
|
Type
|
||||||
|
TSDL_WindowsMessageHook = Procedure(userdata, hWnd: Pointer; mesage: UInt32; wParam: UInt64; lParam: SInt64); cdecl;
|
||||||
|
|
||||||
|
Procedure SDL_SetWindowsMessageHook(callback: TSDL_WindowsMessageHook; userdata: Pointer); cdecl;
|
||||||
|
external SDL_LibName;
|
||||||
|
|
||||||
|
{* Returns the D3D9 adapter index that matches the specified display index.
|
||||||
|
* This adapter index can be passed to IDirect3D9::CreateDevice and controls
|
||||||
|
* on which monitor a full screen application will appear.
|
||||||
|
*}
|
||||||
|
Function SDL_Direct3D9GetAdapterIndex(displayIndex:SInt32):SInt32;
|
||||||
|
cdecl; external SDL_LibName;
|
||||||
|
|
||||||
|
{* Returns the D3D device associated with a renderer, or NULL if it's not a D3D renderer.
|
||||||
|
* Once you are done using the device, you should release it to avoid a resource leak.
|
||||||
|
*}
|
||||||
|
Type PIDirect3DDevice9 = Pointer;
|
||||||
|
Function SDL_RenderGetD3D9Device(renderer:PSDL_Renderer):PIDirect3DDevice9;
|
||||||
|
cdecl; external SDL_LibName;
|
||||||
|
|
||||||
|
{* Returns the DXGI Adapter and Output indices for the specified display index.
|
||||||
|
* These can be passed to EnumAdapters and EnumOutputs respectively to get the objects
|
||||||
|
* required to create a DX10 or DX11 device and swap chain.
|
||||||
|
*}
|
||||||
|
function SDL_DXGIGetOutputInfo(displayIndex :SInt32; adapterIndex, outputIndex :PSInt32): TSDL_Bool;
|
||||||
|
cdecl; external SDL_LibName;
|
||||||
|
|
||||||
|
{$IFEND}
|
||||||
|
|
||||||
|
|
||||||
|
(* Platform specific functions for WinRT *)
|
||||||
|
{$IFDEF __WINRT__}
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief WinRT / Windows Phone path types
|
||||||
|
*}
|
||||||
|
Type
|
||||||
|
TSDL_WinRT_Path = (
|
||||||
|
|
||||||
|
{** \brief The installed app's root directory.
|
||||||
|
Files here are likely to be read-only. *}
|
||||||
|
SDL_WINRT_PATH_INSTALLED_LOCATION = 0,
|
||||||
|
|
||||||
|
{** \brief The app's local data store. Files may be written here *}
|
||||||
|
SDL_WINRT_PATH_LOCAL_FOLDER = 1,
|
||||||
|
|
||||||
|
{** \brief The app's roaming data store. Unsupported on Windows Phone.
|
||||||
|
Files written here may be copied to other machines via a network
|
||||||
|
connection.
|
||||||
|
*}
|
||||||
|
SDL_WINRT_PATH_ROAMING_FOLDER = 2,
|
||||||
|
|
||||||
|
{** \brief The app's temporary data store. Unsupported on Windows Phone.
|
||||||
|
Files written here may be deleted at any time. *}
|
||||||
|
SDL_WINRT_PATH_TEMP_FOLDER = 3
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief Retrieves a WinRT defined path on the local file system
|
||||||
|
*
|
||||||
|
* \note Documentation on most app-specific path types on WinRT
|
||||||
|
* can be found on MSDN, at the URL:
|
||||||
|
* http://msdn.microsoft.com/en-us/library/windows/apps/hh464917.aspx
|
||||||
|
*
|
||||||
|
* \param pathType The type of path to retrieve.
|
||||||
|
* \ret A UCS-2 string (16-bit, wide-char) containing the path, or NULL
|
||||||
|
* if the path is not available for any reason. Not all paths are
|
||||||
|
* available on all versions of Windows. This is especially true on
|
||||||
|
* Windows Phone. Check the documentation for the given
|
||||||
|
* SDL_WinRT_Path for more information on which path types are
|
||||||
|
* supported where.
|
||||||
|
*}
|
||||||
|
Function SDL_WinRTGetFSPathUNICODE(pathType :TSDL_WinRT_Path):PWideChar;
|
||||||
|
cdecl; external SDL_LibName;
|
||||||
|
|
||||||
|
|
||||||
|
{**
|
||||||
|
* \brief Retrieves a WinRT defined path on the local file system
|
||||||
|
*
|
||||||
|
* \note Documentation on most app-specific path types on WinRT
|
||||||
|
* can be found on MSDN, at the URL:
|
||||||
|
* http://msdn.microsoft.com/en-us/library/windows/apps/hh464917.aspx
|
||||||
|
*
|
||||||
|
* \param pathType The type of path to retrieve.
|
||||||
|
* \ret A UTF-8 string (8-bit, multi-byte) containing the path, or NULL
|
||||||
|
* if the path is not available for any reason. Not all paths are
|
||||||
|
* available on all versions of Windows. This is especially true on
|
||||||
|
* Windows Phone. Check the documentation for the given
|
||||||
|
* SDL_WinRT_Path for more information on which path types are
|
||||||
|
* supported where.
|
||||||
|
*}
|
||||||
|
Function SDL_WinRTGetFSPathUTF8(pathType :TSDL_WinRT_Path):PChar;
|
||||||
|
cdecl; external SDL_LibName;
|
||||||
|
|
||||||
|
{$ENDIF}
|
203
model_viewer/sdl2/sdlsyswm.inc
Normal file
203
model_viewer/sdl2/sdlsyswm.inc
Normal file
@ -0,0 +1,203 @@
|
|||||||
|
// from sdl_syswm.h
|
||||||
|
|
||||||
|
{$IFDEF WINDOWS}
|
||||||
|
{$DEFINE SDL_VIDEO_DRIVER_WINDOWS}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IF DEFINED (LINUX) OR DEFINED(UNIX)}
|
||||||
|
{$DEFINE SDL_VIDEO_DRIVER_X11}
|
||||||
|
{$IFEND}
|
||||||
|
|
||||||
|
{$IFDEF DARWIN}
|
||||||
|
{$DEFINE SDL_VIDEO_DRIVER_COCOA}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{**
|
||||||
|
* These are the various supported windowing subsystems
|
||||||
|
*}
|
||||||
|
Type
|
||||||
|
TSDL_SYSWM_TYPE = (
|
||||||
|
SDL_SYSWM_UNKNOWN,
|
||||||
|
SDL_SYSWM_WINDOWS,
|
||||||
|
SDL_SYSWM_X11,
|
||||||
|
SDL_SYSWM_DIRECTFB,
|
||||||
|
SDL_SYSWM_COCOA,
|
||||||
|
SDL_SYSWM_UIKIT,
|
||||||
|
SDL_SYSWM_WAYLAND, // Since SDL 2.0.2
|
||||||
|
SDL_SYSWM_MIR, // Since SDL 2.0.2
|
||||||
|
SDL_SYSWM_WINRT, // Since SDL 2.0.3
|
||||||
|
SDL_SYSWM_ANDROID, // Since SDL 2.0.4
|
||||||
|
SDL_SYSWM_VIVANTE // Since SDL 2.0.5
|
||||||
|
);
|
||||||
|
|
||||||
|
/// sdl_syswm.h uses anonymous structs, declared right in SDL_SysWMmsg.
|
||||||
|
/// Since Pascal does not allow this, we workaround by introducing named types
|
||||||
|
/// before the proper TSDL_SysWMmsg definition.
|
||||||
|
{$IFDEF SDL_VIDEO_DRIVER_WINDOWS}
|
||||||
|
__SYSWM_WINDOWS = record
|
||||||
|
hwnd: HWND; {**< The window for the message }
|
||||||
|
msg: uInt; {**< The type of message *}
|
||||||
|
wParam: WPARAM; {**< WORD message parameter *}
|
||||||
|
lParam: LPARAM; {**< WORD message parameter *}
|
||||||
|
end;
|
||||||
|
{$ENDIF}
|
||||||
|
{$IFDEF SDL_VIDEO_DRIVER_X11}
|
||||||
|
__SYSWM_X11 = record
|
||||||
|
event: {$IFDEF FPC} TXEvent {$ELSE} XEvent {$ENDIF};
|
||||||
|
end;
|
||||||
|
{$ENDIF}
|
||||||
|
{$IFDEF SDL_VIDEO_DRIVER_DIRECTFB}
|
||||||
|
__SYSWM_DIRECTFB = record
|
||||||
|
event: DFBEvent;
|
||||||
|
end;
|
||||||
|
{$ENDIF}
|
||||||
|
{$IFDEF SDL_VIDEO_DRIVER_COCOA}
|
||||||
|
__SYSWM_COCOA = record
|
||||||
|
(* No Cocoa window events yet *)
|
||||||
|
end;
|
||||||
|
{$ENDIF}
|
||||||
|
{$IFDEF SDL_VIDEO_DRIVER_UIKIT}
|
||||||
|
__SYSWM_UIKIT = record
|
||||||
|
(* No UIKit window events yet *)
|
||||||
|
end;
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{**
|
||||||
|
* The custom event structure.
|
||||||
|
*}
|
||||||
|
PSDL_SysWMmsg = ^TSDL_SysWMmsg;
|
||||||
|
TSDL_SysWMmsg = record
|
||||||
|
version: TSDL_version;
|
||||||
|
Case subsystem: TSDL_SYSWM_TYPE of
|
||||||
|
(* Cannot have empty record case *)
|
||||||
|
SDL_SYSWM_UNKNOWN: (dummy: sInt32);
|
||||||
|
{$IFDEF SDL_VIDEO_DRIVER_WINDOWS}
|
||||||
|
SDL_SYSWM_WINDOWS: (win: __SYSWM_WINDOWS);
|
||||||
|
{$ENDIF}
|
||||||
|
{$IFDEF SDL_VIDEO_DRIVER_X11}
|
||||||
|
SDL_SYSWM_X11: (x11: __SYSWM_X11);
|
||||||
|
{$ENDIF}
|
||||||
|
{$IFDEF SDL_VIDEO_DRIVER_DIRECTFB}
|
||||||
|
SDL_SYSWM_DIRECTFB: (dfb: __SYSWM_DIRECTFB);
|
||||||
|
{$ENDIF}
|
||||||
|
{$IFDEF SDL_VIDEO_DRIVER_COCOA}
|
||||||
|
SDL_SYSWM_COCOA: (cocoa: __SYSWM_COCOA);
|
||||||
|
{$ENDIF}
|
||||||
|
{$IFDEF SDL_VIDEO_DRIVER_UIKIT}
|
||||||
|
SDL_SYSWM_UIKIT: (uikit: __SYSWM_UIKIT);
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
/// Once again, sdl_syswm.h uses anonymous structs, declared right in SDL_SysWMinfo.
|
||||||
|
/// We workaround by introducing named types before the proper TSDL_SysWMinfo definition.
|
||||||
|
{$IFDEF SDL_VIDEO_DRIVER_WINDOWS}
|
||||||
|
__WMINFO_WINDOWS = record
|
||||||
|
window: HWND; {**< The window handle *}
|
||||||
|
end;
|
||||||
|
{$ENDIF}
|
||||||
|
{$IFDEF SDL_VIDEO_DRIVER_WINRT} // Since SDL 2.0.3
|
||||||
|
__WMINFO_WINRT = record
|
||||||
|
window: IInspectable; {**< The WinRT CoreWindow *}
|
||||||
|
end;
|
||||||
|
{$ENDIF}
|
||||||
|
{$IFDEF SDL_VIDEO_DRIVER_X11}
|
||||||
|
__WMINFO_X11 = record
|
||||||
|
display: PDisplay; {**< The X11 display *}
|
||||||
|
window: TWindow; {**< The X11 window *}
|
||||||
|
end;
|
||||||
|
{$ENDIF}
|
||||||
|
{$IFDEF SDL_VIDEO_DRIVER_DIRECTFB}
|
||||||
|
__WMINFO_DFB = record
|
||||||
|
dfb: IDirectFB; {**< The directfb main interface *}
|
||||||
|
window: IDirectFBWindow; {**< The directfb window handle *}
|
||||||
|
surface: IDirectFBSurface; {**< The directfb client surface *}
|
||||||
|
end;
|
||||||
|
{$ENDIF}
|
||||||
|
{$IFDEF SDL_VIDEO_DRIVER_COCOA}
|
||||||
|
__WMINFO_COCOA = record
|
||||||
|
window: NSWindow; {* The Cocoa window *}
|
||||||
|
end;
|
||||||
|
{$ENDIF}
|
||||||
|
{$IFDEF SDL_VIDEO_DRIVER_UIKIT}
|
||||||
|
__WMINFO_UIKIT = record
|
||||||
|
window: UIWindow; {* The UIKit window *}
|
||||||
|
end;
|
||||||
|
{$ENDIF}
|
||||||
|
{$IFDEF SDL_VIDEO_DRIVER_WAYLAND} // Since SDL 2.0.2
|
||||||
|
__WMINFO_WAYLAND = record
|
||||||
|
display: wl_display; {**< Wayland display *}
|
||||||
|
surface: wl_surface; {**< Wayland surface *}
|
||||||
|
shell_surface: wl_shell_surface; {**< Wayland shell_surface (window manager handle) *}
|
||||||
|
end;
|
||||||
|
{$ENDIF}
|
||||||
|
{$IFDEF SDL_VIDEO_DRIVER_MIR} // Since SDL 2.0.2
|
||||||
|
__WMINFO_MIR = record
|
||||||
|
connection: PMirConnection; {**< Mir display server connection *}
|
||||||
|
surface: PMirSurface; {**< Mir surface *}
|
||||||
|
end;
|
||||||
|
{$ENDIF}
|
||||||
|
{$IFDEF SDL_VIDEO_DRIVER_ANDROID} // Planned for SDL 2.0.4
|
||||||
|
__WMINFO_ANDROID = record
|
||||||
|
window : PANativeWindow;
|
||||||
|
surface: PEGLSurface;
|
||||||
|
end;
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{**
|
||||||
|
* The custom window manager information structure.
|
||||||
|
*
|
||||||
|
* When this structure is returned, it holds information about which
|
||||||
|
* low level system it is using, and will be one of SDL_SYSWM_TYPE.
|
||||||
|
*}
|
||||||
|
PSDL_SysWMinfo = ^TSDL_SysWMinfo;
|
||||||
|
TSDL_SysWMinfo = record
|
||||||
|
version: TSDL_version;
|
||||||
|
Case subsystem: TSDL_SYSWM_TYPE of
|
||||||
|
(* Cannot have empty record case *)
|
||||||
|
SDL_SYSWM_UNKNOWN: (dummy: sInt32);
|
||||||
|
{$IFDEF SDL_VIDEO_DRIVER_WINDOWS}
|
||||||
|
SDL_SYSWM_WINDOWS: (win : __WMINFO_WINDOWS);
|
||||||
|
{$ENDIF}
|
||||||
|
{$IFDEF SDL_VIDEO_DRIVER_WINRT}
|
||||||
|
SDL_SYSWM_WINRT: (winrt : __WMINFO_WINRT);
|
||||||
|
{$ENDIF}
|
||||||
|
{$IFDEF SDL_VIDEO_DRIVER_X11}
|
||||||
|
SDL_SYSWM_X11: (x11 : __WMINFO_X11);
|
||||||
|
{$ENDIF}
|
||||||
|
{$IFDEF SDL_VIDEO_DRIVER_DIRECTFB}
|
||||||
|
SDL_SYSWM_DIRECTFB: (dfb : __WMINFO_DFB);
|
||||||
|
{$ENDIF}
|
||||||
|
{$IFDEF SDL_VIDEO_DRIVER_COCOA}
|
||||||
|
SDL_SYSWM_COCOA: (cocoa : __WMINFO_COCOA);
|
||||||
|
{$ENDIF}
|
||||||
|
{$IFDEF SDL_VIDEO_DRIVER_UIKIT}
|
||||||
|
SDL_SYSWM_UIKIT: (uikit : __WMINFO_UIKIT);
|
||||||
|
{$ENDIF}
|
||||||
|
{$IFDEF SDL_VIDEO_DRIVER_WAYLAND}
|
||||||
|
SDL_SYSWM_WAYLAND: (wl : __WMINFO_WAYLAND);
|
||||||
|
{$ENDIF}
|
||||||
|
{$IFDEF SDL_VIDEO_DRIVER_MIR}
|
||||||
|
SDL_SYSWM_MIR: (mir : __WMINFO_MIR);
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
{* Function prototypes *}
|
||||||
|
(**
|
||||||
|
* \brief This function allows access to driver-dependent window information.
|
||||||
|
*
|
||||||
|
* \param window The window about which information is being requested
|
||||||
|
* \param info This structure must be initialized with the SDL version, and is
|
||||||
|
* then filled in with information about the given window.
|
||||||
|
*
|
||||||
|
* \return SDL_TRUE if the function is implemented and the version member of
|
||||||
|
* the \c info struct is valid, SDL_FALSE otherwise.
|
||||||
|
*
|
||||||
|
* You typically use this function like this:
|
||||||
|
* \code
|
||||||
|
* SDL_SysWMinfo info;
|
||||||
|
* SDL_VERSION(&info.version);
|
||||||
|
* if ( SDL_GetWindowWMInfo(window, &info) ) { ... }
|
||||||
|
* \endcode
|
||||||
|
*)
|
||||||
|
Function SDL_GetWindowWMInfo(window:PSDL_Window; info : PSDL_SysWMinfo):TSDL_bool; cdecl;
|
||||||
|
external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetWindowWMInfo' {$ENDIF} {$ENDIF};
|
222
model_viewer/sdl2/sdlthread.inc
Normal file
222
model_viewer/sdl2/sdlthread.inc
Normal file
@ -0,0 +1,222 @@
|
|||||||
|
//from "sdl_thread.h"
|
||||||
|
|
||||||
|
{* The SDL thread structure, defined in SDL_thread.c *}
|
||||||
|
//todo!
|
||||||
|
type
|
||||||
|
{* The SDL thread priority
|
||||||
|
*
|
||||||
|
* Note: On many systems you require special privileges to set high priority.
|
||||||
|
*}
|
||||||
|
|
||||||
|
TSDL_ThreadPriority = (SDL_THREAD_PRIORITY_LOW,
|
||||||
|
SDL_THREAD_PRIORITY_NORMAL,
|
||||||
|
SDL_THREAD_PRIORITY_HIGH);
|
||||||
|
|
||||||
|
{* The function passed to SDL_CreateThread()
|
||||||
|
It is passed a void* user context parameter and returns an int.
|
||||||
|
*}
|
||||||
|
PSDL_ThreadFunction = ^TSDL_ThreadFunction;
|
||||||
|
TSDL_ThreadFunction = function(data: Pointer): Integer; cdecl;
|
||||||
|
|
||||||
|
{* The SDL thread ID *}
|
||||||
|
TSDL_ThreadID = LongWord;
|
||||||
|
{
|
||||||
|
PSDL_Thread = Pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
PSDL_Thread = ^TSDL_Thread;
|
||||||
|
TSDL_Thread = record
|
||||||
|
threadid: TSDL_ThreadID;
|
||||||
|
handle: THandle;
|
||||||
|
status: SInt32;
|
||||||
|
errbuf: TSDL_Error;
|
||||||
|
name: PAnsiChar;
|
||||||
|
data: Pointer;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TSDL_TLSID = Cardinal;
|
||||||
|
|
||||||
|
{$IFDEF WINDOWS}
|
||||||
|
{**
|
||||||
|
* SDL_thread.h
|
||||||
|
*
|
||||||
|
* We compile SDL into a DLL. This means, that it's the DLL which
|
||||||
|
* creates a new thread for the calling process with the SDL_CreateThread()
|
||||||
|
* API. There is a problem with this, that only the RTL of the SDL.DLL will
|
||||||
|
* be initialized for those threads, and not the RTL of the calling
|
||||||
|
* application!
|
||||||
|
*
|
||||||
|
* To solve this, we make a little hack here.
|
||||||
|
*
|
||||||
|
* We'll always use the caller's _beginthread() and _endthread() APIs to
|
||||||
|
* start a new thread. This way, if it's the SDL.DLL which uses this API,
|
||||||
|
* then the RTL of SDL.DLL will be used to create the new thread, and if it's
|
||||||
|
* the application, then the RTL of the application will be used.
|
||||||
|
*
|
||||||
|
* So, in short:
|
||||||
|
* Always use the _beginthread() and _endthread() of the calling runtime
|
||||||
|
* library!
|
||||||
|
*}
|
||||||
|
{$DEFINE SDL_PASSED_BEGINTHREAD_ENDTHREAD}
|
||||||
|
|
||||||
|
type
|
||||||
|
{$IFNDEF DELPHI16UP}
|
||||||
|
TThreadID = Cardinal;
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
TpfnSDL_CurrentBeginThread = function(SecurityAttributes: Pointer; StackSize: LongWord; ThreadFunc: TThreadFunc; Parameter: Pointer; CreationFlags: LongWord; var ThreadId: TThreadID): Integer;
|
||||||
|
|
||||||
|
TpfnSDL_CurrentEndThread = procedure(ExitCode: Integer);
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Create a thread.
|
||||||
|
*}
|
||||||
|
function SDL_CreateThread(fn: TSDL_ThreadFunction; name: PAnsiChar; data: Pointer; pfnBeginThread: TpfnSDL_CurrentBeginThread; pfnEndThread: TpfnSDL_CurrentEndThread): PSDL_Thread; cdecl; overload; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_CreateThread' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Create a thread.
|
||||||
|
*}
|
||||||
|
function SDL_CreateThread(fn: TSDL_ThreadFunction; name: PAnsiChar; data: Pointer): PSDL_Thread; overload;
|
||||||
|
|
||||||
|
{$ELSE}
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Create a thread.
|
||||||
|
*
|
||||||
|
* Thread naming is a little complicated: Most systems have very small
|
||||||
|
* limits for the string length (BeOS has 32 bytes, Linux currently has 16,
|
||||||
|
* Visual C++ 6.0 has nine!), and possibly other arbitrary rules. You'll
|
||||||
|
* have to see what happens with your system's debugger. The name should be
|
||||||
|
* UTF-8 (but using the naming limits of C identifiers is a better bet).
|
||||||
|
* There are no requirements for thread naming conventions, so long as the
|
||||||
|
* string is null-terminated UTF-8, but these guidelines are helpful in
|
||||||
|
* choosing a name:
|
||||||
|
*
|
||||||
|
* http://stackoverflow.com/questions/149932/naming-conventions-for-threads
|
||||||
|
*
|
||||||
|
* If a system imposes requirements, SDL will try to munge the string for
|
||||||
|
* it (truncate, etc), but the original string contents will be available
|
||||||
|
* from SDL_GetThreadName().
|
||||||
|
*}
|
||||||
|
function SDL_CreateThread(fn: TSDL_ThreadFunction; name: PAnsiChar; data: Pointer): PSDL_Thread; cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_CreateThread' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the thread name, as it was specified in SDL_CreateThread().
|
||||||
|
* This function returns a pointer to a UTF-8 string that names the
|
||||||
|
* specified thread, or NULL if it doesn't have a name. This is internal
|
||||||
|
* memory, not to be free()'d by the caller, and remains valid until the
|
||||||
|
* specified thread is cleaned up by SDL_WaitThread().
|
||||||
|
*}
|
||||||
|
function SDL_GetThreadName(thread: PSDL_Thread): PAnsiChar cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetThreadName' {$ENDIF}{$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the thread identifier for the current thread.
|
||||||
|
*}
|
||||||
|
function SDL_ThreadID: TSDL_ThreadID cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_ThreadID' {$ENDIF}{$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the thread identifier for the specified thread.
|
||||||
|
*
|
||||||
|
* Equivalent to SDL_ThreadID() if the specified thread is NULL.
|
||||||
|
*}
|
||||||
|
function SDL_GetThreadID(thread: PSDL_Thread): TSDL_ThreadID cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetThreadID' {$ENDIF}{$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Set the priority for the current thread
|
||||||
|
*}
|
||||||
|
function SDL_SetThreadPriority(priority: TSDL_ThreadPriority): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_SetThreadPriority' {$ENDIF}{$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Wait for a thread to finish.
|
||||||
|
*
|
||||||
|
* The return code for the thread function is placed in the area
|
||||||
|
* pointed to by status, if status is not NULL.
|
||||||
|
*}
|
||||||
|
procedure SDL_WaitThread(thread: PSDL_Thread; status: PInt) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_WaitThread' {$ENDIF}{$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* A thread may be "detached" to signify that it should not remain until
|
||||||
|
* another thread has called SDL_WaitThread() on it. Detaching a thread
|
||||||
|
* is useful for long-running threads that nothing needs to synchronize
|
||||||
|
* with or further manage. When a detached thread is done, it simply
|
||||||
|
* goes away.
|
||||||
|
*
|
||||||
|
* There is no way to recover the return code of a detached thread. If you
|
||||||
|
* need this, don't detach the thread and instead use SDL_WaitThread().
|
||||||
|
*
|
||||||
|
* Once a thread is detached, you should usually assume the SDL_Thread isn't
|
||||||
|
* safe to reference again, as it will become invalid immediately upon
|
||||||
|
* the detached thread's exit, instead of remaining until someone has called
|
||||||
|
* SDL_WaitThread() to finally clean it up. As such, don't detach the same
|
||||||
|
* thread more than once.
|
||||||
|
*
|
||||||
|
* If a thread has already exited when passed to SDL_DetachThread(), it will
|
||||||
|
* stop waiting for a call to SDL_WaitThread() and clean up immediately.
|
||||||
|
* It is not safe to detach a thread that might be used with SDL_WaitThread().
|
||||||
|
*
|
||||||
|
* You may not call SDL_WaitThread() on a thread that has been detached.
|
||||||
|
* Use either that function or this one, but not both, or behavior is
|
||||||
|
* undefined.
|
||||||
|
*
|
||||||
|
* It is safe to pass NIL to this function; it is a no-op.
|
||||||
|
*}
|
||||||
|
procedure SDL_DetachThread(thread:TSDL_Thread); cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_DetachThread' {$ENDIF}{$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Create an identifier that is globally visible to all threads but refers to data that is thread-specific.
|
||||||
|
*
|
||||||
|
* The newly created thread local storage identifier, or 0 on error
|
||||||
|
*
|
||||||
|
* var tls_lock: TSDL_SpinLock;
|
||||||
|
* thread_local_storage: TSDL_TLSID;
|
||||||
|
*
|
||||||
|
* procedure SetMyThreadData(value: Pointer)
|
||||||
|
*
|
||||||
|
* if not (thread_local_storage) then
|
||||||
|
* begin
|
||||||
|
* SDL_AtomicLock(@tls_lock);
|
||||||
|
* if (!thread_local_storage)
|
||||||
|
* thread_local_storage = SDL_TLSCreate();
|
||||||
|
*
|
||||||
|
* SDL_AtomicUnLock(@tls_lock);
|
||||||
|
*
|
||||||
|
* SDL_TLSSet(thread_local_storage, value);
|
||||||
|
* end;
|
||||||
|
*
|
||||||
|
* function GetMyThreadData(): Pointer;
|
||||||
|
* begin
|
||||||
|
* Result := SDL_TLSGet(thread_local_storage);
|
||||||
|
* end;
|
||||||
|
*
|
||||||
|
* SDL_TLSGet()
|
||||||
|
* SDL_TLSSet()
|
||||||
|
*}
|
||||||
|
function SDL_TLSCreate: TSDL_TLSID cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_TLSCreate' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the value associated with a thread local storage ID for the current thread.
|
||||||
|
*
|
||||||
|
* id The thread local storage ID
|
||||||
|
*
|
||||||
|
* The value associated with the ID for the current thread, or NULL if no value has been set.
|
||||||
|
*
|
||||||
|
* SDL_TLSCreate()
|
||||||
|
* SDL_TLSSet()
|
||||||
|
*}
|
||||||
|
function SDL_TLSGet(id: TSDL_TLSID): Pointer cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_TLSGet' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Set the value associated with a thread local storage ID for the current thread.
|
||||||
|
*
|
||||||
|
* id The thread local storage ID
|
||||||
|
* value The value to associate with the ID for the current thread
|
||||||
|
* destructor_ A function called when the thread exits, to free the value.
|
||||||
|
*
|
||||||
|
* 0 on success, -1 on error
|
||||||
|
*
|
||||||
|
* SDL_TLSCreate()
|
||||||
|
* SDL_TLSGet()
|
||||||
|
*}
|
||||||
|
function SDL_TLSSet(id: TSDL_TLSID; value: Pointer; destructor_: Pointer): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_TLSSet' {$ENDIF} {$ENDIF};
|
61
model_viewer/sdl2/sdltimer.inc
Normal file
61
model_viewer/sdl2/sdltimer.inc
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
//from "sdl_timer.h"
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the number of milliseconds since the SDL library initialization.
|
||||||
|
*
|
||||||
|
* This value wraps if the program runs for more than ~49 days.
|
||||||
|
*}
|
||||||
|
function SDL_GetTicks: UInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetTicks' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the current value of the high resolution counter
|
||||||
|
*}
|
||||||
|
function SDL_GetPerformanceCounter: UInt64 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetPerformanceCounter' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the count per second of the high resolution counter
|
||||||
|
*}
|
||||||
|
function SDL_GetPerformanceFrequency: UInt64 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetPerformanceFrequency' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Wait a specified number of milliseconds before returning.
|
||||||
|
*}
|
||||||
|
procedure SDL_Delay(ms: UInt32) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_Delay' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Function prototype for the timer callback function.
|
||||||
|
*
|
||||||
|
* The callback function is passed the current timer interval and returns
|
||||||
|
* the next timer interval. If the returned value is the same as the one
|
||||||
|
* passed in, the periodic alarm continues, otherwise a new alarm is
|
||||||
|
* scheduled. If the callback returns 0, the periodic alarm is cancelled.
|
||||||
|
*}
|
||||||
|
|
||||||
|
type
|
||||||
|
TSDL_TimerCallback = function(interval: UInt32; param: Pointer): UInt32; cdecl;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Definition of the timer ID type.
|
||||||
|
*}
|
||||||
|
TSDL_TimerID = SInt32;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Add a new timer to the pool of timers already running.
|
||||||
|
*
|
||||||
|
* A timer ID, or NULL when an error occurs.
|
||||||
|
*}
|
||||||
|
function SDL_AddTimer(interval: UInt32; callback: TSDL_TimerCallback; param: Pointer): TSDL_TimerID cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_AddTimer' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Remove a timer knowing its ID.
|
||||||
|
*
|
||||||
|
* A boolean value indicating success or failure.
|
||||||
|
*
|
||||||
|
* It is not safe to remove a timer multiple times.
|
||||||
|
*}
|
||||||
|
function SDL_RemoveTimer(id: TSDL_TimerID): Boolean cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_RemoveTimer' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Compare SDL ticks values, and return true if A has passed B.
|
||||||
|
*}
|
||||||
|
function SDL_TICKS_PASSED(Const A, B:UInt32):Boolean;
|
43
model_viewer/sdl2/sdltouch.inc
Normal file
43
model_viewer/sdl2/sdltouch.inc
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
//from "sdl_touch.h"
|
||||||
|
|
||||||
|
type
|
||||||
|
PSDL_TouchID = ^TSDL_TouchID;
|
||||||
|
TSDL_TouchID = SInt64;
|
||||||
|
|
||||||
|
PSDL_FingerID = ^TSDL_FingerID;
|
||||||
|
TSDL_FingerID = SInt64;
|
||||||
|
|
||||||
|
PSDL_Finger = ^TSDL_Finger;
|
||||||
|
TSDL_Finger = record
|
||||||
|
id: TSDL_FingerID;
|
||||||
|
x: Float;
|
||||||
|
y: Float;
|
||||||
|
pressure: Float;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{* Used as the device ID for mouse events simulated with touch input *}
|
||||||
|
const
|
||||||
|
SDL_TOUCH_MOUSEID = UInt32(-1);
|
||||||
|
|
||||||
|
{* Function prototypes *}
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the number of registered touch devices.
|
||||||
|
*}
|
||||||
|
function SDL_GetNumTouchDevices: SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetNumTouchDevices' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the touch ID with the given index, or 0 if the index is invalid.
|
||||||
|
*}
|
||||||
|
function SDL_GetTouchDevice(index: SInt32): TSDL_TouchID cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetTouchDevice' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the number of active fingers for a given touch device.
|
||||||
|
*}
|
||||||
|
function SDL_GetNumTouchFingers(touchID: TSDL_TouchID): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetNumTouchFingers' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the finger object of the given touch, with the given index.
|
||||||
|
*}
|
||||||
|
function SDL_GetTouchFinger(touchID: TSDL_TouchID; index: SInt32): PSDL_Finger cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetTouchFinger' {$ENDIF} {$ENDIF};
|
||||||
|
|
71
model_viewer/sdl2/sdltype.inc
Normal file
71
model_viewer/sdl2/sdltype.inc
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
//types from SDLtype_s.h / SDL_stdinc.h
|
||||||
|
type
|
||||||
|
|
||||||
|
TSDL_Bool = (SDL_FALSE,SDL_TRUE);
|
||||||
|
|
||||||
|
DWord = LongWord;
|
||||||
|
|
||||||
|
PUInt8Array = ^TUInt8Array;
|
||||||
|
PUInt8 = ^UInt8;
|
||||||
|
PPUInt8 = ^PUInt8;
|
||||||
|
UInt8 = Byte;
|
||||||
|
{$EXTERNALSYM UInt8}
|
||||||
|
TUInt8Array = array [0..MAXINT shr 1] of UInt8;
|
||||||
|
|
||||||
|
PUInt16 = ^UInt16;
|
||||||
|
UInt16 = word;
|
||||||
|
{$EXTERNALSYM UInt16}
|
||||||
|
|
||||||
|
PSInt8 = ^SInt8;
|
||||||
|
SInt8 = Shortint;
|
||||||
|
{$EXTERNALSYM SInt8}
|
||||||
|
|
||||||
|
PSInt16 = ^SInt16;
|
||||||
|
SInt16 = smallint;
|
||||||
|
{$EXTERNALSYM SInt16}
|
||||||
|
|
||||||
|
PUInt32 = ^UInt32;
|
||||||
|
UInt32 = Cardinal;
|
||||||
|
{$EXTERNALSYM UInt32}
|
||||||
|
|
||||||
|
PSInt32 = ^SInt32;
|
||||||
|
SInt32 = LongInt;
|
||||||
|
{$EXTERNALSYM SInt32}
|
||||||
|
|
||||||
|
PFloat = ^Float;
|
||||||
|
PInt = ^LongInt;
|
||||||
|
|
||||||
|
PShortInt = ^ShortInt;
|
||||||
|
|
||||||
|
{$IFNDEF Has_Int64}
|
||||||
|
PUInt64 = ^UInt64;
|
||||||
|
UInt64 = record
|
||||||
|
hi: UInt32;
|
||||||
|
lo: UInt32;
|
||||||
|
end;
|
||||||
|
{$EXTERNALSYM UInt64}
|
||||||
|
|
||||||
|
PInt64 = ^Int64;
|
||||||
|
Int64 = record
|
||||||
|
hi: UInt32;
|
||||||
|
lo: UInt32;
|
||||||
|
end;
|
||||||
|
{$EXTERNALSYM Int64}
|
||||||
|
|
||||||
|
PSInt64 = ^SInt64;
|
||||||
|
SInt64 = Int64;
|
||||||
|
{$EXTERNALSYM SInt64}
|
||||||
|
{$ELSE}
|
||||||
|
PSInt64 = ^SInt64;
|
||||||
|
SInt64 = Int64;
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFNDEF WIN64}
|
||||||
|
size_t = UInt32;
|
||||||
|
{$ELSE}
|
||||||
|
size_t = UInt64;
|
||||||
|
{$ENDIF}
|
||||||
|
{$EXTERNALSYM SIZE_T}
|
||||||
|
|
||||||
|
Float = Single;
|
||||||
|
{$EXTERNALSYM Float}
|
113
model_viewer/sdl2/sdlversion.inc
Normal file
113
model_viewer/sdl2/sdlversion.inc
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
//from "sdl_version.h"
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Information the version of SDL in use.
|
||||||
|
*
|
||||||
|
* Represents the library's version as three levels: major revision
|
||||||
|
* (increments with massive changes, additions, and enhancements),
|
||||||
|
* minor revision (increments with backwards-compatible changes to the
|
||||||
|
* major revision), and patchlevel (increments with fixes to the minor
|
||||||
|
* revision).
|
||||||
|
*
|
||||||
|
* SDL_VERSION
|
||||||
|
* SDL_GetVersion
|
||||||
|
*}
|
||||||
|
type
|
||||||
|
PSDL_Version = ^TSDL_Version;
|
||||||
|
TSDL_Version = record
|
||||||
|
major, {**< major version *}
|
||||||
|
minor, {**< minor version *}
|
||||||
|
patch: UInt8; {**< update version *}
|
||||||
|
end;
|
||||||
|
|
||||||
|
{* Printable format: "%d.%d.%d", MAJOR, MINOR, PATCHLEVEL
|
||||||
|
*}
|
||||||
|
const
|
||||||
|
SDL_MAJOR_VERSION = 2;
|
||||||
|
SDL_MINOR_VERSION = 0;
|
||||||
|
SDL_PATCHLEVEL = 4;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Macro to determine SDL version program was compiled against.
|
||||||
|
*
|
||||||
|
* This macro fills in a SDL_version structure with the version of the
|
||||||
|
* library you compiled against. This is determined by what header the
|
||||||
|
* compiler uses. Note that if you dynamically linked the library, you might
|
||||||
|
* have a slightly newer or older version at runtime. That version can be
|
||||||
|
* determined with SDL_GetVersion(), which, unlike SDL_VERSION(),
|
||||||
|
* is not a macro.
|
||||||
|
*
|
||||||
|
* x An instance on TSDL_Version to fill with version data.
|
||||||
|
*
|
||||||
|
* SDL_version
|
||||||
|
* SDL_GetVersion
|
||||||
|
*}
|
||||||
|
procedure SDL_VERSION(Out x: TSDL_Version);
|
||||||
|
|
||||||
|
{**
|
||||||
|
* This macro turns the version numbers into a numeric value:
|
||||||
|
*
|
||||||
|
* (1,2,3) -> (1203)
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* This assumes that there will never be more than 100 patchlevels.
|
||||||
|
*}
|
||||||
|
function SDL_VERSIONNUM(X,Y,Z: UInt32): Cardinal;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* This is the version number macro for the current SDL version.
|
||||||
|
*}
|
||||||
|
function SDL_COMPILEDVERSION: Cardinal;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* This macro will evaluate to true if compiled with SDL at least X.Y.Z.
|
||||||
|
*}
|
||||||
|
function SDL_VERSION_ATLEAST(X,Y,Z: Cardinal): Boolean;
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the version of SDL that is linked against your program.
|
||||||
|
*
|
||||||
|
* If you are linking to SDL dynamically, then it is possible that the
|
||||||
|
* current version will be different than the version you compiled against.
|
||||||
|
* This function returns the current version, while SDL_VERSION() is a
|
||||||
|
* macro that tells you what version you compiled with.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* compiled: TSDL_Version;
|
||||||
|
* linked: TSDL_Version;
|
||||||
|
*
|
||||||
|
* SDL_VERSION(@compiled);
|
||||||
|
* SDL_GetVersion(@linked);
|
||||||
|
* WriteLn('We compiled against SDL version: ' +
|
||||||
|
* IntToStr(compiled.major) +
|
||||||
|
* IntToStr(compiled.minor) +
|
||||||
|
* IntToStr(compiled.patch));
|
||||||
|
* WriteLn('But we linked against SDL version:' +
|
||||||
|
* IntToStr(compiled.major) +
|
||||||
|
* IntToStr(compiled.minor) +
|
||||||
|
* IntToStr(compiled.patch));
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* This function may be called safely at any time, even before SDL_Init().
|
||||||
|
*
|
||||||
|
* SDL_VERSION
|
||||||
|
*}
|
||||||
|
procedure SDL_GetVersion(ver: PSDL_Version) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetVersion' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the code revision of SDL that is linked against your program.
|
||||||
|
*
|
||||||
|
* Returns an arbitrary string (a hash value) uniquely identifying the
|
||||||
|
* exact revision of the SDL library in use, and is only useful in comparing
|
||||||
|
* against other revisions. It is NOT an incrementing number.
|
||||||
|
*}
|
||||||
|
function SDL_GetRevision: PAnsiChar cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetRevision' {$ENDIF} {$ENDIF};
|
||||||
|
|
||||||
|
{**
|
||||||
|
* Get the revision number of SDL that is linked against your program.
|
||||||
|
*
|
||||||
|
* Returns a number uniquely identifying the exact revision of the SDL
|
||||||
|
* library in use. It is an incrementing number based on commits to
|
||||||
|
* hg.libsdl.org.
|
||||||
|
*}
|
||||||
|
function SDL_GetRevisionNumber: SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetRevisionNumber' {$ENDIF} {$ENDIF};
|
1286
model_viewer/sdl2/sdlvideo.inc
Normal file
1286
model_viewer/sdl2/sdlvideo.inc
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user