kinect/codes/Azure-Kinect-Sensor-SDK/examples/viewer/opengl/texture.h

88 lines
2.1 KiB
C++

// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#ifndef TEXTURE_H
#define TEXTURE_H
#include <utility>
#include "k4aimgui_all.h"
#include "k4apixel.h"
namespace viewer
{
// A simple wrapper for OpenGL textures.
// Textures are not resizeable, but can have their contents updated any number of times.
//
class Texture
{
public:
// Updates the image stored in the texture with data.
// The data is expected to be formatted as Width * Height pixels formatted
// as BGRA pixels represented by uint8_t's.
//
// The data you pass to it must be of the same size as the dimensions used
// to construct the texture.
//
void Update(const BgraPixel *data);
// Get the OpenGL texture name.
// OpenGL texture names are just uints that OpenGL uses as opaque pointers.
//
inline GLuint Name() const
{
return m_name;
}
// Gets the width of the texture.
//
inline int Width() const
{
return m_width;
}
// Gets the height of the texture.
//
inline int Height() const
{
return m_height;
}
~Texture();
// In the interest of simplicity, we don't refcount textures, so
// copying doesn't work.
//
Texture(const Texture &) = delete;
Texture &operator=(const Texture &) = delete;
// Textures are moveable.
//
Texture(Texture &&other);
Texture &operator=(Texture &&other);
private:
// Creating a texture before the viewer window has been initialized will fail,
// so we make the viewer responsible for creating texture instances.
//
// Creates a texture with the specified dimensions, including allocating space
// on the GPU. Use Update() to update the image stored in the texture.
//
friend class ViewerWindow;
Texture(int width, int height);
// Deletes the wrapped texture.
//
void DeleteTexture();
static constexpr GLuint InvalidTextureName = 0;
GLuint m_name = InvalidTextureName;
int m_width = 0;
int m_height = 0;
};
} // namespace viewer
#endif