meta layer progress
This commit is contained in:
parent
20a21d31d4
commit
93e340853c
@ -109,14 +109,10 @@
|
|||||||
//~ Debug
|
//~ Debug
|
||||||
|
|
||||||
//- Static assert
|
//- Static assert
|
||||||
#if CompilerIsMsvc || (LanguageIsC && __STDC_VERSION__ < 202311L) || LanguageIsGpu
|
#if LanguageIsC
|
||||||
# if CompilerIsMsvc
|
|
||||||
# define StaticAssert2(cond, line, counter) struct STATIC_ASSERT_____##line##counter {int foo[(cond) ? 1 : -1];}
|
# define StaticAssert2(cond, line, counter) struct STATIC_ASSERT_____##line##counter {int foo[(cond) ? 1 : -1];}
|
||||||
# define StaticAssert1(cond, line, counter) StaticAssert2(cond, line, counter)
|
# define StaticAssert1(cond, line, counter) StaticAssert2(cond, line, counter)
|
||||||
# define StaticAssert(cond) StaticAssert1(cond, __LINE__, __COUNTER__)
|
# define StaticAssert(cond) StaticAssert1(cond, __LINE__, __COUNTER__)
|
||||||
# else
|
|
||||||
# define StaticAssert(cond) _Static_assert(cond, "")
|
|
||||||
# endif
|
|
||||||
#else
|
#else
|
||||||
# define StaticAssert(cond) static_assert(cond, "")
|
# define StaticAssert(cond) static_assert(cond, "")
|
||||||
#endif
|
#endif
|
||||||
@ -622,7 +618,7 @@ Struct(String32)
|
|||||||
# if PlatformIsWindows
|
# if PlatformIsWindows
|
||||||
ForceInline i16 FiberId(void)
|
ForceInline i16 FiberId(void)
|
||||||
{
|
{
|
||||||
i16 *v = (void *)__readgsqword(32);
|
i16 *v = (void *)(u64)__readgsqword(32);
|
||||||
return *v;
|
return *v;
|
||||||
}
|
}
|
||||||
# else
|
# else
|
||||||
|
|||||||
@ -1,10 +1,10 @@
|
|||||||
#if CompilerIsMsvc
|
#if PlatformIsWindows
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ Incbin
|
//~ Incbin
|
||||||
|
|
||||||
/* Find first resource with `type` and return the data in `udata`. */
|
/* Find first resource with `type` and return the data in `udata`. */
|
||||||
b32 CALLBACK IncbinEnumerateResourceNamesFunc(HMODULE module, LPCWSTR type, LPCWSTR wstr_entry_name, LONG_PTR udata)
|
BOOL IncbinEnumerateResourceNamesFunc(HMODULE module, LPCWSTR type, LPWSTR wstr_entry_name, LONG_PTR udata)
|
||||||
{
|
{
|
||||||
TempArena scratch = BeginScratchNoConflict();
|
TempArena scratch = BeginScratchNoConflict();
|
||||||
IncbinRcSearchParams *params = (IncbinRcSearchParams *)udata;
|
IncbinRcSearchParams *params = (IncbinRcSearchParams *)udata;
|
||||||
@ -75,4 +75,4 @@ String StringFromIncbinRcResource(IncbinRcResource *inc)
|
|||||||
return inc->data;
|
return inc->data;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* CompilerIsMsvc */
|
#endif /* PlatformIsWindows */
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
#if CompilerIsMsvc
|
#if PlatformIsWindows
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ Msvc incbin types
|
//~ Windows incbin types
|
||||||
|
|
||||||
Struct(IncbinRcSearchParams)
|
Struct(IncbinRcSearchParams)
|
||||||
{
|
{
|
||||||
@ -29,7 +29,7 @@ Struct(IncbinRcResource)
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ Msvc incbin operations
|
//~ Msvc incbin operations
|
||||||
|
|
||||||
b32 IncbinEnumerateResourceNamesFunc(void *module, const wchar_t *type, const wchar_t *wstr_entry_name, i64 udata);
|
BOOL IncbinEnumerateResourceNamesFunc(HMODULE module, LPCWSTR type, LPWSTR wstr_entry_name, LONG_PTR udata);
|
||||||
String StringFromIncbinRcResource(IncbinRcResource *inc);
|
String StringFromIncbinRcResource(IncbinRcResource *inc);
|
||||||
|
|
||||||
/* NOTE: Msvc doesn't have an Inline assembler that can include binary data.
|
/* NOTE: Msvc doesn't have an Inline assembler that can include binary data.
|
||||||
@ -43,7 +43,7 @@ String StringFromIncbinRcResource(IncbinRcResource *inc);
|
|||||||
|
|
||||||
String StringFromIncbinRcResource(struct IncbinRcResource *inc);
|
String StringFromIncbinRcResource(struct IncbinRcResource *inc);
|
||||||
|
|
||||||
#else /* CompilerIsMsvc */
|
#else /* PlatformIsWindows */
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ Clang incbin operations
|
//~ Clang incbin operations
|
||||||
|
|||||||
@ -39,8 +39,8 @@ typedef i32 FmtKind; enum
|
|||||||
FmtKind_Hex = 0x0a3d0792,
|
FmtKind_Hex = 0x0a3d0792,
|
||||||
FmtKind_Ptr = 0x0c4519e4,
|
FmtKind_Ptr = 0x0c4519e4,
|
||||||
FmtKind_Float = 0x04814143,
|
FmtKind_Float = 0x04814143,
|
||||||
FmtKind_Uid = 0x9d1cd407,
|
FmtKind_Uid = 0x3d1cd407,
|
||||||
FmtKind_Handle = 0xfead3bec,
|
FmtKind_Handle = 0x6ead3bec,
|
||||||
|
|
||||||
FmtKind_End = 0x0ecbc5ae
|
FmtKind_End = 0x0ecbc5ae
|
||||||
};
|
};
|
||||||
|
|||||||
@ -30,8 +30,8 @@ b32 Panic(String msg)
|
|||||||
u32 mb_flags = MB_SETFOREGROUND | MB_ICONERROR;
|
u32 mb_flags = MB_SETFOREGROUND | MB_ICONERROR;
|
||||||
MessageBoxExA(0, msg_cstr, "Fatal error", mb_flags, 0);
|
MessageBoxExA(0, msg_cstr, "Fatal error", mb_flags, 0);
|
||||||
}
|
}
|
||||||
printf(msg_cstr);
|
HANDLE console_handle = GetStdHandle(STD_ERROR_HANDLE);
|
||||||
fflush(stdout);
|
WriteConsoleA(console_handle, msg.text, msg.len, 0, 0);
|
||||||
if ((1)) /* Supress unreachable code warning */
|
if ((1)) /* Supress unreachable code warning */
|
||||||
{
|
{
|
||||||
ExitProcess(1);
|
ExitProcess(1);
|
||||||
|
|||||||
@ -876,41 +876,73 @@ i32 main(i32 argc, u8 **argv)
|
|||||||
//- Generate compiler flags
|
//- Generate compiler flags
|
||||||
StringList shared_compiler_flags = ZI;
|
StringList shared_compiler_flags = ZI;
|
||||||
StringList msvc_compiler_flags = ZI;
|
StringList msvc_compiler_flags = ZI;
|
||||||
|
StringList clang_compiler_flags = ZI;
|
||||||
{
|
{
|
||||||
/* Definitions */
|
//- Shared
|
||||||
PushStringToList(arena, &shared_compiler_flags, Lit("DRtcIsEnabled=1"));
|
PushStringToList(arena, &shared_compiler_flags, Lit("-DRtcIsEnabled=1"));
|
||||||
PushStringToList(arena, &shared_compiler_flags, Lit("DAsanIsEnabled=0"));
|
PushStringToList(arena, &shared_compiler_flags, Lit("-DAsanIsEnabled=0"));
|
||||||
PushStringToList(arena, &shared_compiler_flags, Lit("DCrtlibIsEnabled=1"));
|
PushStringToList(arena, &shared_compiler_flags, Lit("-DCrtlibIsEnabled=1"));
|
||||||
PushStringToList(arena, &shared_compiler_flags, Lit("DDebinfoEnabled=1"));
|
PushStringToList(arena, &shared_compiler_flags, Lit("-DDebinfoEnabled=1"));
|
||||||
PushStringToList(arena, &shared_compiler_flags, Lit("DDeveloperIsEnabled=1"));
|
PushStringToList(arena, &shared_compiler_flags, Lit("-DDeveloperIsEnabled=1"));
|
||||||
PushStringToList(arena, &shared_compiler_flags, Lit("DProfilingIsEnabled=0"));
|
PushStringToList(arena, &shared_compiler_flags, Lit("-DProfilingIsEnabled=0"));
|
||||||
PushStringToList(arena, &shared_compiler_flags, Lit("DUnoptimizedIsEnabled=1"));
|
PushStringToList(arena, &shared_compiler_flags, Lit("-DUnoptimizedIsEnabled=1"));
|
||||||
PushStringToList(arena, &shared_compiler_flags, Lit("DTestsAreEnabled=0"));
|
PushStringToList(arena, &shared_compiler_flags, Lit("-DTestsAreEnabled=0"));
|
||||||
PushStringToList(arena, &shared_compiler_flags, Lit("DIncbinRawDir=\"bla\""));
|
PushStringToList(arena, &shared_compiler_flags, Lit("-DIncbinRawDir=\"bla/\""));
|
||||||
|
|
||||||
/* Msvc flags */
|
//- Msvc
|
||||||
PushStringToList(arena, &msvc_compiler_flags, Lit("Zi"));
|
{
|
||||||
PushStringToList(arena, &msvc_compiler_flags, Lit("DEBUG"));
|
PushStringToList(arena, &msvc_compiler_flags, Lit("-Zi"));
|
||||||
PushStringToList(arena, &msvc_compiler_flags, Lit("Fo:gen.obj"));
|
PushStringToList(arena, &msvc_compiler_flags, Lit("-DEBUG"));
|
||||||
PushStringToList(arena, &msvc_compiler_flags, Lit("Fe:pp.exe"));
|
PushStringToList(arena, &msvc_compiler_flags, Lit("-Fo:gen.obj"));
|
||||||
PushStringToList(arena, &msvc_compiler_flags, Lit("nologo"));
|
PushStringToList(arena, &msvc_compiler_flags, Lit("-Fe:pp.exe"));
|
||||||
|
PushStringToList(arena, &msvc_compiler_flags, Lit("-nologo"));
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Clang
|
||||||
|
{
|
||||||
|
PushStringToList(arena, &clang_compiler_flags, Lit("-std=c99"));
|
||||||
|
PushStringToList(arena, &clang_compiler_flags, Lit("-fno-finite-loops"));
|
||||||
|
PushStringToList(arena, &clang_compiler_flags, Lit("-g -gcodeview"));
|
||||||
|
PushStringToList(arena, &clang_compiler_flags, Lit("-O0"));
|
||||||
|
PushStringToList(arena, &clang_compiler_flags, Lit("-msse4.2"));
|
||||||
|
/* Warnings */
|
||||||
|
PushStringToList(arena, &clang_compiler_flags, Lit("-Wall"));
|
||||||
|
PushStringToList(arena, &clang_compiler_flags, Lit("-Wframe-larger-than=65536"));
|
||||||
|
PushStringToList(arena, &clang_compiler_flags, Lit("-Wmissing-prototypes"));
|
||||||
|
PushStringToList(arena, &clang_compiler_flags, Lit("-Wunused-variable"));
|
||||||
|
PushStringToList(arena, &clang_compiler_flags, Lit("-Wunused-but-set-variable"));
|
||||||
|
PushStringToList(arena, &clang_compiler_flags, Lit("-Wunused-parameter"));
|
||||||
|
PushStringToList(arena, &clang_compiler_flags, Lit("-Wno-initializer-overrides"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//- Generate compiler cmds
|
//- Generate compiler cmds
|
||||||
String msvc_cmd_str = ZI;
|
String msvc_cmd_str = ZI;
|
||||||
|
String clang_cmd_str = ZI;
|
||||||
|
/* Msvc */
|
||||||
{
|
{
|
||||||
String flags_str = StringF(arena,
|
String flags_str = StringF(arena,
|
||||||
"/%F /%F",
|
"%F %F",
|
||||||
FmtString(StringFromList(arena, shared_compiler_flags, Lit(" /"))),
|
FmtString(StringFromList(arena, shared_compiler_flags, Lit(" "))),
|
||||||
FmtString(StringFromList(arena, msvc_compiler_flags, Lit(" /")))
|
FmtString(StringFromList(arena, msvc_compiler_flags, Lit(" ")))
|
||||||
);
|
);
|
||||||
msvc_cmd_str = StringF(arena, "\"cl\" gen.c %F", FmtString(flags_str));
|
msvc_cmd_str = StringF(arena, "\"cl\" gen.c %F", FmtString(flags_str));
|
||||||
}
|
}
|
||||||
|
/* Clang */
|
||||||
|
{
|
||||||
|
String flags_str = StringF(arena,
|
||||||
|
"%F %F",
|
||||||
|
FmtString(StringFromList(arena, shared_compiler_flags, Lit(" "))),
|
||||||
|
FmtString(StringFromList(arena, clang_compiler_flags, Lit(" ")))
|
||||||
|
);
|
||||||
|
clang_cmd_str = StringF(arena, "\"clang\" gen.c %F", FmtString(flags_str));
|
||||||
|
}
|
||||||
|
|
||||||
//- Compile C
|
//- Compile C
|
||||||
if (ret == 0)
|
if (ret == 0)
|
||||||
{
|
{
|
||||||
String cmd_str = msvc_cmd_str;
|
String cmd_str = msvc_cmd_str;
|
||||||
|
// String cmd_str = clang_cmd_str;
|
||||||
OS_CommandResult result = OS_RunCommand(arena, cmd_str);
|
OS_CommandResult result = OS_RunCommand(arena, cmd_str);
|
||||||
ret = result.code;
|
ret = result.code;
|
||||||
String output = result.output;
|
String output = result.output;
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
/* Based on Allen Webster's dwrite rasterizer example -
|
/* Based on Allen Webster's dwrite rasterizer example -
|
||||||
* https://github.com/4th-dimention/examps */
|
* https://github.com/4th-dimention/examps */
|
||||||
|
|
||||||
extern TTF_DW_SharedState TTF_DW_shared_state = ZI;
|
TTF_DW_SharedState TTF_DW_shared_state = ZI;
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ Win32 libs
|
//~ Win32 libs
|
||||||
@ -29,7 +29,7 @@ void TTF_StartupCore(void)
|
|||||||
HRESULT error = DWriteCreateFactory(
|
HRESULT error = DWriteCreateFactory(
|
||||||
DWRITE_FACTORY_TYPE_SHARED,
|
DWRITE_FACTORY_TYPE_SHARED,
|
||||||
&IID_IDWriteFactory5,
|
&IID_IDWriteFactory5,
|
||||||
(IUnknown **)&g->factory
|
(void **)&g->factory
|
||||||
);
|
);
|
||||||
#if CompilerIsClang
|
#if CompilerIsClang
|
||||||
# pragma clang diagnostic pop
|
# pragma clang diagnostic pop
|
||||||
|
|||||||
@ -9,6 +9,7 @@
|
|||||||
#include <combaseapi.h>
|
#include <combaseapi.h>
|
||||||
#include <dcommon.h>
|
#include <dcommon.h>
|
||||||
#include <initguid.h>
|
#include <initguid.h>
|
||||||
|
#include <unknwn.h>
|
||||||
|
|
||||||
//- GUIDs
|
//- GUIDs
|
||||||
DEFINE_GUID(IID_IDWriteFactory5, 0x958db99a, 0xbe2a, 0x4f09, 0xaf, 0x7d, 0x65, 0x18, 0x98, 0x03, 0xd1, 0xd3);
|
DEFINE_GUID(IID_IDWriteFactory5, 0x958db99a, 0xbe2a, 0x4f09, 0xaf, 0x7d, 0x65, 0x18, 0x98, 0x03, 0xd1, 0xd3);
|
||||||
@ -135,6 +136,9 @@ static inline HRESULT IDWriteFontFace_GetDesignGlyphMe
|
|||||||
static inline HRESULT IDWriteFontFace_GetGlyphIndices (IDWriteFontFace* this, const UINT32* codePoints, UINT32 codePointCount, UINT16* glyphIndices) { return ((HRESULT (WINAPI*)(IDWriteFontFace*, const UINT32*, UINT32, UINT16*))this->v->tbl[11])(this, codePoints, codePointCount, glyphIndices); }
|
static inline HRESULT IDWriteFontFace_GetGlyphIndices (IDWriteFontFace* this, const UINT32* codePoints, UINT32 codePointCount, UINT16* glyphIndices) { return ((HRESULT (WINAPI*)(IDWriteFontFace*, const UINT32*, UINT32, UINT16*))this->v->tbl[11])(this, codePoints, codePointCount, glyphIndices); }
|
||||||
static inline UINT32 IDWriteGdiInterop_Release (IDWriteGdiInterop* this) { return ((UINT32 (WINAPI*)(IDWriteGdiInterop*))this->v->tbl[2])(this); }
|
static inline UINT32 IDWriteGdiInterop_Release (IDWriteGdiInterop* this) { return ((UINT32 (WINAPI*)(IDWriteGdiInterop*))this->v->tbl[2])(this); }
|
||||||
|
|
||||||
|
//- Functions
|
||||||
|
EXTERN_C HRESULT DECLSPEC_IMPORT WINAPI DWriteCreateFactory (DWRITE_FACTORY_TYPE factoryType, const GUID* iid, void** factory) WIN_NOEXCEPT;
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ Shared state
|
//~ Shared state
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user