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(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
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user