mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-06 00:55:37 +00:00
74 lines
3.0 KiB
C++
74 lines
3.0 KiB
C++
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#ifndef GLSHAREDHANDLEHELPERS_H_
|
|
#define GLSHAREDHANDLEHELPERS_H_
|
|
|
|
#include "GLContextTypes.h"
|
|
#include "mozilla/gfx/Types.h"
|
|
|
|
namespace mozilla {
|
|
namespace gl {
|
|
|
|
/**
|
|
* Create a new shared GLContext content handle, using the passed buffer as a source.
|
|
* Must be released by ReleaseSharedHandle.
|
|
*/
|
|
SharedTextureHandle CreateSharedHandle(GLContext* gl,
|
|
SharedTextureShareType shareType,
|
|
void* buffer,
|
|
SharedTextureBufferType bufferType);
|
|
|
|
/**
|
|
* - It is better to call ReleaseSharedHandle before original GLContext destroyed,
|
|
* otherwise warning will be thrown on attempt to destroy Texture associated with SharedHandle, depends on backend implementation.
|
|
* - It does not require to be called on context where it was created,
|
|
* because SharedHandle suppose to keep Context reference internally,
|
|
* or don't require specific context at all, for example IPC SharedHandle.
|
|
* - Not recommended to call this between AttachSharedHandle and Draw Target call.
|
|
* if it is really required for some special backend, then DetachSharedHandle API must be added with related implementation.
|
|
* - It is recommended to stop any possible access to SharedHandle (Attachments, pending GL calls) before calling Release,
|
|
* otherwise some artifacts might appear or even crash if API backend implementation does not expect that.
|
|
* SharedHandle (currently EGLImage) does not require GLContext because it is EGL call, and can be destroyed
|
|
* at any time, unless EGLImage have siblings (which are not expected with current API).
|
|
*/
|
|
void ReleaseSharedHandle(GLContext* gl,
|
|
SharedTextureShareType shareType,
|
|
SharedTextureHandle sharedHandle);
|
|
|
|
|
|
typedef struct {
|
|
GLenum mTarget;
|
|
gfx::SurfaceFormat mTextureFormat;
|
|
gfx::Matrix4x4 mTextureTransform;
|
|
} SharedHandleDetails;
|
|
|
|
/**
|
|
* Returns information necessary for rendering a shared handle.
|
|
* These values change depending on what sharing mechanism is in use
|
|
*/
|
|
bool GetSharedHandleDetails(GLContext* gl,
|
|
SharedTextureShareType shareType,
|
|
SharedTextureHandle sharedHandle,
|
|
SharedHandleDetails& details);
|
|
/**
|
|
* Attach Shared GL Handle to GL_TEXTURE_2D target
|
|
* GLContext must be current before this call
|
|
*/
|
|
bool AttachSharedHandle(GLContext* gl,
|
|
SharedTextureShareType shareType,
|
|
SharedTextureHandle sharedHandle);
|
|
|
|
/**
|
|
* Detach Shared GL Handle from GL_TEXTURE_2D target
|
|
*/
|
|
void DetachSharedHandle(GLContext* gl,
|
|
SharedTextureShareType shareType,
|
|
SharedTextureHandle sharedHandle);
|
|
|
|
}
|
|
}
|
|
|
|
#endif
|