WIP MacOS support for smoke test

This commit is contained in:
2023-12-28 15:09:39 -08:00
parent 402c4330bb
commit 39e23436ee
6 changed files with 32 additions and 48 deletions

View File

@@ -134,6 +134,8 @@ typedef struct
KrSurfaceMapIndex surfaceHandle; KrSurfaceMapIndex surfaceHandle;
#if defined(_WIN32) || defined(_WIN64) #if defined(_WIN32) || defined(_WIN64)
void* hWnd; // Can static cast to HWND void* hWnd; // Can static cast to HWND
#elif defined(__APPLE__)
void* view; // Can static cast to NSView
#endif #endif
} KrCreateWindowSurfaceInfo; } KrCreateWindowSurfaceInfo;

View File

@@ -20,12 +20,12 @@ add_custom_target(kraken_cube_assets ALL
) )
if (WIN32) 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) add_compile_definitions(UNICODE)
list (APPEND EXTRA_LIBS shcore) list (APPEND EXTRA_LIBS shcore)
else(WIN32) 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++") set(CMAKE_CXX_COMPILER "clang++")
endif(WIN32) endif(WIN32)

View File

@@ -32,7 +32,7 @@
#include "kraken.h" #include "kraken.h"
#include <assert.h> #include <assert.h>
void smoke_load() bool smoke_load()
{ {
enum enum
{ {
@@ -45,6 +45,17 @@ void smoke_load()
kCameraNodeHandle = 10 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 }; KrMapResourceInfo map_skybox_resource = { KR_STRUCTURE_TYPE_MAP_RESOURCE };
map_skybox_resource.pResourceName = "skybox"; map_skybox_resource.pResourceName = "skybox";
@@ -57,7 +68,7 @@ void smoke_load()
KrCreateSceneInfo create_scene_info = { KR_STRUCTURE_TYPE_CREATE_SCENE }; KrCreateSceneInfo create_scene_info = { KR_STRUCTURE_TYPE_CREATE_SCENE };
create_scene_info.resourceHandle = kSceneResourceHandle; create_scene_info.resourceHandle = kSceneResourceHandle;
create_scene_info.pSceneName = "my_scene"; create_scene_info.pSceneName = "my_scene";
KrResult res = KrCreateScene(&create_scene_info); res = KrCreateScene(&create_scene_info);
assert(res == KR_SUCCESS); assert(res == KR_SUCCESS);
// Add a camera to the scene // Add a camera to the scene

View File

@@ -31,4 +31,4 @@
#pragma once #pragma once
void smoke_load(); bool smoke_load();

View File

@@ -31,6 +31,7 @@
#import "Cocoa/Cocoa.h" #import "Cocoa/Cocoa.h"
#include "kraken.h" #include "kraken.h"
#include "harness.h"
using namespace kraken; using namespace kraken;
@@ -56,6 +57,16 @@ int main(int argc, const char * argv[])
// Window controller: // Window controller:
NSWindowController * windowController = [[NSWindowController alloc] initWithWindow:window]; NSWindowController * windowController = [[NSWindowController alloc] initWithWindow:window];
[windowController autorelease]; [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<void*>(view))) {
return 1;
}
[window.contentView addSubview:view];
[window orderFrontRegardless]; [window orderFrontRegardless];
[NSApp run]; [NSApp run];

View File

@@ -33,6 +33,7 @@
#include <shellscalingapi.h> #include <shellscalingapi.h>
#include "kraken.h" #include "kraken.h"
#include "hello_cube.h" #include "hello_cube.h"
#include "harness.h"
using namespace kraken; using namespace kraken;
@@ -60,59 +61,18 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
return 2; return 2;
} }
KrInitializeInfo init_info = {}; if (!test_init(static_cast<void*>(hWnd))) {
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");
return 1; 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<void*>(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) { while (GetMessage(&msg, NULL, 0, 0) > 0) {
DispatchMessage(&msg); DispatchMessage(&msg);
} }
if (!test_shutdown()) {
// 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();
return 1; return 1;
} }
KrShutdown();
return 0; return 0;
} }