WIP Implementing KrCreateWindowSurface and KrDeleteWindowSurface

This commit is contained in:
2020-07-22 19:38:01 -07:00
parent f1d25b4cdf
commit cf29556d41
5 changed files with 75 additions and 0 deletions

View File

@@ -789,3 +789,33 @@ void KRContext::removeResource(KRResource* resource)
} }
} }
} }
KrResult KRContext::createWindowSurface(const KrCreateWindowSurfaceInfo* createWindowSurfaceInfo)
{
if (createWindowSurfaceInfo->surfaceHandle < 0) {
return KR_ERROR_OUT_OF_BOUNDS;
}
if (m_surfaces.count(createWindowSurfaceInfo->surfaceHandle)) {
return KR_ERROR_DUPLICATE_HANDLE;
}
SurfaceInfo info{};
info.surfaceHandle = createWindowSurfaceInfo->surfaceHandle;
#ifdef WIN32
info.hWnd = static_cast<HWND>(createWindowSurfaceInfo->hWnd);
m_surfaces.insert(std::pair<KrSurfaceHandle, SurfaceInfo>(createWindowSurfaceInfo->surfaceHandle, info));
// TODO - Complete implementation
return KR_ERROR_NOT_IMPLEMENTED;
#else
// Not implemented for this platform
return KR_ERROR_NOT_IMPLEMENTED;
#endif
}
KrResult KRContext::deleteWindowSurface(const KrDeleteWindowSurfaceInfo* deleteWindowSurfaceInfo)
{
if (deleteWindowSurfaceInfo->surfaceHandle < 0) {
return KR_ERROR_OUT_OF_BOUNDS;
}
// TODO - Complete implementation
return KR_ERROR_NOT_IMPLEMENTED;
}

View File

@@ -40,6 +40,9 @@ public:
KRContext(const KrInitializeInfo* initializeInfo); KRContext(const KrInitializeInfo* initializeInfo);
~KRContext(); ~KRContext();
KrResult createWindowSurface(const KrCreateWindowSurfaceInfo* createWindowSurfaceInfo);
KrResult deleteWindowSurface(const KrDeleteWindowSurfaceInfo* deleteWindowSurfaceInfo);
KrResult createBundle(const KrCreateBundleInfo* createBundleInfo); KrResult createBundle(const KrCreateBundleInfo* createBundleInfo);
KrResult moveToBundle(const KrMoveToBundleInfo* moveToBundleInfo); KrResult moveToBundle(const KrMoveToBundleInfo* moveToBundleInfo);
KrResult loadResource(const KrLoadResourceInfo* loadResourceInfo); KrResult loadResource(const KrLoadResourceInfo* loadResourceInfo);
@@ -170,6 +173,13 @@ private:
void destroyDeviceContexts(); void destroyDeviceContexts();
unordered_multimap<std::string, KRResource*> m_resources; unordered_multimap<std::string, KRResource*> m_resources;
typedef struct {
KrSurfaceHandle surfaceHandle;
#ifdef WIN32
HWND hWnd;
#endif
} SurfaceInfo;
unordered_map<KrSurfaceHandle, SurfaceInfo> m_surfaces;
}; };
#endif #endif

View File

@@ -49,6 +49,7 @@ KRResource* KRSceneManager::loadResource(const std::string& name, const std::str
} }
return nullptr; return nullptr;
} }
KRResource* KRSceneManager::getResource(const std::string& name, const std::string& extension) KRResource* KRSceneManager::getResource(const std::string& name, const std::string& extension)
{ {
if (extension.compare("krscene") == 0) { if (extension.compare("krscene") == 0) {

View File

@@ -42,6 +42,22 @@ KrResult KrShutdown()
return KR_SUCCESS; return KR_SUCCESS;
} }
KrResult KrCreateSurface(const KrCreateWindowSurfaceInfo* pCreateSurfaceInfo)
{
if (!sContext) {
return KR_ERROR_NOT_INITIALIZED;
}
return sContext->createWindowSurface(pCreateSurfaceInfo);
}
KrResult KrDeleteSurface(const KrDeleteWindowSurfaceInfo* pDeleteSurfaceInfo)
{
if (!sContext) {
return KR_ERROR_NOT_INITIALIZED;
}
return sContext->deleteWindowSurface(pDeleteSurfaceInfo);
}
KrResult KrLoadResource(const KrLoadResourceInfo* pLoadResourceInfo) KrResult KrLoadResource(const KrLoadResourceInfo* pLoadResourceInfo)
{ {
if (!sContext) { if (!sContext) {

View File

@@ -45,6 +45,7 @@ typedef enum {
KR_ERROR_INCORRECT_TYPE = 5, KR_ERROR_INCORRECT_TYPE = 5,
KR_ERROR_NOT_FOUND = 6, KR_ERROR_NOT_FOUND = 6,
KR_ERROR_AMBIGUOUS_MATCH = 7, KR_ERROR_AMBIGUOUS_MATCH = 7,
KR_ERROR_DUPLICATE_HANDLE = 8,
KR_ERROR_UNEXPECTED = 0x10000000, KR_ERROR_UNEXPECTED = 0x10000000,
KR_RESULT_MAX_ENUM = 0x7FFFFFFF KR_RESULT_MAX_ENUM = 0x7FFFFFFF
} KrResult; } KrResult;
@@ -97,12 +98,26 @@ typedef enum {
typedef int KrResourceMapIndex; typedef int KrResourceMapIndex;
typedef int KrSceneNodeMapIndex; typedef int KrSceneNodeMapIndex;
typedef int KrSurfaceHandle;
typedef struct { typedef struct {
KrStructureType sType; KrStructureType sType;
size_t resourceMapSize; size_t resourceMapSize;
} KrInitializeInfo; } KrInitializeInfo;
typedef struct {
KrStructureType sType;
KrSurfaceHandle surfaceHandle;
#if defined(_WIN32) || defined(_WIN64)
void* hWnd; // Can static cast to HWND
#endif
} KrCreateWindowSurfaceInfo;
typedef struct {
KrStructureType sType;
KrSurfaceHandle surfaceHandle;
} KrDeleteWindowSurfaceInfo;
typedef struct { typedef struct {
KrStructureType sType; KrStructureType sType;
const char* pResourcePath; const char* pResourcePath;
@@ -361,6 +376,9 @@ typedef struct {
KrResult KrInitialize(const KrInitializeInfo* pInitializeInfo); KrResult KrInitialize(const KrInitializeInfo* pInitializeInfo);
KrResult KrShutdown(); KrResult KrShutdown();
KrResult KrCreateWindowSurface(const KrCreateWindowSurfaceInfo* pCreateWindowSurfaceInfo);
KrResult KrDeleteWindowSurface(const KrDeleteWindowSurfaceInfo* pDeleteWindowSurfaceInfo);
KrResult KrLoadResource(const KrLoadResourceInfo* pLoadResourceInfo); KrResult KrLoadResource(const KrLoadResourceInfo* pLoadResourceInfo);
KrResult KrUnloadResource(const KrUnloadResourceInfo* pUnloadResourceInfo); KrResult KrUnloadResource(const KrUnloadResourceInfo* pUnloadResourceInfo);
KrResult KrSaveResource(const KrSaveResourceInfo* pSaveResourceInfo); KrResult KrSaveResource(const KrSaveResourceInfo* pSaveResourceInfo);