const Texture& GetMagentaTex2D(void) { auto ManagedTex = FindOrLoadTexture(L"DefaultMagentaTexture"); ManagedTexture* ManTex = ManagedTex.first; const bool RequestsLoad = ManagedTex.second; if (!RequestsLoad) { ManTex->WaitForLoad(); return *ManTex; } uint32_t MagentaPixel = 0x00FF00FF; ManTex->Create(1, 1, DXGI_FORMAT_R8G8B8A8_UNORM, &MagentaPixel); return *ManTex; }
//----------------------------------------------------------------------------- // Initialization + shutdown //----------------------------------------------------------------------------- void CTextureManager::Init( int nFlags ) { m_nFlags = nFlags; color32 color, color2; m_iNextTexID = 4096; // setup the checkerboard generator for failed texture loading color.r = color.g = color.b = 0; color.a = 128; color2.r = color2.b = color2.a = 255; color2.g = 0; m_pErrorRegen = new CCheckerboardTexture( 4, color, color2 ); // Create an error texture m_pErrorTexture = CreateProceduralTexture( "error", TEXTURE_GROUP_OTHER, ERROR_TEXTURE_SIZE, ERROR_TEXTURE_SIZE, 1, IMAGE_FORMAT_BGRA8888, TEXTUREFLAGS_NOMIP | TEXTUREFLAGS_SINGLECOPY ); CreateCheckerboardTexture( m_pErrorTexture, 4, color, color2 ); // Create a white texture m_pWhiteTexture = CreateProceduralTexture( "white", TEXTURE_GROUP_OTHER, WHITE_TEXTURE_SIZE, WHITE_TEXTURE_SIZE, 1, IMAGE_FORMAT_BGRX8888, TEXTUREFLAGS_NOMIP | TEXTUREFLAGS_SINGLECOPY ); color.r = color.g = color.b = color.a = 255; CreateSolidTexture( m_pWhiteTexture, color ); // Create a black texture m_pBlackTexture = CreateProceduralTexture( "black", TEXTURE_GROUP_OTHER, BLACK_TEXTURE_SIZE, BLACK_TEXTURE_SIZE, 1, IMAGE_FORMAT_BGRX8888, TEXTUREFLAGS_NOMIP | TEXTUREFLAGS_SINGLECOPY ); color.r = color.g = color.b = 0; CreateSolidTexture( m_pBlackTexture, color ); // Create a grey texture m_pGreyTexture = CreateProceduralTexture( "grey", TEXTURE_GROUP_OTHER, GREY_TEXTURE_SIZE, GREY_TEXTURE_SIZE, 1, IMAGE_FORMAT_BGRA8888, TEXTUREFLAGS_NOMIP | TEXTUREFLAGS_SINGLECOPY ); color.r = color.g = color.b = 128; color.a = 255; CreateSolidTexture( m_pGreyTexture, color ); // Create a grey texture m_pGreyAlphaZeroTexture = CreateProceduralTexture( "greyalphazero", TEXTURE_GROUP_OTHER, GREY_TEXTURE_SIZE, GREY_TEXTURE_SIZE, 1, IMAGE_FORMAT_BGRA8888, TEXTUREFLAGS_NOMIP | TEXTUREFLAGS_SINGLECOPY ); color.r = color.g = color.b = 128; color.a = 0; CreateSolidTexture( m_pGreyAlphaZeroTexture, color ); if ( HardwareConfig()->GetMaxDXSupportLevel() >= 80 ) { // Create a normalization cubemap m_pNormalizationCubemap = CreateProceduralTexture( "normalize", TEXTURE_GROUP_CUBE_MAP, NORMALIZATION_CUBEMAP_SIZE, NORMALIZATION_CUBEMAP_SIZE, 1, IMAGE_FORMAT_BGRX8888, TEXTUREFLAGS_ENVMAP | TEXTUREFLAGS_NOMIP | TEXTUREFLAGS_SINGLECOPY | TEXTUREFLAGS_CLAMPS | TEXTUREFLAGS_CLAMPT ); CreateNormalizationCubemap( m_pNormalizationCubemap ); } if ( HardwareConfig()->GetMaxDXSupportLevel() >= 90 ) { // Create a normalization cubemap m_pSignedNormalizationCubemap = CreateProceduralTexture( "normalizesigned", TEXTURE_GROUP_CUBE_MAP, NORMALIZATION_CUBEMAP_SIZE, NORMALIZATION_CUBEMAP_SIZE, 1, IMAGE_FORMAT_UVWQ8888, TEXTUREFLAGS_ENVMAP | TEXTUREFLAGS_NOMIP | TEXTUREFLAGS_NOLOD | TEXTUREFLAGS_SINGLECOPY | TEXTUREFLAGS_CLAMPS | TEXTUREFLAGS_CLAMPT ); CreateSignedNormalizationCubemap( m_pSignedNormalizationCubemap ); m_pIdentityLightWarp = FindOrLoadTexture( "dev/IdentityLightWarp", TEXTURE_GROUP_OTHER ); m_pIdentityLightWarp->IncrementReferenceCount(); } // High end hardware needs this texture for shadow mapping if ( HardwareConfig()->ActuallySupportsPixelShaders_2_b() ) { m_pShadowNoise2D = FindOrLoadTexture( "engine/NormalizedRandomDirections2D", TEXTURE_GROUP_OTHER ); m_pShadowNoise2D->IncrementReferenceCount(); } }