blob: 6cadef9f8c073d4296686ee47c1e9800333f2bd3 [file] [log] [blame]
#ifndef egl_Image_hpp
#define egl_Image_hpp
#include "Renderer/Surface.hpp"
namespace egl
{
// Types common between gl.h and gl2.h
// We can't include either header in EGL
typedef unsigned int GLenum;
typedef int GLint;
typedef int GLsizei;
class Image : public sw::Surface
{
public:
Image(sw::Resource *resource, GLsizei width, GLsizei height, GLenum format, GLenum type, sw::Format internalFormat)
: width(width), height(height), format(format), type(type), internalFormat(internalFormat), multiSampleDepth(1)
, sw::Surface(resource, width, height, 1, internalFormat, true, true)
{
shared = false;
}
Image(sw::Resource *resource, int width, int height, int depth, sw::Format internalFormat, bool lockable, bool renderTarget)
: width(width), height(height), format(0 /*GL_NONE*/), type(0 /*GL_NONE*/), internalFormat(internalFormat), multiSampleDepth(depth)
, sw::Surface(resource, width, height, depth, internalFormat, lockable, renderTarget)
{
shared = false;
}
GLsizei getWidth()
{
return width;
}
GLsizei getHeight()
{
return height;
}
GLenum getFormat()
{
return format;
}
GLenum getType()
{
return type;
}
sw::Format getInternalFormat()
{
return internalFormat;
}
int getMultiSampleDepth()
{
return multiSampleDepth;
}
bool isShared() const
{
return shared;
}
void markShared()
{
shared = true;
}
void *lock(unsigned int left, unsigned int top, sw::Lock lock)
{
return lockExternal(left, top, 0, lock, sw::PUBLIC);
}
unsigned int getPitch() const
{
return getExternalPitchB();
}
void unlock()
{
unlockExternal();
}
virtual void addRef() = 0;
virtual void release() = 0;
virtual void unbind() = 0; // Break parent ownership and release
virtual void loadImageData(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint unpackAlignment, const void *input) = 0;
virtual void loadCompressedData(GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLsizei imageSize, const void *pixels) = 0;
protected:
const GLsizei width;
const GLsizei height;
const GLenum format;
const GLenum type;
const sw::Format internalFormat;
const int multiSampleDepth;
private:
bool shared; // Used as an EGLImage
};
}
#endif // egl_Image_hpp