From 49d9ea0c6e6cfbbf906ed582d813f7f0a9b87871 Mon Sep 17 00:00:00 2001 From: assiduous Date: Mon, 8 Jun 2020 21:12:25 -0700 Subject: Refactored HLSL2GLSLConerter --- .../src/HLSL2GLSLConverterAppWin32.cpp | 104 +++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 HLSL2GLSLConverter/src/HLSL2GLSLConverterAppWin32.cpp (limited to 'HLSL2GLSLConverter/src/HLSL2GLSLConverterAppWin32.cpp') diff --git a/HLSL2GLSLConverter/src/HLSL2GLSLConverterAppWin32.cpp b/HLSL2GLSLConverter/src/HLSL2GLSLConverterAppWin32.cpp new file mode 100644 index 0000000..e578d56 --- /dev/null +++ b/HLSL2GLSLConverter/src/HLSL2GLSLConverterAppWin32.cpp @@ -0,0 +1,104 @@ +// HLSL2GLSLConverterImpl.cpp : Defines the entry point for the console application. +// + +#include "HLSL2GLSLConverterApp.h" +#include "Errors.hpp" +#include "RenderDevice.h" +#include "EngineFactoryOpenGL.h" +#include "RefCntAutoPtr.hpp" + +#include +#include + +using namespace Diligent; + +// Called every time the application receives a message +LRESULT CALLBACK MessageProc(HWND wnd, UINT message, WPARAM wParam, LPARAM lParam) +{ + // Send event message to AntTweakBar + switch (message) + { + case WM_PAINT: + { + PAINTSTRUCT ps; + BeginPaint(wnd, &ps); + EndPaint(wnd, &ps); + return 0; + } + case WM_SIZE: // Window size has been changed + return 0; + + case WM_CHAR: + if (wParam == VK_ESCAPE) + PostQuitMessage(0); + return 0; + + case WM_DESTROY: + PostQuitMessage(0); + return 0; + + default: + return DefWindowProc(wnd, message, wParam, lParam); + } +} + +// Main +int main(int argc, char** argv) +{ +#if defined(_DEBUG) || defined(DEBUG) + _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); +#endif + + HLSL2GLSLConverterApp Converter; + + if (argc == 1) + { + Converter.PrintHelp(); + return 0; + } + + { + auto ret = Converter.ParseCmdLine(argc, argv); + if (ret != 0) + return ret; + } + + RefCntAutoPtr pDevice; + RefCntAutoPtr pContext; + RefCntAutoPtr pSwapChain; + + if (Converter.NeedsCompileShader()) + { + // Register window cla ss + WNDCLASSEX wcex = {sizeof(WNDCLASSEX), CS_HREDRAW | CS_VREDRAW, MessageProc, + 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, L"HLSL2GLSLConverter", NULL}; + RegisterClassEx(&wcex); + + // Create dummy window + RECT rc = {0, 0, 512, 512}; + AdjustWindowRect(&rc, WS_OVERLAPPEDWINDOW, FALSE); + HWND wnd = CreateWindow(L"HLSL2GLSLConverter", L"HLSL2GLSL Converter", + WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, + rc.right - rc.left, rc.bottom - rc.top, NULL, NULL, wcex.hInstance, NULL); + + if (!wnd) + { + LOG_ERROR_MESSAGE("Failed to create window"); + return -1; + } + EngineGLCreateInfo EngineCI; + SwapChainDesc SCDesc; + EngineCI.Window.hWnd = wnd; + + auto* pFactory = Converter.GetFactoryGL(); + pFactory->CreateDeviceAndSwapChainGL( + EngineCI, &pDevice, &pContext, SCDesc, &pSwapChain); + if (!pDevice) + { + LOG_ERROR_MESSAGE("Failed to create render device"); + return -1; + } + } + + return Converter.Convert(pDevice); +} -- cgit v1.2.3