mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-10-26 12:27:44 +00:00
Make D3D math functions static inline to reduce likelihood of linking conflicts
Convert SDL_d3dmath.c functions to static inline in SDL_d3dmath.h to make it less likely to conflict when static linking SDL. raylib's SDL backend does not work with a "normal" upstream binary static link. It has these errors: /usr/bin/ld: /usr/local/lib64/libSDL3.a(SDL_d3dmath.c.o): in function `MatrixIdentity': SDL/src/render/SDL_d3dmath.c:35: multiple definition of `MatrixIdentity'; CMakeFiles/raylib.dir/rcore.c.o:rcore.c:(.text+0x18470): first defined here /usr/bin/ld: /usr/local/lib64/libSDL3.a(SDL_d3dmath.c.o): in function `MatrixMultiply': SDL/src/render/SDL_d3dmath.c:44: multiple definition of `MatrixMultiply'; CMakeFiles/raylib.dir/rcore.c.o:rcore.c:(.text+0x18540): first defined here collect2: error: ld returned 1 exit status It works if these functions aren't emitted, (i.e. !SDL_VIDEO_RENDER_D3D(11|12|GPU|VULKAN) Or, if SDL is not linked static. Which I know is preferred anyway. In raylib's case, it doesn't use this code anyway so it's not a problem to build it yourself with them disabled. But it's a minor hassle to be incompatible with static linking libraries from upstream. I can't see any good reason for these functions to not be static inline already, so I just put them in the header and deleted the .c. Raylib's conflicting case is a library with a public function exposed to users. But SDL's case is not. - Moved all matrix functions from SDL_d3dmath.c to SDL_d3dmath.h as static inline - Removed SDL_d3dmath.c from all project files (Visual Studio and Xcode) - Functions affected: MatrixIdentity, MatrixMultiply, MatrixScaling, MatrixTranslation, MatrixRotationX, MatrixRotationY, MatrixRotationZ
This commit is contained in:
@@ -800,7 +800,6 @@
|
|||||||
<ClCompile Include="..\..\src\render\opengl\SDL_shaders_gl.c" />
|
<ClCompile Include="..\..\src\render\opengl\SDL_shaders_gl.c" />
|
||||||
<ClCompile Include="..\..\src\render\opengles2\SDL_render_gles2.c" />
|
<ClCompile Include="..\..\src\render\opengles2\SDL_render_gles2.c" />
|
||||||
<ClCompile Include="..\..\src\render\opengles2\SDL_shaders_gles2.c" />
|
<ClCompile Include="..\..\src\render\opengles2\SDL_shaders_gles2.c" />
|
||||||
<ClCompile Include="..\..\src\render\SDL_d3dmath.c" />
|
|
||||||
<ClCompile Include="..\..\src\render\SDL_render.c" />
|
<ClCompile Include="..\..\src\render\SDL_render.c" />
|
||||||
<ClCompile Include="..\..\src\render\SDL_render_unsupported.c" />
|
<ClCompile Include="..\..\src\render\SDL_render_unsupported.c" />
|
||||||
<ClCompile Include="..\..\src\render\SDL_yuv_sw.c" />
|
<ClCompile Include="..\..\src\render\SDL_yuv_sw.c" />
|
||||||
|
|||||||
@@ -118,7 +118,6 @@
|
|||||||
<ClCompile Include="..\..\src\render\opengl\SDL_shaders_gl.c" />
|
<ClCompile Include="..\..\src\render\opengl\SDL_shaders_gl.c" />
|
||||||
<ClCompile Include="..\..\src\render\opengles2\SDL_render_gles2.c" />
|
<ClCompile Include="..\..\src\render\opengles2\SDL_render_gles2.c" />
|
||||||
<ClCompile Include="..\..\src\render\opengles2\SDL_shaders_gles2.c" />
|
<ClCompile Include="..\..\src\render\opengles2\SDL_shaders_gles2.c" />
|
||||||
<ClCompile Include="..\..\src\render\SDL_d3dmath.c" />
|
|
||||||
<ClCompile Include="..\..\src\render\SDL_render.c" />
|
<ClCompile Include="..\..\src\render\SDL_render.c" />
|
||||||
<ClCompile Include="..\..\src\render\SDL_render_unsupported.c" />
|
<ClCompile Include="..\..\src\render\SDL_render_unsupported.c" />
|
||||||
<ClCompile Include="..\..\src\render\SDL_yuv_sw.c" />
|
<ClCompile Include="..\..\src\render\SDL_yuv_sw.c" />
|
||||||
|
|||||||
@@ -667,7 +667,6 @@
|
|||||||
<ClCompile Include="..\..\src\render\opengl\SDL_shaders_gl.c" />
|
<ClCompile Include="..\..\src\render\opengl\SDL_shaders_gl.c" />
|
||||||
<ClCompile Include="..\..\src\render\opengles2\SDL_render_gles2.c" />
|
<ClCompile Include="..\..\src\render\opengles2\SDL_render_gles2.c" />
|
||||||
<ClCompile Include="..\..\src\render\opengles2\SDL_shaders_gles2.c" />
|
<ClCompile Include="..\..\src\render\opengles2\SDL_shaders_gles2.c" />
|
||||||
<ClCompile Include="..\..\src\render\SDL_d3dmath.c" />
|
|
||||||
<ClCompile Include="..\..\src\render\SDL_render.c" />
|
<ClCompile Include="..\..\src\render\SDL_render.c" />
|
||||||
<ClCompile Include="..\..\src\render\SDL_render_unsupported.c" />
|
<ClCompile Include="..\..\src\render\SDL_render_unsupported.c" />
|
||||||
<ClCompile Include="..\..\src\render\SDL_yuv_sw.c" />
|
<ClCompile Include="..\..\src\render\SDL_yuv_sw.c" />
|
||||||
|
|||||||
@@ -1536,7 +1536,6 @@
|
|||||||
<ClCompile Include="..\..\src\sensor\windows\SDL_windowssensor.c">
|
<ClCompile Include="..\..\src\sensor\windows\SDL_windowssensor.c">
|
||||||
<Filter>sensor\windows</Filter>
|
<Filter>sensor\windows</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\src\render\SDL_d3dmath.c">
|
|
||||||
<Filter>render</Filter>
|
<Filter>render</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\src\render\SDL_render.c">
|
<ClCompile Include="..\..\src\render\SDL_render.c">
|
||||||
|
|||||||
@@ -299,7 +299,6 @@
|
|||||||
A7D8BA2523E2514400DCD162 /* SDL_drawpoint.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8FC23E2514000DCD162 /* SDL_drawpoint.c */; };
|
A7D8BA2523E2514400DCD162 /* SDL_drawpoint.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8FC23E2514000DCD162 /* SDL_drawpoint.c */; };
|
||||||
A7D8BA2B23E2514400DCD162 /* SDL_blendfillrect.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8FD23E2514000DCD162 /* SDL_blendfillrect.c */; };
|
A7D8BA2B23E2514400DCD162 /* SDL_blendfillrect.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8FD23E2514000DCD162 /* SDL_blendfillrect.c */; };
|
||||||
A7D8BA3123E2514400DCD162 /* SDL_rotate.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8FE23E2514000DCD162 /* SDL_rotate.h */; };
|
A7D8BA3123E2514400DCD162 /* SDL_rotate.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A8FE23E2514000DCD162 /* SDL_rotate.h */; };
|
||||||
A7D8BA3723E2514400DCD162 /* SDL_d3dmath.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A8FF23E2514000DCD162 /* SDL_d3dmath.c */; };
|
|
||||||
A7D8BA4923E2514400DCD162 /* SDL_render_gles2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A90423E2514000DCD162 /* SDL_render_gles2.c */; };
|
A7D8BA4923E2514400DCD162 /* SDL_render_gles2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7D8A90423E2514000DCD162 /* SDL_render_gles2.c */; };
|
||||||
A7D8BA4F23E2514400DCD162 /* SDL_shaders_gles2.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90523E2514000DCD162 /* SDL_shaders_gles2.h */; };
|
A7D8BA4F23E2514400DCD162 /* SDL_shaders_gles2.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90523E2514000DCD162 /* SDL_shaders_gles2.h */; };
|
||||||
A7D8BA5523E2514400DCD162 /* SDL_gles2funcs.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90623E2514000DCD162 /* SDL_gles2funcs.h */; };
|
A7D8BA5523E2514400DCD162 /* SDL_gles2funcs.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D8A90623E2514000DCD162 /* SDL_gles2funcs.h */; };
|
||||||
@@ -889,7 +888,6 @@
|
|||||||
A7D8A8FC23E2514000DCD162 /* SDL_drawpoint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_drawpoint.c; sourceTree = "<group>"; };
|
A7D8A8FC23E2514000DCD162 /* SDL_drawpoint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_drawpoint.c; sourceTree = "<group>"; };
|
||||||
A7D8A8FD23E2514000DCD162 /* SDL_blendfillrect.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blendfillrect.c; sourceTree = "<group>"; };
|
A7D8A8FD23E2514000DCD162 /* SDL_blendfillrect.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blendfillrect.c; sourceTree = "<group>"; };
|
||||||
A7D8A8FE23E2514000DCD162 /* SDL_rotate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_rotate.h; sourceTree = "<group>"; };
|
A7D8A8FE23E2514000DCD162 /* SDL_rotate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_rotate.h; sourceTree = "<group>"; };
|
||||||
A7D8A8FF23E2514000DCD162 /* SDL_d3dmath.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_d3dmath.c; sourceTree = "<group>"; };
|
|
||||||
A7D8A90423E2514000DCD162 /* SDL_render_gles2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_render_gles2.c; sourceTree = "<group>"; };
|
A7D8A90423E2514000DCD162 /* SDL_render_gles2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_render_gles2.c; sourceTree = "<group>"; };
|
||||||
A7D8A90523E2514000DCD162 /* SDL_shaders_gles2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_shaders_gles2.h; sourceTree = "<group>"; };
|
A7D8A90523E2514000DCD162 /* SDL_shaders_gles2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_shaders_gles2.h; sourceTree = "<group>"; };
|
||||||
A7D8A90623E2514000DCD162 /* SDL_gles2funcs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_gles2funcs.h; sourceTree = "<group>"; };
|
A7D8A90623E2514000DCD162 /* SDL_gles2funcs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_gles2funcs.h; sourceTree = "<group>"; };
|
||||||
@@ -2182,7 +2180,6 @@
|
|||||||
A7D8A90C23E2514000DCD162 /* opengl */,
|
A7D8A90C23E2514000DCD162 /* opengl */,
|
||||||
A7D8A90323E2514000DCD162 /* opengles2 */,
|
A7D8A90323E2514000DCD162 /* opengles2 */,
|
||||||
A7D8A8EF23E2514000DCD162 /* software */,
|
A7D8A8EF23E2514000DCD162 /* software */,
|
||||||
A7D8A8FF23E2514000DCD162 /* SDL_d3dmath.c */,
|
|
||||||
A7D8A8DC23E2514000DCD162 /* SDL_d3dmath.h */,
|
A7D8A8DC23E2514000DCD162 /* SDL_d3dmath.h */,
|
||||||
A7D8A8DB23E2514000DCD162 /* SDL_render.c */,
|
A7D8A8DB23E2514000DCD162 /* SDL_render.c */,
|
||||||
E4F7981D2AD8D86A00669F54 /* SDL_render_unsupported.c */,
|
E4F7981D2AD8D86A00669F54 /* SDL_render_unsupported.c */,
|
||||||
@@ -2954,7 +2951,6 @@
|
|||||||
A7D8BBE723E2574800DCD162 /* SDL_uikitviewcontroller.m in Sources */,
|
A7D8BBE723E2574800DCD162 /* SDL_uikitviewcontroller.m in Sources */,
|
||||||
A7D8ADF223E2514100DCD162 /* SDL_blit_A.c in Sources */,
|
A7D8ADF223E2514100DCD162 /* SDL_blit_A.c in Sources */,
|
||||||
A7D8BBDD23E2574800DCD162 /* SDL_uikitmodes.m in Sources */,
|
A7D8BBDD23E2574800DCD162 /* SDL_uikitmodes.m in Sources */,
|
||||||
A7D8BA3723E2514400DCD162 /* SDL_d3dmath.c in Sources */,
|
|
||||||
F3A9AE9C2C8A13C100AAC390 /* SDL_pipeline_gpu.c in Sources */,
|
F3A9AE9C2C8A13C100AAC390 /* SDL_pipeline_gpu.c in Sources */,
|
||||||
89E580232D03606400DAF6D3 /* SDL_hidapihaptic.c in Sources */,
|
89E580232D03606400DAF6D3 /* SDL_hidapihaptic.c in Sources */,
|
||||||
89E580242D03606400DAF6D3 /* SDL_hidapihaptic_lg4ff.c in Sources */,
|
89E580242D03606400DAF6D3 /* SDL_hidapihaptic_lg4ff.c in Sources */,
|
||||||
|
|||||||
@@ -1,135 +0,0 @@
|
|||||||
/*
|
|
||||||
Simple DirectMedia Layer
|
|
||||||
Copyright (C) 1997-2025 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.
|
|
||||||
*/
|
|
||||||
#include "SDL_internal.h"
|
|
||||||
|
|
||||||
#if defined(SDL_VIDEO_RENDER_D3D) || \
|
|
||||||
defined(SDL_VIDEO_RENDER_D3D11) || \
|
|
||||||
defined(SDL_VIDEO_RENDER_D3D12) || \
|
|
||||||
defined(SDL_VIDEO_RENDER_VULKAN)
|
|
||||||
|
|
||||||
#include "SDL_d3dmath.h"
|
|
||||||
|
|
||||||
// Direct3D matrix math functions
|
|
||||||
|
|
||||||
Float4X4 MatrixIdentity(void)
|
|
||||||
{
|
|
||||||
Float4X4 m;
|
|
||||||
SDL_zero(m);
|
|
||||||
m.v._11 = 1.0f;
|
|
||||||
m.v._22 = 1.0f;
|
|
||||||
m.v._33 = 1.0f;
|
|
||||||
m.v._44 = 1.0f;
|
|
||||||
return m;
|
|
||||||
}
|
|
||||||
|
|
||||||
Float4X4 MatrixMultiply(Float4X4 M1, Float4X4 M2)
|
|
||||||
{
|
|
||||||
Float4X4 m;
|
|
||||||
m.v._11 = M1.v._11 * M2.v._11 + M1.v._12 * M2.v._21 + M1.v._13 * M2.v._31 + M1.v._14 * M2.v._41;
|
|
||||||
m.v._12 = M1.v._11 * M2.v._12 + M1.v._12 * M2.v._22 + M1.v._13 * M2.v._32 + M1.v._14 * M2.v._42;
|
|
||||||
m.v._13 = M1.v._11 * M2.v._13 + M1.v._12 * M2.v._23 + M1.v._13 * M2.v._33 + M1.v._14 * M2.v._43;
|
|
||||||
m.v._14 = M1.v._11 * M2.v._14 + M1.v._12 * M2.v._24 + M1.v._13 * M2.v._34 + M1.v._14 * M2.v._44;
|
|
||||||
m.v._21 = M1.v._21 * M2.v._11 + M1.v._22 * M2.v._21 + M1.v._23 * M2.v._31 + M1.v._24 * M2.v._41;
|
|
||||||
m.v._22 = M1.v._21 * M2.v._12 + M1.v._22 * M2.v._22 + M1.v._23 * M2.v._32 + M1.v._24 * M2.v._42;
|
|
||||||
m.v._23 = M1.v._21 * M2.v._13 + M1.v._22 * M2.v._23 + M1.v._23 * M2.v._33 + M1.v._24 * M2.v._43;
|
|
||||||
m.v._24 = M1.v._21 * M2.v._14 + M1.v._22 * M2.v._24 + M1.v._23 * M2.v._34 + M1.v._24 * M2.v._44;
|
|
||||||
m.v._31 = M1.v._31 * M2.v._11 + M1.v._32 * M2.v._21 + M1.v._33 * M2.v._31 + M1.v._34 * M2.v._41;
|
|
||||||
m.v._32 = M1.v._31 * M2.v._12 + M1.v._32 * M2.v._22 + M1.v._33 * M2.v._32 + M1.v._34 * M2.v._42;
|
|
||||||
m.v._33 = M1.v._31 * M2.v._13 + M1.v._32 * M2.v._23 + M1.v._33 * M2.v._33 + M1.v._34 * M2.v._43;
|
|
||||||
m.v._34 = M1.v._31 * M2.v._14 + M1.v._32 * M2.v._24 + M1.v._33 * M2.v._34 + M1.v._34 * M2.v._44;
|
|
||||||
m.v._41 = M1.v._41 * M2.v._11 + M1.v._42 * M2.v._21 + M1.v._43 * M2.v._31 + M1.v._44 * M2.v._41;
|
|
||||||
m.v._42 = M1.v._41 * M2.v._12 + M1.v._42 * M2.v._22 + M1.v._43 * M2.v._32 + M1.v._44 * M2.v._42;
|
|
||||||
m.v._43 = M1.v._41 * M2.v._13 + M1.v._42 * M2.v._23 + M1.v._43 * M2.v._33 + M1.v._44 * M2.v._43;
|
|
||||||
m.v._44 = M1.v._41 * M2.v._14 + M1.v._42 * M2.v._24 + M1.v._43 * M2.v._34 + M1.v._44 * M2.v._44;
|
|
||||||
return m;
|
|
||||||
}
|
|
||||||
|
|
||||||
Float4X4 MatrixScaling(float x, float y, float z)
|
|
||||||
{
|
|
||||||
Float4X4 m;
|
|
||||||
SDL_zero(m);
|
|
||||||
m.v._11 = x;
|
|
||||||
m.v._22 = y;
|
|
||||||
m.v._33 = z;
|
|
||||||
m.v._44 = 1.0f;
|
|
||||||
return m;
|
|
||||||
}
|
|
||||||
|
|
||||||
Float4X4 MatrixTranslation(float x, float y, float z)
|
|
||||||
{
|
|
||||||
Float4X4 m;
|
|
||||||
SDL_zero(m);
|
|
||||||
m.v._11 = 1.0f;
|
|
||||||
m.v._22 = 1.0f;
|
|
||||||
m.v._33 = 1.0f;
|
|
||||||
m.v._44 = 1.0f;
|
|
||||||
m.v._41 = x;
|
|
||||||
m.v._42 = y;
|
|
||||||
m.v._43 = z;
|
|
||||||
return m;
|
|
||||||
}
|
|
||||||
|
|
||||||
Float4X4 MatrixRotationX(float r)
|
|
||||||
{
|
|
||||||
float sinR = SDL_sinf(r);
|
|
||||||
float cosR = SDL_cosf(r);
|
|
||||||
Float4X4 m;
|
|
||||||
SDL_zero(m);
|
|
||||||
m.v._11 = 1.0f;
|
|
||||||
m.v._22 = cosR;
|
|
||||||
m.v._23 = sinR;
|
|
||||||
m.v._32 = -sinR;
|
|
||||||
m.v._33 = cosR;
|
|
||||||
m.v._44 = 1.0f;
|
|
||||||
return m;
|
|
||||||
}
|
|
||||||
|
|
||||||
Float4X4 MatrixRotationY(float r)
|
|
||||||
{
|
|
||||||
float sinR = SDL_sinf(r);
|
|
||||||
float cosR = SDL_cosf(r);
|
|
||||||
Float4X4 m;
|
|
||||||
SDL_zero(m);
|
|
||||||
m.v._11 = cosR;
|
|
||||||
m.v._13 = -sinR;
|
|
||||||
m.v._22 = 1.0f;
|
|
||||||
m.v._31 = sinR;
|
|
||||||
m.v._33 = cosR;
|
|
||||||
m.v._44 = 1.0f;
|
|
||||||
return m;
|
|
||||||
}
|
|
||||||
|
|
||||||
Float4X4 MatrixRotationZ(float r)
|
|
||||||
{
|
|
||||||
float sinR = SDL_sinf(r);
|
|
||||||
float cosR = SDL_cosf(r);
|
|
||||||
Float4X4 m;
|
|
||||||
SDL_zero(m);
|
|
||||||
m.v._11 = cosR;
|
|
||||||
m.v._12 = sinR;
|
|
||||||
m.v._21 = -sinR;
|
|
||||||
m.v._22 = cosR;
|
|
||||||
m.v._33 = 1.0f;
|
|
||||||
m.v._44 = 1.0f;
|
|
||||||
return m;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // SDL_VIDEO_RENDER_D3D || SDL_VIDEO_RENDER_D3D11 || SDL_VIDEO_RENDER_D3D12 || SDL_VIDEO_RENDER_VULKAN
|
|
||||||
@@ -69,13 +69,108 @@ typedef struct
|
|||||||
};
|
};
|
||||||
} Float4X4;
|
} Float4X4;
|
||||||
|
|
||||||
extern Float4X4 MatrixIdentity(void);
|
static inline Float4X4 MatrixIdentity(void)
|
||||||
extern Float4X4 MatrixMultiply(Float4X4 M1, Float4X4 M2);
|
{
|
||||||
extern Float4X4 MatrixScaling(float x, float y, float z);
|
Float4X4 m;
|
||||||
extern Float4X4 MatrixTranslation(float x, float y, float z);
|
SDL_zero(m);
|
||||||
extern Float4X4 MatrixRotationX(float r);
|
m.v._11 = 1.0f;
|
||||||
extern Float4X4 MatrixRotationY(float r);
|
m.v._22 = 1.0f;
|
||||||
extern Float4X4 MatrixRotationZ(float r);
|
m.v._33 = 1.0f;
|
||||||
|
m.v._44 = 1.0f;
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline Float4X4 MatrixMultiply(Float4X4 M1, Float4X4 M2)
|
||||||
|
{
|
||||||
|
Float4X4 m;
|
||||||
|
m.v._11 = M1.v._11 * M2.v._11 + M1.v._12 * M2.v._21 + M1.v._13 * M2.v._31 + M1.v._14 * M2.v._41;
|
||||||
|
m.v._12 = M1.v._11 * M2.v._12 + M1.v._12 * M2.v._22 + M1.v._13 * M2.v._32 + M1.v._14 * M2.v._42;
|
||||||
|
m.v._13 = M1.v._11 * M2.v._13 + M1.v._12 * M2.v._23 + M1.v._13 * M2.v._33 + M1.v._14 * M2.v._43;
|
||||||
|
m.v._14 = M1.v._11 * M2.v._14 + M1.v._12 * M2.v._24 + M1.v._13 * M2.v._34 + M1.v._14 * M2.v._44;
|
||||||
|
m.v._21 = M1.v._21 * M2.v._11 + M1.v._22 * M2.v._21 + M1.v._23 * M2.v._31 + M1.v._24 * M2.v._41;
|
||||||
|
m.v._22 = M1.v._21 * M2.v._12 + M1.v._22 * M2.v._22 + M1.v._23 * M2.v._32 + M1.v._24 * M2.v._42;
|
||||||
|
m.v._23 = M1.v._21 * M2.v._13 + M1.v._22 * M2.v._23 + M1.v._23 * M2.v._33 + M1.v._24 * M2.v._43;
|
||||||
|
m.v._24 = M1.v._21 * M2.v._14 + M1.v._22 * M2.v._24 + M1.v._23 * M2.v._34 + M1.v._24 * M2.v._44;
|
||||||
|
m.v._31 = M1.v._31 * M2.v._11 + M1.v._32 * M2.v._21 + M1.v._33 * M2.v._31 + M1.v._34 * M2.v._41;
|
||||||
|
m.v._32 = M1.v._31 * M2.v._12 + M1.v._32 * M2.v._22 + M1.v._33 * M2.v._32 + M1.v._34 * M2.v._42;
|
||||||
|
m.v._33 = M1.v._31 * M2.v._13 + M1.v._32 * M2.v._23 + M1.v._33 * M2.v._33 + M1.v._34 * M2.v._43;
|
||||||
|
m.v._34 = M1.v._31 * M2.v._14 + M1.v._32 * M2.v._24 + M1.v._33 * M2.v._34 + M1.v._34 * M2.v._44;
|
||||||
|
m.v._41 = M1.v._41 * M2.v._11 + M1.v._42 * M2.v._21 + M1.v._43 * M2.v._31 + M1.v._44 * M2.v._41;
|
||||||
|
m.v._42 = M1.v._41 * M2.v._12 + M1.v._42 * M2.v._22 + M1.v._43 * M2.v._32 + M1.v._44 * M2.v._42;
|
||||||
|
m.v._43 = M1.v._41 * M2.v._13 + M1.v._42 * M2.v._23 + M1.v._43 * M2.v._33 + M1.v._44 * M2.v._43;
|
||||||
|
m.v._44 = M1.v._41 * M2.v._14 + M1.v._42 * M2.v._24 + M1.v._43 * M2.v._34 + M1.v._44 * M2.v._44;
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline Float4X4 MatrixScaling(float x, float y, float z)
|
||||||
|
{
|
||||||
|
Float4X4 m;
|
||||||
|
SDL_zero(m);
|
||||||
|
m.v._11 = x;
|
||||||
|
m.v._22 = y;
|
||||||
|
m.v._33 = z;
|
||||||
|
m.v._44 = 1.0f;
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline Float4X4 MatrixTranslation(float x, float y, float z)
|
||||||
|
{
|
||||||
|
Float4X4 m;
|
||||||
|
SDL_zero(m);
|
||||||
|
m.v._11 = 1.0f;
|
||||||
|
m.v._22 = 1.0f;
|
||||||
|
m.v._33 = 1.0f;
|
||||||
|
m.v._44 = 1.0f;
|
||||||
|
m.v._41 = x;
|
||||||
|
m.v._42 = y;
|
||||||
|
m.v._43 = z;
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline Float4X4 MatrixRotationX(float r)
|
||||||
|
{
|
||||||
|
float sinR = SDL_sinf(r);
|
||||||
|
float cosR = SDL_cosf(r);
|
||||||
|
Float4X4 m;
|
||||||
|
SDL_zero(m);
|
||||||
|
m.v._11 = 1.0f;
|
||||||
|
m.v._22 = cosR;
|
||||||
|
m.v._23 = sinR;
|
||||||
|
m.v._32 = -sinR;
|
||||||
|
m.v._33 = cosR;
|
||||||
|
m.v._44 = 1.0f;
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline Float4X4 MatrixRotationY(float r)
|
||||||
|
{
|
||||||
|
float sinR = SDL_sinf(r);
|
||||||
|
float cosR = SDL_cosf(r);
|
||||||
|
Float4X4 m;
|
||||||
|
SDL_zero(m);
|
||||||
|
m.v._11 = cosR;
|
||||||
|
m.v._13 = -sinR;
|
||||||
|
m.v._22 = 1.0f;
|
||||||
|
m.v._31 = sinR;
|
||||||
|
m.v._33 = cosR;
|
||||||
|
m.v._44 = 1.0f;
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline Float4X4 MatrixRotationZ(float r)
|
||||||
|
{
|
||||||
|
float sinR = SDL_sinf(r);
|
||||||
|
float cosR = SDL_cosf(r);
|
||||||
|
Float4X4 m;
|
||||||
|
SDL_zero(m);
|
||||||
|
m.v._11 = cosR;
|
||||||
|
m.v._12 = sinR;
|
||||||
|
m.v._21 = -sinR;
|
||||||
|
m.v._22 = cosR;
|
||||||
|
m.v._33 = 1.0f;
|
||||||
|
m.v._44 = 1.0f;
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
// Ends C function definitions when using C++
|
// Ends C function definitions when using C++
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|||||||
Reference in New Issue
Block a user