From ebc10ad42b23f2245f96c00d78657a1b655289ab Mon Sep 17 00:00:00 2001 From: turanszkij Date: Sat, 28 May 2016 16:28:01 +0200 Subject: [PATCH] updated font rendering and gui behaviour + texture desc fillout on loading --- WickedEngine/MainComponent.cpp | 2 +- WickedEngine/MainComponent.h | 2 +- WickedEngine/WickedEngine_SHARED.vcxitems | 3 +- .../WickedEngine_SHARED.vcxitems.filters | 6 +- .../fonts/{basic.txt => basic.wifont} | 2 - WickedEngine/wiBackLog.cpp | 6 +- WickedEngine/wiFont.cpp | 100 ++-- WickedEngine/wiFont.h | 7 +- WickedEngine/wiGraphicsDevice_DX11.cpp | 476 +++++++++++++++++- WickedEngine/wiVersion.cpp | 2 +- WickedEngine/wiWidget.cpp | 27 +- WickedEngine/wiWidget.h | 5 + 12 files changed, 571 insertions(+), 67 deletions(-) rename WickedEngine/fonts/{basic.txt => basic.wifont} (99%) diff --git a/WickedEngine/MainComponent.cpp b/WickedEngine/MainComponent.cpp index b5c15fd3f..049ecf1c3 100644 --- a/WickedEngine/MainComponent.cpp +++ b/WickedEngine/MainComponent.cpp @@ -171,7 +171,7 @@ void MainComponent::Compose() { ss << "CPU: " << wiCpuInfo::GetCpuPercentage() << "%" << endl; } - wiFont(ss.str(), wiFontProps(0, 0, infoDisplay.size, WIFALIGN_LEFT, WIFALIGN_TOP, infoDisplay.size)).Draw(); + wiFont(ss.str(), wiFontProps(0, 0, infoDisplay.size, WIFALIGN_LEFT, WIFALIGN_TOP, -2)).Draw(); } // Draw the color grading palette diff --git a/WickedEngine/MainComponent.h b/WickedEngine/MainComponent.h index 4da98d6d6..1dbcb2389 100644 --- a/WickedEngine/MainComponent.h +++ b/WickedEngine/MainComponent.h @@ -71,7 +71,7 @@ public: float size; InfoDisplayer() :active(false), watermark(true), fpsinfo(true), cpuinfo(true), - resolution(false), size(-7.f) + resolution(false), size(10.f) {} }; // display all-time engine information text diff --git a/WickedEngine/WickedEngine_SHARED.vcxitems b/WickedEngine/WickedEngine_SHARED.vcxitems index 07c187b12..62ced9179 100644 --- a/WickedEngine/WickedEngine_SHARED.vcxitems +++ b/WickedEngine/WickedEngine_SHARED.vcxitems @@ -688,8 +688,9 @@ - + true + Document diff --git a/WickedEngine/WickedEngine_SHARED.vcxitems.filters b/WickedEngine/WickedEngine_SHARED.vcxitems.filters index 37cdfb810..ba2c9f61e 100644 --- a/WickedEngine/WickedEngine_SHARED.vcxitems.filters +++ b/WickedEngine/WickedEngine_SHARED.vcxitems.filters @@ -1842,11 +1842,11 @@ - - fonts - + + fonts + diff --git a/WickedEngine/fonts/basic.txt b/WickedEngine/fonts/basic.wifont similarity index 99% rename from WickedEngine/fonts/basic.txt rename to WickedEngine/fonts/basic.wifont index f11c6c50b..f5ae4d3f8 100644 --- a/WickedEngine/fonts/basic.txt +++ b/WickedEngine/fonts/basic.wifont @@ -1,5 +1,3 @@ -256 -256 20 25 65 0 0 25 diff --git a/WickedEngine/wiBackLog.cpp b/WickedEngine/wiBackLog.cpp index 9677b717e..7a69759bb 100644 --- a/WickedEngine/wiBackLog.cpp +++ b/WickedEngine/wiBackLog.cpp @@ -28,7 +28,7 @@ void wiBackLog::Initialize(){ inputArea=stringstream(""); const unsigned char colorData[] = { 0, 0, 43, 200, 43, 31, 141, 223 }; wiTextureHelper::CreateTexture(backgroundTex, colorData, 1, 2, 4); - font = wiFont(L"", wiFontProps(5, 0, 0, WIFALIGN_LEFT, WIFALIGN_BOTTOM, -8)); + font = wiFont("", wiFontProps(5, 0, 11, WIFALIGN_LEFT, WIFALIGN_BOTTOM, -8)); } void wiBackLog::CleanUp(){ stream.clear(); @@ -73,9 +73,7 @@ void wiBackLog::Draw(){ font.SetText(getText()); font.props.posY = wiRenderer::GetDevice()->GetScreenHeight() - 75 - pos - scroll; font.Draw(); - wiFont(inputArea.str().c_str(), wiFontProps(5, (float)wiRenderer::GetDevice()->GetScreenHeight() - 10, 0, WIFALIGN_LEFT, WIFALIGN_BOTTOM, -8)).Draw(); - //wiFont::Draw(wiBackLog::getText(), "01", XMFLOAT4(5, pos - wiRenderer::RENDERHEIGHT + 75 + scroll, 0, -8), "left", "bottom"); - //wiFont::Draw(inputArea.str().c_str(), "01", XMFLOAT4(5, -(float)wiRenderer::RENDERHEIGHT + 10, 0, -8), "left", "bottom"); + wiFont(inputArea.str().c_str(), wiFontProps(5, (float)wiRenderer::GetDevice()->GetScreenHeight() - 10, 14, WIFALIGN_LEFT, WIFALIGN_BOTTOM, -8)).Draw(); } } diff --git a/WickedEngine/wiFont.cpp b/WickedEngine/wiFont.cpp index d8bf7f877..a4ea3e922 100644 --- a/WickedEngine/wiFont.cpp +++ b/WickedEngine/wiFont.cpp @@ -145,8 +145,20 @@ void wiFont::CleanUpStatic() fontStyles.clear(); vertexList.clear(); - - //TODO + + SAFE_DELETE(vertexBuffer); + SAFE_DELETE(indexBuffer); + SAFE_DELETE(vertexLayout); + SAFE_DELETE(vertexShader); + SAFE_DELETE(pixelShader); + SAFE_DELETE(blendState); + SAFE_DELETE(constantBuffer); + SAFE_DELETE(rasterizerState); + SAFE_DELETE(depthStencilState); + SAFE_DELETE(vertexBuffer); + SAFE_DELETE(vertexBuffer); + SAFE_DELETE(vertexBuffer); + SAFE_DELETE(vertexBuffer); } void wiFont::BindPersistentState(GRAPHICSTHREAD threadID) @@ -157,57 +169,66 @@ void wiFont::BindPersistentState(GRAPHICSTHREAD threadID) void wiFont::ModifyGeo(const wstring& text, wiFontProps props, int style, GRAPHICSTHREAD threadID) { - int line = 0, pos = 0; - vertexList.resize(text.length()*4); - for(unsigned int i=0;iUpdateBuffer(vertexBuffer,vertexList.data(),threadID,sizeof(Vertex) * text.length() * 4); + wiRenderer::GetDevice()->UpdateBuffer(vertexBuffer, vertexList.data(), threadID, sizeof(Vertex) * text.length() * 4); } @@ -306,16 +327,20 @@ int wiFont::textWidth() int max=0,lineW=0; int len=text.length(); while(iLOCK(); - +wiFont::wiFontStyle::wiFontStyle(const string& newName) +{ name=newName; for(short i=0;i<127;i++) lookup[i].code=lookup[i].offX=lookup[i].offY=0; std::stringstream ss(""),ss1(""); - ss<<"fonts/"<add(ss1.str()); - file>>texWidth>>texHeight>>recSize>>charSize; + texWidth = texture->GetDesc().Width; + texHeight = texture->GetDesc().Height; + file>>recSize>>charSize; int i=0; while(!file.eof()){ i++; @@ -376,10 +402,8 @@ wiFont::wiFontStyle::wiFontStyle(const string& newName){ file.close(); } else { - wiHelper::messageBox(name,"Could not load Font Data!"); + wiHelper::messageBox(name, "Could not load Font Data: " + ss.str()); } - - wiRenderer::GetDevice()->UNLOCK(); } void wiFont::wiFontStyle::CleanUp(){ SAFE_DELETE(texture); diff --git a/WickedEngine/wiFont.h b/WickedEngine/wiFont.h index b1798afc8..348c38844 100644 --- a/WickedEngine/wiFont.h +++ b/WickedEngine/wiFont.h @@ -8,9 +8,9 @@ enum wiFontAlign { WIFALIGN_LEFT, - //same as mid + // same as mid WIFALIGN_CENTER, - //same as center + // same as center WIFALIGN_MID, WIFALIGN_RIGHT, WIFALIGN_TOP, @@ -26,8 +26,7 @@ public: float posX, posY; wiFontAlign h_align, v_align; - //zero-based properties: add or subtract from values - wiFontProps(float posX = 0, float posY = 0, float size = 0, wiFontAlign h_align = WIFALIGN_LEFT, wiFontAlign v_align = WIFALIGN_TOP + wiFontProps(float posX = 0, float posY = 0, float size = 11, wiFontAlign h_align = WIFALIGN_LEFT, wiFontAlign v_align = WIFALIGN_TOP , float spacingX = 0, float spacingY = 0) :posX(posX), posY(posY), size(size), h_align(h_align), v_align(v_align), spacingX(spacingX), spacingY(spacingY) {} diff --git a/WickedEngine/wiGraphicsDevice_DX11.cpp b/WickedEngine/wiGraphicsDevice_DX11.cpp index e733b7cc8..08774a948 100644 --- a/WickedEngine/wiGraphicsDevice_DX11.cpp +++ b/WickedEngine/wiGraphicsDevice_DX11.cpp @@ -208,6 +208,8 @@ Texture2D GraphicsDevice_DX11::GetBackBuffer() return result; } +// Engine -> Native converters + inline UINT _ParseBindFlags(UINT value) { UINT _flag = 0; @@ -605,16 +607,16 @@ inline D3D11_USAGE _ConvertUsage(USAGE value) { switch (value) { - case USAGE_DEFAULT: + case D3D11_USAGE_DEFAULT: return D3D11_USAGE_DEFAULT; break; - case USAGE_IMMUTABLE: + case D3D11_USAGE_IMMUTABLE: return D3D11_USAGE_IMMUTABLE; break; - case USAGE_DYNAMIC: + case D3D11_USAGE_DYNAMIC: return D3D11_USAGE_DYNAMIC; break; - case USAGE_STAGING: + case D3D11_USAGE_STAGING: return D3D11_USAGE_STAGING; break; default: @@ -1029,6 +1031,464 @@ inline D3D11_SUBRESOURCE_DATA* _ConvertSubresourceData(const SubresourceData* pI } +// Native -> Engine converters + +inline UINT _ParseBindFlags_Inv(UINT value) +{ + UINT _flag = 0; + + if (value & D3D11_BIND_VERTEX_BUFFER) + _flag |= BIND_VERTEX_BUFFER; + if (value & D3D11_BIND_INDEX_BUFFER) + _flag |= BIND_INDEX_BUFFER; + if (value & D3D11_BIND_CONSTANT_BUFFER) + _flag |= BIND_CONSTANT_BUFFER; + if (value & D3D11_BIND_SHADER_RESOURCE) + _flag |= BIND_SHADER_RESOURCE; + if (value & D3D11_BIND_STREAM_OUTPUT) + _flag |= BIND_STREAM_OUTPUT; + if (value & D3D11_BIND_RENDER_TARGET) + _flag |= BIND_RENDER_TARGET; + if (value & D3D11_BIND_DEPTH_STENCIL) + _flag |= BIND_DEPTH_STENCIL; + if (value & D3D11_BIND_UNORDERED_ACCESS) + _flag |= BIND_UNORDERED_ACCESS; + + return _flag; +} +inline UINT _ParseCPUAccessFlags_Inv(UINT value) +{ + UINT _flag = 0; + + if (value & D3D11_CPU_ACCESS_WRITE) + _flag |= CPU_ACCESS_WRITE; + if (value & D3D11_CPU_ACCESS_READ) + _flag |= CPU_ACCESS_READ; + + return _flag; +} +inline UINT _ParseResourceMiscFlags_Inv(UINT value) +{ + UINT _flag = 0; + + if (value & D3D11_RESOURCE_MISC_GENERATE_MIPS) + _flag |= RESOURCE_MISC_GENERATE_MIPS; + if (value & D3D11_RESOURCE_MISC_SHARED) + _flag |= RESOURCE_MISC_SHARED; + if (value & D3D11_RESOURCE_MISC_TEXTURECUBE) + _flag |= RESOURCE_MISC_TEXTURECUBE; + if (value & D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS) + _flag |= RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS; + if (value & D3D11_RESOURCE_MISC_BUFFER_STRUCTURED) + _flag |= RESOURCE_MISC_BUFFER_STRUCTURED; + if (value & D3D11_RESOURCE_MISC_TILED) + _flag |= RESOURCE_MISC_TILED; + + return _flag; +} + +inline FORMAT _ConvertFormat_Inv(DXGI_FORMAT value) +{ + switch (value) + { + case DXGI_FORMAT_UNKNOWN: + return FORMAT_UNKNOWN; + break; + case DXGI_FORMAT_R32G32B32A32_TYPELESS: + return FORMAT_R32G32B32A32_TYPELESS; + break; + case DXGI_FORMAT_R32G32B32A32_FLOAT: + return FORMAT_R32G32B32A32_FLOAT; + break; + case DXGI_FORMAT_R32G32B32A32_UINT: + return FORMAT_R32G32B32A32_UINT; + break; + case DXGI_FORMAT_R32G32B32A32_SINT: + return FORMAT_R32G32B32A32_SINT; + break; + case DXGI_FORMAT_R32G32B32_TYPELESS: + return FORMAT_R32G32B32_TYPELESS; + break; + case DXGI_FORMAT_R32G32B32_FLOAT: + return FORMAT_R32G32B32_FLOAT; + break; + case DXGI_FORMAT_R32G32B32_UINT: + return FORMAT_R32G32B32_UINT; + break; + case DXGI_FORMAT_R32G32B32_SINT: + return FORMAT_R32G32B32_SINT; + break; + case DXGI_FORMAT_R16G16B16A16_TYPELESS: + return FORMAT_R16G16B16A16_TYPELESS; + break; + case DXGI_FORMAT_R16G16B16A16_FLOAT: + return FORMAT_R16G16B16A16_FLOAT; + break; + case DXGI_FORMAT_R16G16B16A16_UNORM: + return FORMAT_R16G16B16A16_UNORM; + break; + case DXGI_FORMAT_R16G16B16A16_UINT: + return FORMAT_R16G16B16A16_UINT; + break; + case DXGI_FORMAT_R16G16B16A16_SNORM: + return FORMAT_R16G16B16A16_SNORM; + break; + case DXGI_FORMAT_R16G16B16A16_SINT: + return FORMAT_R16G16B16A16_SINT; + break; + case DXGI_FORMAT_R32G32_TYPELESS: + return FORMAT_R32G32_TYPELESS; + break; + case DXGI_FORMAT_R32G32_FLOAT: + return FORMAT_R32G32_FLOAT; + break; + case DXGI_FORMAT_R32G32_UINT: + return FORMAT_R32G32_UINT; + break; + case DXGI_FORMAT_R32G32_SINT: + return FORMAT_R32G32_SINT; + break; + case DXGI_FORMAT_R32G8X24_TYPELESS: + return FORMAT_R32G8X24_TYPELESS; + break; + case DXGI_FORMAT_D32_FLOAT_S8X24_UINT: + return FORMAT_D32_FLOAT_S8X24_UINT; + break; + case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: + return FORMAT_R32_FLOAT_X8X24_TYPELESS; + break; + case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: + return FORMAT_X32_TYPELESS_G8X24_UINT; + break; + case DXGI_FORMAT_R10G10B10A2_TYPELESS: + return FORMAT_R10G10B10A2_TYPELESS; + break; + case DXGI_FORMAT_R10G10B10A2_UNORM: + return FORMAT_R10G10B10A2_UNORM; + break; + case DXGI_FORMAT_R10G10B10A2_UINT: + return FORMAT_R10G10B10A2_UINT; + break; + case DXGI_FORMAT_R11G11B10_FLOAT: + return FORMAT_R11G11B10_FLOAT; + break; + case DXGI_FORMAT_R8G8B8A8_TYPELESS: + return FORMAT_R8G8B8A8_TYPELESS; + break; + case DXGI_FORMAT_R8G8B8A8_UNORM: + return FORMAT_R8G8B8A8_UNORM; + break; + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + return FORMAT_R8G8B8A8_UNORM_SRGB; + break; + case DXGI_FORMAT_R8G8B8A8_UINT: + return FORMAT_R8G8B8A8_UINT; + break; + case DXGI_FORMAT_R8G8B8A8_SNORM: + return FORMAT_R8G8B8A8_SNORM; + break; + case DXGI_FORMAT_R8G8B8A8_SINT: + return FORMAT_R8G8B8A8_SINT; + break; + case DXGI_FORMAT_R16G16_TYPELESS: + return FORMAT_R16G16_TYPELESS; + break; + case DXGI_FORMAT_R16G16_FLOAT: + return FORMAT_R16G16_FLOAT; + break; + case DXGI_FORMAT_R16G16_UNORM: + return FORMAT_R16G16_UNORM; + break; + case DXGI_FORMAT_R16G16_UINT: + return FORMAT_R16G16_UINT; + break; + case DXGI_FORMAT_R16G16_SNORM: + return FORMAT_R16G16_SNORM; + break; + case DXGI_FORMAT_R16G16_SINT: + return FORMAT_R16G16_SINT; + break; + case DXGI_FORMAT_R32_TYPELESS: + return FORMAT_R32_TYPELESS; + break; + case DXGI_FORMAT_D32_FLOAT: + return FORMAT_D32_FLOAT; + break; + case DXGI_FORMAT_R32_FLOAT: + return FORMAT_R32_FLOAT; + break; + case DXGI_FORMAT_R32_UINT: + return FORMAT_R32_UINT; + break; + case DXGI_FORMAT_R32_SINT: + return FORMAT_R32_SINT; + break; + case DXGI_FORMAT_R24G8_TYPELESS: + return FORMAT_R24G8_TYPELESS; + break; + case DXGI_FORMAT_D24_UNORM_S8_UINT: + return FORMAT_D24_UNORM_S8_UINT; + break; + case DXGI_FORMAT_R24_UNORM_X8_TYPELESS: + return FORMAT_R24_UNORM_X8_TYPELESS; + break; + case DXGI_FORMAT_X24_TYPELESS_G8_UINT: + return FORMAT_X24_TYPELESS_G8_UINT; + break; + case DXGI_FORMAT_R8G8_TYPELESS: + return FORMAT_R8G8_TYPELESS; + break; + case DXGI_FORMAT_R8G8_UNORM: + return FORMAT_R8G8_UNORM; + break; + case DXGI_FORMAT_R8G8_UINT: + return FORMAT_R8G8_UINT; + break; + case DXGI_FORMAT_R8G8_SNORM: + return FORMAT_R8G8_SNORM; + break; + case DXGI_FORMAT_R8G8_SINT: + return FORMAT_R8G8_SINT; + break; + case DXGI_FORMAT_R16_TYPELESS: + return FORMAT_R16_TYPELESS; + break; + case DXGI_FORMAT_R16_FLOAT: + return FORMAT_R16_FLOAT; + break; + case DXGI_FORMAT_D16_UNORM: + return FORMAT_D16_UNORM; + break; + case DXGI_FORMAT_R16_UNORM: + return FORMAT_R16_UNORM; + break; + case DXGI_FORMAT_R16_UINT: + return FORMAT_R16_UINT; + break; + case DXGI_FORMAT_R16_SNORM: + return FORMAT_R16_SNORM; + break; + case DXGI_FORMAT_R16_SINT: + return FORMAT_R16_SINT; + break; + case DXGI_FORMAT_R8_TYPELESS: + return FORMAT_R8_TYPELESS; + break; + case DXGI_FORMAT_R8_UNORM: + return FORMAT_R8_UNORM; + break; + case DXGI_FORMAT_R8_UINT: + return FORMAT_R8_UINT; + break; + case DXGI_FORMAT_R8_SNORM: + return FORMAT_R8_SNORM; + break; + case DXGI_FORMAT_R8_SINT: + return FORMAT_R8_SINT; + break; + case DXGI_FORMAT_A8_UNORM: + return FORMAT_A8_UNORM; + break; + case DXGI_FORMAT_R1_UNORM: + return FORMAT_R1_UNORM; + break; + case DXGI_FORMAT_R9G9B9E5_SHAREDEXP: + return FORMAT_R9G9B9E5_SHAREDEXP; + break; + case DXGI_FORMAT_R8G8_B8G8_UNORM: + return FORMAT_R8G8_B8G8_UNORM; + break; + case DXGI_FORMAT_G8R8_G8B8_UNORM: + return FORMAT_G8R8_G8B8_UNORM; + break; + case DXGI_FORMAT_BC1_TYPELESS: + return FORMAT_BC1_TYPELESS; + break; + case DXGI_FORMAT_BC1_UNORM: + return FORMAT_BC1_UNORM; + break; + case DXGI_FORMAT_BC1_UNORM_SRGB: + return FORMAT_BC1_UNORM_SRGB; + break; + case DXGI_FORMAT_BC2_TYPELESS: + return FORMAT_BC2_TYPELESS; + break; + case DXGI_FORMAT_BC2_UNORM: + return FORMAT_BC2_UNORM; + break; + case DXGI_FORMAT_BC2_UNORM_SRGB: + return FORMAT_BC2_UNORM_SRGB; + break; + case DXGI_FORMAT_BC3_TYPELESS: + return FORMAT_BC3_TYPELESS; + break; + case DXGI_FORMAT_BC3_UNORM: + return FORMAT_BC3_UNORM; + break; + case DXGI_FORMAT_BC3_UNORM_SRGB: + return FORMAT_BC3_UNORM_SRGB; + break; + case DXGI_FORMAT_BC4_TYPELESS: + return FORMAT_BC4_TYPELESS; + break; + case DXGI_FORMAT_BC4_UNORM: + return FORMAT_BC4_UNORM; + break; + case DXGI_FORMAT_BC4_SNORM: + return FORMAT_BC4_SNORM; + break; + case DXGI_FORMAT_BC5_TYPELESS: + return FORMAT_BC5_TYPELESS; + break; + case DXGI_FORMAT_BC5_UNORM: + return FORMAT_BC5_UNORM; + break; + case DXGI_FORMAT_BC5_SNORM: + return FORMAT_BC5_SNORM; + break; + case DXGI_FORMAT_B5G6R5_UNORM: + return FORMAT_B5G6R5_UNORM; + break; + case DXGI_FORMAT_B5G5R5A1_UNORM: + return FORMAT_B5G5R5A1_UNORM; + break; + case DXGI_FORMAT_B8G8R8A8_UNORM: + return FORMAT_B8G8R8A8_UNORM; + break; + case DXGI_FORMAT_B8G8R8X8_UNORM: + return FORMAT_B8G8R8X8_UNORM; + break; + case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM: + return FORMAT_R10G10B10_XR_BIAS_A2_UNORM; + break; + case DXGI_FORMAT_B8G8R8A8_TYPELESS: + return FORMAT_B8G8R8A8_TYPELESS; + break; + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + return FORMAT_B8G8R8A8_UNORM_SRGB; + break; + case DXGI_FORMAT_B8G8R8X8_TYPELESS: + return FORMAT_B8G8R8X8_TYPELESS; + break; + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + return FORMAT_B8G8R8X8_UNORM_SRGB; + break; + case DXGI_FORMAT_BC6H_TYPELESS: + return FORMAT_BC6H_TYPELESS; + break; + case DXGI_FORMAT_BC6H_UF16: + return FORMAT_BC6H_UF16; + break; + case DXGI_FORMAT_BC6H_SF16: + return FORMAT_BC6H_SF16; + break; + case DXGI_FORMAT_BC7_TYPELESS: + return FORMAT_BC7_TYPELESS; + break; + case DXGI_FORMAT_BC7_UNORM: + return FORMAT_BC7_UNORM; + break; + case DXGI_FORMAT_BC7_UNORM_SRGB: + return FORMAT_BC7_UNORM_SRGB; + break; + case DXGI_FORMAT_AYUV: + return FORMAT_AYUV; + break; + case DXGI_FORMAT_Y410: + return FORMAT_Y410; + break; + case DXGI_FORMAT_Y416: + return FORMAT_Y416; + break; + case DXGI_FORMAT_NV12: + return FORMAT_NV12; + break; + case DXGI_FORMAT_P010: + return FORMAT_P010; + break; + case DXGI_FORMAT_P016: + return FORMAT_P016; + break; + case DXGI_FORMAT_420_OPAQUE: + return FORMAT_420_OPAQUE; + break; + case DXGI_FORMAT_YUY2: + return FORMAT_YUY2; + break; + case DXGI_FORMAT_Y210: + return FORMAT_Y210; + break; + case DXGI_FORMAT_Y216: + return FORMAT_Y216; + break; + case DXGI_FORMAT_NV11: + return FORMAT_NV11; + break; + case DXGI_FORMAT_AI44: + return FORMAT_AI44; + break; + case DXGI_FORMAT_IA44: + return FORMAT_IA44; + break; + case DXGI_FORMAT_P8: + return FORMAT_P8; + break; + case DXGI_FORMAT_A8P8: + return FORMAT_A8P8; + break; + case DXGI_FORMAT_B4G4R4A4_UNORM: + return FORMAT_B4G4R4A4_UNORM; + break; + case DXGI_FORMAT_FORCE_UINT: + return FORMAT_FORCE_UINT; + break; + default: + break; + } + return FORMAT_UNKNOWN; +} +inline USAGE _ConvertUsage_Inv(D3D11_USAGE value) +{ + switch (value) + { + case D3D11_USAGE_DEFAULT: + return USAGE_DEFAULT; + break; + case D3D11_USAGE_IMMUTABLE: + return USAGE_IMMUTABLE; + break; + case D3D11_USAGE_DYNAMIC: + return USAGE_DYNAMIC; + break; + case D3D11_USAGE_STAGING: + return USAGE_STAGING; + break; + default: + break; + } + return USAGE_DEFAULT; +} + +inline Texture2DDesc _ConvertTexture2DDesc_Inv(const D3D11_TEXTURE2D_DESC* pDesc) +{ + Texture2DDesc desc; + desc.Width = pDesc->Width; + desc.Height = pDesc->Height; + desc.MipLevels = pDesc->MipLevels; + desc.ArraySize = pDesc->ArraySize; + desc.Format = _ConvertFormat_Inv(pDesc->Format); + desc.SampleDesc.Count = pDesc->SampleDesc.Count; + desc.SampleDesc.Quality = pDesc->SampleDesc.Quality; + desc.Usage = _ConvertUsage_Inv(pDesc->Usage); + desc.BindFlags = _ParseBindFlags_Inv(pDesc->BindFlags); + desc.CPUAccessFlags = _ParseCPUAccessFlags_Inv(pDesc->CPUAccessFlags); + desc.MiscFlags = _ParseResourceMiscFlags_Inv(pDesc->MiscFlags); + + return desc; +} + +// Engine functions + HRESULT GraphicsDevice_DX11::CreateBuffer(const GPUBufferDesc *pDesc, const SubresourceData* pInitialData, GPUBuffer *ppBuffer) { D3D11_BUFFER_DESC desc; @@ -1884,8 +2344,14 @@ HRESULT GraphicsDevice_DX11::CreateTextureFromFile(const string& fileName, Textu UNLOCK(); } - if (FAILED(hr)) + if (FAILED(hr)) { SAFE_DELETE(*ppTexture); + } + else { + D3D11_TEXTURE2D_DESC desc; + (*ppTexture)->texture2D_DX11->GetDesc(&desc); + (*ppTexture)->desc = _ConvertTexture2DDesc_Inv(&desc); + } return hr; } diff --git a/WickedEngine/wiVersion.cpp b/WickedEngine/wiVersion.cpp index 18186339f..08ea2c60c 100644 --- a/WickedEngine/wiVersion.cpp +++ b/WickedEngine/wiVersion.cpp @@ -7,7 +7,7 @@ namespace wiVersion // minor features, major bug fixes const int minor = 7; // minor bug fixes, alterations, refactors - const int revision = 18; + const int revision = 19; long GetVersion() diff --git a/WickedEngine/wiWidget.cpp b/WickedEngine/wiWidget.cpp index 38ffeea89..095e0a855 100644 --- a/WickedEngine/wiWidget.cpp +++ b/WickedEngine/wiWidget.cpp @@ -9,6 +9,7 @@ wiWidget::wiWidget():Transform() { + SetFontScaling(0.5f); state = IDLE; enabled = true; visible = true; @@ -105,6 +106,18 @@ wiColor wiWidget::GetColor() { return colors[GetState()]; } +float wiWidget::GetScaledFontSize() +{ + return GetFontScaling() * min(scale.x, scale.y); +} +void wiWidget::SetFontScaling(float val) +{ + fontScaling = val; +} +float wiWidget::GetFontScaling() +{ + return fontScaling; +} wiButton::wiButton(const string& name) :wiWidget() @@ -208,7 +221,7 @@ void wiButton::Render(wiGUI* gui) wiImage::Draw(wiTextureHelper::getInstance()->getColor(color) , wiImageEffects(translation.x, translation.y, scale.x, scale.y), gui->GetGraphicsThread()); - wiFont(text, wiFontProps(translation.x + scale.x*0.5f, translation.y + scale.y*0.5f, 0, WIFALIGN_CENTER, WIFALIGN_CENTER)).Draw(gui->GetGraphicsThread()); + wiFont(text, wiFontProps(translation.x + scale.x*0.5f, translation.y + scale.y*0.5f, GetScaledFontSize(), WIFALIGN_CENTER, WIFALIGN_CENTER)).Draw(gui->GetGraphicsThread()); } void wiButton::OnClick(function func) { @@ -260,7 +273,7 @@ void wiLabel::Render(wiGUI* gui) wiImage::Draw(wiTextureHelper::getInstance()->getColor(color) , wiImageEffects(translation.x, translation.y, scale.x, scale.y), gui->GetGraphicsThread()); - wiFont(text, wiFontProps(translation.x, translation.y, 0, WIFALIGN_LEFT, WIFALIGN_TOP)).Draw(gui->GetGraphicsThread()); + wiFont(text, wiFontProps(translation.x, translation.y, GetScaledFontSize(), WIFALIGN_LEFT, WIFALIGN_TOP)).Draw(gui->GetGraphicsThread()); } @@ -387,11 +400,11 @@ void wiSlider::Render(wiGUI* gui) , wiImageEffects(headPosX - headWidth * 0.5f, translation.y, headWidth, scale.y), gui->GetGraphicsThread()); // text - wiFont(text, wiFontProps(translation.x - headWidth * 0.5f, translation.y + scale.y*0.5f, 0, WIFALIGN_RIGHT, WIFALIGN_CENTER)).Draw(gui->GetGraphicsThread()); + wiFont(text, wiFontProps(translation.x - headWidth * 0.5f, translation.y + scale.y*0.5f, GetScaledFontSize(), WIFALIGN_RIGHT, WIFALIGN_CENTER)).Draw(gui->GetGraphicsThread()); // value stringstream ss(""); ss << value; - wiFont(ss.str(), wiFontProps(translation.x + scale.x + headWidth * 0.5f, translation.y + scale.y*0.5f, 0, WIFALIGN_LEFT, WIFALIGN_CENTER)).Draw(gui->GetGraphicsThread()); + wiFont(ss.str(), wiFontProps(translation.x + scale.x + headWidth * 0.5f, translation.y + scale.y*0.5f, GetScaledFontSize(), WIFALIGN_LEFT, WIFALIGN_CENTER)).Draw(gui->GetGraphicsThread()); } void wiSlider::OnSlide(function func) { @@ -515,7 +528,7 @@ void wiCheckBox::Render(wiGUI* gui) , gui->GetGraphicsThread()); } - wiFont(text, wiFontProps(translation.x, translation.y + scale.y*0.5f, 0, WIFALIGN_RIGHT, WIFALIGN_CENTER)).Draw(gui->GetGraphicsThread()); + wiFont(text, wiFontProps(translation.x, translation.y + scale.y*0.5f, GetScaledFontSize(), WIFALIGN_RIGHT, WIFALIGN_CENTER)).Draw(gui->GetGraphicsThread()); } void wiCheckBox::OnClick(function func) { @@ -662,7 +675,7 @@ void wiDragger::Render(wiGUI* gui) wiImage::Draw(wiTextureHelper::getInstance()->getColor(color) , wiImageEffects(translation.x, translation.y, scale.x, scale.y), gui->GetGraphicsThread()); - wiFont(text, wiFontProps(translation.x + scale.x*0.5f, translation.y + scale.y*0.5f, 0, WIFALIGN_CENTER, WIFALIGN_CENTER)).Draw(gui->GetGraphicsThread()); + wiFont(text, wiFontProps(translation.x + scale.x*0.5f, translation.y + scale.y*0.5f, GetScaledFontSize(), WIFALIGN_CENTER, WIFALIGN_CENTER)).Draw(gui->GetGraphicsThread()); } void wiDragger::OnDragStart(function func) { @@ -841,7 +854,7 @@ void wiWindow::Render(wiGUI* gui) wiImage::Draw(wiTextureHelper::getInstance()->getColor(color) , wiImageEffects(translation.x, translation.y, scale.x, scale.y), gui->GetGraphicsThread()); - wiFont(text, wiFontProps(translation.x, translation.y, 0, WIFALIGN_LEFT, WIFALIGN_TOP)).Draw(gui->GetGraphicsThread()); + wiFont(text, wiFontProps(translation.x, translation.y, moveDragger->scale.y, WIFALIGN_LEFT, WIFALIGN_TOP)).Draw(gui->GetGraphicsThread()); } void wiWindow::SetVisible(bool value) { diff --git a/WickedEngine/wiWidget.h b/WickedEngine/wiWidget.h index 65a079a6d..6d91a8977 100644 --- a/WickedEngine/wiWidget.h +++ b/WickedEngine/wiWidget.h @@ -20,6 +20,8 @@ struct wiEventArgs class wiWidget : public Transform { friend class wiGUI; +private: + float fontScaling; protected: wiHashString fastName; string text; @@ -41,6 +43,7 @@ protected: void Activate(); void Deactivate(); wiColor colors[WIDGETSTATE_COUNT]; + float GetScaledFontSize(); public: wiWidget(); virtual ~wiWidget(); @@ -58,6 +61,8 @@ public: bool IsVisible(); void SetColor(const wiColor& color, WIDGETSTATE state); wiColor GetColor(); + void SetFontScaling(float val); + float GetFontScaling(); virtual void Update(wiGUI* gui); virtual void Render(wiGUI* gui) = 0;