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

View File

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

View File

@@ -42,6 +42,22 @@ KrResult KrShutdown()
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)
{
if (!sContext) {

View File

@@ -45,6 +45,7 @@ typedef enum {
KR_ERROR_INCORRECT_TYPE = 5,
KR_ERROR_NOT_FOUND = 6,
KR_ERROR_AMBIGUOUS_MATCH = 7,
KR_ERROR_DUPLICATE_HANDLE = 8,
KR_ERROR_UNEXPECTED = 0x10000000,
KR_RESULT_MAX_ENUM = 0x7FFFFFFF
} KrResult;
@@ -97,12 +98,26 @@ typedef enum {
typedef int KrResourceMapIndex;
typedef int KrSceneNodeMapIndex;
typedef int KrSurfaceHandle;
typedef struct {
KrStructureType sType;
size_t resourceMapSize;
} 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 {
KrStructureType sType;
const char* pResourcePath;
@@ -361,6 +376,9 @@ typedef struct {
KrResult KrInitialize(const KrInitializeInfo* pInitializeInfo);
KrResult KrShutdown();
KrResult KrCreateWindowSurface(const KrCreateWindowSurfaceInfo* pCreateWindowSurfaceInfo);
KrResult KrDeleteWindowSurface(const KrDeleteWindowSurfaceInfo* pDeleteWindowSurfaceInfo);
KrResult KrLoadResource(const KrLoadResourceInfo* pLoadResourceInfo);
KrResult KrUnloadResource(const KrUnloadResourceInfo* pUnloadResourceInfo);
KrResult KrSaveResource(const KrSaveResourceInfo* pSaveResourceInfo);