mirror of
https://github.com/Mauler125/r5sdk.git
synced 2025-02-09 19:15:03 +01:00
RTech: enforce member name consistency
This commit is contained in:
parent
05f37cad73
commit
538df8e02c
@ -1,39 +1,41 @@
|
||||
#ifndef TEXTURE_G_H
|
||||
#define TEXTURE_G_H
|
||||
#include <rtech/ipakfile.h>
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Structure definitions
|
||||
//-----------------------------------------------------------------------------
|
||||
/*schema*/ struct TextureDesc_s
|
||||
{
|
||||
uint64 m_AssetGuid;
|
||||
const char* m_pDebugName;
|
||||
uint16 m_nWidth;
|
||||
uint16 m_nHeight;
|
||||
uint16 m_nDepth;
|
||||
uint16 m_nImageFormat;
|
||||
PakGuid_t assetGuid;
|
||||
const char* debugName;
|
||||
uint16 width;
|
||||
uint16 height;
|
||||
uint16 depth;
|
||||
uint16 imageFormat;
|
||||
};
|
||||
|
||||
/*schema*/ struct TextureAsset_s : public TextureDesc_s
|
||||
{
|
||||
uint32 m_nDataLength;
|
||||
uint8 unknown_2;
|
||||
uint8 m_nOptStreamedMipCount;
|
||||
uint8 m_nArraySize;
|
||||
uint8 m_nLayerCount;
|
||||
uint8 m_nCPUAccessFlag; // [ PIXIE ]: In RTech::CreateDXBuffer textureDescription Usage is determined by the CPU Access Flag so I assume it's the same case here.
|
||||
uint8 m_nPermanentMipCount;
|
||||
uint8 m_nStreamedMipCount;
|
||||
uint8 unknown_4[13];
|
||||
__int64 m_nPixelCount;
|
||||
uint8 unknown_5[3];
|
||||
uint8 m_nTotalStreamedMipCount; // Does not get set until after RTech::CreateDXTexture.
|
||||
uint32 dataSize;
|
||||
uint8 swizzleType;
|
||||
uint8 optStreamedMipLevels;
|
||||
uint8 arraySize;
|
||||
uint8 layerCount;
|
||||
uint8 usageFlags; // [ PIXIE ]: In RTech::CreateDXBuffer textureDescription Usage is determined by the CPU Access Flag so I assume it's the same case here.
|
||||
uint8 permanentMipLevels;
|
||||
uint8 streamedMipLevels;
|
||||
uint8 unkPerMip[13];
|
||||
uint64 texelCount;
|
||||
uint16 streamedTextureIndex;
|
||||
uint8 loadedStreamedMipLevelCount;
|
||||
uint8 totalStreamedMipLevelCount; // Does not get set until after RTech::CreateDXTexture.
|
||||
uint8 unk4[228];
|
||||
uint8 unk5[57];
|
||||
ID3D11Texture2D* m_ppTexture;
|
||||
ID3D11ShaderResourceView* m_ppShaderResourceView;
|
||||
uint8 m_nTextureMipLevels;
|
||||
uint8 m_nTextureMipLevelsStreamedOpt;
|
||||
ID3D11Texture2D* pInputTexture;
|
||||
ID3D11ShaderResourceView* pShaderResourceView;
|
||||
uint8 textureMipLevels;
|
||||
uint8 textureMipLevelsStreamedOpt;
|
||||
};
|
||||
|
||||
struct TextureBytesPerPixel_s
|
||||
|
@ -120,30 +120,30 @@ void(*v_CreateTextureResource)(TextureAsset_s*, INT_PTR);
|
||||
constexpr uint32_t ALIGNMENT_SIZE = 15; // Creates 2D texture and shader resource from textureHeader and imageData.
|
||||
void CreateTextureResource(TextureAsset_s* textureHeader, INT_PTR imageData)
|
||||
{
|
||||
if (textureHeader->m_nDepth && !textureHeader->m_nHeight) // Return never gets hit. Maybe its some debug check?
|
||||
if (textureHeader->depth && !textureHeader->height) // Return never gets hit. Maybe its some debug check?
|
||||
return;
|
||||
|
||||
i64 initialData[4096]{};
|
||||
textureHeader->m_nTextureMipLevels = textureHeader->m_nPermanentMipCount;
|
||||
textureHeader->textureMipLevels = textureHeader->permanentMipLevels;
|
||||
|
||||
const int totalStreamedMips = textureHeader->m_nOptStreamedMipCount + textureHeader->m_nStreamedMipCount;
|
||||
int mipLevel = textureHeader->m_nPermanentMipCount + totalStreamedMips;
|
||||
const int totalStreamedMips = textureHeader->optStreamedMipLevels + textureHeader->streamedMipLevels;
|
||||
int mipLevel = textureHeader->permanentMipLevels + totalStreamedMips;
|
||||
if (mipLevel != totalStreamedMips)
|
||||
{
|
||||
do
|
||||
{
|
||||
--mipLevel;
|
||||
if (textureHeader->m_nArraySize)
|
||||
if (textureHeader->arraySize)
|
||||
{
|
||||
int mipWidth = 0;
|
||||
if (textureHeader->m_nWidth >> mipLevel > 1)
|
||||
mipWidth = (textureHeader->m_nWidth >> mipLevel) - 1;
|
||||
if (textureHeader->width >> mipLevel > 1)
|
||||
mipWidth = (textureHeader->width >> mipLevel) - 1;
|
||||
|
||||
int mipHeight = 0;
|
||||
if (textureHeader->m_nHeight >> mipLevel > 1)
|
||||
mipHeight = (textureHeader->m_nHeight >> mipLevel) - 1;
|
||||
if (textureHeader->height >> mipLevel > 1)
|
||||
mipHeight = (textureHeader->height >> mipLevel) - 1;
|
||||
|
||||
const TextureBytesPerPixel_s& perPixel = s_pBytesPerPixel[textureHeader->m_nImageFormat];
|
||||
const TextureBytesPerPixel_s& perPixel = s_pBytesPerPixel[textureHeader->imageFormat];
|
||||
|
||||
const u8 x = perPixel.x;
|
||||
const u8 y = perPixel.y;
|
||||
@ -156,7 +156,7 @@ void CreateTextureResource(TextureAsset_s* textureHeader, INT_PTR imageData)
|
||||
const u32 slicePitch = x * bppWidth * bppHeight;
|
||||
|
||||
u32 subResourceEntry = mipLevel;
|
||||
for (int i = 0; i < textureHeader->m_nArraySize; i++)
|
||||
for (int i = 0; i < textureHeader->arraySize; i++)
|
||||
{
|
||||
const u32 offsetCurrentResourceData = subResourceEntry << 4u;
|
||||
|
||||
@ -165,45 +165,45 @@ void CreateTextureResource(TextureAsset_s* textureHeader, INT_PTR imageData)
|
||||
*(u32*)((u8*)&initialData[1] + offsetCurrentResourceData + 4) = slicePitch;
|
||||
|
||||
imageData += (slicePitch + ALIGNMENT_SIZE) & ~ALIGNMENT_SIZE;
|
||||
subResourceEntry += textureHeader->m_nPermanentMipCount;
|
||||
subResourceEntry += textureHeader->permanentMipLevels;
|
||||
}
|
||||
}
|
||||
} while (mipLevel != totalStreamedMips);
|
||||
}
|
||||
|
||||
const DXGI_FORMAT dxgiFormat = g_TxtrAssetToDxgiFormat[textureHeader->m_nImageFormat]; // Get dxgi format
|
||||
const DXGI_FORMAT dxgiFormat = g_TxtrAssetToDxgiFormat[textureHeader->imageFormat]; // Get dxgi format
|
||||
|
||||
D3D11_TEXTURE2D_DESC textureDesc{};
|
||||
textureDesc.Width = textureHeader->m_nWidth >> mipLevel;
|
||||
textureDesc.Height = textureHeader->m_nHeight >> mipLevel;
|
||||
textureDesc.MipLevels = textureHeader->m_nPermanentMipCount;
|
||||
textureDesc.ArraySize = textureHeader->m_nArraySize;
|
||||
textureDesc.Width = textureHeader->width >> mipLevel;
|
||||
textureDesc.Height = textureHeader->height >> mipLevel;
|
||||
textureDesc.MipLevels = textureHeader->permanentMipLevels;
|
||||
textureDesc.ArraySize = textureHeader->arraySize;
|
||||
textureDesc.Format = dxgiFormat;
|
||||
textureDesc.SampleDesc.Count = 1;
|
||||
textureDesc.SampleDesc.Quality = 0;
|
||||
textureDesc.Usage = textureHeader->m_nCPUAccessFlag != 2 ? D3D11_USAGE_IMMUTABLE : D3D11_USAGE_DEFAULT;
|
||||
textureDesc.Usage = textureHeader->usageFlags != 2 ? D3D11_USAGE_IMMUTABLE : D3D11_USAGE_DEFAULT;
|
||||
textureDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
|
||||
textureDesc.MiscFlags = 2 * (textureHeader->m_nLayerCount & 2);
|
||||
textureDesc.MiscFlags = 2 * (textureHeader->layerCount & 2);
|
||||
|
||||
const u32 offsetStartResourceData = mipLevel << 4u;
|
||||
const D3D11_SUBRESOURCE_DATA* subResData = (D3D11_SUBRESOURCE_DATA*)((uint8_t*)initialData + offsetStartResourceData);
|
||||
|
||||
const HRESULT createTextureRes = D3D11Device()->CreateTexture2D(&textureDesc, subResData, &textureHeader->m_ppTexture);
|
||||
const HRESULT createTextureRes = D3D11Device()->CreateTexture2D(&textureDesc, subResData, &textureHeader->pInputTexture);
|
||||
if (createTextureRes < S_OK)
|
||||
Error(eDLL_T::RTECH, EXIT_FAILURE, "Couldn't create texture \"%s\": error code = %08x\n", textureHeader->m_pDebugName, createTextureRes);
|
||||
Error(eDLL_T::RTECH, EXIT_FAILURE, "Couldn't create texture \"%s\": error code = %08x\n", textureHeader->debugName, createTextureRes);
|
||||
|
||||
D3D11_SHADER_RESOURCE_VIEW_DESC shaderResource{};
|
||||
shaderResource.Format = dxgiFormat;
|
||||
shaderResource.Texture2D.MipLevels = textureHeader->m_nTextureMipLevels;
|
||||
shaderResource.Texture2D.MipLevels = textureHeader->textureMipLevels;
|
||||
|
||||
if (textureHeader->m_nArraySize > 1) // Do we have a texture array?
|
||||
if (textureHeader->arraySize > 1) // Do we have a texture array?
|
||||
{
|
||||
const bool isCubeMap = (textureHeader->m_nLayerCount & 2);
|
||||
const bool isCubeMap = (textureHeader->layerCount & 2);
|
||||
|
||||
if (!isCubeMap)
|
||||
{
|
||||
shaderResource.Texture2DArray.FirstArraySlice = 0;
|
||||
shaderResource.Texture2DArray.ArraySize = textureHeader->m_nArraySize;
|
||||
shaderResource.Texture2DArray.ArraySize = textureHeader->arraySize;
|
||||
shaderResource.ViewDimension = D3D_SRV_DIMENSION_TEXTURE2DARRAY;
|
||||
}
|
||||
else
|
||||
@ -214,10 +214,10 @@ void CreateTextureResource(TextureAsset_s* textureHeader, INT_PTR imageData)
|
||||
shaderResource.ViewDimension = D3D_SRV_DIMENSION_TEXTURE2D;
|
||||
}
|
||||
|
||||
const HRESULT createShaderResourceRes = D3D11Device()->CreateShaderResourceView(textureHeader->m_ppTexture, &shaderResource, &textureHeader->m_ppShaderResourceView);
|
||||
const HRESULT createShaderResourceRes = D3D11Device()->CreateShaderResourceView(textureHeader->pInputTexture, &shaderResource, &textureHeader->pShaderResourceView);
|
||||
if (createShaderResourceRes < S_OK)
|
||||
Error(eDLL_T::RTECH, EXIT_FAILURE, "Couldn't create shader resource view for texture \"%s\" (%llX): error code = %08x\n",
|
||||
textureHeader->m_pDebugName, textureHeader->m_AssetGuid, createShaderResourceRes);
|
||||
textureHeader->debugName, textureHeader->assetGuid, createShaderResourceRes);
|
||||
}
|
||||
#pragma warning( pop )
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user