SDLVideo::~SDLVideo(void) { cChain *rover, *next; for(rover = chainHead->next; rover != chainHead; rover = next) { next = rover->next; ReleaseSurface(rover->canvas); delete rover; } delete chainHead; }
GLVideo::~GLVideo(void) { cChain *rover, *next; for(rover = chainHead->next; rover != chainHead; rover = next) { next = rover->next; ReleaseSurface(rover->canvas); delete rover; } delete chainHead; if(vidModeList) { delete [] vidModeList; vidModeList = NULL; } }
bool CWinEGLPlatformGeneric::DestroyWindow() { EGLBoolean eglStatus; ReleaseSurface(); if (m_surface == EGL_NO_SURFACE) return true; eglStatus = eglDestroySurface(m_display, m_surface); if (!eglStatus) { CLog::Log(LOGERROR, "Error destroying EGL surface"); return false; } m_surface = EGL_NO_SURFACE; m_width = 0; m_height = 0; return true; }
bool CWinBindingEGL::CreateWindow(EGLNativeDisplayType nativeDisplay, EGLNativeWindowType nativeWindow) { EGLBoolean eglStatus; EGLint configCount; EGLConfig* configList = NULL; m_nativeDisplay = nativeDisplay; m_nativeWindow = nativeWindow; m_display = eglGetDisplay(nativeDisplay); if (m_display == EGL_NO_DISPLAY) { CLog::Log(LOGERROR, "EGL failed to obtain display"); return false; } if (!eglInitialize(m_display, 0, 0)) { CLog::Log(LOGERROR, "EGL failed to initialize"); return false; } EGLint configAttrs[] = { EGL_RED_SIZE, 8, EGL_GREEN_SIZE, 8, EGL_BLUE_SIZE, 8, EGL_DEPTH_SIZE, 16, EGL_STENCIL_SIZE, 0, EGL_SAMPLE_BUFFERS, 0, EGL_SAMPLES, 0, EGL_SURFACE_TYPE, EGL_WINDOW_BIT, EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, EGL_NONE }; // Find out how many configurations suit our needs eglStatus = eglChooseConfig(m_display, configAttrs, NULL, 0, &configCount); if (!eglStatus || !configCount) { CLog::Log(LOGERROR, "EGL failed to return any matching configurations: %d", eglStatus); return false; } // Allocate room for the list of matching configurations configList = (EGLConfig*)malloc(configCount * sizeof(EGLConfig)); if (!configList) { CLog::Log(LOGERROR, "kdMalloc failure obtaining configuration list"); return false; } // Obtain the configuration list from EGL eglStatus = eglChooseConfig(m_display, configAttrs, configList, configCount, &configCount); if (!eglStatus || !configCount) { CLog::Log(LOGERROR, "EGL failed to populate configuration list: %d", eglStatus); return false; } // Select an EGL configuration that matches the native window m_config = configList[0]; if (m_surface != EGL_NO_SURFACE) { ReleaseSurface(); } m_surface = eglCreateWindowSurface(m_display, m_config, m_nativeWindow, NULL); if (!m_surface) { CLog::Log(LOGERROR, "EGL couldn't create window surface"); return false; } eglStatus = eglBindAPI(EGL_OPENGL_ES_API); if (!eglStatus) { CLog::Log(LOGERROR, "EGL failed to bind API: %d", eglStatus); return false; } EGLint contextAttrs[] = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE }; // Create an EGL context if (m_context == EGL_NO_CONTEXT) { m_context = eglCreateContext(m_display, m_config, NULL, contextAttrs); if (!m_context) { CLog::Log(LOGERROR, "EGL couldn't create context"); return false; } } // Make the context and surface current to this thread for rendering eglStatus = eglMakeCurrent(m_display, m_surface, m_surface, m_context); if (!eglStatus) { CLog::Log(LOGERROR, "EGL couldn't make context/surface current: %d", eglStatus); return false; } free(configList); eglSwapInterval(m_display, 0); // For EGL backend, it needs to clear all the back buffers of the window // surface before drawing anything, otherwise the image will be blinking // heavily. The default eglWindowSurface has 3 gdl surfaces as the back // buffer, that's why glClear should be called 3 times. glClearColor (0.0f, 0.0f, 0.0f, 0.0f); glClear (GL_COLOR_BUFFER_BIT); eglSwapBuffers(m_display, m_surface); glClear (GL_COLOR_BUFFER_BIT); eglSwapBuffers(m_display, m_surface); glClear (GL_COLOR_BUFFER_BIT); eglSwapBuffers(m_display, m_surface); m_eglext = " "; m_eglext += eglQueryString(m_display, EGL_EXTENSIONS); m_eglext += " "; CLog::Log(LOGDEBUG, "EGL extensions:%s", m_eglext.c_str()); // setup for vsync disabled eglSwapInterval(m_display, 0); CLog::Log(LOGINFO, "EGL window and context creation complete"); return true; }
bool CWinEGLPlatformGeneric::InitializeDisplay() { if (m_display != EGL_NO_DISPLAY && m_config != NULL) return true; EGLBoolean eglStatus; EGLint configCount; EGLConfig* configList = NULL; m_display = eglGetDisplay(m_nativeDisplay); if (m_display == EGL_NO_DISPLAY) { CLog::Log(LOGERROR, "EGL failed to obtain display"); return false; } if (!eglInitialize(m_display, 0, 0)) { CLog::Log(LOGERROR, "EGL failed to initialize"); return false; } EGLint configAttrs[] = { EGL_RED_SIZE, 8, EGL_GREEN_SIZE, 8, EGL_BLUE_SIZE, 8, EGL_ALPHA_SIZE, 8, EGL_DEPTH_SIZE, 16, EGL_STENCIL_SIZE, 0, EGL_SAMPLE_BUFFERS, 0, EGL_SAMPLES, 0, EGL_SURFACE_TYPE, EGL_WINDOW_BIT, EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, EGL_NONE }; // Find out how many configurations suit our needs eglStatus = eglChooseConfig(m_display, configAttrs, NULL, 0, &configCount); if (!eglStatus || !configCount) { CLog::Log(LOGERROR, "EGL failed to return any matching configurations: %d", eglStatus); return false; } // Allocate room for the list of matching configurations configList = (EGLConfig*)malloc(configCount * sizeof(EGLConfig)); if (!configList) { CLog::Log(LOGERROR, "kdMalloc failure obtaining configuration list"); return false; } // Obtain the configuration list from EGL eglStatus = eglChooseConfig(m_display, configAttrs, configList, configCount, &configCount); if (!eglStatus || !configCount) { CLog::Log(LOGERROR, "EGL failed to populate configuration list: %d", eglStatus); return false; } // Select an EGL configuration that matches the native window m_config = configList[0]; if (m_surface != EGL_NO_SURFACE) ReleaseSurface(); free(configList); return true; }
// 解放 Deferred::~Deferred() { // G-Buffer ReleaseSurface(m_mDiffuse); ReleaseSurface(m_mNormal); ReleaseSurface(m_mRoughness); ReleaseSurface(m_mDepth); // SecondPassSurface ReleaseSurface(m_sLight); ReleaseSurface(m_sSpecular); ReleaseSurface(m_sFog); ReleaseSurface(m_sShadow); // FinalPassSurface ReleaseSurface(m_sScreen); ReleaseSurface(m_sBloomScreen); ReleaseSurface(m_sBloom); ReleaseSurface(m_sBloomSeed); ReleaseSurface(m_sCrossGlareX); ReleaseSurface(m_sCrossGlareY); // ForwardSurface ReleaseSurface(m_sForward); // GpuPointLight ReleaseSurface(m_sGpuPointLight); SAFE_DELETE(m_PLS); //BackBufferSurface backbuffer->Release(); backbuffer = nullptr; m_backbufferZ->Release(); m_backbufferZ = nullptr; m_savebackbuffer->Release(); m_savebackbuffer = nullptr; // キューブ //if (m_cubeTex != nullptr) //{ // m_cubeTex->Release(); //} if (m_bShadowFlag) { ReleaseSurface(m_sShadowMap); } if (m_bCascadeFlag) { ReleaseSurface(m_sShadowMapL); ReleaseSurface(m_sSoftShadowMap); } }