diff --git a/.gitmodules b/.gitmodules index cf80aaaf..def1eca2 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,9 +4,6 @@ [submodule "win32/zlib/src"] path = win32/zlib/src url = https://github.com/madler/zlib.git -[submodule "win32/DirectXMath"] - path = win32/DirectXMath - url = https://github.com/Microsoft/DirectXMath [submodule "shaders/SPIRV-Cross"] path = external/SPIRV-Cross url = https://github.com/KhronosGroup/SPIRV-Cross.git diff --git a/win32/CD3DCG.cpp b/win32/CD3DCG.cpp index 94f1755f..555e2a4b 100644 --- a/win32/CD3DCG.cpp +++ b/win32/CD3DCG.cpp @@ -233,8 +233,8 @@ bool CD3DCG::LoadShader(const TCHAR *shaderFile) return true; } -void CD3DCG::ensureTextureSize(LPDIRECT3DTEXTURE9 &tex, XMFLOAT2 &texSize, - XMFLOAT2 wantedSize,bool renderTarget,bool useFloat) +void CD3DCG::ensureTextureSize(LPDIRECT3DTEXTURE9 &tex, float2 &texSize, + float2 wantedSize,bool renderTarget,bool useFloat) { HRESULT hr; @@ -261,7 +261,7 @@ void CD3DCG::ensureTextureSize(LPDIRECT3DTEXTURE9 &tex, XMFLOAT2 &texSize, } void CD3DCG::setVertexStream(IDirect3DVertexBuffer9 *vertexBuffer, - XMFLOAT2 inputSize, XMFLOAT2 textureSize, XMFLOAT2 outputSize) + float2 inputSize, float2 textureSize, float2 outputSize) { float tX = inputSize.x / textureSize.x; float tY = inputSize.y / textureSize.y; @@ -302,8 +302,8 @@ void CD3DCG::setVertexStream(IDirect3DVertexBuffer9 *vertexBuffer, pDevice->SetStreamSource(3,vertexBuffer,0,sizeof(VERTEX)); } -void CD3DCG::Render(LPDIRECT3DTEXTURE9 &origTex, XMFLOAT2 textureSize, - XMFLOAT2 inputSize, XMFLOAT2 viewportSize, XMFLOAT2 windowSize) +void CD3DCG::Render(LPDIRECT3DTEXTURE9 &origTex, float2 textureSize, + float2 inputSize, float2 viewportSize, float2 windowSize) { LPDIRECT3DSURFACE9 pRenderSurface = NULL,pBackBuffer = NULL; frameCnt++; @@ -355,7 +355,7 @@ void CD3DCG::Render(LPDIRECT3DTEXTURE9 &origTex, XMFLOAT2 textureSize, /* make sure the render target exists and has an appropriate size, then set as current render target with last pass as source */ - ensureTextureSize(shaderPasses[i].tex,shaderPasses[i].textureSize, XMFLOAT2(texSize,texSize),true,shaderPasses[i].useFloatTex); + ensureTextureSize(shaderPasses[i].tex, shaderPasses[i].textureSize, float2{ texSize,texSize }, true, shaderPasses[i].useFloatTex); shaderPasses[i].tex->GetSurfaceLevel(0,&pRenderSurface); pDevice->SetTexture(0, shaderPasses[i-1].tex); pDevice->SetRenderTarget(0,pRenderSurface); @@ -425,22 +425,50 @@ void CD3DCG::Render(LPDIRECT3DTEXTURE9 &origTex, XMFLOAT2 textureSize, setViewport(displayRect.left,displayRect.top,displayRect.right - displayRect.left,displayRect.bottom - displayRect.top); setVertexStream(shaderPasses.back().vertexBuffer, shaderPasses.back().outputSize,shaderPasses.back().textureSize, - XMFLOAT2((float)(displayRect.right - displayRect.left),(float)(displayRect.bottom - displayRect.top))); + float2{ (float)(displayRect.right - displayRect.left),(float)(displayRect.bottom - displayRect.top) }); pDevice->SetVertexShader(NULL); pDevice->SetPixelShader(NULL); } +static D3DMATRIX matrix_mul(D3DMATRIX& mat1, D3DMATRIX& mat2) +{ + D3DMATRIX out; + for (auto y = 0; y < 4; y++) + { + for (auto x = 0; x < 4; x++) + { + out.m[y][x] = + mat1.m[y][0] * mat2.m[0][x] + + mat1.m[y][1] * mat2.m[1][x] + + mat1.m[y][2] * mat2.m[2][x] + + mat1.m[y][3] * mat2.m[3][x]; + } + } + + return out; +} + +static D3DMATRIX matrix_transpose(D3DMATRIX& mat) +{ + D3DMATRIX out; + for (auto y = 0; y < 4; y++) + for (auto x = 0; x < 4; x++) + out.m[y][x] = mat.m[x][y]; + + return out; +} + void CD3DCG::calculateMatrix() { - XMMATRIX matWorld; - XMMATRIX matView; - XMMATRIX matProj; + D3DMATRIX matWorld; + D3DMATRIX matView; + D3DMATRIX matProj; pDevice->GetTransform(D3DTS_WORLD, (D3DMATRIX*)&matWorld); pDevice->GetTransform(D3DTS_VIEW, (D3DMATRIX*)&matView); pDevice->GetTransform(D3DTS_PROJECTION, (D3DMATRIX*)&matProj); - XMStoreFloat4x4(&mvp, XMMatrixTranspose(XMMatrixMultiply(matProj, XMMatrixMultiply(matWorld, matView)))); + mvp = matrix_transpose(matrix_mul(matProj, matrix_mul(matWorld, matView))); } void CD3DCG::setViewport(DWORD x, DWORD y, DWORD width, DWORD height) @@ -457,9 +485,9 @@ void CD3DCG::setViewport(DWORD x, DWORD y, DWORD width, DWORD height) void CD3DCG::setShaderVars(int pass) { - XMFLOAT2 inputSize = shaderPasses[pass-1].outputSize; - XMFLOAT2 textureSize = shaderPasses[pass-1].textureSize; - XMFLOAT2 outputSize = shaderPasses[pass].outputSize; + float2 inputSize = shaderPasses[pass-1].outputSize; + float2 textureSize = shaderPasses[pass-1].textureSize; + float2 outputSize = shaderPasses[pass].outputSize; /* mvp paramater */ diff --git a/win32/CD3DCG.h b/win32/CD3DCG.h index 1596d9d3..148dbf38 100644 --- a/win32/CD3DCG.h +++ b/win32/CD3DCG.h @@ -13,10 +13,13 @@ #include "CCGShader.h" #include #include -#undef Zero // DirectXMath uses Zero as a variable name -#include "DirectXMath/Inc/DirectXMath.h" +#include -using namespace DirectX; +struct float2 +{ + float x; + float y; +}; class CD3DCG { @@ -38,8 +41,8 @@ private: LPDIRECT3DVERTEXDECLARATION9 vertexDeclaration; std::vector parameterMap; - XMFLOAT2 outputSize; - XMFLOAT2 textureSize; + float2 outputSize; + float2 textureSize; _shaderPass() {cgVertexProgram=NULL; cgFragmentProgram=NULL; @@ -50,8 +53,8 @@ private: typedef struct _prevPass { LPDIRECT3DTEXTURE9 tex; LPDIRECT3DVERTEXBUFFER9 vertexBuffer; - XMFLOAT2 imageSize; - XMFLOAT2 textureSize; + float2 imageSize; + float2 textureSize; _prevPass() {tex=NULL; vertexBuffer=NULL;} _prevPass(const shaderPass &pass) {tex = pass.tex; @@ -72,10 +75,10 @@ private: bool shaderLoaded; void checkForCgError(const char *situation); - void setVertexStream(IDirect3DVertexBuffer9 *vertexBuffer, XMFLOAT2 inputSize, XMFLOAT2 textureSize, XMFLOAT2 outputSize); + void setVertexStream(IDirect3DVertexBuffer9 *vertexBuffer, float2 inputSize, float2 textureSize, float2 outputSize); void setViewport(DWORD x, DWORD y, DWORD width, DWORD height); void setShaderVars(int pass); - void ensureTextureSize(LPDIRECT3DTEXTURE9 &tex, XMFLOAT2 &texSize, XMFLOAT2 wantedSize,bool renderTarget, bool useFloat = false); + void ensureTextureSize(LPDIRECT3DTEXTURE9 &tex, float2 &texSize, float2 wantedSize,bool renderTarget, bool useFloat = false); void fillParameterMap(std::vector &map, CGparameter param); void setupVertexDeclaration(shaderPass &pass); void calculateMatrix(); @@ -83,14 +86,14 @@ private: LPDIRECT3DDEVICE9 pDevice; CGcontext cgContext; unsigned int frameCnt; - XMFLOAT4X4 mvp; + D3DMATRIX mvp; public: CD3DCG(CGcontext cgContext,LPDIRECT3DDEVICE9 pDevice); ~CD3DCG(void); bool LoadShader(const TCHAR *shaderFile); - void Render(LPDIRECT3DTEXTURE9 &origTex, XMFLOAT2 textureSize, XMFLOAT2 inputSize, XMFLOAT2 viewportSize, XMFLOAT2 windowSize); + void Render(LPDIRECT3DTEXTURE9 &origTex, float2 textureSize, float2 inputSize, float2 viewportSize, float2 windowSize); void ClearPasses(); void OnLostDevice(); void OnResetDevice(); diff --git a/win32/CDirect3D.cpp b/win32/CDirect3D.cpp index f5c803db..eeb2077b 100644 --- a/win32/CDirect3D.cpp +++ b/win32/CDirect3D.cpp @@ -319,11 +319,10 @@ void CDirect3D::Render(SSurface Src) displayRect=CalculateDisplayRect(dPresentParams.BackBufferWidth,dPresentParams.BackBufferHeight, dPresentParams.BackBufferWidth,dPresentParams.BackBufferHeight); cgShader->Render(drawSurface, - XMFLOAT2((float)quadTextureSize, (float)quadTextureSize), - XMFLOAT2((float)afterRenderWidth, (float)afterRenderHeight), - XMFLOAT2((float)(displayRect.right - displayRect.left), - (float)(displayRect.bottom - displayRect.top)), - XMFLOAT2((float)dPresentParams.BackBufferWidth, (float)dPresentParams.BackBufferHeight)); + float2{ (float)quadTextureSize, (float)quadTextureSize }, + float2{ (float)afterRenderWidth, (float)afterRenderHeight }, + float2{ (float)(displayRect.right - displayRect.left), (float)(displayRect.bottom - displayRect.top) }, + float2{ (float)dPresentParams.BackBufferWidth, (float)dPresentParams.BackBufferHeight }); } SetFiltering(); @@ -469,11 +468,19 @@ void CDirect3D::SetupVertices() void CDirect3D::SetViewport() { - XMMATRIX matIdentity; - XMMATRIX matProjection; + D3DMATRIX matIdentity; + D3DMATRIX matProjection; + + matIdentity = { 1.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 1.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 1.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 1.0f }; + + matProjection = { 2.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 2.0f, 0.0f, 0.0f, + 0.0f, 0.0f, -1.0f, 0.0f, + -1.0f, -1.0f, 0.0f, 1.0f }; - matProjection = XMMatrixOrthographicOffCenterLH(0.0f,1.0f,0.0f,1.0f,0.0f,1.0f); - matIdentity = XMMatrixIdentity(); pDevice->SetTransform(D3DTS_WORLD,(D3DMATRIX*)&matIdentity); pDevice->SetTransform(D3DTS_VIEW, (D3DMATRIX*)&matIdentity); pDevice->SetTransform(D3DTS_PROJECTION, (D3DMATRIX*)&matProjection); diff --git a/win32/DirectXMath b/win32/DirectXMath deleted file mode 160000 index ffb2edbd..00000000 --- a/win32/DirectXMath +++ /dev/null @@ -1 +0,0 @@ -Subproject commit ffb2edbd1627e9eec75f68b4ff00e0861ad84ebe