Browse Source

Build on windows, though doesnt quite work yet

Signed-off-by: falkTX <falktx@falktx.com>
pull/272/head
falkTX 4 years ago
parent
commit
a3d11e4dc0
Signed by: falkTX <falktx@falktx.com> GPG Key ID: CDBAA37ABC74FBA0
6 changed files with 207 additions and 73 deletions
  1. +60
    -36
      dgl/Makefile
  2. +5
    -3
      dgl/src/WindowPrivateData.cpp
  3. +1
    -1
      dgl/src/pugl-upstream
  4. +116
    -23
      dgl/src/pugl.cpp
  5. +15
    -0
      dgl/src/pugl.hpp
  6. +10
    -10
      tests/Makefile

+ 60
- 36
dgl/Makefile View File

@@ -14,7 +14,7 @@ BUILD_CXX_FLAGS += -Isrc/pugl-upstream/include
LINK_FLAGS += $(DGL_LIBS)

# TODO fix these after pugl-upstream is done
BUILD_CXX_FLAGS += -Wno-missing-field-initializers -Wno-extra -Wno-narrowing
BUILD_CXX_FLAGS += -Wno-attributes -Wno-extra -Wno-missing-field-initializers -Wno-narrowing

# ifneq ($(MACOS_OLD),true)
# needed by sofd right now, fix later
@@ -39,36 +39,42 @@ OBJS_common = \
../build/dgl/WidgetPrivateData.cpp.o \
../build/dgl/Window.cpp.o \
../build/dgl/WindowPrivateData.cpp.o

# ../build/dgl/WindowFileBrowser.cpp.o

# TODO: ImageWidgets.cpp

# ---------------------------------------------------------------------------------------------------------------------

OBJS_cairo = $(OBJS_common) \
../build/dgl/Cairo.cpp.cairo.o \
../build/dgl/pugl.cpp.cairo.o
../build/dgl/Cairo.cpp.cairo.o

# ifeq ($(MACOS),true)
# OBJS_cairo += ../build/dgl/Window.mm.cairo.o
# else
# OBJS_cairo += ../build/dgl/Window.cpp.cairo.o
# endif
ifeq ($(MACOS),true)
OBJS_cairo += ../build/dgl/pugl.mm.cairo.o
else
OBJS_cairo += ../build/dgl/pugl.cpp.cairo.o
endif

# ---------------------------------------------------------------------------------------------------------------------

OBJS_opengl = $(OBJS_common) \
../build/dgl/ImageWidgets.cpp.o \
../build/dgl/OpenGL.cpp.opengl.o \
../build/dgl/NanoVG.cpp.opengl.o \
../build/dgl/pugl.cpp.opengl.o
../build/dgl/NanoVG.cpp.opengl.o

# ifeq ($(MACOS),true)
# OBJS_opengl += ../build/dgl/Window.mm.opengl.o
# else
# OBJS_opengl += ../build/dgl/Window.cpp.opengl.o
# endif
ifeq ($(MACOS),true)
OBJS_opengl += ../build/dgl/pugl.mm.opengl.o
else
OBJS_opengl += ../build/dgl/pugl.cpp.opengl.o
endif

# ---------------------------------------------------------------------------------------------------------------------

OBJS_vulkan = $(OBJS_common) \
../build/dgl/Cairo.cpp.vulkan.o

ifeq ($(MACOS),true)
OBJS_vulkan += ../build/dgl/pugl.mm.vulkan.o
else
OBJS_vulkan += ../build/dgl/pugl.cpp.vulkan.o
endif

# ---------------------------------------------------------------------------------------------------------------------

@@ -82,6 +88,10 @@ TARGETS += ../build/libdgl-opengl.a
TARGETS += ../build/libdgl.a
endif

ifeq ($(HAVE_VULKAN),true)
TARGETS += ../build/libdgl-vulkan.a
endif

# ---------------------------------------------------------------------------------------------------------------------

all: $(TARGETS)
@@ -100,6 +110,12 @@ all: $(TARGETS)
$(SILENT)rm -f $@
$(SILENT)$(AR) crs $@ $^

../build/libdgl-vulkan.a: $(OBJS_vulkan)
-@mkdir -p ../build
@echo "Creating libdgl-vulkan.a"
$(SILENT)rm -f $@
$(SILENT)$(AR) crs $@ $^

# Compat name, to be removed soon
../build/libdgl.a: ../build/libdgl-opengl.a
@echo "Symlinking libdgl.a"
@@ -117,6 +133,11 @@ all: $(TARGETS)
@echo "Compiling $<"
$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@

../build/dgl/%.mm.o: src/%.mm
-@mkdir -p ../build/dgl
@echo "Compiling $<"
$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) -c -ObjC++ -o $@

# ---------------------------------------------------------------------------------------------------------------------

../build/dgl/%.cpp.cairo.o: src/%.cpp
@@ -124,15 +145,10 @@ all: $(TARGETS)
@echo "Compiling $< (Cairo variant)"
$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) $(CAIRO_FLAGS) -DDGL_CAIRO -c -o $@

# ../build/dgl/Window.cpp.cairo.o: src/Window.cpp src/sofd/* src/pugl-upstream/*
# -@mkdir -p ../build/dgl
# @echo "Compiling $< (Cairo variant)"
# $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) $(CAIRO_FLAGS) -DDGL_CAIRO -c -o $@
#
# ../build/dgl/Window.mm.cairo.o: src/Window.cpp src/sofd/* src/pugl-upstream/*
# -@mkdir -p ../build/dgl
# @echo "Compiling $< (Cairo variant)"
# $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) $(CAIRO_FLAGS) -DDGL_CAIRO -ObjC++ -c -o $@
../build/dgl/%.mm.cairo.o: src/%.mm
-@mkdir -p ../build/dgl
@echo "Compiling $< (Cairo variant)"
$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) $(CAIRO_FLAGS) -DDGL_CAIRO -c -ObjC++ -o $@

# ---------------------------------------------------------------------------------------------------------------------

@@ -141,15 +157,22 @@ all: $(TARGETS)
@echo "Compiling $< (OpenGL variant)"
$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) $(OPENGL_FLAGS) -DDGL_OPENGL -c -o $@

# ../build/dgl/Window.cpp.opengl.o: src/Window.cpp src/sofd/* src/pugl-upstream/*
# -@mkdir -p ../build/dgl
# @echo "Compiling $< (OpenGL variant)"
# $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) $(OPENGL_FLAGS) -DDGL_OPENGL -c -o $@
#
# ../build/dgl/Window.mm.opengl.o: src/Window.cpp src/sofd/* src/pugl-upstream/*
# -@mkdir -p ../build/dgl
# @echo "Compiling $< (OpenGL variant)"
# $(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) $(OPENGL_FLAGS) -DDGL_OPENGL -ObjC++ -c -o $@
../build/dgl/%.mm.opengl.o: src/%.mm
-@mkdir -p ../build/dgl
@echo "Compiling $< (OpenGL variant)"
$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) $(OPENGL_FLAGS) -DDGL_OPENGL -c -ObjC++ -o $@

# ---------------------------------------------------------------------------------------------------------------------

../build/dgl/%.cpp.vulkan.o: src/%.cpp
-@mkdir -p ../build/dgl
@echo "Compiling $< (Vulkan variant)"
$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) $(VULKAN_FLAGS) -DDGL_VULKAN -c -o $@

../build/dgl/%.mm.vulkan.o: src/%.mm
-@mkdir -p ../build/dgl
@echo "Compiling $< (Vulkan variant)"
$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) $(VULKAN_FLAGS) -DDGL_VULKAN -c -ObjC++ -o $@

# ---------------------------------------------------------------------------------------------------------------------

@@ -164,5 +187,6 @@ debug:
-include $(OBJS_common:%.o=%.d)
-include $(OBJS_cairo:%.o=%.d)
-include $(OBJS_opengl:%.o=%.d)
-include $(OBJS_vulkan:%.o=%.d)

# ---------------------------------------------------------------------------------------------------------------------

+ 5
- 3
dgl/src/WindowPrivateData.cpp View File

@@ -19,11 +19,13 @@

#include "pugl.hpp"

#include <cinttypes>
#define DGL_DEBUG_EVENTS

START_NAMESPACE_DGL
#if defined(DEBUG) && defined(DGL_DEBUG_EVENTS)
# include <cinttypes>
#endif

#define DGL_DEBUG_EVENTS
START_NAMESPACE_DGL

#if defined(DEBUG) && defined(DGL_DEBUG_EVENTS)
# define DGL_DBG(msg) std::fprintf(stderr, "%s", msg);


+ 1
- 1
dgl/src/pugl-upstream

@@ -1 +1 @@
Subproject commit b0a018a006c5d7d7796074b86c1b69f8671d2d83
Subproject commit 9cab7cdcba159aec5f3df4d5841b83c12ef64185

+ 116
- 23
dgl/src/pugl.cpp View File

@@ -25,7 +25,36 @@

#if defined(DISTRHO_OS_HAIKU)
#elif defined(DISTRHO_OS_MAC)
# import <Cocoa/Cocoa.h>
# include <dlfcn.h>
# include <mach/mach_time.h>
# ifdef DGL_CAIRO
# include <cairo.h>
# include <cairo-quartz.h>
# endif
# ifdef DGL_OPENGL
# include <OpenGL/gl.h>
# endif
# ifdef DGL_VULKAN
# import <QuartzCore/CAMetalLayer.h>
# include <vulkan/vulkan_core.h>
# include <vulkan/vulkan_macos.h>
# endif
#elif defined(DISTRHO_OS_WINDOWS)
# include <wctype.h>
# include <windows.h>
# include <windowsx.h>
# ifdef DGL_CAIRO
# include <cairo.h>
# include <cairo-win32.h>
# endif
# ifdef DGL_OPENGL
# include <GL/gl.h>
# endif
# ifdef DGL_VULKAN
# include <vulkan/vulkan.h>
# include <vulkan/vulkan_win32.h>
# endif
#else
# include <dlfcn.h>
# include <sys/select.h>
@@ -51,6 +80,7 @@
# include <cairo-xlib.h>
# endif
# ifdef DGL_OPENGL
# include <GL/gl.h>
# include <GL/glx.h>
# endif
# ifdef DGL_VULKAN
@@ -67,9 +97,33 @@ START_NAMESPACE_DGL

#if defined(DISTRHO_OS_HAIKU)
#elif defined(DISTRHO_OS_MAC)
/*
# define PuglWindow DISTRHO_JOIN_MACRO(PuglWindow, DGL_NAMESPACE)
# define PuglOpenGLView DISTRHO_JOIN_MACRO(PuglOpenGLView, DGL_NAMESPACE)
*/
# import "pugl-upstream/src/mac.m"
# import "pugl-upstream/src/mac_stub.m"
# ifdef DGL_CAIRO
# import "pugl-upstream/src/mac_cairo.m"
# endif
# ifdef DGL_OPENGL
# import "pugl-upstream/src/mac_gl.m"
# endif
# ifdef DGL_VULKAN
# import "pugl-upstream/src/mac_vulkan.m"
# endif
#elif defined(DISTRHO_OS_WINDOWS)
# include "pugl-upstream/src/win.c"
# include "pugl-upstream/src/win_stub.c"
# ifdef DGL_CAIRO
# include "pugl-upstream/src/win_cairo.c"
# endif
# ifdef DGL_OPENGL
# include "pugl-upstream/src/win_gl.c"
# endif
# ifdef DGL_VULKAN
# include "pugl-upstream/src/win_vulkan.c"
# endif
#else
# include "pugl-upstream/src/x11.c"
# include "pugl-upstream/src/x11_stub.c"
@@ -120,7 +174,7 @@ void puglRaiseWindow(PuglView* view)
// --------------------------------------------------------------------------------------------------------------------
// set backend that matches current build

void puglSetMatchingBackendForCurrentBuild(PuglView* view)
void puglSetMatchingBackendForCurrentBuild(PuglView* const view)
{
#ifdef DGL_CAIRO
puglSetBackend(view, puglCairoBackend());
@@ -136,7 +190,7 @@ void puglSetMatchingBackendForCurrentBuild(PuglView* view)
// --------------------------------------------------------------------------------------------------------------------
// Combine puglSetMinSize and puglSetAspectRatio

PuglStatus puglSetGeometryConstraints(PuglView* view, unsigned int width, unsigned int height, bool aspect)
PuglStatus puglSetGeometryConstraints(PuglView* const view, const uint width, const uint height, const bool aspect)
{
view->minWidth = width;
view->minHeight = height;
@@ -170,16 +224,18 @@ PuglStatus puglSetGeometryConstraints(PuglView* view, unsigned int width, unsign
// --------------------------------------------------------------------------------------------------------------------
// set window size without changing frame x/y position

PuglStatus puglSetWindowSize(PuglView* view, unsigned int width, unsigned int height)
PuglStatus puglSetWindowSize(PuglView* const view, const uint width, const uint height)
{
#if defined(DISTRHO_OS_HAIKU) || defined(DISTRHO_OS_MAC)
// TODO
const PuglRect frame = { 0.0, 0.0, (double)width, (double)height };
// keep upstream behaviour
const PuglRect frame = { view->frame.x, view->frame.y, (double)width, (double)height };
return puglSetFrame(view, frame);
#elif defined(DISTRHO_OS_WINDOWS)
// matches upstream pugl, except we add SWP_NOMOVE flag
if (view->impl->hwnd)
{
const PuglRect frame = view->frame;

RECT rect = { (long)frame.x,
(long)frame.y,
(long)frame.x + (long)frame.width,
@@ -202,23 +258,6 @@ PuglStatus puglSetWindowSize(PuglView* view, unsigned int width, unsigned int he
{
if (! XResizeWindow(view->world->impl->display, view->impl->win, width, height))
return PUGL_UNKNOWN_ERROR;
#if 0
if (! fResizable)
{
XSizeHints sizeHints;
memset(&sizeHints, 0, sizeof(sizeHints));

sizeHints.flags = PSize|PMinSize|PMaxSize;
sizeHints.width = static_cast<int>(width);
sizeHints.height = static_cast<int>(height);
sizeHints.min_width = static_cast<int>(width);
sizeHints.min_height = static_cast<int>(height);
sizeHints.max_width = static_cast<int>(width);
sizeHints.max_height = static_cast<int>(height);

XSetWMNormalHints(xDisplay, xWindow, &sizeHints);
}
#endif
}
#endif

@@ -241,7 +280,7 @@ void puglOnDisplayPrepare(PuglView*)
// --------------------------------------------------------------------------------------------------------------------
// DGL specific, build-specific fallback resize

void puglFallbackOnResize(PuglView* view)
void puglFallbackOnResize(PuglView* const view)
{
#ifdef DGL_OPENGL
glEnable(GL_BLEND);
@@ -255,6 +294,60 @@ void puglFallbackOnResize(PuglView* view)
#endif
}

#ifdef DISTRHO_OS_WINDOWS
// --------------------------------------------------------------------------------------------------------------------
// win32 specific, call ShowWindow with SW_RESTORE

void puglWin32RestoreWindow(PuglView* const view)
{
PuglInternals* impl = view->impl;
DISTRHO_SAFE_ASSERT_RETURN(impl->hwnd != nullptr,);

ShowWindow(impl->hwnd, SW_RESTORE);
SetFocus(impl->hwnd);
}

// --------------------------------------------------------------------------------------------------------------------
// win32 specific, center view based on parent coordinates (if there is one)

void puglWin32ShowWindowCentered(PuglView* const view)
{
PuglInternals* impl = view->impl;
DISTRHO_SAFE_ASSERT_RETURN(impl->hwnd != nullptr,);

RECT rectChild, rectParent;

if (view->transientParent != 0 &&
GetWindowRect(impl->hwnd, &rectChild) &&
GetWindowRect((HWND)view->transientParent, &rectParent))
{
SetWindowPos(impl->hwnd, (HWND)view->transientParent,
rectParent.left + (rectChild.right-rectChild.left)/2,
rectParent.top + (rectChild.bottom-rectChild.top)/2,
0, 0, SWP_SHOWWINDOW|SWP_NOSIZE);
}
else
{
ShowWindow(impl->hwnd, SW_SHOWNORMAL);
}

SetFocus(impl->hwnd);
}

// --------------------------------------------------------------------------------------------------------------------
// win32 specific, set or unset WS_SIZEBOX style flag

void puglWin32SetWindowResizable(PuglView* const view, const bool resizable)
{
PuglInternals* impl = view->impl;
DISTRHO_SAFE_ASSERT_RETURN(impl->hwnd != nullptr,);

const int winFlags = resizable ? GetWindowLong(impl->hwnd, GWL_STYLE) | WS_SIZEBOX
: GetWindowLong(impl->hwnd, GWL_STYLE) & ~WS_SIZEBOX;
SetWindowLong(impl->hwnd, GWL_STYLE, winFlags);
}
#endif

// --------------------------------------------------------------------------------------------------------------------

END_NAMESPACE_DGL

+ 15
- 0
dgl/src/pugl.hpp View File

@@ -28,6 +28,7 @@ START_NAMESPACE_DGL

// --------------------------------------------------------------------------------------------------------------------

#define PUGL_API
#define PUGL_DISABLE_DEPRECATED
#include "pugl-upstream/include/pugl/pugl.h"

@@ -65,6 +66,20 @@ puglOnDisplayPrepare(PuglView* view);
PUGL_API void
puglFallbackOnResize(PuglView* view);

#ifdef DISTRHO_OS_WINDOWS
// win32 specific, call ShowWindow with SW_RESTORE
PUGL_API void
puglWin32RestoreWindow(PuglView* view);

// win32 specific, center view based on parent coordinates (if there is one)
PUGL_API void
puglWin32ShowWindowCentered(PuglView* view);

// win32 specific, set or unset WS_SIZEBOX style flag
PUGL_API void
puglWin32SetWindowResizable(PuglView* view, bool resizable);
#endif

PUGL_END_DECLS

// --------------------------------------------------------------------------------------------------------------------


+ 10
- 10
tests/Makefile View File

@@ -16,7 +16,7 @@ BUILD_CXX_FLAGS += $(DGL_FLAGS) -I.. -I../dgl/src/pugl-upstream/include -DDONT_S
LINK_FLAGS += -lpthread

# TODO fix within pugl
BUILD_CXX_FLAGS += -Wno-missing-field-initializers -Wno-extra
BUILD_CXX_FLAGS += -Wno-extra -Wno-missing-field-initializers

# ---------------------------------------------------------------------------------------------------------------------

@@ -33,8 +33,8 @@ ifeq ($(HAVE_VULKAN),true)
WTESTS = Window.vulkan
endif

TARGETS = $(TESTS:%=../build/tests/%)
TARGETS += $(WTESTS:Window.%=../build/tests/Window.%)
TARGETS = $(TESTS:%=../build/tests/%$(APP_EXT))
TARGETS += $(WTESTS:Window.%=../build/tests/Window.%$(APP_EXT))

OBJS = $(TESTS:%=../build/tests/%.cpp.o)
OBJS += $(WTESTS:Window.%=../build/tests/Window.cpp.%.o)
@@ -102,31 +102,31 @@ clean:
# ---------------------------------------------------------------------------------------------------------------------
# linking steps

../build/tests/%: ../build/tests/%.cpp.o
../build/tests/%$(APP_EXT): ../build/tests/%.cpp.o
@echo "Linking $*"
$(SILENT)$(CXX) $< $(LINK_FLAGS) $(DGL_SYSTEM_LIBS) -o $@

../build/tests/%.cairo: ../build/tests/%.cpp.cairo.o
../build/tests/%.cairo$(APP_EXT): ../build/tests/%.cpp.cairo.o
@echo "Linking $*"
$(SILENT)$(CXX) $< $(LINK_FLAGS) $(DGL_SYSTEM_LIBS) $(CAIRO_LIBS) -o $@

../build/tests/%.opengl: ../build/tests/%.cpp.opengl.o
../build/tests/%.opengl$(APP_EXT): ../build/tests/%.cpp.opengl.o
@echo "Linking $*"
$(SILENT)$(CXX) $< $(LINK_FLAGS) $(DGL_SYSTEM_LIBS) $(OPENGL_LIBS) -o $@

../build/tests/%.vulkan: ../build/tests/%.cpp.vulkan.o
../build/tests/%.vulkan$(APP_EXT): ../build/tests/%.cpp.vulkan.o
@echo "Linking $*"
$(SILENT)$(CXX) $< $(LINK_FLAGS) $(DGL_SYSTEM_LIBS) $(VULKAN_LIBS) -o $@

../build/tests/Demo.cairo: ../build/tests/Demo.cpp.cairo.o ../build/libdgl-cairo.a
../build/tests/Demo.cairo$(APP_EXT): ../build/tests/Demo.cpp.cairo.o ../build/libdgl-cairo.a
@echo "Linking Demo (Cairo)"
$(SILENT)$(CXX) $^ $(LINK_FLAGS) $(DGL_SYSTEM_LIBS) $(CAIRO_LIBS) -o $@

../build/tests/Demo.opengl: ../build/tests/Demo.cpp.opengl.o ../build/libdgl-opengl.a
../build/tests/Demo.opengl$(APP_EXT): ../build/tests/Demo.cpp.opengl.o ../build/libdgl-opengl.a
@echo "Linking Demo (OpenGL)"
$(SILENT)$(CXX) $^ $(LINK_FLAGS) $(DGL_SYSTEM_LIBS) $(OPENGL_LIBS) -o $@

../build/tests/Demo.vulkan: ../build/tests/Demo.cpp.vulkan.o ../build/libdgl-vulkan.a
../build/tests/Demo.vulkan$(APP_EXT): ../build/tests/Demo.cpp.vulkan.o ../build/libdgl-vulkan.a
@echo "Linking Demo (OpenGL)"
$(SILENT)$(CXX) $^ $(LINK_FLAGS) $(DGL_SYSTEM_LIBS) $(VULKAN_LIBS) -o $@



Loading…
Cancel
Save