Files
FlaxEngine/Source/Engine/GraphicsDevice/OpenGL/GPUTextureViewOGL.h
2020-12-07 23:40:54 +01:00

94 lines
1.6 KiB
C++

// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved.
#pragma once
#include "Engine/Graphics/GPUTextureView.h"
#include "IncludeOpenGLHeaders.h"
#if GRAPHICS_API_OPENGL
#include "IShaderResourceOGL.h"
class TextureOGL;
/// <summary>
/// Render target handle for OpenGL
/// </summary>
class GPUTextureViewOGL : public GPUTextureView, public IShaderResourceOGL
{
public:
/// <summary>
/// The OpenGL texture view target.
/// </summary>
GLuint ViewTarget;
/// <summary>
/// The OpenGL texture view target.
/// </summary>
GLuint ViewID;
public:
GPUTextureViewOGL()
{
ViewTarget = 0;
ViewID = 0;
Texture = nullptr;
}
~GPUTextureViewOGL();
public:
TextureOGL* Texture;
bool IsFullView;
int32 MipLevels;
int32 FirstArraySlice;
int32 NumArraySlices;
int32 MostDetailedMip;
public:
bool IsBackbuffer() const
{
// Render output backbuffers are used as a special case for rendering in OpenGL
return IsFullView && Texture == nullptr;
}
TextureOGL* GetTexture() const
{
return Texture;
}
void InitAsBackbuffer(GPUResource* parent, PixelFormat format);
void InitAsFull(TextureOGL* parent);
void InitAsFull(TextureOGL* parent, PixelFormat format);
enum class ViewType
{
Texture1D,
Texture1D_Array,
Texture2D,
Texture2D_Array,
Texture3D,
TextureCube,
TextureCube_Array,
};
void InitAsView(TextureOGL* parent, PixelFormat format, ViewType type, int32 mipLevels, int32 firstArraySlice, int32 numArraySlices, int32 mostDetailedMipIndex = 0);
void AttachToFramebuffer(GLenum attachmentPoint);
void Release();
public:
// [IShaderResourceOGL]
void Bind(int32 slotIndex) override;
};
#endif