MF_API void MFRenderLayer_SetLayerRenderTarget(MFRenderLayer *pLayer, MFRenderTarget *pRenderTarget) { if(pLayer->pRenderTarget) MFRenderTarget_Release(pLayer->pRenderTarget); MFResource_AddRef(pRenderTarget); pLayer->pRenderTarget = pRenderTarget; }
MF_API void MFRenderer_Destroy(MFRenderer *pRenderer) { for(int a=0; a<pRenderer->numLayers; ++a) { if(pRenderer->pLayers[a].pRenderTarget) MFRenderTarget_Release(pRenderer->pLayers[a].pRenderTarget); } MFHeap_Free(pRenderer); }
void MFRenderer_DestroyDisplay(MFDisplay *pDisplay) { if(gpDeviceRenderTarget) MFRenderTarget_Release(gpDeviceRenderTarget); #if MF_DISPLAY == MF_DRIVER_X11 if(fbConfigs != NULL) { XFree(fbConfigs); fbConfigs = NULL; } if(glXContext != NULL) { glXDestroyContext(xdisplay, glXContext); glXContext = NULL; } if(glXWindow != 0) { glXDestroyWindow(xdisplay, glXWindow); glXWindow = 0; } #elif MF_DISPLAY == MF_DRIVER_WIN32 HWND hWnd = (HWND)MFWindow_GetSystemWindowHandle(pDisplay->settings.pWindow); if(hRC) { if(wglMakeCurrent(NULL, NULL)) { wglDeleteContext(hRC); } hRC = NULL; } if(hDC) { ReleaseDC(hWnd, hDC); hDC = NULL; } #elif MF_DISPLAY == MF_DRIVER_SDL2 SDL_GL_DeleteContext(glContext); #endif }
void Game_Init() { // create the renderer with a single layer that clears before rendering MFRenderLayerDescription layers[] = { { "Prism" }, { "Box" } }; pRenderer = MFRenderer_Create(layers, 2, NULL, NULL); MFRenderer_SetCurrent(pRenderer); pDefaultStates = MFStateBlock_CreateDefault(); MFRenderer_SetGlobalStateBlock(pRenderer, pDefaultStates); // configure prism layer MFRenderLayer *pLayer = MFRenderer_GetLayer(pRenderer, 0); MFRenderLayer_SetClear(pLayer, MFRCF_All, MakeVector(0.f, 0.f, 0.0f, 1.f)); // create a render target for the layer MFRenderTarget *pRenderTarget = MFRenderTarget_CreateSimple("Prism", 256, 256); pPrismRenderTarget = MFMaterial_Create("Prism_RenderTarget0"); MFRenderLayer_SetLayerRenderTarget(pLayer, pRenderTarget); MFRenderTarget_Release(pRenderTarget); // the render layer now has a reference, it will be destroyed with the renderer // configure box layer pLayer = MFRenderer_GetLayer(pRenderer, 1); MFRenderLayer_SetClear(pLayer, MFRCF_All, MakeVector(0.f, 0.f, 0.2f, 1.f)); // configure the box layer as the default render layer MFRenderLayerSet layerSet; MFZeroMemory(&layerSet, sizeof(layerSet)); layerSet.pSolidLayer = pLayer; MFRenderer_SetRenderLayerSet(pRenderer, &layerSet); // build a vertex buffer BuildVertexBuffers(); // create some state blocks pPrismStateBlock = MFStateBlock_Create(128); pBoxStateBlock = MFStateBlock_Create(128); }