Add initial support for texture views

This commit is contained in:
SirLynix
2022-11-30 18:45:07 +01:00
committed by Jérôme Leclercq
parent 902dee6121
commit 42f8cdb151
13 changed files with 239 additions and 78 deletions

View File

@@ -60,8 +60,9 @@ namespace Nz::GL
StorageBuffers,
TextureCompressionS3tc,
TextureFilterAnisotropic,
TextureView,
Max = TextureFilterAnisotropic
Max = TextureView
};
enum class ExtensionStatus

View File

@@ -26,6 +26,9 @@ typedef void (GL_APIENTRYP PFNGLPOLYGONMODEPROC) (GLenum face, GLenum mode);
// Depth clamp (OpenGL 3.2)
#define GL_DEPTH_CLAMP 0x864F
// Texture views (OpenGL 4.3)
typedef void (GL_APIENTRYP PFNGLTEXTUREVIEWPROC) (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers);
// Clip control (OpenGL 4.5)
#define GL_LOWER_LEFT 0x8CA1
#define GL_UPPER_LEFT 0x8CA2
@@ -200,6 +203,8 @@ typedef void (GL_APIENTRYP PFNGLSPECIALIZESHADERPROC) (GLuint shader, const GLch
extCb(glObjectLabel, PFNGLOBJECTLABELPROC) \
extCb(glPopDebugGroup, PFNGLPOPDEBUGGROUPPROC) \
extCb(glPushDebugGroup, PFNGLPUSHDEBUGGROUPPROC) \
/* OpenGL 4.3 - GL_ARB_texture_view */ \
extCb(glTextureView, PFNGLTEXTUREVIEWPROC) \
/* OpenGL 4.5 - GL_ARB_clip_control/GL_EXT_clip_control */ \
extCb(glClipControl, PFNGLCLIPCONTROLPROC) \
/* OpenGL 4.6 - GL_ARB_spirv_extensions */\

View File

@@ -39,6 +39,7 @@ namespace Nz::GL
inline void TexStorage3D(TextureTarget target, GLint levels, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth);
inline void TexSubImage2D(TextureTarget target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* data);
inline void TexSubImage3D(TextureTarget target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void* data);
inline void TextureView(GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers);
Texture& operator=(const Texture&) = delete;
Texture& operator=(Texture&&) noexcept = default;

View File

@@ -111,6 +111,12 @@ namespace Nz::GL
//< TODO: Handle errors
}
inline void Texture::TextureView(GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers)
{
const Context& context = EnsureDeviceContext();
context.glTextureView(m_objectId, target, origtexture, internalformat, minlevel, numlevels, minlayer, numlayers);
}
inline GLuint Texture::CreateHelper(OpenGLDevice& /*device*/, const Context& context)
{
GLuint texture = 0;