From 39e23436eef8ab367a72a97e59054f031d95ef7a Mon Sep 17 00:00:00 2001 From: Kearwood Gilbert Date: Thu, 28 Dec 2023 15:09:39 -0800 Subject: [PATCH] WIP MacOS support for smoke test --- kraken/public/kraken.h | 2 ++ tests/smoke/hello_cube/CMakeLists.txt | 4 +-- tests/smoke/hello_cube/hello_cube.cpp | 15 +++++++-- tests/smoke/hello_cube/hello_cube.h | 2 +- tests/smoke/hello_cube/main_macos.mm | 11 +++++++ tests/smoke/hello_cube/main_win.cpp | 46 ++------------------------- 6 files changed, 32 insertions(+), 48 deletions(-) diff --git a/kraken/public/kraken.h b/kraken/public/kraken.h index ed9f7b8..b22748b 100644 --- a/kraken/public/kraken.h +++ b/kraken/public/kraken.h @@ -134,6 +134,8 @@ typedef struct KrSurfaceMapIndex surfaceHandle; #if defined(_WIN32) || defined(_WIN64) void* hWnd; // Can static cast to HWND +#elif defined(__APPLE__) + void* view; // Can static cast to NSView #endif } KrCreateWindowSurfaceInfo; diff --git a/tests/smoke/hello_cube/CMakeLists.txt b/tests/smoke/hello_cube/CMakeLists.txt index b2e5c97..81e1b9b 100644 --- a/tests/smoke/hello_cube/CMakeLists.txt +++ b/tests/smoke/hello_cube/CMakeLists.txt @@ -20,12 +20,12 @@ add_custom_target(kraken_cube_assets ALL ) if (WIN32) - add_executable(kraken_cube WIN32 main_win.cpp hello_cube.cpp) + add_executable(kraken_cube WIN32 main_win.cpp harness.cpp hello_cube.cpp) add_compile_definitions(UNICODE) list (APPEND EXTRA_LIBS shcore) else(WIN32) - add_executable(kraken_cube main_macos.mm hello_cube.cpp) + add_executable(kraken_cube main_macos.mm harness.cpp hello_cube.cpp) set(CMAKE_CXX_COMPILER "clang++") endif(WIN32) diff --git a/tests/smoke/hello_cube/hello_cube.cpp b/tests/smoke/hello_cube/hello_cube.cpp index a07a740..f1fb022 100644 --- a/tests/smoke/hello_cube/hello_cube.cpp +++ b/tests/smoke/hello_cube/hello_cube.cpp @@ -32,7 +32,7 @@ #include "kraken.h" #include -void smoke_load() +bool smoke_load() { enum { @@ -45,6 +45,17 @@ void smoke_load() kCameraNodeHandle = 10 }; + KrLoadResourceInfo load_resource_info = {}; + load_resource_info.sType = KR_STRUCTURE_TYPE_LOAD_RESOURCE; + load_resource_info.resourceHandle = 1; + load_resource_info.pResourcePath = "kraken_cube.krbundle"; + KrResult res = KrLoadResource(&load_resource_info); + if (res != KR_SUCCESS) { + //printf("Failed to load resource: %s\n", arg); + KrShutdown(); + return 1; + } + /* KrMapResourceInfo map_skybox_resource = { KR_STRUCTURE_TYPE_MAP_RESOURCE }; map_skybox_resource.pResourceName = "skybox"; @@ -57,7 +68,7 @@ void smoke_load() KrCreateSceneInfo create_scene_info = { KR_STRUCTURE_TYPE_CREATE_SCENE }; create_scene_info.resourceHandle = kSceneResourceHandle; create_scene_info.pSceneName = "my_scene"; - KrResult res = KrCreateScene(&create_scene_info); + res = KrCreateScene(&create_scene_info); assert(res == KR_SUCCESS); // Add a camera to the scene diff --git a/tests/smoke/hello_cube/hello_cube.h b/tests/smoke/hello_cube/hello_cube.h index fa6a43a..95f83f8 100644 --- a/tests/smoke/hello_cube/hello_cube.h +++ b/tests/smoke/hello_cube/hello_cube.h @@ -31,4 +31,4 @@ #pragma once -void smoke_load(); +bool smoke_load(); diff --git a/tests/smoke/hello_cube/main_macos.mm b/tests/smoke/hello_cube/main_macos.mm index 4474ff7..511dac4 100644 --- a/tests/smoke/hello_cube/main_macos.mm +++ b/tests/smoke/hello_cube/main_macos.mm @@ -31,6 +31,7 @@ #import "Cocoa/Cocoa.h" #include "kraken.h" +#include "harness.h" using namespace kraken; @@ -56,6 +57,16 @@ int main(int argc, const char * argv[]) // Window controller: NSWindowController * windowController = [[NSWindowController alloc] initWithWindow:window]; [windowController autorelease]; + + NSView *view = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 640, 480)]; + [view setWantsLayer:YES]; + view.layer.backgroundColor = [[NSColor purpleColor] CGColor]; + + if (!test_init(static_cast(view))) { + return 1; + } + + [window.contentView addSubview:view]; [window orderFrontRegardless]; [NSApp run]; diff --git a/tests/smoke/hello_cube/main_win.cpp b/tests/smoke/hello_cube/main_win.cpp index 611c57f..dcb849c 100644 --- a/tests/smoke/hello_cube/main_win.cpp +++ b/tests/smoke/hello_cube/main_win.cpp @@ -33,6 +33,7 @@ #include #include "kraken.h" #include "hello_cube.h" +#include "harness.h" using namespace kraken; @@ -60,59 +61,18 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine return 2; } - KrInitializeInfo init_info = {}; - init_info.sType = KR_STRUCTURE_TYPE_INITIALIZE; - init_info.resourceMapSize = 1024; - init_info.nodeMapSize = 1024; - KrResult res = KrInitialize(&init_info); - if (res != KR_SUCCESS) { - // printf("Failed to initialize Kraken!\n"); + if (!test_init(static_cast(hWnd))) { return 1; } - KrLoadResourceInfo load_resource_info = {}; - load_resource_info.sType = KR_STRUCTURE_TYPE_LOAD_RESOURCE; - load_resource_info.resourceHandle = 1; - load_resource_info.pResourcePath = "kraken_cube.krbundle"; - res = KrLoadResource(&load_resource_info); - if (res != KR_SUCCESS) { - //printf("Failed to load resource: %s\n", arg); - KrShutdown(); - return 1; - } - - KrCreateWindowSurfaceInfo create_surface_info = {}; - create_surface_info.sType = KR_STRUCTURE_TYPE_CREATE_WINDOW_SURFACE; - create_surface_info.surfaceHandle = 1; - create_surface_info.hWnd = static_cast(hWnd); - res = KrCreateWindowSurface(&create_surface_info); - if (res != KR_SUCCESS) { - //printf("Failed to create window surface.\n"); - KrShutdown(); - return 1; - } - - smoke_load(); - while (GetMessage(&msg, NULL, 0, 0) > 0) { DispatchMessage(&msg); } - - // KrShutdown will delete the window surfaces for us; however, we - // include this here for code coverage in tests. - KrDeleteWindowSurfaceInfo delete_surface_info = {}; - delete_surface_info.sType = KR_STRUCTURE_TYPE_DELETE_WINDOW_SURFACE; - delete_surface_info.surfaceHandle = 1; - res = KrDeleteWindowSurface(&delete_surface_info); - if (res != KR_SUCCESS) { - //printf("Failed to delete window surface.\n"); - KrShutdown(); + if (!test_shutdown()) { return 1; } - KrShutdown(); - return 0; }