return mDepthStencil;\r
}\r
\r
+void Surface::setSwapBehavior(EGLenum swapBehavior)\r
+{\r
+ mSwapBehavior = swapBehavior;\r
+}\r
+\r
void Surface::setSwapInterval(EGLint interval)\r
{\r
if(mSwapInterval == interval)\r
return mConfig->mConfigID;\r
}\r
\r
+EGLenum Surface::getSurfaceType() const\r
+{\r
+ return mConfig->mSurfaceType;\r
+}\r
+\r
+sw::Format Surface::getInternalFormat() const\r
+{\r
+ return mConfig->mRenderTargetFormat;\r
+}\r
+\r
EGLint Surface::getWidth() const\r
{\r
return mWidth;\r
return mTexture;\r
}\r
\r
-sw::Format Surface::getInternalFormat() const\r
-{\r
- return mConfig->mRenderTargetFormat;\r
-}\r
-\r
bool Surface::checkForResize()\r
{\r
#if defined(_WIN32)\r
virtual egl::Image *getRenderTarget();\r
virtual egl::Image *getDepthStencil();\r
\r
+ void setSwapBehavior(EGLenum swapBehavior);\r
void setSwapInterval(EGLint interval);\r
\r
virtual EGLint getConfigID() const;\r
+ virtual EGLenum getSurfaceType() const;\r
+ virtual sw::Format getInternalFormat() const;\r
+\r
virtual EGLint getWidth() const;\r
virtual EGLint getHeight() const;\r
virtual EGLint getPixelAspectRatio() const;\r
virtual EGLenum getSwapBehavior() const;\r
virtual EGLenum getTextureFormat() const;\r
virtual EGLenum getTextureTarget() const;\r
- virtual sw::Format getInternalFormat() const;\r
\r
virtual void setBoundTexture(egl::Texture *texture);\r
virtual egl::Texture *getBoundTexture() const;\r
return EGL_FALSE;\r
}\r
\r
- UNIMPLEMENTED(); // FIXME\r
+ switch(attribute)\r
+ {\r
+ case EGL_SWAP_BEHAVIOR:\r
+ if(value == EGL_BUFFER_PRESERVED)\r
+ {\r
+ if(!(eglSurface->getSurfaceType() && EGL_SWAP_BEHAVIOR_PRESERVED_BIT))\r
+ {\r
+ return error(EGL_BAD_MATCH, EGL_FALSE);\r
+ }\r
+ }\r
+ else if(value != EGL_BUFFER_DESTROYED)\r
+ {\r
+ return error(EGL_BAD_PARAMETER, EGL_FALSE);\r
+ }\r
+ eglSurface->setSwapBehavior(value);\r
+ break;\r
+ default:\r
+ UNIMPLEMENTED(); // FIXME\r
+ }\r
\r
return success(EGL_TRUE);\r
}\r