WIP Implementing KrCreateWindowSurface and KrDeleteWindowSurface
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user